Release Notes for LISA 2.0

The LISA Project

19 December, 2002

Release 2.0.3, a bug-fix release that corrects a problem with queries. Thanks to Push Singh for the report. For Allegro users, there’s also a sample RPC applications that illustrates reasoning with remote objects. Look in the “misc” folder for details.

10 December, 2002

Release 2.0.2, another bug-fix release that introduces a proper fix for the incomplete fix found in 2.0.1. The caveat regarding RESET no longer applies. Sigh… I apologize for this; there are a number of large trees sitting in my home, placed there by our recent ice storm, and I should have known better than to make a release under these circumstances.

9 December, 2002

Release 2.0.1, a bug-fix release to correct a problem reported in the Rete network that prevented rules such as the following from activating:

(defrule frodo ()
  (?a (relation))
  (?b (relation))
  (test (not (eq ?a ?b)))
  =>)

As a consequence, there's a semantic change. If the first two patterns of a rule have the same class (i.e. are matching the same template or class name), then a RESET must  have been issued prior to running the engine.

9 December, 2002

The first production release for LISA 2.0. One major new feature, and some small enhancements:

25 November, 2002

The third beta release for 2.0 further extends LISA's capabilities. New to this version:

Unless bugs are reported, 2.0b3 will be released again as the official 2.0 production version, probably with an additional experimental feature yet to be revealed. See the Reference Guide for details on the new features.

18 November, 2002

The second beta release for 2.0, 2.0b2, offers a number of significant enhancements. Some of these might break existing code:

I hope I've remembered everything. This will likely be LISA's last beta before the official 2.0 production release. In the interim, I'll probably begin writing a document describing LISA's implementation of the Rete algorithm, for posterity if nothing else.

6 November, 2002

LISA 2.0's first beta release, 2.0b1. This version introduces LISA's notion of truth maintenance, implemented via the new LOGICAL conditional element. The reference guide contains details.

4 November, 2002

Alpha release five. This version introduces the OR conditional element, along with some improvements to the LISA debugger. The reference guide in the distribution contains details.

28 October, 2002

Alpha release four. This version introduces the LISA debugger, a simple monitoring and inspection facility for production rules. There is documentation for this feature in the 2.0 reference guide. Well, it's actually the 1.x guide with debugger documentation grafted in. I haven't yet gone through the document and updated it for the rest of 2.0.

20 October, 2002

This is the third alpha release for LISA version 2.0, following closely on the heels of 2.0a2 because I had a bit more time than anticipated to spend on it. The last remaining missing 1.x features have been added; these are 1) a basic watch mechanism; and 2) embedded rule definitions (i.e. DEFRULE forms on rule RHSs). The 2.0 branch remains a much improved implementation over 1.x, and should offer a solid foundation for any future LISA development.

17 October, 2002

This is the second alpha release for LISA version 2.0. Rule redefinition and queries are now in place, with improved performance and efficiency. In the case of rule redefinition, or rule insertion into a "live" engine, LISA now builds a "mini Rete network" for the new rule and grafts it into the larger network. Also new are rewritten ASSERT and MODIFY macros, allowing code similar to the following:

(let ((?age 1000))

  (modify ?fact (age ?age) (name (make-a-name))))

In other words, ASSERT and MODIFY should now respond better to their lexical environments.

1 October, 2002

This is the first alpha release for LISA version 2.0, representing a significant improvement over the 1.x branch. At the core of 2.0 is a ground-up rewrite of LISA's Rete algorithm. While CLOS still forms the basic structure of the algorithm, 2.0 makes extensive use of closures and function objects, yielding a more "lispy" feel to the implementation. The second significant departure from 1.x is a redesigned language parser, with particular attention paid to the analysis of DEFRULE forms. While the 1.x parser performs multi-pass transformations over DEFRULEs, the new parser is a single-pass implementation that collects more structural information "up-front" before sending the output to the Rete compiler.

By incorporating the algorithmic and parsing changes mentioned above, a significant amount of code has been eliminated from 2.0. In particular, the entire 1.x binding mechanism, used to establish variable bindings in production rules and support rule firings, has been replaced by closures. Closures also form the basis of various types of intra- and inter-pattern node tests, making possible a reduction in the number of classes required to implement nodes in the Rete network. These two changes alone make for a dramatic improvement in code readability, simplicity, and application performance.

Some features present in 1.x have not yet been adapted to 2.0. These are:

  1. Rule redefinition, including runtime rule creation (i.e. DEFRULE forms on rule RHSs).
  2. Query support.
  3. Debugging support, including watches.

This first alpha release is intended to give developers a chance to try their rule sets with the new algorithm and parser, and expose any remaining bugs. LISA 2.0 is able to successfully run the sample MAB problems included in the distribution, but exposure to other rule sets is vital to ensuring the stability of forthcoming releases.

Version 2.0 contains its own DEFSYSTEM file, lisa2.system. Building 2.0 is very similar to how one builds 1.x; the system name is LISA2 rather than LISA. So, something like (mk:compile-system :lisa2) should work for you. The 2.0 code base is kept separate from 1.x; you'll notice two new directories in the source tree; 2.0-core contains the core system files, rete/reference contains those files strictly associated with the 2.0 Rete implementation.

This alpha version of 2.0 has been tested with ACL 6.2 and CLISP 2.29, both on Windows 2000.