簡體   English   中英

將值賦給位向量(SMTLIB2,Z3)?

[英]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.

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