Reputation: 409
I'm using z3 as a C++ library. Within in my current programming project I have boolean equations I'm simplifying using z3.
In order to use the simplified equations within my project I need the lhs, rhs and the operation of the simplified equation.
e.G.: expression (x==3)&&(x<5) is simplified to (x==3) in z3
(= x 3)
lhs argument -> x
expression.arg(0)
rhs argument -> 3
expression.arg(1)
How do I get the operation(=) ?
Any expr with more than 1 argument should have a operation right?
I'm looking at the API for 3hrs now and I just can't figure it out.
Hopefully, anyone can point me in the right direction!
Thanks Toebs
Upvotes: 0
Views: 309
Reputation: 36
To get the "top" level operator as a string, i.e., for the original "and", and for the simplified "=" you can use:
expression.decl().name().str()
Upvotes: 2
Reputation: 8402
Function applications in Z3 are represented as a vector of arguments and a function declaration. For instance, suppose that function f
is applied to the arguments x
and y
. In the C++ API this takes the shape of an expr
object e
which has e.num_args()
arguments, x
,y
are e.arg(0)
, e.arg(1)
and e.decl()
is applied to those arguments.
(Obviously this also works for 0 arguments, which is often referred to as const
in various parts of the API, because they are applications of constant functions.)
Upvotes: 1