Можно ли проверить / проверить модель / проверить функции Haskell с помощью свойства правильности?

Продолжение идей в: Существуют ли какие-либо доказуемые реальные языки?

Я не знаю как вы, но я Мне надоело писать код, который я не могу гарантировать.

Задав вышеуказанный вопрос и получив феноменальный ответ (Спасибо всем!), я решил сузить круг своих поисков доказуемого, прагматичного подхода к Haskell ]. Я выбрал Haskell, потому что он действительно полезен (для него написано много веб фреймворков , это кажется хорошим тестом) И Я думаю, что он достаточно строг, функционально , чтобы его можно было доказать или, по крайней мере, разрешить проверку инвариантов.

Здесь ' s то, что я хочу (и не смог найти)

Мне нужен фреймворк, который может смотреть на функцию Haskell, добавлять, записанный в psudocode:

add(a, b):
    return a + b

- и проверять, сохраняются ли определенные инварианты для каждого состояния выполнения . Я бы предпочел какое-нибудь формальное доказательство, однако я бы согласился на что-то вроде проверки моделей.
В этом примере неизменным будет то, что при заданных значениях a и b возвращаемое значение всегда будет суммой a + b .

Это a простой пример, но я не думаю, что такая структура невозможна. Конечно, будет верхний предел сложности функции, которую можно протестировать (10 строковых входов в функцию, безусловно, займет много времени!), Но это будет способствовать более тщательному проектированию функций и ничем не отличается от использования других формальных методы. Представьте, что вы используете Z или B, когда вы определяете переменные / наборы, вы чертовски уверены, что даете переменным минимально возможные диапазоны. Если ваш INT никогда не будет выше 100, убедитесь, что вы инициализировали его как таковой! Подобные техники, и правильная декомпозиция проблемы должна, я думаю, позволить удовлетворительную проверку чисто функционального языка, такого как Haskell.

Я еще не очень опытен в формальных методах или Haskell. Дайте мне знать, удачна ли моя идея или, может быть, вы думаете, что haskell не подходит? Если вы предлагаете другой язык, убедитесь, что он прошел тест «has-a-web-framework», и прочтите исходный вопрос : -)

66
задан Community 23 May 2017 в 12:32
поделиться