コード例 #1
0
 def collect_defined_terms(self):
     defined_terms = yapi.term_vector_t()
     yapi.yices_init_term_vector(defined_terms)
     #yapi.yices_model_collect_defined_terms(self.model, defined_terms)
     Yices.model_collect_defined_terms(self.model, defined_terms)
     retval = []
     for i in range(0, defined_terms.size):
         retval.append(defined_terms.data[i])
     yapi.yices_delete_term_vector(defined_terms)
     return retval
コード例 #2
0
 def generalize_model(self, term, elim_array, mode):
     var_array = yapi.make_term_array(elim_array)
     termv = yapi.term_vector_t()
     yapi.yices_init_term_vector(termv)
     errcode = yapi.yices_generalize_model(self.model, term, len(elim_array), var_array, mode, termv)
     if errcode == -1:
         yapi.yices_delete_term_vector(termv)
         raise YicesException('yices_generalize_model')
     retval = []
     for i in range(0, termv.size):
         retval.append(termv.data[i])
     yapi.yices_delete_term_vector(termv)
     return retval
コード例 #3
0
 def implicant_for_formula(self, term):
     termv = yapi.term_vector_t()
     yapi.yices_init_term_vector(termv)
     try:
         code = yapi.yices_implicant_for_formula(self.model, term, termv)
         retval = []
         if code != -1:
             for i in range(0, termv.size):
                 retval.append(termv.data[i])
         yapi.yices_delete_term_vector(termv)
         return retval
     except yapi.YicesAPIException:
         yapi.yices_delete_term_vector(termv)
         raise YicesException('implicant_for_formula')
コード例 #4
0
 def support_for_term(self, term):
     """Returns the list of uninterpreted terms that fix the value of the given term in the model."""
     termv = yapi.term_vector_t()
     yapi.yices_init_term_vector(termv)
     try:
         code = yapi.yices_model_term_support(self.model, term, termv)
         retval = []
         if code != -1:
             for i in range(0, termv.size):
                 retval.append(termv.data[i])
         yapi.yices_delete_term_vector(termv)
         return retval
     except yapi.YicesAPIException:
         yapi.yices_delete_term_vector(termv)
         raise YicesException('support_for_term')
コード例 #5
0
 def implicant_for_formulas(self, term_array):
     tarray = yapi.make_term_array(term_array)
     termv = yapi.term_vector_t()
     yapi.yices_init_term_vector(termv)
     try:
         code = yapi.yices_implicant_for_formulas(self.model, len(term_array), tarray, termv)
         retval = []
         if code != -1:
             for i in range(0, termv.size):
                 retval.append(termv.data[i])
         yapi.yices_delete_term_vector(termv)
         return retval
     except yapi.YicesAPIException as catastrophy:
         yapi.yices_delete_term_vector(termv)
         raise YicesException('implicant_for_formulas') from catastrophy
コード例 #6
0
 def support_for_terms(self, term_array):
     """Returns the list of uninterpreted terms that fix the value in the model of every term in the given array."""
     tarray = yapi.make_term_array(term_array)
     termv = yapi.term_vector_t()
     try:
         yapi.yices_init_term_vector(termv)
         code = yapi.yices_model_term_array_support(self.model, len(term_array), tarray, termv)
         retval = []
         if code != -1:
             for i in range(0, termv.size):
                 retval.append(termv.data[i])
         yapi.yices_delete_term_vector(termv)
         return retval
     except yapi.YicesAPIException as catastrophy:
         yapi.yices_delete_term_vector(termv)
         raise YicesException('support_for_terms') from catastrophy
コード例 #7
0
ファイル: yices.py プロジェクト: aman-goel/pysmt
 def __iter__(self):
     """Overloading of iterator from Model.  We iterate only on the
     variables defined in the assignment.
     """
     term_v = yicespy.term_vector_t()
     yicespy.yices_init_term_vector(term_v)
     #todo here
     status = yicespy.yices_model_collect_defined_terms(self.yices_model, term_v)
     self._check_error(status)
     for d in term_v:
         try:
             pysmt_d = self.converter.back(d())
             yield pysmt_d, self.get_value(pysmt_d)
         except UndefinedSymbolError:
             # avoids problems with symbols generated by z3
             pass
     yicespy.yices_delete_term_vector(term_v)
コード例 #8
0
ファイル: yices.py プロジェクト: aman-goel/pysmt
    def get_named_unsat_core(self):
        """After a call to solve() yielding UNSAT, returns the unsat core as a
        dict of names to formulae"""
        if self.options.unsat_cores_mode is None:
            raise SolverNotConfiguredForUnsatCoresError

        if self.last_result is not False:
            raise SolverStatusError("The last call to solve() was not" \
                                    " unsatisfiable")

        if self.last_command != "solve":
            raise SolverStatusError("The solver status has been modified by a" \
                                    " '%s' command after the last call to" \
                                    " solve()" % self.last_command)
        
        assumptions = yicespy.term_vector_t()
        yicespy.yices_init_term_vector(assumptions)
        code = yicespy.yices_get_unsat_core(self.yices, assumptions)
        if code != 0:
            msg = yicespy.yices_error_string()
            raise InternalSolverError("Yices returned non-zero code upon unsat core extraction"\
                                      ": %s (code: %s)" % \
                                      (msg, code))
#         for i in range(assumptions.size):
#             d = assumptions.data[i]
#             print(yicespy.yices_term_to_string(d, 200, 10, 0))
        pysmt_assumptions = set(self.converter.back(assumptions.data[i]) for i in range(assumptions.size))
        yicespy.yices_delete_term_vector(assumptions)

        res = {}
        n_ass_map = self._named_assertions_map()
        cnt = 0
        for key in pysmt_assumptions:
            if key in n_ass_map:
                (name, formula) = n_ass_map[key]
                if name is None:
                    name = "_a_%d" % cnt
                    cnt += 1
                res[name] = formula
        return res
コード例 #9
0
 def test_term_vector(self):
     term_v = term_vector_t()
     yices_init_term_vector(term_v)
     yices_delete_term_vector(term_v)
     yices_reset_term_vector(term_v)
コード例 #10
0
 def test_function_models(self):
     funtype = yapi.yices_function_type3(self.int_t, self.bool_t,
                                         self.real_t, self.real_t)
     ftystr = yapi.yices_type_to_string(funtype, 100, 80, 0)
     yapi.yices_pp_type_fd(1, funtype, 100, 80, 0)
     self.assertEqual(ftystr, '(-> int bool real real)')
     fun1 = define_const('fun1', funtype)
     define_const('b1', self.bool_t)
     i1 = define_const('i1', self.int_t)
     r1 = define_const('r1', self.real_t)
     assert_formula(
         '(> (fun1 i1 b1 r1) (fun1 (+ i1 1) (not b1) (- r1 i1)))', self.ctx)
     self.assertEqual(yapi.yices_check_context(self.ctx, self.param),
                      yapi.STATUS_SAT)
     mdl = yapi.yices_get_model(self.ctx, 1)
     mdlstr = yapi.yices_model_to_string(mdl, 80, 100, 0)
     self.assertEqual(
         mdlstr,
         '(= b1 false)\n(= i1 1463)\n(= r1 -579)\n(function fun1\n (type (-> int bool real real))\n (= (fun1 1463 false -579) 1)\n (= (fun1 1464 true -2042) 0)\n (default 2))'
     )
     yv1 = yapi.yval_t()
     yapi.yices_get_value(mdl, fun1, yv1)
     self.assertEqual(yv1.node_tag, yapi.YVAL_FUNCTION)
     self.assertEqual(yapi.yices_val_function_arity(mdl, yv1), 3)
     def1 = yapi.yval_t()
     vec1 = yapi.yval_vector_t()
     yapi.yices_init_yval_vector(vec1)
     yapi.yices_val_expand_function(mdl, yv1, def1, vec1)
     self.assertEqual(def1.node_tag, yapi.YVAL_RATIONAL)
     i32val1 = c_int32()
     yapi.yices_val_get_int32(mdl, def1, i32val1)
     self.assertEqual(i32val1.value, 2)
     self.assertEqual(vec1.size, 2)
     map1 = vec1.data[0]
     map2 = vec1.data[1]
     self.assertEqual(map1.node_tag, yapi.YVAL_MAPPING)
     self.assertEqual(map2.node_tag, yapi.YVAL_MAPPING)
     self.assertEqual(yapi.yices_val_mapping_arity(mdl, map1), 3)
     self.assertEqual(yapi.yices_val_mapping_arity(mdl, map2), 3)
     # First mapping
     args1 = yapi.make_empty_yval_array(3)
     yval1 = yapi.yval_t()
     yapi.yices_val_expand_mapping(mdl, map1, args1, yval1)
     self.assertEqual(yval1.node_tag, yapi.YVAL_RATIONAL)
     self.assertEqual(yapi.yices_val_is_int32(mdl, yval1), 1)
     val1 = c_int32()
     yapi.yices_val_get_int32(mdl, yval1, val1)
     self.assertEqual(val1.value, 1)
     self.assertEqual(args1[0].node_tag, yapi.YVAL_RATIONAL)
     self.assertEqual(yapi.yices_val_is_int32(mdl, args1[0]), 1)
     m1arg1 = c_int32()
     yapi.yices_val_get_int32(mdl, args1[0], m1arg1)
     self.assertEqual(m1arg1.value, 1463)
     self.assertEqual(args1[1].node_tag, yapi.YVAL_BOOL)
     m1arg2 = c_int()
     yapi.yices_val_get_bool(mdl, args1[1], m1arg2)
     self.assertEqual(m1arg2.value, 0)
     m1arg3 = c_int32()
     yapi.yices_val_get_int32(mdl, args1[2], m1arg3)
     self.assertEqual(m1arg3.value, -579)
     # Second mapping
     args2 = yapi.make_empty_yval_array(3)
     yval2 = yapi.yval_t()
     yapi.yices_val_expand_mapping(mdl, map2, args2, yval2)
     self.assertEqual(yval2.node_tag, yapi.YVAL_RATIONAL)
     self.assertEqual(yapi.yices_val_is_int32(mdl, yval2), 1)
     val2 = c_int32()
     yapi.yices_val_get_int32(mdl, yval2, val2)
     self.assertEqual(val2.value, 0)
     self.assertEqual(args2[0].node_tag, yapi.YVAL_RATIONAL)
     self.assertEqual(yapi.yices_val_is_int32(mdl, args2[0]), 1)
     m2arg2 = c_int32()
     yapi.yices_val_get_int32(mdl, args2[0], m2arg2)
     self.assertEqual(m2arg2.value, 1464)
     self.assertEqual(args2[1].node_tag, yapi.YVAL_BOOL)
     m2arg2 = c_int()
     yapi.yices_val_get_bool(mdl, args2[1], m2arg2)
     self.assertEqual(m2arg2.value, 1)
     m2arg3 = c_int32()
     yapi.yices_val_get_int32(mdl, args2[2], m2arg3)
     self.assertEqual(m2arg3.value, -2042)
     fmla = yapi.yices_parse_term('(> i1 r1)')
     self.assertEqual(yapi.yices_formula_true_in_model(mdl, fmla), 1)
     a_arr = yapi.make_term_array([i1, fmla, r1])
     b_arr = yapi.make_empty_term_array(3)
     yapi.yices_term_array_value(mdl, 3, a_arr, b_arr)
     self.assertEqual(b_arr[0], yapi.yices_int32(1463))
     self.assertEqual(b_arr[1], yapi.yices_true())
     self.assertEqual(b_arr[2], yapi.yices_int32(-579))
     yapi.yices_pp_term_array_fd(1, 3, b_arr, 100, 10, 0, 0)
     tvec3 = yapi.term_vector_t()
     yapi.yices_init_term_vector(tvec3)
     yapi.yices_generalize_model(mdl, fmla, 1, a_arr, 0, tvec3)
     yapi.yices_delete_term_vector(tvec3)