Two aspects of reverse polymorphism

If we think about it, we can divide the problem of reverse polymorphism into two separate problems. The first is a question of identity. If I have a value of type Mammal, can I tell whether or not it is in fact a Dog?

The second is then the task of assignment. If I do know it is a dog, can I then assign the value to a variable of type Dog?

Languages either do not address reverse polymorphism at all, address these two issues separately, or combine them together and address them as one.

[audio] [real] Text to accompany slide9, in Chapter 10 of An Introduction to Object-Oriented Programming