如何从Z3 smtlib2公式中获取声明?

时间:2016-10-05 20:20:30

标签: z3

我想使用C ++ API对Z3进行增量求解。

2012年已经有一些老问题:

Z3 4.0 Z3_parse_smtlib2_string

Z3 4.0: get complete model

Z3 4.3.1 C-API parse_smtlib2_string: Where to get declarations from?

我想知道是否有新的Z3版本的解决方案,4.4.2。

基本上我想做的就是这样:

CoInductive LListEq (A:Set) : LList A -> LList A -> Prop :=
| LNilEq : LListEq A LNil LNil
| LConsEq x lst1 lst2 : LListEq A lst1 lst2 -> 
  LListEq A (LCons x lst1) (LCons x lst2).

但我不知道如何获得声明。我尝试使用Z3_get_smtlib_num_decls,但它只能用于smtlib1,而不能用于smtlib2。

有没有办法检索声明?函数Z3_get_smtlib2_num_decls将来会实现吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

就像Nikolaj在Z3 4.3.1 C-API parse_smtlib2_string: Where to get declarations from?中所说的那样,你必须遍历表达式(断言)来收集声明。 tptp示例的链接已中断,但该文件随Z3一起显示为examples/tptp/tptp5.cpp(请参阅collect_decls函数)。

另请参阅:Display declarations parsed from an SMT-LIB2 file