:- true pred mmultiply(_A,_B,_C)
         : ( nlilist(_A), nlilist(_B), var(_C) )
        => ( nlilist(_A), nlilist(_B), nlilist(_C), rsize(_A,nlilist(_D,_E,nlist(_F,_G,num(_H,_I)))), rsize(_B,nlilist(_J,_K,nlist(_L,_M,num(_N,_O)))) )
         + cost(ub,steps,_G*_E*_K-_G*_E-_G*_K+_G+2*(_E*_K)-2*_K+1).

:- true pred multiply(_A,_1,_B)
         : ( nlilist(_A), nlist(_1), var(_B) )
        => ( nlilist(_A), nlist(_1), nlist(_B), rsize(_A,nlilist(_C,_D,nlist(_E,_F,num(_G,_H)))), rsize(_1,nlist(_I,_J,num(_K,_L))) )
         + cost(ub,steps,_D*_J+2*_D-_J-1).

:- true pred vmul(_A,_B,Result)
         : ( nlist(_A), nlist(_B), var(Result) )
        => ( nlist(_A), nlist(_B), num(Result), rsize(_B,nlist(_C,_D,num(_E,_F))) )
         + cost(ub,steps,_D+1).