mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 04:28:17 +00:00
83 lines
3.6 KiB
C++
83 lines
3.6 KiB
C++
/*++
|
|
Copyright (c) 2011 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
params2front_end_params.h
|
|
|
|
Abstract:
|
|
|
|
Backward compatibility utilities for parameter setting
|
|
|
|
Author:
|
|
|
|
Leonardo de Moura (leonardo) 2011-05-19.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include"front_end_params.h"
|
|
#include"params.h"
|
|
|
|
/**
|
|
Update front_end_params using s.
|
|
Only the most frequently used options are updated.
|
|
|
|
This function is mainly used to allow smt::context to be used in
|
|
the new strategy framework.
|
|
*/
|
|
void params2front_end_params(params_ref const & s, front_end_params & t) {
|
|
t.m_quant_elim = s.get_bool(":elim-quant", t.m_quant_elim);
|
|
t.m_relevancy_lvl = s.get_uint(":relevancy", t.m_relevancy_lvl);
|
|
TRACE("qi_cost", s.display(tout); tout << "\n";);
|
|
t.m_qi_cost = s.get_str(":qi-cost", t.m_qi_cost.c_str());
|
|
t.m_mbqi = s.get_bool(":mbqi", t.m_mbqi);
|
|
t.m_mbqi_max_iterations = s.get_uint(":mbqi-max-iterations", t.m_mbqi_max_iterations);
|
|
t.m_random_seed = s.get_uint(":random-seed", t.m_random_seed);
|
|
t.m_model = s.get_bool(":produce-models", t.m_model);
|
|
if (s.get_bool(":produce-proofs", false))
|
|
t.m_proof_mode = PGM_FINE;
|
|
t.m_well_sorted_check = s.get_bool(":check-sorts", t.m_well_sorted_check);
|
|
t.m_qi_eager_threshold = s.get_double(":qi-eager-threshold", t.m_qi_eager_threshold);
|
|
t.m_qi_lazy_threshold = s.get_double(":qi-lazy-threshold", t.m_qi_lazy_threshold);
|
|
t.m_solver = s.get_bool(":solver", t.m_solver);
|
|
t.m_preprocess = s.get_bool(":preprocess", t.m_preprocess);
|
|
t.m_hi_div0 = s.get_bool(":hi-div0", t.m_hi_div0);
|
|
t.m_auto_config = s.get_bool(":auto-config", t.m_auto_config);
|
|
t.m_array_simplify = s.get_bool(":array-old-simplifier", t.m_array_simplify);
|
|
t.m_arith_branch_cut_ratio = s.get_uint(":arith-branch-cut-ratio", t.m_arith_branch_cut_ratio);
|
|
t.m_arith_expand_eqs = s.get_bool(":arith-expand-eqs", t.m_arith_expand_eqs);
|
|
|
|
if (s.get_bool(":arith-greatest-error-pivot", false))
|
|
t.m_arith_pivot_strategy = ARITH_PIVOT_GREATEST_ERROR;
|
|
else if (s.get_bool(":arith-least-error-pivot", false))
|
|
t.m_arith_pivot_strategy = ARITH_PIVOT_LEAST_ERROR;
|
|
}
|
|
|
|
/**
|
|
\brief Copy parameters (from s) that affect the semantics of Z3 (e.g., HI_DIV0).
|
|
It also copies the model construction parameter. Thus, model construction
|
|
can be enabled at the command line.
|
|
*/
|
|
void front_end_params2params(front_end_params const & s, params_ref & t) {
|
|
if (s.m_model)
|
|
t.set_bool(":produce-models", true);
|
|
if (!s.m_hi_div0)
|
|
t.set_bool(":hi-div0", false);
|
|
}
|
|
|
|
/**
|
|
\brief Bridge for using params_ref with smt::context.
|
|
*/
|
|
void solver_front_end_params_descrs(param_descrs & r) {
|
|
r.insert(":hi-div0", CPK_BOOL, "(default: true) if true, then Z3 uses the usual hardware interpretation for division (rem, mod) by zero. Otherwise, these operations are considered uninterpreted");
|
|
r.insert(":relevancy", CPK_UINT, "relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant");
|
|
r.insert(":mbqi", CPK_BOOL, "model based quantifier instantiation (MBQI)");
|
|
r.insert(":mbqi-max-iterations", CPK_UINT, "maximum number of rounds of MBQI");
|
|
r.insert(":random-seed", CPK_UINT, "random seed for smt solver");
|
|
r.insert(":qi-eager-threshold", CPK_DOUBLE, "threshold for eager quantifier instantiation");
|
|
r.insert(":qi-lazy-threshold", CPK_DOUBLE, "threshold for lazy quantifier instantiation");
|
|
r.insert(":auto_config", CPK_BOOL, "use heuristics to automatically configure smt solver");
|
|
r.insert(":arith-branch-cut-ratio", CPK_UINT, "branch&bound / gomory cut ratio");
|
|
}
|