Logical proof (that a model is correct or optimal) is in principle not even possible. It's only a model, after all - either it fits the real world well enough, or it doesn't. It's up to you to decide what well enough means. That said, some principles apply.
The essence of type theory requires that any individual member of a type can play all roles of that type. Can each possible Name be a person's Given Name? or Family Name? Could each Name be a Company Name? In principle, maybe - there are no laws about these things, at least where I live. However, you'd think that a mother was pretty strange who called her newborn child "Megasoft Holdings Limited"... or a company that called itself "Michael". So at least we can say that there are more types here than just the one generic Name type.
Further, although both Clifford and Heath can and do occur as both a Family Name and as a Given name, some Names only ever occur as one of those. For example, "van der Graaf" is only ever a family name. If all members of type A can play all roles of type B, but not vice versa, you have a subtype (A is a subtype of B). It's possible that any Given Name might occur as a Family Name, at least in some cultures. So in this case, you might argue for a subtype relationship between Given Name and Family Name. I would suggest however that Given Name is not a direct subtype of Family Name, rather that both derive from some common super-type, like Personal Name for example. The role involved here is "Person is called Personal Name", without being specific about whether that Personal Name is a Given Name or a Family Name. Pragmatically however, unless you had a need for a supertype role such as this, you wouldn't bother with subtyping at all; just create two separate types. Or just one type, if you need to ask a question where the context allows either. That's the beauty of modeling - you get to decide which aspects of the real world matter to you in this case. It's only a model, it can be accurate without being fully detailed. It can gloss over unimportant aspects of the real world.
If you anticipate the need to ask the question "which Names serve as both a Company Name and as a Given Name?", and that kind of question is important enough in your model, then make the Name supertype. If you also care about the fact that there are Company Names which cannot be Given Names, or vice versa, you will need the subtypes. If not, use a single type..
But don't get confused into thinking that just because two values are comparable, they have related types. The Temperature in degrees Celcius and a Height in millimeters are both numbers, and so are comparable in mathematics, but the comparison is meaningless. The two types are really not related except in mathematics. You aren't modeling mathematics however, but some other domain, so use separate value types.
I hope that helps.