Used for OCL Simplification, i.e. not for usual logic terms.
Instead of creating the sorts in this package directly,
use the constants defined in
{@link de.uka.ilkd.key.logic.sort.oclsort.OclSort}.
This package contains representations of the pre-defined types
in OCL: OclAny, OclType, Boolean, Real,
Integer, String.
It also contains means to represent the pre-defined Collection
types: Collection(T), Set(T), Bag(T),
and Sequence(T), where
T is one of the types enumerated above.
Moreover, we need a type that represents the classifiers
defined in the UML model associated with a specific OCL constraint.
We call this representation {@link de.uka.ilkd.key.logic.sort.oclsort.ClassifierSort}.
This sort can be
viewed as a super type of all classifiers in the model.
We don't need more specific type information of the classifiers,
since our simplification rules are based only on our knowledge
of the pre-defined OCL operations - not the properties of a
specific UML model.
Finally, to be able to check for type conformance when building
OCL expressions, we need a sort called
{@link de.uka.ilkd.key.logic.sort.oclsort.OclGenericSort}. Its existence
is motivated in the context of assigning an element type to
an empty Collection. The problem is that when we, for instance,
build an expression like collection->forAll(s:T | e(s))
we want to check that the element type of collection conforms
to the type T. This must hold also for the special case:
Set{}->forAll(s:T | e(s)). In other words, the element type of
Set{} must conform to every other basic type. At the same time,
when we build a collection, we want to check that the types of
the elements in the collection conforms to the element type of
the collection. Using the taclet syntax, $insert_set(elem, $empty_set),
we want to check that the type of elem conforms to the element
type of $empty_set/Set{}. In other words, the element type of
Set{} must be such that any other basic type conforms to it.
We therefore need a type with the property that it conforms to
any other basic type, and any other basic type conforms to it.
{@link de.uka.ilkd.key.logic.sort.oclsort.OclGenericSort} has this property.
Last modified: Thu Jan 27 15:20:36 MET 2005
|