Использование текстового файла для ввода модели Z3

#.net #z3

#.net #z3

Вопрос:

Я использую Z3 через его .Net Api. Я создаю модели, которые имеют значительно огромное количество ограничений. До сих пор я использовал соответствующие команды Z3 (в .Net Api) для построения моей модели построчно. Но теперь, когда модель увеличилась в размерах, время, необходимое для создания модели, очень велико. Я подумал, есть ли способ создать модель в виде текстового файла и ввести завершенную модель в решатель Z3 за один раз?

Ответ №1:

Ваш вопрос довольно загадочный, но все SMT-решатели поддерживают так называемый формат ввода SMTLib2: http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf

Итак, по крайней мере теоретически, вы можете записать свои ограничения в файл в формате SMTLib, как описано в приведенном выше документе, а затем вызвать z3 для этого файла.

Но это не обязательно будет быстрее, чем прямое использование API: на самом деле, я ожидаю, что вызов z3 через его API будет быстрее, поскольку он позволяет избежать этапа «запись в файл, чтение из файла»; но это может работать лучше в вашем конкретном случае использования, есливы можете повторно использовать некоторые из этих ограничений во многих вызовах.

Ответ №2:

Если вы используете python api, вы можете использовать эти две функции, если работаете с текстовыми файлами или строковым вводом:

parse_smt2_file() и parse_smt2_string() который вы можете найти здесь