Arithmetic ¶
Basic Arithmetic Term Builders ¶
- cvc5.pythonic. Int ( name , ctx = None ) ¶
-
Return an integer constant named name . If ctx=None , then the global context is used.
>>> x = Int('x') >>> is_int(x) True >>> is_int(x + 1) True
- cvc5.pythonic. Real ( name , ctx = None ) ¶
-
Return a real constant named name . If ctx=None , then the global context is used.
>>> x = Real('x') >>> is_real(x) True >>> is_real(x + 1) True
- cvc5.pythonic. IntVal ( val , ctx = None ) ¶
-
Return an SMT integer value. If ctx=None , then the global context is used.
>>> IntVal(1) 1 >>> IntVal("100") 100
- cvc5.pythonic. RealVal ( val , ctx = None ) ¶
-
Return an SMT real value.
val may be a Python int, long, float or string representing a number in decimal or rational notation. If ctx=None , then the global context is used.
>>> RealVal(1) 1 >>> RealVal(1).sort() Real >>> RealVal("3/5") 3/5 >>> RealVal("1.5") 3/2
- cvc5.pythonic. RatVal ( a , b , ctx = None ) ¶
-
Return an SMT rational a/b.
If ctx=None , then the global context is used.
>>> RatVal(3,5) 3/5 >>> RatVal(3,5).sort() Real
- cvc5.pythonic. Q ( a , b , ctx = None ) ¶
-
Return an SMT rational a/b.
If ctx=None , then the global context is used.
>>> Q(3,5) 3/5 >>> Q(3,5).sort() Real >>> Q(4,8) 1/2
- cvc5.pythonic. IntSort ( ctx = None ) ¶
-
Return the integer sort in the given context. If ctx=None , then the global context is used.
>>> IntSort() Int >>> x = Const('x', IntSort()) >>> is_int(x) True >>> x.sort() == IntSort() True >>> x.sort() == BoolSort() False
- cvc5.pythonic. RealSort ( ctx = None ) ¶
-
Return the real sort in the given context. If ctx=None , then the global context is used.
>>> RealSort() Real >>> x = Const('x', RealSort()) >>> is_real(x) True >>> is_int(x) False >>> x.sort() == RealSort() True
- cvc5.pythonic. FreshInt ( prefix = 'x' , ctx = None ) ¶
-
Return a fresh integer constant in the given context using the given prefix.
>>> x = FreshInt() >>> y = FreshInt() >>> eq(x, y) False >>> x.sort() Int
- cvc5.pythonic. Ints ( names , ctx = None ) ¶
-
Return a tuple of Integer constants.
>>> x, y, z = Ints('x y z') >>> Sum(x, y, z) x + y + z
- cvc5.pythonic. IntVector ( prefix , sz , ctx = None ) ¶
-
Return a list of integer constants of size sz .
>>> X = IntVector('x', 3) >>> X [x__0, x__1, x__2] >>> Sum(X) x__0 + x__1 + x__2
- cvc5.pythonic. FreshReal ( prefix = 'b' , ctx = None ) ¶
-
Return a fresh real constant in the given context using the given prefix.
>>> x = FreshReal() >>> y = FreshReal() >>> eq(x, y) False >>> x.sort() Real
- cvc5.pythonic. Reals ( names , ctx = None ) ¶
-
Return a tuple of real constants.
>>> x, y, z = Reals('x y z') >>> Sum(x, y, z) x + y + z >>> Sum(x, y, z).sort() Real
- cvc5.pythonic. RealVector ( prefix , sz , ctx = None ) ¶
-
Return a list of real constants of size sz .
>>> X = RealVector('x', 3) >>> X [x__0, x__1, x__2] >>> Sum(X) x__0 + x__1 + x__2 >>> Sum(X).sort() Real
Arithmetic Overloads ¶
See the following operator overloads for building arithmetic terms. These terms can also be built with builder functions listed below.
-
addition (
+
) -
subtraction (
-
) -
multiplication (
*
) -
division (
/
) -
power (
**
) -
negation (
-
) -
greater than (
>
) -
less than (
<
) -
greater than or equal to (
>=
) -
less than or equal to (
<=
) -
equal (
==
) -
not equal (
!=
)
- cvc5.pythonic. Add ( * args ) ¶
-
Create an SMT addition.
See also the __add__ overload (+ operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Add(x, x, y) x + x + y >>> Add(x, x, y, main_ctx()) x + x + y
- cvc5.pythonic. Mult ( * args ) ¶
-
Create an SMT multiplication.
See also the __mul__ overload (* operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Mult(x, x, y) x*x*y >>> Mult(x, x, y, main_ctx()) x*x*y
- cvc5.pythonic. Sub ( a , b ) ¶
-
Create an SMT subtraction.
See also the __sub__ overload (- operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Sub(x, y) x - y
- cvc5.pythonic. UMinus ( a ) ¶
-
Create an SMT unary negation.
Deprecated. Kept for compatiblity with Z3. See “Neg”.
See also the __neg__ overload (unary - operator) for arithmetic SMT expressions.
>>> x = Int('x') >>> UMinus(x) -x
- cvc5.pythonic. Div ( a , b ) ¶
-
Create an SMT division.
See also the __div__ overload (/ operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> a, b = Reals('x y') >>> Div(x, y).sexpr() '(div x y)' >>> Div(a, y).sexpr() '(/ x (to_real y))' >>> Div(a, b).sexpr() '(/ x y)'
- cvc5.pythonic. Pow ( a , b ) ¶
-
Create an SMT power.
See also the __pow__ overload for arithmetic SMT expressions.
>>> x = Int('x') >>> Pow(x, 3) x**3
- cvc5.pythonic. IntsModulus ( a , b ) ¶
-
Create an SMT integer modulus.
See also the __mod__ overload (% operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> IntsModulus(x, y) x%y
- cvc5.pythonic. Leq ( a , b ) ¶
-
Create an SMT less-than-or-equal-to.
See also the __le__ overload (<= operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Leq(x, y) x <= y
- cvc5.pythonic. Geq ( a , b ) ¶
-
Create an SMT greater-than-or-equal-to.
See also the __ge__ overload (>= operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Geq(x, y) x >= y
- cvc5.pythonic. Lt ( a , b ) ¶
-
Create an SMT less-than.
See also the __lt__ overload (< operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Lt(x, y) x < y
- cvc5.pythonic. Gt ( a , b ) ¶
-
Create an SMT greater-than.
See also the __gt__ overload (> operator) for arithmetic SMT expressions.
>>> x, y = Ints('x y') >>> Gt(x, y) x > y
Other Arithmetic Operators ¶
- cvc5.pythonic. ToReal ( a ) ¶
-
Return the SMT expression ToReal(a).
>>> x = Int('x') >>> x.sort() Int >>> n = ToReal(x) >>> n ToReal(x) >>> n.sort() Real
- cvc5.pythonic. ToInt ( a ) ¶
-
Return the SMT expression ToInt(a).
>>> x = Real('x') >>> x.sort() Real >>> n = ToInt(x) >>> n ToInt(x) >>> n.sort() Int
- cvc5.pythonic. IsInt ( a ) ¶
-
Return the SMT predicate IsInt(a).
>>> x = Real('x') >>> IsInt(x + "1/2") IsInt(x + 1/2) >>> solve(IsInt(x + "1/2"), x > 0, x < 1) [x = 1/2] >>> solve(IsInt(x + "1/2"), x > 0, x < 1, x != "1/2") no solution
- cvc5.pythonic. Sqrt ( a , ctx = None ) ¶
-
Return an SMT expression which represents the square root of a.
Can also operate on python builtins of arithemtic type.
>>> x = Real('x') >>> Sqrt(x) x**(1/2) >>> Sqrt(4) 4**(1/2)
- cvc5.pythonic. Cbrt ( a , ctx = None ) ¶
-
Return an SMT expression which represents the cubic root of a.
Can also operate on python builtins of arithemtic type.
>>> x = Real('x') >>> Cbrt(x) x**(1/3) >>> Cbrt(4) 4**(1/3)
Transcendentals ¶
- cvc5.pythonic. Pi ( ctx = None ) ¶
-
Create the constant pi
>>> Pi() Pi
- cvc5.pythonic. Exponential ( x ) ¶
-
Create an exponential function
>>> x = Real('x') >>> solve(Exponential(x) == 1) [x = 0]
- cvc5.pythonic. Sine ( x ) ¶
-
Create a sine function
>>> x = Real('x') >>> i = Int('i') >>> prove(Sine(x) < 2) proved >>> prove(Sine(i) < 2) proved
- cvc5.pythonic. Cosine ( x ) ¶
-
Create a cosine function
>>> x = Real('x') >>> i = Int('i') >>> prove(Cosine(x) < 2) proved >>> prove(Cosine(i) < 2) proved
- cvc5.pythonic. Tangent ( x ) ¶
-
Create a tangent function
>>> Tangent(Real('x')) Tangent(x)
- cvc5.pythonic. Arcsine ( x ) ¶
-
Create an arcsine function
>>> Arcsine(Real('x')) Arcsine(x)
- cvc5.pythonic. Arccosine ( x ) ¶
-
Create an arccosine function
>>> Arccosine(Real('x')) Arccosine(x)
- cvc5.pythonic. Arctangent ( x ) ¶
-
Create an arctangent function
>>> Arctangent(Real('x')) Arctangent(x)
- cvc5.pythonic. Secant ( x ) ¶
-
Create a secant function
>>> Secant(Real('x')) Secant(x)
- cvc5.pythonic. Cosecant ( x ) ¶
-
Create a cosecant function
>>> Cosecant(Real('x')) Cosecant(x)
- cvc5.pythonic. Cotangent ( x ) ¶
-
Create a cotangent function
>>> Cotangent(Real('x')) Cotangent(x)
- cvc5.pythonic. Arcsecant ( x ) ¶
-
Create an arcsecant function
>>> Arcsecant(Real('x')) Arcsecant(x)
- cvc5.pythonic. Arccosecant ( x ) ¶
-
Create an arccosecant function
>>> Arccosecant(Real('x')) Arccosecant(x)
- cvc5.pythonic. Arccotangent ( x ) ¶
-
Create an arccotangent function
>>> Arccotangent(Real('x')) Arccotangent(x)
Testers ¶
- cvc5.pythonic. is_arith ( a ) ¶
-
Return True if a is an arithmetical expression.
>>> x = Int('x') >>> is_arith(x) True >>> is_arith(x + 1) True >>> is_arith(1) False >>> is_arith(IntVal(1)) True >>> y = Real('y') >>> is_arith(y) True >>> is_arith(y + 1) True
- cvc5.pythonic. is_int ( a ) ¶
-
Return True if a is an integer expression.
>>> x = Int('x') >>> is_int(x + 1) True >>> is_int(1) False >>> is_int(IntVal(1)) True >>> y = Real('y') >>> is_int(y) False >>> is_int(y + 1) False
- cvc5.pythonic. is_real ( a ) ¶
-
Return True if a is a real expression.
>>> x = Int('x') >>> is_real(x + 1) False >>> y = Real('y') >>> is_real(y) True >>> is_real(y + 1) True >>> is_real(1) False >>> is_real(RealVal(1)) True
- cvc5.pythonic. is_int_value ( a ) ¶
-
Return True if a is an integer value of sort Int.
>>> is_int_value(IntVal(1)) True >>> is_int_value(1) False >>> is_int_value(Int('x')) False >>> n = Int('x') + 1 >>> n x + 1 >>> n.arg(1) 1 >>> is_int_value(n.arg(1)) True >>> is_int_value(RealVal("1/3")) False >>> is_int_value(RealVal(1)) False
- cvc5.pythonic. is_rational_value ( a ) ¶
-
Return True if a is rational value of sort Real.
>>> is_rational_value(RealVal(1)) True >>> is_rational_value(RealVal("3/5")) True >>> is_rational_value(IntVal(1)) False >>> is_rational_value(1) False >>> n = Real('x') + 1 >>> n.arg(1) 1 >>> is_rational_value(n.arg(1)) True >>> is_rational_value(Real('x')) False
- cvc5.pythonic. is_arith_sort ( s ) ¶
-
Return True if s is an arithmetical sort (type).
>>> is_arith_sort(IntSort()) True >>> is_arith_sort(RealSort()) True >>> is_arith_sort(BoolSort()) False >>> n = Int('x') + 1 >>> is_arith_sort(n.sort()) True
- cvc5.pythonic. is_add ( a ) ¶
-
Return True if a is an expression of the form b + c.
>>> x, y = Ints('x y') >>> is_add(x + y) True >>> is_add(x - y) False
- cvc5.pythonic. is_mul ( a ) ¶
-
Return True if a is an expression of the form b * c.
>>> x, y = Ints('x y') >>> is_mul(x * y) True >>> is_mul(x - y) False
- cvc5.pythonic. is_sub ( a ) ¶
-
Return True if a is an expression of the form b - c.
>>> x, y = Ints('x y') >>> is_sub(x - y) True >>> is_sub(x + y) False
- cvc5.pythonic. is_div ( a ) ¶
-
Return True if a is a rational division term (i.e. b / c).
Note: this returns false for integer division. See is_idiv .
>>> x, y = Reals('x y') >>> is_div(x / y) True >>> is_div(x + y) False >>> x, y = Ints('x y') >>> is_div(x / y) False >>> is_idiv(x / y) True
- cvc5.pythonic. is_idiv ( a ) ¶
-
Return True if a is an expression of the form b div c.
>>> x, y = Ints('x y') >>> is_idiv(x / y) True >>> is_idiv(x + y) False
- cvc5.pythonic. is_mod ( a ) ¶
-
Return True if a is an expression of the form b % c.
>>> x, y = Ints('x y') >>> is_mod(x % y) True >>> is_mod(x + y) False
- cvc5.pythonic. is_le ( a ) ¶
-
Return True if a is an expression of the form b <= c.
>>> x, y = Ints('x y') >>> is_le(x <= y) True >>> is_le(x < y) False
- cvc5.pythonic. is_lt ( a ) ¶
-
Return True if a is an expression of the form b < c.
>>> x, y = Ints('x y') >>> is_lt(x < y) True >>> is_lt(x == y) False
- cvc5.pythonic. is_ge ( a ) ¶
-
Return True if a is an expression of the form b >= c.
>>> x, y = Ints('x y') >>> is_ge(x >= y) True >>> is_ge(x == y) False
- cvc5.pythonic. is_gt ( a ) ¶
-
Return True if a is an expression of the form b > c.
>>> x, y = Ints('x y') >>> is_gt(x > y) True >>> is_gt(x == y) False
- cvc5.pythonic. is_is_int ( a ) ¶
-
Return True if a is an expression of the form IsInt(b).
>>> x = Real('x') >>> is_is_int(IsInt(x)) True >>> is_is_int(x) False
- cvc5.pythonic. is_to_real ( a ) ¶
-
Return True if a is an expression of the form ToReal(b).
>>> x = Int('x') >>> n = ToReal(x) >>> n ToReal(x) >>> is_to_real(n) True >>> is_to_real(x) False
- cvc5.pythonic. is_to_int ( a ) ¶
-
Return True if a is an expression of the form ToInt(b).
>>> x = Real('x') >>> n = ToInt(x) >>> n ToInt(x) >>> is_to_int(n) True >>> is_to_int(x) False
Classes (with overloads) ¶
- class cvc5.pythonic. ArithSortRef ( ast , ctx = None ) ¶
-
Real and Integer sorts.
- cast ( val ) ¶
-
Try to cast val as an Integer or Real.
>>> IntSort().cast(10) 10 >>> is_int(IntSort().cast(10)) True >>> is_int(10) False >>> RealSort().cast(10) 10 >>> is_real(RealSort().cast(10)) True >>> IntSort().cast(Bool('x')) If(x, 1, 0) >>> RealSort().cast(Bool('x')) ToReal(If(x, 1, 0)) >>> try: ... IntSort().cast(RealVal("1.1")) ... except SMTException as ex: ... print("failed") failed
- is_int ( ) ¶
-
Return True if self is of the sort Integer.
>>> x = Int('x') >>> x.is_int() True >>> (x + 1).is_int() True >>> x = Real('x') >>> x.is_int() False
- is_real ( ) ¶
-
Return True if self is of the sort Real.
>>> x = Real('x') >>> x.is_real() True >>> (x + 1).is_real() True >>> x = Int('x') >>> x.is_real() False
- subsort ( other ) ¶
-
Return True if self is a subsort of other .
- class cvc5.pythonic. ArithRef ( ast , ctx = None , reverse_children = False ) ¶
-
Integer and Real expressions.
- __add__ ( other ) ¶
-
Create the SMT expression self + other .
>>> x = Int('x') >>> y = Int('y') >>> x + y x + y >>> (x + y).sort() Int
- __div__ ( other ) ¶
-
Create the SMT expression other/self .
>>> x = Int('x') >>> y = Int('y') >>> x/y x/y >>> (x/y).sort() Int >>> (x/y).sexpr() '(div x y)' >>> x = Real('x') >>> y = Real('y') >>> x/y x/y >>> (x/y).sort() Real >>> (x/y).sexpr() '(/ x y)'
- __ge__ ( other ) ¶
-
Create the SMT expression other >= self .
>>> x, y = Ints('x y') >>> x >= y x >= y >>> y = Real('y') >>> x >= y ToReal(x) >= y
- __gt__ ( other ) ¶
-
Create the SMT expression other > self .
>>> x, y = Ints('x y') >>> x > y x > y >>> y = Real('y') >>> x > y ToReal(x) > y
- __le__ ( other ) ¶
-
Create the SMT expression other <= self .
>>> x, y = Ints('x y') >>> x <= y x <= y >>> y = Real('y') >>> x <= y ToReal(x) <= y
- __lt__ ( other ) ¶
-
Create the SMT expression other < self .
>>> x, y = Ints('x y') >>> x < y x < y >>> y = Real('y') >>> x < y ToReal(x) < y
- __mod__ ( other ) ¶
-
Create the SMT expression other%self .
>>> x = Int('x') >>> y = Int('y') >>> x % y x%y
- __mul__ ( other ) ¶
-
Create the SMT expression self * other .
>>> x = Real('x') >>> y = Real('y') >>> x * y x*y >>> (x * y).sort() Real >>> x * BoolVal(True) If(True, x, 0)
- __neg__ ( ) ¶
-
Return an expression representing -self .
>>> x = Int('x') >>> -x -x
- __pos__ ( ) ¶
-
Return self .
>>> x = Int('x') >>> +x x
- __pow__ ( other ) ¶
-
Create the SMT expression self**other (** is the power operator).
>>> x = Real('x') >>> x**3 x**3 >>> (x**3).sort() Real >>> solve([x ** 2 == x, x > 0]) [x = 1]
- __radd__ ( other ) ¶
-
Create the SMT expression other + self .
>>> x = Int('x') >>> 10 + x 10 + x
- __rdiv__ ( other ) ¶
-
Create the SMT expression other/self .
>>> x = Int('x') >>> 10/x 10/x >>> (10/x).sexpr() '(div 10 x)' >>> x = Real('x') >>> 10/x 10/x >>> (10/x).sexpr() '(/ 10.0 x)'
- __rmod__ ( other ) ¶
-
Create the SMT expression other%self .
>>> x = Int('x') >>> 10 % x 10%x
- __rmul__ ( other ) ¶
-
Create the SMT expression other * self .
>>> x = Real('x') >>> 10 * x 10*x
- __rpow__ ( other ) ¶
-
Create the SMT expression other**self (** is the power operator).
>>> x = Real('x') >>> 2**x 2**x >>> (2**x).sort() Real
- __rsub__ ( other ) ¶
-
Create the SMT expression other - self .
>>> x = Int('x') >>> 10 - x 10 - x
- __rtruediv__ ( other ) ¶
-
Create the SMT expression other/self .
- __sub__ ( other ) ¶
-
Create the SMT expression self - other .
>>> x = Int('x') >>> y = Int('y') >>> x - y x - y >>> (x - y).sort() Int
- __truediv__ ( other ) ¶
-
Create the SMT expression other/self .
- is_int ( ) ¶
-
Return True if self is an integer expression.
>>> x = Int('x') >>> x.is_int() True >>> (x + 1).is_int() True >>> y = Real('y') >>> (x + y).is_int() False
- is_real ( ) ¶
-
Return True if self is an real expression.
>>> x = Real('x') >>> x.is_real() True >>> (x + 1).is_real() True
- sort ( ) ¶
-
Return the sort (type) of the arithmetical expression self .
>>> Int('x').sort() Int >>> (Real('x') + 1).sort() Real
- class cvc5.pythonic. IntNumRef ( ast , ctx = None , reverse_children = False ) ¶
-
Integer values.
- as_binary_string ( ) ¶
-
Return an SMT integer numeral as a Python binary string. >>> v = IntVal(10) >>> v.as_binary_string() ‘1010’
- as_long ( ) ¶
-
Return an SMT integer numeral as a Python long (bignum) numeral.
>>> v = IntVal(1) >>> v + 1 1 + 1 >>> v.as_long() + 1 2
- as_string ( ) ¶
-
Return an SMT integer numeral as a Python string. >>> v = IntVal(100) >>> v.as_string() ‘100’
- class cvc5.pythonic. RatNumRef ( ast , ctx = None , reverse_children = False ) ¶
-
Rational values.
- as_decimal ( prec ) ¶
-
Return an SMT rational value as a string in decimal notation using at most prec decimal places.
>>> v = RealVal("1/5") >>> v.as_decimal(3) '0.2' >>> v = RealVal("1/3") >>> v.as_decimal(3) '0.333'
- as_fraction ( ) ¶
-
Return an SMT rational as a Python Fraction object.
>>> v = RealVal("1/5") >>> v.as_fraction() Fraction(1, 5)
- as_long ( ) ¶
-
Is this arithmetic value an integer? >>> RealVal(“2/1”).as_long() 2 >>> try: … RealVal(“2/3”).as_long() … except SMTException as e: … print(“failed: %s” % e) failed: Expected integer fraction
- as_string ( ) ¶
-
Return an SMT rational numeral as a Python string.
>>> v = Q(3,6) >>> v.as_string() '1/2'
- denominator ( ) ¶
-
Return the denominator of an SMT rational numeral.
>>> is_rational_value(Q(3,5)) True >>> n = Q(3,5) >>> n.denominator() 5
- denominator_as_long ( ) ¶
-
Return the denominator as a Python long.
>>> v = RealVal("1/3") >>> v 1/3 >>> v.denominator_as_long() 3
- is_int ( ) ¶
-
Return True if self is an integer expression.
>>> x = Int('x') >>> x.is_int() True >>> (x + 1).is_int() True >>> y = Real('y') >>> (x + y).is_int() False
- is_int_value ( ) ¶
-
Is this arithmetic value an integer? >>> RealVal(“2/1”).is_int_value() True >>> RealVal(“2/3”).is_int_value() False
- is_real ( ) ¶
-
Return True if self is an real expression.
>>> x = Real('x') >>> x.is_real() True >>> (x + 1).is_real() True
- numerator ( ) ¶
-
Return the numerator of an SMT rational numeral.
>>> is_rational_value(RealVal("3/5")) True >>> n = RealVal("3/5") >>> n.numerator() 3 >>> is_rational_value(Q(3,5)) True >>> Q(3,5).numerator() 3
- numerator_as_long ( ) ¶
-
Return the numerator as a Python long.
>>> v = RealVal(10000000000) >>> v 10000000000 >>> v + 1 10000000000 + 1 >>> v.numerator_as_long() + 1 == 10000000001 True