Recall that the RINGS 
 in Computer Algebra
are obtained by applying rules like
- (1)
 
- 
,
 
- (2)
 
- 
,
 
- (3)
 
- 
,
 
- (4)
 
- 
 
- (5)
 
- 
,
 
- (6)
 
- 
.
 
To implement the above rules we would like to do the following constructions
in our programming language.
- To define functions which return a type (as in rule (2)).
 
- To define functions that can be parametrized by a type (as in rule (3)).
      Hence we need GENERICITY.
 
- To handle INTERFACE (or type of types). 
     Indeed in (3) we need 
 to be a ring.
      Hence we need BOUNDED GENERICITY.
 
- In rule (4) we need to say that 
 is an ideal of 
.
      Hence we need BOUNDED GENERICITY
      WITH DEPENDENT TYPES.
 
- We should be able to have functions as parameters of other functions.
      For instance an ordered abelian free monoid genetated by 
      a set 
 depends on a total ordering on 
.
      Hence functions must have types too.
      Finally, both functions and types must 
      have types and must be possible parameters for functions. 
      Hence functions and types must
      be TREATED AS VALUES.
 
Marc Moreno Maza 
2008-01-07