I believe that Ada, or perhaps a specific subset with some extensions, achieves most of these goals. You can definitely restrict types to be a range or enumeration of e.g. ints, and they have some facility for contract based function interfaces.
https://en.wikibooks.org/wiki/Ada_Programming/Type_System#Na...