验证查询公式,SMT求解器,Z3,STP

验证查询公式,SMT求解器,Z3,STP,z3,smt,Z3,Smt,我有一个布尔公式f(a,b,x,y)。其中a和b是布尔表达式,x和y是位向量表达式。a和b是布尔表达式,可能使用表达式a、b、x和y 我想定义以下有效性查询: f(a, b, x, y)* such that *a = false && b = false f(a, b, x, y)* such that *a = true && b = false 在某种程度上,我需要替换公式中隐含两边的a和b的值 请建议如何创建这样的查询。为什么不为查询创建一个新的变量

我有一个布尔公式
f(a,b,x,y)
。其中a和b是布尔表达式,x和y是位向量表达式。a和b是布尔表达式,可能使用表达式a、b、x和y

我想定义以下有效性查询:

f(a, b, x, y)* such that *a = false && b = false 

f(a, b, x, y)* such that *a = true && b = false
在某种程度上,我需要替换公式中隐含两边的ab的值


请建议如何创建这样的查询。

为什么不为查询创建一个新的变量? 然后,您可以断言以下内容: (断言(非a)) (断言(非b)) (断言(f a b x y)) (断言a2) (断言(不是(f a2 b x y))) (检查sat)


当且仅当上面的查询不可满足时,您的查询才有效,因为绑定表示为断言,并且隐含被否定(并平铺为两个断言)

无法为创建新变量。As a是一个布尔表达式,可能使用表达式b、x和y。我们能想点别的吗?