Object-oriented specification

Within the SoS group an experimental object-oriented specification language CCSL, for Coalgebraic Class Specification Language has been developed together with the Technical University of Dresden. A class specification in CCSL contains the following four main parts:

A typical class specification in CCSL looks as follows.
Begin queue[A : TYPE] : CLASSSPEC
   METHOD
     size : self -> nat;
     push : [self, A] -> self;
     pop : self -> Lift[[A, self]]

   ASSERTION SelfVar x:Self
     size_push :
       FORALL(a:A). x.push(a).size = succ(x.size);

     size_pop :
       CASES x.pop OF 
         bot : x.size = 0;
         up(y) : proj_2(y).size = pred(x.size)
       ENDCASES;

     pop_push :
       FORALL(a:A) .
         CASES x.push(a).pop OF
           bot : FALSE;
           up(y) : 
             CASES x.pop OF
               bot : proj_1(y) = a
                       AND
                     proj_2(y) ~ x;
               up(z) : 
                 proj_1(y) = proj_1(z)
                   AND
                 proj_2(y) ~ proj_2(z).push(a)
             ENDCASES
         ENDCASES;

   CONSTRUCTOR
     new : Self

   CREATION
     pop_new : new.pop = bot;
END queue
The translated classes are mainly used for the following verification purposes.

Some further features of CCSL are:

The CCSL language and compiler are currently maintained in Dresden. More information can be found there.