Exemple #1
0
 def _cvc4_type_to_type(self, type_):
     if type_.isBoolean():
         return types.BOOL
     elif type_.isInteger():
         return types.INT
     elif type_.isReal():
         return types.REAL
     elif type_.isArray():
         # Casting Type into ArrayType
         type_ = CVC4.ArrayType(type_)
         # Recursively convert the types of index and elem
         idx_type = self._cvc4_type_to_type(type_.getIndexType())
         elem_type = self._cvc4_type_to_type(type_.getConstituentType())
         return types.ArrayType(idx_type, elem_type)
     elif type_.isBitVector():
         # Casting Type into BitVectorType
         type_ = CVC4.BitVectorType(type_)
         return types.BVType(type_.getSize())
     elif type_.isFunction():
         # Casting Type into FunctionType
         type_ = CVC4.FunctionType(type_)
         return_type = type_.getRangeType()
         param_types = tuple(
             self._cvc4_type_to_type(ty) for ty in type_.getArgTypes())
         return types.FunctionType(return_type, param_types)
     else:
         raise NotImplementedError("Unsupported type: %s" % type_)
Exemple #2
0
 def nud(self, parser):
     idx_type = parser.expression()
     parser.expect(ExprComma, ",")
     el_type = parser.expression()
     parser.expect(CloseBrace, "}")
     if type(parser.token) == OpenPar:
         parser.advance()
         default = parser.expression()
         parser.expect(ClosePar, ")")
         return parser.mgr.Array(idx_type, default)
     else:
         return types.ArrayType(idx_type, el_type)
Exemple #3
0
 def _z3_to_type(self, sort):
     if sort.kind() == z3.Z3_BOOL_SORT:
         return types.BOOL
     elif sort.kind() == z3.Z3_INT_SORT:
         return types.INT
     elif sort.kind() == z3.Z3_REAL_SORT:
         return types.REAL
     elif sort.kind() == z3.Z3_ARRAY_SORT:
         return types.ArrayType(self._z3_to_type(sort.domain()),
                                self._z3_to_type(sort.range()))
     elif sort.kind() == z3.Z3_BV_SORT:
         return types.BVType(sort.size())
     else:
         raise NotImplementedError("Unsupported sort in conversion: %s" % sort)
Exemple #4
0
 def _convert_sort(self, sort):
     kind = sort.get_sort_kind()
     if kind is ss.sortkinds.ARRAY:
         Kt = self._convert_sort(sort.get_indexsort())
         Vt = self._convert_sort(sort.get_elemsort())
         return pysmt_types.ArrayType(Kt, Vt)
     elif kind is ss.sortkinds.BOOL:
         return pysmt_types.BOOL
     elif kind is ss.sortkinds.BV:
         return pysmt_types.BVType(sort.get_width())
     elif kind is ss.sortkinds.FUNCTION:
         domain = [self._convert_sort(s) for s in sort.get_domain_sorts()]
         codomain = self._convert_sort(sort.get_codomain())
         return pysmt_types.FunctionType(codomain, domain)
     elif kind is ss.sortkinds.INT:
         return pysmt_types.INT
     else:
         assert kind is ss.sortkinds.REAL
         return pysmt_types.REAL