Продолжая идеи: Существуют ли какие-либо доказуемые языки реального мира?
Я не знаю о вас, но мне надоело писать код, которыйЯ не могу гарантировать.
Задав вышеупомянутый вопрос и получив феноменальный ответ (Спасибо всем!), Я решил сузить свой поиск доказуемого, прагматичного подхода к Haskell .Я выбрал Haskell, потому что он действительно полезен (для него написано много web frameworks , это хороший тест) AND Iя думаю, что это достаточно строго, функционально , что это может быть доказуемо или, по крайней мере, разрешить тестирование инвариантов.
Вот что я хочу (и не смоглинайти)
Мне нужна структура, которая может посмотреть на функцию Haskell, добавить ее, написанную в псевдокоде:
add(a, b):
return a + b
- и проверить, сохраняются ли определенные инварианты в каждом состоянии выполнения.Я бы предпочел какое-то формальное доказательство, однако я бы согласился на что-то вроде средства проверки моделей.
В этом примере неизменным будут значения, заданные a и b возвращаемое значение всегда равно сумме a + b .
Это простой пример, но я не думаю, что такая структура невозможна.Конечно, будет верхний предел сложности функции, которую можно протестировать (10 строковых входов в функцию, безусловно, займут много времени!), Но это будет способствовать более тщательному проектированию функций и ничем не отличается от использования других формальныхметоды.Представьте себе использование Z или B, когда вы определяете переменные / наборы, вы чертовски уверены, что задаете переменным наименьший возможный диапазон.Если ваш INT никогда не будет выше 100, обязательно инициализируйте его как таковой!Подобные методы и правильная декомпозиция проблемы должны, как мне кажется, обеспечить удовлетворительную проверку чисто функционального языка, такого как Haskell.
Я пока еще не очень разбираюсь в формальных методах или Haskell.Дайте мне знать, если моя идея правильная, или, может быть, вы думаете, что haskell не подходит?Если вы предлагаете другой язык, убедитесь, что он прошел тест "has-a-web-framework", и прочитайте оригинальный вопрос : -)