Я просматривал документацию Z3Py и для таких, как я, не смог понять, как получить доказательство от решателя (например, если я начну с экземпляра законов Де Моргана, как я могу извлечь доказательство из Z3Py экземпляра, шаг за шагом). Единственная ссылка, которую я видел, была для proof(self)
в классе Solver
, который предположительно получает доказательство последней проверки, если построение доказательства включено, но я продолжаю возвращать очень расплывчатую ошибку:
Traceback (most recent call last):
File "example.py", line 36, in <module>
prove(prop)
File "example.py", line 15, in prove
print(s.proof())
File "src/api/python/z3.py", line 5851, in proof
File "src/api/python/z3core.py", line 3770, in Z3_solver_get_proof
z3types.Z3Exception: 'invalid usage'`
Поэтому я считаю, что построение доказательства отключено по умолчанию (вероятно, из-за накладных расходов). Как его включить? Или это даже не достигает того, что, как мне кажется, должно быть достигнуто путем демонстрации вывода доказательства шаг за шагом из таких простых аксиом, как идемпотентность и т. д.?
Обновление: На самом деле, попробовав (и поверьте мне, я убедился, что моя версия самая последняя с веб-сайта Microsoft Research, и даже пересобрал ее и все такое) set_param
неопределенный:
>>> from z3 import *
>>> print [s for s in dir(z3) if 'set_param' in s]
['Z3_fixedpoint_set_params', 'Z3_set_param_value', 'Z3_solver_set_params']
>>> set_param
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'set_param' is not defined
Впоследствии я пытался использовать Z3_set_param_value
, Z3_solver_set_params
, а затем set_option(proof=True)
(потому что он был указан как псевдоним для set_param` в справочнике) безрезультатно:
>>> set_option(proof=True)
Error setting 'PROOF', reason: unknown option.
terminate called after throwing an instance of 'z3_error'
Aborted (core dumped)