KILLED proof of input_8PWTgJzC7r.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), 417 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), 41 ms] (14) CpxTypedWeightedCompleteTrs (15) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CpxTypedWeightedCompleteTrs (17) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (18) CpxRNTS (19) InliningProof [UPPER BOUND(ID), 1530 ms] (20) CpxRNTS (21) SimplificationProof [BOTH BOUNDS(ID, ID), 9 ms] (22) CpxRNTS (23) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CpxRNTS (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (26) CpxRNTS (27) IntTrsBoundProof [UPPER BOUND(ID), 194 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 27 ms] (30) CpxRNTS (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (32) CpxRNTS (33) IntTrsBoundProof [UPPER BOUND(ID), 91 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 63 ms] (36) CpxRNTS (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 546 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 241 ms] (42) CpxRNTS (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 180 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] (48) CpxRNTS (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 172 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (54) CpxRNTS (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 212 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 33 ms] (60) CpxRNTS (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 241 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 5 ms] (66) CpxRNTS (67) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 116 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (72) CpxRNTS (73) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 2041 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 321 ms] (78) CpxRNTS (79) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 159 ms] (82) CpxRNTS (83) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (84) CpxRNTS (85) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 564 ms] (88) CpxRNTS (89) IntTrsBoundProof [UPPER BOUND(ID), 85 ms] (90) CpxRNTS (91) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (92) CpxRNTS (93) IntTrsBoundProof [UPPER BOUND(ID), 169 ms] (94) CpxRNTS (95) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (96) CpxRNTS (97) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (98) CpxRNTS (99) IntTrsBoundProof [UPPER BOUND(ID), 88 ms] (100) CpxRNTS (101) IntTrsBoundProof [UPPER BOUND(ID), 5 ms] (102) CpxRNTS (103) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (104) CpxRNTS (105) IntTrsBoundProof [UPPER BOUND(ID), 849 ms] (106) CpxRNTS (107) IntTrsBoundProof [UPPER BOUND(ID), 63 ms] (108) CpxRNTS (109) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (110) CpxRNTS (111) IntTrsBoundProof [UPPER BOUND(ID), 548 ms] (112) CpxRNTS (113) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (114) CpxRNTS (115) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (116) CpxRNTS (117) IntTrsBoundProof [UPPER BOUND(ID), 3765 ms] (118) CpxRNTS (119) IntTrsBoundProof [UPPER BOUND(ID), 397 ms] (120) CpxRNTS (121) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (122) CpxRNTS (123) IntTrsBoundProof [UPPER BOUND(ID), 4290 ms] (124) CpxRNTS (125) IntTrsBoundProof [UPPER BOUND(ID), 579 ms] (126) CpxRNTS (127) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (128) CpxRNTS (129) IntTrsBoundProof [UPPER BOUND(ID), 1228 ms] (130) CpxRNTS (131) IntTrsBoundProof [UPPER BOUND(ID), 166 ms] (132) CpxRNTS (133) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (134) CpxRNTS (135) IntTrsBoundProof [UPPER BOUND(ID), 9105 ms] (136) CpxRNTS (137) IntTrsBoundProof [UPPER BOUND(ID), 3256 ms] (138) CpxRNTS (139) CompletionProof [UPPER BOUND(ID), 26 ms] (140) CpxTypedWeightedCompleteTrs (141) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 33 ms] (142) CpxRNTS (143) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (144) CdtProblem (145) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (146) CdtProblem (147) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (148) CdtProblem (149) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CdtProblem (151) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (152) CdtProblem (153) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 288 ms] (154) CdtProblem (155) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 1 ms] (156) CdtProblem (157) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 137 ms] (158) CdtProblem (159) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (160) CdtProblem (161) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 116 ms] (162) CdtProblem (163) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (164) CdtProblem (165) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (166) CdtProblem (167) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (168) CdtProblem (169) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 1101 ms] (170) CdtProblem (171) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (172) CdtProblem (173) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 1 ms] (178) CdtProblem (179) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (184) CdtProblem (185) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (188) CdtProblem (189) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (190) CdtProblem (191) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (194) CdtProblem (195) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (230) CdtProblem (231) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (242) CdtProblem (243) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (248) CdtProblem (249) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (260) CdtProblem (261) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (262) CdtProblem (263) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (264) CdtProblem (265) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (266) CdtProblem (267) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (268) CdtProblem (269) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (270) CdtProblem (271) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (272) CdtProblem (273) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (274) CdtProblem (275) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (276) CdtProblem (277) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (278) CdtProblem (279) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (280) CdtProblem (281) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (282) CdtProblem (283) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (284) 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: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) appendreverse#1(nil, @sofar) -> @sofar bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) bftMult'#3(nil, @acc, @queue) -> @acc bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(@t, @queue) -> enqueue#1(@queue, @t) enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil reverse(@xs) -> appendreverse(@xs, nil) 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: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) appendreverse#1(nil, @sofar) -> @sofar bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) bftMult'#3(nil, @acc, @queue) -> @acc bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(@t, @queue) -> enqueue#1(@queue, @t) enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil reverse(@xs) -> appendreverse(@xs, nil) 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: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) appendreverse#1(nil, @sofar) -> @sofar bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) bftMult'#3(nil, @acc, @queue) -> @acc bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(@t, @queue) -> enqueue#1(@queue, @t) enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil reverse(@xs) -> appendreverse(@xs, nil) 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: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) appendreverse#1(nil, @sofar) -> @sofar bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) bftMult'#3(nil, @acc, @queue) -> @acc bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(@t, @queue) -> enqueue#1(@queue, @t) enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil reverse(@xs) -> appendreverse(@xs, nil) #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: *(@x, @y) -> #mult(@x, @y) [1] +(@x, @y) -> #add(@x, @y) [1] appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) [1] appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) [1] appendreverse#1(nil, @sofar) -> @sofar [1] bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) [1] bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) [1] bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) [1] bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) [1] bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) [1] bftMult'#3(nil, @acc, @queue) -> @acc [1] bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) [1] bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) [1] bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) [1] dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) [1] dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) [1] dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) [1] dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) [1] enqueue(@t, @queue) -> enqueue#1(@queue, @t) [1] enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] reverse(@xs) -> appendreverse(@xs, nil) [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: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) [1] appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) [1] appendreverse#1(nil, @sofar) -> @sofar [1] bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) [1] bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) [1] bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) [1] bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) [1] bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) [1] bftMult'#3(nil, @acc, @queue) -> @acc [1] bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) [1] bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) [1] bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) [1] dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) [1] dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) [1] dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) [1] dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) [1] enqueue(@t, @queue) -> enqueue#1(@queue, @t) [1] enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] reverse(@xs) -> appendreverse(@xs, nil) [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: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) [1] appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) [1] appendreverse#1(nil, @sofar) -> @sofar [1] bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) [1] bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) [1] bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) [1] bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) [1] bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) [1] bftMult'#3(nil, @acc, @queue) -> @acc [1] bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) [1] bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) [1] bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) [1] dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) [1] dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) [1] dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) [1] dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) [1] enqueue(@t, @queue) -> enqueue#1(@queue, @t) [1] enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] reverse(@xs) -> appendreverse(@xs, nil) [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: times :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos plus :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos :: :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos nil :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos tuple#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos leaf :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos node :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos reverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #0 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #neg :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos Rewrite Strategy: INNERMOST ---------------------------------------- (13) 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: bftMult_2 bftMult'_2 bftMult'#1_2 bftMult'#3_3 bftMult'#4_3 bftMult'#5_3 (c) The following functions are completely defined: matrixMult_2 enqueue_2 lineMult_3 bftMult'#2_1 times_2 reverse_1 dequeue_2 enqueue#1_2 dequeue#1_2 lineMult#1_3 matrixMult#1_2 appendreverse_2 dequeue#2_1 appendreverse#1_2 lineMult#2_4 computeLine_3 plus_2 computeLine#1_3 computeLine#2_4 #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] bftMult'#2(v0) -> null_bftMult'#2 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] dequeue#1(v0, v1) -> null_dequeue#1 [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] matrixMult#1(v0, v1) -> null_matrixMult#1 [0] dequeue#2(v0) -> null_dequeue#2 [0] appendreverse#1(v0, v1) -> null_appendreverse#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] computeLine#1(v0, v1, v2) -> null_computeLine#1 [0] computeLine#2(v0, v1, v2, v3) -> null_computeLine#2 [0] And the following fresh constants: null_#add, null_#mult, null_#natmult, null_#pred, null_#succ, null_bftMult'#2, null_enqueue#1, null_dequeue#1, null_lineMult#1, null_matrixMult#1, null_dequeue#2, null_appendreverse#1, null_lineMult#2, null_computeLine#1, null_computeLine#2 ---------------------------------------- (14) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) [1] appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) [1] appendreverse#1(nil, @sofar) -> @sofar [1] bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) [1] bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) [1] bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) [1] bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) [1] bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) [1] bftMult'#3(nil, @acc, @queue) -> @acc [1] bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) [1] bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) [1] bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) [1] dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) [1] dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) [1] dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) [1] dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) [1] enqueue(@t, @queue) -> enqueue#1(@queue, @t) [1] enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] reverse(@xs) -> appendreverse(@xs, nil) [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] bftMult'#2(v0) -> null_bftMult'#2 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] dequeue#1(v0, v1) -> null_dequeue#1 [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] matrixMult#1(v0, v1) -> null_matrixMult#1 [0] dequeue#2(v0) -> null_dequeue#2 [0] appendreverse#1(v0, v1) -> null_appendreverse#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] computeLine#1(v0, v1, v2) -> null_computeLine#1 [0] computeLine#2(v0, v1, v2, v3) -> null_computeLine#2 [0] The TRS has the following type information: times :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 plus :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 appendreverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 :: :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 nil :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult' :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 tuple#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#3 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 dequeue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#4 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 leaf :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 node :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#5 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 enqueue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 matrixMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 computeLine :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 lineMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 reverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #0 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #neg :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #s :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #pos :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 Rewrite Strategy: INNERMOST ---------------------------------------- (15) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (16) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) [1] appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) [1] appendreverse#1(nil, @sofar) -> @sofar [1] bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) [1] bftMult'(tuple#2(@dequeue@1', @dequeue@2'), @acc) -> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), @acc) [2] bftMult'(@queue, @acc) -> bftMult'#1(null_bftMult'#2, @acc) [1] bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) [1] bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) [1] bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) [1] bftMult'#3(nil, @acc, @queue) -> @acc [1] bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) [1] bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue#1(@queue, @t1)), @acc, @y) [2] bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult#1(@acc, @y)) [2] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) [2] computeLine#2(nil, @acc, @x, @xs) -> nil [1] dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) [1] dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) [1] dequeue#1(nil, @inq) -> dequeue#2(appendreverse(@inq, nil)) [2] dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) [1] dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) [1] enqueue(@t, @queue) -> enqueue#1(@queue, @t) [1] enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(#mult(@x, @n), @y), lineMult(@n, @xs, @ys)) [2] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] reverse(@xs) -> appendreverse(@xs, nil) [1] #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] bftMult'#2(v0) -> null_bftMult'#2 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] dequeue#1(v0, v1) -> null_dequeue#1 [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] matrixMult#1(v0, v1) -> null_matrixMult#1 [0] dequeue#2(v0) -> null_dequeue#2 [0] appendreverse#1(v0, v1) -> null_appendreverse#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] computeLine#1(v0, v1, v2) -> null_computeLine#1 [0] computeLine#2(v0, v1, v2, v3) -> null_computeLine#2 [0] The TRS has the following type information: times :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 plus :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 appendreverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 :: :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 nil :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult' :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 tuple#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#3 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 dequeue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#4 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 leaf :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 node :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 bftMult'#5 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 enqueue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 matrixMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 computeLine :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 lineMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 reverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #0 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #neg :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #s :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #pos :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 #natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_#succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 null_computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_bftMult'#2:null_enqueue#1:null_dequeue#1:null_lineMult#1:null_matrixMult#1:null_dequeue#2:null_appendreverse#1:null_lineMult#2:null_computeLine#1:null_computeLine#2 Rewrite Strategy: INNERMOST ---------------------------------------- (17) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 2 leaf => 1 #0 => 0 null_#add => 0 null_#mult => 0 null_#natmult => 0 null_#pred => 0 null_#succ => 0 null_bftMult'#2 => 0 null_enqueue#1 => 0 null_dequeue#1 => 0 null_lineMult#1 => 0 null_matrixMult#1 => 0 null_dequeue#2 => 0 null_appendreverse#1 => 0 null_lineMult#2 => 0 null_computeLine#1 => 0 null_computeLine#2 => 0 ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: #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) appendreverse(z, z') -{ 1 }-> appendreverse#1(@toreverse, @sofar) :|: z = @toreverse, @toreverse >= 0, @sofar >= 0, z' = @sofar appendreverse#1(z, z') -{ 1 }-> @sofar :|: z = 2, @sofar >= 0, z' = @sofar appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + @sofar) :|: @a >= 0, z = 1 + @a + @as, @sofar >= 0, @as >= 0, z' = @sofar appendreverse#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + @t + 2) + 2, @acc) :|: z = @t, @t >= 0, @acc >= 0, z' = @acc bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), @acc) :|: @dequeue@1' >= 0, @dequeue@2' >= 0, @acc >= 0, z = 1 + @dequeue@1' + @dequeue@2', z' = @acc bftMult'(z, z') -{ 1 }-> bftMult'#1(0, @acc) :|: @queue >= 0, @acc >= 0, z' = @acc, z = @queue bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, @acc, @queue) :|: @queue >= 0, @acc >= 0, @elem >= 0, z' = @acc, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 bftMult'#3(z, z', z'') -{ 1 }-> @acc :|: z = 2, @queue >= 0, z'' = @queue, @acc >= 0, z' = @acc bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, @acc, @queue) :|: @queue >= 0, z'' = @queue, @t >= 0, @acc >= 0, z' = @acc, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 2 }-> bftMult'#5(enqueue(@t2, enqueue#1(@queue, @t1)), @acc, @y) :|: @queue >= 0, z'' = @queue, @acc >= 0, @t1 >= 0, @t2 >= 0, z' = @acc, z = 1 + @y + @t1 + @t2, @y >= 0 bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(@queue, @acc) :|: @queue >= 0, z'' = @queue, @acc >= 0, z = 1, z' = @acc bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(@queue', matrixMult#1(@acc, @y)) :|: @acc >= 0, z' = @acc, @queue' >= 0, z = @queue', @y >= 0, z'' = @y computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z = 2, z'' = @m, @acc >= 0, @m >= 0, z' = @acc computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(@m, @acc, @x, @xs) :|: z'' = @m, @acc >= 0, @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @acc, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(@outq, @inq) :|: z' = @inq, @inq >= 0, z = @outq, @outq >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(@inq, 2)) :|: z = 2, z' = @inq, @inq >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + @inq) :|: z' = @inq, @ts >= 0, @t >= 0, z = 1 + @t + @ts, @inq >= 0 dequeue#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> enqueue#1(@queue, @t) :|: @queue >= 0, z = @t, @t >= 0, z' = @queue enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + @t + @inq) :|: @t >= 0, z' = @t, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(@l2, @n, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, z'' = @n, @l2 >= 0, @n >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' = @l2, z'' = @n, @l2 >= 0, @n >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(@x, @n) + lineMult(@n, @xs, 2) :|: z = 2, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(@x, @n), @y) + lineMult(@n, @xs, @ys) :|: z = 1 + @y + @ys, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, @m2 >= 0, z' = @m2 matrixMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, @m2, 2) + matrixMult(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 reverse(z) -{ 1 }-> appendreverse(@xs, 2) :|: z = @xs, @xs >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 ---------------------------------------- (19) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + @t + @inq) :|: @t >= 0, z' = @t, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq #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 enqueue(z, z') -{ 1 }-> enqueue#1(@queue, @t) :|: @queue >= 0, z = @t, @t >= 0, z' = @queue ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: #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) appendreverse(z, z') -{ 1 }-> appendreverse#1(@toreverse, @sofar) :|: z = @toreverse, @toreverse >= 0, @sofar >= 0, z' = @sofar appendreverse#1(z, z') -{ 1 }-> @sofar :|: z = 2, @sofar >= 0, z' = @sofar appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + @sofar) :|: @a >= 0, z = 1 + @a + @as, @sofar >= 0, @as >= 0, z' = @sofar appendreverse#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + @t + 2) + 2, @acc) :|: z = @t, @t >= 0, @acc >= 0, z' = @acc bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), @acc) :|: @dequeue@1' >= 0, @dequeue@2' >= 0, @acc >= 0, z = 1 + @dequeue@1' + @dequeue@2', z' = @acc bftMult'(z, z') -{ 1 }-> bftMult'#1(0, @acc) :|: @queue >= 0, @acc >= 0, z' = @acc, z = @queue bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, @acc, @queue) :|: @queue >= 0, @acc >= 0, @elem >= 0, z' = @acc, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 bftMult'#3(z, z', z'') -{ 1 }-> @acc :|: z = 2, @queue >= 0, z'' = @queue, @acc >= 0, z' = @acc bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, @acc, @queue) :|: @queue >= 0, z'' = @queue, @t >= 0, @acc >= 0, z' = @acc, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), @acc, @y) :|: @queue >= 0, z'' = @queue, @acc >= 0, @t1 >= 0, @t2 >= 0, z' = @acc, z = 1 + @y + @t1 + @t2, @y >= 0, v0 >= 0, v1 >= 0, @queue = v0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), @acc, @y) :|: @queue >= 0, z'' = @queue, @acc >= 0, @t1 >= 0, @t2 >= 0, z' = @acc, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, @queue = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(@queue, @acc) :|: @queue >= 0, z'' = @queue, @acc >= 0, z = 1, z' = @acc bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(@queue', matrixMult#1(@acc, @y)) :|: @acc >= 0, z' = @acc, @queue' >= 0, z = @queue', @y >= 0, z'' = @y computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z = 2, z'' = @m, @acc >= 0, @m >= 0, z' = @acc computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(@m, @acc, @x, @xs) :|: z'' = @m, @acc >= 0, @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @acc, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(@outq, @inq) :|: z' = @inq, @inq >= 0, z = @outq, @outq >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(@inq, 2)) :|: z = 2, z' = @inq, @inq >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + @inq) :|: z' = @inq, @ts >= 0, @t >= 0, z = 1 + @t + @ts, @inq >= 0 dequeue#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: @queue >= 0, z = @t, @t >= 0, z' = @queue, v0 >= 0, v1 >= 0, @queue = v0, @t = v1 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + @t' + @inq) :|: @queue >= 0, z = @t, @t >= 0, z' = @queue, @t' >= 0, @t = @t', @inq >= 0, @outq >= 0, @queue = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + @t + @inq) :|: @t >= 0, z' = @t, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(@l2, @n, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, z'' = @n, @l2 >= 0, @n >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' = @l2, z'' = @n, @l2 >= 0, @n >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(@x, @n) + lineMult(@n, @xs, 2) :|: z = 2, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(@x, @n), @y) + lineMult(@n, @xs, @ys) :|: z = 1 + @y + @ys, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, @m2 >= 0, z' = @m2 matrixMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, @m2, 2) + matrixMult(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 reverse(z) -{ 1 }-> appendreverse(@xs, 2) :|: z = @xs, @xs >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 ---------------------------------------- (21) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 ---------------------------------------- (23) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { dequeue#2 } { enqueue } { appendreverse#1, appendreverse } { enqueue#1 } { #pred } { #succ } { dequeue#1 } { reverse } { #add } { dequeue } { #natmult } { plus } { bftMult'#2 } { #mult } { times } { lineMult, lineMult#2, lineMult#1 } { computeLine, computeLine#1, computeLine#2 } { matrixMult#1, matrixMult } { bftMult', bftMult'#4, bftMult'#5, bftMult'#3, bftMult'#1 } { bftMult } ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue#2}, {enqueue}, {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} ---------------------------------------- (25) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue#2}, {enqueue}, {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} ---------------------------------------- (27) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: dequeue#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + z ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue#2}, {enqueue}, {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: ?, size: O(n^1) [6 + z] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: dequeue#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue}, {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] ---------------------------------------- (31) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue}, {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] ---------------------------------------- (33) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: enqueue after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue}, {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: enqueue after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] ---------------------------------------- (37) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] ---------------------------------------- (39) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: appendreverse#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' Computed SIZE bound using CoFloCo for: appendreverse after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {appendreverse#1,appendreverse}, {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: ?, size: O(n^1) [z + z'] appendreverse: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: appendreverse#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + 2*z Computed RUNTIME bound using CoFloCo for: appendreverse after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 2*z ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 1 }-> appendreverse#1(z, z') :|: z >= 0, z' >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + z') :|: @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 2 }-> dequeue#2(appendreverse(z', 2)) :|: z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 1 }-> appendreverse(z, 2) :|: z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] ---------------------------------------- (43) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] ---------------------------------------- (45) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: enqueue#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue#1}, {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: enqueue#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 3 }-> bftMult'#5(enqueue#1(@queue', @t), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(enqueue#1(@queue', @t'), z', @y) :|: z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] ---------------------------------------- (49) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] ---------------------------------------- (51) 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 ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (53) 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 ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: #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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (55) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (57) 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 ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (59) 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 ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (61) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (63) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: dequeue#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + z + z' ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue#1}, {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: ?, size: O(n^1) [8 + z + z'] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: dequeue#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 2*z' ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(z, z') :|: z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] ---------------------------------------- (67) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] ---------------------------------------- (69) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: reverse after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {reverse}, {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: reverse after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 5 + 2*z ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] ---------------------------------------- (73) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] ---------------------------------------- (75) 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' ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (77) 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 ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (79) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (81) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: dequeue after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + z + z' ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {dequeue}, {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: ?, size: O(n^1) [8 + z + z'] ---------------------------------------- (83) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: dequeue after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + 2*z' ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 2 }-> bftMult'#1(dequeue(@dequeue@1', @dequeue@2'), z') :|: @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] ---------------------------------------- (85) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] ---------------------------------------- (87) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #natmult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 4 + 4*z + 4*z*z' + 4*z' ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: ?, size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (89) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #natmult after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (90) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (91) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (92) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (93) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (94) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (95) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (96) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (97) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (98) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (99) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: bftMult'#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + z ---------------------------------------- (100) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult'#2}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: ?, size: O(n^1) [7 + z] ---------------------------------------- (101) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: bftMult'#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 2*z ---------------------------------------- (102) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] ---------------------------------------- (103) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (104) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] ---------------------------------------- (105) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #mult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' ---------------------------------------- (106) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: ?, size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (107) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #mult after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (108) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (109) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (110) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s28 + lineMult(z', z1, @ys) :|: s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (111) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' ---------------------------------------- (112) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s28 + lineMult(z', z1, @ys) :|: s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: ?, size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (113) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: times after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (114) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s28 + lineMult(z', z1, @ys) :|: s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 2) :|: z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (115) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (116) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s28 + lineMult(z', z1, @ys) :|: s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + s29 + lineMult(z', z1, 2) :|: s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (117) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: lineMult after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: lineMult#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: lineMult#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (118) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s28 + lineMult(z', z1, @ys) :|: s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + s29 + lineMult(z', z1, 2) :|: s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: ?, size: INF lineMult#2: runtime: ?, size: INF lineMult#1: runtime: ?, size: INF ---------------------------------------- (119) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: lineMult after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 5*z' Computed RUNTIME bound using CoFloCo for: lineMult#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 10 + 5*z1 Computed RUNTIME bound using CoFloCo for: lineMult#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + 5*z ---------------------------------------- (120) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s28 + lineMult(z', z1, @ys) :|: s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + s29 + lineMult(z', z1, 2) :|: s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF ---------------------------------------- (121) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 8 + 5*@l }-> computeLine(z1, @ls, s30) :|: s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF ---------------------------------------- (123) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: computeLine after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: computeLine#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: computeLine#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 8 + 5*@l }-> computeLine(z1, @ls, s30) :|: s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: ?, size: INF computeLine#1: runtime: ?, size: INF computeLine#2: runtime: ?, size: INF ---------------------------------------- (125) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: computeLine after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 21 + 2*z + 10*z' Computed RUNTIME bound using CoFloCo for: computeLine#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 18 + 2*z + 10*z'' Computed RUNTIME bound using CoFloCo for: computeLine#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 19 + 10*z + 2*z1 ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 8 + 5*@l }-> computeLine(z1, @ls, s30) :|: s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 2) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF ---------------------------------------- (127) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (128) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 19 + 2*z + 10*z' }-> s35 :|: s35 >= 0, s35 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 20 + 2*@xs + 10*z'' }-> s36 :|: s36 >= 0, s36 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 29 + 5*@l + 10*@ls + 2*z1 }-> s37 :|: s37 >= 0, s37 <= inf5, s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 22 + 2*@l + 10*z' }-> 1 + s38 + matrixMult(@ls, z') :|: s38 >= 0, s38 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF ---------------------------------------- (129) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: matrixMult#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: matrixMult after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 19 + 2*z + 10*z' }-> s35 :|: s35 >= 0, s35 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 20 + 2*@xs + 10*z'' }-> s36 :|: s36 >= 0, s36 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 29 + 5*@l + 10*@ls + 2*z1 }-> s37 :|: s37 >= 0, s37 <= inf5, s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 22 + 2*@l + 10*z' }-> 1 + s38 + matrixMult(@ls, z') :|: s38 >= 0, s38 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {matrixMult#1,matrixMult}, {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF matrixMult#1: runtime: ?, size: INF matrixMult: runtime: ?, size: INF ---------------------------------------- (131) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: matrixMult#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 46*z + 20*z*z' + 4*z^2 Computed RUNTIME bound using KoAT for: matrixMult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2 + 46*z + 20*z*z' + 4*z^2 ---------------------------------------- (132) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 2 }-> bftMult'(z, matrixMult#1(z', z'')) :|: z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 19 + 2*z + 10*z' }-> s35 :|: s35 >= 0, s35 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 20 + 2*@xs + 10*z'' }-> s36 :|: s36 >= 0, s36 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 29 + 5*@l + 10*@ls + 2*z1 }-> s37 :|: s37 >= 0, s37 <= inf5, s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 22 + 2*@l + 10*z' }-> 1 + s38 + matrixMult(@ls, z') :|: s38 >= 0, s38 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF matrixMult#1: runtime: O(n^2) [1 + 46*z + 20*z*z' + 4*z^2], size: INF matrixMult: runtime: O(n^2) [2 + 46*z + 20*z*z' + 4*z^2], size: INF ---------------------------------------- (133) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (134) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 3 + 46*z' + 20*z'*z'' + 4*z'^2 }-> bftMult'(z, s39) :|: s39 >= 0, s39 <= inf7, z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 19 + 2*z + 10*z' }-> s35 :|: s35 >= 0, s35 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 20 + 2*@xs + 10*z'' }-> s36 :|: s36 >= 0, s36 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 29 + 5*@l + 10*@ls + 2*z1 }-> s37 :|: s37 >= 0, s37 <= inf5, s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 2 + 46*z + 20*z*z' + 4*z^2 }-> s40 :|: s40 >= 0, s40 <= inf8, z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 24 + 2*@l + 46*@ls + 20*@ls*z' + 4*@ls^2 + 10*z' }-> 1 + s38 + s41 :|: s41 >= 0, s41 <= inf9, s38 >= 0, s38 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF matrixMult#1: runtime: O(n^2) [1 + 46*z + 20*z*z' + 4*z^2], size: INF matrixMult: runtime: O(n^2) [2 + 46*z + 20*z*z' + 4*z^2], size: INF ---------------------------------------- (135) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: bftMult' after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: bftMult'#4 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: bftMult'#5 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: bftMult'#3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: bftMult'#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (136) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 3 + 46*z' + 20*z'*z'' + 4*z'^2 }-> bftMult'(z, s39) :|: s39 >= 0, s39 <= inf7, z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 19 + 2*z + 10*z' }-> s35 :|: s35 >= 0, s35 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 20 + 2*@xs + 10*z'' }-> s36 :|: s36 >= 0, s36 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 29 + 5*@l + 10*@ls + 2*z1 }-> s37 :|: s37 >= 0, s37 <= inf5, s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 2 + 46*z + 20*z*z' + 4*z^2 }-> s40 :|: s40 >= 0, s40 <= inf8, z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 24 + 2*@l + 46*@ls + 20*@ls*z' + 4*@ls^2 + 10*z' }-> 1 + s38 + s41 :|: s41 >= 0, s41 <= inf9, s38 >= 0, s38 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF matrixMult#1: runtime: O(n^2) [1 + 46*z + 20*z*z' + 4*z^2], size: INF matrixMult: runtime: O(n^2) [2 + 46*z + 20*z*z' + 4*z^2], size: INF bftMult': runtime: ?, size: INF bftMult'#4: runtime: ?, size: INF bftMult'#5: runtime: ?, size: INF bftMult'#3: runtime: ?, size: INF bftMult'#1: runtime: ?, size: INF ---------------------------------------- (137) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: bftMult' after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (138) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s16 :|: s14 >= 0, s14 <= 2 * (1 + (1 + (z - 4))) + z', s15 >= 0, s15 <= s14 + 2, s16 >= 0, s16 <= s15 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s9 :|: s9 >= 0, s9 <= 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 #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 + s22 :|: s22 >= 0, s22 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s12 :|: s12 >= 0, s12 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s25 :|: s23 >= 0, s23 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s24 >= 0, s24 <= 2 * (1 + z') + s23, s25 >= 0, s25 <= 2 * (1 + z') + s24, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 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 appendreverse(z, z') -{ 4 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 appendreverse#1(z, z') -{ 5 + 2*@as }-> s' :|: s' >= 0, s' <= @as + (1 + @a + z'), @a >= 0, z = 1 + @a + @as, z' >= 0, @as >= 0 appendreverse#1(z, z') -{ 1 }-> z' :|: z = 2, z' >= 0 appendreverse#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + z + 2) + 2, z') :|: z >= 0, z' >= 0 bftMult'(z, z') -{ 10 + 2*@dequeue@2' }-> bftMult'#1(s20, z') :|: s20 >= 0, s20 <= @dequeue@1' + @dequeue@2' + 8, @dequeue@1' >= 0, @dequeue@2' >= 0, z' >= 0, z = 1 + @dequeue@1' + @dequeue@2' bftMult'(z, z') -{ 1 }-> bftMult'#1(0, z') :|: z >= 0, z' >= 0 bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, z', @queue) :|: @queue >= 0, z' >= 0, @elem >= 0, z = 1 + @elem + @queue bftMult'#2(z) -{ 9 + 2*@dequeue@2 }-> s21 :|: s21 >= 0, s21 <= @dequeue@1 + @dequeue@2 + 8, z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: z >= 0 bftMult'#3(z, z', z'') -{ 1 }-> z' :|: z = 2, z'' >= 0, z' >= 0 bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, z', z'') :|: z'' >= 0, @t >= 0, z' >= 0, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#4(z, z', z'') -{ 4 }-> bftMult'#5(s3, z', @y) :|: s3 >= 0, s3 <= @queue' + @t + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, v1 >= 0, @t1 = v1, @queue' >= 0, @t2 = @t, @t >= 0, 0 = @queue' bftMult'#4(z, z', z'') -{ 5 }-> bftMult'#5(s4, z', @y) :|: s4 >= 0, s4 <= @queue' + @t' + 1, z'' >= 0, z' >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @y + @t1 + @t2, @y >= 0, @t >= 0, @t1 = @t, @inq >= 0, @outq >= 0, z'' = 1 + @outq + @inq, @queue' >= 0, @t2 = @t', @t' >= 0, 1 + @outq + (1 + @t + @inq) = @queue' bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(z'', z') :|: z'' >= 0, z' >= 0, z = 1 bftMult'#5(z, z', z'') -{ 3 + 46*z' + 20*z'*z'' + 4*z'^2 }-> bftMult'(z, s39) :|: s39 >= 0, s39 <= inf7, z' >= 0, z >= 0, z'' >= 0 computeLine(z, z', z'') -{ 19 + 2*z + 10*z' }-> s35 :|: s35 >= 0, s35 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 20 + 2*@xs + 10*z'' }-> s36 :|: s36 >= 0, s36 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z = 2, z' >= 0, z'' >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 computeLine#2(z, z', z'', z1) -{ 29 + 5*@l + 10*@ls + 2*z1 }-> s37 :|: s37 >= 0, s37 <= inf5, s30 >= 0, s30 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 dequeue(z, z') -{ 8 + 2*z' }-> s10 :|: s10 >= 0, s10 <= z + z' + 8, z' >= 0, z >= 0 dequeue#1(z, z') -{ 7 + 2*z' }-> s2 :|: s1 >= 0, s1 <= z' + 2, s2 >= 0, s2 <= s1 + 6, z = 2, z' >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + z') :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts, z' >= 0 dequeue#2(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + @outq + (1 + z + @inq) :|: z' >= 0, z >= 0, @inq >= 0, @outq >= 0, z' = 1 + @outq + @inq enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + z' + @inq) :|: z' >= 0, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 7 + 5*z' }-> s31 :|: s31 >= 0, s31 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s32 :|: s32 >= 0, s32 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s28 + s33 :|: s33 >= 0, s33 <= inf1, s27 >= 0, s27 <= 4 * (z' * z'') + 1, s28 >= 0, s28 <= 2 * s27 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s29 + s34 :|: s34 >= 0, s34 <= inf2, s29 >= 0, s29 <= 4 * (z' * z'') + 1, z = 2, z'' >= 0, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 2 + 46*z + 20*z*z' + 4*z^2 }-> s40 :|: s40 >= 0, s40 <= inf8, z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 matrixMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 24 + 2*@l + 46*@ls + 20*@ls*z' + 4*@ls^2 + 10*z' }-> 1 + s38 + s41 :|: s41 >= 0, s41 <= inf9, s38 >= 0, s38 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s11 :|: s11 >= 0, s11 <= 2 * z + z', z >= 0, z' >= 0 reverse(z) -{ 5 + 2*z }-> s'' :|: s'' >= 0, s'' <= z + 2, z >= 0 times(z, z') -{ 1 }-> s26 :|: s26 >= 0, s26 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bftMult',bftMult'#4,bftMult'#5,bftMult'#3,bftMult'#1}, {bftMult} Previous analysis results are: dequeue#2: runtime: O(1) [1], size: O(n^1) [6 + z] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] appendreverse#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] appendreverse: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] dequeue#1: runtime: O(n^1) [7 + 2*z'], size: O(n^1) [8 + z + z'] reverse: runtime: O(n^1) [5 + 2*z], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] dequeue: runtime: O(n^1) [8 + 2*z'], size: O(n^1) [8 + z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] bftMult'#2: runtime: O(n^1) [7 + 2*z], size: O(n^1) [7 + z] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [21 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [18 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [19 + 10*z + 2*z1], size: INF matrixMult#1: runtime: O(n^2) [1 + 46*z + 20*z*z' + 4*z^2], size: INF matrixMult: runtime: O(n^2) [2 + 46*z + 20*z*z' + 4*z^2], size: INF bftMult': runtime: INF, size: INF bftMult'#4: runtime: ?, size: INF bftMult'#5: runtime: ?, size: INF bftMult'#3: runtime: ?, size: INF bftMult'#1: runtime: ?, size: INF ---------------------------------------- (139) 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] appendreverse#1(v0, v1) -> null_appendreverse#1 [0] bftMult'#1(v0, v1) -> null_bftMult'#1 [0] bftMult'#2(v0) -> null_bftMult'#2 [0] bftMult'#3(v0, v1, v2) -> null_bftMult'#3 [0] bftMult'#4(v0, v1, v2) -> null_bftMult'#4 [0] computeLine#1(v0, v1, v2) -> null_computeLine#1 [0] computeLine#2(v0, v1, v2, v3) -> null_computeLine#2 [0] dequeue#1(v0, v1) -> null_dequeue#1 [0] dequeue#2(v0) -> null_dequeue#2 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] matrixMult#1(v0, v1) -> null_matrixMult#1 [0] And the following fresh constants: null_#add, null_#mult, null_#natmult, null_#pred, null_#succ, null_appendreverse#1, null_bftMult'#1, null_bftMult'#2, null_bftMult'#3, null_bftMult'#4, null_computeLine#1, null_computeLine#2, null_dequeue#1, null_dequeue#2, null_enqueue#1, null_lineMult#1, null_lineMult#2, null_matrixMult#1 ---------------------------------------- (140) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] appendreverse(@toreverse, @sofar) -> appendreverse#1(@toreverse, @sofar) [1] appendreverse#1(::(@a, @as), @sofar) -> appendreverse(@as, ::(@a, @sofar)) [1] appendreverse#1(nil, @sofar) -> @sofar [1] bftMult(@t, @acc) -> bftMult'(tuple#2(::(@t, nil), nil), @acc) [1] bftMult'(@queue, @acc) -> bftMult'#1(bftMult'#2(@queue), @acc) [1] bftMult'#1(tuple#2(@elem, @queue), @acc) -> bftMult'#3(@elem, @acc, @queue) [1] bftMult'#2(tuple#2(@dequeue@1, @dequeue@2)) -> dequeue(@dequeue@1, @dequeue@2) [1] bftMult'#3(::(@t, @_@3), @acc, @queue) -> bftMult'#4(@t, @acc, @queue) [1] bftMult'#3(nil, @acc, @queue) -> @acc [1] bftMult'#4(leaf, @acc, @queue) -> bftMult'(@queue, @acc) [1] bftMult'#4(node(@y, @t1, @t2), @acc, @queue) -> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) [1] bftMult'#5(@queue', @acc, @y) -> bftMult'(@queue', matrixMult(@acc, @y)) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] dequeue(@outq, @inq) -> dequeue#1(@outq, @inq) [1] dequeue#1(::(@t, @ts), @inq) -> tuple#2(::(@t, nil), tuple#2(@ts, @inq)) [1] dequeue#1(nil, @inq) -> dequeue#2(reverse(@inq)) [1] dequeue#2(::(@t, @ts)) -> tuple#2(::(@t, nil), tuple#2(@ts, nil)) [1] dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) [1] enqueue(@t, @queue) -> enqueue#1(@queue, @t) [1] enqueue#1(tuple#2(@outq, @inq), @t) -> tuple#2(@outq, ::(@t, @inq)) [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] reverse(@xs) -> appendreverse(@xs, nil) [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] appendreverse#1(v0, v1) -> null_appendreverse#1 [0] bftMult'#1(v0, v1) -> null_bftMult'#1 [0] bftMult'#2(v0) -> null_bftMult'#2 [0] bftMult'#3(v0, v1, v2) -> null_bftMult'#3 [0] bftMult'#4(v0, v1, v2) -> null_bftMult'#4 [0] computeLine#1(v0, v1, v2) -> null_computeLine#1 [0] computeLine#2(v0, v1, v2, v3) -> null_computeLine#2 [0] dequeue#1(v0, v1) -> null_dequeue#1 [0] dequeue#2(v0) -> null_dequeue#2 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] matrixMult#1(v0, v1) -> null_matrixMult#1 [0] The TRS has the following type information: times :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 plus :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 appendreverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 :: :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 nil :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult' :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 tuple#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult'#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult'#3 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 dequeue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult'#4 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 leaf :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 node :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 bftMult'#5 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 enqueue :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 matrixMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 computeLine :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 lineMult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 reverse :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #0 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #neg :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #s :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #pos :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 #natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 -> :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_#add :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_#mult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_#natmult :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_#pred :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_#succ :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_appendreverse#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_bftMult'#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_bftMult'#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_bftMult'#3 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_bftMult'#4 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_computeLine#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_computeLine#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_dequeue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_dequeue#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_enqueue#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_lineMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_lineMult#2 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 null_matrixMult#1 :: :::nil:tuple#2:leaf:node:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_appendreverse#1:null_bftMult'#1:null_bftMult'#2:null_bftMult'#3:null_bftMult'#4:null_computeLine#1:null_computeLine#2:null_dequeue#1:null_dequeue#2:null_enqueue#1:null_lineMult#1:null_lineMult#2:null_matrixMult#1 Rewrite Strategy: INNERMOST ---------------------------------------- (141) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 2 leaf => 1 #0 => 0 null_#add => 0 null_#mult => 0 null_#natmult => 0 null_#pred => 0 null_#succ => 0 null_appendreverse#1 => 0 null_bftMult'#1 => 0 null_bftMult'#2 => 0 null_bftMult'#3 => 0 null_bftMult'#4 => 0 null_computeLine#1 => 0 null_computeLine#2 => 0 null_dequeue#1 => 0 null_dequeue#2 => 0 null_enqueue#1 => 0 null_lineMult#1 => 0 null_lineMult#2 => 0 null_matrixMult#1 => 0 ---------------------------------------- (142) Obligation: Complexity RNTS consisting of the following rules: #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) appendreverse(z, z') -{ 1 }-> appendreverse#1(@toreverse, @sofar) :|: z = @toreverse, @toreverse >= 0, @sofar >= 0, z' = @sofar appendreverse#1(z, z') -{ 1 }-> @sofar :|: z = 2, @sofar >= 0, z' = @sofar appendreverse#1(z, z') -{ 1 }-> appendreverse(@as, 1 + @a + @sofar) :|: @a >= 0, z = 1 + @a + @as, @sofar >= 0, @as >= 0, z' = @sofar appendreverse#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 bftMult(z, z') -{ 1 }-> bftMult'(1 + (1 + @t + 2) + 2, @acc) :|: z = @t, @t >= 0, @acc >= 0, z' = @acc bftMult'(z, z') -{ 1 }-> bftMult'#1(bftMult'#2(@queue), @acc) :|: @queue >= 0, @acc >= 0, z' = @acc, z = @queue bftMult'#1(z, z') -{ 1 }-> bftMult'#3(@elem, @acc, @queue) :|: @queue >= 0, @acc >= 0, @elem >= 0, z' = @acc, z = 1 + @elem + @queue bftMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 bftMult'#2(z) -{ 1 }-> dequeue(@dequeue@1, @dequeue@2) :|: z = 1 + @dequeue@1 + @dequeue@2, @dequeue@2 >= 0, @dequeue@1 >= 0 bftMult'#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 bftMult'#3(z, z', z'') -{ 1 }-> @acc :|: z = 2, @queue >= 0, z'' = @queue, @acc >= 0, z' = @acc bftMult'#3(z, z', z'') -{ 1 }-> bftMult'#4(@t, @acc, @queue) :|: @queue >= 0, z'' = @queue, @t >= 0, @acc >= 0, z' = @acc, @_@3 >= 0, z = 1 + @t + @_@3 bftMult'#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 bftMult'#4(z, z', z'') -{ 1 }-> bftMult'#5(enqueue(@t2, enqueue(@t1, @queue)), @acc, @y) :|: @queue >= 0, z'' = @queue, @acc >= 0, @t1 >= 0, @t2 >= 0, z' = @acc, z = 1 + @y + @t1 + @t2, @y >= 0 bftMult'#4(z, z', z'') -{ 1 }-> bftMult'(@queue, @acc) :|: @queue >= 0, z'' = @queue, @acc >= 0, z = 1, z' = @acc bftMult'#4(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 bftMult'#5(z, z', z'') -{ 1 }-> bftMult'(@queue', matrixMult(@acc, @y)) :|: @acc >= 0, z' = @acc, @queue' >= 0, z = @queue', @y >= 0, z'' = @y computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z = 2, z'' = @m, @acc >= 0, @m >= 0, z' = @acc computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(@m, @acc, @x, @xs) :|: z'' = @m, @acc >= 0, @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @acc, @xs >= 0 computeLine#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 dequeue(z, z') -{ 1 }-> dequeue#1(@outq, @inq) :|: z' = @inq, @inq >= 0, z = @outq, @outq >= 0 dequeue#1(z, z') -{ 1 }-> dequeue#2(reverse(@inq)) :|: z = 2, z' = @inq, @inq >= 0 dequeue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#1(z, z') -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + @inq) :|: z' = @inq, @ts >= 0, @t >= 0, z = 1 + @t + @ts, @inq >= 0 dequeue#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z) -{ 1 }-> 1 + 2 + (1 + 2 + 2) :|: z = 2 dequeue#2(z) -{ 1 }-> 1 + (1 + @t + 2) + (1 + @ts + 2) :|: @ts >= 0, @t >= 0, z = 1 + @t + @ts enqueue(z, z') -{ 1 }-> enqueue#1(@queue, @t) :|: @queue >= 0, z = @t, @t >= 0, z' = @queue enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + @outq + (1 + @t + @inq) :|: @t >= 0, z' = @t, @inq >= 0, @outq >= 0, z = 1 + @outq + @inq lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(@l2, @n, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, z'' = @n, @l2 >= 0, @n >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' = @l2, z'' = @n, @l2 >= 0, @n >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(@x, @n) + lineMult(@n, @xs, 2) :|: z = 2, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + plus(times(@x, @n), @y) + lineMult(@n, @xs, @ys) :|: z = 1 + @y + @ys, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 2 :|: z = 2, @m2 >= 0, z' = @m2 matrixMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, @m2, 2) + matrixMult(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 reverse(z) -{ 1 }-> appendreverse(@xs, 2) :|: z = @xs, @xs >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (143) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (144) 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))) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 bftMult(z0, z1) -> bftMult'(tuple#2(::(z0, nil), nil), z1) bftMult'(z0, z1) -> bftMult'#1(bftMult'#2(z0), z1) bftMult'#1(tuple#2(z0, z1), z2) -> bftMult'#3(z0, z2, z1) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) bftMult'#3(::(z0, z1), z2, z3) -> bftMult'#4(z0, z2, z3) bftMult'#3(nil, z0, z1) -> z0 bftMult'#4(leaf, z0, z1) -> bftMult'(z1, z0) bftMult'#4(node(z0, z1, z2), z3, z4) -> bftMult'#5(enqueue(z2, enqueue(z1, z4)), z3, z0) bftMult'#5(z0, z1, z2) -> bftMult'(z0, matrixMult(z1, z2)) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil reverse(z0) -> appendreverse(z0, nil) 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 *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE#1(nil, z0) -> c28 BFTMULT(z0, z1) -> c29(BFTMULT'(tuple#2(::(z0, nil), nil), z1)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#3(nil, z0, z1) -> c34 BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0), ENQUEUE(z2, enqueue(z1, z4)), ENQUEUE(z1, z4)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c40 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c42 DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(::(z0, z1), z2) -> c44 DEQUEUE#1(nil, z0) -> c45(DEQUEUE#2(reverse(z0)), REVERSE(z0)) DEQUEUE#2(::(z0, z1)) -> c46 DEQUEUE#2(nil) -> c47 ENQUEUE(z0, z1) -> c48(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c49 LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c52 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c53(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c60 REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE#1(nil, z0) -> c28 BFTMULT(z0, z1) -> c29(BFTMULT'(tuple#2(::(z0, nil), nil), z1)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#3(nil, z0, z1) -> c34 BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0), ENQUEUE(z2, enqueue(z1, z4)), ENQUEUE(z1, z4)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c40 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c42 DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(::(z0, z1), z2) -> c44 DEQUEUE#1(nil, z0) -> c45(DEQUEUE#2(reverse(z0)), REVERSE(z0)) DEQUEUE#2(::(z0, z1)) -> c46 DEQUEUE#2(nil) -> c47 ENQUEUE(z0, z1) -> c48(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c49 LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c52 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c53(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c60 REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) K tuples:none Defined Rule Symbols: *_2, +_2, appendreverse_2, appendreverse#1_2, bftMult_2, bftMult'_2, bftMult'#1_2, bftMult'#2_1, bftMult'#3_3, bftMult'#4_3, bftMult'#5_3, computeLine_3, computeLine#1_3, computeLine#2_4, dequeue_2, dequeue#1_2, dequeue#2_1, enqueue_2, enqueue#1_2, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, reverse_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #ADD_2, #MULT_2, #NATMULT_2, #PRED_1, #SUCC_1, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, DEQUEUE#1_2, DEQUEUE#2_1, ENQUEUE_2, ENQUEUE#1_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_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_1, c25_1, c26_1, c27_1, c28, c29_1, c30_2, c31_1, c32_1, c33_1, c34, c35_1, c36_3, c37_2, c38_1, c39_1, c40, c41_2, c42, c43_1, c44, c45_2, c46, c47, c48_1, c49, c50_1, c51_1, c52, c53_2, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c60, c61_1 ---------------------------------------- (145) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: BFTMULT(z0, z1) -> c29(BFTMULT'(tuple#2(::(z0, nil), nil), z1)) Removed 28 trailing nodes: #PRED(#0) -> c16 #MULT(#neg(z0), #0) -> c8 #PRED(#pos(#s(#s(z0)))) -> c19 APPENDREVERSE#1(nil, z0) -> c28 #SUCC(#pos(#s(z0))) -> c23 #MULT(#0, #pos(z0)) -> c7 DEQUEUE#2(nil) -> c47 #SUCC(#neg(#s(#s(z0)))) -> c22 #ADD(#0, z0) -> c COMPUTELINE#1(nil, z0, z1) -> c40 ENQUEUE#1(tuple#2(z0, z1), z2) -> c49 DEQUEUE#2(::(z0, z1)) -> c46 COMPUTELINE#2(nil, z0, z1, z2) -> c42 #PRED(#pos(#s(#0))) -> c18 #PRED(#neg(#s(z0))) -> c17 DEQUEUE#1(::(z0, z1), z2) -> c44 #MULT(#0, #neg(z0)) -> c6 #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) MATRIXMULT#1(nil, z0) -> c60 #MULT(#0, #0) -> c5 LINEMULT#1(nil, z0, z1) -> c52 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#0) -> c20 #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #NATMULT(#0, z0) -> c14 #MULT(#pos(z0), #0) -> c11 ENQUEUE(z0, z1) -> c48(ENQUEUE#1(z1, z0)) BFTMULT'#3(nil, z0, z1) -> c34 ---------------------------------------- (146) 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))) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 bftMult(z0, z1) -> bftMult'(tuple#2(::(z0, nil), nil), z1) bftMult'(z0, z1) -> bftMult'#1(bftMult'#2(z0), z1) bftMult'#1(tuple#2(z0, z1), z2) -> bftMult'#3(z0, z2, z1) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) bftMult'#3(::(z0, z1), z2, z3) -> bftMult'#4(z0, z2, z3) bftMult'#3(nil, z0, z1) -> z0 bftMult'#4(leaf, z0, z1) -> bftMult'(z1, z0) bftMult'#4(node(z0, z1, z2), z3, z4) -> bftMult'#5(enqueue(z2, enqueue(z1, z4)), z3, z0) bftMult'#5(z0, z1, z2) -> bftMult'(z0, matrixMult(z1, z2)) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil reverse(z0) -> appendreverse(z0, nil) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0), ENQUEUE(z2, enqueue(z1, z4)), ENQUEUE(z1, z4)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(DEQUEUE#2(reverse(z0)), REVERSE(z0)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c53(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0), ENQUEUE(z2, enqueue(z1, z4)), ENQUEUE(z1, z4)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(DEQUEUE#2(reverse(z0)), REVERSE(z0)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c53(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) K tuples:none Defined Rule Symbols: *_2, +_2, appendreverse_2, appendreverse#1_2, bftMult_2, bftMult'_2, bftMult'#1_2, bftMult'#2_1, bftMult'#3_3, bftMult'#4_3, bftMult'#5_3, computeLine_3, computeLine#1_3, computeLine#2_4, dequeue_2, dequeue#1_2, dequeue#2_1, enqueue_2, enqueue#1_2, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, reverse_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #ADD_2, #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, DEQUEUE#1_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1 Compound Symbols: c2_2, c4_2, c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c36_3, c37_2, c38_1, c39_1, c41_2, c43_1, c45_2, c50_1, c51_1, c53_2, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1 ---------------------------------------- (147) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing tuple parts ---------------------------------------- (148) 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))) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 bftMult(z0, z1) -> bftMult'(tuple#2(::(z0, nil), nil), z1) bftMult'(z0, z1) -> bftMult'#1(bftMult'#2(z0), z1) bftMult'#1(tuple#2(z0, z1), z2) -> bftMult'#3(z0, z2, z1) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) bftMult'#3(::(z0, z1), z2, z3) -> bftMult'#4(z0, z2, z3) bftMult'#3(nil, z0, z1) -> z0 bftMult'#4(leaf, z0, z1) -> bftMult'(z1, z0) bftMult'#4(node(z0, z1, z2), z3, z4) -> bftMult'#5(enqueue(z2, enqueue(z1, z4)), z3, z0) bftMult'#5(z0, z1, z2) -> bftMult'(z0, matrixMult(z1, z2)) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil reverse(z0) -> appendreverse(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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c53(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c53(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) K tuples:none Defined Rule Symbols: *_2, +_2, appendreverse_2, appendreverse#1_2, bftMult_2, bftMult'_2, bftMult'#1_2, bftMult'#2_1, bftMult'#3_3, bftMult'#4_3, bftMult'#5_3, computeLine_3, computeLine#1_3, computeLine#2_4, dequeue_2, dequeue#1_2, dequeue#2_1, enqueue_2, enqueue#1_2, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, reverse_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c53_2, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1 ---------------------------------------- (149) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (150) 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))) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 bftMult(z0, z1) -> bftMult'(tuple#2(::(z0, nil), nil), z1) bftMult'(z0, z1) -> bftMult'#1(bftMult'#2(z0), z1) bftMult'#1(tuple#2(z0, z1), z2) -> bftMult'#3(z0, z2, z1) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) bftMult'#3(::(z0, z1), z2, z3) -> bftMult'#4(z0, z2, z3) bftMult'#3(nil, z0, z1) -> z0 bftMult'#4(leaf, z0, z1) -> bftMult'(z1, z0) bftMult'#4(node(z0, z1, z2), z3, z4) -> bftMult'#5(enqueue(z2, enqueue(z1, z4)), z3, z0) bftMult'#5(z0, z1, z2) -> bftMult'(z0, matrixMult(z1, z2)) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil reverse(z0) -> appendreverse(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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples:none Defined Rule Symbols: *_2, +_2, appendreverse_2, appendreverse#1_2, bftMult_2, bftMult'_2, bftMult'#1_2, bftMult'#2_1, bftMult'#3_3, bftMult'#4_3, bftMult'#5_3, computeLine_3, computeLine#1_3, computeLine#2_4, dequeue_2, dequeue#1_2, dequeue#2_1, enqueue_2, enqueue#1_2, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, reverse_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (151) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: bftMult(z0, z1) -> bftMult'(tuple#2(::(z0, nil), nil), z1) bftMult'(z0, z1) -> bftMult'#1(bftMult'#2(z0), z1) bftMult'#1(tuple#2(z0, z1), z2) -> bftMult'#3(z0, z2, z1) bftMult'#3(::(z0, z1), z2, z3) -> bftMult'#4(z0, z2, z3) bftMult'#3(nil, z0, z1) -> z0 bftMult'#4(leaf, z0, z1) -> bftMult'(z1, z0) bftMult'#4(node(z0, z1, z2), z3, z4) -> bftMult'#5(enqueue(z2, enqueue(z1, z4)), z3, z0) bftMult'#5(z0, z1, z2) -> bftMult'(z0, matrixMult(z1, z2)) ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples:none Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_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. BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) We considered the (Usable) Rules: reverse(z0) -> appendreverse(z0, nil) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(nil, z0) -> z0 dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue(z0, z1) -> dequeue#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) 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(#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)) = [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)) = 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)) = x_1 + x_2 POL(APPENDREVERSE(x_1, x_2)) = 0 POL(APPENDREVERSE#1(x_1, x_2)) = 0 POL(BFTMULT'(x_1, x_2)) = x_1 POL(BFTMULT'#1(x_1, x_2)) = x_1 POL(BFTMULT'#2(x_1)) = 0 POL(BFTMULT'#3(x_1, x_2, x_3)) = x_1 + x_3 POL(BFTMULT'#4(x_1, x_2, x_3)) = x_1 + x_3 POL(BFTMULT'#5(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(COMPUTELINE(x_1, x_2, x_3)) = 0 POL(COMPUTELINE#1(x_1, x_2, x_3)) = 0 POL(COMPUTELINE#2(x_1, x_2, x_3, x_4)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1, x_2)) = 0 POL(LINEMULT(x_1, x_2, x_3)) = 0 POL(LINEMULT#1(x_1, x_2, x_3)) = 0 POL(LINEMULT#2(x_1, x_2, x_3, x_4)) = 0 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT#1(x_1, x_2)) = x_2 POL(REVERSE(x_1)) = 0 POL(appendreverse(x_1, x_2)) = x_1 + x_2 POL(appendreverse#1(x_1, x_2)) = x_1 + x_2 POL(bftMult'#2(x_1)) = x_1 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(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c26(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c30(x_1, x_2)) = x_1 + x_2 POL(c31(x_1)) = x_1 POL(c32(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_2)) = x_1 + x_2 POL(c38(x_1)) = x_1 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c41(x_1, x_2)) = x_1 + x_2 POL(c43(x_1)) = x_1 POL(c45(x_1)) = x_1 POL(c50(x_1)) = x_1 POL(c51(x_1)) = x_1 POL(c54(x_1)) = x_1 POL(c55(x_1)) = x_1 POL(c56(x_1)) = x_1 POL(c57(x_1)) = x_1 POL(c58(x_1)) = x_1 POL(c59(x_1)) = x_1 POL(c61(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(computeLine(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(computeLine#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(computeLine#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(dequeue(x_1, x_2)) = x_1 + x_2 POL(dequeue#1(x_1, x_2)) = x_1 + x_2 POL(dequeue#2(x_1)) = x_1 POL(enqueue(x_1, x_2)) = x_1 + x_2 POL(enqueue#1(x_1, x_2)) = x_1 + x_2 POL(leaf) = [1] POL(lineMult(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(lineMult#1(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(lineMult#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult#1(x_1, x_2)) = [1] + x_2 POL(nil) = 0 POL(node(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(reverse(x_1)) = x_1 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (155) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (157) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) We considered the (Usable) Rules: reverse(z0) -> appendreverse(z0, nil) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(nil, z0) -> z0 dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue(z0, z1) -> dequeue#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) 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_1 POL(#NATMULT(x_1, x_2)) = 0 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)) = x_1 + x_2 POL(*'(x_1, x_2)) = x_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(APPENDREVERSE(x_1, x_2)) = 0 POL(APPENDREVERSE#1(x_1, x_2)) = 0 POL(BFTMULT'(x_1, x_2)) = x_1 POL(BFTMULT'#1(x_1, x_2)) = x_1 POL(BFTMULT'#2(x_1)) = 0 POL(BFTMULT'#3(x_1, x_2, x_3)) = x_1 + x_3 POL(BFTMULT'#4(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(BFTMULT'#5(x_1, x_2, x_3)) = x_1 + x_3 POL(COMPUTELINE(x_1, x_2, x_3)) = x_2 POL(COMPUTELINE#1(x_1, x_2, x_3)) = x_3 POL(COMPUTELINE#2(x_1, x_2, x_3, x_4)) = x_1 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1, x_2)) = 0 POL(LINEMULT(x_1, x_2, x_3)) = x_2 POL(LINEMULT#1(x_1, x_2, x_3)) = x_1 POL(LINEMULT#2(x_1, x_2, x_3, x_4)) = x_3 + x_4 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT#1(x_1, x_2)) = x_2 POL(REVERSE(x_1)) = 0 POL(appendreverse(x_1, x_2)) = x_1 + x_2 POL(appendreverse#1(x_1, x_2)) = x_1 + x_2 POL(bftMult'#2(x_1)) = x_1 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(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c26(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c30(x_1, x_2)) = x_1 + x_2 POL(c31(x_1)) = x_1 POL(c32(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_2)) = x_1 + x_2 POL(c38(x_1)) = x_1 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c41(x_1, x_2)) = x_1 + x_2 POL(c43(x_1)) = x_1 POL(c45(x_1)) = x_1 POL(c50(x_1)) = x_1 POL(c51(x_1)) = x_1 POL(c54(x_1)) = x_1 POL(c55(x_1)) = x_1 POL(c56(x_1)) = x_1 POL(c57(x_1)) = x_1 POL(c58(x_1)) = x_1 POL(c59(x_1)) = x_1 POL(c61(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(computeLine(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(computeLine#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(computeLine#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(dequeue(x_1, x_2)) = x_1 + x_2 POL(dequeue#1(x_1, x_2)) = x_1 + x_2 POL(dequeue#2(x_1)) = x_1 POL(enqueue(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueue#1(x_1, x_2)) = [1] + x_1 + x_2 POL(leaf) = [1] POL(lineMult(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(lineMult#1(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(lineMult#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult#1(x_1, x_2)) = [1] + x_2 POL(nil) = 0 POL(node(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(reverse(x_1)) = x_1 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (159) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) +'(z0, z1) -> c25(#ADD(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, 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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (161) 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) -> c58(COMPUTELINE(z0, z2, nil)) We considered the (Usable) Rules: reverse(z0) -> appendreverse(z0, nil) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(nil, z0) -> z0 dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue(z0, z1) -> dequeue#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) 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_1 POL(#NATMULT(x_1, x_2)) = 0 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)) = [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_1 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = x_1 + x_2 POL(APPENDREVERSE(x_1, x_2)) = 0 POL(APPENDREVERSE#1(x_1, x_2)) = 0 POL(BFTMULT'(x_1, x_2)) = x_1 POL(BFTMULT'#1(x_1, x_2)) = x_1 POL(BFTMULT'#2(x_1)) = 0 POL(BFTMULT'#3(x_1, x_2, x_3)) = x_1 + x_3 POL(BFTMULT'#4(x_1, x_2, x_3)) = x_1 + x_3 POL(BFTMULT'#5(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(COMPUTELINE(x_1, x_2, x_3)) = x_2 POL(COMPUTELINE#1(x_1, x_2, x_3)) = x_3 POL(COMPUTELINE#2(x_1, x_2, x_3, x_4)) = x_1 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1, x_2)) = 0 POL(LINEMULT(x_1, x_2, x_3)) = x_2 POL(LINEMULT#1(x_1, x_2, x_3)) = x_1 POL(LINEMULT#2(x_1, x_2, x_3, x_4)) = x_3 + x_4 POL(MATRIXMULT(x_1, x_2)) = [1] + x_2 POL(MATRIXMULT#1(x_1, x_2)) = [1] + x_2 POL(REVERSE(x_1)) = 0 POL(appendreverse(x_1, x_2)) = x_1 + x_2 POL(appendreverse#1(x_1, x_2)) = x_1 + x_2 POL(bftMult'#2(x_1)) = x_1 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(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c26(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c30(x_1, x_2)) = x_1 + x_2 POL(c31(x_1)) = x_1 POL(c32(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_2)) = x_1 + x_2 POL(c38(x_1)) = x_1 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c41(x_1, x_2)) = x_1 + x_2 POL(c43(x_1)) = x_1 POL(c45(x_1)) = x_1 POL(c50(x_1)) = x_1 POL(c51(x_1)) = x_1 POL(c54(x_1)) = x_1 POL(c55(x_1)) = x_1 POL(c56(x_1)) = x_1 POL(c57(x_1)) = x_1 POL(c58(x_1)) = x_1 POL(c59(x_1)) = x_1 POL(c61(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(computeLine(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(computeLine#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(computeLine#2(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(dequeue(x_1, x_2)) = x_1 + x_2 POL(dequeue#1(x_1, x_2)) = x_1 + x_2 POL(dequeue#2(x_1)) = x_1 POL(enqueue(x_1, x_2)) = x_1 + x_2 POL(enqueue#1(x_1, x_2)) = x_1 + x_2 POL(leaf) = [1] POL(lineMult(x_1, x_2, x_3)) = x_2 + x_3 POL(lineMult#1(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(lineMult#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult#1(x_1, x_2)) = [1] + x_2 POL(nil) = 0 POL(node(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(reverse(x_1)) = x_1 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (163) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c30_2, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1 ---------------------------------------- (165) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) by BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) ---------------------------------------- (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))) bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) S tuples: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, bftMult'#2_1, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1, c30_2 ---------------------------------------- (167) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: bftMult'#2(tuple#2(z0, z1)) -> dequeue(z0, z1) ---------------------------------------- (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#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) S tuples: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1, c30_2 ---------------------------------------- (169) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) We considered the (Usable) Rules: reverse(z0) -> appendreverse(z0, nil) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(nil, z0) -> z0 dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue(z0, z1) -> dequeue#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) 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(#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)) = 0 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)) = 0 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [2] + x_2 + x_2^2 + [2]x_1*x_2 + x_1^2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_1 + x_2 POL(APPENDREVERSE(x_1, x_2)) = x_1 POL(APPENDREVERSE#1(x_1, x_2)) = x_1 POL(BFTMULT'(x_1, x_2)) = x_1 + x_1^2 POL(BFTMULT'#1(x_1, x_2)) = x_1^2 POL(BFTMULT'#2(x_1)) = x_1 POL(BFTMULT'#3(x_1, x_2, x_3)) = x_3^2 + [2]x_1*x_3 + x_1^2 POL(BFTMULT'#4(x_1, x_2, x_3)) = [2]x_1 + x_3 + x_3^2 + [2]x_1*x_3 + x_1^2 POL(BFTMULT'#5(x_1, x_2, x_3)) = x_1 + x_3^2 + [2]x_1*x_3 + x_1^2 POL(COMPUTELINE(x_1, x_2, x_3)) = 0 POL(COMPUTELINE#1(x_1, x_2, x_3)) = 0 POL(COMPUTELINE#2(x_1, x_2, x_3, x_4)) = 0 POL(DEQUEUE(x_1, x_2)) = x_1 + x_2 POL(DEQUEUE#1(x_1, x_2)) = x_2 POL(LINEMULT(x_1, x_2, x_3)) = 0 POL(LINEMULT#1(x_1, x_2, x_3)) = 0 POL(LINEMULT#2(x_1, x_2, x_3, x_4)) = 0 POL(MATRIXMULT(x_1, x_2)) = 0 POL(MATRIXMULT#1(x_1, x_2)) = 0 POL(REVERSE(x_1)) = x_1 POL(appendreverse(x_1, x_2)) = x_1 + x_2 POL(appendreverse#1(x_1, x_2)) = x_1 + x_2 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c26(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c30(x_1, x_2)) = x_1 + x_2 POL(c31(x_1)) = x_1 POL(c32(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_2)) = x_1 + x_2 POL(c38(x_1)) = x_1 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c41(x_1, x_2)) = x_1 + x_2 POL(c43(x_1)) = x_1 POL(c45(x_1)) = x_1 POL(c50(x_1)) = x_1 POL(c51(x_1)) = x_1 POL(c54(x_1)) = x_1 POL(c55(x_1)) = x_1 POL(c56(x_1)) = x_1 POL(c57(x_1)) = x_1 POL(c58(x_1)) = x_1 POL(c59(x_1)) = x_1 POL(c61(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(computeLine(x_1, x_2, x_3)) = [1] + [2]x_1 + [2]x_2 + [2]x_1^2 + x_1*x_2 + [2]x_2^2 POL(computeLine#1(x_1, x_2, x_3)) = [1] + x_2 + x_3 + x_3^2 + x_2*x_3 + x_2^2 POL(computeLine#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 + x_4^2 + x_3*x_4 + x_2*x_4 + x_3^2 + x_2*x_3 + x_2^2 POL(dequeue(x_1, x_2)) = x_1 + x_2 POL(dequeue#1(x_1, x_2)) = x_1 + x_2 POL(dequeue#2(x_1)) = x_1 POL(enqueue(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueue#1(x_1, x_2)) = [1] + x_1 + x_2 POL(leaf) = 0 POL(lineMult(x_1, x_2, x_3)) = 0 POL(lineMult#1(x_1, x_2, x_3)) = [1] + x_2 + x_3 + x_3^2 + x_2*x_3 + x_2^2 POL(lineMult#2(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 + x_4^2 + x_3*x_4 + x_2*x_4 + x_3^2 + x_2*x_3 + x_2^2 POL(matrixMult(x_1, x_2)) = 0 POL(matrixMult#1(x_1, x_2)) = [1] + x_1 + x_2 + x_2^2 + x_1*x_2 + x_1^2 POL(nil) = 0 POL(node(x_1, x_2, x_3)) = [2] + x_1 + x_2 + x_3 POL(reverse(x_1)) = x_1 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (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#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) S tuples: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1, c30_2 ---------------------------------------- (171) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) ---------------------------------------- (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#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, BFTMULT'#5_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c37_2, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1, c30_2 ---------------------------------------- (173) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) by BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, 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))) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2, BFTMULT'#5_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c41_2, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1, c30_2, c37_2 ---------------------------------------- (175) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) by COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) ---------------------------------------- (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))) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2, BFTMULT'#5_3, COMPUTELINE#2_4 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c36_1, c45_1, c_1, c30_2, c37_2, c41_2 ---------------------------------------- (177) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) by BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue(x1, x4), z0), x3, x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) ---------------------------------------- (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))) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue(x1, x4), z0), x3, x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2, BFTMULT'#5_3, COMPUTELINE#2_4 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c30_2, c37_2, c41_2, c36_1 ---------------------------------------- (179) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) by LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) ---------------------------------------- (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))) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue(x1, x4), z0), x3, x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'_2, BFTMULT'#5_3, COMPUTELINE#2_4 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c30_2, c37_2, c41_2, c36_1 ---------------------------------------- (181) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(tuple#2(z0, z1), x1) -> c30(BFTMULT'#1(dequeue(z0, z1), x1), BFTMULT'#2(tuple#2(z0, z1))) by BFTMULT'(tuple#2(z0, z1), x2) -> c30(BFTMULT'#1(dequeue#1(z0, z1), x2), BFTMULT'#2(tuple#2(z0, z1))) ---------------------------------------- (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))) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue(z0, z1) -> dequeue#1(z0, z1) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue(x1, x4), z0), x3, x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'(tuple#2(z0, z1), x2) -> c30(BFTMULT'#1(dequeue#1(z0, z1), x2), BFTMULT'#2(tuple#2(z0, z1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, enqueue_2, enqueue#1_2, dequeue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2 ---------------------------------------- (183) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: dequeue(z0, z1) -> dequeue#1(z0, z1) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue(x1, x4), z0), x3, x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'(tuple#2(z0, z1), x2) -> c30(BFTMULT'#1(dequeue#1(z0, z1), x2), BFTMULT'#2(tuple#2(z0, z1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, enqueue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2 ---------------------------------------- (185) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue(x1, x4), z0), x3, x0)) by BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'(tuple#2(z0, z1), x2) -> c30(BFTMULT'#1(dequeue#1(z0, z1), x2), BFTMULT'#2(tuple#2(z0, z1))) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, enqueue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2 ---------------------------------------- (187) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue(x2, enqueue#1(z1, z0)), x3, x0)) by BFTMULT'#4(node(x0, x1, z0), x3, x4) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(x4, x1), z0), x3, x0)) BFTMULT'#4(node(x0, z2, x2), x3, tuple#2(z0, z1)) -> c36(BFTMULT'#5(enqueue(x2, tuple#2(z0, ::(z2, z1))), x3, x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'(tuple#2(z0, z1), x2) -> c30(BFTMULT'#1(dequeue#1(z0, z1), x2), BFTMULT'#2(tuple#2(z0, z1))) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'#4(node(x0, z2, x2), x3, tuple#2(z0, z1)) -> c36(BFTMULT'#5(enqueue(x2, tuple#2(z0, ::(z2, z1))), x3, x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, enqueue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c30_2, c36_1 ---------------------------------------- (189) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(tuple#2(z0, z1), x2) -> c30(BFTMULT'#1(dequeue#1(z0, z1), x2), BFTMULT'#2(tuple#2(z0, z1))) by BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(nil, z0), x2) -> c30(BFTMULT'#1(dequeue#2(reverse(z0)), x2), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'#4(node(x0, z2, x2), x3, tuple#2(z0, z1)) -> c36(BFTMULT'#5(enqueue(x2, tuple#2(z0, ::(z2, z1))), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(nil, z0), x2) -> c30(BFTMULT'#1(dequeue#2(reverse(z0)), x2), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, enqueue_2, dequeue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (191) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: dequeue#1(::(z0, z1), z2) -> tuple#2(::(z0, nil), tuple#2(z1, z2)) dequeue#1(nil, z0) -> dequeue#2(reverse(z0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'#4(node(x0, z2, x2), x3, tuple#2(z0, z1)) -> c36(BFTMULT'#5(enqueue(x2, tuple#2(z0, ::(z2, z1))), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(nil, z0), x2) -> c30(BFTMULT'#1(dequeue#2(reverse(z0)), x2), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, enqueue_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (193) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'#4(node(x0, z2, x2), x3, tuple#2(z0, z1)) -> c36(BFTMULT'#5(enqueue(x2, tuple#2(z0, ::(z2, z1))), x3, x0)) by BFTMULT'#4(node(x0, x1, z0), x3, tuple#2(x4, x5)) -> c36(BFTMULT'#5(enqueue#1(tuple#2(x4, ::(x1, x5)), z0), x3, x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(nil, z0), x2) -> c30(BFTMULT'#1(dequeue#2(reverse(z0)), x2), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'#4(node(x0, x1, z0), x3, tuple#2(x4, x5)) -> c36(BFTMULT'#5(enqueue#1(tuple#2(x4, ::(x1, x5)), z0), x3, x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, enqueue_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (195) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: enqueue(z0, z1) -> enqueue#1(z1, z0) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(nil, z0), x2) -> c30(BFTMULT'#1(dequeue#2(reverse(z0)), x2), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'#4(node(x0, x1, z0), x3, tuple#2(x4, x5)) -> c36(BFTMULT'#5(enqueue#1(tuple#2(x4, ::(x1, x5)), z0), x3, x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (197) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(tuple#2(nil, z0), x2) -> c30(BFTMULT'#1(dequeue#2(reverse(z0)), x2), BFTMULT'#2(tuple#2(nil, z0))) by BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) reverse(z0) -> appendreverse(z0, nil) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'#4(node(x0, x1, z0), x3, tuple#2(x4, x5)) -> c36(BFTMULT'#5(enqueue#1(tuple#2(x4, ::(x1, x5)), z0), x3, x0)) BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, reverse_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (199) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: reverse(z0) -> appendreverse(z0, nil) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'#4(node(x0, x1, z0), x3, tuple#2(x4, x5)) -> c36(BFTMULT'#5(enqueue#1(tuple#2(x4, ::(x1, x5)), z0), x3, x0)) BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (201) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'#4(node(x0, x1, z0), x3, tuple#2(x4, x5)) -> c36(BFTMULT'#5(enqueue#1(tuple#2(x4, ::(x1, x5)), z0), x3, x0)) by BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (203) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) by BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (205) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(tuple#2(nil, z0), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z0, nil)), x1), BFTMULT'#2(tuple#2(nil, z0))) by BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> 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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1 ---------------------------------------- (207) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) by #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2 Compound Symbols: c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1 ---------------------------------------- (209) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace APPENDREVERSE(z0, z1) -> c26(APPENDREVERSE#1(z0, z1)) by APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(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)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, APPENDREVERSE_2 Compound Symbols: c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1 ---------------------------------------- (211) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) by #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, APPENDREVERSE_2 Compound Symbols: c12_1, c13_1, c15_2, c24_1, c25_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1 ---------------------------------------- (213) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) by #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, APPENDREVERSE#1_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, APPENDREVERSE_2 Compound Symbols: c13_1, c15_2, c24_1, c25_1, c27_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1 ---------------------------------------- (215) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace APPENDREVERSE#1(::(z0, z1), z2) -> c27(APPENDREVERSE(z1, ::(z0, z2))) by APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #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) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, APPENDREVERSE_2, APPENDREVERSE#1_2 Compound Symbols: c13_1, c15_2, c24_1, c25_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1 ---------------------------------------- (217) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) by #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2 Compound Symbols: c15_2, c24_1, c25_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1 ---------------------------------------- (219) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace APPENDREVERSE(x1, ::(x0, x2)) -> c26(APPENDREVERSE#1(x1, ::(x0, x2))) by APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2 Compound Symbols: c15_2, c24_1, c25_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1 ---------------------------------------- (221) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace *'(z0, z1) -> c24(#MULT(z0, z1)) by *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) +'(z0, z1) -> c25(#ADD(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, +'_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2 Compound Symbols: c15_2, c25_1, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1 ---------------------------------------- (223) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace +'(z0, z1) -> c25(#ADD(z0, z1)) by +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), 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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (225) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LINEMULT#2(::(x0, x1), z1, z0, x4) -> c(+'(#mult(z0, z1), x0)) by LINEMULT#2(::(x0, x1), #0, #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z0), #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #pos(z0), #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #0, #neg(z0), x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #0, #pos(z0), x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #0, #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z0), #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #pos(z0), #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #0, #neg(z0), x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #0, #pos(z0), x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#5(z0, z1, z2) -> c37(BFTMULT'(z0, matrixMult(z1, z2)), MATRIXMULT(z1, z2)) BFTMULT'(z0, z1) -> c30(BFTMULT'#1(bftMult'#2(z0), z1), BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) BFTMULT'#4(node(z0, z1, z2), z3, z4) -> c36(BFTMULT'#5(enqueue(z2, enqueue(z1, z4)), z3, z0)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c41(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (227) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing nodes: LINEMULT#2(::(x0, x1), #pos(z0), #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #0, #pos(z0), x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #0, #neg(z0), x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #0, #0, x4) -> c(+'(#0, x0)) LINEMULT#2(::(x0, x1), #neg(z0), #0, x4) -> c(+'(#0, x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (229) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LINEMULT#2(::(x0, x1), #neg(z1), #neg(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) by LINEMULT#2(::(x0, x1), #neg(z0), #neg(#0), x4) -> c(+'(#pos(#0), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z0), #neg(#0), x4) -> c(+'(#pos(#0), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (231) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LINEMULT#2(::(x0, x1), #neg(z0), #neg(#0), x4) -> c(+'(#pos(#0), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (233) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LINEMULT#2(::(x0, x1), #pos(z1), #neg(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) by LINEMULT#2(::(x0, x1), #pos(z0), #neg(#0), x4) -> c(+'(#neg(#0), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z0), #neg(#0), x4) -> c(+'(#neg(#0), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (235) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LINEMULT#2(::(x0, x1), #pos(z0), #neg(#0), x4) -> c(+'(#neg(#0), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (237) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LINEMULT#2(::(x0, x1), #neg(z1), #pos(z0), x4) -> c(+'(#neg(#natmult(z0, z1)), x0)) by LINEMULT#2(::(x0, x1), #neg(z0), #pos(#0), x4) -> c(+'(#neg(#0), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z0), #pos(#0), x4) -> c(+'(#neg(#0), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (239) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LINEMULT#2(::(x0, x1), #neg(z0), #pos(#0), x4) -> c(+'(#neg(#0), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (241) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LINEMULT#2(::(x0, x1), #pos(z1), #pos(z0), x4) -> c(+'(#pos(#natmult(z0, z1)), x0)) by LINEMULT#2(::(x0, x1), #pos(z0), #pos(#0), x4) -> c(+'(#pos(#0), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z0), #pos(#0), x4) -> c(+'(#pos(#0), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (243) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LINEMULT#2(::(x0, x1), #pos(z0), #pos(#0), x4) -> c(+'(#pos(#0), x0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (245) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BFTMULT'(tuple#2(nil, ::(z0, z1)), x1) -> c30(BFTMULT'#1(dequeue#2(appendreverse(z1, ::(z0, nil))), x1), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) by BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#1_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2 Compound Symbols: c15_2, c31_1, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1 ---------------------------------------- (247) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace BFTMULT'#1(tuple#2(z0, z1), z2) -> c31(BFTMULT'#3(z0, z2, z1)) by BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2 Compound Symbols: c15_2, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1 ---------------------------------------- (249) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BFTMULT'(tuple#2(nil, nil), x1) -> c30(BFTMULT'#1(dequeue#2(nil), x1), BFTMULT'#2(tuple#2(nil, nil))) by BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#1(tuple#2(nil, tuple#2(nil, nil)), x0), BFTMULT'#2(tuple#2(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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#1(tuple#2(nil, tuple#2(nil, nil)), x0), BFTMULT'#2(tuple#2(nil, nil))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2 Compound Symbols: c15_2, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1 ---------------------------------------- (251) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, BFTMULT'#3_3, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2 Compound Symbols: c15_2, c32_1, c33_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1 ---------------------------------------- (253) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace BFTMULT'#3(::(z0, z1), z2, z3) -> c33(BFTMULT'#4(z0, z2, z3)) by BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, BFTMULT'#4_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3 Compound Symbols: c15_2, c32_1, c35_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1, c33_1 ---------------------------------------- (255) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace BFTMULT'#4(leaf, z0, z1) -> c35(BFTMULT'(z1, z0)) by BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3 Compound Symbols: c15_2, c32_1, c38_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1, c33_1, c35_1 ---------------------------------------- (257) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace COMPUTELINE(z0, z1, z2) -> c38(COMPUTELINE#1(z0, z2, z1)) by COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, COMPUTELINE#1_3, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3 Compound Symbols: c15_2, c32_1, c39_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1, c33_1, c35_1, c38_1 ---------------------------------------- (259) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace COMPUTELINE#1(::(z0, z1), z2, z3) -> c39(COMPUTELINE#2(z3, z2, z0, z1)) by COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, DEQUEUE_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3 Compound Symbols: c15_2, c32_1, c43_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1, c33_1, c35_1, c38_1, c39_1 ---------------------------------------- (261) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DEQUEUE(z0, z1) -> c43(DEQUEUE#1(z0, z1)) by DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2 Compound Symbols: c15_2, c32_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1 ---------------------------------------- (263) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace BFTMULT'#2(tuple#2(z0, z1)) -> c32(DEQUEUE(z0, z1)) by BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) ---------------------------------------- (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))) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2), BFTMULT'#2(tuple#2(::(z0, z1), z2))) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1 Compound Symbols: c15_2, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_2, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1 ---------------------------------------- (265) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (266) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1 Compound Symbols: c15_2, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1 ---------------------------------------- (267) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LINEMULT(z0, z1, z2) -> c50(LINEMULT#1(z1, z2, z0)) by LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) ---------------------------------------- (268) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3 Compound Symbols: c15_2, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1 ---------------------------------------- (269) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace APPENDREVERSE#1(::(z0, z1), ::(x1, x2)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, x2)))) by APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) ---------------------------------------- (270) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3 Compound Symbols: c15_2, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1 ---------------------------------------- (271) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LINEMULT#1(::(z0, z1), z2, z3) -> c51(LINEMULT#2(z2, z3, z0, z1)) by LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) ---------------------------------------- (272) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3 Compound Symbols: c15_2, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1 ---------------------------------------- (273) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LINEMULT#2(::(z0, z1), z2, z3, z4) -> c54(LINEMULT(z2, z4, z1)) by LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) ---------------------------------------- (274) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3 Compound Symbols: c15_2, c55_1, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1, c54_1 ---------------------------------------- (275) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LINEMULT#2(nil, z0, z1, z2) -> c55(*'(z1, z0)) by LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) ---------------------------------------- (276) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3 Compound Symbols: c15_2, c56_1, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1, c54_1, c55_1 ---------------------------------------- (277) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LINEMULT#2(nil, z0, z1, z2) -> c56(LINEMULT(z0, z2, nil)) by LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) ---------------------------------------- (278) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) S tuples: MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, MATRIXMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, LINEMULT#2_4, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3 Compound Symbols: c15_2, c57_1, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1, c54_1, c55_1, c56_1 ---------------------------------------- (279) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace MATRIXMULT(z0, z1) -> c57(MATRIXMULT#1(z0, z1)) by MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) ---------------------------------------- (280) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) S tuples: MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, LINEMULT#2_4, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3, MATRIXMULT_2 Compound Symbols: c15_2, c58_1, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1 ---------------------------------------- (281) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace MATRIXMULT#1(::(z0, z1), z2) -> c58(COMPUTELINE(z0, z2, nil)) by MATRIXMULT#1(::(::(y0, y1), z1), z2) -> c58(COMPUTELINE(::(y0, y1), z2, nil)) ---------------------------------------- (282) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) MATRIXMULT#1(::(::(y0, y1), z1), z2) -> c58(COMPUTELINE(::(y0, y1), z2, nil)) S tuples: MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) MATRIXMULT#1(::(::(y0, y1), z1), z2) -> c58(COMPUTELINE(::(y0, y1), z2, nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, MATRIXMULT#1_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, LINEMULT#2_4, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3, MATRIXMULT_2 Compound Symbols: c15_2, c59_1, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1 ---------------------------------------- (283) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace MATRIXMULT#1(::(z0, z1), z2) -> c59(MATRIXMULT(z1, z2)) by MATRIXMULT#1(::(z0, ::(y0, y1)), z2) -> c59(MATRIXMULT(::(y0, y1), z2)) ---------------------------------------- (284) 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#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(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)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(z0, ::(z2, z1)) dequeue#2(::(z0, z1)) -> tuple#2(::(z0, nil), tuple#2(z1, nil)) dequeue#2(nil) -> tuple#2(nil, tuple#2(nil, nil)) appendreverse(z0, z1) -> appendreverse#1(z0, z1) appendreverse#1(::(z0, z1), z2) -> appendreverse(z1, ::(z0, z2)) appendreverse#1(nil, z0) -> z0 Tuples: #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) BFTMULT'#5(x0, z0, z1) -> c37(BFTMULT'(x0, matrixMult#1(z0, z1)), MATRIXMULT(z0, z1)) COMPUTELINE#2(::(z1, x1), z2, z0, x4) -> c41(COMPUTELINE(x4, x1, lineMult#1(z1, z2, z0)), LINEMULT(z0, z1, z2)) BFTMULT'#4(node(x0, z0, x2), x3, z1) -> c36(BFTMULT'#5(enqueue#1(enqueue#1(z1, z0), x2), x3, x0)) BFTMULT'(tuple#2(x0, x1), x2) -> c30(BFTMULT'#2(tuple#2(x0, x1))) BFTMULT'(tuple#2(nil, x0), x1) -> c30(BFTMULT'#2(tuple#2(nil, x0))) BFTMULT'#4(node(x0, x1, z2), x3, tuple#2(z0, x5)) -> c36(BFTMULT'#5(tuple#2(z0, ::(z2, ::(x1, x5))), x3, x0)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) LINEMULT#2(::(x0, x1), #neg(z1), #neg(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #neg(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #neg(z1), #pos(#s(z0)), x4) -> c(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), x0)) LINEMULT#2(::(x0, x1), #pos(z1), #pos(#s(z0)), x4) -> c(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), x0)) BFTMULT'(tuple#2(nil, ::(z0, z1)), z2) -> c30(BFTMULT'#1(dequeue#2(appendreverse#1(z1, ::(z0, nil))), z2), BFTMULT'#2(tuple#2(nil, ::(z0, z1)))) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'(tuple#2(nil, nil), x0) -> c30(BFTMULT'#2(tuple#2(nil, nil))) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) BFTMULT'(tuple#2(::(z0, z1), z2), x2) -> c30(BFTMULT'#1(tuple#2(::(z0, nil), tuple#2(z1, z2)), x2)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) MATRIXMULT#1(::(::(y0, y1), z1), z2) -> c58(COMPUTELINE(::(y0, y1), z2, nil)) MATRIXMULT#1(::(z0, ::(y0, y1)), z2) -> c59(MATRIXMULT(::(y0, y1), z2)) S tuples: MATRIXMULT(::(y0, y1), z1) -> c57(MATRIXMULT#1(::(y0, y1), z1)) MATRIXMULT#1(::(z0, ::(y0, y1)), z2) -> c59(MATRIXMULT(::(y0, y1), z2)) K tuples: DEQUEUE#1(nil, z0) -> c45(REVERSE(z0)) REVERSE(z0) -> c61(APPENDREVERSE(z0, nil)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) APPENDREVERSE(x0, nil) -> c26(APPENDREVERSE#1(x0, nil)) #MULT(#neg(#s(y0)), #pos(z1)) -> c10(#NATMULT(#s(y0), z1)) #MULT(#pos(#s(y0)), #neg(z1)) -> c12(#NATMULT(#s(y0), z1)) APPENDREVERSE#1(::(z0, z1), nil) -> c27(APPENDREVERSE(z1, ::(z0, nil))) #MULT(#pos(#s(y0)), #pos(z1)) -> c13(#NATMULT(#s(y0), z1)) APPENDREVERSE(x1, ::(x0, ::(x2, x3))) -> c26(APPENDREVERSE#1(x1, ::(x0, ::(x2, x3)))) APPENDREVERSE(x1, ::(x0, nil)) -> c26(APPENDREVERSE#1(x1, ::(x0, nil))) *'(#neg(#s(y0)), #neg(y1)) -> c24(#MULT(#neg(#s(y0)), #neg(y1))) *'(#neg(#s(y0)), #pos(y1)) -> c24(#MULT(#neg(#s(y0)), #pos(y1))) *'(#pos(#s(y0)), #neg(y1)) -> c24(#MULT(#pos(#s(y0)), #neg(y1))) *'(#pos(#s(y0)), #pos(y1)) -> c24(#MULT(#pos(#s(y0)), #pos(y1))) +'(#neg(#s(#s(y0))), z1) -> c25(#ADD(#neg(#s(#s(y0))), z1)) +'(#pos(#s(#s(y0))), z1) -> c25(#ADD(#pos(#s(#s(y0))), z1)) BFTMULT'#1(tuple#2(::(y0, y1), z1), z2) -> c31(BFTMULT'#3(::(y0, y1), z2, z1)) BFTMULT'#3(::(leaf, z1), z2, z3) -> c33(BFTMULT'#4(leaf, z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, z3) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, z3)) BFTMULT'#3(::(node(y0, y1, y2), z1), z2, tuple#2(y4, y5)) -> c33(BFTMULT'#4(node(y0, y1, y2), z2, tuple#2(y4, y5))) BFTMULT'#4(leaf, z0, tuple#2(::(y0, y1), y2)) -> c35(BFTMULT'(tuple#2(::(y0, y1), y2), z0)) BFTMULT'#4(leaf, z0, tuple#2(y0, y1)) -> c35(BFTMULT'(tuple#2(y0, y1), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, y0)) -> c35(BFTMULT'(tuple#2(nil, y0), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, ::(y0, y1))) -> c35(BFTMULT'(tuple#2(nil, ::(y0, y1)), z0)) BFTMULT'#4(leaf, z0, tuple#2(nil, nil)) -> c35(BFTMULT'(tuple#2(nil, nil), z0)) COMPUTELINE(::(y0, y1), z1, z2) -> c38(COMPUTELINE#1(::(y0, y1), z2, z1)) COMPUTELINE#1(::(z0, z1), z2, ::(y0, y1)) -> c39(COMPUTELINE#2(::(y0, y1), z2, z0, z1)) DEQUEUE(nil, z1) -> c43(DEQUEUE#1(nil, z1)) BFTMULT'#2(tuple#2(nil, z1)) -> c32(DEQUEUE(nil, z1)) LINEMULT(z0, ::(y0, y1), z2) -> c50(LINEMULT#1(::(y0, y1), z2, z0)) APPENDREVERSE#1(::(z0, z1), ::(x1, ::(x2, x3))) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, ::(x2, x3))))) APPENDREVERSE#1(::(z0, z1), ::(x1, nil)) -> c27(APPENDREVERSE(z1, ::(z0, ::(x1, nil)))) LINEMULT#1(::(z0, z1), ::(y0, y1), z3) -> c51(LINEMULT#2(::(y0, y1), z3, z0, z1)) LINEMULT#1(::(z0, z1), nil, z3) -> c51(LINEMULT#2(nil, z3, z0, z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#neg(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #neg(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #neg(y2)) -> c51(LINEMULT#2(::(y0, y1), #neg(y2), #pos(#s(y3)), z1)) LINEMULT#1(::(#pos(#s(y3)), z1), ::(y0, y1), #pos(y2)) -> c51(LINEMULT#2(::(y0, y1), #pos(y2), #pos(#s(y3)), z1)) LINEMULT#2(::(z0, z1), z2, z3, ::(y1, y2)) -> c54(LINEMULT(z2, ::(y1, y2), z1)) LINEMULT#2(nil, #neg(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #neg(#s(y0)), z2) -> c55(*'(#neg(#s(y0)), #pos(y1))) LINEMULT#2(nil, #neg(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #neg(y1))) LINEMULT#2(nil, #pos(y1), #pos(#s(y0)), z2) -> c55(*'(#pos(#s(y0)), #pos(y1))) LINEMULT#2(nil, z0, z1, ::(y1, y2)) -> c56(LINEMULT(z0, ::(y1, y2), nil)) MATRIXMULT#1(::(::(y0, y1), z1), z2) -> c58(COMPUTELINE(::(y0, y1), z2, nil)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult#1_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1, matrixMult_2, enqueue#1_2, dequeue#2_1, appendreverse_2, appendreverse#1_2 Defined Pair Symbols: #NATMULT_2, REVERSE_1, #ADD_2, DEQUEUE#1_2, LINEMULT#2_4, BFTMULT'#5_3, COMPUTELINE#2_4, BFTMULT'#4_3, BFTMULT'_2, #MULT_2, APPENDREVERSE_2, APPENDREVERSE#1_2, *'_2, +'_2, BFTMULT'#1_2, BFTMULT'#3_3, COMPUTELINE_3, COMPUTELINE#1_3, DEQUEUE_2, BFTMULT'#2_1, LINEMULT_3, LINEMULT#1_3, MATRIXMULT_2, MATRIXMULT#1_2 Compound Symbols: c15_2, c61_1, c2_1, c4_1, c45_1, c_1, c37_2, c41_2, c36_1, c30_1, c9_1, c26_1, c10_1, c12_1, c27_1, c13_1, c24_1, c25_1, c30_2, c31_1, c33_1, c35_1, c38_1, c39_1, c43_1, c32_1, c50_1, c51_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1