4
A
回答
12
是的,這是可能的。有很多人使用Z3來完成。最簡單的使用Z3 Python API中的程序prove
。例如,假設我們想要顯示公式x >= 1 and x == 2*y
和x - 2*y == 0, x >= 2
是等同的。我們可以使用下面的Python程序來做到這一點(您可以在線嘗試它在rise4fun)。
x, y = Ints('x y')
F = And(x >= 1, x == 2*y)
G = And(2*y - x == 0, x >= 2)
prove(F == G)
我們還可以證明兩個公式是等價的,它是模的一些副條件。例如,對於位矢量(即,機器整數),如果x >= 0
(也可用online),x/2
等於x >> 1
。請注意,x/2
不等於x >> 1
。如果我們試圖證明它,Z3會產生一個反例。
x = BitVec('x', 32)
prove(x/2 == x >> 1)
>> counterexample
>> [x = 4294967295]
的Z3 Python tutorial包含更復雜的例子:它表明x != 0 and x & (x - 1) == 0
爲真,當且僅當x
是二的冪。
一般來說,任何可滿足性檢查器都可以用來表明兩個公式是等價的。 爲了表明使用Z3的兩個公式F
和G
是等價的,我們顯示F != G
是不可滿足的(即,沒有將使得F
不同於G
的任務/解釋)。 這就是如何在Z3 Python API中實現prove
命令。這裏是基於Solver API的腳本:
s = Solver()
s.add(Not(F == G))
r = s.check()
if r == unsat:
print("proved")
else:
print("counterexample")
print(s.model())
相關問題
- 1. 使用glib檢查路徑等價性
- 2. 檢查NOT XOR的布爾狀態與檢查等價性是否相同?
- 3. 使用與linq相同的等價性屬性檢索值
- 4. 檢查; get_model;檢查在Z3 C API
- 5. 如何檢查guvnor Web決策表中的等價性?
- 6. 檢查字母表中變量的等價性。
- 7. 檢查兩個字符串數組的等價性
- 8. Python的等價性?
- 9. 檢查選擇框,當值=等價值
- 10. 檢查等價,別提爲了
- 11. 如何檢查兩個html字符串是否與python等價?
- 12. GridView的asp:HiddenField的等價性
- 13. 按位與檢查平等
- 14. ChangeListener的等價FXML屬性?
- 15. 測試xml.etree.ElementTree的等價性
- 16. Presburger公式的滿足性與Z3
- 17. 與Z3
- 18. 評價一個Z3表達
- 19. jQuery的$變量檢查屬性等於
- 20. 檢查整個枚舉的相等性?
- 21. NSNumberFormatter與stringWithFormat的等價
- 22. 如何通過檢查等價性來刪除矢量中的記錄?
- 23. 使用Z3檢查溢出問題
- 24. Z3公式無法合成檢查
- 25. Z3:檢查模型是否唯一
- 26. 如何檢查與jQuery的DOM平等?
- 27. 是否存在與SELECT ... COUNT(*)... GROUP BY ...等價的等價物?
- 28. 命名等價與等價結構之間的區別?
- 29. 實現算術等於Z3
- 30. 檢查多個字符串與價值
忘了說這是優秀的答案!非常感謝,獅子座! – user311703
非常歡迎。 –
@LeonardodeMoura Rise4fun的鏈接不起作用。他們是否取消了他們的服務 – giga