如何使用commad行

时间:2015-12-05 14:16:25

标签: z3 datalog

我尝试在Z3(版本:4.3.2)中运行数据记录文件(test.dl,来自http://rise4fun.com/Z3/tutorialcontent/fixedpoints#h21),如下所示。

(set-option :fixedpoint.engine datalog)
(define-sort s () (_ BitVec 3))
(declare-rel edge (s s))
(declare-rel path (s s))
(declare-var a s)
(declare-var b s)
(declare-var c s)

(rule (=> (edge a b) (path a b)))
(rule (=> (and (path a b) (path b c)) (path a c)))

(rule (edge #b001 #b010))
(rule (edge #b001 #b011))
(rule (edge #b010 #b100))

(query (path #b001 #b100))
(query (path #b011 #b100))
(query (path #b001 b)
  :print-answer true)

使用命令z3 test.dl,但有erorr消息: enter image description here

有人可以帮助您运行数据记录文件吗?

感谢。

1 个答案:

答案 0 :(得分:0)

此文件的输入格式为SMT2,而不是Datalog。即使您想运行Datalog引擎,该文件也不是Datalog格式,因此解析器会为您提供错误。

使用命令z3 -smt2 test.dl运行Z3成功,因为这会强制Z3使用SMT2解析器而不是Datalog解析器。或者,将文件重命名为test.smt2并运行z3 test.smt2

这两个命令产生了我认为的预期输出 sat unsat sat (or (= (:var 0) #b011) (= (:var 0) #b010) (= (:var 0) #b100))