Я решил использовать Z3 с C ++ и установил последнюю версию из git.При попытке выполнить пример git (следующий код является упрощенным примером)
#include "z3++.h"
#include <iostream>
using namespace z3;
using namespace std;
int main() {
context c;
expr x = c.bool_const("x");
expr y = c.bool_const("y");
expr conjunction = (!(x && y)) == (!x|| !y);
solver s(c);
s.add(!conjunction);
cout << s << "\n";
cout << s.to_smt2() << "\n";
switch (s.check()) {
case unsat: std::cout << "de-Morgan is valid\n"; break;
case sat: std::cout << "de-Morgan is not valid\n"; break;
case unknown: std::cout << "unknown\n"; break;
}
return 0;
}
Я мог бы получить этот результат.
(declare-fun y () Bool)
(declare-fun x () Bool)
(assert (not (= (not (and x y)) (or (not x) (not y)))))
;
(set-info :status unknown)
(declare-fun y () Bool)
(declare-fun x () Bool)
(assert
(not (= (not (and x y)) (or (not x) (not y)))))
(check-sat)
de-Morgan is valid
Но я получил эту ошибку.
a.out(92870,0x7fff9182c380) malloc: *** error for object 0x7f7fdc6217f8: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
Из этого выяснилось, что эта ошибка произошла после завершения программы.Мы также обнаружили, что эта ошибка возникает при обращении к уже выпущенному конструктору, но мы не видим такой точки в этом примере.
Благодарю тех, кто является экспертом.