There are different kinds of relations:
a) | Refinement and implementation relations relating objects at different levels of abstraction. |
b) | Translations between expressions in different languages. Translations are especially important for the transition from specifications to programs and for the reuse of results from other languages. For example, for a development in a first-order logic it might be interesting to use results obtained in equational logic with a narrowing-based theorem prover. |
c) | Multiple views of software objects describe functional properties (such as input-output behaviour, invariants and theorems) and non-functional properties (such as concurrency aspects, complexity mesures and access control) [Cazi 91]. |
Relations are classified according to their abstract properties. Most important are transitivity and monotonicity which insure the correctness of a sequence of development steps as well as of local development steps [Broy 80,Baxt 90].