Exemplo n.º 1
0
    def __init__(self, environment, logic, options=None, debugFile=None):
        Solver.__init__(self,
                        environment=environment,
                        logic=logic,
                        options=options)

        self.config = mathsat.msat_create_default_config(str(logic))
        check = mathsat.msat_set_option(self.config, "model_generation", "true")
        assert check == 0

        if debugFile is not None:
            mathsat.msat_set_option(self.config, "debug.api_call_trace", "1")
            mathsat.msat_set_option(self.config, "debug.api_call_trace_filename",
                                    debugFile)

        self.msat_env = mathsat.msat_create_env(self.config)

        self.realType = mathsat.msat_get_rational_type(self.msat_env)
        self.intType = mathsat.msat_get_integer_type(self.msat_env)
        self.boolType = mathsat.msat_get_bool_type(self.msat_env)

        self.mgr = environment.formula_manager
        self.converter = MSatConverter(environment, self.msat_env)
        return
Exemplo n.º 2
0
    def _prepare_config(self, options, debugFile=None):
        """Sets the relevant options in self.msat_config"""
        if options.generate_models:
            check = mathsat.msat_set_option(self.msat_config,
                                            "model_generation", "true")
            assert check == 0

        if options.unsat_cores_mode is not None:
            check = mathsat.msat_set_option(self.msat_config,
                                            "unsat_core_generation", "1")
            assert check == 0

        if debugFile is not None:
            mathsat.msat_set_option(self.msat_config, "debug.api_call_trace",
                                    "1")
            mathsat.msat_set_option(self.msat_config,
                                    "debug.api_call_trace_filename", debugFile)

        mathsat.msat_set_option(self.msat_config, "theory.bv.div_by_zero_mode",
                                "0")
Exemplo n.º 3
0
    def _prepare_config(self, options, debugFile=None):
        """Sets the relevant options in self.msat_config"""
        if options.generate_models:
            check = mathsat.msat_set_option(self.msat_config, "model_generation",
                                            "true")
            assert check == 0

        if options.unsat_cores_mode is not None:
            check = mathsat.msat_set_option(self.msat_config,
                                            "unsat_core_generation",
                                            "1")
            assert check == 0

        if debugFile is not None:
            mathsat.msat_set_option(self.msat_config,
                                    "debug.api_call_trace", "1")
            mathsat.msat_set_option(self.msat_config,
                                    "debug.api_call_trace_filename",
                                    debugFile)

        mathsat.msat_set_option(self.msat_config,
                                "theory.bv.div_by_zero_mode", "0")
Exemplo n.º 4
0
    def sequence_interpolant(self, formulas):
        cfg, env = None, None
        try:
            self._check_logic(formulas)

            if len(formulas) < 2:
                raise Exception("interpolation needs at least 2 formulae")

            cfg = mathsat.msat_create_config()
            mathsat.msat_set_option(cfg, "interpolation", "true")
            if self.logic == QF_BV:
                mathsat.msat_set_option(cfg, "theory.bv.eager", "false")
                mathsat.msat_set_option(cfg, "theory.eq_propagaion", "false")
            env = mathsat.msat_create_env(cfg, self.msat_env())

            groups = []
            for f in formulas:
                f = self.converter.convert(f)
                g = mathsat.msat_create_itp_group(env)
                mathsat.msat_set_itp_group(env, g)
                groups.append(g)
                mathsat.msat_assert_formula(env, f)

            res = mathsat.msat_solve(env)
            if res == mathsat.MSAT_UNKNOWN:
                raise Exception("error in mathsat interpolation: %s" %
                                mathsat.msat_last_error_message(env))

            if res == mathsat.MSAT_SAT:
                return None

            pysmt_ret = []
            for i in xrange(1, len(groups)):
                itp = mathsat.msat_get_interpolant(env, groups[:i])
                f = self.converter.back(itp)
                pysmt_ret.append(f)

            return pysmt_ret
        finally:
            if cfg:
                mathsat.msat_destroy_config(cfg)
            if env:
                mathsat.msat_destroy_env(env)
Exemplo n.º 5
0
Arquivo: msat.py Projeto: idkwim/pysmt
    def sequence_interpolant(self, formulas):
        cfg, env = None, None
        try:
            self._check_logic(formulas)

            if len(formulas) < 2:
                raise Exception("interpolation needs at least 2 formulae")

            cfg = mathsat.msat_create_config()
            mathsat.msat_set_option(cfg, "interpolation", "true")
            if self.logic == QF_BV:
                mathsat.msat_set_option(cfg, "theory.bv.eager", "false")
                mathsat.msat_set_option(cfg, "theory.eq_propagaion", "false")
            env = mathsat.msat_create_env(cfg, self.msat_env)

            groups = []
            for f in formulas:
                f = self.converter.convert(f)
                g = mathsat.msat_create_itp_group(env)
                mathsat.msat_set_itp_group(env, g)
                groups.append(g)
                mathsat.msat_assert_formula(env, f)

            res = mathsat.msat_solve(env)
            if res == mathsat.MSAT_UNKNOWN:
                raise Exception("error in mathsat interpolation: %s" %
                                mathsat.msat_last_error_message(env))

            if res == mathsat.MSAT_SAT:
                return None

            pysmt_ret = []
            for i in xrange(1, len(groups)):
                itp = mathsat.msat_get_interpolant(env, groups[:i])
                f = self.converter.back(itp)
                pysmt_ret.append(f)

            return pysmt_ret
        finally:
            if cfg:
                mathsat.msat_destroy_config(cfg)
            if env:
                mathsat.msat_destroy_env(env)