There are actually are fairly sophisticated things and fairly sophisticated reasoning that goes on inside type checking In practice, of course, there needs to be a balance between the complexity of the type-system and its expressiveness. 