I kludged a quick sort-of inference engine which I will use with
my blips lisp general user interface. Omitting the engine itself,
the facts of a nondeterministic graph search are as follows:
```
(defclass fact () ())
(defmethod combine ((a fact) (b fact)) (Values))
(defclass box (fact) ())
(defclass edge (fact) ((from-here :type 'box :initarg :from-here
                                 :reader from-here)
                      (to-here :type 'box :initarg :to-here
                               :reader to-here)))
(defclass connexion (edge) ())
(defmethod combine ((box box) (edge edge))
(and (eq (from-here edge) box)
     (not typep edge 'connexion)
     (make-instance 'connexion :from-here box
                               :to-here (to-here edge))))
(defmethod combine ((c1 connexion) (c2 connexion))
(when (eq (to-here c1) (from-here c2))
 (make-instance 'connexion :from-here (from-here c1)
                           :to-here (to-here c2))))
```
Now in using blips, I often want to make a qt (quad + text class)
clickable (also a class.).
```
(defvar *qt* (make-instance 'blips:qt))
;;...
(defclass cqt (blips:clickable blips:qt) ())
(change-class *qt* 'cqt)
```
In the same spirit I can
```
(defclass bcqt (box blips:cqt) ())
(change-class *qt* 'bcqt)
;;and maybe
(defclass eline (edge blips:line) ())
```
to be used in a nondeterministic search.
I find this to be a reasonable computational calculus for my
wants. Perhaps it is less important for languages and tasks that
either are not compiled, or are often recompiled and restarted,
which is not how I prefer to work.
Last time I was using *prolog*, I stopped. I had thought to
use prolog to express an obviously logically coherent graph search
static optimization. After reflecting on the beauty of the
definition of append/3, I found I could express what I wanted
more coherently and conveniently through a purpose built common
lisp macro DSL, while I could sketch my proofs with ACL2's
deftheorem. I can see prolog being used like I had intended in the
80s. Its neglect does not make it bad, but then, I neglected it as
well.
; Aside: Flurry of activity around ACL2? But did they get rid of
; that hideous javascript "documentation" app yet?