如何以编程方式调用Z3

如何以编程方式调用Z3,z3,Z3,嗨,我是Z3 SMT解决方案的新手。我知道您可以使用相关的API以编程方式调用Z3。但是我想用Z3 SMT solver做以下事情: 如何以编程方式向Z3提供一个输入文件 如何以增量方式获取解决方案 例如: while ((check-sat) returns sat) get the assignments for all boolean vairables 最后,在求解公式后,我如何要求Z3将结果保存到一个输出文件中 我有什么想法或文件可以看吗 万分感谢 Z3发行版包含几个(编程API

嗨,我是Z3 SMT解决方案的新手。我知道您可以使用相关的API以编程方式调用Z3。但是我想用Z3 SMT solver做以下事情:

  • 如何以编程方式向Z3提供一个输入文件
  • 如何以增量方式获取解决方案
  • 例如:

    while ((check-sat) returns sat)
      get the assignments for all boolean vairables
    
    最后,在求解公式后,我如何要求Z3将结果保存到一个输出文件中

    我有什么想法或文件可以看吗


    万分感谢

    Z3发行版包含几个(编程API)示例

    • examples/c/test_capi.c:许多使用c接口的小示例
    • examples/dotnet/test_managed.cs:C中的类似示例#
    • 示例/maxsat/maxsat.c:Z3API之上的maxsat过程(在c中)
    • examples/ocaml/test_mlapi.ml:以ml为单位的示例
    • 示例/theory/test\u user\u theory.c:演示如何实现外部理论(插件)的示例

    嘿,我尝试使用Z3_parse_smtlib2_文件API读取输入smt2文件,然后使用check API。但是Z3给了我意想不到的结果。在使用checkapi之前(完成解析之后),我是否遗漏了什么?是否有Z3_parse_smtlib2_文件API的完整示例?函数Z3_parse_smtlib2_文件返回一个指针,指向包含SMT 2.0文件中所有断言的表达式。断言未在Z3上下文中断言。用户负责调用Z3_assert_cnstr。示例
    parser\u example1
    显示了如何执行此操作。示例是针对
    Z3_parse_smtlib_string
    ,但其思想是相同的。