:- true pred prefix_sum(_1,_2)
         : ( list(_1,num), var(_2) )
        => ( list(_1,num), list(_2,num), length(_1,_A) )
         + cost(ub,steps,3*_A+7).

:- true pred prefix_sum_(_1,_A,_B)
         : ( rt7(_1), list(_A,num), var(_B) )
        => ( nnegint(_1), list(_A,num), list(_B,num), length(_A,_C) )
         + cost(ub,steps,_C+1).

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

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

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