[英]Assign value to a bitvector (SMTLIB2, Z3)?
我使用的是Z3 3.0版。 我想為bitvector變量賦值,如下所示。 但Z3報告錯誤“無效的功能應用程序,排序第3行位置2的參數不匹配”。
我的常數#x0a似乎有問題? 我怎樣才能解決這個問題?
謝謝
(set-logic QF_BV)
(declare-fun a () (_ BitVec 32))
(assert (= a #x0a))
(check-sat)
在SMT-LIB 2.0標准中, #x0a
是大小為8的位向量。由於常量a
是大小為32的位向量,因此會出現排序不匹配錯誤。您可以通過將示例重寫為以下內容來避免類型/排序錯誤消息:
(set-logic QF_BV)
(declare-fun a () (_ BitVec 32))
(assert (= a #x0000000a))
(check-sat)
SMT-LIB還支持格式的位向量文字(_ bv[num] [size])
,其中[num]
是十進制表示法, [size]
是位向量的大小。 因此,您也可以將bitvector文字#x0000000a
寫為(_ bv10 32)
。
順便說一句,SMT-LIB也支持二進制表示法中的bitvector文字。 例如, #b010
是大小為3的位向量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.