Решатель SMT с пользовательскими теориями?

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

Z3 позволяет вам определять свои собственные вещи с помощью неинтерпретируемых функций, но это не всегда хорошо работает, когда ваши процедуры принятия решений рекурсивны. Раньше они позволяли использовать плагины, но, я думаю, это было ограничено.

Мне интересно, есть ли у кого-нибудь рекомендации относительно достойного решателя SMT, который позволяет писать процедуры принятия решений для пользовательских теорий?


person jmite    schedule 01.10.2017    source источник


Ответы (1)


Существует несколько вариантов, учитывая, что наиболее разумные решатели SMT имеют открытый исходный код, вы можете интегрировать теоретические решатели с любыми деталями в зависимости от того, сколько времени и энергии вам нужно потратить.

Опять же, я бы сказал, что для первой версии вы должны довольно далеко продвинуться с внешней интеграцией, когда вы позволите решателю SMT иметь дело с пропозициональным SAT и неинтерпретируемыми функциями (и арифметикой, если вам это нужно). Затем вы можете попросить у решателя модель и добавить аксиомы теории обратно до тех пор, пока пропозициональная модель, которую вы получаете из решающей программы, не согласуется с вашей теорией (или вы не получите UNSAT). Не все задания в модели высказываний будут уместными. Вы можете минимизировать количество рассматриваемых назначений, применив двойное распространение (http://www.cs.utexas.edu/users/hunt/FMCAD/FMCAD14/proceedings/29_niemetz.pdf).

person Nikolaj Bjorner    schedule 01.10.2017