3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-17 06:15:37 +00:00
z3/src/smt
Nikolaj Bjorner df77541aae #6758
check-assumptions with compound formulas create fresh proxy variables both during compilation to internal format and for the assumptions. These fresh variables may occur in lemmas that are created during search. The lemmas are garbage for future check-sats, but the solver needs to be allowed to invoke GC. Adding a GC call before a check-sat with assumptions allows removing some lemmas every time a new assumptions are used. Eager GC when using assumptions is used elsewhere, for example in cube&conquer scenarios where lemmas learned from one set of assumptions are less likely to be useful for other assumptions.

With the GC invocation memory grows at a lesser pace. However, it is not entirely free of memory increases. To avoid memory bloat, have the solver pre-compile the assumptions by defining them as propositional variables, add assertions that the propositional variables are equivalent to the compound formulas and use the propositional variables as assumptions. The same propositional variables come with no extra overhead when invoking check-assumptions. The lemmas are then over the same fixed vocabulary. It is generally a good idea to recycle useful lemmas during the enumeration pass.
2023-06-18 16:21:41 -07:00
..
params add preprocessor parameter whether to use bound simplifier 2023-02-28 17:40:08 -08:00
proto_model remove output 2023-05-11 12:31:05 -07:00
tactic fix bug in new core not detecting conflict, fix #6525, add tactic doc 2023-01-14 17:20:43 -05:00
arith_eq_adapter.cpp Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
arith_eq_adapter.h booyah 2020-07-04 15:56:30 -07:00
arith_eq_solver.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
arith_eq_solver.h booyah 2020-07-04 15:56:30 -07:00
CMakeLists.txt rename files to theory_user_propagator 2021-11-29 19:44:58 -08:00
database.h Make sure all headers do #pragma once. (#6188) 2022-07-23 10:41:14 -07:00
database.smt
diff_logic.h call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
dyn_ack.cpp Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
dyn_ack.h arrays (#4684) 2020-09-13 19:29:59 -07:00
expr_context_simplifier.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
expr_context_simplifier.h booyah 2020-07-04 15:56:30 -07:00
fingerprints.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
fingerprints.h arrays (#4684) 2020-09-13 19:29:59 -07:00
mam.cpp update do logging 2023-02-19 09:59:33 -08:00
mam.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
old_interval.cpp fix #5895 2022-03-12 09:17:13 -08:00
old_interval.h buffer: require a move constructor to avoid copies 2020-06-03 11:57:49 +01:00
qi_queue.cpp regression on quantifier weight computation when weights are 0 vs non-0. It modifies a change made for the fix of #2667. That fix caused a regression in F*. Reported @mtzguido 2023-06-06 16:35:37 -07:00
qi_queue.h add priority queue to instantiation 2021-01-31 16:17:52 -08:00
seq_axioms.cpp add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
seq_axioms.h na 2022-01-01 17:59:31 -08:00
seq_eq_solver.cpp remove assertion - literals could be assigned but propagation incomplete 2022-01-21 03:10:41 +01:00
seq_ne_solver.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
seq_offset_eq.cpp streamline pb solver interface and naming after removal of xor 2021-02-28 12:32:04 -08:00
seq_offset_eq.h fix misspelled \brief for doxygen (#5632) 2021-10-29 15:34:28 +02:00
seq_regex.cpp remove dead code 2021-12-14 13:42:52 -08:00
seq_regex.h fix co-factoring' 2021-12-14 10:12:38 -08:00
smt2_extra_cmds.cpp
smt2_extra_cmds.h booyah 2020-07-04 15:56:30 -07:00
smt_almost_cg_table.cpp streamline pb solver interface and naming after removal of xor 2021-02-28 12:32:04 -08:00
smt_almost_cg_table.h booyah 2020-07-04 15:56:30 -07:00
smt_arith_value.cpp streamline pb solver interface and naming after removal of xor 2021-02-28 12:32:04 -08:00
smt_arith_value.h enable ranges for bit-vectors 2020-08-13 10:53:37 -07:00
smt_b_justification.h remove unneeded constructors (last round) 2020-07-12 17:41:57 +01:00
smt_bool_var_data.h booyah 2020-07-04 15:56:30 -07:00
smt_case_split_queue.cpp extract multi-patterns when pattern can be decomposed 2023-03-31 12:45:51 -07:00
smt_case_split_queue.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_cg_table.cpp streamline pb solver interface and naming after removal of xor 2021-02-28 12:32:04 -08:00
smt_cg_table.h booyah 2020-07-04 15:56:30 -07:00
smt_checker.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
smt_checker.h booyah 2020-07-04 15:56:30 -07:00
smt_clause.cpp consolidate literals 2021-05-20 12:58:27 -07:00
smt_clause.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_clause_proof.cpp fixes to mbqi in the new core based on #6575 2023-02-10 16:56:06 -08:00
smt_clause_proof.h memory leak on proof justifications 2023-01-10 18:58:25 -08:00
smt_conflict_resolution.cpp add logging of propagations to smt core 2022-11-23 11:37:23 +07:00
smt_conflict_resolution.h call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
smt_consequences.cpp wip 2022-04-16 14:55:43 +02:00
smt_context.cpp #6758 2023-06-18 16:21:41 -07:00
smt_context.h be nicer when memout is reached in SMT internalize: return undef rather than crashing 2022-12-29 11:08:57 +00:00
smt_context_inv.cpp more useful diagnostics 2021-09-01 20:50:35 -07:00
smt_context_pp.cpp fix #6748 2023-06-07 15:59:39 -07:00
smt_context_stat.cpp remove '#include <iostream>' from headers and from unneeded places 2022-06-17 14:10:19 +01:00
smt_enode.cpp add handling of quantifiers #5612 2021-10-20 12:27:56 -04:00
smt_enode.h reduce sizeof(enode) from 120 to 112 bytes by swapping the order of fields 2022-06-17 12:07:15 +01:00
smt_eq_justification.h booyah 2020-07-04 15:56:30 -07:00
smt_failure.h flag incomplete on lambdas #5803 2022-01-31 11:54:06 -08:00
smt_farkas_util.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
smt_farkas_util.h booyah 2020-07-04 15:56:30 -07:00
smt_for_each_relevant_expr.cpp
smt_for_each_relevant_expr.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_implied_equalities.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
smt_implied_equalities.h booyah 2020-07-04 15:56:30 -07:00
smt_induction.cpp.disabled remove dependencies on stale component 2021-08-16 17:52:36 -07:00
smt_induction.h.disabled remove dependencies on stale component 2021-08-16 17:52:36 -07:00
smt_internalizer.cpp print lemmas2console faster 2023-03-20 17:07:04 +01:00
smt_justification.cpp added API to monitor clause inferences 2022-10-19 08:34:55 -07:00
smt_justification.h add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
smt_kernel.cpp experimental feature to access congruence closure of SimpleSolver 2022-12-30 21:41:27 -08:00
smt_kernel.h experimental feature to access congruence closure of SimpleSolver 2022-12-30 21:41:27 -08:00
smt_literal.cpp consolidate literals 2021-05-20 12:58:27 -07:00
smt_literal.h consolidate literals 2021-05-20 12:58:27 -07:00
smt_lookahead.cpp Add support of the SunOS platform (Solaris, OpenSolaris, OpenIndiana) (#4757) 2020-10-27 11:39:21 -07:00
smt_lookahead.h handle better cancellation for parallel, switch between cube mode and base level mode in smt.threads, expose parameters to control theory_bv and phase caching 2020-08-16 23:29:24 -07:00
smt_model_checker.cpp fix #6662 2023-04-08 17:14:39 -07:00
smt_model_checker.h fix #6662 2023-04-08 17:14:39 -07:00
smt_model_finder.cpp Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_model_finder.h fix compiler warnings #4727 2020-10-18 11:31:21 +01:00
smt_model_generator.cpp fix mbqi value caching issue raised by Clemens and Martin 2023-01-15 22:47:34 -05:00
smt_model_generator.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_parallel.cpp use some suggestions from #5615 2021-10-22 12:39:55 -04:00
smt_parallel.h
smt_quantifier.cpp Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
smt_quantifier.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_quantifier_instances.h booyah 2020-07-04 15:56:30 -07:00
smt_quick_checker.cpp call it data instead of c_ptr for approaching C++11 std::vector convention. 2021-04-13 18:17:35 -07:00
smt_quick_checker.h booyah 2020-07-04 15:56:30 -07:00
smt_relevancy.cpp Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
smt_relevancy.h Use = default for virtual constructors. 2022-08-05 18:11:46 +03:00
smt_setup.cpp #6646 2023-03-25 17:37:59 -07:00
smt_setup.h missing 2021-01-26 17:07:46 -08:00
smt_solver.cpp experimental feature to access congruence closure of SimpleSolver 2022-12-30 21:41:27 -08:00
smt_solver.h booyah 2020-07-04 15:56:30 -07:00
smt_statistics.cpp
smt_statistics.h remove '#include <iostream>' from headers and from unneeded places 2022-06-17 14:10:19 +01:00
smt_theory.cpp fix regression from today, see #5676 2021-12-01 14:29:53 -08:00
smt_theory.h introduce notion of beta redex to deal with lambdas in non-extensional positions 2022-06-10 17:35:01 -07:00
smt_types.h signed 2021-05-21 15:51:27 -07:00
smt_value_sort.cpp refactor get_sort 2021-02-02 04:45:54 -08:00
smt_value_sort.h booyah 2020-07-04 15:56:30 -07:00
spanning_tree.h booyah 2020-07-04 15:56:30 -07:00
spanning_tree_base.h booyah 2020-07-04 15:56:30 -07:00
spanning_tree_def.h booyah 2020-07-04 15:56:30 -07:00
theory_arith.cpp
theory_arith.h remove references to validating 2023-04-26 10:05:00 -07:00
theory_arith_aux.h apply relevancy filtering on unsupported ops, fix term construction bug in bv2fpa_converter fix #6548 2023-01-20 13:05:01 -08:00
theory_arith_core.h remove references to validating 2023-04-26 10:05:00 -07:00
theory_arith_def.h booyah 2020-07-04 15:56:30 -07:00
theory_arith_eq.h Fix typos. (#6291) 2022-08-21 12:40:07 -07:00
theory_arith_int.h count gcd conflicts 2023-04-26 10:05:00 -07:00
theory_arith_inv.h booyah 2020-07-04 15:56:30 -07:00
theory_arith_nl.h fix #6713 fix #6714 2023-05-08 12:24:20 -07:00
theory_arith_pp.h count gcd conflicts, log row id in rows 2023-04-26 10:05:00 -07:00
theory_array.cpp fix #6410 2022-10-18 12:34:45 -07:00
theory_array.h fix #5812 2022-02-04 13:08:52 -08:00
theory_array_bapa.cpp Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
theory_array_bapa.h booyah 2020-07-04 15:56:30 -07:00
theory_array_base.cpp fix #6749 2023-06-07 16:09:50 -07:00
theory_array_base.h add option to select with folding 2022-08-04 16:59:26 +03:00
theory_array_full.cpp fix #6624 2023-03-22 14:00:09 +01:00
theory_array_full.h fix #6591 2023-02-19 11:09:52 -08:00
theory_bv.cpp Fix UP's decide callback (#6707) 2023-06-02 09:52:54 +02:00
theory_bv.h Fix UP's decide callback (#6707) 2023-06-02 09:52:54 +02:00
theory_char.cpp add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_char.h bv2char and char2bv with Clemens 2021-09-13 16:09:03 +02:00
theory_datatype.cpp add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_datatype.h fix unsoundness in explanation handling for nested datatypes and sequences 2022-07-03 17:00:39 -07:00
theory_dense_diff_logic.cpp
theory_dense_diff_logic.h add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_dense_diff_logic_def.h Fix some warnings about unused stuff. (#6290) 2022-08-21 12:39:30 -07:00
theory_diff_logic.cpp
theory_diff_logic.h add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_diff_logic_def.h add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_dl.cpp streamline pb solver interface and naming after removal of xor 2021-02-28 12:32:04 -08:00
theory_dl.h booyah 2020-07-04 15:56:30 -07:00
theory_dummy.cpp remove template Context dependency in every trail object 2021-02-08 15:41:57 -08:00
theory_dummy.h Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
theory_fpa.cpp compiler warning 2023-02-02 19:23:30 -08:00
theory_fpa.h Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
theory_lra.cpp add guard for eq adapter 2023-06-13 16:39:53 -07:00
theory_lra.h remove experimental option. Fix #4806 2020-11-20 11:46:19 -08:00
theory_opt.cpp
theory_opt.h Add and fix a few general compiler warnings. (#5628) 2021-10-29 15:42:32 +02:00
theory_pb.cpp deal with compiler warnings (unused variables etc) 2023-02-18 17:53:37 -08:00
theory_pb.h Make sure all headers do #pragma once. (#6188) 2022-07-23 10:41:14 -07:00
theory_recfun.cpp fix #6501 2022-12-19 21:02:55 -08:00
theory_recfun.h Treat arguments to recursive functions as beta redexes 2022-06-14 09:51:06 -07:00
theory_seq.cpp filter length limits to be non-skolems and under concat/""/unit 2022-09-15 07:41:13 -07:00
theory_seq.h solve for fold, expand rewrites under fold/map 2022-09-11 11:32:18 -07:00
theory_seq_empty.h remove template Context dependency in every trail object 2021-02-08 15:41:57 -08:00
theory_special_relations.cpp avoid name clash for multiple special relations #6743 2023-06-07 17:55:11 -07:00
theory_special_relations.h fix #4901 2021-10-12 17:10:04 -07:00
theory_str.cpp unused variables 2022-10-20 09:09:06 -07:00
theory_str.h Remove empty leaf destructors. (#6211) 2022-07-30 10:07:03 +01:00
theory_str_mc.cpp remove symbol -> zstring -> symbol round-trips 2021-05-22 13:12:49 -07:00
theory_str_regex.cpp fix re.range symbolic argument bug in z3str3 (#6189) 2022-07-27 04:24:20 +02:00
theory_user_propagator.cpp Fix UP's decide callback (#6707) 2023-06-02 09:52:54 +02:00
theory_user_propagator.h Fix UP's decide callback (#6707) 2023-06-02 09:52:54 +02:00
theory_utvpi.cpp
theory_utvpi.h remove a hundred implicit constructors/destructors 2021-05-23 14:25:01 +01:00
theory_utvpi_def.h add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_wmaxsat.cpp add options for logging learned lemmas and theory axioms 2022-08-08 11:18:56 +03:00
theory_wmaxsat.h move model and proof converters to self-contained module 2022-11-03 05:23:01 -07:00
uses_theory.cpp
uses_theory.h booyah 2020-07-04 15:56:30 -07:00
watch_list.cpp fix #4856 2020-12-06 14:06:08 -08:00
watch_list.h enable ranges for bit-vectors 2020-08-13 10:53:37 -07:00