WORST_CASE(Omega(n^1),?) proof of input_z1QKbSqJZe.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 410 ms] (2) CpxRelTRS (3) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 94 ms] (4) CdtProblem (5) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxRelTRS (7) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxRelTRS (9) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (10) typed CpxTrs (11) OrderProof [LOWER BOUND(ID), 52 ms] (12) typed CpxTrs (13) RewriteLemmaProof [LOWER BOUND(ID), 324 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 1833 ms] (16) BEST (17) proven lower bound (18) LowerBoundPropagationProof [FINISHED, 0 ms] (19) BOUNDS(n^1, INF) (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 1682 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 1618 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 24.3 s] (26) typed CpxTrs (27) RewriteLemmaProof [LOWER BOUND(ID), 23.7 s] (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 24.2 s] (30) typed CpxTrs (31) RewriteLemmaProof [LOWER BOUND(ID), 5438 ms] (32) typed CpxTrs (33) RewriteLemmaProof [LOWER BOUND(ID), 502 ms] (34) typed CpxTrs (35) RewriteLemmaProof [LOWER BOUND(ID), 484 ms] (36) typed CpxTrs (37) RewriteLemmaProof [LOWER BOUND(ID), 52 ms] (38) typed CpxTrs (39) RewriteLemmaProof [LOWER BOUND(ID), 708 ms] (40) typed CpxTrs (41) RewriteLemmaProof [LOWER BOUND(ID), 705 ms] (42) typed CpxTrs (43) RewriteLemmaProof [LOWER BOUND(ID), 694 ms] (44) BOUNDS(1, INF) ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^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(n^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) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (4) 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 ---------------------------------------- (5) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: *'(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)) The (relative) TRS S consists of the following rules: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(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) Rewrite Strategy: INNERMOST ---------------------------------------- (7) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (8) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: *'(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)) The (relative) TRS S consists of the following rules: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Rewrite Strategy: INNERMOST ---------------------------------------- (9) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (10) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 ---------------------------------------- (11) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: #ADD, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, LINEMULT#1, MATRIXMULT#1, #add, #NATMULT, #natmult, appendreverse, appendreverse#1, bftMult', bftMult'#1, computeLine, computeLine#1, lineMult#1, matrixMult#1 They will be analysed ascendingly in the following order: #add < #ADD #ADD < #NATMULT APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 #add < #natmult #natmult < #NATMULT appendreverse = appendreverse#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (12) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: #add, #ADD, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, LINEMULT#1, MATRIXMULT#1, #NATMULT, #natmult, appendreverse, appendreverse#1, bftMult', bftMult'#1, computeLine, computeLine#1, lineMult#1, matrixMult#1 They will be analysed ascendingly in the following order: #add < #ADD #ADD < #NATMULT APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 #add < #natmult #natmult < #NATMULT appendreverse = appendreverse#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (13) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) Induction Base: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(0) gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b) Induction Step: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(0) appendreverse(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(0) appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_IH gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(+(b, 1), c251_62)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (14) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: appendreverse, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, LINEMULT#1, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, lineMult#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 appendreverse = appendreverse#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n4238_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4238_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n4238_62) Induction Base: LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) Induction Step: LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n4238_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n4238_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) ->_R^Omega(1) c51(LINEMULT#2(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n4238_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n4238_62)))) ->_R^Omega(1) c51(c54(LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n4238_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4238_62)))) ->_R^Omega(1) c51(c54(c50(LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n4238_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4238_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))))) ->_IH c51(c54(c50(*33_62))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Complex Obligation (BEST) ---------------------------------------- (17) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: LINEMULT#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, lineMult#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (18) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (19) BOUNDS(n^1, INF) ---------------------------------------- (20) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n4238_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4238_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n4238_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: LINEMULT, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, lineMult#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) Induction Base: LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) Induction Step: LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n30296_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n30296_62, 1))) ->_R^Omega(1) c50(LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n30296_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n30296_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a))) ->_R^Omega(1) c50(c51(LINEMULT#2(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n30296_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)))) ->_R^Omega(1) c50(c51(c54(LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62))))) ->_IH c50(c51(c54(*33_62))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (22) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n4238_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4238_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n4238_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: LINEMULT#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, lineMult#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) Induction Base: LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) Induction Step: LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n60901_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n60901_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) ->_R^Omega(1) c51(LINEMULT#2(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n60901_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)))) ->_R^Omega(1) c51(c54(LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62)))) ->_R^Omega(1) c51(c54(c50(LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))))) ->_IH c51(c54(c50(*33_62))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (24) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: lineMult#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, lineMult, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n94689_62) Induction Base: lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) Induction Step: lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n94689_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) ->_R^Omega(0) lineMult#2(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62))) ->_R^Omega(0) ::(*'(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)), lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62)), nil)) ->_R^Omega(1) ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))), lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62)), nil)) ->_R^Omega(0) ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))), lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62)), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))) ->_IH ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))), *33_62) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (26) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n94689_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: lineMult, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (27) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) Induction Base: lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) Induction Step: lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n4908489_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) ->_R^Omega(0) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n4908489_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a)) ->_R^Omega(0) lineMult#2(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62)) ->_R^Omega(0) ::(*'(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a)), lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), nil)) ->_R^Omega(1) ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a))), lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), nil)) ->_IH ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a))), *33_62) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (28) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n94689_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n94689_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: lineMult#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, computeLine#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) Induction Base: lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) Induction Step: lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n9704981_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) ->_R^Omega(0) lineMult#2(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62))) ->_R^Omega(0) ::(*'(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)), lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), nil)) ->_R^Omega(1) ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))), lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), nil)) ->_R^Omega(0) ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))), lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))) ->_IH ::(c24(#MULT(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c))), *33_62) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (30) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: computeLine#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, MATRIXMULT, COMPUTELINE, COMPUTELINE#1, MATRIXMULT#1, bftMult', bftMult'#1, computeLine, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 bftMult' = bftMult'#1 computeLine = computeLine#1 computeLine < matrixMult#1 ---------------------------------------- (31) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14767818_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14767818_62) Induction Base: MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) Induction Step: MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n14767818_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(1) c59(MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14767818_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(1) c59(c57(MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14767818_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)))) ->_IH c59(c57(*33_62)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (32) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14767818_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14767818_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: MATRIXMULT, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, bftMult', bftMult'#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 bftMult' = bftMult'#1 ---------------------------------------- (33) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14779477_62) Induction Base: MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) Induction Step: MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n14779477_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(1) c57(MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n14779477_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(1) c57(c59(MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)))) ->_IH c57(c59(*33_62)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (34) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14767818_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14767818_62) MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14779477_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: MATRIXMULT#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, bftMult', bftMult'#1, matrixMult#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 MATRIXMULT < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 MATRIXMULT = MATRIXMULT#1 bftMult' = bftMult'#1 ---------------------------------------- (35) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14791201_62) Induction Base: MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) Induction Step: MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n14791201_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(1) c59(MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(1) c59(c57(MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)))) ->_IH c59(c57(*33_62)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (36) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14791201_62) MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14779477_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: matrixMult#1, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, matrixMult, bftMult', bftMult'#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 bftMult' = bftMult'#1 ---------------------------------------- (37) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), rt in Omega(0) Induction Base: matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(0) nil Induction Step: matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n14805808_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(0) ::(computeLine(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b), nil), matrixMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(0) ::(computeLine#1(nil, nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)), matrixMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(0) ::(nil, matrixMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(0) ::(nil, matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_IH ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c14805809_62)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (38) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14791201_62) MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14779477_62) matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), rt in Omega(0) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: matrixMult, APPENDREVERSE, APPENDREVERSE#1, BFTMULT', BFTMULT'#1, bftMult', bftMult'#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 BFTMULT' = BFTMULT'#1 matrixMult < BFTMULT'#1 matrixMult < bftMult'#1 matrixMult = matrixMult#1 bftMult' = bftMult'#1 ---------------------------------------- (39) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14811530_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14811530_62) Induction Base: APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) Induction Step: APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n14811530_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(1) c27(APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14811530_62)), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)))) ->_R^Omega(1) c27(c26(APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14811530_62)), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))))) ->_IH c27(c26(*33_62)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (40) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14791201_62) MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14779477_62) matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), rt in Omega(0) APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14811530_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14811530_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: APPENDREVERSE They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 ---------------------------------------- (41) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14839545_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14839545_62) Induction Base: APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) Induction Step: APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n14839545_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(1) c26(APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n14839545_62, 1)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))) ->_R^Omega(1) c26(c27(APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14839545_62), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))))) ->_IH c26(c27(*33_62)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (42) Obligation: Innermost TRS: Rules: *'(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)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *'(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) Types: *' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 APPENDREVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 APPENDREVERSE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c27 :: c26 -> c27:c28 nil :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c28 :: c27:c28 BFTMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c29 c29 :: c30 -> c29 BFTMULT' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c30 tuple#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c30 :: c31 -> c32 -> c30 BFTMULT'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c31 bftMult'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos BFTMULT'#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c32 c31 :: c33:c34 -> c31 BFTMULT'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c33:c34 c32 :: c43 -> c32 DEQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c43 c33 :: c35:c36 -> c33:c34 BFTMULT'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c35:c36 c34 :: c33:c34 leaf :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c35 :: c30 -> c35:c36 node :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c36 :: c37 -> c48 -> c48 -> c35:c36 BFTMULT'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c37 enqueue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos ENQUEUE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c48 c37 :: c30 -> c57 -> c37 matrixMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos MATRIXMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c57 COMPUTELINE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c38 c38 :: c39:c40 -> c38 COMPUTELINE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c39:c40 c39 :: c41:c42 -> c39:c40 COMPUTELINE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c41:c42 c40 :: c39:c40 c41 :: c38 -> c50 -> c41:c42 lineMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c50 c42 :: c41:c42 c43 :: c44:c45 -> c43 DEQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c44:c45 c44 :: c44:c45 c45 :: c46:c47 -> c61 -> c44:c45 DEQUEUE#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c46:c47 reverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos REVERSE :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c61 c46 :: c46:c47 c47 :: c46:c47 c48 :: c49 -> c48 ENQUEUE#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c49 c49 :: c49 c50 :: c51:c52 -> c50 LINEMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c51:c52 c51 :: c53:c54:c55:c56 -> c51:c52 LINEMULT#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c52 :: c51:c52 c53 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c54 :: c50 -> c53:c54:c55:c56 c55 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c53:c54:c55:c56 c56 :: c50 -> c53:c54:c55:c56 c57 :: c58:c59:c60 -> c57 MATRIXMULT#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c58:c59:c60 c58 :: c38 -> c58:c59:c60 c59 :: c57 -> c58:c59:c60 c60 :: c58:c59:c60 c61 :: c26 -> c61 #0 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #s :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #pos :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #succ :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos #mult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos appendreverse#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult' :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#3 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#4 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos bftMult'#5 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos dequeue#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos enqueue#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos1_62 :: c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_62 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_62 :: c:c1:c2:c3:c4 hole_c264_62 :: c26 hole_c27:c285_62 :: c27:c28 hole_c296_62 :: c29 hole_c307_62 :: c30 hole_c318_62 :: c31 hole_c329_62 :: c32 hole_c33:c3410_62 :: c33:c34 hole_c4311_62 :: c43 hole_c35:c3612_62 :: c35:c36 hole_c3713_62 :: c37 hole_c4814_62 :: c48 hole_c5715_62 :: c57 hole_c3816_62 :: c38 hole_c39:c4017_62 :: c39:c40 hole_c41:c4218_62 :: c41:c42 hole_c5019_62 :: c50 hole_c44:c4520_62 :: c44:c45 hole_c46:c4721_62 :: c46:c47 hole_c6122_62 :: c61 hole_c4923_62 :: c49 hole_c51:c5224_62 :: c51:c52 hole_c53:c54:c55:c5625_62 :: c53:c54:c55:c56 hole_c58:c59:c6026_62 :: c58:c59:c60 hole_c16:c17:c18:c1927_62 :: c16:c17:c18:c19 hole_c20:c21:c22:c2328_62 :: c20:c21:c22:c23 hole_c14:c1529_62 :: c14:c15 gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62 :: Nat -> c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos gen_c:c1:c2:c3:c431_62 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1532_62 :: Nat -> c14:c15 Lemmas: appendreverse#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n250_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(n250_62, b)), rt in Omega(0) LINEMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n60901_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n60901_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n60901_62) LINEMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n30296_62)) -> *33_62, rt in Omega(n30296_62) lineMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n9704981_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(c)) -> *33_62, rt in Omega(n9704981_62) lineMult(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(a), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n4908489_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0)) -> *33_62, rt in Omega(n4908489_62) MATRIXMULT#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14791201_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14791201_62) MATRIXMULT(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14779477_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14779477_62) matrixMult#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14805808_62), rt in Omega(0) APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14811530_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14811530_62) APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(n14839545_62), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14839545_62) Generator Equations: gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(0) <=> nil gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(x)) gen_c:c1:c2:c3:c431_62(0) <=> c gen_c:c1:c2:c3:c431_62(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c431_62(x)) gen_c14:c1532_62(0) <=> c14 gen_c14:c1532_62(+(x, 1)) <=> c15(c, gen_c14:c1532_62(x)) The following defined symbols remain to be analysed: APPENDREVERSE#1 They will be analysed ascendingly in the following order: APPENDREVERSE = APPENDREVERSE#1 ---------------------------------------- (43) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14869769_62)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) -> *33_62, rt in Omega(n14869769_62) Induction Base: APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, 0)), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) Induction Step: APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, +(n14869769_62, 1))), gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)) ->_R^Omega(1) c27(APPENDREVERSE(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14869769_62)), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b)))) ->_R^Omega(1) c27(c26(APPENDREVERSE#1(gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(+(1, n14869769_62)), ::(nil, gen_c24:c25::::nil:tuple#2:leaf:node:#0:#s:#neg:#pos30_62(b))))) ->_IH c27(c26(*33_62)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (44) BOUNDS(1, INF)