我正在学习 Z3,并希望输入一些 Hoare 逻辑所述的验证条件,并获得给定 Hoare 三元组的模型。
到目前为止,我只能验证分配,这是一个示例(只是为了检查我是否做对了):
Given: { x< 40 } x :=x+10 { x < 50}
(declare-const x Int)
(assert (< x 50))
(assert (< (+ x 10) 50 ))
(check-sat)
但我不知道如何验证 If-Else,例如:
{0 ≤ x ≤ 15 } if x < 15 then x := x + 1 else x := 0 endif {0 ≤ x ≤ 15 }
或 While 循环(部分正确性)
{x ≤ 10} while x < 10 do x := x + 1 done {¬x < 10 ∧ x ≤ 10}
我尝试使用 if-else 的 ite 命令,但它似乎不受支持。
希望你能帮我解决这个问题。