z3 C++ API: 获取 expr 的操作
z3 C++ API: get operation of expr
我将 z3 用作 C++ 库。
在我当前的编程项目中,我使用 z3 简化了布尔方程。
为了在我的项目中使用简化方程,我需要左轴、右轴和简化方程的运算。
例如:表达式 (x==3)&&(x<5) 在 z3
中简化为 (x==3)
(= x 3)
lhs 参数 -> x
expression.arg(0)
rhs 参数 -> 3
expression.arg(1)
如何获得操作(=)?
任何具有超过 1 个参数的 expr 都应该有一个操作吗?
我已经看了API 3 小时了,我就是想不通。
希望有人能给我指出正确的方向!
谢谢
脚趾
Z3 中的函数应用程序表示为参数向量和函数声明。例如,假设函数 f
应用于参数 x
和 y
。在 C++ API 中,它采用具有 e.num_args()
个参数的 expr
对象 e
的形式,x
、y
是 e.arg(0)
、e.arg(1)
和 e.decl()
应用于这些参数。
(显然这也适用于 0 个参数,在 API 的各个部分通常称为 const
,因为它们是 常量函数的应用 .)
要将 "top" 级别运算符作为字符串获取,即对于原始 "and" 和简化的“=”,您可以使用:
expression.decl().name().str()
我将 z3 用作 C++ 库。 在我当前的编程项目中,我使用 z3 简化了布尔方程。
为了在我的项目中使用简化方程,我需要左轴、右轴和简化方程的运算。
例如:表达式 (x==3)&&(x<5) 在 z3
中简化为 (x==3)(= x 3)
lhs 参数 -> x
expression.arg(0)
rhs 参数 -> 3
expression.arg(1)
如何获得操作(=)?
任何具有超过 1 个参数的 expr 都应该有一个操作吗?
我已经看了API 3 小时了,我就是想不通。
希望有人能给我指出正确的方向!
谢谢 脚趾
Z3 中的函数应用程序表示为参数向量和函数声明。例如,假设函数 f
应用于参数 x
和 y
。在 C++ API 中,它采用具有 e.num_args()
个参数的 expr
对象 e
的形式,x
、y
是 e.arg(0)
、e.arg(1)
和 e.decl()
应用于这些参数。
(显然这也适用于 0 个参数,在 API 的各个部分通常称为 const
,因为它们是 常量函数的应用 .)
要将 "top" 级别运算符作为字符串获取,即对于原始 "and" 和简化的“=”,您可以使用:
expression.decl().name().str()