ECLiPSe

Last updated
ECLiPSe Constraint Logic Programming System
Developer(s) European Computer‐Industry Research Centre (ECRC), Munich
Centre for Planning and Resource Control, Imperial College London (IC-Parc)
Cisco Systems
Initial release1992;31 years ago (1992)
Stable release
7.0 / January 22, 2018;5 years ago (2018-01-22)
Written in C, Prolog
Operating system Cross-platform
Available inEnglish
Type Constraint logic programming
License Mozilla Public (MPL)
Website eclipseclp.org

ECLiPSe is a software system for the development and deployment of constraint logic programming applications, e.g., in the areas of optimization, planning, scheduling, resource allocation, timetabling, transport, etc. It is also suited for teaching most aspects of combinatorial problem solving, e.g., problem modeling, constraint programming, mathematical programming, and search techniques. [1] It contains constraint solver libraries, a high-level modeling and control language (a superset of Prolog), interfaces to third-party solvers, an integrated development environment and interfaces for embedding into host environments.

Contents

ECLiPSe was developed until 1995 at the European Computer‐Industry Research Centre (ECRC) in Munich, and then until 2005 at the Centre for Planning and Resource Control at Imperial College London (IC-Parc). It was purchased by Cisco Systems. In September 2006, it was released as open source software under an equivalent of the Mozilla Public License, and is now hosted on SourceForge.

Language

The ECLiPSe language [2] is largely backward-compatible with Prolog and supports different dialects, including ISO Prolog. Due to being declarative, it can be used both as a modelling language to describe problems, and as a general purpose programming language.

Beyond the basic Prolog data types, the following are available: strings, unlimited precision integer and rational numbers, and floating point intervals. Array syntax and structures with field names are also supported and especially useful in constraint modelling.

A logical iteration construct [3] eliminates the need for most simple recursion patterns.

ECLiPSe provides comprehensive facilities [2] to implement data-driven control behaviour. These include declarative delay-clauses as well as primitives for meta-programmed control like explicit goal suspension, flexible triggering facilities and execution priorities. Together with the attributed variable data type, this is the key to many extensions to the basic logic programming language, including all constraint-based functionality. The system calls user-definable event handlers when it encounters attributed variables in certain contexts, e.g. unification.

The module system controls the visibility of predicates, non-logical stores, source transformations and syntax settings. Module interfaces can be extended and restricted, and modules written in different language dialects can be mixed within one application.

Programs may contain structured comments from which reference documentation can be generated.

Libraries

ECLiPSe provides several libraries of constraint solvers which can be used in application programs:

Arithmetic constraints over finite domains, finite set constraints, generalized propagation, interval reasoning over non-linear constraints, interfaces to external simplex solvers, constraint handling rules (CHR) and more.

Other libraries implement search methods like branch-and-bound, repair-based search, limited discrepancy search.

ECLiPSe interfaces to external solvers, in particular the COIN-OR, CPLEX, Gurobi, and Xpress-MP linear and mixed-integer programming solvers, [4] and the Gecode solver library.

Compatibility libraries for ISO Prolog [5] and other Prolog dialects (C-Prolog, Quintus, SICStus, SWI-Prolog) enable the reuse of libraries written in those dialects.

Other utility libraries, including a number of popular public domain ones, are included in the distribution.

System architecture

The system includes an incremental compiler which translates source code into virtual machine code. The compiler optimizes index selection, unification order, inlining of control constructs and can take mode information into account.

The runtime system implements the virtual machine, automatic memory management with garbage collection of stacks and dictionary, event handling and data-driven execution. Versions of ECLiPSe implement OR-parallelism.

ECLiPSe components can be integrated into software via a low-level C or C++ interface, or via high-level interfaces to Java and Tcl.

Related Research Articles

Logic programming is a programming, database and knowledge-representation and reasoning paradigm which is based on formal logic. A program, database or knowledge base in a logic programming language is a set of sentences in logical form, expressing facts and rules about some problem domain. Major logic programming language families include Prolog, Answer Set Programming (ASP) and Datalog. In all of these languages, rules are written in the form of clauses:

Mercury is a functional logic programming language made for real-world uses. The first version was developed at the University of Melbourne, Computer Science department, by Fergus Henderson, Thomas Conway, and Zoltan Somogyi, under Somogyi's supervision, and released on April 8, 1995.

Prolog is a logic programming language that has its origins in artificial intelligence and computational linguistics.

Constraint programming (CP) is a paradigm for solving combinatorial problems that draws on a wide range of techniques from artificial intelligence, computer science, and operations research. In constraint programming, users declaratively state the constraints on the feasible solutions for a set of decision variables. Constraints differ from the common primitives of imperative programming languages in that they do not specify a step or sequence of steps to execute, but rather the properties of a solution to be found. In addition to constraints, users also need to specify a method to solve these constraints. This typically draws upon standard methods like chronological backtracking and constraint propagation, but may use customized code like a problem-specific branching heuristic.

In computer science, declarative programming is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow.

Software design is the process by which an agent creates a specification of a software artifact intended to accomplish goals, using a set of primitive components and subject to constraints. The term is sometimes used broadly to refer to "all the activity involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying" the software, or more specifically "the activity following requirements specification and before programming, as ... [in] a stylized software engineering process."

Programming languages can be grouped by the number and types of paradigms supported.

In artificial intelligence and operations research, constraint satisfaction is the process of finding a solution through a set of constraints that impose conditions that the variables must satisfy. A solution is therefore an assignment of values to the variables that satisfies all constraints—that is, a point in the feasible region.

ISO 10303-22 is a part of the implementation methods of STEP with the official title Standard data access interface or simply SDAI.

SWI-Prolog is a free implementation of the programming language Prolog, commonly used for teaching and semantic web applications. It has a rich set of features, libraries for constraint logic programming, multithreading, unit testing, GUI, interfacing to Java, ODBC and others, literate programming, a web server, SGML, RDF, RDFS, developer tools, and extensive documentation.

XSB is the name of a dialect of the Prolog programming language and its implementation developed at Stony Brook University in collaboration with the Katholieke Universiteit Leuven, the New University of Lisbon, Uppsala University and software vendor XSB, Inc.

Logtalk is an object-oriented logic programming language that extends and leverages the Prolog language with a feature set suitable for programming in the large. It provides support for encapsulation and data hiding, separation of concerns and enhanced code reuse. Logtalk uses standard Prolog syntax with the addition of a few operators and directives.

The following Comparison of Prolog implementations provides a reference for the relative feature sets and performance of different implementations of the Prolog computer programming language. A comprehensive discussion of the most significant Prolog systems is presented in an article published in the 50-years of Prolog anniversary issue of the journal Theory and Practice of Logic Programming (TPLP)..

Gecode is a software library for solving Constraint satisfaction problems. It is programmed in C++ and distributed as free software under the permissive MIT license. Gecode has bindings for several programming languages such as Prolog, Python and Ruby, and an interface to the AMPL modeling language.

Modula-2 is a structured, procedural programming language developed between 1977 and 1985/8 by Niklaus Wirth at ETH Zurich. It was created as the language for the operating system and application software of the Lilith personal workstation. It was later used for programming outside the context of the Lilith.

In information technology a reasoning system is a software system that generates conclusions from available knowledge using logical techniques such as deduction and induction. Reasoning systems play an important role in the implementation of artificial intelligence and knowledge-based systems.

<span class="mw-page-title-main">Ciao (programming language)</span>

Ciao is a general-purpose programming language which supports logic, constraint, functional, higher-order, and object-oriented programming styles. Its main design objectives are high expressive power, extensibility, safety, reliability, and efficient execution.

GOLOG is a high-level logic programming language for the specification and execution of complex actions in dynamical domains. It is based on the situation calculus. It is a first-order logical language for reasoning about action and change. GOLOG was developed at the University of Toronto.

References

  1. "ECLiPSe Web Site". eclipseclp.org.
  2. 1 2 Schimpf, Joachim; Shen, Kish (2012). "ECLiPSe - from LP to CLP". Theory and Practice of Logic Programming. 12 (1–2): 127–156. arXiv: 1012.4240 . doi:10.1017/S1471068411000469. S2CID   11827081.
  3. Schimpf, Joachim (1 August 2002). Logical Loops (PDF). Logic Programming, 18th International Conference, ICLP 2002, Copenhagen, Denmark, July 29 - August 1, 2002 Proceedings: Springer-Verlag. pp. 224–238. ISBN   978-3-540-45619-3.{{cite book}}: CS1 maint: location (link)
  4. Shen, K.; Schimpf, J. (2005). "Eplex: Harnessing Mathematical Programming Solvers for Constraint Logic Programming". Principles and Practice of Constraint Programming - CP 2005. Lecture Notes in Computer Science. Vol. 3709. Principles and Practice of Constraint Programming - CP 2005: 11th International Conference, CP 2005, Sitges: Springer. pp. 622–636. doi:10.1007/11564751_46. ISBN   978-3-540-32050-0.{{cite book}}: CS1 maint: location (link)
  5. "ECLiPSe ISO conformity declaration". eclipseclp.org.