mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
96 lines
3.5 KiB
C++
96 lines
3.5 KiB
C++
/*++
|
|
Copyright (c) 2012 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
smt_strategic_solver.h
|
|
|
|
Abstract:
|
|
|
|
Create a strategic solver with tactic for all main logics
|
|
used in SMT.
|
|
|
|
Author:
|
|
|
|
Leonardo (leonardo) 2012-02-19
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
#include"cmd_context.h"
|
|
#include"ni_solver.h"
|
|
#include"strategic_solver.h"
|
|
#include"qfbv_tactic.h"
|
|
#include"qflia_tactic.h"
|
|
#include"qfnia_tactic.h"
|
|
#include"qfnra_tactic.h"
|
|
#include"qfuf_tactic.h"
|
|
#include"qflra_tactic.h"
|
|
#include"quant_tactics.h"
|
|
#include"qfauflia_tactic.h"
|
|
#include"qfaufbv_tactic.h"
|
|
#include"qfufbv_tactic.h"
|
|
#include"qfidl_tactic.h"
|
|
#include"default_tactic.h"
|
|
#include"ufbv_tactic.h"
|
|
#include"qffpa_tactic.h"
|
|
|
|
MK_SIMPLE_TACTIC_FACTORY(qfuf_fct, mk_qfuf_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfidl_fct, mk_qfidl_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfauflia_fct, mk_qfauflia_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(auflia_fct, mk_auflia_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(auflira_fct, mk_auflira_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(aufnira_fct, mk_aufnira_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(ufnia_fct, mk_ufnia_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(uflra_fct, mk_uflra_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(lra_fct, mk_lra_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfbv_fct, mk_qfbv_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(default_fct, mk_default_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfaufbv_fct, mk_qfaufbv_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qflra_fct, mk_qflra_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qflia_fct, mk_qflia_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfufbv_fct, mk_qfufbv_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfnia_fct, mk_qfnia_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qfnra_fct, mk_qfnra_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(qffpa_fct, mk_qffpa_tactic(m, p));
|
|
MK_SIMPLE_TACTIC_FACTORY(ufbv_fct, mk_ufbv_tactic(m, p));
|
|
|
|
static void init(strategic_solver * s) {
|
|
s->set_default_tactic(alloc(default_fct));
|
|
s->set_tactic_for(symbol("QF_UF"), alloc(qfuf_fct));
|
|
s->set_tactic_for(symbol("QF_BV"), alloc(qfbv_fct));
|
|
s->set_tactic_for(symbol("QF_IDL"), alloc(qfidl_fct));
|
|
s->set_tactic_for(symbol("QF_LIA"), alloc(qflia_fct));
|
|
s->set_tactic_for(symbol("QF_LRA"), alloc(qflra_fct));
|
|
s->set_tactic_for(symbol("QF_NIA"), alloc(qfnia_fct));
|
|
s->set_tactic_for(symbol("QF_NRA"), alloc(qfnra_fct));
|
|
s->set_tactic_for(symbol("QF_AUFLIA"), alloc(qfauflia_fct));
|
|
s->set_tactic_for(symbol("QF_AUFBV"), alloc(qfaufbv_fct));
|
|
s->set_tactic_for(symbol("QF_ABV"), alloc(qfaufbv_fct));
|
|
s->set_tactic_for(symbol("QF_UFBV"), alloc(qfufbv_fct));
|
|
s->set_tactic_for(symbol("AUFLIA"), alloc(auflia_fct));
|
|
s->set_tactic_for(symbol("AUFLIRA"), alloc(auflira_fct));
|
|
s->set_tactic_for(symbol("AUFNIRA"), alloc(aufnira_fct));
|
|
s->set_tactic_for(symbol("UFNIA"), alloc(ufnia_fct));
|
|
s->set_tactic_for(symbol("UFLRA"), alloc(uflra_fct));
|
|
s->set_tactic_for(symbol("LRA"), alloc(lra_fct));
|
|
s->set_tactic_for(symbol("UFBV"), alloc(ufbv_fct));
|
|
s->set_tactic_for(symbol("BV"), alloc(ufbv_fct));
|
|
s->set_tactic_for(symbol("QF_FPA"), alloc(qffpa_fct));
|
|
}
|
|
|
|
solver * mk_smt_strategic_solver(cmd_context & ctx) {
|
|
strategic_solver * s = alloc(strategic_solver_cmd, ctx);
|
|
s->set_inc_solver(mk_quasi_incremental_smt_solver(ctx));
|
|
init(s);
|
|
return s;
|
|
}
|
|
|
|
solver * mk_smt_strategic_solver(bool force_tactic) {
|
|
strategic_solver * s = alloc(strategic_solver_api);
|
|
s->force_tactic(force_tactic);
|
|
s->set_inc_solver(mk_default_solver());
|
|
init(s);
|
|
return s;
|
|
}
|