======================================================================
Release notes, Version 0.4.  Thu Jul  1 1993

- bug fixes:
  o name conflict of implicit variables [Ekkehard Rohwedder]
  o incorrect type error messages [John Hannan]
  o constraint propagation when solving queries [Brian Milnes]
  o constraint propagation during selective tracing with backquote
- interface improvements:
  o type reconstruction approximates location of type error
  o type error messages are reported in external format, unless flag
    T.control "print_internal" is true
  o improved Emacs Elf mode error tracking, including interactive
    and batch input
  o added Emacs Elf mode directory tracking
  o other miscellaneous improvements in Emacs interface
======================================================================
Release Notes, Version 0.3.  Sat Mar  6 1993

- bug fixes:
  o free variables in clauses are not instantiated during type reconstruction
- language improvements:
  o added delimited comments %{ }%
  o added queries of the form
      ?- M : A. 
    for easier interactive proof checking.
- interface improvements: (for more information see the NOTES file)
  o changed the interface to the flags
  o added flags
       E.warn "redeclaration"
       E.warn "implicit"
  o added functions (for more see NOTES file)
       show_prog ()    --- print rules in top-level environment
       print_sig file  --- print signature, elliding arguments
       print_sig_full file --- print signature, with implicit arguments
       chatter (n)     --- set verbosity of chatter (default: 2).
    chatter (1) improves the speed of loading Elf, since signatures
    are not echoed in internal format.
  o improved appearance and efficiency of pretty-printing
  o improved naming of variables
  o logic variables are now printed without the `?' prefix for better
    cutting and pasting
- efficiency improvements:
  o eliminated redundant building of proof objects
  o eliminated unification of redundant arguments (when safe)
  o eliminated many redundant occurs-checks during unification
======================================================================
Release Notes, Version 0.2.  Sat Feb 15 1992

Changes from Version 0.1 are detailed further below.  Some highlights:

- ported to SML of NJ version 0.72.
- added simple Emacs support, based on Olin Shiver's comint mode (included).
- implemented static scoping of constants.
- implemented first-argument indexing a la Prolog and a global program table
  for improved efficiency [Spiro Michaylov].
- added and updated some examples
- implemented prefix, infix, postfix, and name preference pragmas.
- fixed a long-standing problem in type reconstruction:
  A -> B  still parses into  {x:A} B  but now prohibits occurrences of x in B.
- added simplified  trace (n)  and  untrace ()  functions.
- added timing and profiling utilities.
======================================================================
Release Notes, Version 0.1.  Tue Aug 20 1991

First release.
======================================================================


EDIT HISTORY

First pre-pre-release to Edinburgh on Nov 26, 10:33
------------------------------------------------------------
fp Fri Nov 30 21:53:19 1990
+ secondary prompts [eLP, Elf]
+ ^C now returns to the most recent eLP or Elf top level [eLP, Elf]
+ added file sys.sig and sys_newjersey.sml, though not used
  pervasively yet.
------------------------------------------------------------
fp Thu Jun 20 16:27:04 1991
Fixed bug in uutils.sml (argument had to be uvar, not evar bound to uvar)
 This probably should in effect be fixed elsewhere, not here.
Fixed bug in constraints.sml (dominates_all did not check enough).
------------------------------------------------------------
fp Mon Jun 24 15:50:20 1991
new flag Elf.show_obligations to print type of abstracted query
after completion.  Does not list constraints, currently!
------------------------------------------------------------
fp Thu Jul  4 11:53:43 1991
fixed bug in free_in, file lam/sb.sml.  Might fix some other problems
in turn.
------------------------------------------------------------
fp Thu Aug  1 18:57:21 1991
fixed bug in dest_pi_error: in some cases, head normalization needs
to take place before the pi can be destructed.
------------------------------------------------------------
fp Thu Aug 15 16:53:26 1991
Implemented new parser, in which explicit type annotations
are accepted.  Anonymous clauses are no longer legal.
------------------------------------------------------------
fp Tue Aug 20 10:50:58 1991
Added top-level utilities for Elf in elf/toputils.sml.  Updated
documentation and prepared first pre-release (0.1).
------------------------------------------------------------
Pre-release 0.1 with limited distribution Tue Aug 20 10:52:05 1991
------------------------------------------------------------
fp Sat Sep 28 13:11:21 1991
Move to version 72.  Build elfsml-72 and elfsml-72p, the latter
compiled with enabled profiling.  See /usr/misc/.sml/doc/profiling
for more info on how to profile.
  The file toputils.sml is now obsolete.  The functions have
been added to elf.sml.
  The structure Elf is now opened by default before the core image
is saved.  See loadelf-72.sml and loadelf-72p.sml
  Added functions saveElf72 and saveElf72p to save.sml.

  Added the following switches:

Elf.time_queries       % Show timings for individual queries.
S.control "unsafe_don't_build_proof"
	  	       % Don't build proofs, just solve query.
		       % Don't do this unless you REALLY know what you are
		       % doing, since it makes the interpreter type-unsafe.
U.control "unsafe_omit_occurs_check"
	  	       % Omit dependency and acyclicity check from unification
		       % Don't do this unless you REALLY know what you are
		       % doing, since it makes the interpreter unsound.
----------------------------------------------------------------------
Mon Sep 30 16:03:38 1991
Added function

profile_top (filename) 

 This is like top, except that it profiles into filename after then
top-level is left.

Elf.profile_queries	% Normally off.  This flag should be accessed
			% through profile_top.

Added structure Profile.  See ~/lam/lam/profile.sml.
----------------------------------------------------------------------
Tue Oct  1 23:32:33 1991

Earlier in the afternoon, changed head_norm_term to be faster for the
common case.  It now no longer works when called on terms with loose
bvars.  Beware!

Also created version of unify
which does not rely on structure Rewrite (which is inefficient).
----------------------------------------------------------------------
Tue Oct  1 23:27:37 1991

Added a number of things to Elf which changed signatures in lam/parse.sig,
elf/parse_core.sml, elf/elf_front_end.sml, and elf/elf.sml.

    val batch_show_subst : bool ref
    val batch_echo_query : bool ref

    val top : unit -> unit    (* simple interactive top-level *)
    val batch_top : string -> unit  (* read queries from file *)
    val profile_top : string -> unit  (* profiled interactive top-level *)
    val profile_batch_top : string -> string -> unit
         (* profiled batch toplevel: (profile_batch_top query_file pro_file) *)
----------------------------------------------------------------------
Thu Oct  3 15:48:23 1991

Set up a copy of the relevant files for further development
in /afs/cs/project/ergo/research/elf
----------------------------------------------------------------------
Mon Oct  7 08:49:54 1991

Converted to a representation where Pi and Type are distinguished as
constructors.  A Pi contains an annotation specifying if the quantification is
vacuous (in which case it is in fact an arrow).  The annotation is crucial for
type reconstruction, fixing a long-standing bug.  This is a pervasive change
throughout the system, since terms are not abstract within the implementation.
----------------------------------------------------------------------
October and November

Added symbol table to avoid string comparisons.  -spiro
This necessitated bootstrapping. -fp
Added program table to avoid linear search for families.  -spiro
Added first argument indexing to avoid unnecessary unification.  -spiro
Modified indexing to work underneath abstractions. -fp
Modified indexing to ignore implicit arguments. -fp
Modified indexing to work on temporary assumptions.  -fp

----------------------------------------------------------------------
Sun Nov 24 09:26:18 1991

Fixed BUG (reported by Andrzej Filinski): unifying F with [x] F x results
in an occurs-check.  This is very unlikely to happen during execution,
but may happen during type-checking time.  In this case eta-expanding
some input variables may provide a workaround.  Renamed new version to
0.1a.
----------------------------------------------------------------------
Wed Dec 11 00:44:15 1991

Spiro improved indexing (now ignores implicit arguments) and one can
index on a Uvar.

----------------------------------------------------------------------
Wed Dec 11 00:46:35 1991
Implemented fixity and name preference declarations.  Also, shadowed
symbols are now marked with "%<name>%", and bound variables are renamed
when necessary to avoid shadowing constants.  Infix identifiers can
be quoted with 'id' to override their infix status.

Fixity declarations
%infix <assoc> <prec> c1 ... cn
%prefix <prec> c1 ... cn
%postfix <prec> c1 ... cn

Here <assoc> is left, right, or none;
<prec> is the precedence (the higher, the tighter) between 0 and 10000;
c1 ... cn are the declared symbols.  The declaration ends with the line.
For example:

%infix left 10 + -
%infix left 20 * /
%prefix 30 ~

%infix right 5 &
%infix right 4 =>
%prefix 3 |-

Name preference declarations (partially implemented)
%name <fam> x1 ... xn

x1 ... xn will be used as the name for variables whose type (family) is
<fam>.  Regular numbering will only be used when the list is exhausted.
For example:

i : type.
%name i  x x' x''

o : type.
%name o  A B C

|- : o -> type.
%name |-  P1 P2 P3 P4 P5
----------------------------------------------------------------------
Fri Dec 27 09:17:20 1991 -fp  Version 0.1x

Reorganized the module boundaries, still more work to be done.
Further work is marked with !!! or ???
----------------------------------------------------------------------
Thu Jan 16 16:15:13 1992  lam -fp

Changed sys.sig and sys_newjersey.fun to include date, cwd, and exit
(thanks to Elsa).  Modified the load files accordingly.
----------------------------------------------------------------------
Thu Jan 16 16:16:04 1992  elf -fp

Changed elf_front_end.fun to give approximate line numbers for type
checking error message.  line numbers start at 0!
----------------------------------------------------------------------
Sat Feb  1 15:49:16 1992  lam, elf -fp

Improved error messages by passing position arguments.
Elp needs to catch up!
----------------------------------------------------------------------
Sun Feb  9 15:12:35 1992 -fp  Version 0.1z

Improved error message for clauses with flexible head.  Improved tracing by
adding functions Elf.trace : int -> unit and Elf.untrace : int -> unit and by
using [...] to enclose a goal and its final failure point.

----------------------------------------------------------------------
Sat Feb 15 09:11:56 1992 -fp

Eliminated comma so it can be used by object languages.
----------------------------------------------------------------------
Fri Jul 17 13:22:29 1992  lam, elf -fp

Eliminated redundant proof building by top-down propagation of a flag. -spiro
Implemented redundancy analysis and eliminated unnecessary unification for
redundant arguments.  This mainly improves the efficiency of proof
transformations (in Elf) and of polymorphic types (in Elp, potentially).

----------------------------------------------------------------------
Sun Jul 26 10:25:29 1992  elf -fp

Added delimited comments %{ }% to Elf.

----------------------------------------------------------------------
Sat Sep 12 14:45:41 1992  elf  -fp

Added queries of the form ?- M : A. to Elf in order to simplify interactive
proof-checking.  The show_proof variable should now only be necessary for
sigma-queries (which are still excluded from this improvement).  Also
incorporated a few minor changes from Amy Felty.

More uniform interface to flags etc.

Nov 30 elf - fp  Version 0.2d

Improved occurs-check elimination by elimination reference chains.
----------------------------------------------------------------------
Tue Dec 22 16:12:29 1992 lam, elf  -fp  Version 0.2e

Reorganized flags in the Elf module to conform to the flags in other modules.
The main change from 0.2d is a bug fix and efficiency improvement: proofs are
now only built when necessary in a sound fashion.  To implement this, the
signature is analyzed when the program table is built to disentangle
`subgoals' from `logic variables'.  This does not work for higher-order
programs (which are strictly speaking illegal in LF), so a fallback option of
`cannot classify' reverts to the old scheme.  Empirically this leads to a 25%
speedup when proof objects are required (say, because they need to be printed
at the top-level) and about a 50% speedup when proof objects are not required
(measured on medium-sized queries from the miniml suite).

Some obsolete flags have been removed.  Added flags:

E.warn "redeclaration" % If true, redeclarations lead to a warning.
E.warn "redeclaration_initload"
		       % If false, redeclarations during initload do not lead
		       % to a warning.
E.warn "implicit"      % If false, implicit arguments which can be neither
		       % synthesized or inherited do not lead to a warning.
E.trace "echo_declarations"  % If false, declarations are not echoed.
E.trace "show_dynamic"       % If false, dynamic families are not shown when
			     % entering the top-level.

Add functions:

Elf.show_prog ()    --- print rules in top-level environment
Elf.print_sig file  --- print signature, elliding arguments
Elf.print_sig_full file --- print signature, with implicit arguments

Elf.chatter (n)	--- set verbosity of chatter (default: 2).

Current meaning:

Elf.chatter(0) --- very few messages.
Elf.chatter(1) --- show signatures and dynamic families when entering the
		   interactive top-level with top ().
Elf.chatter(2) --- print internal representations of all declarations after
		   type reconstruction [Default].
----------------------------------------------------------------------
Mon Dec 28 10:25:00 1992 lam, elf -fp Version 0.2f

Added Fvars to the representation for free variables in signature entries.
This fixes a long-standing problem in type reconstruction.
----------------------------------------------------------------------
Wed Dec 30 12:18:42 1992 lam, elf -fp

Improved pretty printing by treating term of the form
 c ([x:A] M)
as the prefix
 c [x:A]
followed by M.  The precedence of `c [x:A]' is the same as that of `[x:A]'
which is the weakest in the system.  This is mainly useful for object-level
binders and quantifiers.  It can be explicitly overriden by declaring
c as a prefix operator, usually of very high precedence.
----------------------------------------------------------------------
Wed Dec 30 21:28:30 1992 lam, elf -fp Version 0.2g

Added to naming.sig to keep track of names for Evars and Uvars.  These
are reset for each declaration and query, restarting numbering low.
Evars are now printed simply as their name, Uvars are printed with
a ! prefix and Fvars are printed with a ^ prefix (for errors during
type reconstruction).
----------------------------------------------------------------------
Sun Jan 17 10:13:57 1993 lam, elf -er, fp

Simplified the interface to the pretty printer and improved performance of
pretty-printing.
----------------------------------------------------------------------
Fri Mar  5 15:45:45 1993 elf -er, fp

Reorganized the top-level to allow separation of tools.  Eliminated profiling
code which is broken at the moment.
----------------------------------------------------------------------
Release of Version 0.3.  Sat Mar  6 1993
----------------------------------------------------------------------
Fri May 14 08:35:15 1993

Fixed two bugs
o abst_over_evars did insufficient renaming in some rare cases
  (file lam/type_recon.fun)
o simplify_equals missed some opportunities because it did not try
  to determine progress [John Hannan] (file lam/simplify_equals.fun)
----------------------------------------------------------------------
Wed Jun  2 10:47:18 1993

o Modified abst_over_evars further (previous bug fix insufficient).
----------------------------------------------------------------------
Sat Jun 19 10:20:48 1993

o Fixed a bug in constraint propagation noticed by Brian Milnes.
----------------------------------------------------------------------
Wed Jun 30 10:23:57 1993 Elf, version 0.3c

o Introduce marking of terms in order to improve error messages.
o Updated Emacs interface for Elf to take advantage of improved error messages.
o Fixed problem reported by John Hannan (mysterious error messages)
o Added flags T.control "print_internal" to control typing error messages.
o Fixed backquote to produce proof object and trace properly.
----------------------------------------------------------------------
Wed Jun 30 16:41:24 1993

o Improved marking one more time by taking account of parentheses
o improved elf.el to track errors in interactive input.
o added directory tracking to elf.el
o improved filename completion in Elf mode
----------------------------------------------------------------------
Release of Version 0.4.  Thu Jul  1 1993
----------------------------------------------------------------------