Common Lisp Reasoner

Introduction

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:

A portable extension of the Common Lisp Object System (CLOS)

The Assumption-Based Truth-Maintenance System (ATMS) of de Kleer

A rule language comprising non-directional constraints as well as
unidirectional rules

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 nodea
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.

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.

Source code may be downloaded via the project page. Before
downloading, consult the release notes to determine compatibility with your
Common Lisp implementation of choice.

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.