The Common Lisp Reasoner project aims to create a practical technology that exploits the synergy between its three major components to make AI-related applications, such as scheduling and diagnosis, easier to develop. These components are:

Because CLOS permits, by means of the Metaobject Protocol, open-ended extension, it is both the implementation language and the kernel of the implemented system, within which a set of sound principles appropriate to the practice of knowledge representation rather than programming have been realized.

In reasoning applications, the values stored into the slots of an instance (the data to be reasoned with) are accumulated rather than replaced. Permitted values are specified in the class of the instance. They are either other instances, or enumerated ranges of (mutually exclusive) values that may subsequently be narrowed by reasoning activity.

Each stored value is encapsulated in an ATMS node—a record not only of the value, but also its justification (derivation) and the resultant belief states (or environments), determined by the ATMS, in which it holds. An environment is given by a set of primitive assumptions; an assumption constitutes an explicit, problem-specific decision to assume some datum or data. The ATMS enables environments to be explored systematically and efficiently. Contradictions are isolated and recorded as nogoods.

The rule language permits the expression of arbitrarily complex logical sentences. The slot definitions of classes collectively constitute a vocabulary of attributes that can be referred to in rule definitions. When reasoning, classes and instances provide an efficient means of retrieving rules and the data upon which they operate.

Stratification Diagram

Latest Features

RDF and OWL. Earlier XML serialization and deserialization capabilities have been extended to support RDF/XML. Features have been added (primarily automatically-generated rules) to offer limited support for OWL ontologies.

Parallelism. The rule matching cycle has been redesigned to work in parallel. Parallelism is enabled when used in conjunction with Lisp in Parallel.

Historical Note

The design outlined above was conceived in relation to the development of legal reasoning applications, in order to meet some exacting requirements: to capture the explicit and implicit exceptions inherent in legal language, to accommodate conflicting rules which give rise to competing arguments, and to derive all inferences sanctioned by a logical sentence by restricting the values of attributes.


The source code has been tested in Allegro, CLISP, ECL, LispWorks and SBCL. Further compatibility information may be found in the release notes.