12
A
回答
17
你可以通過添加新的限制,阻止該模型由Z3返回。例如,假設在由Z3返回的模型中,我們有x = 0
和y = 1
。然後,我們可以通過添加約束Or(x != 0, y != 1)
來阻止此模型。 以下腳本可以解決這個問題。 您可以在線試用:http://rise4fun.com/Z3Py/4blB
請注意,以下腳本有一些限制。輸入公式不能包含未解釋的函數,數組或未解釋的排序。
from z3 import *
# Return the first "M" models of formula list of formulas F
def get_models(F, M):
result = []
s = Solver()
s.add(F)
while len(result) < M and s.check() == sat:
m = s.model()
result.append(m)
# Create a new constraint the blocks the current model
block = []
for d in m:
# d is a declaration
if d.arity() > 0:
raise Z3Exception("uninterpreted functions are not supported")
# create a constant from declaration
c = d()
if is_array(c) or c.sort().kind() == Z3_UNINTERPRETED_SORT:
raise Z3Exception("arrays and uninterpreted sorts are not supported")
block.append(c != m[d])
s.add(Or(block))
return result
# Return True if F has exactly one model.
def exactly_one_model(F):
return len(get_models(F, 2)) == 1
x, y = Ints('x y')
s = Solver()
F = [x >= 0, x <= 1, y >= 0, y <= 2, y == 2*x]
print get_models(F, 10)
print exactly_one_model(F)
print exactly_one_model([x >= 0, x <= 1, y >= 0, y <= 2, 2*y == x])
# Demonstrate unsupported features
try:
a = Array('a', IntSort(), IntSort())
b = Array('b', IntSort(), IntSort())
print get_models(a==b, 10)
except Z3Exception as ex:
print "Error: ", ex
try:
f = Function('f', IntSort(), IntSort())
print get_models(f(x) == x, 10)
except Z3Exception as ex:
print "Error: ", ex
相關問題
- 1. Z3Py - 獲取所有包含表達式的公式
- 2. 檢查一個公式是否是Z3Py中的一個術語
- 3. 加速使用Z3py來檢查公式的可滿足性
- 4. Excel公式 - 檢查單元格是否具有公式
- 5. 檢查公有CloudKit數據庫中記錄的所有權
- 6. Z3py:打印144個變量的大公式
- 7. NUnit的檢查數組中的所有值(公差)
- 8. 關於將檢查所有公共方法的類的方面
- 9. 正則表達式來檢查公式
- 10. 如何在z3py中表示對數公式z 03y
- 11. 如何在Z3py公式中正確使用ZeroExt(n,a)?
- 12. Z3py:轉換一個Z3公式由picosat使用條款
- 13. 原子檢查所有者,檢查模式和讀取文件
- 14. 查詢所有公開的Facebook文章
- 15. 檢查android.view.View的所有權
- 16. 檢查列的所有值
- 17. 檢查所有鍵的routedata.values
- 18. 更改所有的公式在片
- 19. ODFToolkit - 重新計算所有的公式
- 20. 套用公式的所有行
- 21. 查找所有可能的小寫化學公式排列
- 22. 需要在所有行的公式中應用查找方法
- 23. Excel公式爲VLOOKUP與所有行的查找值變化?
- 24. 解開公式?
- 25. 「檢查所有」不檢查複選框
- 26. Excel的定價單 - 尋找具有如果,然後搜索,然後查看所有的公式的公式
- 27. z3py表達式簡化
- 28. 在Excel列上創建公式,所有公式都準備好了公式
- 29. Z3Py在動態網絡中檢查信念的例子
- 30. 檢索Z3Py中枚舉類型的值
我也想問一下,在Z3的SMT語言擴展中可能是一樣的嗎? – 2012-08-08 18:30:24
不,它不是。但是,我認爲在SMT 2.0前端添加此命令是一個好主意。 – 2012-08-08 19:07:22
您可以添加一個註釋來解釋爲什麼使用此方法不支持未解釋的函數和數組?這是一個意外的限制(數據結構不是ExprRefs,或者其他什麼)或者是一個更基本的限制? – EfForEffort 2013-05-04 15:31:17