BNR Prolog, also known as CLP(BNR) is a declarative constraint logic programming language based on relational interval arithmetic developed at Bell-Northern Research in the 1980s and 1990s. Embedding relational interval arithmetic in a logic programming language differs from other constraint logic programming (CLP) systems like CLP(R) or Prolog-III in that it does not perform any symbolic processing. BNR Prolog was the first such implementation of interval arithmetic in a logic programming language. Since the constraint propagation is performed on real interval values, it is possible to express and partially solve non-linear equations.

Example rule

The simultaneous equations:

BNR Prolog

are expressed in CLP(BNR) as:

BNR Prolog

?- { X>=0,Y>=0, tan(X)==Y, X**2 + Y**2 == 5}.

BNR Prolog

and a typical implementation's response would be:

X = _58::real(1.0966681287054703,1.0966681287054718), Y = _106::real(1.9486710896099515,1.9486710896099542).

Yes

References

J. G. Cleary, "Logical Arithmetic", Future Computing Systems, Vol 2, No 2, pp. 125–149, 1987. W. Older and A. Vellino, "Extending Prolog with Constraint Arithmetic on Real Intervals", in Proc. of the Canadian Conf. on Electrical and Computer Engineering, 1990. Older, W., and Benhamou, F., Programming in CLP(BNR), in: 1st Workshop on Principles and Practice of Constraint Programming, 1993.

External links

GitHub site for a 2018 re-implementation in SWI-Prolog

Declarative programming languages

Constraint programming

Logic programming

Constraint logic programming

Prolog programming language family