What is Euclid?
Euclid is a programming language trying
to merge two different programming paradigms: (constraint)
logic programming and algebraic manipulation packages.
Its syntax is close to that of any CLP system but it offers
many more (mathematically-oriented) data structures and
domains of computation than a standard CLP system. Among
these data structures are reals, real intervals, real
symbolic functions and vectors as well as user-defined
structures containg domain constructs.
The purpose of Euclid is to offer a schema
under which knowledge that uses mathematics can be easily
represented (i.e. mathematical models in physics, economics
or engineering). The system is intended mainly for problem
solving; the main difference with standard CLP systems
is that it prefers hard calculations (like differential
equations or equations with functions) to a great number
of simple ones (like the simplex method dealing with real
equalities/inequalities).
Theoretically Euclid is an instance of
the Domain Logic Programming Scheme, a multi-domain
extension to (constraint) logic programming. Formal correctness
and (possible) completeness can be proven in that scheme.
A prototype
currently exists running on a Sparc under SunOS UNIX.
Why is Euclid here?
Euclid has been developed in order to
fill a gap in current programming systems. Its main aim
was to allow for easy representation of knowledge for
situations or systems that rely on mathematical models.
These systems are encountered in physics, economics, engineering
and in general under any discipline using mathematics
as a description language. Symbolic functions offer an
easy way to represent continuous change and vectors a
collective way of representing complex information.
Current (constraint) logic programming
systems offer limited facilities for symbolic manipulation
in mathematics and algebraic manipulation packages do
not offer proper programming capabilities. This is the
gap that Euclid is trying to bridge.
Euclid is based on the following scheme:
Euclid = LOGIC + MATHEMATICAL KNOWLEDGE + CONTROL
in direct accordance with R. Kowalski's view
of Prolog. Mathematical constraints are used to
describe situations (parts of the mathematical model) and
logic to define when constraints apply.