Тут написано c = a - b. Что если я ошибся и написал c = a + b? Или это надо дублировать в самой функции? Если дублировать, то тоже какой в этом смысл? Будет практически вынужденная копипаста.
В любом случае, компилятор сами имена не понимает без ИИ, и если subtract везде реализован через +, он не сможет сказать что что- то не так, если нет избыточности, благодаря которой можно увидеть противоречие.
Модель программы описывается в системе типов. Если программа тайп-чекается, значит она работает так, как подразумевалось. Да, ошибку в системе типов (модели программы) тоже можно допустить (иначе говоря - неправильно из головы перенести модель в типы).