考虑使用Z3模块与Z3解算器接口的以下OCaml代码片段。代码试图定义Z3新TPair
数据类型与接受两个整数参数一个构造函数T
:Z3的OCaml库引发了分段错误
open Z3
open Z3.SMT
open Z3.Expr
open Z3.Symbol
open Z3.Datatype
open Z3.FuncDecl
open Z3.Arithmetic
open Z3.Arithmetic.Integer
open Z3.Quantifier
let _ =
let cfg = [("model", "true"); ("proof", "false")] in
let ctx = (mk_context cfg) in
let sym = Symbol.mk_string ctx in
let s_Int = mk_sort ctx in
(* (declare-datatypes() ((TPair (T Int Int))))*)
let s_T = mk_constructor_s ctx "T" (sym "isT")
[sym "left"; sym "right"]
[Some s_Int; Some s_Int] [0; 0] in
let s_TPair = mk_sort_s ctx "TPair" [s_T] in
let _::s_content::_ = Constructor.get_accessor_decls s_T in
let s_isT = Constructor.get_tester_decl s_T in
let solver = Solver.mk_solver ctx None in
begin
Printf.printf "***** CONTEXT ******\n";
print_string @@ Solver.to_string solver;
Printf.printf "\n*********************\n"
end
到get_tester_decl
和get_accessor_decls
都扔分割故障的电话。可能是什么原因?
报告给图书馆的作者。 – camlspotter
这里给出的示例源代码编译(带有警告)并且对我运行良好。 OCaml有一点点缺陷。您能否告诉我们您正在使用哪个版本以及从哪里获得?此外,请确保您使用的是最新的Z3源代码,并从源代码编译,因为自上次二进制发行版以来,已有多个修复程序。 –