This file describes the changes between recent versions of the
CCSL compiler.

######################################################################
# $Id: NEWS,v 1.9 2003/08/21 15:15:11 tews Exp $
######################################################################

New in version 2.3 (currently developed)

  LANGUAGE CHANGES
   -the map combinator is available for Adt's and for Classes
    with final semantics. Its name is as follows:
                    classes         Adt's
     ---------------------------------------------
     PVS:       <class-name>Map  |  map
     Isabelle:  <class-name>Map  |  <adt-name>Map
   
    see TestCases/map.beh or map.isar.beh for examples. 


  CCSLC INTERFACE
   -fixedpointlib is a no-op now because no external library is
   needed any more (see PVS BACKEND)

   -D 64 is also a no-op now (used to dump the internal AST)
    because the dumping code has been flushed

  PRELUDE CHANGES
   The lift in the prelude has been adopted to the PVS prelude.
   It is called "lift" (lowercase!) now and the first constructor
   is bottom. Use -old-lift for backward compatibility.

  PVS BACKEND
   The Pvs backend now uses the fixedpoint combinators from the
   Pvs prelude.


######################################################################

New in version 2.2
   Version 2.2 is mainly a technical release, Version 2.2 is the 
   official version that goes along with my PhD. Nevertheless,
   there are two small changes.

  LANGUAGE CHANGES
   - A semicolon is REQUIRED now also behind inlined PVS
     formulas. Substitute ``ENDPVS;'' for all ``ENDPVS'' (or even
     better substitute all ``PVS ... ENDPVS'' with proper CCSL
     formulas).

   - syntax for types has been relaxed, Isabelle/HOL style types
     like ``nat * nat -> nat'' are accepted as well as mixtures
     like ``nat * [nat, nat * nat -> nat]''. Type expressions can
     be grouped with parenthesis, like ``(nat -> nat) -> nat''.

     You can write now

        Lift[A * B]    instead of       Lift[[A,B]]
        Lift[A -> B]   instead of       Lift[[A -> B]]

     but also

       Method m : Self -> Self -> Self -> Self ;

     instead of      

       Method m : Self -> [Self -> [Self -> Self]] ;

     Precedence/Ambiguities:

     - -> is right associative and * binds stronger than -> :

           self * nat  -> Self * nat -> Self * nat

       is parsed as 

          [[Self , nat] -> [[Self , nat] -> [Self , nat]]]

     - * is nonassociative and gives the n-fold product (contrary
         to Isabelle, where * is right associative):

          Self * Self * Self   is parsed as   [Self, Self, Self]

     - if you mix PVS type syntax and Isabelle type syntax, then
       * binds stronger than , (comma) : 

          self -> [Self, Self * nat]  

       is parsed as 

          [Self -> [Self , [Self , nat]]]

       and

          self -> [Self, Self * nat -> nat]

       is parsed as 

          [Self -> [[Self , [Self , nat]] -> nat]]
          
       finally, [nat * nat] yields the same error as [nat] would
       do.


######################################################################

New in version 2.1.6 
   This version reactivates support for Isabelle/Hol (in new
   style Isar syntax). All proofs are soory proofs. A substential
   part of the test cases translates to Isabelle and typechecks
   there.

 CCSLC INTERFACE
   -isa denotes new styly Isar syntax for Isabelle/Hol

 INSTALLATION
   the configure scripts accepts the option --inplace for inplace
   installation. With inplace installation the directory
   ./Lib/Pvs is used as library directory, so no copying is
   neccessary after compiling. Inplace installatin is the default
   in the CVS source tree. You can override this default with the
   --prefix switch.


######################################################################

New in version 2.1.5
   Version 2.1.5 brings the -pedantic switch that implements
   strict checking for existence of final/initial models.

 CCSLC INTERFACE
   - new switch -pedantic, see man page
   - new debug flag 8192, see man page

 LANGUAGE CHANGES
   - the class specials <class>_class_invariant?,
   <class>_class_bisimulation?, and <class>_class_morphism? are
   available in assertions, creation conditions, and theorems of
   <class>.

 PVS BACKEND
   - data type <class>_Method_Id has been renamed to <class>Method_Id
   - new theory <class>FinalityBisim contains the
   <class>_finality_bisim_eq lemma (which is hopefully provable
   now)

######################################################################


New in version 2.1.4
   Version 2.1.4. is a technical release, there are almost no
   changes besides some bug fixes.

 CCSLC INTERFACE
   - new option -dependent-assertions makes the assertion
     predicates dependent on each other so that one can use
     previous assertions to discharge type-check conditions on
     later assertions.

 PVS BACKEND
   - added proofs for loose and final TCC's


######################################################################
   

New in version 2.1.3

 LANGUAGE CHANGES

   - Keyword TYPE (synonymously but deprecated GROUNDTYPE)
     introduces type definitions. Syntax (inside or outside of
     groundsignatures):

       TYPE identifier [ parameterlist ] [ EQUAL type ]

     If parameterlist is present, it is called the local type
     parameter list, in contrast to the global parameter list of
     the enclosing groundsignature. Global and local
     parameterlists are concatenated to give the type parameters
     of the type. 

     If the type equation is given, this defines a type equality,
     which is silently expanded in type checking and lifting
     generation. 

     For type equations the backend generates a type equation as
     well.

   - type abbreviations are gone

   - Keyword CONSTANT (synonymously but deprecated GROUNDTERM)
     defines constants as before. However, these constants can
     have local typeparameters as well:

      idorinfix [ parameterlist ] COLON type [ formula ]

     (if present, the formula must be an equation)

   - Relaxed parsing of defining equations. There is no variable
     required on the left hand side any more.

   - C-Preprocessor like include directive allows nesting of CCSL
     specifications. Syntax:

       #include "filename"

     filename is searched relative to the current directory and
     its contents is inserted literally.

   - several small problems fixed: 
     - double type parameters are detected
     - qualified identifiers work for groundtypes as well

 CCSLC INTERFACE
   - new option -no-inline-lifting disables inlining of liftings
     of constant functors

 PVS BACKEND

   - The enumeration type for methods (used for methodwise
     invariants) is now defined as an ADT outside the invariants
     theory. 

   - renamed inv_linear and box_linear lemmas into
     inv_linear_cons and inv_linear_append, respectively 

   - new lemmas inv_linear_append, box_linear_append

   - new theories <class>MethodInvariantInherit and
     <class>BoxInherit. They link methodwise invariants and Box
     with ancestor classes (if the ancestor instanciation is
     constant)

   - generate proofs for <class>Basic theory

   - one groundsignature might give rise to several PVS theories:
     every item with local type parameters gets its own theory.
     
   - the compiler generates generic importings (without
     instanciation) for groundsignatures that contain items with
     local type parameters

   - several bug fixes

 INTERNALITIES

   - improved expression optimization


######################################################################

New in version 2.1.2

 LANGUAGE CHANGES

   - For every class there are now three additional predicates
     invariant?, bisimulation?, and morphism?. They recognize
     invariants, bisimulations, and coalgebra morphisms for that
     class. For instance for a class CM

       CM_class_invariant?(a, lambda(x : Self) : step (step x)) inv;
       CM_class_bisimulation? (a, step) (oa, ostep) orel;
       CM_class_morphism? (a, step) (CM_A::a, CM_A::step) upcast;

   - In definitional extentions modal operators are allowed now

   - "\" is allowed in infix operators now

   - ground term declarations can have definitions now, for
     example 

	GroundTerm inv : [bool -> bool]
	  inv x = not x

	Begin bla : Groundsignature
	constant
	inv : [bool -> bool]
	  inv x = not x
	end bla

     If groundterms have a definition, then the compiler generates
     output for that definition.

   - in class specification one can specify theorems in the theorem's
     section:

	Begin ... : ClassSpec

          ...

	  THEOREM 
	    name : <formula>;

	end A

      The theorem section can have an IMPORTING clause and variable
      declarations. The theorems of one class go into the the file 
      <class>_theorem.pvs

 OTHER CHANGES

   - configuration uses autoconf generated configure script now

   - a man page describes all options of the compiler.


This file started with version 2.1.1


*** Local Variables: ***
*** mode: text ***
*** version-control: t ***
*** kept-new-versions: 5 ***
*** delete-old-versions: t ***
*** End: ***
