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

```