Arrays

Basic Array Term Builders

cvc5.pythonic. Array ( name , dom , rng )

Return an array constant named name with the given domain and range sorts.

>>> a = Array('a', IntSort(), IntSort())
>>> a.sort()
Array(Int, Int)
>>> a[0]
a[0]
cvc5.pythonic. ConstArray ( dom , v )

Return an SMT constant array expression.

>>> a = ConstArray(IntSort(), 10)
>>> a
ConstArray(Int, 10)
>>> a.sort()
Array(Int, Int)
>>> i = Int('i')
>>> a[i]
ConstArray(Int, 10)[i]
>>> simplify(a[i])
10
cvc5.pythonic. K ( dom , v )

Return an SMT constant array expression. An alias for ConstArray.

>>> a = K(IntSort(), 10)
>>> a
ConstArray(Int, 10)
>>> a.sort()
Array(Int, Int)
>>> i = Int('i')
>>> a[i]
ConstArray(Int, 10)[i]
>>> simplify(a[i])
10
cvc5.pythonic. ArraySort ( * sig )

Return the SMT array sort with the given domain and range sorts.

>>> A = ArraySort(IntSort(), BoolSort())
>>> A
Array(Int, Bool)
>>> A.domain()
Int
>>> A.range()
Bool
>>> AA = ArraySort(IntSort(), A)
>>> AA
Array(Int, Array(Int, Bool))
>>> try:
...  ArraySort(IntSort(), IntSort(), BoolSort())
... except SMTException as e:
...  print("failed: %s" % e)
failed: Unimplemented: multi-domain array

Array Operators

cvc5.pythonic. Select ( a , i )

Return an SMT select array expression.

>>> a = Array('a', IntSort(), IntSort())
>>> i = Int('i')
>>> Select(a, i)
a[i]
>>> eq(Select(a, i), a[i])
True
cvc5.pythonic. Store ( a , i , v )

Return an SMT store array expression.

>>> a    = Array('a', IntSort(), IntSort())
>>> i, v = Ints('i v')
>>> s    = Store(a, i, v)
>>> s.sort()
Array(Int, Int)
>>> prove(s[i] == v)
proved
>>> j    = Int('j')
>>> prove(Implies(i != j, s[j] == a[j]))
proved
cvc5.pythonic. Update ( a , i , v )

Return an SMT store array expression. An alias for Store.

>>> a    = Array('a', IntSort(), IntSort())
>>> i, v = Ints('i v')
>>> s    = Update(a, i, v)
>>> s.sort()
Array(Int, Int)
>>> prove(s[i] == v)
proved
>>> j    = Int('j')
>>> prove(Implies(i != j, s[j] == a[j]))
proved

See the following operator overloads for building other kinds of array terms:

Testers

cvc5.pythonic. is_array_sort ( a )

Is this an array sort?

>>> is_array_sort(ArraySort(BoolSort(), BoolSort()))
True
>>> is_array_sort(BoolSort())
False
cvc5.pythonic. is_array ( a )

Return True if a is an SMT array expression.

>>> a = Array('a', IntSort(), IntSort())
>>> is_array(a)
True
>>> is_array(Store(a, 0, 1))
True
>>> is_array(a[0])
False
cvc5.pythonic. is_const_array ( a )

Return True if a is an SMT constant array.

>>> a = ConstArray(IntSort(), 10)
>>> is_const_array(a)
True
>>> a = Array('a', IntSort(), IntSort())
>>> is_const_array(a)
False
cvc5.pythonic. is_K ( a )

Return True if a is an SMT constant array. An alias for is_const_array.

>>> a = ConstArray(IntSort(), 10)
>>> is_K(a)
True
>>> a = Array('a', IntSort(), IntSort())
>>> is_K(a)
False
cvc5.pythonic. is_select ( a )

Return True if a is an SMT array select application.

>>> a = Array('a', IntSort(), IntSort())
>>> is_select(a)
False
>>> i = Int('i')
>>> is_select(a[i])
True
cvc5.pythonic. is_store ( a )

Return True if a is an SMT array store application.

>>> a = Array('a', IntSort(), IntSort())
>>> is_store(a)
False
>>> is_store(Store(a, 0, 1))
True
cvc5.pythonic. is_update ( a )

Return True if a is an SMT array store application. An alias for is_store.

>>> a = Array('a', IntSort(), IntSort())
>>> is_update(a)
False
>>> is_update(Update(a, 0, 1))
True

Classes (with overloads)

class cvc5.pythonic. ArraySortRef ( ast , ctx = None )

Array sorts.

domain ( )

Return the domain of the array sort self .

>>> A = ArraySort(IntSort(), BoolSort())
>>> A.domain()
Int
range ( )

Return the range of the array sort self .

>>> A = ArraySort(IntSort(), BoolSort())
>>> A.range()
Bool
class cvc5.pythonic. ArrayRef ( ast , ctx = None , reverse_children = False )

Array expressions.

__getitem__ ( arg )

Return the SMT expression self[arg] .

>>> a = Array('a', IntSort(), BoolSort())
>>> i = Int('i')
>>> a[i]
a[i]
>>> a[i].sexpr()
'(select a i)'
arg ( idx )

Get the “argument” (base element) of this constant array.

>>> b = ConstArray(IntSort(), 1)
>>> b.arg(0)
1
default ( )

Get the constant element of this (constant) array >>> b = ConstArray(IntSort(), 1) >>> b.default() 1

domain ( )

Shorthand for self.sort().domain() .

>>> a = Array('a', IntSort(), BoolSort())
>>> a.domain()
Int
range ( )

Shorthand for self.sort().range() .

>>> a = Array('a', IntSort(), BoolSort())
>>> a.range()
Bool
sort ( )

Return the array sort of the array expression self .

>>> a = Array('a', IntSort(), BoolSort())
>>> a.sort()
Array(Int, Bool)