:- true pred prefix_sum(_1,_2)
         : ( list(_1,num), var(_2) )
        => ( numlist(_1), numlist(_2), length(_1,_A) )
         + cost(ub,steps,2.0*_A**2+15.0*_A+20.0).

:- true pred prefix_sum_(_1,_A,_B)
         : ( nnegint(_1), numlist(_A), var(_B) )
        => ( nnegint(_1), numlist(_A), numlist(_B), length(_A,_C) )
         + cost(ub,steps,2.0*_C**2+11.0*_C+9.0).

:- true pred prefix_sum_(_1,_A,_B)
         : ( num(_1), list(_A,num), var(_B) )
        => ( num(_1), numlist(_A), numlist(_B), length(_A,_C) )
         + cost(ub,steps,2.0*(_C+1)**2+7.0*_C+7.0).

:- true pred listnum(_A)
         : list(_A,num)
        => ( numlist(_A), length(_A,_B) )
         + cost(ub,steps,2*_B+1).

:- true pred listnum([_A|_B])
         : ( num(_A), list(_B,num) )
        => ( num(_A), numlist(_B), length(_B,_C) )
         + cost(ub,steps,2*_C+3).

:- true pred listnum([])
         + cost(ub,steps,1).