Создание константы из сортировки в Z3 Python API

Учитывая сортировку Z3 и строку s, я пытаюсь создать константу Z3 такого рода с именем s.

Например, учитывая IntSort() и имя "x", я хотел бы получить целочисленную константу с именем "x".

Я знаю, что могу заставить его вызывать Int('x'), но поскольку я создаю эти переменные динамически, я не могу предсказать, какой вид будет иметь данная переменная. Что мне нужно сделать, так это создать переменную того же типа, что и предоставленная системой, но с новым именем (которое я должен указать во время выполнения).

Чтобы быть более конкретным,

1. I get a model for a user defined formula calling the Z3 Solver on it, 
2. I save it in a database (recording for each assignment in such a model the variable name, the value to be assigned to it and the sort of that variable)
3. I retrieve that assignment after a while from the database and I try it o a new formula having the same variables of the original one. 

Для этого я превращаю каждое задание в предложение вида var == value, добавляю их в решатель вместе с целевой формулой и проверяю на выполнимость.

До сих пор я работал только с целочисленной сортировкой, поэтому я жестко запрограммировал преобразование строки в константу с помощью функции Int. Теперь я пытаюсь обобщить подход к разным логикам и разным типам данных, поэтому мне нужно что-то для создания правильной константы из того, что я сохранил в своей базе данных.

По вашему мнению, такой подход разумен? Как вы думаете, есть ли какой-нибудь трюк, чтобы сделать это лучше?


person Andrea Aquino    schedule 13.10.2014    source источник


Ответы (1)


Похоже, вы хотите использовать функцию «Const». Например:

A = DeclareSort('A')
a = Const('a', A)
person Nikolaj Bjorner    schedule 13.10.2014
comment
Вы сделали мой день! Спасибо большое :) - person Andrea Aquino; 14.10.2014