WORST_CASE(Omega(n^1),O(n^1)) proof of input_nX5iy6f8lA.trs # AProVE Commit ID: 5b976082cb74a395683ed8cc7acf94bd611ab29f fuhs 20230524 unpublished The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^1). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 409 ms] (2) CpxRelTRS (3) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (4) CdtProblem (5) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CdtProblem (11) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CdtProblem (13) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (14) CpxRelTRS (15) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CpxWeightedTrs (17) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxWeightedTrs (19) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CpxTypedWeightedTrs (21) CompletionProof [UPPER BOUND(ID), 16 ms] (22) CpxTypedWeightedCompleteTrs (23) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (24) CpxRNTS (25) CompleteCoflocoProof [FINISHED, 4054 ms] (26) BOUNDS(1, n^1) (27) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 21 ms] (28) CdtProblem (29) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (30) CpxRelTRS (31) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (32) CpxRelTRS (33) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (34) typed CpxTrs (35) OrderProof [LOWER BOUND(ID), 27 ms] (36) typed CpxTrs (37) RewriteLemmaProof [LOWER BOUND(ID), 1957 ms] (38) BEST (39) proven lower bound (40) LowerBoundPropagationProof [FINISHED, 0 ms] (41) BOUNDS(n^1, INF) (42) typed CpxTrs (43) RewriteLemmaProof [LOWER BOUND(ID), 1582 ms] (44) typed CpxTrs (45) RewriteLemmaProof [LOWER BOUND(ID), 1495 ms] (46) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^1). The TRS R consists of the following rules: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @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 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 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, n^1). The TRS R consists of the following rules: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @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 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 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 (UPPER BOUND(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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, 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)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 K tuples:none Defined Rule Symbols: *_2, +_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, #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, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2 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_2, c30, c31_1, c32_1, c33, c34_2, c35_1, c36_1, c37_1, c38_1, c39_1, c40_1, c41 ---------------------------------------- (5) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 21 trailing nodes: #MULT(#pos(z0), #0) -> c11 COMPUTELINE#2(nil, z0, z1, z2) -> c30 #PRED(#pos(#s(#s(z0)))) -> c19 #ADD(#0, z0) -> c #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) COMPUTELINE#1(nil, z0, z1) -> c28 MATRIXMULT#1(nil, z0) -> c41 #MULT(#0, #pos(z0)) -> c7 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #SUCC(#neg(#s(#s(z0)))) -> c22 LINEMULT#1(nil, z0, z1) -> c33 #MULT(#0, #0) -> c5 #PRED(#neg(#s(z0))) -> c17 #PRED(#0) -> c16 #NATMULT(#0, z0) -> c14 #PRED(#pos(#s(#0))) -> c18 #MULT(#0, #neg(z0)) -> c6 #MULT(#neg(z0), #0) -> c8 #SUCC(#pos(#s(z0))) -> c23 ---------------------------------------- (6) 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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Tuples: #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) K tuples:none Defined Rule Symbols: *_2, +_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #ADD_2, #MULT_2, #NATMULT_2, *'_2, +'_2, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2 Compound Symbols: c2_2, c4_2, c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c29_2, c31_1, c32_1, c34_2, c35_1, c36_1, c37_1, c38_1, c39_1, c40_1 ---------------------------------------- (7) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) K tuples:none Defined Rule Symbols: *_2, +_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, #ADD_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c29_2, c31_1, c32_1, c34_2, c35_1, c36_1, c37_1, c38_1, c39_1, c40_1, c2_1, c4_1 ---------------------------------------- (9) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (10) 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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples:none Defined Rule Symbols: *_2, +_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, #ADD_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c29_2, c31_1, c32_1, c35_1, c36_1, c37_1, c38_1, c39_1, c40_1, c2_1, c4_1, c_1 ---------------------------------------- (11) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: 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 matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) K tuples:none Defined Rule Symbols: #natmult_2, #add_2, #succ_1, lineMult_3, lineMult#1_3, lineMult#2_4, +_2, *_2, #mult_2, #pred_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2, #ADD_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c24_1, c25_1, c26_1, c27_1, c29_2, c31_1, c32_1, c35_1, c36_1, c37_1, c38_1, c39_1, c40_1, c2_1, c4_1, c_1 ---------------------------------------- (13) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (14) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) The (relative) TRS S consists of the following rules: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) Rewrite Strategy: INNERMOST ---------------------------------------- (15) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (16) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: *'(z0, z1) -> c24(#MULT(z0, z1)) [1] +'(z0, z1) -> c25(#ADD(z0, z1)) [1] COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) [1] COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) [1] COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) [1] LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) [1] LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) [1] LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) [1] LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) [1] MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(*(z3, z2), z0)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) [0] lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) [0] lineMult#1(nil, z0, z1) -> nil [0] lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) [0] lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) [0] +(z0, z1) -> #add(z0, z1) [0] *(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (17) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) Renamed defined symbols to avoid conflicts with arithmetic symbols: * => times + => plus ---------------------------------------- (18) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: *'(z0, z1) -> c24(#MULT(z0, z1)) [1] +'(z0, z1) -> c25(#ADD(z0, z1)) [1] COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) [1] COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) [1] COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) [1] LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) [1] LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) [1] LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) [1] LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) [1] MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(times(z3, z2), z0)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) [0] lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) [0] lineMult#1(nil, z0, z1) -> nil [0] lineMult#2(::(z0, z1), z2, z3, z4) -> ::(plus(times(z3, z2), z0), lineMult(z2, z4, z1)) [0] lineMult#2(nil, z0, z1, z2) -> ::(times(z1, z0), lineMult(z0, z2, nil)) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (19) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (20) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: *'(z0, z1) -> c24(#MULT(z0, z1)) [1] +'(z0, z1) -> c25(#ADD(z0, z1)) [1] COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) [1] COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) [1] COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) [1] LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) [1] LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) [1] LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) [1] LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) [1] MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(times(z3, z2), z0)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) [0] lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) [0] lineMult#1(nil, z0, z1) -> nil [0] lineMult#2(::(z0, z1), z2, z3, z4) -> ::(plus(times(z3, z2), z0), lineMult(z2, z4, z1)) [0] lineMult#2(nil, z0, z1, z2) -> ::(times(z1, z0), lineMult(z0, z2, nil)) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] The TRS has the following type information: *' :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c24:c25 c24 :: c9:c10:c12:c13 -> c24:c25 #MULT :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c9:c10:c12:c13 +' :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c24:c25 c25 :: c2:c4 -> c24:c25 #ADD :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c2:c4 COMPUTELINE :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c26 c26 :: c27 -> c26 COMPUTELINE#1 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c27 :: :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 c27 :: c29 -> c27 COMPUTELINE#2 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c29 c29 :: c26 -> c31 -> c29 lineMult :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 LINEMULT :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c31 c31 :: c32 -> c31 LINEMULT#1 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c32 c32 :: c35:c36:c37:c -> c32 LINEMULT#2 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c35:c36:c37:c c35 :: c31 -> c35:c36:c37:c nil :: :::nil:#neg:#pos:#s:#0 c36 :: c24:c25 -> c35:c36:c37:c c37 :: c31 -> c35:c36:c37:c MATRIXMULT :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c38 c38 :: c39:c40 -> c38 MATRIXMULT#1 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c39:c40 c39 :: c26 -> c39:c40 c40 :: c38 -> c39:c40 c :: c24:c25 -> c35:c36:c37:c times :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 #neg :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 c9 :: c15 -> c9:c10:c12:c13 #NATMULT :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> c15 #pos :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 c10 :: c15 -> c9:c10:c12:c13 c12 :: c15 -> c9:c10:c12:c13 c13 :: c15 -> c9:c10:c12:c13 #s :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 c15 :: c2:c4 -> c15 -> c15 #natmult :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 c2 :: c2:c4 -> c2:c4 c4 :: c2:c4 -> c2:c4 #0 :: :::nil:#neg:#pos:#s:#0 #add :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 #succ :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 #pred :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 lineMult#1 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 lineMult#2 :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 plus :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 #mult :: :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 -> :::nil:#neg:#pos:#s:#0 Rewrite Strategy: INNERMOST ---------------------------------------- (21) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: #MULT(v0, v1) -> null_#MULT [0] #NATMULT(v0, v1) -> null_#NATMULT [0] #ADD(v0, v1) -> null_#ADD [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] lineMult(v0, v1, v2) -> null_lineMult [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] COMPUTELINE#1(v0, v1, v2) -> null_COMPUTELINE#1 [0] COMPUTELINE#2(v0, v1, v2, v3) -> null_COMPUTELINE#2 [0] LINEMULT#1(v0, v1, v2) -> null_LINEMULT#1 [0] LINEMULT#2(v0, v1, v2, v3) -> null_LINEMULT#2 [0] MATRIXMULT#1(v0, v1) -> null_MATRIXMULT#1 [0] And the following fresh constants: null_#MULT, null_#NATMULT, null_#ADD, null_#natmult, null_#add, null_#succ, null_lineMult, null_lineMult#1, null_lineMult#2, null_plus, null_times, null_#mult, null_#pred, null_COMPUTELINE#1, null_COMPUTELINE#2, null_LINEMULT#1, null_LINEMULT#2, null_MATRIXMULT#1, const, const1, const2, const3 ---------------------------------------- (22) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: *'(z0, z1) -> c24(#MULT(z0, z1)) [1] +'(z0, z1) -> c25(#ADD(z0, z1)) [1] COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) [1] COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) [1] COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) [1] LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) [1] LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) [1] LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) [1] LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) [1] MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) [1] MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(+'(times(z3, z2), z0)) [1] LINEMULT#2(::(z0, z1), z2, z3, z4) -> c(*'(z3, z2)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) [0] lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) [0] lineMult#1(nil, z0, z1) -> nil [0] lineMult#2(::(z0, z1), z2, z3, z4) -> ::(plus(times(z3, z2), z0), lineMult(z2, z4, z1)) [0] lineMult#2(nil, z0, z1, z2) -> ::(times(z1, z0), lineMult(z0, z2, nil)) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #MULT(v0, v1) -> null_#MULT [0] #NATMULT(v0, v1) -> null_#NATMULT [0] #ADD(v0, v1) -> null_#ADD [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] lineMult(v0, v1, v2) -> null_lineMult [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] COMPUTELINE#1(v0, v1, v2) -> null_COMPUTELINE#1 [0] COMPUTELINE#2(v0, v1, v2, v3) -> null_COMPUTELINE#2 [0] LINEMULT#1(v0, v1, v2) -> null_LINEMULT#1 [0] LINEMULT#2(v0, v1, v2, v3) -> null_LINEMULT#2 [0] MATRIXMULT#1(v0, v1) -> null_MATRIXMULT#1 [0] The TRS has the following type information: *' :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c24:c25 c24 :: c9:c10:c12:c13:null_#MULT -> c24:c25 #MULT :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c9:c10:c12:c13:null_#MULT +' :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c24:c25 c25 :: c2:c4:null_#ADD -> c24:c25 #ADD :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c2:c4:null_#ADD COMPUTELINE :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c26 c26 :: c27:null_COMPUTELINE#1 -> c26 COMPUTELINE#1 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c27:null_COMPUTELINE#1 :: :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred c27 :: c29:null_COMPUTELINE#2 -> c27:null_COMPUTELINE#1 COMPUTELINE#2 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c29:null_COMPUTELINE#2 c29 :: c26 -> c31 -> c29:null_COMPUTELINE#2 lineMult :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred LINEMULT :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c31 c31 :: c32:null_LINEMULT#1 -> c31 LINEMULT#1 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c32:null_LINEMULT#1 c32 :: c35:c36:c37:c:null_LINEMULT#2 -> c32:null_LINEMULT#1 LINEMULT#2 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c35:c36:c37:c:null_LINEMULT#2 c35 :: c31 -> c35:c36:c37:c:null_LINEMULT#2 nil :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred c36 :: c24:c25 -> c35:c36:c37:c:null_LINEMULT#2 c37 :: c31 -> c35:c36:c37:c:null_LINEMULT#2 MATRIXMULT :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c38 c38 :: c39:c40:null_MATRIXMULT#1 -> c38 MATRIXMULT#1 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c39:c40:null_MATRIXMULT#1 c39 :: c26 -> c39:c40:null_MATRIXMULT#1 c40 :: c38 -> c39:c40:null_MATRIXMULT#1 c :: c24:c25 -> c35:c36:c37:c:null_LINEMULT#2 times :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred #neg :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred c9 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT #NATMULT :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> c15:null_#NATMULT #pos :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred c10 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT c12 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT c13 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT #s :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred c15 :: c2:c4:null_#ADD -> c15:null_#NATMULT -> c15:null_#NATMULT #natmult :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred c2 :: c2:c4:null_#ADD -> c2:c4:null_#ADD c4 :: c2:c4:null_#ADD -> c2:c4:null_#ADD #0 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred #add :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred #succ :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred #pred :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred lineMult#1 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred lineMult#2 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred plus :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred #mult :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred -> :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_#MULT :: c9:c10:c12:c13:null_#MULT null_#NATMULT :: c15:null_#NATMULT null_#ADD :: c2:c4:null_#ADD null_#natmult :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_#add :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_#succ :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_lineMult :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_lineMult#1 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_lineMult#2 :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_plus :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_times :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_#mult :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_#pred :: :::nil:#neg:#pos:#s:#0:null_#natmult:null_#add:null_#succ:null_lineMult:null_lineMult#1:null_lineMult#2:null_plus:null_times:null_#mult:null_#pred null_COMPUTELINE#1 :: c27:null_COMPUTELINE#1 null_COMPUTELINE#2 :: c29:null_COMPUTELINE#2 null_LINEMULT#1 :: c32:null_LINEMULT#1 null_LINEMULT#2 :: c35:c36:c37:c:null_LINEMULT#2 null_MATRIXMULT#1 :: c39:c40:null_MATRIXMULT#1 const :: c24:c25 const1 :: c26 const2 :: c31 const3 :: c38 Rewrite Strategy: INNERMOST ---------------------------------------- (23) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 1 #0 => 0 null_#MULT => 0 null_#NATMULT => 0 null_#ADD => 0 null_#natmult => 0 null_#add => 0 null_#succ => 0 null_lineMult => 0 null_lineMult#1 => 0 null_lineMult#2 => 0 null_plus => 0 null_times => 0 null_#mult => 0 null_#pred => 0 null_COMPUTELINE#1 => 0 null_COMPUTELINE#2 => 0 null_LINEMULT#1 => 0 null_LINEMULT#2 => 0 null_MATRIXMULT#1 => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + z0), z1) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #MULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #NATMULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, #natmult(z0, z1)) + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #add(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(z0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0 #add(z, z') -{ 0 }-> #succ(#add(1 + (1 + z0), z1)) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #add(z, z') -{ 0 }-> #pred(z0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0 #add(z, z') -{ 0 }-> #pred(#add(1 + (1 + z0), z1)) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z' = 1 + z0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 1 + z0, z0 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #natmult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + z1, #natmult(z0, z1)) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) *'(z, z') -{ 1 }-> 1 + #MULT(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 COMPUTELINE(z, z', z'') -{ 1 }-> 1 + COMPUTELINE#1(z0, z2, z1) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 COMPUTELINE#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 COMPUTELINE#1(z, z', z'') -{ 1 }-> 1 + COMPUTELINE#2(z3, z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 COMPUTELINE#2(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 COMPUTELINE#2(z, z', z'', z5) -{ 1 }-> 1 + COMPUTELINE(z4, z1, lineMult(z3, z0, z2)) + LINEMULT(z3, z0, z2) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT(z, z', z'') -{ 1 }-> 1 + LINEMULT#1(z1, z2, z0) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 LINEMULT#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 LINEMULT#1(z, z', z'') -{ 1 }-> 1 + LINEMULT#2(z2, z3, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT#2(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 LINEMULT#2(z, z', z'', z5) -{ 1 }-> 1 + LINEMULT(z0, z2, 1) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 LINEMULT#2(z, z', z'', z5) -{ 1 }-> 1 + LINEMULT(z2, z4, z1) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT#2(z, z', z'', z5) -{ 1 }-> 1 + +'(times(z3, z2), z0) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT#2(z, z', z'', z5) -{ 1 }-> 1 + *'(z1, z0) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 LINEMULT#2(z, z', z'', z5) -{ 1 }-> 1 + *'(z3, z2) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MATRIXMULT#1(z, z') -{ 1 }-> 1 + MATRIXMULT(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT#1(z, z') -{ 1 }-> 1 + COMPUTELINE(z0, z2, 1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 lineMult(z, z', z'') -{ 0 }-> lineMult#1(z1, z2, z0) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 lineMult(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#1(z, z', z'') -{ 0 }-> lineMult#2(z2, z3, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 lineMult#1(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#2(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 lineMult#2(z, z', z'', z5) -{ 0 }-> 1 + times(z1, z0) + lineMult(z0, z2, 1) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 lineMult#2(z, z', z'', z5) -{ 0 }-> 1 + plus(times(z3, z2), z0) + lineMult(z2, z4, z1) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> #add(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 times(z, z') -{ 0 }-> #mult(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (25) CompleteCoflocoProof (FINISHED) Transformed the RNTS (where only complete derivations are relevant) into cost relations for CoFloCo: eq(start(V1, V, V6, V16),0,[fun(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun2(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun4(V1, V, V6, Out)],[V1 >= 0,V >= 0,V6 >= 0]). eq(start(V1, V, V6, V16),0,[fun5(V1, V, V6, Out)],[V1 >= 0,V >= 0,V6 >= 0]). eq(start(V1, V, V6, V16),0,[fun6(V1, V, V6, V16, Out)],[V1 >= 0,V >= 0,V6 >= 0,V16 >= 0]). eq(start(V1, V, V6, V16),0,[fun7(V1, V, V6, Out)],[V1 >= 0,V >= 0,V6 >= 0]). eq(start(V1, V, V6, V16),0,[fun8(V1, V, V6, Out)],[V1 >= 0,V >= 0,V6 >= 0]). eq(start(V1, V, V6, V16),0,[fun9(V1, V, V6, V16, Out)],[V1 >= 0,V >= 0,V6 >= 0,V16 >= 0]). eq(start(V1, V, V6, V16),0,[fun10(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun11(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun1(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun12(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun3(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun13(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun14(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun15(V1, Out)],[V1 >= 0]). eq(start(V1, V, V6, V16),0,[lineMult(V1, V, V6, Out)],[V1 >= 0,V >= 0,V6 >= 0]). eq(start(V1, V, V6, V16),0,[fun17(V1, V, V6, Out)],[V1 >= 0,V >= 0,V6 >= 0]). eq(start(V1, V, V6, V16),0,[fun18(V1, V, V6, V16, Out)],[V1 >= 0,V >= 0,V6 >= 0,V16 >= 0]). eq(start(V1, V, V6, V16),0,[plus(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[times(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun19(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V6, V16),0,[fun16(V1, Out)],[V1 >= 0]). eq(fun(V1, V, Out),1,[fun1(V3, V2, Ret1)],[Out = 1 + Ret1,V1 = V3,V2 >= 0,V = V2,V3 >= 0]). eq(fun2(V1, V, Out),1,[fun3(V5, V4, Ret11)],[Out = 1 + Ret11,V1 = V5,V4 >= 0,V = V4,V5 >= 0]). eq(fun4(V1, V, V6, Out),1,[fun5(V8, V9, V7, Ret12)],[Out = 1 + Ret12,V6 = V9,V1 = V8,V7 >= 0,V = V7,V8 >= 0,V9 >= 0]). eq(fun5(V1, V, V6, Out),1,[fun6(V13, V11, V10, V12, Ret13)],[Out = 1 + Ret13,V12 >= 0,V = V11,V10 >= 0,V6 = V13,V1 = 1 + V10 + V12,V11 >= 0,V13 >= 0]). eq(fun6(V1, V, V6, V16, Out),1,[lineMult(V19, V15, V17, Ret012),fun4(V18, V14, Ret012, Ret01),fun7(V19, V15, V17, Ret14)],[Out = 1 + Ret01 + Ret14,V14 >= 0,V16 = V18,V = V17,V15 >= 0,V6 = V19,V18 >= 0,V1 = 1 + V14 + V15,V17 >= 0,V19 >= 0]). eq(fun7(V1, V, V6, Out),1,[fun8(V20, V22, V21, Ret15)],[Out = 1 + Ret15,V6 = V22,V1 = V21,V20 >= 0,V = V20,V21 >= 0,V22 >= 0]). eq(fun8(V1, V, V6, Out),1,[fun9(V26, V25, V24, V23, Ret16)],[Out = 1 + Ret16,V23 >= 0,V = V26,V24 >= 0,V6 = V25,V1 = 1 + V23 + V24,V26 >= 0,V25 >= 0]). eq(fun9(V1, V, V6, V16, Out),1,[fun7(V27, V30, V28, Ret17)],[Out = 1 + Ret17,V28 >= 0,V16 = V30,V = V27,V31 >= 0,V6 = V29,V30 >= 0,V1 = 1 + V28 + V31,V27 >= 0,V29 >= 0]). eq(fun9(V1, V, V6, V16, Out),1,[fun(V33, V34, Ret18)],[Out = 1 + Ret18,V33 >= 0,V1 = 1,V34 >= 0,V16 = V32,V = V34,V32 >= 0,V6 = V33]). eq(fun9(V1, V, V6, V16, Out),1,[fun7(V35, V36, 1, Ret19)],[Out = 1 + Ret19,V37 >= 0,V1 = 1,V35 >= 0,V16 = V36,V = V35,V36 >= 0,V6 = V37]). eq(fun10(V1, V, Out),1,[fun11(V38, V39, Ret110)],[Out = 1 + Ret110,V1 = V38,V39 >= 0,V = V39,V38 >= 0]). eq(fun11(V1, V, Out),1,[fun4(V42, V40, 1, Ret111)],[Out = 1 + Ret111,V41 >= 0,V = V40,V42 >= 0,V1 = 1 + V41 + V42,V40 >= 0]). eq(fun11(V1, V, Out),1,[fun10(V44, V45, Ret112)],[Out = 1 + Ret112,V44 >= 0,V = V45,V43 >= 0,V1 = 1 + V43 + V44,V45 >= 0]). eq(fun9(V1, V, V6, V16, Out),1,[times(V48, V46, Ret10),fun2(Ret10, V47, Ret113)],[Out = 1 + Ret113,V49 >= 0,V16 = V50,V = V46,V47 >= 0,V6 = V48,V50 >= 0,V1 = 1 + V47 + V49,V46 >= 0,V48 >= 0]). eq(fun9(V1, V, V6, V16, Out),1,[fun(V53, V52, Ret114)],[Out = 1 + Ret114,V55 >= 0,V16 = V51,V = V52,V54 >= 0,V6 = V53,V51 >= 0,V1 = 1 + V54 + V55,V52 >= 0,V53 >= 0]). eq(fun1(V1, V, Out),0,[fun12(V57, V56, Ret115)],[Out = 1 + Ret115,V56 >= 0,V1 = 1 + V57,V57 >= 0,V = 1 + V56]). eq(fun12(V1, V, Out),0,[fun13(V58, V59, Ret011),fun3(1 + V59, Ret011, Ret013),fun12(V58, V59, Ret116)],[Out = 1 + Ret013 + Ret116,V59 >= 0,V1 = 1 + V58,V = V59,V58 >= 0]). eq(fun3(V1, V, Out),0,[fun3(1 + (1 + V60), V61, Ret117)],[Out = 1 + Ret117,V61 >= 0,V = V61,V60 >= 0,V1 = 3 + V60]). eq(fun13(V1, V, Out),0,[],[Out = 0,V62 >= 0,V1 = 0,V = V62]). eq(fun13(V1, V, Out),0,[fun13(V63, V64, Ret118),fun14(1 + V64, Ret118, Ret)],[Out = Ret,V64 >= 0,V1 = 1 + V63,V = V64,V63 >= 0]). eq(fun14(V1, V, Out),0,[fun15(V65, Ret2)],[Out = Ret2,V1 = 2,V65 >= 0,V = V65]). eq(fun14(V1, V, Out),0,[fun14(1 + (1 + V67), V66, Ret0),fun15(Ret0, Ret3)],[Out = Ret3,V66 >= 0,V = V66,V67 >= 0,V1 = 3 + V67]). eq(fun14(V1, V, Out),0,[],[Out = V68,V68 >= 0,V1 = 0,V = V68]). eq(fun14(V1, V, Out),0,[fun16(V69, Ret4)],[Out = Ret4,V1 = 2,V69 >= 0,V = V69]). eq(fun14(V1, V, Out),0,[fun14(1 + (1 + V70), V71, Ret02),fun16(Ret02, Ret5)],[Out = Ret5,V71 >= 0,V = V71,V70 >= 0,V1 = 3 + V70]). eq(fun15(V1, Out),0,[],[Out = 2,V1 = 0]). eq(fun15(V1, Out),0,[],[Out = 0,V1 = 2]). eq(fun15(V1, Out),0,[],[Out = 2 + V72,V72 >= 0,V1 = 3 + V72]). eq(fun15(V1, Out),0,[],[Out = 3 + V73,V73 >= 0,V1 = 2 + V73]). eq(lineMult(V1, V, V6, Out),0,[fun17(V74, V76, V75, Ret6)],[Out = Ret6,V6 = V76,V1 = V75,V74 >= 0,V = V74,V75 >= 0,V76 >= 0]). eq(fun17(V1, V, V6, Out),0,[fun18(V80, V77, V79, V78, Ret7)],[Out = Ret7,V78 >= 0,V = V80,V79 >= 0,V6 = V77,V1 = 1 + V78 + V79,V80 >= 0,V77 >= 0]). eq(fun17(V1, V, V6, Out),0,[],[Out = 1,V82 >= 0,V1 = 1,V81 >= 0,V = V81,V6 = V82]). eq(fun18(V1, V, V6, V16, Out),0,[times(V84, V86, Ret010),plus(Ret010, V83, Ret014),lineMult(V86, V85, V87, Ret119)],[Out = 1 + Ret014 + Ret119,V87 >= 0,V16 = V85,V = V86,V83 >= 0,V6 = V84,V85 >= 0,V1 = 1 + V83 + V87,V86 >= 0,V84 >= 0]). eq(fun18(V1, V, V6, V16, Out),0,[times(V90, V88, Ret015),lineMult(V88, V89, 1, Ret120)],[Out = 1 + Ret015 + Ret120,V90 >= 0,V1 = 1,V88 >= 0,V16 = V89,V = V88,V89 >= 0,V6 = V90]). eq(plus(V1, V, Out),0,[fun14(V91, V92, Ret8)],[Out = Ret8,V1 = V91,V92 >= 0,V = V92,V91 >= 0]). eq(times(V1, V, Out),0,[fun19(V93, V94, Ret9)],[Out = Ret9,V1 = V93,V94 >= 0,V = V94,V93 >= 0]). eq(fun19(V1, V, Out),0,[],[Out = 0,V1 = 0,V = 0]). eq(fun19(V1, V, Out),0,[],[Out = 0,V95 >= 0,V = 1 + V95,V1 = 0]). eq(fun19(V1, V, Out),0,[],[Out = 0,V1 = 1 + V96,V96 >= 0,V = 0]). eq(fun19(V1, V, Out),0,[fun13(V97, V98, Ret121)],[Out = 1 + Ret121,V98 >= 0,V1 = 1 + V97,V97 >= 0,V = 1 + V98]). eq(fun16(V1, Out),0,[],[Out = 2,V1 = 0]). eq(fun16(V1, Out),0,[],[Out = 3 + V99,V99 >= 0,V1 = 2 + V99]). eq(fun16(V1, Out),0,[],[Out = 0,V1 = 2]). eq(fun16(V1, Out),0,[],[Out = 2 + V100,V100 >= 0,V1 = 3 + V100]). eq(fun1(V1, V, Out),0,[],[Out = 0,V102 >= 0,V101 >= 0,V1 = V102,V = V101]). eq(fun12(V1, V, Out),0,[],[Out = 0,V104 >= 0,V103 >= 0,V1 = V104,V = V103]). eq(fun3(V1, V, Out),0,[],[Out = 0,V106 >= 0,V105 >= 0,V1 = V106,V = V105]). eq(fun13(V1, V, Out),0,[],[Out = 0,V107 >= 0,V108 >= 0,V1 = V107,V = V108]). eq(fun14(V1, V, Out),0,[],[Out = 0,V110 >= 0,V109 >= 0,V1 = V110,V = V109]). eq(fun15(V1, Out),0,[],[Out = 0,V111 >= 0,V1 = V111]). eq(lineMult(V1, V, V6, Out),0,[],[Out = 0,V113 >= 0,V6 = V114,V112 >= 0,V1 = V113,V = V112,V114 >= 0]). eq(fun17(V1, V, V6, Out),0,[],[Out = 0,V115 >= 0,V6 = V117,V116 >= 0,V1 = V115,V = V116,V117 >= 0]). eq(fun18(V1, V, V6, V16, Out),0,[],[Out = 0,V16 = V121,V118 >= 0,V6 = V120,V119 >= 0,V1 = V118,V = V119,V120 >= 0,V121 >= 0]). eq(plus(V1, V, Out),0,[],[Out = 0,V123 >= 0,V122 >= 0,V1 = V123,V = V122]). eq(times(V1, V, Out),0,[],[Out = 0,V124 >= 0,V125 >= 0,V1 = V124,V = V125]). eq(fun19(V1, V, Out),0,[],[Out = 0,V126 >= 0,V127 >= 0,V1 = V126,V = V127]). eq(fun16(V1, Out),0,[],[Out = 0,V128 >= 0,V1 = V128]). eq(fun5(V1, V, V6, Out),0,[],[Out = 0,V131 >= 0,V6 = V129,V130 >= 0,V1 = V131,V = V130,V129 >= 0]). eq(fun6(V1, V, V6, V16, Out),0,[],[Out = 0,V16 = V135,V134 >= 0,V6 = V132,V133 >= 0,V1 = V134,V = V133,V132 >= 0,V135 >= 0]). eq(fun8(V1, V, V6, Out),0,[],[Out = 0,V138 >= 0,V6 = V136,V137 >= 0,V1 = V138,V = V137,V136 >= 0]). eq(fun9(V1, V, V6, V16, Out),0,[],[Out = 0,V16 = V140,V142 >= 0,V6 = V139,V141 >= 0,V1 = V142,V = V141,V139 >= 0,V140 >= 0]). eq(fun11(V1, V, Out),0,[],[Out = 0,V144 >= 0,V143 >= 0,V1 = V144,V = V143]). input_output_vars(fun(V1,V,Out),[V1,V],[Out]). input_output_vars(fun2(V1,V,Out),[V1,V],[Out]). input_output_vars(fun4(V1,V,V6,Out),[V1,V,V6],[Out]). input_output_vars(fun5(V1,V,V6,Out),[V1,V,V6],[Out]). input_output_vars(fun6(V1,V,V6,V16,Out),[V1,V,V6,V16],[Out]). input_output_vars(fun7(V1,V,V6,Out),[V1,V,V6],[Out]). input_output_vars(fun8(V1,V,V6,Out),[V1,V,V6],[Out]). input_output_vars(fun9(V1,V,V6,V16,Out),[V1,V,V6,V16],[Out]). input_output_vars(fun10(V1,V,Out),[V1,V],[Out]). input_output_vars(fun11(V1,V,Out),[V1,V],[Out]). input_output_vars(fun1(V1,V,Out),[V1,V],[Out]). input_output_vars(fun12(V1,V,Out),[V1,V],[Out]). input_output_vars(fun3(V1,V,Out),[V1,V],[Out]). input_output_vars(fun13(V1,V,Out),[V1,V],[Out]). input_output_vars(fun14(V1,V,Out),[V1,V],[Out]). input_output_vars(fun15(V1,Out),[V1],[Out]). input_output_vars(lineMult(V1,V,V6,Out),[V1,V,V6],[Out]). input_output_vars(fun17(V1,V,V6,Out),[V1,V,V6],[Out]). input_output_vars(fun18(V1,V,V6,V16,Out),[V1,V,V6,V16],[Out]). input_output_vars(plus(V1,V,Out),[V1,V],[Out]). input_output_vars(times(V1,V,Out),[V1,V],[Out]). input_output_vars(fun19(V1,V,Out),[V1,V],[Out]). input_output_vars(fun16(V1,Out),[V1],[Out]). CoFloCo proof output: Preprocessing Cost Relations ===================================== #### Computed strongly connected components 0. non_recursive : [fun15/2] 1. non_recursive : [fun16/2] 2. recursive [non_tail] : [fun14/3] 3. recursive [non_tail] : [fun13/3] 4. recursive : [fun3/3] 5. recursive : [fun12/3] 6. non_recursive : [fun1/3] 7. non_recursive : [fun/3] 8. non_recursive : [fun2/3] 9. non_recursive : [fun19/3] 10. non_recursive : [times/3] 11. recursive : [fun7/4,fun8/4,fun9/5] 12. non_recursive : [plus/3] 13. recursive : [fun17/4,fun18/5,lineMult/4] 14. recursive [non_tail] : [fun4/4,fun5/4,fun6/5] 15. recursive : [fun10/3,fun11/3] 16. non_recursive : [start/4] #### Obtained direct recursion through partial evaluation 0. SCC is partially evaluated into fun15/2 1. SCC is partially evaluated into fun16/2 2. SCC is partially evaluated into fun14/3 3. SCC is partially evaluated into fun13/3 4. SCC is partially evaluated into fun3/3 5. SCC is partially evaluated into fun12/3 6. SCC is partially evaluated into fun1/3 7. SCC is completely evaluated into other SCCs 8. SCC is completely evaluated into other SCCs 9. SCC is partially evaluated into fun19/3 10. SCC is partially evaluated into times/3 11. SCC is partially evaluated into fun7/4 12. SCC is partially evaluated into plus/3 13. SCC is partially evaluated into lineMult/4 14. SCC is partially evaluated into fun4/4 15. SCC is partially evaluated into fun11/3 16. SCC is partially evaluated into start/4 Control-Flow Refinement of Cost Relations ===================================== ### Specialization of cost equations fun15/2 * CE 70 is refined into CE [80] * CE 71 is refined into CE [81] * CE 69 is refined into CE [82] * CE 68 is refined into CE [83] ### Cost equations --> "Loop" of fun15/2 * CEs [80] --> Loop 43 * CEs [81] --> Loop 44 * CEs [82] --> Loop 45 * CEs [83] --> Loop 46 ### Ranking functions of CR fun15(V1,Out) #### Partial ranking functions of CR fun15(V1,Out) ### Specialization of cost equations fun16/2 * CE 79 is refined into CE [84] * CE 77 is refined into CE [85] * CE 78 is refined into CE [86] * CE 76 is refined into CE [87] ### Cost equations --> "Loop" of fun16/2 * CEs [84] --> Loop 47 * CEs [85] --> Loop 48 * CEs [86] --> Loop 49 * CEs [87] --> Loop 50 ### Ranking functions of CR fun16(V1,Out) #### Partial ranking functions of CR fun16(V1,Out) ### Specialization of cost equations fun14/3 * CE 67 is refined into CE [88] * CE 62 is refined into CE [89,90,91,92] * CE 65 is refined into CE [93,94,95,96] * CE 64 is refined into CE [97] * CE 63 is refined into CE [98,99,100,101] * CE 66 is refined into CE [102,103,104,105] ### Cost equations --> "Loop" of fun14/3 * CEs [100,104] --> Loop 51 * CEs [101,105] --> Loop 52 * CEs [98,102] --> Loop 53 * CEs [99,103] --> Loop 54 * CEs [92,96] --> Loop 55 * CEs [91,95] --> Loop 56 * CEs [88,90,94] --> Loop 57 * CEs [89,93] --> Loop 58 * CEs [97] --> Loop 59 ### Ranking functions of CR fun14(V1,V,Out) * RF of phase [51,52,53,54]: [V1-2] #### Partial ranking functions of CR fun14(V1,V,Out) * Partial RF of phase [51,52,53,54]: - RF of loop [51:1,52:1,53:1,54:1]: V1-2 ### Specialization of cost equations fun13/3 * CE 60 is refined into CE [106] * CE 61 is refined into CE [107,108,109,110,111,112,113] ### Cost equations --> "Loop" of fun13/3 * CEs [113] --> Loop 60 * CEs [112] --> Loop 61 * CEs [110] --> Loop 62 * CEs [111] --> Loop 63 * CEs [108] --> Loop 64 * CEs [109] --> Loop 65 * CEs [107] --> Loop 66 * CEs [106] --> Loop 67 ### Ranking functions of CR fun13(V1,V,Out) * RF of phase [60,61,62,63,64,65,66]: [V1] #### Partial ranking functions of CR fun13(V1,V,Out) * Partial RF of phase [60,61,62,63,64,65,66]: - RF of loop [60:1,61:1,62:1,63:1,64:1,65:1,66:1]: V1 ### Specialization of cost equations fun3/3 * CE 57 is refined into CE [114] * CE 56 is refined into CE [115] ### Cost equations --> "Loop" of fun3/3 * CEs [115] --> Loop 68 * CEs [114] --> Loop 69 ### Ranking functions of CR fun3(V1,V,Out) * RF of phase [68]: [V1-2] #### Partial ranking functions of CR fun3(V1,V,Out) * Partial RF of phase [68]: - RF of loop [68:1]: V1-2 ### Specialization of cost equations fun12/3 * CE 59 is refined into CE [116] * CE 58 is refined into CE [117,118,119,120] ### Cost equations --> "Loop" of fun12/3 * CEs [118,120] --> Loop 70 * CEs [117,119] --> Loop 71 * CEs [116] --> Loop 72 ### Ranking functions of CR fun12(V1,V,Out) * RF of phase [70,71]: [V1] #### Partial ranking functions of CR fun12(V1,V,Out) * Partial RF of phase [70,71]: - RF of loop [70:1,71:1]: V1 ### Specialization of cost equations fun1/3 * CE 54 is refined into CE [121,122] * CE 55 is refined into CE [123] ### Cost equations --> "Loop" of fun1/3 * CEs [122] --> Loop 73 * CEs [121] --> Loop 74 * CEs [123] --> Loop 75 ### Ranking functions of CR fun1(V1,V,Out) #### Partial ranking functions of CR fun1(V1,V,Out) ### Specialization of cost equations fun19/3 * CE 75 is refined into CE [124,125] * CE 74 is refined into CE [126] * CE 72 is refined into CE [127] * CE 73 is refined into CE [128] ### Cost equations --> "Loop" of fun19/3 * CEs [125] --> Loop 76 * CEs [124] --> Loop 77 * CEs [126] --> Loop 78 * CEs [127,128] --> Loop 79 ### Ranking functions of CR fun19(V1,V,Out) #### Partial ranking functions of CR fun19(V1,V,Out) ### Specialization of cost equations times/3 * CE 50 is refined into CE [129,130,131] * CE 51 is refined into CE [132] ### Cost equations --> "Loop" of times/3 * CEs [131] --> Loop 80 * CEs [130] --> Loop 81 * CEs [129,132] --> Loop 82 ### Ranking functions of CR times(V1,V,Out) #### Partial ranking functions of CR times(V1,V,Out) ### Specialization of cost equations fun7/4 * CE 45 is refined into CE [133,134,135] * CE 46 is refined into CE [136,137,138,139] * CE 44 is refined into CE [140] * CE 49 is refined into CE [141] * CE 48 is refined into CE [142] * CE 47 is refined into CE [143] ### Cost equations --> "Loop" of fun7/4 * CEs [142] --> Loop 83 * CEs [143] --> Loop 84 * CEs [135,139] --> Loop 85 * CEs [134] --> Loop 86 * CEs [133,136,137,138] --> Loop 87 * CEs [140] --> Loop 88 * CEs [141] --> Loop 89 ### Ranking functions of CR fun7(V1,V,V6,Out) * RF of phase [83,84]: [V] #### Partial ranking functions of CR fun7(V1,V,V6,Out) * Partial RF of phase [83,84]: - RF of loop [83:1]: V6 - RF of loop [83:1,84:1]: V ### Specialization of cost equations plus/3 * CE 52 is refined into CE [144,145,146,147,148,149,150,151] * CE 53 is refined into CE [152] ### Cost equations --> "Loop" of plus/3 * CEs [151] --> Loop 90 * CEs [150] --> Loop 91 * CEs [149,152] --> Loop 92 * CEs [148] --> Loop 93 * CEs [147] --> Loop 94 * CEs [146] --> Loop 95 * CEs [145] --> Loop 96 * CEs [144] --> Loop 97 ### Ranking functions of CR plus(V1,V,Out) #### Partial ranking functions of CR plus(V1,V,Out) ### Specialization of cost equations lineMult/4 * CE 37 is refined into CE [153] * CE 40 is refined into CE [154] * CE 39 is refined into CE [155,156,157,158,159,160,161,162,163,164] * CE 38 is refined into CE [165,166,167] ### Cost equations --> "Loop" of lineMult/4 * CEs [159] --> Loop 98 * CEs [155] --> Loop 99 * CEs [160] --> Loop 100 * CEs [156,157,162] --> Loop 101 * CEs [158,161,163,164] --> Loop 102 * CEs [167] --> Loop 103 * CEs [166] --> Loop 104 * CEs [165] --> Loop 105 * CEs [153] --> Loop 106 * CEs [154] --> Loop 107 ### Ranking functions of CR lineMult(V1,V,V6,Out) * RF of phase [98,99,100,101,102,103,104,105]: [V] #### Partial ranking functions of CR lineMult(V1,V,V6,Out) * Partial RF of phase [98,99,100,101,102,103,104,105]: - RF of loop [98:1]: V6/3-2/3 - RF of loop [98:1,100:1,102:1,103:1]: V/3-2/3 - RF of loop [99:1,101:1,102:1]: V6 - RF of loop [99:1,101:1,105:1]: V - RF of loop [100:1]: V6/4-3/4 - RF of loop [104:1]: V/2-1/2 ### Specialization of cost equations fun4/4 * CE 43 is refined into CE [168] * CE 41 is refined into CE [169] * CE 42 is refined into CE [170,171,172,173,174,175,176,177,178,179,180,181,182] ### Cost equations --> "Loop" of fun4/4 * CEs [182] --> Loop 108 * CEs [181] --> Loop 109 * CEs [179] --> Loop 110 * CEs [178] --> Loop 111 * CEs [172,180] --> Loop 112 * CEs [171] --> Loop 113 * CEs [170] --> Loop 114 * CEs [177] --> Loop 115 * CEs [175,176] --> Loop 116 * CEs [174] --> Loop 117 * CEs [173] --> Loop 118 * CEs [168] --> Loop 119 * CEs [169] --> Loop 120 ### Ranking functions of CR fun4(V1,V,V6,Out) * RF of phase [108,109,110,111,112,113,114,115,116,117,118]: [V,V1] #### Partial ranking functions of CR fun4(V1,V,V6,Out) * Partial RF of phase [108,109,110,111,112,113,114,115,116,117,118]: - RF of loop [108:1,109:1,115:1]: V1/2-1/2 - RF of loop [108:1,115:1]: V/4-3/4 - RF of loop [109:1]: V/3-2/3 - RF of loop [110:1,111:1,112:1,113:1,114:1,116:1,117:1]: V/2-1/2 - RF of loop [110:1,111:1,112:1,113:1,114:1,116:1,117:1,118:1]: V1 - RF of loop [115:1,116:1]: V6 depends on loops [108:1,109:1,110:1,111:1,112:1,113:1,114:1] - RF of loop [118:1]: V ### Specialization of cost equations fun11/3 * CE 35 is refined into CE [183,184,185] * CE 36 is refined into CE [186] * CE 34 is refined into CE [187] ### Cost equations --> "Loop" of fun11/3 * CEs [187] --> Loop 121 * CEs [185] --> Loop 122 * CEs [184] --> Loop 123 * CEs [183] --> Loop 124 * CEs [186] --> Loop 125 ### Ranking functions of CR fun11(V1,V,Out) * RF of phase [121]: [V1] #### Partial ranking functions of CR fun11(V1,V,Out) * Partial RF of phase [121]: - RF of loop [121:1]: V1 ### Specialization of cost equations start/4 * CE 6 is refined into CE [188,189,190,191,192,193,194,195,196] * CE 14 is refined into CE [197,198,199,200,201] * CE 1 is refined into CE [202,203,204,205] * CE 2 is refined into CE [206] * CE 3 is refined into CE [207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245] * CE 4 is refined into CE [246] * CE 5 is refined into CE [247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285] * CE 7 is refined into CE [286,287,288,289,290,291,292,293,294] * CE 8 is refined into CE [295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324] * CE 9 is refined into CE [325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354] * CE 10 is refined into CE [355,356,357] * CE 11 is refined into CE [358,359,360] * CE 12 is refined into CE [361,362,363,364] * CE 13 is refined into CE [365,366,367,368] * CE 15 is refined into CE [369,370,371,372,373] * CE 16 is refined into CE [374,375,376,377,378] * CE 17 is refined into CE [379,380,381,382,383] * CE 18 is refined into CE [384,385,386] * CE 19 is refined into CE [387,388] * CE 20 is refined into CE [389,390,391] * CE 21 is refined into CE [392,393,394,395,396] * CE 22 is refined into CE [397,398,399,400] * CE 23 is refined into CE [401,402,403] * CE 24 is refined into CE [404,405] * CE 25 is refined into CE [406,407] * CE 26 is refined into CE [408,409] * CE 27 is refined into CE [410,411,412,413,414,415,416,417] * CE 28 is refined into CE [418,419,420,421] * CE 29 is refined into CE [422,423,424] * CE 30 is refined into CE [425,426,427,428,429,430,431,432] * CE 31 is refined into CE [433,434,435] * CE 32 is refined into CE [436,437,438] * CE 33 is refined into CE [439,440,441,442] ### Cost equations --> "Loop" of start/4 * CEs [325,328,331,334,337,340,343,346,349,352] --> Loop 126 * CEs [188,189,190,191,192,193,194,195,196,197,198,199,200,201,422] --> Loop 127 * CEs [414,429] --> Loop 128 * CEs [412,413,427,428] --> Loop 129 * CEs [411,426] --> Loop 130 * CEs [286,287,288,289,290,291,292,293,294,369,370,371,372,373] --> Loop 131 * CEs [202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,326,327,329,330,332,333,335,336,338,339,341,342,344,345,347,348,350,351,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,415,416,417,418,419,420,421,423,424,425,430,431,432,433,434,435,436,437,438,439,440,441,442] --> Loop 132 ### Ranking functions of CR start(V1,V,V6,V16) #### Partial ranking functions of CR start(V1,V,V6,V16) Computing Bounds ===================================== #### Cost of chains of fun15(V1,Out): * Chain [46]: 0 with precondition: [V1=0,Out=2] * Chain [45]: 0 with precondition: [Out=0,V1>=0] * Chain [44]: 0 with precondition: [V1+1=Out,V1>=2] * Chain [43]: 0 with precondition: [V1=Out+1,V1>=3] #### Cost of chains of fun16(V1,Out): * Chain [50]: 0 with precondition: [V1=0,Out=2] * Chain [49]: 0 with precondition: [Out=0,V1>=0] * Chain [48]: 0 with precondition: [V1+1=Out,V1>=2] * Chain [47]: 0 with precondition: [V1=Out+1,V1>=3] #### Cost of chains of fun14(V1,V,Out): * Chain [[51,52,53,54],58]: 0 with precondition: [V=0,V1>=3,Out>=0,V1>=Out] * Chain [[51,52,53,54],57]: 0 with precondition: [V1>=3,V>=0,Out>=0,V1>=Out+1] * Chain [[51,52,53,54],56]: 0 with precondition: [V1>=3,V>=2,Out>=0,V+V1>=Out+1] * Chain [[51,52,53,54],55]: 0 with precondition: [V1>=3,V>=3,Out>=0,V+V1>=Out+3] * Chain [59]: 0 with precondition: [V1=0,V=Out,V>=0] * Chain [58]: 0 with precondition: [V1=2,V=0,Out=2] * Chain [57]: 0 with precondition: [Out=0,V1>=0,V>=0] * Chain [56]: 0 with precondition: [V1=2,V+1=Out,V>=2] * Chain [55]: 0 with precondition: [V1=2,V=Out+1,V>=3] #### Cost of chains of fun13(V1,V,Out): * Chain [[60,61,62,63,64,65,66],67]: 0 with precondition: [V1>=1,V>=0,Out>=0] * Chain [67]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun3(V1,V,Out): * Chain [[68],69]: 0 with precondition: [V>=0,Out>=1,V1>=Out+2] * Chain [69]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun12(V1,V,Out): * Chain [[70,71],72]: 0 with precondition: [V1>=1,V>=0,Out>=1] * Chain [72]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun1(V1,V,Out): * Chain [75]: 0 with precondition: [Out=0,V1>=0,V>=0] * Chain [74]: 0 with precondition: [Out=1,V1>=1,V>=1] * Chain [73]: 0 with precondition: [V1>=2,V>=1,Out>=2] #### Cost of chains of fun19(V1,V,Out): * Chain [79]: 0 with precondition: [Out=0,V1>=0,V>=0] * Chain [78]: 0 with precondition: [V=0,Out=0,V1>=1] * Chain [77]: 0 with precondition: [Out=1,V1>=1,V>=1] * Chain [76]: 0 with precondition: [V1>=2,V>=1,Out>=1] #### Cost of chains of times(V1,V,Out): * Chain [82]: 0 with precondition: [Out=0,V1>=0,V>=0] * Chain [81]: 0 with precondition: [Out=1,V1>=1,V>=1] * Chain [80]: 0 with precondition: [V1>=2,V>=1,Out>=1] #### Cost of chains of fun7(V1,V,V6,Out): * Chain [[83,84],89]: 3*it(83)+3*it(84)+1 Such that:it(83) =< V6 aux(9) =< V it(83) =< aux(9) it(84) =< aux(9) with precondition: [V1>=0,V6>=1,Out>=4,3*V+1>=Out] * Chain [[83,84],88]: 3*it(83)+3*it(84)+2 Such that:it(83) =< V6 aux(10) =< V it(83) =< aux(10) it(84) =< aux(10) with precondition: [V1>=0,V6>=1,Out>=5,3*V>=Out+1] * Chain [[83,84],87]: 3*it(83)+3*it(84)+4 Such that:it(83) =< V6 aux(11) =< V it(83) =< aux(11) it(84) =< aux(11) with precondition: [V1>=0,V6>=1,Out>=7,3*V+1>=Out] * Chain [[83,84],86]: 3*it(83)+3*it(84)+4 Such that:it(83) =< V6 aux(12) =< V it(83) =< aux(12) it(84) =< aux(12) with precondition: [V1>=1,V6>=1,Out>=8,3*V>=Out+1] * Chain [[83,84],85]: 3*it(83)+3*it(84)+4 Such that:it(83) =< V6 aux(13) =< V it(83) =< aux(13) it(84) =< aux(13) with precondition: [V1>=1,V>=4,V6>=1,Out>=8] * Chain [89]: 1 with precondition: [Out=1,V1>=0,V>=0,V6>=0] * Chain [88]: 2 with precondition: [Out=2,V1>=0,V>=1,V6>=0] * Chain [87]: 4 with precondition: [Out=4,V1>=0,V>=1,V6>=1] * Chain [86]: 4 with precondition: [Out=5,V1>=1,V>=2,V6>=1] * Chain [85]: 4 with precondition: [V1>=1,V>=3,V6>=1,Out>=5] #### Cost of chains of plus(V1,V,Out): * Chain [97]: 0 with precondition: [V1=0,V=Out,V>=0] * Chain [96]: 0 with precondition: [V1=2,V=0,Out=2] * Chain [95]: 0 with precondition: [V1=2,V+1=Out,V>=2] * Chain [94]: 0 with precondition: [V1=2,V=Out+1,V>=3] * Chain [93]: 0 with precondition: [V=0,V1>=3,Out>=0,V1>=Out] * Chain [92]: 0 with precondition: [Out=0,V1>=0,V>=0] * Chain [91]: 0 with precondition: [V1>=3,V>=0,Out>=0,V1>=Out+1] * Chain [90]: 0 with precondition: [V1>=3,V>=2,Out>=0,V+V1>=Out+1] #### Cost of chains of lineMult(V1,V,V6,Out): * Chain [[98,99,100,101,102,103,104,105],107]: 0 with precondition: [V1>=0,V>=2,V6>=1,Out>=2] * Chain [[98,99,100,101,102,103,104,105],106]: 0 with precondition: [V1>=0,V>=1,V6>=1,Out>=1] * Chain [107]: 0 with precondition: [V=1,Out=1,V1>=0,V6>=0] * Chain [106]: 0 with precondition: [Out=0,V1>=0,V>=0,V6>=0] #### Cost of chains of fun4(V1,V,V6,Out): * Chain [[108,109,110,111,112,113,114,115,116,117,118],120]: 7*it(108)+7*it(109)+37*it(110)+7*it(115)+4*it(118)+60*s(51)+24*s(54)+1 Such that:aux(51) =< V1 aux(52) =< V1/2 aux(53) =< V aux(54) =< V/2 aux(55) =< V/3 aux(56) =< V/4 it(109) =< aux(55) aux(35) =< aux(51) it(108) =< aux(51) it(109) =< aux(51) it(110) =< aux(51) it(115) =< aux(51) it(118) =< aux(51) it(108) =< aux(52) it(109) =< aux(52) it(115) =< aux(52) aux(35) =< aux(53) it(108) =< aux(53) it(109) =< aux(53) it(110) =< aux(53) it(115) =< aux(53) it(118) =< aux(53) aux(35) =< aux(54) it(110) =< aux(54) it(115) =< aux(54) it(115) =< aux(55) it(108) =< aux(56) it(115) =< aux(56) s(51) =< aux(53) s(54) =< aux(35) with precondition: [V1>=1,V>=1,V6>=0,Out>=5] * Chain [[108,109,110,111,112,113,114,115,116,117,118],119]: 7*it(108)+7*it(109)+37*it(110)+7*it(115)+4*it(118)+60*s(51)+24*s(54)+2 Such that:aux(57) =< V1 aux(58) =< V1/2 aux(59) =< V aux(60) =< V/2 aux(61) =< V/3 aux(62) =< V/4 it(109) =< aux(61) aux(35) =< aux(57) it(108) =< aux(57) it(109) =< aux(57) it(110) =< aux(57) it(115) =< aux(57) it(118) =< aux(57) it(108) =< aux(58) it(109) =< aux(58) it(115) =< aux(58) aux(35) =< aux(59) it(108) =< aux(59) it(109) =< aux(59) it(110) =< aux(59) it(115) =< aux(59) it(118) =< aux(59) aux(35) =< aux(60) it(110) =< aux(60) it(115) =< aux(60) it(115) =< aux(61) it(108) =< aux(62) it(115) =< aux(62) s(51) =< aux(59) s(54) =< aux(35) with precondition: [V1>=2,V>=1,V6>=0,Out>=6] * Chain [120]: 1 with precondition: [Out=1,V1>=0,V>=0,V6>=0] * Chain [119]: 2 with precondition: [Out=2,V1>=1,V>=0,V6>=0] #### Cost of chains of fun11(V1,V,Out): * Chain [[121],125]: 2*it(121)+0 Such that:it(121) =< V1 with precondition: [V>=0,Out>=2,2*V1>=Out] * Chain [[121],124]: 2*it(121)+2 Such that:it(121) =< V1 with precondition: [V>=0,Out>=4,2*V1>=Out] * Chain [[121],123]: 2*it(121)+3 Such that:it(121) =< V1 with precondition: [V>=0,Out>=5,2*V1>=Out+1] * Chain [[121],122]: 2*it(121)+14*s(102)+14*s(104)+74*s(105)+14*s(106)+8*s(107)+120*s(108)+48*s(109)+3 Such that:s(98) =< V s(99) =< V/2 s(100) =< V/3 s(101) =< V/4 aux(69) =< V1 it(121) =< aux(69) s(102) =< s(100) s(103) =< aux(69) s(104) =< aux(69) s(102) =< aux(69) s(105) =< aux(69) s(106) =< aux(69) s(107) =< aux(69) s(103) =< s(98) s(104) =< s(98) s(102) =< s(98) s(105) =< s(98) s(106) =< s(98) s(107) =< s(98) s(103) =< s(99) s(105) =< s(99) s(106) =< s(99) s(106) =< s(100) s(104) =< s(101) s(106) =< s(101) s(108) =< s(98) s(109) =< s(103) with precondition: [V1>=3,V>=1,Out>=8] * Chain [125]: 0 with precondition: [Out=0,V1>=0,V>=0] * Chain [124]: 2 with precondition: [Out=2,V1>=1,V>=0] * Chain [123]: 3 with precondition: [Out=3,V1>=2,V>=0] * Chain [122]: 14*s(102)+14*s(104)+74*s(105)+14*s(106)+8*s(107)+120*s(108)+48*s(109)+3 Such that:s(96) =< V1 s(97) =< V1/2 s(98) =< V s(99) =< V/2 s(100) =< V/3 s(101) =< V/4 s(102) =< s(100) s(103) =< s(96) s(104) =< s(96) s(102) =< s(96) s(105) =< s(96) s(106) =< s(96) s(107) =< s(96) s(104) =< s(97) s(102) =< s(97) s(106) =< s(97) s(103) =< s(98) s(104) =< s(98) s(102) =< s(98) s(105) =< s(98) s(106) =< s(98) s(107) =< s(98) s(103) =< s(99) s(105) =< s(99) s(106) =< s(99) s(106) =< s(100) s(104) =< s(101) s(106) =< s(101) s(108) =< s(98) s(109) =< s(103) with precondition: [V1>=2,V>=1,Out>=6] #### Cost of chains of start(V1,V,V6,V16): * Chain [132]: 1681*s(142)+42*s(149)+42*s(151)+370*s(152)+42*s(153)+145*s(154)+615*s(155)+240*s(156)+28*s(158)+28*s(159)+28*s(160)+72*s(163)+72*s(164)+126*s(175)+126*s(177)+666*s(178)+126*s(179)+400*s(180)+1650*s(181)+432*s(182)+105*s(217)+168*s(263)+192*s(270)+126*s(411)+126*s(413)+666*s(414)+126*s(415)+415*s(416)+432*s(418)+168*s(499)+192*s(506)+15*s(643)+8 Such that:aux(84) =< 1 aux(85) =< V1 aux(86) =< V1/2 aux(87) =< V1/3 aux(88) =< V1/4 aux(89) =< V aux(90) =< V/2 aux(91) =< V/3 aux(92) =< V/4 aux(93) =< V6 aux(94) =< V6/2 aux(95) =< V6/3 aux(96) =< V6/4 aux(97) =< V16 aux(98) =< V16/2 s(416) =< aux(85) s(217) =< aux(89) s(154) =< aux(89) s(217) =< aux(93) s(163) =< aux(89) s(163) =< aux(84) s(164) =< aux(84) s(175) =< aux(95) s(176) =< aux(85) s(177) =< aux(85) s(175) =< aux(85) s(178) =< aux(85) s(179) =< aux(85) s(180) =< aux(85) s(177) =< aux(86) s(175) =< aux(86) s(179) =< aux(86) s(176) =< aux(93) s(177) =< aux(93) s(175) =< aux(93) s(178) =< aux(93) s(179) =< aux(93) s(180) =< aux(93) s(176) =< aux(94) s(178) =< aux(94) s(179) =< aux(94) s(179) =< aux(95) s(177) =< aux(96) s(179) =< aux(96) s(181) =< aux(93) s(182) =< s(176) s(411) =< aux(87) s(412) =< aux(97) s(413) =< aux(97) s(411) =< aux(97) s(414) =< aux(97) s(415) =< aux(97) s(416) =< aux(97) s(413) =< aux(98) s(411) =< aux(98) s(415) =< aux(98) s(412) =< aux(85) s(413) =< aux(85) s(411) =< aux(85) s(414) =< aux(85) s(415) =< aux(85) s(412) =< aux(86) s(414) =< aux(86) s(415) =< aux(86) s(415) =< aux(87) s(413) =< aux(88) s(415) =< aux(88) s(142) =< aux(85) s(418) =< s(412) s(149) =< aux(91) s(150) =< aux(85) s(151) =< aux(85) s(149) =< aux(85) s(152) =< aux(85) s(153) =< aux(85) s(154) =< aux(85) s(151) =< aux(86) s(149) =< aux(86) s(153) =< aux(86) s(150) =< aux(89) s(151) =< aux(89) s(149) =< aux(89) s(152) =< aux(89) s(153) =< aux(89) s(150) =< aux(90) s(152) =< aux(90) s(153) =< aux(90) s(153) =< aux(91) s(151) =< aux(92) s(153) =< aux(92) s(155) =< aux(89) s(156) =< s(150) s(158) =< aux(91) s(159) =< aux(85) s(158) =< aux(85) s(160) =< aux(85) s(159) =< aux(89) s(158) =< aux(89) s(160) =< aux(89) s(160) =< aux(90) s(160) =< aux(91) s(159) =< aux(92) s(160) =< aux(92) s(263) =< aux(93) s(264) =< aux(85) s(263) =< aux(85) s(263) =< aux(86) s(264) =< aux(93) s(270) =< s(264) s(643) =< aux(97) s(499) =< aux(85) s(500) =< aux(97) s(499) =< aux(97) s(499) =< aux(98) s(500) =< aux(85) s(506) =< s(500) with precondition: [V1>=0] * Chain [131]: 15*s(690)+15*s(691)+5 Such that:aux(99) =< 1 aux(100) =< V16 s(690) =< aux(99) s(690) =< aux(100) s(691) =< aux(100) with precondition: [V1=1,V>=0,V6>=0,V16>=0] * Chain [130]: 0 with precondition: [V1=2,V=0] * Chain [129]: 0 with precondition: [V1=2,V>=2] * Chain [128]: 0 with precondition: [V=0,V1>=3] * Chain [127]: 15*s(697)+15*s(698)+6 Such that:aux(101) =< 1 aux(102) =< V1 s(697) =< aux(101) s(697) =< aux(102) s(698) =< aux(102) with precondition: [V=1,V1>=0,V6>=0] * Chain [126]: 0 with precondition: [V16=1,V1>=1,V>=0,V6>=0] Closed-form bounds of start(V1,V,V6,V16): ------------------------------------- * Chain [132] with precondition: [V1>=0] - Upper bound: 4956*V1+152+nat(V)*865+nat(V6)*1818+nat(V16)*1557+42*V1+nat(V/3)*70+nat(V6/3)*126 - Complexity: n * Chain [131] with precondition: [V1=1,V>=0,V6>=0,V16>=0] - Upper bound: 15*V16+20 - Complexity: n * Chain [130] with precondition: [V1=2,V=0] - Upper bound: 0 - Complexity: constant * Chain [129] with precondition: [V1=2,V>=2] - Upper bound: 0 - Complexity: constant * Chain [128] with precondition: [V=0,V1>=3] - Upper bound: 0 - Complexity: constant * Chain [127] with precondition: [V=1,V1>=0,V6>=0] - Upper bound: 15*V1+21 - Complexity: n * Chain [126] with precondition: [V16=1,V1>=1,V>=0,V6>=0] - Upper bound: 0 - Complexity: constant ### Maximum cost of start(V1,V,V6,V16): max([nat(V16)*15+20,4941*V1+131+nat(V)*865+nat(V6)*1818+nat(V16)*1557+42*V1+nat(V/3)*70+nat(V6/3)*126+(15*V1+21)]) Asymptotic class: n * Total analysis performed in 3585 ms. ---------------------------------------- (26) BOUNDS(1, n^1) ---------------------------------------- (27) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (28) 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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, 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)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 S tuples: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 K tuples:none Defined Rule Symbols: *_2, +_2, computeLine_3, computeLine#1_3, computeLine#2_4, lineMult_3, lineMult#1_3, lineMult#2_4, matrixMult_2, matrixMult#1_2, #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, COMPUTELINE_3, COMPUTELINE#1_3, COMPUTELINE#2_4, LINEMULT_3, LINEMULT#1_3, LINEMULT#2_4, MATRIXMULT_2, MATRIXMULT#1_2 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_2, c30, c31_1, c32_1, c33, c34_2, c35_1, c36_1, c37_1, c38_1, c39_1, c40_1, c41 ---------------------------------------- (29) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (30) 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)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+(*(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Rewrite Strategy: INNERMOST ---------------------------------------- (31) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (32) 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)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Rewrite Strategy: INNERMOST ---------------------------------------- (33) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (34) Obligation: Innermost TRS: Rules: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 #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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Types: *' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 COMPUTELINE :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 COMPUTELINE#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c27 :: c29:c30 -> c27:c28 COMPUTELINE#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c29:c30 nil :: c24:c25::::nil:#0:#s:#neg:#pos c28 :: c27:c28 c29 :: c26 -> c31 -> c29:c30 lineMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c31 c30 :: c29:c30 c31 :: c32:c33 -> c31 LINEMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c32:c33 c32 :: c34:c35:c36:c37 -> c32:c33 LINEMULT#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c33 :: c32:c33 c34 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c35 :: c31 -> c34:c35:c36:c37 c36 :: c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c37 :: c31 -> c34:c35:c36:c37 MATRIXMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c38 c38 :: c39:c40:c41 -> c38 MATRIXMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c39:c40:c41 c39 :: c26 -> c39:c40:c41 c40 :: c38 -> c39:c40:c41 c41 :: c39:c40:c41 #0 :: c24:c25::::nil:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #s :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #pos :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #succ :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #mult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos hole_c24:c25::::nil:#0:#s:#neg:#pos1_42 :: c24:c25::::nil:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_42 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_42 :: c:c1:c2:c3:c4 hole_c264_42 :: c26 hole_c27:c285_42 :: c27:c28 hole_c29:c306_42 :: c29:c30 hole_c317_42 :: c31 hole_c32:c338_42 :: c32:c33 hole_c34:c35:c36:c379_42 :: c34:c35:c36:c37 hole_c3810_42 :: c38 hole_c39:c40:c4111_42 :: c39:c40:c41 hole_c16:c17:c18:c1912_42 :: c16:c17:c18:c19 hole_c20:c21:c22:c2313_42 :: c20:c21:c22:c23 hole_c14:c1514_42 :: c14:c15 gen_c24:c25::::nil:#0:#s:#neg:#pos15_42 :: Nat -> c24:c25::::nil:#0:#s:#neg:#pos gen_c:c1:c2:c3:c416_42 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1517_42 :: Nat -> c14:c15 ---------------------------------------- (35) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: #ADD, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, LINEMULT#1, MATRIXMULT, MATRIXMULT#1, #add, #NATMULT, #natmult, computeLine, computeLine#1, lineMult#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: #add < #ADD #ADD < #NATMULT COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 MATRIXMULT = MATRIXMULT#1 #add < #natmult #natmult < #NATMULT computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1 ---------------------------------------- (36) Obligation: Innermost TRS: Rules: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 #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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Types: *' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 COMPUTELINE :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 COMPUTELINE#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c27 :: c29:c30 -> c27:c28 COMPUTELINE#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c29:c30 nil :: c24:c25::::nil:#0:#s:#neg:#pos c28 :: c27:c28 c29 :: c26 -> c31 -> c29:c30 lineMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c31 c30 :: c29:c30 c31 :: c32:c33 -> c31 LINEMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c32:c33 c32 :: c34:c35:c36:c37 -> c32:c33 LINEMULT#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c33 :: c32:c33 c34 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c35 :: c31 -> c34:c35:c36:c37 c36 :: c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c37 :: c31 -> c34:c35:c36:c37 MATRIXMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c38 c38 :: c39:c40:c41 -> c38 MATRIXMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c39:c40:c41 c39 :: c26 -> c39:c40:c41 c40 :: c38 -> c39:c40:c41 c41 :: c39:c40:c41 #0 :: c24:c25::::nil:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #s :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #pos :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #succ :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #mult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos hole_c24:c25::::nil:#0:#s:#neg:#pos1_42 :: c24:c25::::nil:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_42 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_42 :: c:c1:c2:c3:c4 hole_c264_42 :: c26 hole_c27:c285_42 :: c27:c28 hole_c29:c306_42 :: c29:c30 hole_c317_42 :: c31 hole_c32:c338_42 :: c32:c33 hole_c34:c35:c36:c379_42 :: c34:c35:c36:c37 hole_c3810_42 :: c38 hole_c39:c40:c4111_42 :: c39:c40:c41 hole_c16:c17:c18:c1912_42 :: c16:c17:c18:c19 hole_c20:c21:c22:c2313_42 :: c20:c21:c22:c23 hole_c14:c1514_42 :: c14:c15 gen_c24:c25::::nil:#0:#s:#neg:#pos15_42 :: Nat -> c24:c25::::nil:#0:#s:#neg:#pos gen_c:c1:c2:c3:c416_42 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1517_42 :: Nat -> c14:c15 Generator Equations: gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0) <=> nil gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(x)) gen_c:c1:c2:c3:c416_42(0) <=> c gen_c:c1:c2:c3:c416_42(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c416_42(x)) gen_c14:c1517_42(0) <=> c14 gen_c14:c1517_42(+(x, 1)) <=> c15(c, gen_c14:c1517_42(x)) The following defined symbols remain to be analysed: #add, #ADD, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, LINEMULT#1, MATRIXMULT, MATRIXMULT#1, #NATMULT, #natmult, computeLine, computeLine#1, lineMult#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: #add < #ADD #ADD < #NATMULT COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 MATRIXMULT = MATRIXMULT#1 #add < #natmult #natmult < #NATMULT computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1 ---------------------------------------- (37) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n235_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n235_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) -> *18_42, rt in Omega(n235_42) Induction Base: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, 0)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) Induction Step: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, +(n235_42, 1))), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n235_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) ->_R^Omega(1) c32(LINEMULT#2(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n235_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c), nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n235_42)))) ->_R^Omega(1) c32(c35(LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n235_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n235_42)))) ->_R^Omega(1) c32(c35(c31(LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n235_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n235_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c))))) ->_IH c32(c35(c31(*18_42))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (38) Complex Obligation (BEST) ---------------------------------------- (39) 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)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 #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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Types: *' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 COMPUTELINE :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 COMPUTELINE#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c27 :: c29:c30 -> c27:c28 COMPUTELINE#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c29:c30 nil :: c24:c25::::nil:#0:#s:#neg:#pos c28 :: c27:c28 c29 :: c26 -> c31 -> c29:c30 lineMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c31 c30 :: c29:c30 c31 :: c32:c33 -> c31 LINEMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c32:c33 c32 :: c34:c35:c36:c37 -> c32:c33 LINEMULT#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c33 :: c32:c33 c34 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c35 :: c31 -> c34:c35:c36:c37 c36 :: c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c37 :: c31 -> c34:c35:c36:c37 MATRIXMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c38 c38 :: c39:c40:c41 -> c38 MATRIXMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c39:c40:c41 c39 :: c26 -> c39:c40:c41 c40 :: c38 -> c39:c40:c41 c41 :: c39:c40:c41 #0 :: c24:c25::::nil:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #s :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #pos :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #succ :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #mult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos hole_c24:c25::::nil:#0:#s:#neg:#pos1_42 :: c24:c25::::nil:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_42 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_42 :: c:c1:c2:c3:c4 hole_c264_42 :: c26 hole_c27:c285_42 :: c27:c28 hole_c29:c306_42 :: c29:c30 hole_c317_42 :: c31 hole_c32:c338_42 :: c32:c33 hole_c34:c35:c36:c379_42 :: c34:c35:c36:c37 hole_c3810_42 :: c38 hole_c39:c40:c4111_42 :: c39:c40:c41 hole_c16:c17:c18:c1912_42 :: c16:c17:c18:c19 hole_c20:c21:c22:c2313_42 :: c20:c21:c22:c23 hole_c14:c1514_42 :: c14:c15 gen_c24:c25::::nil:#0:#s:#neg:#pos15_42 :: Nat -> c24:c25::::nil:#0:#s:#neg:#pos gen_c:c1:c2:c3:c416_42 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1517_42 :: Nat -> c14:c15 Generator Equations: gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0) <=> nil gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(x)) gen_c:c1:c2:c3:c416_42(0) <=> c gen_c:c1:c2:c3:c416_42(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c416_42(x)) gen_c14:c1517_42(0) <=> c14 gen_c14:c1517_42(+(x, 1)) <=> c15(c, gen_c14:c1517_42(x)) The following defined symbols remain to be analysed: LINEMULT#1, COMPUTELINE, COMPUTELINE#1, lineMult, LINEMULT, MATRIXMULT, MATRIXMULT#1, computeLine, computeLine#1, lineMult#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 MATRIXMULT = MATRIXMULT#1 computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1 ---------------------------------------- (40) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (41) BOUNDS(n^1, INF) ---------------------------------------- (42) Obligation: Innermost TRS: Rules: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 #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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Types: *' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 COMPUTELINE :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 COMPUTELINE#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c27 :: c29:c30 -> c27:c28 COMPUTELINE#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c29:c30 nil :: c24:c25::::nil:#0:#s:#neg:#pos c28 :: c27:c28 c29 :: c26 -> c31 -> c29:c30 lineMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c31 c30 :: c29:c30 c31 :: c32:c33 -> c31 LINEMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c32:c33 c32 :: c34:c35:c36:c37 -> c32:c33 LINEMULT#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c33 :: c32:c33 c34 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c35 :: c31 -> c34:c35:c36:c37 c36 :: c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c37 :: c31 -> c34:c35:c36:c37 MATRIXMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c38 c38 :: c39:c40:c41 -> c38 MATRIXMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c39:c40:c41 c39 :: c26 -> c39:c40:c41 c40 :: c38 -> c39:c40:c41 c41 :: c39:c40:c41 #0 :: c24:c25::::nil:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #s :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #pos :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #succ :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #mult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos hole_c24:c25::::nil:#0:#s:#neg:#pos1_42 :: c24:c25::::nil:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_42 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_42 :: c:c1:c2:c3:c4 hole_c264_42 :: c26 hole_c27:c285_42 :: c27:c28 hole_c29:c306_42 :: c29:c30 hole_c317_42 :: c31 hole_c32:c338_42 :: c32:c33 hole_c34:c35:c36:c379_42 :: c34:c35:c36:c37 hole_c3810_42 :: c38 hole_c39:c40:c4111_42 :: c39:c40:c41 hole_c16:c17:c18:c1912_42 :: c16:c17:c18:c19 hole_c20:c21:c22:c2313_42 :: c20:c21:c22:c23 hole_c14:c1514_42 :: c14:c15 gen_c24:c25::::nil:#0:#s:#neg:#pos15_42 :: Nat -> c24:c25::::nil:#0:#s:#neg:#pos gen_c:c1:c2:c3:c416_42 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1517_42 :: Nat -> c14:c15 Lemmas: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n235_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n235_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) -> *18_42, rt in Omega(n235_42) Generator Equations: gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0) <=> nil gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(x)) gen_c:c1:c2:c3:c416_42(0) <=> c gen_c:c1:c2:c3:c416_42(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c416_42(x)) gen_c14:c1517_42(0) <=> c14 gen_c14:c1517_42(+(x, 1)) <=> c15(c, gen_c14:c1517_42(x)) The following defined symbols remain to be analysed: LINEMULT, COMPUTELINE, COMPUTELINE#1, lineMult, MATRIXMULT, MATRIXMULT#1, computeLine, computeLine#1, lineMult#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 MATRIXMULT = MATRIXMULT#1 computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1 ---------------------------------------- (43) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42)) -> *18_42, rt in Omega(n19016_42) Induction Base: LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0)) Induction Step: LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n19016_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n19016_42, 1))) ->_R^Omega(1) c31(LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n19016_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n19016_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a))) ->_R^Omega(1) c31(c32(LINEMULT#2(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n19016_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42)))) ->_R^Omega(1) c31(c32(c35(LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42))))) ->_IH c31(c32(c35(*18_42))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (44) Obligation: Innermost TRS: Rules: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 #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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Types: *' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 COMPUTELINE :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 COMPUTELINE#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c27 :: c29:c30 -> c27:c28 COMPUTELINE#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c29:c30 nil :: c24:c25::::nil:#0:#s:#neg:#pos c28 :: c27:c28 c29 :: c26 -> c31 -> c29:c30 lineMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c31 c30 :: c29:c30 c31 :: c32:c33 -> c31 LINEMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c32:c33 c32 :: c34:c35:c36:c37 -> c32:c33 LINEMULT#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c33 :: c32:c33 c34 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c35 :: c31 -> c34:c35:c36:c37 c36 :: c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c37 :: c31 -> c34:c35:c36:c37 MATRIXMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c38 c38 :: c39:c40:c41 -> c38 MATRIXMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c39:c40:c41 c39 :: c26 -> c39:c40:c41 c40 :: c38 -> c39:c40:c41 c41 :: c39:c40:c41 #0 :: c24:c25::::nil:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #s :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #pos :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #succ :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #mult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos hole_c24:c25::::nil:#0:#s:#neg:#pos1_42 :: c24:c25::::nil:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_42 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_42 :: c:c1:c2:c3:c4 hole_c264_42 :: c26 hole_c27:c285_42 :: c27:c28 hole_c29:c306_42 :: c29:c30 hole_c317_42 :: c31 hole_c32:c338_42 :: c32:c33 hole_c34:c35:c36:c379_42 :: c34:c35:c36:c37 hole_c3810_42 :: c38 hole_c39:c40:c4111_42 :: c39:c40:c41 hole_c16:c17:c18:c1912_42 :: c16:c17:c18:c19 hole_c20:c21:c22:c2313_42 :: c20:c21:c22:c23 hole_c14:c1514_42 :: c14:c15 gen_c24:c25::::nil:#0:#s:#neg:#pos15_42 :: Nat -> c24:c25::::nil:#0:#s:#neg:#pos gen_c:c1:c2:c3:c416_42 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1517_42 :: Nat -> c14:c15 Lemmas: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n235_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n235_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) -> *18_42, rt in Omega(n235_42) LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42)) -> *18_42, rt in Omega(n19016_42) Generator Equations: gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0) <=> nil gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(x)) gen_c:c1:c2:c3:c416_42(0) <=> c gen_c:c1:c2:c3:c416_42(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c416_42(x)) gen_c14:c1517_42(0) <=> c14 gen_c14:c1517_42(+(x, 1)) <=> c15(c, gen_c14:c1517_42(x)) The following defined symbols remain to be analysed: LINEMULT#1, COMPUTELINE, COMPUTELINE#1, lineMult, MATRIXMULT, MATRIXMULT#1, computeLine, computeLine#1, lineMult#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 LINEMULT < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 LINEMULT = LINEMULT#1 MATRIXMULT = MATRIXMULT#1 computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1 ---------------------------------------- (45) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n42016_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n42016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) -> *18_42, rt in Omega(n42016_42) Induction Base: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, 0)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) Induction Step: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, +(n42016_42, 1))), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n42016_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) ->_R^Omega(1) c32(LINEMULT#2(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(n42016_42, 1)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c), nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n42016_42)))) ->_R^Omega(1) c32(c35(LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n42016_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n42016_42)))) ->_R^Omega(1) c32(c35(c31(LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n42016_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n42016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c))))) ->_IH c32(c35(c31(*18_42))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (46) Obligation: Innermost TRS: Rules: *'(z0, z1) -> c24(#MULT(z0, z1)) +'(z0, z1) -> c25(#ADD(z0, z1)) COMPUTELINE(z0, z1, z2) -> c26(COMPUTELINE#1(z0, z2, z1)) COMPUTELINE#1(::(z0, z1), z2, z3) -> c27(COMPUTELINE#2(z3, z2, z0, z1)) COMPUTELINE#1(nil, z0, z1) -> c28 COMPUTELINE#2(::(z0, z1), z2, z3, z4) -> c29(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2)) COMPUTELINE#2(nil, z0, z1, z2) -> c30 LINEMULT(z0, z1, z2) -> c31(LINEMULT#1(z1, z2, z0)) LINEMULT#1(::(z0, z1), z2, z3) -> c32(LINEMULT#2(z2, z3, z0, z1)) LINEMULT#1(nil, z0, z1) -> c33 LINEMULT#2(::(z0, z1), z2, z3, z4) -> c34(+'(*'(z3, z2), z0), *'(z3, z2)) LINEMULT#2(::(z0, z1), z2, z3, z4) -> c35(LINEMULT(z2, z4, z1)) LINEMULT#2(nil, z0, z1, z2) -> c36(*'(z1, z0)) LINEMULT#2(nil, z0, z1, z2) -> c37(LINEMULT(z0, z2, nil)) MATRIXMULT(z0, z1) -> c38(MATRIXMULT#1(z0, z1)) MATRIXMULT#1(::(z0, z1), z2) -> c39(COMPUTELINE(z0, z2, nil)) MATRIXMULT#1(::(z0, z1), z2) -> c40(MATRIXMULT(z1, z2)) MATRIXMULT#1(nil, z0) -> c41 #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) computeLine(z0, z1, z2) -> computeLine#1(z0, z2, z1) computeLine#1(::(z0, z1), z2, z3) -> computeLine#2(z3, z2, z0, z1) computeLine#1(nil, z0, z1) -> z0 computeLine#2(::(z0, z1), z2, z3, z4) -> computeLine(z4, z1, lineMult(z3, z0, z2)) computeLine#2(nil, z0, z1, z2) -> nil lineMult(z0, z1, z2) -> lineMult#1(z1, z2, z0) lineMult#1(::(z0, z1), z2, z3) -> lineMult#2(z2, z3, z0, z1) lineMult#1(nil, z0, z1) -> nil lineMult#2(::(z0, z1), z2, z3, z4) -> ::(+'(*'(z3, z2), z0), lineMult(z2, z4, z1)) lineMult#2(nil, z0, z1, z2) -> ::(*'(z1, z0), lineMult(z0, z2, nil)) matrixMult(z0, z1) -> matrixMult#1(z0, z1) matrixMult#1(::(z0, z1), z2) -> ::(computeLine(z0, z2, nil), matrixMult(z1, z2)) matrixMult#1(nil, z0) -> nil Types: *' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c24 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> c24:c25::::nil:#0:#s:#neg:#pos #MULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c25 :: c:c1:c2:c3:c4 -> c24:c25::::nil:#0:#s:#neg:#pos #ADD :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c:c1:c2:c3:c4 COMPUTELINE :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c26 c26 :: c27:c28 -> c26 COMPUTELINE#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c27:c28 :: :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c27 :: c29:c30 -> c27:c28 COMPUTELINE#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c29:c30 nil :: c24:c25::::nil:#0:#s:#neg:#pos c28 :: c27:c28 c29 :: c26 -> c31 -> c29:c30 lineMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos LINEMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c31 c30 :: c29:c30 c31 :: c32:c33 -> c31 LINEMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c32:c33 c32 :: c34:c35:c36:c37 -> c32:c33 LINEMULT#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c33 :: c32:c33 c34 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c35 :: c31 -> c34:c35:c36:c37 c36 :: c24:c25::::nil:#0:#s:#neg:#pos -> c34:c35:c36:c37 c37 :: c31 -> c34:c35:c36:c37 MATRIXMULT :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c38 c38 :: c39:c40:c41 -> c38 MATRIXMULT#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c39:c40:c41 c39 :: c26 -> c39:c40:c41 c40 :: c38 -> c39:c40:c41 c41 :: c39:c40:c41 #0 :: c24:c25::::nil:#0:#s:#neg:#pos c :: c:c1:c2:c3:c4 #neg :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #s :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #pos :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#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:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #succ :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos #mult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos computeLine#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos lineMult#2 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos matrixMult#1 :: c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos -> c24:c25::::nil:#0:#s:#neg:#pos hole_c24:c25::::nil:#0:#s:#neg:#pos1_42 :: c24:c25::::nil:#0:#s:#neg:#pos hole_c5:c6:c7:c8:c9:c10:c11:c12:c132_42 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c43_42 :: c:c1:c2:c3:c4 hole_c264_42 :: c26 hole_c27:c285_42 :: c27:c28 hole_c29:c306_42 :: c29:c30 hole_c317_42 :: c31 hole_c32:c338_42 :: c32:c33 hole_c34:c35:c36:c379_42 :: c34:c35:c36:c37 hole_c3810_42 :: c38 hole_c39:c40:c4111_42 :: c39:c40:c41 hole_c16:c17:c18:c1912_42 :: c16:c17:c18:c19 hole_c20:c21:c22:c2313_42 :: c20:c21:c22:c23 hole_c14:c1514_42 :: c14:c15 gen_c24:c25::::nil:#0:#s:#neg:#pos15_42 :: Nat -> c24:c25::::nil:#0:#s:#neg:#pos gen_c:c1:c2:c3:c416_42 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1517_42 :: Nat -> c14:c15 Lemmas: LINEMULT#1(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(1, n42016_42)), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n42016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(c)) -> *18_42, rt in Omega(n42016_42) LINEMULT(gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(a), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42), gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(n19016_42)) -> *18_42, rt in Omega(n19016_42) Generator Equations: gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(0) <=> nil gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(+(x, 1)) <=> ::(nil, gen_c24:c25::::nil:#0:#s:#neg:#pos15_42(x)) gen_c:c1:c2:c3:c416_42(0) <=> c gen_c:c1:c2:c3:c416_42(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c416_42(x)) gen_c14:c1517_42(0) <=> c14 gen_c14:c1517_42(+(x, 1)) <=> c15(c, gen_c14:c1517_42(x)) The following defined symbols remain to be analysed: lineMult#1, COMPUTELINE, COMPUTELINE#1, lineMult, MATRIXMULT, MATRIXMULT#1, computeLine, computeLine#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: COMPUTELINE = COMPUTELINE#1 COMPUTELINE < MATRIXMULT#1 lineMult < COMPUTELINE#1 lineMult < computeLine#1 lineMult = lineMult#1 MATRIXMULT = MATRIXMULT#1 computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1