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