8/19/93

1.  Dropped second arg to unknownify.
2.  Changed proof pointers; they now have proof-task (the main task) and
    proof-slaves (the rest).  Used to be that the main task was the car
    of proof-tasks.
3.  Moved proof-min-depth to bc.lisp and used it in the pending answer
    computation.
4.  Added trivial-answer.
5.  Made leq (fast comparison checks) mandatory in bilattices, lattices
    and dags.  This simplified the code that invokes them, since we no
    longer have to make sure they exist!
6.  In coalesce-by-value, the points cannot be instances of one another.
7.  Introduced boundary arguments for things like mvl-plus.   So if
    either is unknown, the other is returned; if either is bottom, bottom
    is returned.  The change is in the introduction and use of
    bilattice-op-fn.
8.  modal-lookups simply returns 'modal as second value whether successful
    or not.
9.  In unify*var, all calls to unify-1 have T as final argument.
10. plan-prop-1 and handle-failures rewritten so that only one path
    through remaining/failed is required.
11. plan-hash initialized to NIL.
12. Lisp negations combined in fan-in-1.
13. Last clause in merge-plans simplified slightly.
14. Subtraction of plans was buggy; it's been fixed.
15. var-is-* uses length instead of array-dimension.

5/25/93

1.  dropped copy-list applied to &rest args.  (Was for old Symbolics bug.)
2.  changed subst to sublis in task-diagnostic; it's clearer.
3.  cleaned up split between MVL and first-order prover.  Introduced
    structure of type fotp to deal with first-order stuff alone.
4.  added current-value field to analysis; this includes ignoring exceptions
    if *completed-database* is NIL.  current-value is computed when 
    recompute-value finds a change for the top-level task, so some code
    was moved from relevance.lisp to values.lisp.
5.  nonmon slot for all tasks, not just those of type inference.
6.  initialize-prototasks splits out check to see if the task is already there
    as find-legal-master.
7.  cleaned up prover-succeeded substantially.
8.  fixed bug in dag-accumulate-fn to handle values passed at root of dag.
9.  combine-slow never overwrites a value; modifier is #'return-second-arg
    in eventual call to dag-accumulate-fn.
10. set-depth-limit dropped.
11. bc-index-find introduced to handle indexing in first-order prover.
12. referential opacity identified by non-NIL second value returned by lookups.
13. bc-plug moved inline.
14. ccheck field dropped from rel structure.  (And dropped as an argument in
    a variety of places.)
15. answer-is-really-different renamed change-is-relevant.

5/4/93

1.  similar functions in atms and first-order atms merged.
2.  // changed to / in procedural attachment.
3.  lookups returns a second value that is not a list but one of ATTACH,
    MODAL or NIL.  (This allows a variety of small simplifications.)
4.  dot-bindings code cleaned up slightly.
5.  delay changed so that delaying a plan by 0 time units does nothing
    (used to be 1).  Various changes in the MVL databases.
6.  general-circum(s) removed; check-fn arg to check-context dropped.
7.  fc no longer assumes (wrongly) that the values being passed around
    were in bdg-to-truth-val instead of the active bilattice.
8.  plan-init-p and plan-root-p replaced with eq checks with plan-root
    and plan-init.
9.  no-predecessors dropped.
10. bdgs argument to merge-internal and predecessors dropped.
11. recopy, recopy-and-save and insert-here all merged into recopy.
12. merge-action-find, mxr and prec-1 don't need to be wrapped in with-marks.
13. split out common code in imm-merge-found and imd-2.
14. function names of supporting functions for coalesce and subtract made
    more sensible.
15. bug in subtraction fixed.
16. memoization also checks to make sure plans have the same immediate flag.
17. do loop in c-prob changed to a mapc.
18. propositions ordered by symbol-name instead of pnum function (which was
    dropped).
19. bug fixed in standardize-variables; binding lists could have elements
    of the form (#:?* . ?*) and therefore needed to be tweaked before being
    used for plugging.  standardize-variables also initializes bdglist to
    an optional argument, and doesn't restandardize a database variable.
20. parent-theories removed and child-theories renamed to children.
21. repeated functionality at various points in theory-dag collapsed to
    auxiliary functions.
22. std-cutoffs etc in theory-dag have to take values at theory in question
    *specifically* if test is negated.
23. props-to-display now handles this-theory-only being NIL correctly.
24. empty-theory activates (and then perhaps deactivates) its principal
    argument.

5/2/93

1.  All modal operators assumed t-monotonic.  Removed t-mon slot from
    modal operator, simplified various functions to assumed t-mon is always
    t.
2.  Added add and sub fields to dag structure.  Add takes two dag elements
    and returns a single one that is their "sum" if such can be constructed.
    Sub is similar but returns a difference.  The principal induced change
    is to simplify, which now also attempts to coalesce dag points where
    the same value is taken, and also attempts to subtract points where the
    answer taken would be inherited anyway.
3.  find-entry and member-entry modified to include optional argument, a
    list of original dag entries.  If present, the equality check on the
    dag is used instead of eql.
4.  Cleaned up the following functions; no real change: get-val, lookp-*,
    samep-var, subst-bdg, subst-term, active-task.
5.  combine-slow split out of code for combine (used to be inside the
    function).
6.  combine-2 moved to values.lisp from dag.lisp (dag stuff no longer uses
    it).
7.  combine-slow now attempts to avoid work if you can tell in advance
    the new value will be redundant.
8.  member-entry changed to find-entry in add-dag.
9.  arguments to fn-def simplified.
10. general modal-operator constructors introduced, since the operations
    are so similar from case to case.  paired-modal-ops introduced in
    product.lisp, single-modal-ops in function.lisp.
11. fn-print no longer binds *print-pretty* to t.
12. comments in code now indicate arguments correctly.
13. h-fn-vars checks to see if the truth value is NIL (unknown).
14. Removed support for Texas Instruments TI machine.
15. Modified plan dag to include addition and subtraction functions.
16. In surgery.lisp, s-arg-on-top-level checks to make sure it isn't
    a parameter first (you might not be able to take the car of a parameter).
17. In vars-in, the case where the proposition is NIL is now caught by the
    fact that NIL is an atom.
18. napcar redefined using map-into (ANSI only).

3/26/93

1.  mvldcl list of exported symbols updated to match documentation and
    earlier code changes.
2.  All support for Symbolics dropped, including release-mvl and reload
    keywords in load-mvl and compile-mvl.

3/5/93

1.  bc-unindex handles case where no index set up for this predicate.
2.  plan structure includes hashed value; this and vars only computed on
    demand, then stored.
3.  merge-internal memoized; various functions modified so as not to destroy
    the result.
4.  new-val-difference introduced in values.lisp to compute incremental
    change.

3/1/93

1.  cw::position= changed to equalp in dynamic viewer.
2.  logical pathnames included and debugged.
3.  relevance computations use new values only; old values no longer
    displayed, either.
4.  bug fixed in indbp and tvid to improve output of circumscriptive
    databases.

2/10/93

1.  only slave a task to one with the same nonmon flag.
2.  weird clos: call in invocations.lisp made for Allegro only.
3.  planner added to mvl demo.
4.  new exported symbols: monotonic cutoff (not *monotonic-cutoff*)
    mvl-t-ground splitting-point-below.
5.  with-compilation-unit has options as first argument in accordance
    with CLtL2.
6.  empty end clauses replaced with nil in do loops in plan.lisp.
7.  initial and terminal in mvl package in plan.test.
8.  old slot dropped from rel structure (it's always the value
    of rel-current).
9.  temporal reasoning demo uses cheap temporal logic only.
10. t-gt check in proof-holes dropped.


1/26/93

1.  possible-impact modified to return as soon as any pending answer
    is useful.
2.  fc-info BOA constructor dropped.
3.  Macros for accumulation in first-order fixed.
4.  Display of relevance computation flags consistency checks.
5.  Consistency check slot added to rel structure; maintained during
    relevance analysis.
6.  Consistency check flag passed to hypothetical-differences.
7.  Parent not passed to hypothetical-differences.

1/18/93

1.  equality test moved to k-le, t-le and mvl-eq and removed from
    individual bilattices.
2.  bug in inverter function attachment fixed
3.  new inference tasks pushed onto children, not (cdr children)
4.  test files don't include things like (2 . true) but now use
    splitting point below, t-grounding, etc.
5.  dag-functions changed so that results of multiple paths to an
    element of the dag are dotted together instead of always being
    the same
6.  dag-drop given optional make-copy argument (used if no changes)
7.  combine-fns in dag.lisp no longer uses comparison option; quick
    version more general and covers most of this stuff.
8.  fn-and, etc., now defined using a macro.
9.  fn-elt introduced to make specific elements of dag-based bilattices.
10. bug in (non-ANSI) printing of dag functions fixed.
11. accumulation functions in first-order defined using a macro.
12. first-order bilattice constructed from two-point lattice.  (Involves
    other changes also; f-true etc no longer defined and so on.)
13. mvl-absorb assumes relevant bilattice function is defined.
14. function to help with modal lookup split out of lookup/lookups.
15. common (return) in fan-in-1 broken out.
16. merge-internal uses a prog2.
17. show-list uses :key keyword for sort instead of pnum-before (which
    has been dropped).
18. bug fixed in stash-adjust-value; code is simpler now.
19. make-difference introduced; handles check to see if relevance check
    is getting anywhere.
20. inactive-task changed to active-task because it's simpler to understand.

11/19/92

1.  new NONMON slot added to inference tasks; indicates whether or
    not the task is a consistency check.  computed by NONMONTONIC
    function in bc.lisp.
2.  answer of true is assumed relevant by consider-step; choose-proof
    is expected to figure it out if not.  The function POSSIBLE-IMPACT
    in control.lisp does this.
3.  dag-fn printout simplified to drop some unneeded text.
4.  new t-mon slot added to modal operators (and constructors thereof);
    described in load.lisp.
5.  plan representation changed substantially; plan.lisp rewritten and
    split off from plan-dag.lisp (which has modal operators like propagate
    and delay; plan.lisp only has the basics).
6.  proof structure saves relevant-answer computation in new RELEVANCE
    slot.
7.  Finding the active subtasks of a given task changed to use monotonicity
    information.

10/12/92

1.  proof-relevance stores relevances for different bindings.

10/9/92

1.  vars slot removed from inference structure.
2.  fc grounds out in state, not stash.
3.  Structure printing stuff moved to first-order-user-interface.
4.  check-generalizes checks g2 for opacity, not g1.
5.  pre-unify dropped from goal-goal resolution and match.lisp.
6.  Cache results of relevant-answer if answer is true.  (Includes 
    modification to recheck-task to dump cache as appropriate.)
7.  collapse-rels uses mvl-eq instead of eql for equality check.
8.  combine-for-proof does the conjunction without checking for subsumed
    terms.

10/5/92

1.  dag-fns no longer maintained semisorted.
2.  Added copy-entire-fn to copy an entire dag-fn.
3.  Added dag-drop; removes certain entries from a dag-fn-list and constructs
    a new dag-fn.  dag-remove-unknown now uses dag-drop.
4.  dag-fn simplication changed a bit; now works from the top down and one
    pass only.
5.  term-cutoffs removed (from fc.lisp as well).
6.  Dropped default dot-with-star function; all bilattices must set this
    field.
7.  Argument of IDN modality changed to type 1 from type t.
8.  Modal lookup now looks for proposition only, ignoring negation (this
    should be covered by lookups instead).
9.  varp returns a name, not just T or NIL.
10. action-same modified to cater to this.
11. Plan propagation function changed to assemble a list and then call
    dag-accumulate-fn.  (It was getting too complicated to do in any other
    way.)
12. New variables constructed with gensym instead of gentemp.
13. Default stash after activating theory mechanism uses bilattice-stash-val
    (as it should) instead of bilattice-true (as it used to).
14. props-to-display and theory-value changed to reflect change in dag-fn-list
    entries to dag-entries instead of just conses.

10/1/92

1.  Extremal elements of bdg-to-truth-val stored in global variables.
2.  compile-mvl added to list of exported symbols.
3.  *use-cache* introduced to control use of cached information in
    compute-truth-value.
4.  assumed truth value for child of inference task is false if
    task is modal and parity is negative.

9/23/92

More small bugs:

 1.  Quantification hack of 9/18 removed; it's not clear it helps.
 2.  simplify-at-point checks to make sure that the point is there.
 3.  plan-instance bug involving parallel paths fixed.
 4.  time-instance checks for equality.
 5.  action-inst is just inst (I no longer believe it needs to be
     complicated).
 6.  Auxiliary argument added to caching information to allow greater
     flexibility.

9/18/92

More small bugs fixed:

 1.  Quantification functions changed to simplify their results where
     possible.
 2.  dag-change-dag rewritten more simply to recompute ordering information
     instead of trying to salvage existing stuff.  The functional argument
     no longer needs to preserve the dag ordering.
 3.  simplify-at-point calls itself recursively to consider simplifications
     at children if the current point is eliminated.  It also doesn't rely
     on delete modifying the list structure.
 4.  fn-vars no longer destroys the result of applying dag-vars.
 5.  Plugging functions make sure that the variables being plugged appear
     in the dag-fn.
 6.  In first-order ATMS, the variables in a (sentence . binding) pair
     used to be the variables in the binding.  They should be the variables
     in the sentence, minus the variables being set by the binding and then
     plus any variables appearing in the expressions to which they are set.
     Fixed this.
 7.  *mvl-alist* was set to a symbol instead of (list nil).  Recompiling
     the system used to result in its being unable to recognize mvl-alists
     from previous incarnations.
 8.  mvl-plug makes sure that a variable being plugged appears in the
     value in question.

9/16/92

Two major changes, host of small bugs:

 1.  Dropped proof variables, since we can recover them during any
     subsequent plugs.
 2.  Dropped plugging of bcanswers because it never happens!
 3.  Changed binding-plug to a simple plug because that's good enough.
 4.  Dag-fn structure changed to include slots of immediate and all
     successors; each entry now an instance of the dag-entry structure.
 5.  dag-remove-unknown doesn't remove an unknown root value.
 6.  Added print method for bc-answer.
 7.  with-mvl-invocation changed to make a new invocation, like it's
     supposed to!
 8.  merge-times first checks to see if either time is an instance of
     the other, returning the instance if so.
 9.  merge-times recopies one time if there are shared actions.
 10. Plugging dropped from internal groanings of merge-times, time-instance.
 11. Added reconstruct-with-propagation to clean up modal truth criterion
     correctly.
 12. recompute-for-quantification fixed
 13. static-display and dynamic-view now initialize associated tracing
     variables if needed.
 14. Removed path mechanism; replaced it with a caching mechanism for
     compute-truth-value.

9/5/92

Added assumptions slot to paths; added accumulated stuff to
invocations.lisp.

9/4/92

Fixed bug in plan.lisp so that ptimes cannot contain loops.

8/15/92

Changed planner representation to partial orders instead of
parallel/serial stuff used earlier.  Also fixed bug in unstratified so
it doesn't consider the same task over and over again.

6/29/92

Reinstated slaving mechanism between inference tasks; this led to many
subsidiary changes -- only choose a proof and not tasks (since all
tasks get the answer), and so on.  Removed active-p slot from
inference tasks; now recomputed by completed-proof.  This allowed us
to drop stuff to activate and deactivate tasks; everything is always
computed on the fly.

6/8/92

Viewer and dynamic viewer, documentation update.

4/21/92

Removed define-setf-method for alists, since define-setf-method
has been removed from CLtL2.  (I didn't want to worry about
whether it was define-setf-method or define-setf-expander.)

Removed error checking from test-mvl so that the user can handle
name conflicts with planning bilattice.

4/17/92

Major changes:

1.  Removed all control at first-order level: agenda mechanism for
first-order prover, mvl-simplicity and all related functions,
changed search mechanism to depth-first with an optional breadth
cutoff.

2.  Changed control mechanism; all tasks are now associated with
proof efforts before choose-task is invoked.  This also involved
a substantial reworking of the mechanism for dealing with pending
answers, which are now kept with the proofs instead of with the
tasks themselves.

4/6/92

New control mechanism introduced; many changes built around that.
control.lisp introduced to include these changes but not control
protocols implemented as yet.  relevance structure introduced to
assist in value-based control work.

3/18/92

Fixed plan printing functions to deal with non-pretty printing.
Changed napcar to mapcar in pd-4 to handle uncopied lists.

3/13/92

Fixed bug in db-absorb so that it looks at bindings in the *new* truth
value, not the old one.  Removed storage of relevant and irrelevant
answers, since it doesn't save any time.  Put in feature to view as
irrelevant proofs that contradict with known stuff.  Recheck-pending
resets recheck flag if all the answers were examined.
Inference-status changed to inference-active-p.

2/6/92

Many changes:

1.  Changed dag printing function so that successors are only
displayed when truth value changes.

2.  Included planning bilattice in released code.

3.  dot-binding checks for either binding NIL.

4.  samep inference tasks share invocation of first-order theorem
prover; relevance computation "batched" so that all places where the
answer might be used are considered simultaneously.

5.  Fixed error trapping in mvl-test-file; fixed handling of "pause"
and "quiet" from other packages in mvl-demo-file.

6.  Gave proof structure a print method.

9/16/91

Changed cont-prover to allow return of all simultaneously-computed
answers by the first-order prover.  Changed ans-bdgs to cater to Lisp
bug appearing in both Lucid and Symbolics implementations.

9/10/91

Introduced demo feature; introduced succeed-on-bound slot of analysis
structure to control nature of answer returned in this case.

9/4/91

Changed formatting to split ANSI from non-ANSI in most cases.
First-order set up not to return unknown as an answer.

8/28/91

Changed dag-fns to structures that *include* lists.  Args to many
functions simplified.

8/4/91

Changed dag-fns to lists.  Lookup functions return two values only.
First-order theorem prover checks relevance at beginning and end only.

7/31/91

Changed relevance mechanism to do more incremental caching.

7/26/91

Included :test #'equal in do-goal-goal as needed for completeness.

6/21/91

Changed combine-1 to use get-val so that get-val can include selection
function; added such selection function.  Changed dag-accumulate-fn so
that it simplifies at the end only.

6/3/91

Fixed unification bug that sometimes returns database variables
second, confusing matcher.

5/23/91

Incorporated stuff to simplify truth values as they are developed by
the prover.  Needed in planning so that you don't keep track of
*everything* as you develop an answer.

5/9/91

Removed path mechanism; now recompute it every time the prover is
invoked.  This appears to actually be more efficient on the test
files.

5/6/91

Restored nfind?var.

4/18/91

Many changes; inserted path-hooks between paths and nodes, fixed
bizarre bug involving multiple bilattices being interested in binding
lists by putting a hack in bc.lisp.  This will presumably break in an
odd way at some point in the future, but should not affect any of the
bilattices that are part of the released code.

3/29/91

Changed compute-slave-truth-value in bc.lisp to use mvl-plug instead
of doing it by hand.  (This fixes a bug as well.)

3/14/91

Fixed subtle bug in stash-adjust-value.  Replaced display-value with
more sensible mvl-print and debugged pretty printer interface.

3/8/91

Removed completed-database code because relevance.lisp actually
subsumes it.  2nd level of prover (proof efforts) eliminated.
mvl-sublis and all associated functions eliminated because gensym
binding lists no longer occur.

3/1/91

1.  Conform to ANSI standard Common Lisp as well as CLtLI.  Checks to
see whether in-package is a macro or a function to tell which to
support.

2.  Unifier changed to avoid loops in some difficult instances such as
(?*1 ?*2) unifying with (?*2 ?*1).  Partial answers are returned in
these cases.

3.  use-mvl deleted since CLtL specifies that the operating system
should take care of it.

4.  query modified to accept input ending in #\Return only; unix-based
systems require this and it seemed reasonable to simplify the code in
this way.

5.  additional keyword "terminate" added to prover.  Documented in
manual.tex.
