簡體   English   中英

具有刪除特定約束的能力的增量SMT求解器

[英]Incremental SMT solver with ability to drop specific constraint

是否有增量SMT求解器或某些增量SMT求解器的API,我可以逐步添加約束,我可以通過某個標簽/名稱唯一地標識每個約束?

我想要唯一地識別約束的原因是我可以稍后通過指定標簽/名稱來刪除它們。 刪除約束的需要是由於我早期的約束與時間無關。 我看到使用Z3我不能使用基於push / pop的增量方法,因為它遵循基於堆棧的想法,而我的要求是刪除特定的早期/舊約束。 使用基於假設的Z3的其他增量方法,我將不得不執行格式“(check-sat p1 p2 p3)”的check-sat,即如果我有三個斷言要檢查那么我將需要三個布爾常量p1,p2 ,p3,但在我的實現中,我會有數千個斷言一次檢查,間接需要數千個布爾常量。 我還檢查了JavaSMT,一個用於SMT求解器的Java API,看看API是否提供了一些更好的方法來處理這個要求,但是我只看到通過“addConstraint”或“push”添加約束的方法,並且無法找到任何方法刪除或刪除特定約束,因為pop是唯一可用的選項。

我想知道是否有任何增量求解器,我可以添加或刪除由名稱唯一標識的約束,或者有一種API,其中有另一種方法來處理它。 我將不勝感激任何建議或意見。

基於“堆棧”的方法在SMTLib中幾乎是根深蒂固的,所以我認為找到一個完全符合你想要的解算器會很困難。 雖然我同意這將是一個很好的功能。

話雖如此,我可以想到兩個解決方案。 但是,兩者都不能很好地滿足您的特定用例,盡管它們都能正常工作 這可以歸結為這樣一個事實,即你希望能夠在每次看到check-sat電話中挑選你的約束。 不幸的是,這將是昂貴的。 每次求解器執行check-sat它會根據所有當前斷言學習很多引理,並且相應地修改了許多內部數據結構。 基於堆棧的方法基本上允許求解器“回溯”到這些學習狀態之一。 但是,當然,這不允許像你觀察到的采摘櫻桃。

所以,我認為你留下了以下其中一個:

使用check-sat-assume

這基本上就是你所描述的。 但回顧一下,你只需給它們起名字,而不是斷言布爾。 所以這:

  (assert complicated_expression)

  ; for each constraint ci, do this:
  (declare-const ci Bool)
  (assert (= ci complicated_expression))
  ; then, check with whatever subset you want
  (check-sat-assuming (ci cj ck..))

這確實增加了你必須管理的布爾常量的數量,但從某種意義上說,這些是你想要的“名字”。 我知道你不喜歡這個,因為它引入了很多變量; 確實如此。 這是有充分理由的。 請參閱此處的討論: https//github.com/Z3Prover/z3/issues/1048

使用reset-assertions和:global-declarations

這是一種變體,允許您在每次調用check-sat任意挑選斷言。 但它不會便宜。 特別是,每次遵循此配方時,解算器都會忘記所學到的一切。 但它會完全符合您的要求。 首要問題:

(set-option :global-declarations true)

並以某種方式在您的包裝中自己跟蹤所有這些。 現在,如果你想任意“添加”約束,你不需要做任何事情。 只需添加它。 如果你想刪除某些東西,那么你說:

 (reset-assertions)
 (assert your-tracked-assertion-1)
 (assert your-tracked-assertion-2)
;(assert your-tracked-assertion-3)  <-- Note the comment, we're skipping
 (assert your-tracked-assertion-4) 
 ..etc

等等,即你“刪除”你不想要的那些。 請注意:global-declarations調用很重要,因為它會確保在調用reset-assertions時所有數據聲明和其他綁定都保持不變,這會告訴求解器從它假設和學習的內容開始。 。

實際上,您可以根據需要管理自己的約束。

摘要

這些解決方案都不是您想要的,但它們都可以工作。 如果不采用這兩種解決方案之一,就沒有符合SMTLib標准的方法可以滿足您的需求。 然而,個別解決者可能會有其他伎倆。 您可能需要與他們的開發人員核實,看看他們是否可能為此用例提供自定義內容。 雖然我懷疑是這種情況,但最好還是找出來!

另請參閱Nikolaj之前的回答,這是非常相關的: 增量求解如何在Z3中起作用?

暫無
暫無

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

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