mirror of
https://github.com/Z3Prover/z3
synced 2025-08-26 04:56:03 +00:00
* very basic setup * ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * respect smt configuration parameter in elim_unconstrained simplifier Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * indentation * add bash files for test runs * add option to selectively disable variable solving for only ground expressions Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove verbose output Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #7745 axioms for len(substr(...)) escaped due to nested rewriting * ensure atomic constraints are processed by arithmetic solver * #7739 optimization add simplification rule for at(x, offset) = "" Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions. The example highlights some opportunities for simplification, noteworthy at(..) = "". The example is solved in both versions after adding this simplification. * fix unsound len(substr) axiom Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * FreshConst is_sort (#7748) * #7750 add pre-processing simplification * Add parameter validation for selected API functions * updates to ac-plugin fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop. * enable passive, add check for bloom up-to-date * add top-k fixed-sized min-heap priority queue for top scoring literals * set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still * fix bug in parallel solving batch setup * fix bug * allow for internalize implies * disable pre-processing during cubing * debugging * remove default constructor * remove a bunch of string copies * Update euf_ac_plugin.cpp include reduction rules in forward simplification * Update euf_completion.cpp try out restricting scope of equalities added by instantation * Update smt_parallel.cpp Drop non-relevant units from shared structures. * process cubes as lists of individual lits * merge * Add support for Algebraic Datatypes in JavaScript/TypeScript bindings (#7734) * Initial plan * Add datatype type definitions to types.ts (work in progress) Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Complete datatype type definitions with working TypeScript compilation Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Implement core datatype functionality with TypeScript compilation success Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Complete datatype implementation with full Context integration and tests Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * chipping away at the new code structure * comments * debug infinite recursion and split cubes on existing split atoms that aren't in the cube * share lemmas, learn from unsat core, try to debug a couple of things, there was a subtle bug that i have a hard time repro'ing * merge * fix #7603: race condition in Ctrl-C handling (#7755) * fix #7603: race condition in Ctrl-C handling * fix race in cancel_eh * fix build * add arithemtic saturation * add an option to register callback on quantifier instantiation Suppose a user propagator encodes axioms using quantifiers and uses E-matching for instantiation. If it wants to implement a custom priority scheme or drop some instances based on internal checks it can register a callback with quantifier instantiation * missing new closure Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add Z3_solver_propagate_on_binding to ml callback declarations Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add python file Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local> * debug under defined calls Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * more untangle params Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * precalc parameters to define the eval order Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * remove a printout Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * rename a Python file Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * add on_binding callbacks across APIs update release notes, add to Java, .Net, C++ * use jboolean in Native interface Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * register on_binding attribute Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix java build for java bindings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * avoid interferring side-effects in function calls Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove theory_str and classes that are only used by it * remove automata from python build Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove ref to theory_str Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * get the finest factorizations before project Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * rename add_lcs to add_lc Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * resolve bad bug about l2g and g2l translators using wrong global context. add some debug prints * initial attempt at dynamically switching from greedy to frugal splitting strategy in return_cubes. need to test. also there is some bug where the threads take forever to cancel? * Update RELEASE_NOTES.md * resolve bug about not translating managers correctly for the second phase of the greedy cubing, and the frugal fallback --------- Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local> Signed-off-by: Lev Nachmanson <levnach@hotmail.com> Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com> Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com> Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> Co-authored-by: Lev Nachmanson <levnach@hotmail.com>
128 lines
3.9 KiB
C++
128 lines
3.9 KiB
C++
/*++
|
|
Copyright (c) 2006 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
smt_setup.h
|
|
|
|
Abstract:
|
|
|
|
<abstract>
|
|
|
|
Author:
|
|
|
|
Leonardo de Moura (leonardo) 2008-06-24.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "ast/ast.h"
|
|
#include "params/smt_params.h"
|
|
|
|
struct static_features;
|
|
namespace smt {
|
|
|
|
enum config_mode {
|
|
CFG_BASIC, // install theories based on user options
|
|
CFG_LOGIC, // install theories and configure Z3 based on the value of the parameter set-logic.
|
|
CFG_AUTO // install theories based on static features of the input formula
|
|
};
|
|
|
|
class context;
|
|
/**
|
|
\brief Object used to setup a logical context.
|
|
|
|
\warning In the current version, we can only setup a logical context at scope level 0,
|
|
and before internalizing any formula. Auxiliary temporary contexts are used to avoid this
|
|
limitation.
|
|
*/
|
|
class setup {
|
|
context & m_context;
|
|
ast_manager & m_manager;
|
|
smt_params & m_params;
|
|
symbol m_logic;
|
|
bool m_already_configured;
|
|
void setup_auto_config();
|
|
void setup_default();
|
|
//
|
|
// setup_<logic>() methods do not depend on static features of the formula. So, they are safe to use
|
|
// even in an incremental setting.
|
|
//
|
|
// setup_<logic>(static_features & st) can only be used if the logical context will perform a single
|
|
// check.
|
|
//
|
|
void setup_QF_DT();
|
|
void setup_QF_UF();
|
|
void setup_QF_UF(static_features const & st);
|
|
void setup_QF_RDL();
|
|
void setup_QF_RDL(static_features & st);
|
|
void setup_QF_IDL();
|
|
void setup_QF_IDL(static_features & st);
|
|
void setup_QF_UFIDL();
|
|
void setup_QF_UFIDL(static_features & st);
|
|
void setup_QF_LRA();
|
|
void setup_QF_LRA(static_features const & st);
|
|
void setup_QF_LIA();
|
|
void setup_QF_LIRA(static_features const& st);
|
|
void setup_QF_LIA(static_features const & st);
|
|
void setup_QF_UFLIA();
|
|
void setup_QF_UFLIA(static_features & st);
|
|
void setup_QF_UFLRA();
|
|
void setup_QF_BV();
|
|
void setup_QF_AUFBV();
|
|
void setup_QF_AX();
|
|
void setup_QF_AX(static_features const & st);
|
|
void setup_QF_AUFLIA();
|
|
void setup_QF_AUFLIA(static_features const & st);
|
|
void setup_QF_FP();
|
|
void setup_QF_FPBV();
|
|
void setup_QF_S();
|
|
void setup_LRA();
|
|
void setup_CSP();
|
|
void setup_special_relations();
|
|
void setup_polymorphism();
|
|
void setup_AUFLIA(bool simple_array = true);
|
|
void setup_AUFLIA(static_features const & st);
|
|
void setup_AUFLIRA(bool simple_array = true);
|
|
void setup_UFNIA();
|
|
void setup_UFLRA();
|
|
void setup_AUFLIAp();
|
|
void setup_AUFNIRA();
|
|
void setup_QF_BVRE();
|
|
void setup_unknown();
|
|
void setup_unknown(static_features & st);
|
|
void setup_arrays();
|
|
void setup_datatypes();
|
|
void setup_recfuns();
|
|
void setup_bv();
|
|
void setup_arith();
|
|
void setup_dl();
|
|
void setup_seq_str(static_features const & st);
|
|
void setup_seq();
|
|
void setup_char();
|
|
void setup_card();
|
|
void setup_sls();
|
|
void setup_i_arith();
|
|
void setup_mi_arith();
|
|
void setup_lra_arith();
|
|
void setup_fpa();
|
|
void setup_relevancy(static_features& st);
|
|
|
|
public:
|
|
setup(context & c, smt_params & params);
|
|
void mark_already_configured() { m_already_configured = true; }
|
|
bool already_configured() const { return m_already_configured; }
|
|
bool set_logic(symbol logic) {
|
|
if (already_configured())
|
|
return false;
|
|
m_logic = logic;
|
|
return true;
|
|
}
|
|
symbol const & get_logic() const { return m_logic; }
|
|
void operator()(config_mode cm);
|
|
};
|
|
};
|
|
|
|
|