We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Weak Trs:
  { #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We add the following dependency tuples:

Strict DPs:
  { firstline#1^#(nil()) -> c_1()
  , firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y))
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline'))
  , right^#(@l) -> c_27(right#1^#(@l))
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29() }
Weak DPs:
  { #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }

and mark the set of starting terms.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(nil()) -> c_1()
  , firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y))
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline'))
  , right^#(@l) -> c_27(right#1^#(@l))
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29() }
Weak DPs:
  { #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of
{1,3,4,5,6,8,10,17,22,26,28,29,33,34,38,39} by applications of
Pre({1,3,4,5,6,8,10,17,22,26,28,29,33,34,38,39}) =
{2,7,9,12,13,19,20,23,25,27,32,35,37}. Here rules are labeled as
follows:

  DPs:
    { 1: firstline#1^#(nil()) -> c_1()
    , 2: firstline#1^#(::(@x, @xs)) ->
         c_2(#abs^#(#0()), firstline^#(@xs))
    , 3: #abs^#(#pos(@x)) -> c_32()
    , 4: #abs^#(#0()) -> c_33()
    , 5: #abs^#(#neg(@x)) -> c_34()
    , 6: #abs^#(#s(@x)) -> c_35()
    , 7: firstline^#(@l) -> c_20(firstline#1^#(@l))
    , 8: #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
    , 9: lcs#3^#(nil()) -> c_4(#abs^#(#0()))
    , 10: lcs#3^#(::(@len, @_@1)) -> c_5()
    , 11: lcs#1^#(@m) -> c_6(lcs#2^#(@m))
    , 12: lcs#2^#(nil()) -> c_12(#abs^#(#0()))
    , 13: lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
    , 14: lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
    , 15: lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
    , 16: lcstable#1^#(::(@x, @xs), @l2) ->
          c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
               lcstable^#(@xs, @l2))
    , 17: lcstable#3^#(nil(), @l2, @x) -> c_8()
    , 18: lcstable#3^#(::(@l, @ls), @l2, @x) ->
          c_9(newline^#(@x, @l, @l2))
    , 19: newline^#(@y, @lastline, @l) ->
          c_24(newline#1^#(@l, @lastline, @y))
    , 20: newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
          c_10(+^#(@diagVal, #pos(#s(#0()))))
    , 21: newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
          c_11(max^#(@belowVal, @rightVal))
    , 22: +^#(@x, @y) -> c_30(#add^#(@x, @y))
    , 23: max^#(@a, @b) ->
          c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
    , 24: lcs^#(@l1, @l2) ->
          c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
    , 25: newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
          c_15(newline#6^#(newline#7(#equal(@x, @y),
                                     @belowVal,
                                     @diagVal,
                                     @rightVal),
                           @nl),
               newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
               #equal^#(@x, @y))
    , 26: newline#6^#(@elem, @nl) -> c_37()
    , 27: right#1^#(nil()) -> c_16(#abs^#(#0()))
    , 28: right#1^#(::(@x, @xs)) -> c_17()
    , 29: newline#2^#(nil(), @x, @xs, @y) -> c_18()
    , 30: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
          c_19(newline#3^#(newline(@y, @lastline', @xs),
                           @belowVal,
                           @lastline',
                           @x,
                           @y),
               newline^#(@y, @lastline', @xs))
    , 31: newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
          c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
               right^#(@nl))
    , 32: lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
    , 33: #greater^#(@x, @y) ->
          c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 34: newline#1^#(nil(), @lastline, @y) -> c_38()
    , 35: newline#1^#(::(@x, @xs), @lastline, @y) ->
          c_39(newline#2^#(@lastline, @x, @xs, @y))
    , 36: newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
          c_25(newline#5^#(right(@lastline'),
                           @belowVal,
                           @nl,
                           @rightVal,
                           @x,
                           @y),
               right^#(@lastline'))
    , 37: right^#(@l) -> c_27(right#1^#(@l))
    , 38: max#1^#(#true(), @a, @b) -> c_28()
    , 39: max#1^#(#false(), @a, @b) -> c_29()
    , 40: #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
    , 41: #eq^#(#pos(@x), #0()) -> c_41()
    , 42: #eq^#(#pos(@x), #neg(@y)) -> c_42()
    , 43: #eq^#(nil(), nil()) -> c_43()
    , 44: #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
    , 45: #eq^#(::(@x_1, @x_2), nil()) -> c_45()
    , 46: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
               #eq^#(@x_1, @y_1),
               #eq^#(@x_2, @y_2))
    , 47: #eq^#(#0(), #pos(@y)) -> c_47()
    , 48: #eq^#(#0(), #0()) -> c_48()
    , 49: #eq^#(#0(), #neg(@y)) -> c_49()
    , 50: #eq^#(#0(), #s(@y)) -> c_50()
    , 51: #eq^#(#neg(@x), #pos(@y)) -> c_51()
    , 52: #eq^#(#neg(@x), #0()) -> c_52()
    , 53: #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
    , 54: #eq^#(#s(@x), #0()) -> c_54()
    , 55: #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
    , 56: #ckgt^#(#EQ()) -> c_56()
    , 57: #ckgt^#(#LT()) -> c_57()
    , 58: #ckgt^#(#GT()) -> c_58()
    , 59: #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
    , 60: #compare^#(#pos(@x), #0()) -> c_69()
    , 61: #compare^#(#pos(@x), #neg(@y)) -> c_70()
    , 62: #compare^#(#0(), #pos(@y)) -> c_71()
    , 63: #compare^#(#0(), #0()) -> c_72()
    , 64: #compare^#(#0(), #neg(@y)) -> c_73()
    , 65: #compare^#(#0(), #s(@y)) -> c_74()
    , 66: #compare^#(#neg(@x), #pos(@y)) -> c_75()
    , 67: #compare^#(#neg(@x), #0()) -> c_76()
    , 68: #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
    , 69: #compare^#(#s(@x), #0()) -> c_78()
    , 70: #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
    , 71: #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
    , 72: #add^#(#pos(#s(#s(@x))), @y) ->
          c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 73: #add^#(#0(), @y) -> c_61()
    , 74: #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #and^#(#true(), #true()) -> c_64()
    , 77: #and^#(#true(), #false()) -> c_65()
    , 78: #and^#(#false(), #true()) -> c_66()
    , 79: #and^#(#false(), #false()) -> c_67()
    , 80: #succ^#(#pos(#s(@x))) -> c_80()
    , 81: #succ^#(#0()) -> c_81()
    , 82: #succ^#(#neg(#s(#0()))) -> c_82()
    , 83: #succ^#(#neg(#s(#s(@x)))) -> c_83()
    , 84: #pred^#(#pos(#s(#0()))) -> c_84()
    , 85: #pred^#(#pos(#s(#s(@x)))) -> c_85()
    , 86: #pred^#(#0()) -> c_86()
    , 87: #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y))
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline'))
  , right^#(@l) -> c_27(right#1^#(@l)) }
Weak DPs:
  { firstline#1^#(nil()) -> c_1()
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29()
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {3,5,12,14,17} by
applications of Pre({3,5,12,14,17}) = {4,6,13,16,23}. Here rules
are labeled as follows:

  DPs:
    { 1: firstline#1^#(::(@x, @xs)) ->
         c_2(#abs^#(#0()), firstline^#(@xs))
    , 2: firstline^#(@l) -> c_20(firstline#1^#(@l))
    , 3: lcs#3^#(nil()) -> c_4(#abs^#(#0()))
    , 4: lcs#1^#(@m) -> c_6(lcs#2^#(@m))
    , 5: lcs#2^#(nil()) -> c_12(#abs^#(#0()))
    , 6: lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
    , 7: lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
    , 8: lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
    , 9: lcstable#1^#(::(@x, @xs), @l2) ->
         c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
              lcstable^#(@xs, @l2))
    , 10: lcstable#3^#(::(@l, @ls), @l2, @x) ->
          c_9(newline^#(@x, @l, @l2))
    , 11: newline^#(@y, @lastline, @l) ->
          c_24(newline#1^#(@l, @lastline, @y))
    , 12: newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
          c_10(+^#(@diagVal, #pos(#s(#0()))))
    , 13: newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
          c_11(max^#(@belowVal, @rightVal))
    , 14: max^#(@a, @b) ->
          c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
    , 15: lcs^#(@l1, @l2) ->
          c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
    , 16: newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
          c_15(newline#6^#(newline#7(#equal(@x, @y),
                                     @belowVal,
                                     @diagVal,
                                     @rightVal),
                           @nl),
               newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
               #equal^#(@x, @y))
    , 17: right#1^#(nil()) -> c_16(#abs^#(#0()))
    , 18: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
          c_19(newline#3^#(newline(@y, @lastline', @xs),
                           @belowVal,
                           @lastline',
                           @x,
                           @y),
               newline^#(@y, @lastline', @xs))
    , 19: newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
          c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
               right^#(@nl))
    , 20: lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
    , 21: newline#1^#(::(@x, @xs), @lastline, @y) ->
          c_39(newline#2^#(@lastline, @x, @xs, @y))
    , 22: newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
          c_25(newline#5^#(right(@lastline'),
                           @belowVal,
                           @nl,
                           @rightVal,
                           @x,
                           @y),
               right^#(@lastline'))
    , 23: right^#(@l) -> c_27(right#1^#(@l))
    , 24: firstline#1^#(nil()) -> c_1()
    , 25: #abs^#(#pos(@x)) -> c_32()
    , 26: #abs^#(#0()) -> c_33()
    , 27: #abs^#(#neg(@x)) -> c_34()
    , 28: #abs^#(#s(@x)) -> c_35()
    , 29: #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
    , 30: #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
    , 31: #eq^#(#pos(@x), #0()) -> c_41()
    , 32: #eq^#(#pos(@x), #neg(@y)) -> c_42()
    , 33: #eq^#(nil(), nil()) -> c_43()
    , 34: #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
    , 35: #eq^#(::(@x_1, @x_2), nil()) -> c_45()
    , 36: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
               #eq^#(@x_1, @y_1),
               #eq^#(@x_2, @y_2))
    , 37: #eq^#(#0(), #pos(@y)) -> c_47()
    , 38: #eq^#(#0(), #0()) -> c_48()
    , 39: #eq^#(#0(), #neg(@y)) -> c_49()
    , 40: #eq^#(#0(), #s(@y)) -> c_50()
    , 41: #eq^#(#neg(@x), #pos(@y)) -> c_51()
    , 42: #eq^#(#neg(@x), #0()) -> c_52()
    , 43: #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
    , 44: #eq^#(#s(@x), #0()) -> c_54()
    , 45: #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
    , 46: lcs#3^#(::(@len, @_@1)) -> c_5()
    , 47: lcstable#3^#(nil(), @l2, @x) -> c_8()
    , 48: +^#(@x, @y) -> c_30(#add^#(@x, @y))
    , 49: newline#6^#(@elem, @nl) -> c_37()
    , 50: right#1^#(::(@x, @xs)) -> c_17()
    , 51: newline#2^#(nil(), @x, @xs, @y) -> c_18()
    , 52: #greater^#(@x, @y) ->
          c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 53: #ckgt^#(#EQ()) -> c_56()
    , 54: #ckgt^#(#LT()) -> c_57()
    , 55: #ckgt^#(#GT()) -> c_58()
    , 56: #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
    , 57: #compare^#(#pos(@x), #0()) -> c_69()
    , 58: #compare^#(#pos(@x), #neg(@y)) -> c_70()
    , 59: #compare^#(#0(), #pos(@y)) -> c_71()
    , 60: #compare^#(#0(), #0()) -> c_72()
    , 61: #compare^#(#0(), #neg(@y)) -> c_73()
    , 62: #compare^#(#0(), #s(@y)) -> c_74()
    , 63: #compare^#(#neg(@x), #pos(@y)) -> c_75()
    , 64: #compare^#(#neg(@x), #0()) -> c_76()
    , 65: #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
    , 66: #compare^#(#s(@x), #0()) -> c_78()
    , 67: #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
    , 68: newline#1^#(nil(), @lastline, @y) -> c_38()
    , 69: max#1^#(#true(), @a, @b) -> c_28()
    , 70: max#1^#(#false(), @a, @b) -> c_29()
    , 71: #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
    , 72: #add^#(#pos(#s(#s(@x))), @y) ->
          c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 73: #add^#(#0(), @y) -> c_61()
    , 74: #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #and^#(#true(), #true()) -> c_64()
    , 77: #and^#(#true(), #false()) -> c_65()
    , 78: #and^#(#false(), #true()) -> c_66()
    , 79: #and^#(#false(), #false()) -> c_67()
    , 80: #succ^#(#pos(#s(@x))) -> c_80()
    , 81: #succ^#(#0()) -> c_81()
    , 82: #succ^#(#neg(#s(#0()))) -> c_82()
    , 83: #succ^#(#neg(#s(#s(@x)))) -> c_83()
    , 84: #pred^#(#pos(#s(#0()))) -> c_84()
    , 85: #pred^#(#pos(#s(#s(@x)))) -> c_85()
    , 86: #pred^#(#0()) -> c_86()
    , 87: #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y))
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline'))
  , right^#(@l) -> c_27(right#1^#(@l)) }
Weak DPs:
  { firstline#1^#(nil()) -> c_1()
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29()
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {4,10,18} by applications
of Pre({4,10,18}) = {3,12,14,17}. Here rules are labeled as
follows:

  DPs:
    { 1: firstline#1^#(::(@x, @xs)) ->
         c_2(#abs^#(#0()), firstline^#(@xs))
    , 2: firstline^#(@l) -> c_20(firstline#1^#(@l))
    , 3: lcs#1^#(@m) -> c_6(lcs#2^#(@m))
    , 4: lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
    , 5: lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
    , 6: lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
    , 7: lcstable#1^#(::(@x, @xs), @l2) ->
         c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
              lcstable^#(@xs, @l2))
    , 8: lcstable#3^#(::(@l, @ls), @l2, @x) ->
         c_9(newline^#(@x, @l, @l2))
    , 9: newline^#(@y, @lastline, @l) ->
         c_24(newline#1^#(@l, @lastline, @y))
    , 10: newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
          c_11(max^#(@belowVal, @rightVal))
    , 11: lcs^#(@l1, @l2) ->
          c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
    , 12: newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
          c_15(newline#6^#(newline#7(#equal(@x, @y),
                                     @belowVal,
                                     @diagVal,
                                     @rightVal),
                           @nl),
               newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
               #equal^#(@x, @y))
    , 13: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
          c_19(newline#3^#(newline(@y, @lastline', @xs),
                           @belowVal,
                           @lastline',
                           @x,
                           @y),
               newline^#(@y, @lastline', @xs))
    , 14: newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
          c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
               right^#(@nl))
    , 15: lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
    , 16: newline#1^#(::(@x, @xs), @lastline, @y) ->
          c_39(newline#2^#(@lastline, @x, @xs, @y))
    , 17: newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
          c_25(newline#5^#(right(@lastline'),
                           @belowVal,
                           @nl,
                           @rightVal,
                           @x,
                           @y),
               right^#(@lastline'))
    , 18: right^#(@l) -> c_27(right#1^#(@l))
    , 19: firstline#1^#(nil()) -> c_1()
    , 20: #abs^#(#pos(@x)) -> c_32()
    , 21: #abs^#(#0()) -> c_33()
    , 22: #abs^#(#neg(@x)) -> c_34()
    , 23: #abs^#(#s(@x)) -> c_35()
    , 24: #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
    , 25: #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
    , 26: #eq^#(#pos(@x), #0()) -> c_41()
    , 27: #eq^#(#pos(@x), #neg(@y)) -> c_42()
    , 28: #eq^#(nil(), nil()) -> c_43()
    , 29: #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
    , 30: #eq^#(::(@x_1, @x_2), nil()) -> c_45()
    , 31: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
               #eq^#(@x_1, @y_1),
               #eq^#(@x_2, @y_2))
    , 32: #eq^#(#0(), #pos(@y)) -> c_47()
    , 33: #eq^#(#0(), #0()) -> c_48()
    , 34: #eq^#(#0(), #neg(@y)) -> c_49()
    , 35: #eq^#(#0(), #s(@y)) -> c_50()
    , 36: #eq^#(#neg(@x), #pos(@y)) -> c_51()
    , 37: #eq^#(#neg(@x), #0()) -> c_52()
    , 38: #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
    , 39: #eq^#(#s(@x), #0()) -> c_54()
    , 40: #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
    , 41: lcs#3^#(nil()) -> c_4(#abs^#(#0()))
    , 42: lcs#3^#(::(@len, @_@1)) -> c_5()
    , 43: lcs#2^#(nil()) -> c_12(#abs^#(#0()))
    , 44: lcstable#3^#(nil(), @l2, @x) -> c_8()
    , 45: newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
          c_10(+^#(@diagVal, #pos(#s(#0()))))
    , 46: +^#(@x, @y) -> c_30(#add^#(@x, @y))
    , 47: max^#(@a, @b) ->
          c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
    , 48: newline#6^#(@elem, @nl) -> c_37()
    , 49: right#1^#(nil()) -> c_16(#abs^#(#0()))
    , 50: right#1^#(::(@x, @xs)) -> c_17()
    , 51: newline#2^#(nil(), @x, @xs, @y) -> c_18()
    , 52: #greater^#(@x, @y) ->
          c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 53: #ckgt^#(#EQ()) -> c_56()
    , 54: #ckgt^#(#LT()) -> c_57()
    , 55: #ckgt^#(#GT()) -> c_58()
    , 56: #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
    , 57: #compare^#(#pos(@x), #0()) -> c_69()
    , 58: #compare^#(#pos(@x), #neg(@y)) -> c_70()
    , 59: #compare^#(#0(), #pos(@y)) -> c_71()
    , 60: #compare^#(#0(), #0()) -> c_72()
    , 61: #compare^#(#0(), #neg(@y)) -> c_73()
    , 62: #compare^#(#0(), #s(@y)) -> c_74()
    , 63: #compare^#(#neg(@x), #pos(@y)) -> c_75()
    , 64: #compare^#(#neg(@x), #0()) -> c_76()
    , 65: #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
    , 66: #compare^#(#s(@x), #0()) -> c_78()
    , 67: #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
    , 68: newline#1^#(nil(), @lastline, @y) -> c_38()
    , 69: max#1^#(#true(), @a, @b) -> c_28()
    , 70: max#1^#(#false(), @a, @b) -> c_29()
    , 71: #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
    , 72: #add^#(#pos(#s(#s(@x))), @y) ->
          c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 73: #add^#(#0(), @y) -> c_61()
    , 74: #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #and^#(#true(), #true()) -> c_64()
    , 77: #and^#(#true(), #false()) -> c_65()
    , 78: #and^#(#false(), #true()) -> c_66()
    , 79: #and^#(#false(), #false()) -> c_67()
    , 80: #succ^#(#pos(#s(@x))) -> c_80()
    , 81: #succ^#(#0()) -> c_81()
    , 82: #succ^#(#neg(#s(#0()))) -> c_82()
    , 83: #succ^#(#neg(#s(#s(@x)))) -> c_83()
    , 84: #pred^#(#pos(#s(#0()))) -> c_84()
    , 85: #pred^#(#pos(#s(#s(@x)))) -> c_85()
    , 86: #pred^#(#0()) -> c_86()
    , 87: #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y))
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline')) }
Weak DPs:
  { firstline#1^#(nil()) -> c_1()
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , right^#(@l) -> c_27(right#1^#(@l))
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29()
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {3,10} by applications of
Pre({3,10}) = {9,15}. Here rules are labeled as follows:

  DPs:
    { 1: firstline#1^#(::(@x, @xs)) ->
         c_2(#abs^#(#0()), firstline^#(@xs))
    , 2: firstline^#(@l) -> c_20(firstline#1^#(@l))
    , 3: lcs#1^#(@m) -> c_6(lcs#2^#(@m))
    , 4: lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
    , 5: lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
    , 6: lcstable#1^#(::(@x, @xs), @l2) ->
         c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
              lcstable^#(@xs, @l2))
    , 7: lcstable#3^#(::(@l, @ls), @l2, @x) ->
         c_9(newline^#(@x, @l, @l2))
    , 8: newline^#(@y, @lastline, @l) ->
         c_24(newline#1^#(@l, @lastline, @y))
    , 9: lcs^#(@l1, @l2) ->
         c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
    , 10: newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
          c_15(newline#6^#(newline#7(#equal(@x, @y),
                                     @belowVal,
                                     @diagVal,
                                     @rightVal),
                           @nl),
               newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
               #equal^#(@x, @y))
    , 11: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
          c_19(newline#3^#(newline(@y, @lastline', @xs),
                           @belowVal,
                           @lastline',
                           @x,
                           @y),
               newline^#(@y, @lastline', @xs))
    , 12: newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
          c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
               right^#(@nl))
    , 13: lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
    , 14: newline#1^#(::(@x, @xs), @lastline, @y) ->
          c_39(newline#2^#(@lastline, @x, @xs, @y))
    , 15: newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
          c_25(newline#5^#(right(@lastline'),
                           @belowVal,
                           @nl,
                           @rightVal,
                           @x,
                           @y),
               right^#(@lastline'))
    , 16: firstline#1^#(nil()) -> c_1()
    , 17: #abs^#(#pos(@x)) -> c_32()
    , 18: #abs^#(#0()) -> c_33()
    , 19: #abs^#(#neg(@x)) -> c_34()
    , 20: #abs^#(#s(@x)) -> c_35()
    , 21: #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
    , 22: #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
    , 23: #eq^#(#pos(@x), #0()) -> c_41()
    , 24: #eq^#(#pos(@x), #neg(@y)) -> c_42()
    , 25: #eq^#(nil(), nil()) -> c_43()
    , 26: #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
    , 27: #eq^#(::(@x_1, @x_2), nil()) -> c_45()
    , 28: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
               #eq^#(@x_1, @y_1),
               #eq^#(@x_2, @y_2))
    , 29: #eq^#(#0(), #pos(@y)) -> c_47()
    , 30: #eq^#(#0(), #0()) -> c_48()
    , 31: #eq^#(#0(), #neg(@y)) -> c_49()
    , 32: #eq^#(#0(), #s(@y)) -> c_50()
    , 33: #eq^#(#neg(@x), #pos(@y)) -> c_51()
    , 34: #eq^#(#neg(@x), #0()) -> c_52()
    , 35: #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
    , 36: #eq^#(#s(@x), #0()) -> c_54()
    , 37: #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
    , 38: lcs#3^#(nil()) -> c_4(#abs^#(#0()))
    , 39: lcs#3^#(::(@len, @_@1)) -> c_5()
    , 40: lcs#2^#(nil()) -> c_12(#abs^#(#0()))
    , 41: lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
    , 42: lcstable#3^#(nil(), @l2, @x) -> c_8()
    , 43: newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
          c_10(+^#(@diagVal, #pos(#s(#0()))))
    , 44: newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
          c_11(max^#(@belowVal, @rightVal))
    , 45: +^#(@x, @y) -> c_30(#add^#(@x, @y))
    , 46: max^#(@a, @b) ->
          c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
    , 47: newline#6^#(@elem, @nl) -> c_37()
    , 48: right#1^#(nil()) -> c_16(#abs^#(#0()))
    , 49: right#1^#(::(@x, @xs)) -> c_17()
    , 50: newline#2^#(nil(), @x, @xs, @y) -> c_18()
    , 51: #greater^#(@x, @y) ->
          c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 52: #ckgt^#(#EQ()) -> c_56()
    , 53: #ckgt^#(#LT()) -> c_57()
    , 54: #ckgt^#(#GT()) -> c_58()
    , 55: #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
    , 56: #compare^#(#pos(@x), #0()) -> c_69()
    , 57: #compare^#(#pos(@x), #neg(@y)) -> c_70()
    , 58: #compare^#(#0(), #pos(@y)) -> c_71()
    , 59: #compare^#(#0(), #0()) -> c_72()
    , 60: #compare^#(#0(), #neg(@y)) -> c_73()
    , 61: #compare^#(#0(), #s(@y)) -> c_74()
    , 62: #compare^#(#neg(@x), #pos(@y)) -> c_75()
    , 63: #compare^#(#neg(@x), #0()) -> c_76()
    , 64: #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
    , 65: #compare^#(#s(@x), #0()) -> c_78()
    , 66: #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
    , 67: newline#1^#(nil(), @lastline, @y) -> c_38()
    , 68: right^#(@l) -> c_27(right#1^#(@l))
    , 69: max#1^#(#true(), @a, @b) -> c_28()
    , 70: max#1^#(#false(), @a, @b) -> c_29()
    , 71: #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
    , 72: #add^#(#pos(#s(#s(@x))), @y) ->
          c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 73: #add^#(#0(), @y) -> c_61()
    , 74: #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #and^#(#true(), #true()) -> c_64()
    , 77: #and^#(#true(), #false()) -> c_65()
    , 78: #and^#(#false(), #true()) -> c_66()
    , 79: #and^#(#false(), #false()) -> c_67()
    , 80: #succ^#(#pos(#s(@x))) -> c_80()
    , 81: #succ^#(#0()) -> c_81()
    , 82: #succ^#(#neg(#s(#0()))) -> c_82()
    , 83: #succ^#(#neg(#s(#s(@x)))) -> c_83()
    , 84: #pred^#(#pos(#s(#0()))) -> c_84()
    , 85: #pred^#(#pos(#s(#s(@x)))) -> c_85()
    , 86: #pred^#(#0()) -> c_86()
    , 87: #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y))
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline')) }
Weak DPs:
  { firstline#1^#(nil()) -> c_1()
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , right^#(@l) -> c_27(right#1^#(@l))
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29()
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {13} by applications of
Pre({13}) = {10}. Here rules are labeled as follows:

  DPs:
    { 1: firstline#1^#(::(@x, @xs)) ->
         c_2(#abs^#(#0()), firstline^#(@xs))
    , 2: firstline^#(@l) -> c_20(firstline#1^#(@l))
    , 3: lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
    , 4: lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
    , 5: lcstable#1^#(::(@x, @xs), @l2) ->
         c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
              lcstable^#(@xs, @l2))
    , 6: lcstable#3^#(::(@l, @ls), @l2, @x) ->
         c_9(newline^#(@x, @l, @l2))
    , 7: newline^#(@y, @lastline, @l) ->
         c_24(newline#1^#(@l, @lastline, @y))
    , 8: lcs^#(@l1, @l2) ->
         c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
    , 9: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
         c_19(newline#3^#(newline(@y, @lastline', @xs),
                          @belowVal,
                          @lastline',
                          @x,
                          @y),
              newline^#(@y, @lastline', @xs))
    , 10: newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
          c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
               right^#(@nl))
    , 11: lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
    , 12: newline#1^#(::(@x, @xs), @lastline, @y) ->
          c_39(newline#2^#(@lastline, @x, @xs, @y))
    , 13: newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
          c_25(newline#5^#(right(@lastline'),
                           @belowVal,
                           @nl,
                           @rightVal,
                           @x,
                           @y),
               right^#(@lastline'))
    , 14: firstline#1^#(nil()) -> c_1()
    , 15: #abs^#(#pos(@x)) -> c_32()
    , 16: #abs^#(#0()) -> c_33()
    , 17: #abs^#(#neg(@x)) -> c_34()
    , 18: #abs^#(#s(@x)) -> c_35()
    , 19: #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
    , 20: #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
    , 21: #eq^#(#pos(@x), #0()) -> c_41()
    , 22: #eq^#(#pos(@x), #neg(@y)) -> c_42()
    , 23: #eq^#(nil(), nil()) -> c_43()
    , 24: #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
    , 25: #eq^#(::(@x_1, @x_2), nil()) -> c_45()
    , 26: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
               #eq^#(@x_1, @y_1),
               #eq^#(@x_2, @y_2))
    , 27: #eq^#(#0(), #pos(@y)) -> c_47()
    , 28: #eq^#(#0(), #0()) -> c_48()
    , 29: #eq^#(#0(), #neg(@y)) -> c_49()
    , 30: #eq^#(#0(), #s(@y)) -> c_50()
    , 31: #eq^#(#neg(@x), #pos(@y)) -> c_51()
    , 32: #eq^#(#neg(@x), #0()) -> c_52()
    , 33: #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
    , 34: #eq^#(#s(@x), #0()) -> c_54()
    , 35: #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
    , 36: lcs#3^#(nil()) -> c_4(#abs^#(#0()))
    , 37: lcs#3^#(::(@len, @_@1)) -> c_5()
    , 38: lcs#1^#(@m) -> c_6(lcs#2^#(@m))
    , 39: lcs#2^#(nil()) -> c_12(#abs^#(#0()))
    , 40: lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
    , 41: lcstable#3^#(nil(), @l2, @x) -> c_8()
    , 42: newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
          c_10(+^#(@diagVal, #pos(#s(#0()))))
    , 43: newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
          c_11(max^#(@belowVal, @rightVal))
    , 44: +^#(@x, @y) -> c_30(#add^#(@x, @y))
    , 45: max^#(@a, @b) ->
          c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
    , 46: newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
          c_15(newline#6^#(newline#7(#equal(@x, @y),
                                     @belowVal,
                                     @diagVal,
                                     @rightVal),
                           @nl),
               newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
               #equal^#(@x, @y))
    , 47: newline#6^#(@elem, @nl) -> c_37()
    , 48: right#1^#(nil()) -> c_16(#abs^#(#0()))
    , 49: right#1^#(::(@x, @xs)) -> c_17()
    , 50: newline#2^#(nil(), @x, @xs, @y) -> c_18()
    , 51: #greater^#(@x, @y) ->
          c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 52: #ckgt^#(#EQ()) -> c_56()
    , 53: #ckgt^#(#LT()) -> c_57()
    , 54: #ckgt^#(#GT()) -> c_58()
    , 55: #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
    , 56: #compare^#(#pos(@x), #0()) -> c_69()
    , 57: #compare^#(#pos(@x), #neg(@y)) -> c_70()
    , 58: #compare^#(#0(), #pos(@y)) -> c_71()
    , 59: #compare^#(#0(), #0()) -> c_72()
    , 60: #compare^#(#0(), #neg(@y)) -> c_73()
    , 61: #compare^#(#0(), #s(@y)) -> c_74()
    , 62: #compare^#(#neg(@x), #pos(@y)) -> c_75()
    , 63: #compare^#(#neg(@x), #0()) -> c_76()
    , 64: #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
    , 65: #compare^#(#s(@x), #0()) -> c_78()
    , 66: #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
    , 67: newline#1^#(nil(), @lastline, @y) -> c_38()
    , 68: right^#(@l) -> c_27(right#1^#(@l))
    , 69: max#1^#(#true(), @a, @b) -> c_28()
    , 70: max#1^#(#false(), @a, @b) -> c_29()
    , 71: #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
    , 72: #add^#(#pos(#s(#s(@x))), @y) ->
          c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 73: #add^#(#0(), @y) -> c_61()
    , 74: #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #and^#(#true(), #true()) -> c_64()
    , 77: #and^#(#true(), #false()) -> c_65()
    , 78: #and^#(#false(), #true()) -> c_66()
    , 79: #and^#(#false(), #false()) -> c_67()
    , 80: #succ^#(#pos(#s(@x))) -> c_80()
    , 81: #succ^#(#0()) -> c_81()
    , 82: #succ^#(#neg(#s(#0()))) -> c_82()
    , 83: #succ^#(#neg(#s(#s(@x)))) -> c_83()
    , 84: #pred^#(#pos(#s(#0()))) -> c_84()
    , 85: #pred^#(#pos(#s(#s(@x)))) -> c_85()
    , 86: #pred^#(#0()) -> c_86()
    , 87: #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y)) }
Weak DPs:
  { firstline#1^#(nil()) -> c_1()
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline'))
  , right^#(@l) -> c_27(right#1^#(@l))
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29()
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {10} by applications of
Pre({10}) = {9}. Here rules are labeled as follows:

  DPs:
    { 1: firstline#1^#(::(@x, @xs)) ->
         c_2(#abs^#(#0()), firstline^#(@xs))
    , 2: firstline^#(@l) -> c_20(firstline#1^#(@l))
    , 3: lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
    , 4: lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
    , 5: lcstable#1^#(::(@x, @xs), @l2) ->
         c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
              lcstable^#(@xs, @l2))
    , 6: lcstable#3^#(::(@l, @ls), @l2, @x) ->
         c_9(newline^#(@x, @l, @l2))
    , 7: newline^#(@y, @lastline, @l) ->
         c_24(newline#1^#(@l, @lastline, @y))
    , 8: lcs^#(@l1, @l2) ->
         c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
    , 9: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
         c_19(newline#3^#(newline(@y, @lastline', @xs),
                          @belowVal,
                          @lastline',
                          @x,
                          @y),
              newline^#(@y, @lastline', @xs))
    , 10: newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
          c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
               right^#(@nl))
    , 11: lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
    , 12: newline#1^#(::(@x, @xs), @lastline, @y) ->
          c_39(newline#2^#(@lastline, @x, @xs, @y))
    , 13: firstline#1^#(nil()) -> c_1()
    , 14: #abs^#(#pos(@x)) -> c_32()
    , 15: #abs^#(#0()) -> c_33()
    , 16: #abs^#(#neg(@x)) -> c_34()
    , 17: #abs^#(#s(@x)) -> c_35()
    , 18: #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
    , 19: #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
    , 20: #eq^#(#pos(@x), #0()) -> c_41()
    , 21: #eq^#(#pos(@x), #neg(@y)) -> c_42()
    , 22: #eq^#(nil(), nil()) -> c_43()
    , 23: #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
    , 24: #eq^#(::(@x_1, @x_2), nil()) -> c_45()
    , 25: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
               #eq^#(@x_1, @y_1),
               #eq^#(@x_2, @y_2))
    , 26: #eq^#(#0(), #pos(@y)) -> c_47()
    , 27: #eq^#(#0(), #0()) -> c_48()
    , 28: #eq^#(#0(), #neg(@y)) -> c_49()
    , 29: #eq^#(#0(), #s(@y)) -> c_50()
    , 30: #eq^#(#neg(@x), #pos(@y)) -> c_51()
    , 31: #eq^#(#neg(@x), #0()) -> c_52()
    , 32: #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
    , 33: #eq^#(#s(@x), #0()) -> c_54()
    , 34: #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
    , 35: lcs#3^#(nil()) -> c_4(#abs^#(#0()))
    , 36: lcs#3^#(::(@len, @_@1)) -> c_5()
    , 37: lcs#1^#(@m) -> c_6(lcs#2^#(@m))
    , 38: lcs#2^#(nil()) -> c_12(#abs^#(#0()))
    , 39: lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
    , 40: lcstable#3^#(nil(), @l2, @x) -> c_8()
    , 41: newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
          c_10(+^#(@diagVal, #pos(#s(#0()))))
    , 42: newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
          c_11(max^#(@belowVal, @rightVal))
    , 43: +^#(@x, @y) -> c_30(#add^#(@x, @y))
    , 44: max^#(@a, @b) ->
          c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
    , 45: newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
          c_15(newline#6^#(newline#7(#equal(@x, @y),
                                     @belowVal,
                                     @diagVal,
                                     @rightVal),
                           @nl),
               newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
               #equal^#(@x, @y))
    , 46: newline#6^#(@elem, @nl) -> c_37()
    , 47: right#1^#(nil()) -> c_16(#abs^#(#0()))
    , 48: right#1^#(::(@x, @xs)) -> c_17()
    , 49: newline#2^#(nil(), @x, @xs, @y) -> c_18()
    , 50: #greater^#(@x, @y) ->
          c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 51: #ckgt^#(#EQ()) -> c_56()
    , 52: #ckgt^#(#LT()) -> c_57()
    , 53: #ckgt^#(#GT()) -> c_58()
    , 54: #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
    , 55: #compare^#(#pos(@x), #0()) -> c_69()
    , 56: #compare^#(#pos(@x), #neg(@y)) -> c_70()
    , 57: #compare^#(#0(), #pos(@y)) -> c_71()
    , 58: #compare^#(#0(), #0()) -> c_72()
    , 59: #compare^#(#0(), #neg(@y)) -> c_73()
    , 60: #compare^#(#0(), #s(@y)) -> c_74()
    , 61: #compare^#(#neg(@x), #pos(@y)) -> c_75()
    , 62: #compare^#(#neg(@x), #0()) -> c_76()
    , 63: #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
    , 64: #compare^#(#s(@x), #0()) -> c_78()
    , 65: #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
    , 66: newline#1^#(nil(), @lastline, @y) -> c_38()
    , 67: newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
          c_25(newline#5^#(right(@lastline'),
                           @belowVal,
                           @nl,
                           @rightVal,
                           @x,
                           @y),
               right^#(@lastline'))
    , 68: right^#(@l) -> c_27(right#1^#(@l))
    , 69: max#1^#(#true(), @a, @b) -> c_28()
    , 70: max#1^#(#false(), @a, @b) -> c_29()
    , 71: #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
    , 72: #add^#(#pos(#s(#s(@x))), @y) ->
          c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 73: #add^#(#0(), @y) -> c_61()
    , 74: #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #and^#(#true(), #true()) -> c_64()
    , 77: #and^#(#true(), #false()) -> c_65()
    , 78: #and^#(#false(), #true()) -> c_66()
    , 79: #and^#(#false(), #false()) -> c_67()
    , 80: #succ^#(#pos(#s(@x))) -> c_80()
    , 81: #succ^#(#0()) -> c_81()
    , 82: #succ^#(#neg(#s(#0()))) -> c_82()
    , 83: #succ^#(#neg(#s(#s(@x)))) -> c_83()
    , 84: #pred^#(#pos(#s(#0()))) -> c_84()
    , 85: #pred^#(#pos(#s(#s(@x)))) -> c_85()
    , 86: #pred^#(#0()) -> c_86()
    , 87: #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y)) }
Weak DPs:
  { firstline#1^#(nil()) -> c_1()
  , #abs^#(#pos(@x)) -> c_32()
  , #abs^#(#0()) -> c_33()
  , #abs^#(#neg(@x)) -> c_34()
  , #abs^#(#s(@x)) -> c_35()
  , #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_41()
  , #eq^#(#pos(@x), #neg(@y)) -> c_42()
  , #eq^#(nil(), nil()) -> c_43()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_45()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
         #eq^#(@x_1, @y_1),
         #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #pos(@y)) -> c_47()
  , #eq^#(#0(), #0()) -> c_48()
  , #eq^#(#0(), #neg(@y)) -> c_49()
  , #eq^#(#0(), #s(@y)) -> c_50()
  , #eq^#(#neg(@x), #pos(@y)) -> c_51()
  , #eq^#(#neg(@x), #0()) -> c_52()
  , #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
  , #eq^#(#s(@x), #0()) -> c_54()
  , #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
  , lcs#3^#(nil()) -> c_4(#abs^#(#0()))
  , lcs#3^#(::(@len, @_@1)) -> c_5()
  , lcs#1^#(@m) -> c_6(lcs#2^#(@m))
  , lcs#2^#(nil()) -> c_12(#abs^#(#0()))
  , lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
  , lcstable#3^#(nil(), @l2, @x) -> c_8()
  , newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
    c_10(+^#(@diagVal, #pos(#s(#0()))))
  , newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
    c_11(max^#(@belowVal, @rightVal))
  , +^#(@x, @y) -> c_30(#add^#(@x, @y))
  , max^#(@a, @b) ->
    c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
  , newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    c_15(newline#6^#(newline#7(#equal(@x, @y),
                               @belowVal,
                               @diagVal,
                               @rightVal),
                     @nl),
         newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
         #equal^#(@x, @y))
  , newline#6^#(@elem, @nl) -> c_37()
  , right#1^#(nil()) -> c_16(#abs^#(#0()))
  , right#1^#(::(@x, @xs)) -> c_17()
  , newline#2^#(nil(), @x, @xs, @y) -> c_18()
  , newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
    c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
         right^#(@nl))
  , #greater^#(@x, @y) ->
    c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_56()
  , #ckgt^#(#LT()) -> c_57()
  , #ckgt^#(#GT()) -> c_58()
  , #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_69()
  , #compare^#(#pos(@x), #neg(@y)) -> c_70()
  , #compare^#(#0(), #pos(@y)) -> c_71()
  , #compare^#(#0(), #0()) -> c_72()
  , #compare^#(#0(), #neg(@y)) -> c_73()
  , #compare^#(#0(), #s(@y)) -> c_74()
  , #compare^#(#neg(@x), #pos(@y)) -> c_75()
  , #compare^#(#neg(@x), #0()) -> c_76()
  , #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
  , #compare^#(#s(@x), #0()) -> c_78()
  , #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
  , newline#1^#(nil(), @lastline, @y) -> c_38()
  , newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    c_25(newline#5^#(right(@lastline'),
                     @belowVal,
                     @nl,
                     @rightVal,
                     @x,
                     @y),
         right^#(@lastline'))
  , right^#(@l) -> c_27(right#1^#(@l))
  , max#1^#(#true(), @a, @b) -> c_28()
  , max#1^#(#false(), @a, @b) -> c_29()
  , #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_61()
  , #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #and^#(#true(), #true()) -> c_64()
  , #and^#(#true(), #false()) -> c_65()
  , #and^#(#false(), #true()) -> c_66()
  , #and^#(#false(), #false()) -> c_67()
  , #succ^#(#pos(#s(@x))) -> c_80()
  , #succ^#(#0()) -> c_81()
  , #succ^#(#neg(#s(#0()))) -> c_82()
  , #succ^#(#neg(#s(#s(@x)))) -> c_83()
  , #pred^#(#pos(#s(#0()))) -> c_84()
  , #pred^#(#pos(#s(#s(@x)))) -> c_85()
  , #pred^#(#0()) -> c_86()
  , #pred^#(#neg(#s(@x))) -> c_87() }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

The following weak DPs constitute a sub-graph of the DG that is
closed under successors. The DPs are removed.

{ firstline#1^#(nil()) -> c_1()
, #abs^#(#pos(@x)) -> c_32()
, #abs^#(#0()) -> c_33()
, #abs^#(#neg(@x)) -> c_34()
, #abs^#(#s(@x)) -> c_35()
, #equal^#(@x, @y) -> c_3(#eq^#(@x, @y))
, #eq^#(#pos(@x), #pos(@y)) -> c_40(#eq^#(@x, @y))
, #eq^#(#pos(@x), #0()) -> c_41()
, #eq^#(#pos(@x), #neg(@y)) -> c_42()
, #eq^#(nil(), nil()) -> c_43()
, #eq^#(nil(), ::(@y_1, @y_2)) -> c_44()
, #eq^#(::(@x_1, @x_2), nil()) -> c_45()
, #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
  c_46(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
       #eq^#(@x_1, @y_1),
       #eq^#(@x_2, @y_2))
, #eq^#(#0(), #pos(@y)) -> c_47()
, #eq^#(#0(), #0()) -> c_48()
, #eq^#(#0(), #neg(@y)) -> c_49()
, #eq^#(#0(), #s(@y)) -> c_50()
, #eq^#(#neg(@x), #pos(@y)) -> c_51()
, #eq^#(#neg(@x), #0()) -> c_52()
, #eq^#(#neg(@x), #neg(@y)) -> c_53(#eq^#(@x, @y))
, #eq^#(#s(@x), #0()) -> c_54()
, #eq^#(#s(@x), #s(@y)) -> c_55(#eq^#(@x, @y))
, lcs#3^#(nil()) -> c_4(#abs^#(#0()))
, lcs#3^#(::(@len, @_@1)) -> c_5()
, lcs#1^#(@m) -> c_6(lcs#2^#(@m))
, lcs#2^#(nil()) -> c_12(#abs^#(#0()))
, lcs#2^#(::(@l1, @_@2)) -> c_13(lcs#3^#(@l1))
, lcstable#3^#(nil(), @l2, @x) -> c_8()
, newline#7^#(#true(), @belowVal, @diagVal, @rightVal) ->
  c_10(+^#(@diagVal, #pos(#s(#0()))))
, newline#7^#(#false(), @belowVal, @diagVal, @rightVal) ->
  c_11(max^#(@belowVal, @rightVal))
, +^#(@x, @y) -> c_30(#add^#(@x, @y))
, max^#(@a, @b) ->
  c_26(max#1^#(#greater(@a, @b), @a, @b), #greater^#(@a, @b))
, newline#5^#(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
  c_15(newline#6^#(newline#7(#equal(@x, @y),
                             @belowVal,
                             @diagVal,
                             @rightVal),
                   @nl),
       newline#7^#(#equal(@x, @y), @belowVal, @diagVal, @rightVal),
       #equal^#(@x, @y))
, newline#6^#(@elem, @nl) -> c_37()
, right#1^#(nil()) -> c_16(#abs^#(#0()))
, right#1^#(::(@x, @xs)) -> c_17()
, newline#2^#(nil(), @x, @xs, @y) -> c_18()
, newline#3^#(@nl, @belowVal, @lastline', @x, @y) ->
  c_31(newline#4^#(right(@nl), @belowVal, @lastline', @nl, @x, @y),
       right^#(@nl))
, #greater^#(@x, @y) ->
  c_23(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
, #ckgt^#(#EQ()) -> c_56()
, #ckgt^#(#LT()) -> c_57()
, #ckgt^#(#GT()) -> c_58()
, #compare^#(#pos(@x), #pos(@y)) -> c_68(#compare^#(@x, @y))
, #compare^#(#pos(@x), #0()) -> c_69()
, #compare^#(#pos(@x), #neg(@y)) -> c_70()
, #compare^#(#0(), #pos(@y)) -> c_71()
, #compare^#(#0(), #0()) -> c_72()
, #compare^#(#0(), #neg(@y)) -> c_73()
, #compare^#(#0(), #s(@y)) -> c_74()
, #compare^#(#neg(@x), #pos(@y)) -> c_75()
, #compare^#(#neg(@x), #0()) -> c_76()
, #compare^#(#neg(@x), #neg(@y)) -> c_77(#compare^#(@y, @x))
, #compare^#(#s(@x), #0()) -> c_78()
, #compare^#(#s(@x), #s(@y)) -> c_79(#compare^#(@x, @y))
, newline#1^#(nil(), @lastline, @y) -> c_38()
, newline#4^#(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
  c_25(newline#5^#(right(@lastline'),
                   @belowVal,
                   @nl,
                   @rightVal,
                   @x,
                   @y),
       right^#(@lastline'))
, right^#(@l) -> c_27(right#1^#(@l))
, max#1^#(#true(), @a, @b) -> c_28()
, max#1^#(#false(), @a, @b) -> c_29()
, #add^#(#pos(#s(#0())), @y) -> c_59(#succ^#(@y))
, #add^#(#pos(#s(#s(@x))), @y) ->
  c_60(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
, #add^#(#0(), @y) -> c_61()
, #add^#(#neg(#s(#0())), @y) -> c_62(#pred^#(@y))
, #add^#(#neg(#s(#s(@x))), @y) ->
  c_63(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
, #and^#(#true(), #true()) -> c_64()
, #and^#(#true(), #false()) -> c_65()
, #and^#(#false(), #true()) -> c_66()
, #and^#(#false(), #false()) -> c_67()
, #succ^#(#pos(#s(@x))) -> c_80()
, #succ^#(#0()) -> c_81()
, #succ^#(#neg(#s(#0()))) -> c_82()
, #succ^#(#neg(#s(#s(@x)))) -> c_83()
, #pred^#(#pos(#s(#0()))) -> c_84()
, #pred^#(#pos(#s(#s(@x)))) -> c_85()
, #pred^#(#0()) -> c_86()
, #pred^#(#neg(#s(@x))) -> c_87() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , firstline^#(@l) -> c_20(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_7(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_21(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_22(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_9(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_24(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_36(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_39(newline#2^#(@lastline, @x, @xs, @y)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

Due to missing edges in the dependency-graph, the right-hand sides
of following rules could be simplified:

  { firstline#1^#(::(@x, @xs)) -> c_2(#abs^#(#0()), firstline^#(@xs))
  , lcs^#(@l1, @l2) ->
    c_14(lcs#1^#(lcstable(@l1, @l2)), lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_19(newline#3^#(newline(@y, @lastline', @xs),
                     @belowVal,
                     @lastline',
                     @x,
                     @y),
         newline^#(@y, @lastline', @xs)) }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
  , firstline^#(@l) -> c_2(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) -> c_8(lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcs#3(nil()) -> #abs(#0())
  , lcs#3(::(@len, @_@1)) -> @len
  , lcs#1(@m) -> lcs#2(@m)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , lcs#2(nil()) -> #abs(#0())
  , lcs#2(::(@l1, @_@2)) -> lcs#3(@l1)
  , lcs(@l1, @l2) -> lcs#1(lcstable(@l1, @l2))
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We replace rewrite rules by usable rules:

  Weak Usable Rules:
    { firstline#1(nil()) -> nil()
    , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
    , lcstable#3(nil(), @l2, @x) -> nil()
    , lcstable#3(::(@l, @ls), @l2, @x) ->
      ::(newline(@x, @l, @l2), ::(@l, @ls))
    , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
      +(@diagVal, #pos(#s(#0())))
    , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
      max(@belowVal, @rightVal)
    , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
      newline#6(newline#7(#equal(@x, @y),
                          @belowVal,
                          @diagVal,
                          @rightVal),
                @nl)
    , right#1(nil()) -> #abs(#0())
    , right#1(::(@x, @xs)) -> @x
    , newline#2(nil(), @x, @xs, @y) -> nil()
    , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
      newline#3(newline(@y, @lastline', @xs),
                @belowVal,
                @lastline',
                @x,
                @y)
    , firstline(@l) -> firstline#1(@l)
    , #ckgt(#EQ()) -> #false()
    , #ckgt(#LT()) -> #false()
    , #ckgt(#GT()) -> #true()
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
    , lcstable#1(::(@x, @xs), @l2) ->
      lcstable#2(lcstable(@xs, @l2), @l2, @x)
    , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
    , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
    , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
      newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
    , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
    , right(@l) -> right#1(@l)
    , max#1(#true(), @a, @b) -> @a
    , max#1(#false(), @a, @b) -> @b
    , +(@x, @y) -> #add(@x, @y)
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
      newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#s(@x)) -> #pos(#s(@x))
    , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0()))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , newline#6(@elem, @nl) -> ::(@elem, @nl)
    , newline#1(nil(), @lastline, @y) -> nil()
    , newline#1(::(@x, @xs), @lastline, @y) ->
      newline#2(@lastline, @x, @xs, @y) }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
  , firstline^#(@l) -> c_2(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , lcs^#(@l1, @l2) -> c_8(lcstable^#(@l1, @l2))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

Consider the dependency graph

  1: firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
     -->_1 firstline^#(@l) -> c_2(firstline#1^#(@l)) :2
  
  2: firstline^#(@l) -> c_2(firstline#1^#(@l))
     -->_1 firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs)) :1
  
  3: lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
     -->_1 lcstable#1^#(::(@x, @xs), @l2) ->
           c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
               lcstable^#(@xs, @l2)) :5
     -->_1 lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2)) :4
  
  4: lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
     -->_1 firstline^#(@l) -> c_2(firstline#1^#(@l)) :2
  
  5: lcstable#1^#(::(@x, @xs), @l2) ->
     c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
         lcstable^#(@xs, @l2))
     -->_1 lcstable#2^#(@m, @l2, @x) ->
           c_10(lcstable#3^#(@m, @l2, @x)) :10
     -->_2 lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2)) :3
  
  6: lcstable#3^#(::(@l, @ls), @l2, @x) ->
     c_6(newline^#(@x, @l, @l2))
     -->_1 newline^#(@y, @lastline, @l) ->
           c_7(newline#1^#(@l, @lastline, @y)) :7
  
  7: newline^#(@y, @lastline, @l) ->
     c_7(newline#1^#(@l, @lastline, @y))
     -->_1 newline#1^#(::(@x, @xs), @lastline, @y) ->
           c_11(newline#2^#(@lastline, @x, @xs, @y)) :11
  
  8: lcs^#(@l1, @l2) -> c_8(lcstable^#(@l1, @l2))
     -->_1 lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2)) :3
  
  9: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
     c_9(newline^#(@y, @lastline', @xs))
     -->_1 newline^#(@y, @lastline, @l) ->
           c_7(newline#1^#(@l, @lastline, @y)) :7
  
  10: lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
     -->_1 lcstable#3^#(::(@l, @ls), @l2, @x) ->
           c_6(newline^#(@x, @l, @l2)) :6
  
  11: newline#1^#(::(@x, @xs), @lastline, @y) ->
      c_11(newline#2^#(@lastline, @x, @xs, @y))
     -->_1 newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
           c_9(newline^#(@y, @lastline', @xs)) :9
  

Following roots of the dependency graph are removed, as the
considered set of starting terms is closed under reduction with
respect to these rules (modulo compound contexts).

  { lcs^#(@l1, @l2) -> c_8(lcstable^#(@l1, @l2)) }


We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
  , firstline^#(@l) -> c_2(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We use the processor 'matrix interpretation of dimension 1' to
orient following rules strictly.

DPs:
  { 1: firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
  , 2: firstline^#(@l) -> c_2(firstline#1^#(@l))
  , 3: lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , 4: lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
  , 5: lcstable#1^#(::(@x, @xs), @l2) ->
       c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
           lcstable^#(@xs, @l2)) }
Trs:
  { firstline#1(nil()) -> nil()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }

Sub-proof:
----------
  The following argument positions are usable:
    Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1},
    Uargs(c_4) = {1}, Uargs(c_5) = {1, 2}, Uargs(c_6) = {1},
    Uargs(c_7) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1},
    Uargs(c_11) = {1}
  
  TcT has computed the following constructor-based matrix
  interpretation satisfying not(EDA).
  
                      [firstline#1](x1) = [1] x1 + [2]                           
                                                                                 
                       [#equal](x1, x2) = [3] x1 + [1] x2 + [1]                  
                                                                                 
                          [#eq](x1, x2) = [3] x1 + [1] x2 + [1]                  
                                                                                 
                     [lcstable](x1, x2) = [2] x1 + [7]                           
                                                                                 
               [lcstable#3](x1, x2, x3) = [1] x1 + [2]                           
                                                                                 
            [newline#7](x1, x2, x3, x4) = [4] x1 + [1] x2 + [6] x3 + [3] x4 + [3]
                                                                                 
                                [#true] = [3]                                    
                                                                                 
    [newline#5](x1, x2, x3, x4, x5, x6) = [4]                                    
                                                                                 
                          [right#1](x1) = [0]                                    
                                                                                 
            [newline#2](x1, x2, x3, x4) = [0]                                    
                                                                                 
                        [firstline](x1) = [1] x1 + [7]                           
                                                                                 
                            [#ckgt](x1) = [2] x1 + [2]                           
                                                                                 
                         [#add](x1, x2) = [3] x1 + [1] x2 + [0]                  
                                                                                 
                             [#pos](x1) = [1] x1 + [1]                           
                                                                                 
                                  [#EQ] = [1]                                    
                                                                                 
                         [#and](x1, x2) = [3]                                    
                                                                                 
                     [#compare](x1, x2) = [2]                                    
                                                                                 
                   [lcstable#1](x1, x2) = [2] x1 + [7]                           
                                                                                 
                                  [nil] = [2]                                    
                                                                                 
                     [#greater](x1, x2) = [2] x2 + [7]                           
                                                                                 
                  [newline](x1, x2, x3) = [2]                                    
                                                                                 
    [newline#4](x1, x2, x3, x4, x5, x6) = [4] x2 + [4]                           
                                                                                 
                          [max](x1, x2) = [1] x1 + [3] x2 + [7]                  
                                                                                 
                            [right](x1) = [0]                                    
                                                                                 
                               [#false] = [2]                                    
                                                                                 
                           [::](x1, x2) = [1] x2 + [1]                           
                                                                                 
                                  [#LT] = [0]                                    
                                                                                 
                    [max#1](x1, x2, x3) = [1] x1 + [1] x2 + [1] x3 + [0]         
                                                                                 
                            [+](x1, x2) = [3] x1 + [2] x2 + [4]                  
                                                                                 
                            [#succ](x1) = [1] x1 + [4]                           
                                                                                 
        [newline#3](x1, x2, x3, x4, x5) = [4]                                    
                                                                                 
                                   [#0] = [2]                                    
                                                                                 
                             [#neg](x1) = [1] x1 + [0]                           
                                                                                 
                             [#abs](x1) = [1] x1 + [1]                           
                                                                                 
               [lcstable#2](x1, x2, x3) = [1] x1 + [2]                           
                                                                                 
                            [#pred](x1) = [1] x1 + [2]                           
                                                                                 
                    [newline#6](x1, x2) = [0]                                    
                                                                                 
                [newline#1](x1, x2, x3) = [2]                                    
                                                                                 
                               [#s](x1) = [1] x1 + [2]                           
                                                                                 
                                  [#GT] = [2]                                    
                                                                                 
                    [firstline#1^#](x1) = [4] x1 + [0]                           
                                                                                 
                      [firstline^#](x1) = [4] x1 + [2]                           
                                                                                 
                   [lcstable^#](x1, x2) = [3] x1 + [7] x2 + [1]                  
                                                                                 
                 [lcstable#1^#](x1, x2) = [3] x1 + [7] x2 + [0]                  
                                                                                 
             [lcstable#3^#](x1, x2, x3) = [0]                                    
                                                                                 
                [newline^#](x1, x2, x3) = [0]                                    
                                                                                 
          [newline#2^#](x1, x2, x3, x4) = [0]                                    
                                                                                 
             [lcstable#2^#](x1, x2, x3) = [0]                                    
                                                                                 
              [newline#1^#](x1, x2, x3) = [0]                                    
                                                                                 
                              [c_1](x1) = [1] x1 + [1]                           
                                                                                 
                              [c_2](x1) = [1] x1 + [0]                           
                                                                                 
                              [c_3](x1) = [1] x1 + [0]                           
                                                                                 
                              [c_4](x1) = [1] x1 + [1]                           
                                                                                 
                          [c_5](x1, x2) = [1] x1 + [1] x2 + [1]                  
                                                                                 
                              [c_6](x1) = [4] x1 + [0]                           
                                                                                 
                              [c_7](x1) = [4] x1 + [0]                           
                                                                                 
                              [c_9](x1) = [1] x1 + [0]                           
                                                                                 
                             [c_10](x1) = [2] x1 + [0]                           
                                                                                 
                             [c_11](x1) = [1] x1 + [0]                           
  
  The order satisfies the following ordering constraints:
  
                                          [firstline#1(nil())] =  [4]                                                              
                                                               >  [2]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
                                    [firstline#1(::(@x, @xs))] =  [1] @xs + [3]                                                    
                                                               ?  [1] @xs + [8]                                                    
                                                               =  [::(#abs(#0()), firstline(@xs))]                                 
                                                                                                                                   
                                              [#equal(@x, @y)] =  [3] @x + [1] @y + [1]                                            
                                                               >= [3] @x + [1] @y + [1]                                            
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                     [#eq(#pos(@x), #pos(@y))] =  [3] @x + [1] @y + [5]                                            
                                                               >  [3] @x + [1] @y + [1]                                            
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                         [#eq(#pos(@x), #0())] =  [3] @x + [6]                                                     
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#eq(#pos(@x), #neg(@y))] =  [3] @x + [1] @y + [4]                                            
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                           [#eq(nil(), nil())] =  [9]                                                              
                                                               >  [3]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                  [#eq(nil(), ::(@y_1, @y_2))] =  [1] @y_2 + [8]                                                   
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                  [#eq(::(@x_1, @x_2), nil())] =  [3] @x_2 + [6]                                                   
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                         [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] =  [3] @x_2 + [1] @y_2 + [5]                                        
                                                               >  [3]                                                              
                                                               =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]                         
                                                                                                                                   
                                         [#eq(#0(), #pos(@y))] =  [1] @y + [8]                                                     
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                             [#eq(#0(), #0())] =  [9]                                                              
                                                               >  [3]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                         [#eq(#0(), #neg(@y))] =  [1] @y + [7]                                                     
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                           [#eq(#0(), #s(@y))] =  [1] @y + [9]                                                     
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#eq(#neg(@x), #pos(@y))] =  [3] @x + [1] @y + [2]                                            
                                                               >= [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                         [#eq(#neg(@x), #0())] =  [3] @x + [3]                                                     
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#eq(#neg(@x), #neg(@y))] =  [3] @x + [1] @y + [1]                                            
                                                               >= [3] @x + [1] @y + [1]                                            
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                           [#eq(#s(@x), #0())] =  [3] @x + [9]                                                     
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                         [#eq(#s(@x), #s(@y))] =  [3] @x + [1] @y + [9]                                            
                                                               >  [3] @x + [1] @y + [1]                                            
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                          [lcstable(@l1, @l2)] =  [2] @l1 + [7]                                                    
                                                               >= [2] @l1 + [7]                                                    
                                                               =  [lcstable#1(@l1, @l2)]                                           
                                                                                                                                   
                                  [lcstable#3(nil(), @l2, @x)] =  [4]                                                              
                                                               >  [2]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
                            [lcstable#3(::(@l, @ls), @l2, @x)] =  [1] @ls + [3]                                                    
                                                               >  [1] @ls + [2]                                                    
                                                               =  [::(newline(@x, @l, @l2), ::(@l, @ls))]                          
                                                                                                                                   
          [newline#7(#true(), @belowVal, @diagVal, @rightVal)] =  [1] @belowVal + [3] @rightVal + [6] @diagVal + [15]              
                                                               >  [3] @diagVal + [14]                                              
                                                               =  [+(@diagVal, #pos(#s(#0())))]                                    
                                                                                                                                   
         [newline#7(#false(), @belowVal, @diagVal, @rightVal)] =  [1] @belowVal + [3] @rightVal + [6] @diagVal + [11]              
                                                               >  [1] @belowVal + [3] @rightVal + [7]                              
                                                               =  [max(@belowVal, @rightVal)]                                      
                                                                                                                                   
      [newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y)] =  [4]                                                              
                                                               >  [0]                                                              
                                                               =  [newline#6(newline#7(#equal(@x, @y),                             
                                                                                       @belowVal,                                  
                                                                                       @diagVal,                                   
                                                                                       @rightVal),                                 
                                                                             @nl)]                                                 
                                                                                                                                   
                                              [right#1(nil())] =  [0]                                                              
                                                               ?  [3]                                                              
                                                               =  [#abs(#0())]                                                     
                                                                                                                                   
                                        [right#1(::(@x, @xs))] =  [0]                                                              
                                                               ?  [1] @x + [0]                                                     
                                                               =  [@x]                                                             
                                                                                                                                   
                               [newline#2(nil(), @x, @xs, @y)] =  [0]                                                              
                                                               ?  [2]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
           [newline#2(::(@belowVal, @lastline'), @x, @xs, @y)] =  [0]                                                              
                                                               ?  [4]                                                              
                                                               =  [newline#3(newline(@y, @lastline', @xs),                         
                                                                             @belowVal,                                            
                                                                             @lastline',                                           
                                                                             @x,                                                   
                                                                             @y)]                                                  
                                                                                                                                   
                                               [firstline(@l)] =  [1] @l + [7]                                                     
                                                               >  [1] @l + [2]                                                     
                                                               =  [firstline#1(@l)]                                                
                                                                                                                                   
                                                [#ckgt(#EQ())] =  [4]                                                              
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                                [#ckgt(#LT())] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                                [#ckgt(#GT())] =  [6]                                                              
                                                               >  [3]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                    [#add(#pos(#s(#0())), @y)] =  [1] @y + [15]                                                    
                                                               >  [1] @y + [4]                                                     
                                                               =  [#succ(@y)]                                                      
                                                                                                                                   
                                  [#add(#pos(#s(#s(@x))), @y)] =  [3] @x + [1] @y + [15]                                           
                                                               >  [3] @x + [1] @y + [13]                                           
                                                               =  [#succ(#add(#pos(#s(@x)), @y))]                                  
                                                                                                                                   
                                              [#add(#0(), @y)] =  [1] @y + [6]                                                     
                                                               >  [1] @y + [0]                                                     
                                                               =  [@y]                                                             
                                                                                                                                   
                                    [#add(#neg(#s(#0())), @y)] =  [1] @y + [12]                                                    
                                                               >  [1] @y + [2]                                                     
                                                               =  [#pred(@y)]                                                      
                                                                                                                                   
                                  [#add(#neg(#s(#s(@x))), @y)] =  [3] @x + [1] @y + [12]                                           
                                                               >  [3] @x + [1] @y + [11]                                           
                                                               =  [#pred(#add(#pos(#s(@x)), @y))]                                  
                                                                                                                                   
                                      [#and(#true(), #true())] =  [3]                                                              
                                                               >= [3]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                     [#and(#true(), #false())] =  [3]                                                              
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#and(#false(), #true())] =  [3]                                                              
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                    [#and(#false(), #false())] =  [3]                                                              
                                                               >  [2]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                [#compare(#pos(@x), #pos(@y))] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#compare(@x, @y)]                                               
                                                                                                                                   
                                    [#compare(#pos(@x), #0())] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                [#compare(#pos(@x), #neg(@y))] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                    [#compare(#0(), #pos(@y))] =  [2]                                                              
                                                               >  [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                        [#compare(#0(), #0())] =  [2]                                                              
                                                               >  [1]                                                              
                                                               =  [#EQ()]                                                          
                                                                                                                                   
                                    [#compare(#0(), #neg(@y))] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                      [#compare(#0(), #s(@y))] =  [2]                                                              
                                                               >  [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                [#compare(#neg(@x), #pos(@y))] =  [2]                                                              
                                                               >  [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                    [#compare(#neg(@x), #0())] =  [2]                                                              
                                                               >  [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                [#compare(#neg(@x), #neg(@y))] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#compare(@y, @x)]                                               
                                                                                                                                   
                                      [#compare(#s(@x), #0())] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                    [#compare(#s(@x), #s(@y))] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [#compare(@x, @y)]                                               
                                                                                                                                   
                                      [lcstable#1(nil(), @l2)] =  [11]                                                             
                                                               >  [3]                                                              
                                                               =  [::(firstline(@l2), nil())]                                      
                                                                                                                                   
                                [lcstable#1(::(@x, @xs), @l2)] =  [2] @xs + [9]                                                    
                                                               >= [2] @xs + [9]                                                    
                                                               =  [lcstable#2(lcstable(@xs, @l2), @l2, @x)]                        
                                                                                                                                   
                                            [#greater(@x, @y)] =  [2] @y + [7]                                                     
                                                               >  [6]                                                              
                                                               =  [#ckgt(#compare(@x, @y))]                                        
                                                                                                                                   
                                  [newline(@y, @lastline, @l)] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [newline#1(@l, @lastline, @y)]                                   
                                                                                                                                   
    [newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y)] =  [4] @belowVal + [4]                                              
                                                               >= [4]                                                              
                                                               =  [newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)]
                                                                                                                                   
                                                 [max(@a, @b)] =  [1] @a + [3] @b + [7]                                            
                                                               >= [1] @a + [3] @b + [7]                                            
                                                               =  [max#1(#greater(@a, @b), @a, @b)]                                
                                                                                                                                   
                                                   [right(@l)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [right#1(@l)]                                                    
                                                                                                                                   
                                      [max#1(#true(), @a, @b)] =  [1] @a + [1] @b + [3]                                            
                                                               >  [1] @a + [0]                                                     
                                                               =  [@a]                                                             
                                                                                                                                   
                                     [max#1(#false(), @a, @b)] =  [1] @a + [1] @b + [2]                                            
                                                               >  [1] @b + [0]                                                     
                                                               =  [@b]                                                             
                                                                                                                                   
                                                   [+(@x, @y)] =  [3] @x + [2] @y + [4]                                            
                                                               >  [3] @x + [1] @y + [0]                                            
                                                               =  [#add(@x, @y)]                                                   
                                                                                                                                   
                                         [#succ(#pos(#s(@x)))] =  [1] @x + [7]                                                     
                                                               >  [1] @x + [5]                                                     
                                                               =  [#pos(#s(#s(@x)))]                                               
                                                                                                                                   
                                                 [#succ(#0())] =  [6]                                                              
                                                               >  [5]                                                              
                                                               =  [#pos(#s(#0()))]                                                 
                                                                                                                                   
                                       [#succ(#neg(#s(#0())))] =  [8]                                                              
                                                               >  [2]                                                              
                                                               =  [#0()]                                                           
                                                                                                                                   
                                     [#succ(#neg(#s(#s(@x))))] =  [1] @x + [8]                                                     
                                                               >  [1] @x + [2]                                                     
                                                               =  [#neg(#s(@x))]                                                   
                                                                                                                                   
               [newline#3(@nl, @belowVal, @lastline', @x, @y)] =  [4]                                                              
                                                               ?  [4] @belowVal + [4]                                              
                                                               =  [newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)]      
                                                                                                                                   
                                              [#abs(#pos(@x))] =  [1] @x + [2]                                                     
                                                               >  [1] @x + [1]                                                     
                                                               =  [#pos(@x)]                                                       
                                                                                                                                   
                                                  [#abs(#0())] =  [3]                                                              
                                                               >  [2]                                                              
                                                               =  [#0()]                                                           
                                                                                                                                   
                                              [#abs(#neg(@x))] =  [1] @x + [1]                                                     
                                                               >= [1] @x + [1]                                                     
                                                               =  [#pos(@x)]                                                       
                                                                                                                                   
                                                [#abs(#s(@x))] =  [1] @x + [3]                                                     
                                                               >= [1] @x + [3]                                                     
                                                               =  [#pos(#s(@x))]                                                   
                                                                                                                                   
                                     [lcstable#2(@m, @l2, @x)] =  [1] @m + [2]                                                     
                                                               >= [1] @m + [2]                                                     
                                                               =  [lcstable#3(@m, @l2, @x)]                                        
                                                                                                                                   
                                       [#pred(#pos(#s(#0())))] =  [7]                                                              
                                                               >  [2]                                                              
                                                               =  [#0()]                                                           
                                                                                                                                   
                                     [#pred(#pos(#s(#s(@x))))] =  [1] @x + [7]                                                     
                                                               >  [1] @x + [3]                                                     
                                                               =  [#pos(#s(@x))]                                                   
                                                                                                                                   
                                                 [#pred(#0())] =  [4]                                                              
                                                               >= [4]                                                              
                                                               =  [#neg(#s(#0()))]                                                 
                                                                                                                                   
                                         [#pred(#neg(#s(@x)))] =  [1] @x + [4]                                                     
                                                               >= [1] @x + [4]                                                     
                                                               =  [#neg(#s(#s(@x)))]                                               
                                                                                                                                   
                                       [newline#6(@elem, @nl)] =  [0]                                                              
                                                               ?  [1] @nl + [1]                                                    
                                                               =  [::(@elem, @nl)]                                                 
                                                                                                                                   
                             [newline#1(nil(), @lastline, @y)] =  [2]                                                              
                                                               >= [2]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
                       [newline#1(::(@x, @xs), @lastline, @y)] =  [2]                                                              
                                                               >  [0]                                                              
                                                               =  [newline#2(@lastline, @x, @xs, @y)]                              
                                                                                                                                   
                                  [firstline#1^#(::(@x, @xs))] =  [4] @xs + [4]                                                    
                                                               >  [4] @xs + [3]                                                    
                                                               =  [c_1(firstline^#(@xs))]                                          
                                                                                                                                   
                                             [firstline^#(@l)] =  [4] @l + [2]                                                     
                                                               >  [4] @l + [0]                                                     
                                                               =  [c_2(firstline#1^#(@l))]                                         
                                                                                                                                   
                                        [lcstable^#(@l1, @l2)] =  [3] @l1 + [7] @l2 + [1]                                          
                                                               >  [3] @l1 + [7] @l2 + [0]                                          
                                                               =  [c_3(lcstable#1^#(@l1, @l2))]                                    
                                                                                                                                   
                                    [lcstable#1^#(nil(), @l2)] =  [7] @l2 + [6]                                                    
                                                               >  [4] @l2 + [3]                                                    
                                                               =  [c_4(firstline^#(@l2))]                                          
                                                                                                                                   
                              [lcstable#1^#(::(@x, @xs), @l2)] =  [3] @xs + [7] @l2 + [3]                                          
                                                               >  [3] @xs + [7] @l2 + [2]                                          
                                                               =  [c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),                  
                                                                       lcstable^#(@xs, @l2))]                                      
                                                                                                                                   
                          [lcstable#3^#(::(@l, @ls), @l2, @x)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [c_6(newline^#(@x, @l, @l2))]                                    
                                                                                                                                   
                                [newline^#(@y, @lastline, @l)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [c_7(newline#1^#(@l, @lastline, @y))]                            
                                                                                                                                   
         [newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [c_9(newline^#(@y, @lastline', @xs))]                            
                                                                                                                                   
                                   [lcstable#2^#(@m, @l2, @x)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [c_10(lcstable#3^#(@m, @l2, @x))]                                
                                                                                                                                   
                     [newline#1^#(::(@x, @xs), @lastline, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [c_11(newline#2^#(@lastline, @x, @xs, @y))]                      
                                                                                                                                   

We return to the main proof. Consider the set of all dependency
pairs

:
  { 1: firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
  , 2: firstline^#(@l) -> c_2(firstline#1^#(@l))
  , 3: lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , 4: lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
  , 5: lcstable#1^#(::(@x, @xs), @l2) ->
       c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
           lcstable^#(@xs, @l2))
  , 6: lcstable#3^#(::(@l, @ls), @l2, @x) ->
       c_6(newline^#(@x, @l, @l2))
  , 7: newline^#(@y, @lastline, @l) ->
       c_7(newline#1^#(@l, @lastline, @y))
  , 8: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
       c_9(newline^#(@y, @lastline', @xs))
  , 9: lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
  , 10: newline#1^#(::(@x, @xs), @lastline, @y) ->
        c_11(newline#2^#(@lastline, @x, @xs, @y)) }

Processor 'matrix interpretation of dimension 1' induces the
complexity certificate YES(?,O(n^1)) on application of dependency
pairs {1,2,3,4,5}. These cover all (indirect) predecessors of
dependency pairs {1,2,3,4,5,6,9}, their number of application is
equally bounded. The dependency pairs are shifted into the weak
component.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak DPs:
  { firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
  , firstline^#(@l) -> c_2(firstline#1^#(@l))
  , lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

The following weak DPs constitute a sub-graph of the DG that is
closed under successors. The DPs are removed.

{ firstline#1^#(::(@x, @xs)) -> c_1(firstline^#(@xs))
, firstline^#(@l) -> c_2(firstline#1^#(@l))
, lcstable#1^#(nil(), @l2) -> c_4(firstline^#(@l2)) }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak DPs:
  { lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2))
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We decompose the input problem according to the dependency graph
into the upper component

  { lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2)) }

and lower component

  { lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }

Further, following extension rules are added to the lower
component.

{ lcstable^#(@l1, @l2) -> lcstable#1^#(@l1, @l2)
, lcstable#1^#(::(@x, @xs), @l2) -> lcstable^#(@xs, @l2)
, lcstable#1^#(::(@x, @xs), @l2) ->
  lcstable#2^#(lcstable(@xs, @l2), @l2, @x) }

TcT solves the upper component with certificate YES(O(1),O(n^1)).

Sub-proof:
----------
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(n^1)).
  
  Strict DPs:
    { lcstable#1^#(::(@x, @xs), @l2) ->
      c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
          lcstable^#(@xs, @l2)) }
  Weak DPs: { lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2)) }
  Weak Trs:
    { firstline#1(nil()) -> nil()
    , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
    , lcstable#3(nil(), @l2, @x) -> nil()
    , lcstable#3(::(@l, @ls), @l2, @x) ->
      ::(newline(@x, @l, @l2), ::(@l, @ls))
    , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
      +(@diagVal, #pos(#s(#0())))
    , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
      max(@belowVal, @rightVal)
    , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
      newline#6(newline#7(#equal(@x, @y),
                          @belowVal,
                          @diagVal,
                          @rightVal),
                @nl)
    , right#1(nil()) -> #abs(#0())
    , right#1(::(@x, @xs)) -> @x
    , newline#2(nil(), @x, @xs, @y) -> nil()
    , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
      newline#3(newline(@y, @lastline', @xs),
                @belowVal,
                @lastline',
                @x,
                @y)
    , firstline(@l) -> firstline#1(@l)
    , #ckgt(#EQ()) -> #false()
    , #ckgt(#LT()) -> #false()
    , #ckgt(#GT()) -> #true()
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
    , lcstable#1(::(@x, @xs), @l2) ->
      lcstable#2(lcstable(@xs, @l2), @l2, @x)
    , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
    , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
    , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
      newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
    , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
    , right(@l) -> right#1(@l)
    , max#1(#true(), @a, @b) -> @a
    , max#1(#false(), @a, @b) -> @b
    , +(@x, @y) -> #add(@x, @y)
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
      newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#s(@x)) -> #pos(#s(@x))
    , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0()))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , newline#6(@elem, @nl) -> ::(@elem, @nl)
    , newline#1(nil(), @lastline, @y) -> nil()
    , newline#1(::(@x, @xs), @lastline, @y) ->
      newline#2(@lastline, @x, @xs, @y) }
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(n^1))
  
  We use the processor 'matrix interpretation of dimension 1' to
  orient following rules strictly.
  
  DPs:
    { 1: lcstable#1^#(::(@x, @xs), @l2) ->
         c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
             lcstable^#(@xs, @l2)) }
  
  Sub-proof:
  ----------
    The following argument positions are usable:
      Uargs(c_3) = {1}, Uargs(c_5) = {1, 2}
    
    TcT has computed the following constructor-based matrix
    interpretation satisfying not(EDA).
    
                        [firstline#1](x1) = [0]                  
                                                                 
                         [#equal](x1, x2) = [0]                  
                                                                 
                            [#eq](x1, x2) = [0]                  
                                                                 
                       [lcstable](x1, x2) = [0]                  
                                                                 
                 [lcstable#3](x1, x2, x3) = [0]                  
                                                                 
              [newline#7](x1, x2, x3, x4) = [0]                  
                                                                 
                                  [#true] = [0]                  
                                                                 
      [newline#5](x1, x2, x3, x4, x5, x6) = [0]                  
                                                                 
                            [right#1](x1) = [0]                  
                                                                 
              [newline#2](x1, x2, x3, x4) = [0]                  
                                                                 
                          [firstline](x1) = [0]                  
                                                                 
                              [#ckgt](x1) = [0]                  
                                                                 
                           [#add](x1, x2) = [0]                  
                                                                 
                               [#pos](x1) = [0]                  
                                                                 
                                    [#EQ] = [0]                  
                                                                 
                           [#and](x1, x2) = [0]                  
                                                                 
                       [#compare](x1, x2) = [0]                  
                                                                 
                     [lcstable#1](x1, x2) = [3] x2 + [0]         
                                                                 
                                    [nil] = [0]                  
                                                                 
                       [#greater](x1, x2) = [0]                  
                                                                 
                    [newline](x1, x2, x3) = [0]                  
                                                                 
      [newline#4](x1, x2, x3, x4, x5, x6) = [1] x4 + [0]         
                                                                 
                            [max](x1, x2) = [1]                  
                                                                 
                              [right](x1) = [0]                  
                                                                 
                                 [#false] = [0]                  
                                                                 
                             [::](x1, x2) = [1] x2 + [4]         
                                                                 
                                    [#LT] = [0]                  
                                                                 
                      [max#1](x1, x2, x3) = [1] x2 + [1] x3 + [0]
                                                                 
                              [+](x1, x2) = [0]                  
                                                                 
                              [#succ](x1) = [0]                  
                                                                 
          [newline#3](x1, x2, x3, x4, x5) = [4] x2 + [0]         
                                                                 
                                     [#0] = [0]                  
                                                                 
                               [#neg](x1) = [0]                  
                                                                 
                               [#abs](x1) = [0]                  
                                                                 
                 [lcstable#2](x1, x2, x3) = [0]                  
                                                                 
                              [#pred](x1) = [0]                  
                                                                 
                      [newline#6](x1, x2) = [0]                  
                                                                 
                  [newline#1](x1, x2, x3) = [0]                  
                                                                 
                                 [#s](x1) = [0]                  
                                                                 
                                    [#GT] = [0]                  
                                                                 
                     [lcstable^#](x1, x2) = [1] x1 + [0]         
                                                                 
                   [lcstable#1^#](x1, x2) = [1] x1 + [0]         
                                                                 
               [lcstable#2^#](x1, x2, x3) = [0]                  
                                                                 
                                [c_3](x1) = [1] x1 + [0]         
                                                                 
                            [c_5](x1, x2) = [4] x1 + [1] x2 + [1]
    
    The order satisfies the following ordering constraints:
    
                                            [firstline#1(nil())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [nil()]                                                          
                                                                                                                                     
                                      [firstline#1(::(@x, @xs))] =  [0]                                                              
                                                                 ?  [4]                                                              
                                                                 =  [::(#abs(#0()), firstline(@xs))]                                 
                                                                                                                                     
                                                [#equal(@x, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#eq(@x, @y)]                                                    
                                                                                                                                     
                                       [#eq(#pos(@x), #pos(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#eq(@x, @y)]                                                    
                                                                                                                                     
                                           [#eq(#pos(@x), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                       [#eq(#pos(@x), #neg(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                             [#eq(nil(), nil())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#true()]                                                        
                                                                                                                                     
                                    [#eq(nil(), ::(@y_1, @y_2))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                    [#eq(::(@x_1, @x_2), nil())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                           [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]                         
                                                                                                                                     
                                           [#eq(#0(), #pos(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                               [#eq(#0(), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#true()]                                                        
                                                                                                                                     
                                           [#eq(#0(), #neg(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                             [#eq(#0(), #s(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                       [#eq(#neg(@x), #pos(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                           [#eq(#neg(@x), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                       [#eq(#neg(@x), #neg(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#eq(@x, @y)]                                                    
                                                                                                                                     
                                             [#eq(#s(@x), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                           [#eq(#s(@x), #s(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#eq(@x, @y)]                                                    
                                                                                                                                     
                                            [lcstable(@l1, @l2)] =  [0]                                                              
                                                                 ?  [3] @l2 + [0]                                                    
                                                                 =  [lcstable#1(@l1, @l2)]                                           
                                                                                                                                     
                                    [lcstable#3(nil(), @l2, @x)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [nil()]                                                          
                                                                                                                                     
                              [lcstable#3(::(@l, @ls), @l2, @x)] =  [0]                                                              
                                                                 ?  [1] @ls + [8]                                                    
                                                                 =  [::(newline(@x, @l, @l2), ::(@l, @ls))]                          
                                                                                                                                     
            [newline#7(#true(), @belowVal, @diagVal, @rightVal)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [+(@diagVal, #pos(#s(#0())))]                                    
                                                                                                                                     
           [newline#7(#false(), @belowVal, @diagVal, @rightVal)] =  [0]                                                              
                                                                 ?  [1]                                                              
                                                                 =  [max(@belowVal, @rightVal)]                                      
                                                                                                                                     
        [newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [newline#6(newline#7(#equal(@x, @y),                             
                                                                                         @belowVal,                                  
                                                                                         @diagVal,                                   
                                                                                         @rightVal),                                 
                                                                               @nl)]                                                 
                                                                                                                                     
                                                [right#1(nil())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#abs(#0())]                                                     
                                                                                                                                     
                                          [right#1(::(@x, @xs))] =  [0]                                                              
                                                                 ?  [1] @x + [0]                                                     
                                                                 =  [@x]                                                             
                                                                                                                                     
                                 [newline#2(nil(), @x, @xs, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [nil()]                                                          
                                                                                                                                     
             [newline#2(::(@belowVal, @lastline'), @x, @xs, @y)] =  [0]                                                              
                                                                 ?  [4] @belowVal + [0]                                              
                                                                 =  [newline#3(newline(@y, @lastline', @xs),                         
                                                                               @belowVal,                                            
                                                                               @lastline',                                           
                                                                               @x,                                                   
                                                                               @y)]                                                  
                                                                                                                                     
                                                 [firstline(@l)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [firstline#1(@l)]                                                
                                                                                                                                     
                                                  [#ckgt(#EQ())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                                  [#ckgt(#LT())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                                  [#ckgt(#GT())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#true()]                                                        
                                                                                                                                     
                                      [#add(#pos(#s(#0())), @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#succ(@y)]                                                      
                                                                                                                                     
                                    [#add(#pos(#s(#s(@x))), @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#succ(#add(#pos(#s(@x)), @y))]                                  
                                                                                                                                     
                                                [#add(#0(), @y)] =  [0]                                                              
                                                                 ?  [1] @y + [0]                                                     
                                                                 =  [@y]                                                             
                                                                                                                                     
                                      [#add(#neg(#s(#0())), @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pred(@y)]                                                      
                                                                                                                                     
                                    [#add(#neg(#s(#s(@x))), @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pred(#add(#pos(#s(@x)), @y))]                                  
                                                                                                                                     
                                        [#and(#true(), #true())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#true()]                                                        
                                                                                                                                     
                                       [#and(#true(), #false())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                       [#and(#false(), #true())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                      [#and(#false(), #false())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#false()]                                                       
                                                                                                                                     
                                  [#compare(#pos(@x), #pos(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#compare(@x, @y)]                                               
                                                                                                                                     
                                      [#compare(#pos(@x), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#GT()]                                                          
                                                                                                                                     
                                  [#compare(#pos(@x), #neg(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#GT()]                                                          
                                                                                                                                     
                                      [#compare(#0(), #pos(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#LT()]                                                          
                                                                                                                                     
                                          [#compare(#0(), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#EQ()]                                                          
                                                                                                                                     
                                      [#compare(#0(), #neg(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#GT()]                                                          
                                                                                                                                     
                                        [#compare(#0(), #s(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#LT()]                                                          
                                                                                                                                     
                                  [#compare(#neg(@x), #pos(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#LT()]                                                          
                                                                                                                                     
                                      [#compare(#neg(@x), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#LT()]                                                          
                                                                                                                                     
                                  [#compare(#neg(@x), #neg(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#compare(@y, @x)]                                               
                                                                                                                                     
                                        [#compare(#s(@x), #0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#GT()]                                                          
                                                                                                                                     
                                      [#compare(#s(@x), #s(@y))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#compare(@x, @y)]                                               
                                                                                                                                     
                                        [lcstable#1(nil(), @l2)] =  [3] @l2 + [0]                                                    
                                                                 ?  [4]                                                              
                                                                 =  [::(firstline(@l2), nil())]                                      
                                                                                                                                     
                                  [lcstable#1(::(@x, @xs), @l2)] =  [3] @l2 + [0]                                                    
                                                                 >= [0]                                                              
                                                                 =  [lcstable#2(lcstable(@xs, @l2), @l2, @x)]                        
                                                                                                                                     
                                              [#greater(@x, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#ckgt(#compare(@x, @y))]                                        
                                                                                                                                     
                                    [newline(@y, @lastline, @l)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [newline#1(@l, @lastline, @y)]                                   
                                                                                                                                     
      [newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y)] =  [1] @nl + [0]                                                    
                                                                 >= [0]                                                              
                                                                 =  [newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)]
                                                                                                                                     
                                                   [max(@a, @b)] =  [1]                                                              
                                                                 ?  [1] @a + [1] @b + [0]                                            
                                                                 =  [max#1(#greater(@a, @b), @a, @b)]                                
                                                                                                                                     
                                                     [right(@l)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [right#1(@l)]                                                    
                                                                                                                                     
                                        [max#1(#true(), @a, @b)] =  [1] @a + [1] @b + [0]                                            
                                                                 >= [1] @a + [0]                                                     
                                                                 =  [@a]                                                             
                                                                                                                                     
                                       [max#1(#false(), @a, @b)] =  [1] @a + [1] @b + [0]                                            
                                                                 >= [1] @b + [0]                                                     
                                                                 =  [@b]                                                             
                                                                                                                                     
                                                     [+(@x, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#add(@x, @y)]                                                   
                                                                                                                                     
                                           [#succ(#pos(#s(@x)))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pos(#s(#s(@x)))]                                               
                                                                                                                                     
                                                   [#succ(#0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pos(#s(#0()))]                                                 
                                                                                                                                     
                                         [#succ(#neg(#s(#0())))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#0()]                                                           
                                                                                                                                     
                                       [#succ(#neg(#s(#s(@x))))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#neg(#s(@x))]                                                   
                                                                                                                                     
                 [newline#3(@nl, @belowVal, @lastline', @x, @y)] =  [4] @belowVal + [0]                                              
                                                                 ?  [1] @nl + [0]                                                    
                                                                 =  [newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)]      
                                                                                                                                     
                                                [#abs(#pos(@x))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pos(@x)]                                                       
                                                                                                                                     
                                                    [#abs(#0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#0()]                                                           
                                                                                                                                     
                                                [#abs(#neg(@x))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pos(@x)]                                                       
                                                                                                                                     
                                                  [#abs(#s(@x))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pos(#s(@x))]                                                   
                                                                                                                                     
                                       [lcstable#2(@m, @l2, @x)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [lcstable#3(@m, @l2, @x)]                                        
                                                                                                                                     
                                         [#pred(#pos(#s(#0())))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#0()]                                                           
                                                                                                                                     
                                       [#pred(#pos(#s(#s(@x))))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#pos(#s(@x))]                                                   
                                                                                                                                     
                                                   [#pred(#0())] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#neg(#s(#0()))]                                                 
                                                                                                                                     
                                           [#pred(#neg(#s(@x)))] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [#neg(#s(#s(@x)))]                                               
                                                                                                                                     
                                         [newline#6(@elem, @nl)] =  [0]                                                              
                                                                 ?  [1] @nl + [4]                                                    
                                                                 =  [::(@elem, @nl)]                                                 
                                                                                                                                     
                               [newline#1(nil(), @lastline, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [nil()]                                                          
                                                                                                                                     
                         [newline#1(::(@x, @xs), @lastline, @y)] =  [0]                                                              
                                                                 >= [0]                                                              
                                                                 =  [newline#2(@lastline, @x, @xs, @y)]                              
                                                                                                                                     
                                          [lcstable^#(@l1, @l2)] =  [1] @l1 + [0]                                                    
                                                                 >= [1] @l1 + [0]                                                    
                                                                 =  [c_3(lcstable#1^#(@l1, @l2))]                                    
                                                                                                                                     
                                [lcstable#1^#(::(@x, @xs), @l2)] =  [1] @xs + [4]                                                    
                                                                 >  [1] @xs + [1]                                                    
                                                                 =  [c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),                  
                                                                         lcstable^#(@xs, @l2))]                                      
                                                                                                                                     
  
  We return to the main proof. Consider the set of all dependency
  pairs
  
  :
    { 1: lcstable#1^#(::(@x, @xs), @l2) ->
         c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
             lcstable^#(@xs, @l2))
    , 2: lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2)) }
  
  Processor 'matrix interpretation of dimension 1' induces the
  complexity certificate YES(?,O(n^1)) on application of dependency
  pairs {1}. These cover all (indirect) predecessors of dependency
  pairs {1,2}, their number of application is equally bounded. The
  dependency pairs are shifted into the weak component.
  
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(1)).
  
  Weak DPs:
    { lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
    , lcstable#1^#(::(@x, @xs), @l2) ->
      c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
          lcstable^#(@xs, @l2)) }
  Weak Trs:
    { firstline#1(nil()) -> nil()
    , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
    , lcstable#3(nil(), @l2, @x) -> nil()
    , lcstable#3(::(@l, @ls), @l2, @x) ->
      ::(newline(@x, @l, @l2), ::(@l, @ls))
    , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
      +(@diagVal, #pos(#s(#0())))
    , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
      max(@belowVal, @rightVal)
    , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
      newline#6(newline#7(#equal(@x, @y),
                          @belowVal,
                          @diagVal,
                          @rightVal),
                @nl)
    , right#1(nil()) -> #abs(#0())
    , right#1(::(@x, @xs)) -> @x
    , newline#2(nil(), @x, @xs, @y) -> nil()
    , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
      newline#3(newline(@y, @lastline', @xs),
                @belowVal,
                @lastline',
                @x,
                @y)
    , firstline(@l) -> firstline#1(@l)
    , #ckgt(#EQ()) -> #false()
    , #ckgt(#LT()) -> #false()
    , #ckgt(#GT()) -> #true()
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
    , lcstable#1(::(@x, @xs), @l2) ->
      lcstable#2(lcstable(@xs, @l2), @l2, @x)
    , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
    , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
    , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
      newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
    , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
    , right(@l) -> right#1(@l)
    , max#1(#true(), @a, @b) -> @a
    , max#1(#false(), @a, @b) -> @b
    , +(@x, @y) -> #add(@x, @y)
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
      newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#s(@x)) -> #pos(#s(@x))
    , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0()))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , newline#6(@elem, @nl) -> ::(@elem, @nl)
    , newline#1(nil(), @lastline, @y) -> nil()
    , newline#1(::(@x, @xs), @lastline, @y) ->
      newline#2(@lastline, @x, @xs, @y) }
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(1))
  
  The following weak DPs constitute a sub-graph of the DG that is
  closed under successors. The DPs are removed.
  
  { lcstable^#(@l1, @l2) -> c_3(lcstable#1^#(@l1, @l2))
  , lcstable#1^#(::(@x, @xs), @l2) ->
    c_5(lcstable#2^#(lcstable(@xs, @l2), @l2, @x),
        lcstable^#(@xs, @l2)) }
  
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(1)).
  
  Weak Trs:
    { firstline#1(nil()) -> nil()
    , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
    , lcstable#3(nil(), @l2, @x) -> nil()
    , lcstable#3(::(@l, @ls), @l2, @x) ->
      ::(newline(@x, @l, @l2), ::(@l, @ls))
    , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
      +(@diagVal, #pos(#s(#0())))
    , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
      max(@belowVal, @rightVal)
    , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
      newline#6(newline#7(#equal(@x, @y),
                          @belowVal,
                          @diagVal,
                          @rightVal),
                @nl)
    , right#1(nil()) -> #abs(#0())
    , right#1(::(@x, @xs)) -> @x
    , newline#2(nil(), @x, @xs, @y) -> nil()
    , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
      newline#3(newline(@y, @lastline', @xs),
                @belowVal,
                @lastline',
                @x,
                @y)
    , firstline(@l) -> firstline#1(@l)
    , #ckgt(#EQ()) -> #false()
    , #ckgt(#LT()) -> #false()
    , #ckgt(#GT()) -> #true()
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
    , lcstable#1(::(@x, @xs), @l2) ->
      lcstable#2(lcstable(@xs, @l2), @l2, @x)
    , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
    , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
    , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
      newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
    , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
    , right(@l) -> right#1(@l)
    , max#1(#true(), @a, @b) -> @a
    , max#1(#false(), @a, @b) -> @b
    , +(@x, @y) -> #add(@x, @y)
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
      newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#s(@x)) -> #pos(#s(@x))
    , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0()))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , newline#6(@elem, @nl) -> ::(@elem, @nl)
    , newline#1(nil(), @lastline, @y) -> nil()
    , newline#1(::(@x, @xs), @lastline, @y) ->
      newline#2(@lastline, @x, @xs, @y) }
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(1))
  
  No rule is usable, rules are removed from the input problem.
  
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(1)).
  
  Rules: Empty
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(1))
  
  Empty rules are trivially bounded

We return to the main proof.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^1)).

Strict DPs:
  { newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak DPs:
  { lcstable^#(@l1, @l2) -> lcstable#1^#(@l1, @l2)
  , lcstable#1^#(::(@x, @xs), @l2) -> lcstable^#(@xs, @l2)
  , lcstable#1^#(::(@x, @xs), @l2) ->
    lcstable#2^#(lcstable(@xs, @l2), @l2, @x)
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^1))

We use the processor 'matrix interpretation of dimension 1' to
orient following rules strictly.

DPs:
  { 2: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
       c_9(newline^#(@y, @lastline', @xs))
  , 3: newline#1^#(::(@x, @xs), @lastline, @y) ->
       c_11(newline#2^#(@lastline, @x, @xs, @y))
  , 4: lcstable^#(@l1, @l2) -> lcstable#1^#(@l1, @l2)
  , 5: lcstable#1^#(::(@x, @xs), @l2) -> lcstable^#(@xs, @l2)
  , 6: lcstable#1^#(::(@x, @xs), @l2) ->
       lcstable#2^#(lcstable(@xs, @l2), @l2, @x) }

Sub-proof:
----------
  The following argument positions are usable:
    Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_9) = {1},
    Uargs(c_10) = {1}, Uargs(c_11) = {1}
  
  TcT has computed the following constructor-based matrix
  interpretation satisfying not(EDA).
  
                      [firstline#1](x1) = [0]                  
                                                               
                       [#equal](x1, x2) = [0]                  
                                                               
                          [#eq](x1, x2) = [0]                  
                                                               
                     [lcstable](x1, x2) = [0]                  
                                                               
               [lcstable#3](x1, x2, x3) = [0]                  
                                                               
            [newline#7](x1, x2, x3, x4) = [0]                  
                                                               
                                [#true] = [0]                  
                                                               
    [newline#5](x1, x2, x3, x4, x5, x6) = [0]                  
                                                               
                          [right#1](x1) = [0]                  
                                                               
            [newline#2](x1, x2, x3, x4) = [0]                  
                                                               
                        [firstline](x1) = [0]                  
                                                               
                            [#ckgt](x1) = [0]                  
                                                               
                         [#add](x1, x2) = [0]                  
                                                               
                             [#pos](x1) = [0]                  
                                                               
                                  [#EQ] = [0]                  
                                                               
                         [#and](x1, x2) = [0]                  
                                                               
                     [#compare](x1, x2) = [0]                  
                                                               
                   [lcstable#1](x1, x2) = [3] x2 + [0]         
                                                               
                                  [nil] = [0]                  
                                                               
                     [#greater](x1, x2) = [0]                  
                                                               
                  [newline](x1, x2, x3) = [0]                  
                                                               
    [newline#4](x1, x2, x3, x4, x5, x6) = [4] x2 + [1] x4 + [0]
                                                               
                          [max](x1, x2) = [1]                  
                                                               
                            [right](x1) = [0]                  
                                                               
                               [#false] = [0]                  
                                                               
                           [::](x1, x2) = [1] x1 + [1] x2 + [7]
                                                               
                                  [#LT] = [0]                  
                                                               
                    [max#1](x1, x2, x3) = [1] x2 + [1] x3 + [0]
                                                               
                            [+](x1, x2) = [0]                  
                                                               
                            [#succ](x1) = [0]                  
                                                               
        [newline#3](x1, x2, x3, x4, x5) = [0]                  
                                                               
                                   [#0] = [0]                  
                                                               
                             [#neg](x1) = [0]                  
                                                               
                             [#abs](x1) = [0]                  
                                                               
               [lcstable#2](x1, x2, x3) = [0]                  
                                                               
                            [#pred](x1) = [0]                  
                                                               
                    [newline#6](x1, x2) = [0]                  
                                                               
                [newline#1](x1, x2, x3) = [0]                  
                                                               
                               [#s](x1) = [0]                  
                                                               
                                  [#GT] = [0]                  
                                                               
                   [lcstable^#](x1, x2) = [2] x1 + [7] x2 + [7]
                                                               
                 [lcstable#1^#](x1, x2) = [2] x1 + [7] x2 + [0]
                                                               
             [lcstable#3^#](x1, x2, x3) = [4] x2 + [4]         
                                                               
                [newline^#](x1, x2, x3) = [1] x3 + [1]         
                                                               
          [newline#2^#](x1, x2, x3, x4) = [1] x3 + [7]         
                                                               
             [lcstable#2^#](x1, x2, x3) = [7] x2 + [4]         
                                                               
              [newline#1^#](x1, x2, x3) = [1] x1 + [1]         
                                                               
                              [c_6](x1) = [4] x1 + [0]         
                                                               
                              [c_7](x1) = [1] x1 + [0]         
                                                               
                              [c_9](x1) = [1] x1 + [0]         
                                                               
                             [c_10](x1) = [1] x1 + [0]         
                                                               
                             [c_11](x1) = [1] x1 + [0]         
  
  The order satisfies the following ordering constraints:
  
                                          [firstline#1(nil())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
                                    [firstline#1(::(@x, @xs))] =  [0]                                                              
                                                               ?  [7]                                                              
                                                               =  [::(#abs(#0()), firstline(@xs))]                                 
                                                                                                                                   
                                              [#equal(@x, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                     [#eq(#pos(@x), #pos(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                         [#eq(#pos(@x), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#eq(#pos(@x), #neg(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                           [#eq(nil(), nil())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                  [#eq(nil(), ::(@y_1, @y_2))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                  [#eq(::(@x_1, @x_2), nil())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                         [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]                         
                                                                                                                                   
                                         [#eq(#0(), #pos(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                             [#eq(#0(), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                         [#eq(#0(), #neg(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                           [#eq(#0(), #s(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#eq(#neg(@x), #pos(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                         [#eq(#neg(@x), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#eq(#neg(@x), #neg(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                           [#eq(#s(@x), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                         [#eq(#s(@x), #s(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#eq(@x, @y)]                                                    
                                                                                                                                   
                                          [lcstable(@l1, @l2)] =  [0]                                                              
                                                               ?  [3] @l2 + [0]                                                    
                                                               =  [lcstable#1(@l1, @l2)]                                           
                                                                                                                                   
                                  [lcstable#3(nil(), @l2, @x)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
                            [lcstable#3(::(@l, @ls), @l2, @x)] =  [0]                                                              
                                                               ?  [1] @l + [1] @ls + [14]                                          
                                                               =  [::(newline(@x, @l, @l2), ::(@l, @ls))]                          
                                                                                                                                   
          [newline#7(#true(), @belowVal, @diagVal, @rightVal)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [+(@diagVal, #pos(#s(#0())))]                                    
                                                                                                                                   
         [newline#7(#false(), @belowVal, @diagVal, @rightVal)] =  [0]                                                              
                                                               ?  [1]                                                              
                                                               =  [max(@belowVal, @rightVal)]                                      
                                                                                                                                   
      [newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [newline#6(newline#7(#equal(@x, @y),                             
                                                                                       @belowVal,                                  
                                                                                       @diagVal,                                   
                                                                                       @rightVal),                                 
                                                                             @nl)]                                                 
                                                                                                                                   
                                              [right#1(nil())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#abs(#0())]                                                     
                                                                                                                                   
                                        [right#1(::(@x, @xs))] =  [0]                                                              
                                                               ?  [1] @x + [0]                                                     
                                                               =  [@x]                                                             
                                                                                                                                   
                               [newline#2(nil(), @x, @xs, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
           [newline#2(::(@belowVal, @lastline'), @x, @xs, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [newline#3(newline(@y, @lastline', @xs),                         
                                                                             @belowVal,                                            
                                                                             @lastline',                                           
                                                                             @x,                                                   
                                                                             @y)]                                                  
                                                                                                                                   
                                               [firstline(@l)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [firstline#1(@l)]                                                
                                                                                                                                   
                                                [#ckgt(#EQ())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                                [#ckgt(#LT())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                                [#ckgt(#GT())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                    [#add(#pos(#s(#0())), @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#succ(@y)]                                                      
                                                                                                                                   
                                  [#add(#pos(#s(#s(@x))), @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#succ(#add(#pos(#s(@x)), @y))]                                  
                                                                                                                                   
                                              [#add(#0(), @y)] =  [0]                                                              
                                                               ?  [1] @y + [0]                                                     
                                                               =  [@y]                                                             
                                                                                                                                   
                                    [#add(#neg(#s(#0())), @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pred(@y)]                                                      
                                                                                                                                   
                                  [#add(#neg(#s(#s(@x))), @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pred(#add(#pos(#s(@x)), @y))]                                  
                                                                                                                                   
                                      [#and(#true(), #true())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#true()]                                                        
                                                                                                                                   
                                     [#and(#true(), #false())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                     [#and(#false(), #true())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                    [#and(#false(), #false())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#false()]                                                       
                                                                                                                                   
                                [#compare(#pos(@x), #pos(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#compare(@x, @y)]                                               
                                                                                                                                   
                                    [#compare(#pos(@x), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                [#compare(#pos(@x), #neg(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                    [#compare(#0(), #pos(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                        [#compare(#0(), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#EQ()]                                                          
                                                                                                                                   
                                    [#compare(#0(), #neg(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                      [#compare(#0(), #s(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                [#compare(#neg(@x), #pos(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                    [#compare(#neg(@x), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#LT()]                                                          
                                                                                                                                   
                                [#compare(#neg(@x), #neg(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#compare(@y, @x)]                                               
                                                                                                                                   
                                      [#compare(#s(@x), #0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#GT()]                                                          
                                                                                                                                   
                                    [#compare(#s(@x), #s(@y))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#compare(@x, @y)]                                               
                                                                                                                                   
                                      [lcstable#1(nil(), @l2)] =  [3] @l2 + [0]                                                    
                                                               ?  [7]                                                              
                                                               =  [::(firstline(@l2), nil())]                                      
                                                                                                                                   
                                [lcstable#1(::(@x, @xs), @l2)] =  [3] @l2 + [0]                                                    
                                                               >= [0]                                                              
                                                               =  [lcstable#2(lcstable(@xs, @l2), @l2, @x)]                        
                                                                                                                                   
                                            [#greater(@x, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#ckgt(#compare(@x, @y))]                                        
                                                                                                                                   
                                  [newline(@y, @lastline, @l)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [newline#1(@l, @lastline, @y)]                                   
                                                                                                                                   
    [newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y)] =  [4] @belowVal + [1] @nl + [0]                                    
                                                               >= [0]                                                              
                                                               =  [newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)]
                                                                                                                                   
                                                 [max(@a, @b)] =  [1]                                                              
                                                               ?  [1] @a + [1] @b + [0]                                            
                                                               =  [max#1(#greater(@a, @b), @a, @b)]                                
                                                                                                                                   
                                                   [right(@l)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [right#1(@l)]                                                    
                                                                                                                                   
                                      [max#1(#true(), @a, @b)] =  [1] @a + [1] @b + [0]                                            
                                                               >= [1] @a + [0]                                                     
                                                               =  [@a]                                                             
                                                                                                                                   
                                     [max#1(#false(), @a, @b)] =  [1] @a + [1] @b + [0]                                            
                                                               >= [1] @b + [0]                                                     
                                                               =  [@b]                                                             
                                                                                                                                   
                                                   [+(@x, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#add(@x, @y)]                                                   
                                                                                                                                   
                                         [#succ(#pos(#s(@x)))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pos(#s(#s(@x)))]                                               
                                                                                                                                   
                                                 [#succ(#0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pos(#s(#0()))]                                                 
                                                                                                                                   
                                       [#succ(#neg(#s(#0())))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#0()]                                                           
                                                                                                                                   
                                     [#succ(#neg(#s(#s(@x))))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#neg(#s(@x))]                                                   
                                                                                                                                   
               [newline#3(@nl, @belowVal, @lastline', @x, @y)] =  [0]                                                              
                                                               ?  [4] @belowVal + [1] @nl + [0]                                    
                                                               =  [newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)]      
                                                                                                                                   
                                              [#abs(#pos(@x))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pos(@x)]                                                       
                                                                                                                                   
                                                  [#abs(#0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#0()]                                                           
                                                                                                                                   
                                              [#abs(#neg(@x))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pos(@x)]                                                       
                                                                                                                                   
                                                [#abs(#s(@x))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pos(#s(@x))]                                                   
                                                                                                                                   
                                     [lcstable#2(@m, @l2, @x)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [lcstable#3(@m, @l2, @x)]                                        
                                                                                                                                   
                                       [#pred(#pos(#s(#0())))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#0()]                                                           
                                                                                                                                   
                                     [#pred(#pos(#s(#s(@x))))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#pos(#s(@x))]                                                   
                                                                                                                                   
                                                 [#pred(#0())] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#neg(#s(#0()))]                                                 
                                                                                                                                   
                                         [#pred(#neg(#s(@x)))] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [#neg(#s(#s(@x)))]                                               
                                                                                                                                   
                                       [newline#6(@elem, @nl)] =  [0]                                                              
                                                               ?  [1] @nl + [1] @elem + [7]                                        
                                                               =  [::(@elem, @nl)]                                                 
                                                                                                                                   
                             [newline#1(nil(), @lastline, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [nil()]                                                          
                                                                                                                                   
                       [newline#1(::(@x, @xs), @lastline, @y)] =  [0]                                                              
                                                               >= [0]                                                              
                                                               =  [newline#2(@lastline, @x, @xs, @y)]                              
                                                                                                                                   
                                        [lcstable^#(@l1, @l2)] =  [2] @l1 + [7] @l2 + [7]                                          
                                                               >  [2] @l1 + [7] @l2 + [0]                                          
                                                               =  [lcstable#1^#(@l1, @l2)]                                         
                                                                                                                                   
                              [lcstable#1^#(::(@x, @xs), @l2)] =  [2] @x + [2] @xs + [7] @l2 + [14]                                
                                                               >  [2] @xs + [7] @l2 + [7]                                          
                                                               =  [lcstable^#(@xs, @l2)]                                           
                                                                                                                                   
                              [lcstable#1^#(::(@x, @xs), @l2)] =  [2] @x + [2] @xs + [7] @l2 + [14]                                
                                                               >  [7] @l2 + [4]                                                    
                                                               =  [lcstable#2^#(lcstable(@xs, @l2), @l2, @x)]                      
                                                                                                                                   
                          [lcstable#3^#(::(@l, @ls), @l2, @x)] =  [4] @l2 + [4]                                                    
                                                               >= [4] @l2 + [4]                                                    
                                                               =  [c_6(newline^#(@x, @l, @l2))]                                    
                                                                                                                                   
                                [newline^#(@y, @lastline, @l)] =  [1] @l + [1]                                                     
                                                               >= [1] @l + [1]                                                     
                                                               =  [c_7(newline#1^#(@l, @lastline, @y))]                            
                                                                                                                                   
         [newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y)] =  [1] @xs + [7]                                                    
                                                               >  [1] @xs + [1]                                                    
                                                               =  [c_9(newline^#(@y, @lastline', @xs))]                            
                                                                                                                                   
                                   [lcstable#2^#(@m, @l2, @x)] =  [7] @l2 + [4]                                                    
                                                               >= [4] @l2 + [4]                                                    
                                                               =  [c_10(lcstable#3^#(@m, @l2, @x))]                                
                                                                                                                                   
                     [newline#1^#(::(@x, @xs), @lastline, @y)] =  [1] @x + [1] @xs + [8]                                           
                                                               >  [1] @xs + [7]                                                    
                                                               =  [c_11(newline#2^#(@lastline, @x, @xs, @y))]                      
                                                                                                                                   

We return to the main proof. Consider the set of all dependency
pairs

:
  { 1: newline^#(@y, @lastline, @l) ->
       c_7(newline#1^#(@l, @lastline, @y))
  , 2: newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
       c_9(newline^#(@y, @lastline', @xs))
  , 3: newline#1^#(::(@x, @xs), @lastline, @y) ->
       c_11(newline#2^#(@lastline, @x, @xs, @y))
  , 4: lcstable^#(@l1, @l2) -> lcstable#1^#(@l1, @l2)
  , 5: lcstable#1^#(::(@x, @xs), @l2) -> lcstable^#(@xs, @l2)
  , 6: lcstable#1^#(::(@x, @xs), @l2) ->
       lcstable#2^#(lcstable(@xs, @l2), @l2, @x)
  , 7: lcstable#3^#(::(@l, @ls), @l2, @x) ->
       c_6(newline^#(@x, @l, @l2))
  , 8: lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x)) }

Processor 'matrix interpretation of dimension 1' induces the
complexity certificate YES(?,O(n^1)) on application of dependency
pairs {2,3,4,5,6}. These cover all (indirect) predecessors of
dependency pairs {1,2,3,4,5,6,7,8}, their number of application is
equally bounded. The dependency pairs are shifted into the weak
component.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(1)).

Weak DPs:
  { lcstable^#(@l1, @l2) -> lcstable#1^#(@l1, @l2)
  , lcstable#1^#(::(@x, @xs), @l2) -> lcstable^#(@xs, @l2)
  , lcstable#1^#(::(@x, @xs), @l2) ->
    lcstable#2^#(lcstable(@xs, @l2), @l2, @x)
  , lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
  , newline^#(@y, @lastline, @l) ->
    c_7(newline#1^#(@l, @lastline, @y))
  , newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
    c_9(newline^#(@y, @lastline', @xs))
  , lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
  , newline#1^#(::(@x, @xs), @lastline, @y) ->
    c_11(newline#2^#(@lastline, @x, @xs, @y)) }
Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(1))

The following weak DPs constitute a sub-graph of the DG that is
closed under successors. The DPs are removed.

{ lcstable^#(@l1, @l2) -> lcstable#1^#(@l1, @l2)
, lcstable#1^#(::(@x, @xs), @l2) -> lcstable^#(@xs, @l2)
, lcstable#1^#(::(@x, @xs), @l2) ->
  lcstable#2^#(lcstable(@xs, @l2), @l2, @x)
, lcstable#3^#(::(@l, @ls), @l2, @x) -> c_6(newline^#(@x, @l, @l2))
, newline^#(@y, @lastline, @l) ->
  c_7(newline#1^#(@l, @lastline, @y))
, newline#2^#(::(@belowVal, @lastline'), @x, @xs, @y) ->
  c_9(newline^#(@y, @lastline', @xs))
, lcstable#2^#(@m, @l2, @x) -> c_10(lcstable#3^#(@m, @l2, @x))
, newline#1^#(::(@x, @xs), @lastline, @y) ->
  c_11(newline#2^#(@lastline, @x, @xs, @y)) }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(1)).

Weak Trs:
  { firstline#1(nil()) -> nil()
  , firstline#1(::(@x, @xs)) -> ::(#abs(#0()), firstline(@xs))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , lcstable(@l1, @l2) -> lcstable#1(@l1, @l2)
  , lcstable#3(nil(), @l2, @x) -> nil()
  , lcstable#3(::(@l, @ls), @l2, @x) ->
    ::(newline(@x, @l, @l2), ::(@l, @ls))
  , newline#7(#true(), @belowVal, @diagVal, @rightVal) ->
    +(@diagVal, #pos(#s(#0())))
  , newline#7(#false(), @belowVal, @diagVal, @rightVal) ->
    max(@belowVal, @rightVal)
  , newline#5(@diagVal, @belowVal, @nl, @rightVal, @x, @y) ->
    newline#6(newline#7(#equal(@x, @y),
                        @belowVal,
                        @diagVal,
                        @rightVal),
              @nl)
  , right#1(nil()) -> #abs(#0())
  , right#1(::(@x, @xs)) -> @x
  , newline#2(nil(), @x, @xs, @y) -> nil()
  , newline#2(::(@belowVal, @lastline'), @x, @xs, @y) ->
    newline#3(newline(@y, @lastline', @xs),
              @belowVal,
              @lastline',
              @x,
              @y)
  , firstline(@l) -> firstline#1(@l)
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , lcstable#1(nil(), @l2) -> ::(firstline(@l2), nil())
  , lcstable#1(::(@x, @xs), @l2) ->
    lcstable#2(lcstable(@xs, @l2), @l2, @x)
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , newline(@y, @lastline, @l) -> newline#1(@l, @lastline, @y)
  , newline#4(@rightVal, @belowVal, @lastline', @nl, @x, @y) ->
    newline#5(right(@lastline'), @belowVal, @nl, @rightVal, @x, @y)
  , max(@a, @b) -> max#1(#greater(@a, @b), @a, @b)
  , right(@l) -> right#1(@l)
  , max#1(#true(), @a, @b) -> @a
  , max#1(#false(), @a, @b) -> @b
  , +(@x, @y) -> #add(@x, @y)
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , newline#3(@nl, @belowVal, @lastline', @x, @y) ->
    newline#4(right(@nl), @belowVal, @lastline', @nl, @x, @y)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#s(@x)) -> #pos(#s(@x))
  , lcstable#2(@m, @l2, @x) -> lcstable#3(@m, @l2, @x)
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0()))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , newline#6(@elem, @nl) -> ::(@elem, @nl)
  , newline#1(nil(), @lastline, @y) -> nil()
  , newline#1(::(@x, @xs), @lastline, @y) ->
    newline#2(@lastline, @x, @xs, @y) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(1))

No rule is usable, rules are removed from the input problem.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(1)).

Rules: Empty
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(1))

Empty rules are trivially bounded

Hurray, we answered YES(O(1),O(n^2))