我想用C++ API在Z3中定義成員關係。我想通過以下方式做的:在z3中設置成員關係
z3::context C;
z3::sort I = C.int_sort();
z3::sort B = C.bool_sort();
z3::func_decl InSet = C.function("f", I, B);
z3::expr e1 = InSet(C.int_val(2)) == C.bool_val(true);
z3::expr e2 = InSet(C.int_val(3)) == C.bool_val(true);
z3::expr ite = to_expr(C, Z3_mk_ite(C, e1, C.bool_val(true),
Z3_mk_ite(C,e2,C.bool_val(true),C.bool_val(false))));
errs() << Z3_ast_to_string(C,ite);
在這個例子中,一組由整數2和3由我肯定有一個更好的方式來定義的關係,特別是一組成員關係,但我真的是一名Z3新秀。有誰知道最好的?
真的謝謝。如何使用C API編寫斷言? 如果我想使用Z3_mk_set_sort,我該如何定義一組元組?例如,在整數值(即(1,2)∈{(1,2),(4,6),(5,1)})? – 2013-04-23 22:03:25
關於斷言,首先你必須創建一個求解器對象'Z3_mk_solver',增加它的引用計數器'Z3_solver_inc_ref',然後調用'Z3_solver_assert'。順便說一句,C++ API有很多智能指針(例如,z3 :: expr,z3 :: solver,...),它們使我們所有的引用計數。 – 2013-04-24 05:42:18
關於元組集,首先我們必須使用'Z3_mk_tuple_sort'創建一個元組排序,然後我們使用新的元組排序作爲'Z3_mk_set_sort'的一個參數。 – 2013-04-24 05:43:59