我试图使用Z3的定点引擎检查一个简单的Timed Automata的可达性。
TA I&m; m建模是:
- >(x = 0& 0< = c< = 5) - [c> 2] - >(x = 1)
我想验证状态x = 1& c = 3是可达的。为此,我将以下内容输入Z3:
(declare-rel T (Int Real Int Real))
(declare-rel REACH (Int Real))
(declare-var x Int)
(declare-var c Real)
(declare-var nx Int)
(declare-var nc Real)
(declare-var delay Real)
(rule (! (=> (and (= x 0) (> c 2.0)) (T x c 1 c)) :named stepint))
(rule (! (=> (and (REACH x c) (T x c nx nc)) (REACH nx nc)) :named tstep))
(rule (! (=> (and (= c 0.0) (= x 0)) (REACH x c)) :named initialstates))
(rule (! (let ((a!1 (and (>= delay 0.0) (= nc (+ c delay)) (or (not (= x 0)) (< nc 5.0)))))
(=> a!1 (T x c x nc))) :named TICK))
(query (and (REACH x c) (= x 1) (= c 3.0))
:print-certificate true)
当我在up4fun上运行上面的Z3时,我回来了:
formula false in model: (= REACH_1_0 3.0)
formula false in model: (= REACH_0_0 1)
formula false in model: (= query!0_0_n 1)
formula false in model: (= query!0_1_n 3.0)
sat
(REACH 1 3.0)
这表明x = 1&amp; c = 3是可达的。模型中&#34;公式错误是什么意思&#34;?这只是信息性的还是Z3警告我可能形成不良的输入?
答案 0 :(得分:0)
错误显示在&#34; opt&#34;科。我还没有将修复程序移植到unstable分支。它会发生,但如果不耐烦,请使用&#34; opt&#34;科。 遗憾。