在 SMT2 中为位向量定义规则
Defining Rules for Bit Vectors in SMT2
我已经在 SMT 中从使用 Int 切换到位向量。但是,逻辑 QF_BV 不允许在您的脚本中使用任何量词,我需要定义 FOL 规则。
我知道如何消除存在量词,但是通用量词?怎么做?
想象一下这样的代码:
(set-logic QF_AUFBV)
(define-sort Index () (_ BitVec 3))
(declare-fun P (Index) Bool)
(assert (forall ((i Index)) (= (P (bvadd i #b001)) (not (P i)) ) ) )
严格来说,你不走运。根据http://smtlib.cs.uiowa.edu/logics.shtml,不存在同时包含量词和位向量的逻辑。
话虽如此,大多数求解器都允许非标准组合。简单地省略 set-logic
命令,您可能会很幸运。例如,Z3 在没有 set-logic
部分的情况下可以很好地处理您的查询;我刚试过..
我已经在 SMT 中从使用 Int 切换到位向量。但是,逻辑 QF_BV 不允许在您的脚本中使用任何量词,我需要定义 FOL 规则。 我知道如何消除存在量词,但是通用量词?怎么做?
想象一下这样的代码:
(set-logic QF_AUFBV)
(define-sort Index () (_ BitVec 3))
(declare-fun P (Index) Bool)
(assert (forall ((i Index)) (= (P (bvadd i #b001)) (not (P i)) ) ) )
严格来说,你不走运。根据http://smtlib.cs.uiowa.edu/logics.shtml,不存在同时包含量词和位向量的逻辑。
话虽如此,大多数求解器都允许非标准组合。简单地省略 set-logic
命令,您可能会很幸运。例如,Z3 在没有 set-logic
部分的情况下可以很好地处理您的查询;我刚试过..