PUBS: A Practical Upper Bounds Solver

*********************************Result************************************
Upper Bound of lineMult(A,B,C) is nat(B)+1

Upper Bound of computeLine(A,B,C,D) is nat(B)*nat(C)+2*nat(B)+1

Upper Bound of matrixMult(A,B,C,D) is nat(A)*nat(C)*nat(D)+2*nat(A)*nat(C)+2*nat(A)+1

*******************************RAML Output*********************************
The number of ticks consumed by lineMult is at most:
          n + 1.0
where
   n is the length of the second component of the input
   m is the length of the third component of the input

The number of ticks consumed by computeLine is at most:
          m*x + 2.0*n + 1.0
where
   n is the length of the first component of the input
   m is the length of the second component of the input
   x is the length of the elements of the second component of the input
   y is the length of the third component of the input

The number of ticks consumed by matrixMult is at most:
          x*y*n + 2.0*n*m + 2.0*n + 1.0
where
   n is the length of the first component of the input
   m is the length of the elements of the first component of the input
   x is the length of the second component of the input
   y is the length of the elements of the second component of the input