Type systems are hard to get right, and getting them wrong can lead to inconsistencies.
Set theory can serve as the basis for a specification language without types.
This possibility, which has been widely overlooked, offers many advantages. Untyped set theory is simple and is more flexible than any simple typed formalism. Polymorphism, overloading, and subtyping can make a type system more powerful, but at the cost of increased complexity, and such refinements can never attain the flexibility of having no types at all. Typed formalisms have advantages too, stemming from the power of mechanical type checking. Predicate subtypes offer another approach.