Mainstream object-oriented languages now offer capabilities of generic types with bounded type parameters, but they typically do not provide support for specifying semantic requirements on the type parameters' methods beyond conformance of signatures. Regrettably, even object-oriented assertion languages, such as JML, have nontrivial limitations in this regard. Yet many interesting parameterized types require additional semantic features if they are to function as intended. We illustrate the issues with a case study of project scheduling based on the Project Management Institute's generic characterization of task breakdowns. We consider algebraic techniques for instantiating parametric types in such a way that the semantic requirements expressed by logic-based constraints propagate to the instantiating types. These techniques argue for more general bindings of actual type parameters for the formal ones which do not have the restrictions of current programming languages. We show that types equipped with constraints should be viewed as theories, and the bindings as morphisms of types as theories. We translate these software specifications into theories in the PVS specification language. These proposals lead to conclusions about language features for more general, semantic bindings of the actual for the formal type parameters, at least in the assertion languages.One of the more recent features of mainstream objectoriented programming languages (Eiffel [16], C++ [21], C# [12], Java 5.0 [10]) is mechanisms for higher order abstractions, generic data types that are parameterized by type variables. Some languages also support, in the context of the partial order of the type system, imposition of requirements on the type parameters, so called bounded parametric polymorphism. These features in some cases come with nontrivial difficulties [1]. Object-oriented assertion languages such as JML [13], OCL [22] and Spec# [4] are yet to develop full support for parametric types.The type error detection a compiler can perform must be restricted to decidable questions or decidable approximations of undecidable questions. When a client module uses a service provided by another module, where correct functioning of the client requires certain specific behavior, the compiler cannot determine if the behavior meets the client's needs. It can only report whether the basic structural demands, the existence of methods with certain type signatures, are met.Some generic types, such as ordered pairs, have meaningful operations that are independent of particular features of the type parameters. Often, however, when a generic type imposes type bounds on its parameters, it does so because it requires not only the presence of certain methods, but also that those methods' behaviors satisfy certain semantic conditions. For example, if a module implementing a generic sort expects that the concrete type has a total order, the algorithm will not yield the specified result if the binary relation used is not a total order.Although a compiler cannot enf...