:- true pred bst_member(_A,_B)
         : ( num(_A), bin_tree(_B) )
        => ( num(_A), bin_tree(_B), depth(_B,_C) )
         + cost(ub,steps,1.5*(_C+1)**2+1.5*2**(_C+2)+3*2**(_C+1)+10.5*_C+18.5).

:- true pred 'bst_member$pre'(_A)
         : bin_tree(_A)
        => ( bin_tree(_A), depth(_A,_B) )
         + cost(ub,steps,3*2**(_B+1)+3*_B+10).

:- true pred bst(_A)
         : bin_tree(_A)
        => ( bin_tree(_A), depth(_A,_B) )
         + cost(ub,steps,3*2**(_B+1)+3*_B+6).

:- true pred min_(_A,_B)
         : ( bin_tree(_A), var(_B) )
        => ( bin_tree(_A), num(_B), depth(_A,_C) )
         + cost(ub,steps,_C+3).

:- true pred max_(_A,_B)
         : ( bin_tree(_A), var(_B) )
        => ( bin_tree(_A), num(_B), depth(_A,_C) )
         + cost(ub,steps,_C+3).

:- true pred bst_(_A,_1,_2)
         : ( bin_tree(_A), num(_1), num(_2) )
        => ( bin_tree(_A), num(_1), num(_2), depth(_A,_B) )
         + cost(ub,steps,2**(_B+2)-1.0).