我正在将 SQL 谓词翻译成 Z3 语言。SQL 谓词表达式与 Z3 中的表达式非常接近:
where x + y > 0
====
(declare-const x Int)
(declare-const y Int)
(assert (> (+ x y) 0)))
但我看不到如何表示 Null 值。在裸 Z3 中,我可以定义数据类型:
(declare-datatype
NullableInt
(
(justInt (theInt Int))
(nullInt)
)
)
# where x is null or x > 10
(declare-const x NullableInt)
(assert (ite (= x nullInt) true (> (justInt x) 10)))
SBV 没有声明数据类型。
我想到的第一个选择是将所有x
引用替换为x + 1
thenx = 0
可以被视为null