Finite Fields
Basic FiniteField Term Builders
- cvc5.pythonic.FiniteFieldElem(name, ff, ctx=None)
Return a finite field constant named name. ff may be the number of bits of a finite field sort. If ctx=None, then the global context is used.
>>> x = FiniteFieldElem('x', 17) >>> is_ff(x) True >>> x.size() 17 >>> x.sort() FiniteField(17) >>> word = FiniteFieldSort(17) >>> x2 = FiniteFieldElem('x', word) >>> eq(x, x2) True
- cvc5.pythonic.FiniteFieldVal(val, ff, ctx=None)
Return a finite field value with the given number of bits. If ctx=None, then the global context is used. The second argument can be a number of bits (integer) or a finite field sort.
>>> v = FiniteFieldVal(10, 29) >>> v 10 >>> print("0x%.8x" % v.as_long()) 0x0000000a >>> s = FiniteFieldSort(3) >>> u = FiniteFieldVal(10, s) >>> u 1
- cvc5.pythonic.FiniteFieldSort(sz, ctx=None)
Return an SMT finite field sort of the given size. If ctx=None, then the global context is used.
>>> f7 = FiniteFieldSort(7) >>> f7 FiniteField(7) >>> x = Const('x', f7) >>> eq(x, FiniteFieldElem('x', 7)) True
- cvc5.pythonic.FiniteFieldElems(names, ff, ctx=None)
Return a tuple of finite field constants of size ff.
>>> x, y, z = FiniteFieldElems('x y z', 17) >>> x.size() 17 >>> x.sort() FiniteField(17) >>> Sum(x, y, z) x + y + z >>> Product(x, y, z) x*y*z
Arithmetic Overloads
See the following operator overloads for building finite field terms. These terms can also be built with builder functions listed below.
- addition (
+
) - subtraction (
-
) - negation (
-
) - multiplication (
*
) - equality (
==
)
- cvc5.pythonic.FFAdd(*args)
Create a sum of finite fields.
See also the __add__ overload (+ operator) for FiniteFieldRef.
>>> x, y, z = FiniteFieldElems('x y z', 29) >>> FFAdd(x, y, z) x + y + z
- cvc5.pythonic.FFSub(a, b)
Create a difference of finite fields.
See also the __sub__ overload (- operator) for FiniteFieldRef.
>>> x, y = FiniteFieldElems('x y', 29) >>> FFSub(x, y) x + -y
- cvc5.pythonic.FFNeg(a)
Create a negation of a finite field elemetn
See also the __neg__ overload (unary - operator) for FiniteFieldRef.
>>> x = FiniteFieldElem('x', 29) >>> FFNeg(x) -x
- cvc5.pythonic.FFMult(*args)
Create a product of finite fields.
See also the __mul__ overload (* operator) for FiniteFieldRef.
>>> x, y, z = FiniteFieldElems('x y z', 29) >>> FFMult(x, y, z) x*y*z
Testers
- cvc5.pythonic.is_ff_sort(s)
Return True if s is an SMT finite field sort.
>>> is_ff_sort(FiniteFieldSort(29)) True >>> is_ff_sort(IntSort()) False
- cvc5.pythonic.is_ff(a)
Return True if a is an SMT finite field expression.
>>> b = FiniteFieldElem('b', 29) >>> is_ff(b) True >>> is_ff(b + 10) True >>> is_ff(Int('x')) False
- cvc5.pythonic.is_ff_value(a)
Return True if a is an SMT finite field numeral value.
>>> b = FiniteFieldElem('b', 29) >>> is_ff_value(b) False >>> b = FiniteFieldVal(10, 29) >>> b 10 >>> is_ff_value(b) True
Classes (with overloads)
- class cvc5.pythonic.FiniteFieldSortRef(ast, ctx=None)
Bit-vector sort.
- cast(val)
Try to cast val as a finite field
>>> b = FiniteFieldSort(31) >>> b.cast(10) 10 >>> b.cast(10).sexpr() '#f10m31'
- size()
Return the size (number of elements) of the finite field sort self.
>>> b = FiniteFieldSort(17) >>> b.size() 17
- class cvc5.pythonic.FiniteFieldRef(ast, ctx=None, reverse_children=False)
Bit-vector expressions.
- __add__(other)
Create the SMT expression self + other.
>>> x = FiniteFieldElem('x', 29) >>> y = FiniteFieldElem('y', 29) >>> x + y x + y >>> (x + y).sort() FiniteField(29)
- __mul__(other)
Create the SMT expression self * other.
>>> x = FiniteFieldElem('x', 29) >>> y = FiniteFieldElem('y', 29) >>> x * y x*y >>> (x * y).sort() FiniteField(29)
- __neg__()
Return an expression representing -self.
>>> x = FiniteFieldElem('x', 29) >>> -x -x >>> solve([-(-x) != x]) no solution
- __pos__()
Return self.
>>> x = FiniteFieldElem('x', 29) >>> +x x
- __radd__(other)
Create the SMT expression other + self.
>>> x = FiniteFieldElem('x', 29) >>> 10 + x 10 + x
- __rmul__(other)
Create the SMT expression other * self.
>>> x = FiniteFieldElem('x', 29) >>> 10 * x 10*x
- __rsub__(other)
Create the SMT expression other - self.
>>> x = FiniteFieldElem('x', 29) >>> 10 - x 10 + -x >>> 10 + -x 10 + -x
- __sub__(other)
Create the SMT expression self - other.
>>> x = FiniteFieldElem('x', 29) >>> y = FiniteFieldElem('y', 29) >>> x - y x + -y >>> (x - y).sort() FiniteField(29)
- size()
Return the number of bits of the finite field expression self.
>>> x = FiniteFieldElem('x', 29) >>> (x + 1).size() 29
- sort()
Return the sort of the finite field expression self.
>>> x = FiniteFieldElem('x', 29) >>> x.sort() FiniteField(29) >>> x.sort() == FiniteFieldSort(29) True
- class cvc5.pythonic.FiniteFieldNumRef(ast, ctx=None, reverse_children=False)
Bit-vector values.
- as_long()
Return an SMT finite field numeral as a positive Python long (bignum) numeral.
>>> v = FiniteFieldVal(28, 29) >>> v -1 >>> v.as_long() 28
- as_signed_long()
Return an SMT finite field numeral as a Python long (bignum) numeral.
Returns the numeral of minimum absolute value, so the additive inverse of 1 is “-1”.
>>> FiniteFieldVal(4, 3).as_signed_long() 1 >>> FiniteFieldVal(7, 3).as_signed_long() 1 >>> FiniteFieldVal(3, 3).as_signed_long() 0 >>> FiniteFieldVal(28, 29).as_signed_long() -1