Z3:ParseSMTLIB2File / String

时间:2016-01-27 18:34:43

标签: java api z3

我使用ParseSMTLIB2File来解析smt2文件Context.smt2,该文件具有数据类型,常量和函数的声明; e.g。

    ; Sort Declarations
    (declare-sort tla_sort_Str)
    (declare-const x tla_sort_Str)
    (declare-const y tla_sort_Str)
    (declare-const z tla_sort_Str)

然后,我使用ParseSMTLIB2String来解析字符串"(assert(= x y))"。以下是我的代码:

     BoolExpr expr = ctx.parseSMTLIB2File("Context.smt2", null, null, null, null);
     String str = "(assert (= x y))";
     BoolExpr assert = ctx.parseSMTLIB2String(str, null, null, null, null);

不幸的是,我收到了一个错误。我想原因是ctx不知道tla_sort_Str,x和y是什么。如果不是,我如何将Context.smt2中的信息传递给parseSMTLIB2String?非常感谢你。

1 个答案:

答案 0 :(得分:1)

那是什么' null'参数是(其中一个是提供之前构建的排序)。

然而,parseSMTLIB2File并非支持SMT2或任何扩展的所有功能。它基本上会读取断言并忽略其他所有内容,可能包括排序声明。 SMT2是一种交互语言,但是在parseSMTLIB2File的范围内没有交互,因此不会执行任何命令,例如,最重要的示例是User +----+-------+ | Id | Email | +----+-------+ | 1 | a@b.c | | 2 | b@c.d | | 3 | c@d.e | +----+-------+ Attributes +----+-----------+ | Id | Attribute | +----+-----------+ | 1 | name | | 2 | gender | | 3 | age | +----+-----------+ UserAttributes +--------+--------+--------+ | UserId | AttrID | Value | +--------+--------+--------+ | 1 | 1 | Foo | | 1 | 2 | Male | | 1 | 3 | 21 | | 2 | 1 | Bar | | 2 | 2 | Female | | 3 | 1 | FooBar | | 3 | 2 | Male | | 3 | 3 | 25 | +--------+--------+--------+ 命令,其未被执行。