перевод семантики цикла в SMT-LIB - PullRequest
0 голосов
/ 10 декабря 2018

Существуют ли стандартные подходы для перевода семантики циклов for в императивных языках (скажем, C или Java) в SMT-LIB?Я думал о том, чтобы определить их как аксиомы SMT-LIB, но это кажется нерегулярным, и я понимаю, что переводчик не всегда может быть решен решающими, скажем, z3.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Классический «трюк» - развернуть петли в пределах границ.Эта идея возникла в сообществе аппаратного обеспечения, где ограниченные доказательства встречаются гораздо чаще.Но это также относится и к программному обеспечению.CBMC (https://www.cprover.org/cbmc/) - это система, которая делает это для программ на языке C. Очевидно, что это предоставит «доказательство» только в тех случаях, когда достаточно номера развёртывания.

Обратите внимание, что развёртывание может быть непрактичным, так какэто может привести к взрыву кода, в таких случаях вы можете использовать трюк "uninterpreted-function": то есть вы развернете фиксированное число раз, а затем абстрагируетесь до конца вычисления. Это может привести к ложноположительным результатам,т. е. решатель может возвращать фиктивную модель, но эту идею можно использовать в системе, основанной на CEGAR (counter-example-guided-abstraction-уточнение).

В общем случае циклы подразумевают инварианты и доказательства для программс использованием циклов (или рекурсии) требуется выяснить, что это за инварианты, и доказать их с помощью индукции. Решатели SMT не делают индуктивных доказательств. Для таких задач лучше использовать подлинный инструмент для доказательства теорем (Изабель, HOL, HOL-Light, Coq, Agda, Lean; выбирайте сами) Обратите внимание, что большинство этих систем в наши дни могут использовать SMT-решатель в качестве «оракула» для ускорения.Доказательства для подцелей, так что в этом смысле вы получаете лучшее из обоих миров.В частности, Lean происходит из линии z3 и определенно стоит проверить: https://leanprover.github.io/

0 голосов
/ 10 декабря 2018

Нет, стандартного способа нет.И рассуждения о петлях часто неразрешимы.Обработка петель - это наполовину наука, наполовину искусство.

Модный способ обработки петель в наши дни - использование клаузул Рога.Вот хорошее введение: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/nbjorner-yurifest.pdf

...