Availability::- use_module(library(clpBNR)).
 absolve(X:numeric_List) is semidet
Succeeds if a if X is a numeric (or list of numeric); otherwise fails. absolve is intended solely to trim up the boundaries of what is essentially a single (non-point) solution to a problem. The strategy used is to work in from the edges of the interval ("nibbling away") at subdomains which are inconsistent until you cannot go farther, then reduce step size and resume nibbling. In this case, the the environment flag clpBNR_default_precision is used to specify the number of step size reductions to apply; the initial step size is half the interval width.

absolve can be used to further narrow intervals after solve to "sharpen" the result; example:

?- X::real,{X**4-4*X**3+4*X**2-4*X+3==0},solve(X).
X:: 1.000000... ;
X:: 1.0000000... ;
X:: 3.000000... ;
X:: 3.000000... ;
false.

?- X::real,{X**4-4*X**3+4*X**2-4*X+3==0},solve(X),absolve(X).
X:: 1.00000000... ;
X:: 3.00000000... ;
false.