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