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