Barbara Liskov in Data Abstraction and Hierarchy, 1988, the following -
If for each object o1 of type S, there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.This is now known as The Liskov Substituion Principle and has been important in defining object hierachies. Currently, it has morphed into a principle that pertains to interfaces and implementations. A simple violation of substitutability , can cause a system's architecture to be polluted with a significant amount of extra mechanisms.