簡體   English   中英

Z3 SMT求解器中的存儲機制

[英]Storing mechanisms in Z3 SMT solver

在這里,我將一段代碼作為Z3在線版本的輸入。 有沒有辦法獲得4個測試用例作為z3的輸出。 當我將其提供給z3時,它一次只顯示一個測試用例,否則顯示不滿意並且沒有可用的模型。 上述問題有解決方案嗎? 所有的斷言都可以同時工作並給出類似1,2,3,4的答案嗎? 在每個斷言之后再次添加(check-sat)和(get-value(answer))將輸出顯示為answer為1。其他三種情況為unsat.I想要輸出,例如answer = 1,answer = 2,answer = 3,answer此代碼= 4,您能幫我嗎?

(declare-const answer Int) 
(assert (= answer 1) ) 
(check-sat)
(get-value(answer))
(assert (and ( not ( = answer 1 ) ) (= answer 2)) ) 
(check-sat)
(get-value(answer))
(assert (and ( and ( not ( = answer 2 ) ) ( not ( = answer 1 ) ) ) (= answer 3)) ) 
(check-sat)
(get-value(answer))
(assert (and ( and ( and ( not ( = answer 3 ) ) ( not ( = answer 2 ) ) ) ( not ( = answer 1 ) ) ) (= answer 4)) ) 
(check-sat)
(get-value(answer))

您可以發出

(check-sat)
(get-value (answer))

盡可能多地 與您的斷言交織在一起。 任何時候調用它,它都會檢查到目前為止的所有斷言。

還有一些方法可以“忘記”先前的斷言,但似乎這並不是您要追求的。 有關SMTLib命令語言的詳細信息,請參見: http ://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf,第3.9節。

我不確定為什么要用Python標記問題,因為這顯然是SMTLib問題。 如果您使用的是z3py接口,則可以在將s聲明為Solver之后多次調用s.check()來在此執行非常相似的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM