3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-11 03:33:35 +00:00
z3/lib/front_end_params.cpp
Leonardo de Moura e9eab22e5c Z3 sources
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:35:25 -07:00

109 lines
5.1 KiB
C++

/*++
Copyright (c) 2006 Microsoft Corporation
Module Name:
front_end_params.cpp
Abstract:
<abstract>
Author:
Leonardo de Moura (leonardo) 2007-05-10.
Revision History:
--*/
#include"front_end_params.h"
void front_end_params::register_params(ini_params & p) {
p.register_param_vector(m_param_vector.get());
preprocessor_params::register_params(p);
spc_params::register_params(p);
smt_params::register_params(p);
parser_params::register_params(p);
arith_simplifier_params::register_params(p);
p.register_int_param("ENGINE", 0, 2, reinterpret_cast<int&>(m_engine), "0: SMT solver, 1: Superposition prover, 2: EPR solver, true");
z3_solver_params::register_params(p);
model_params::register_params(p);
p.register_unsigned_param("MAX_COUNTEREXAMPLES", m_max_num_cex,
"set the maximum number of counterexamples when using Simplify front end");
p.register_bool_param("AT_LABELS_CEX", m_at_labels_cex,
"only use labels that contain '@' when building multiple counterexamples");
p.register_bool_param("CHECK_AT_LABELS", m_check_at_labels,
"check that labels containing '@' are used correctly to only produce unique counter examples");
p.register_bool_param("DEFAULT_QID", m_default_qid, "create a default quantifier id based on its position, the id is used to report profiling information (see QI_PROFILE)");
p.register_bool_param("TYPE_CHECK", m_well_sorted_check, "enable/disable type checker");
p.register_bool_param("WELL_SORTED_CHECK", m_well_sorted_check, "enable/disable type checker");
p.register_bool_param("INTERACTIVE", m_interactive, "enable interactive mode using Simplify input format");
p.register_unsigned_param("SOFT_TIMEOUT", m_soft_timeout, "set approximate timeout for each solver query (milliseconds), the value 0 represents no timeout", true);
p.register_double_param("INSTRUCTION_MAX", m_instr_out, "set the (approximate) maximal number of instructions per invocation of check", true);
p.register_bool_param("AUTO_CONFIG", m_auto_config, "use heuristics to set Z3 configuration parameters, it is only available for the SMT-LIB input format");
p.register_int_param("PROOF_MODE", 0, 2, reinterpret_cast<int&>(m_proof_mode), "select proof generation mode: 0 - disabled, 1 - coarse grain, 2 - fine grain");
p.register_bool_param("TRACE", m_trace, "enable tracing for the Axiom Profiler tool");
p.register_string_param("TRACE_FILE_NAME", m_trace_file_name, "tracing file name");
p.register_bool_param("IGNORE_SETPARAMETER", m_ignore_setparameter, "ignore (SETPARAMETER ...) commands in Simplify format input");
p.register_bool_param("ASYNC_COMMANDS", m_async_commands, "enable/disable support for asynchronous commands in the Simplify front-end.");
p.register_bool_param("DISPLAY_CONFIG", m_display_config, "display configuration used by Z3");
#ifdef _WINDOWS
// The non-windows memory manager does not have access to memory sizes.
p.register_unsigned_param("MEMORY_HIGH_WATERMARK", m_memory_high_watermark,
"set high watermark for memory consumption (in megabytes)");
p.register_unsigned_param("MEMORY_MAX_SIZE", m_memory_max_size,
"set hard upper limit for memory consumption (in megabytes)");
#endif
#ifndef _EXTERNAL_RELEASE
// external users should not have access to it.
p.register_bool_param("PREPROCESS", m_preprocess);
#endif
p.register_bool_param("USER_THEORY_PREPROCESS_AXIOMS",
m_user_theory_preprocess_axioms,
"Apply full pre-processing to user theory axioms",
true);
p.register_bool_param("USER_THEORY_PERSIST_AXIOMS",
m_user_theory_persist_axioms,
"Persist user axioms to the base level",
true);
p.register_bool_param("SMTLIB2_COMPLIANT", m_smtlib2_compliant);
p.register_bool_param("IGNORE_BAD_PATTERNS", m_ignore_bad_patterns);
PRIVATE_PARAMS({
p.register_bool_param("IGNORE_CHECKSAT", m_ignore_checksat);
p.register_bool_param("DEBUG_REF_COUNT", m_debug_ref_count);
p.register_bool_param("IGNORE_USER_PATTERNS", m_ignore_user_patterns);
p.register_bool_param("INCREMENTAL_CORE_ASSERT", m_incremental_core_assert);
DEBUG_CODE(p.register_int_param("COPY_PARAMS", m_copy_params););
});
// temporary hack until strategic_solver is ported to new tactic framework
PRIVATE_PARAMS({
p.register_bool_param("NLSAT", m_nlsat);
});
}
void front_end_params::open_trace_file() {
if (m_trace) {
m_trace_stream = alloc(std::fstream, m_trace_file_name.c_str(), std::ios_base::out);
}
}
void front_end_params::close_trace_file() {
if (m_trace_stream != NULL) {
std::fstream &tmp = *m_trace_stream;
m_trace_stream = NULL;
tmp << "[eof]\n";
tmp.close();
// do not delete it, this might be called from a Ctrl-C signal handler
// and there might be someone writing to it
}
}