Covariant Deep Subtyping Reconsidered

For people interested in a full copy of the following paper, please send 
me mail to request a postscript.

	Covariant Deep Subtyping Reconsidered
		  David L. Shang


Covariant deep subtyping has been viewed as a way to narrow the range 
of a component in subtypes. In this paper, however, we see covariant 
deep subtyping in a new light -- a way to clarify a vague but fixed 
range of a component in subclasses. We will examine such concepts as 
class substitution, generic class by BETA/Cluster, and a number of 
theoretic approaches in relation to covariant deep subtyping.

1.0. Traditional Covariance Is Neither Sound Nor Required
	-- When subclasses require restrictive covariance, there is 
	   usually an untrue promise in their superclass. 

2.0  Covariance Reconsidered: Range Is Not Narrowed
	-- covariance is not a way to narrow the range of a component, 
	   but rather, a way to clarify a vague but fixed range of a 
	   component in subclasses. 

3.0  Substitution: Type Dependency Should Be Considered
	-- Expand Wegner and Zdonik's definition of substitutability
	   to cover the situiation of type dependency

4.0  Set Theory Reconsidered: Input Type May Depend on Function Type Itself
	-- Reconsider Cardelli's set theory where the input type
	   depends the function type itself

5.0  Practical Work Revisited
	5.1 Class Substitution
		-- discussion of Palsberg and Schwartzbach's class
		   substitution: non-fixed dependency leads the
		   disablement of polymorphism
	5.2 Dynamic Genericity
		-- Beta/Cluster's generic class -- a natual to describe
		   covariance and type dependency:
		   * type dependency is explicitly specified when
		     covariance is required in subclasses(subtypes)
		   * the dependency will be fixed at a certain subclass
		     level from which polymorphism is then enabled
		   * run-time type check is only required by reverse 

		     substitution or cross substitution which is
		     not required by close world assumption
		   * Static local checkability for close world assumption

6.0  Theoretic Work Revisited
	6.1 Covariance Versus Contravariance Debate
		* covariance versus contravariance
		* subclass is not always subtype
		* Castagna's view on covariance
	     Out view:
		* covariance is not a violation to substitutability
		* subclass should be subtype
		* we can live without contravariance
	6.2 Selfclass
		* selfclass dependency
		* a fixed view on selfclass by LOOP
		* selfclass view by Cluster's generic class
	6.3 ML Module Language
		-- a comparison of Cluster's generic class with
		   ML's structure, signature and functor

7.0  Examples Revisited
	7.1  2-D and 3-D Points And Their Equality
		-- Point3D is neither subclass nor subtype of Point2D, but
		   a subclass and a subtype of PointAtLeast2D
	7.2  Homogeneous Object Collection
	7.3  Object Reference
		* type dependency with object reference (pointer)
		* plain subclass match rule by Cluster
		* reference may create a hole without the spec. of
		  type dependency, e.g. C++ object slicing

8.0  Conclusion