1) The document discusses different types of polymorphism including ad-hoc polymorphism through overloading and coercion, parametric polymorphism through generic functions, and inclusion polymorphism through subclassing.
2) Parametric polymorphism allows functions to work on arguments of different types, executing the same code. Ad-hoc polymorphism makes functions appear to work on different types through overloading or coercion.
3) Inclusion polymorphism uses subtyping to allow functions written for superclasses to work on subclasses through inheritance.