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

######################################################################
# $Id: NEWS,v 1.13 2010-11-02 15:23:46 tews Exp $
######################################################################

New in version 2.3 (currently developed)

  LANGUAGE CHANGES
   -the conditional accepts elseif-branches:

      | IF formula THEN formula { ELSEIF formula THEN formula } ELSE formula

    One can also use ELSIF instead of ELSEIF.

   -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. 

   -Qualified identifiers need not any longer be fully
    instanciated. One can now write ``list::reduce''; the typechecker
    will compute the instanciation.

  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

   -no-inline-power-lifting turns off the inlining of Power and
    FPower from the prelude.

   -old-lift to use backward compatible Lift

  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.

   -added Power and FPower to the prelude. They provide the
    infinite and finite power set, respectively. Predefined
    constants are emptyset, member, and pred. The latter has type
    Power[X] -> [X -> bool] and gives the characterising
    predicate. For FPower the constants are called femptyset,
    fmember, and fpred. The liftings for Power and FPower are
    inlined per default. Use -no-inline-power-lifting to turn
    this off. FPower is recognised as strictly polynomial
    functor (for which final coalgebras do exist). The infinite
    Power is only available if -pedantic is not given.

  BOTH BACKENDS
   -improved output, several new lemmas
   -new theories for map, rewrite lemmas for coreduce
    (FinalMorphismRewrite)

  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 ***
*** End: ***
