mirror of
https://github.com/Z3Prover/z3
synced 2026-04-07 05:02:48 +00:00
When a monic x*y has a factor x with mod(x, p) = 0 (fixed), propagate mod(x*y, p) = 0. This enables Z3 to prove divisibility properties like x mod p = 0 => (x*y) mod p = 0, which previously timed out even for p = 2. The lemma fires in the NLA divisions check and allows Gröbner basis and LIA to subsequently derive distributivity of div over addition. Extends division tuples from (q, x, y) to (q, x, y, r) to track the mod lpvar. Also registers bounded divisions from the mod internalization path in theory_lra, not just the idiv path. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
174 lines
3.7 KiB
CMake
174 lines
3.7 KiB
CMake
add_subdirectory(fuzzing)
|
|
add_subdirectory(lp)
|
|
################################################################################
|
|
# z3-test executable
|
|
################################################################################
|
|
set(z3_test_deps api fuzzing simplex)
|
|
z3_expand_dependencies(z3_test_expanded_deps ${z3_test_deps})
|
|
set (z3_test_extra_object_files "")
|
|
foreach (component ${z3_test_expanded_deps})
|
|
list(APPEND z3_test_extra_object_files $<TARGET_OBJECTS:${component}>)
|
|
endforeach()
|
|
add_executable(test-z3
|
|
EXCLUDE_FROM_ALL
|
|
ackermannize.cpp
|
|
algebraic.cpp
|
|
algebraic_numbers.cpp
|
|
api_ast_map.cpp
|
|
api_bug.cpp
|
|
api_special_relations.cpp
|
|
api.cpp
|
|
api_algebraic.cpp
|
|
api_polynomial.cpp
|
|
api_pb.cpp
|
|
api_datalog.cpp
|
|
parametric_datatype.cpp
|
|
arith_rewriter.cpp
|
|
arith_simplifier_plugin.cpp
|
|
ast.cpp
|
|
bdd.cpp
|
|
bit_blaster.cpp
|
|
bits.cpp
|
|
bit_vector.cpp
|
|
buffer.cpp
|
|
chashtable.cpp
|
|
check_assumptions.cpp
|
|
cnf_backbones.cpp
|
|
cube_clause.cpp
|
|
datalog_parser.cpp
|
|
ddnf.cpp
|
|
deep_api_bugs.cpp
|
|
diff_logic.cpp
|
|
distribution.cpp
|
|
dl_context.cpp
|
|
dl_product_relation.cpp
|
|
dl_query.cpp
|
|
dl_relation.cpp
|
|
dl_table.cpp
|
|
dl_util.cpp
|
|
doc.cpp
|
|
dlist.cpp
|
|
egraph.cpp
|
|
escaped.cpp
|
|
euf_bv_plugin.cpp
|
|
euf_arith_plugin.cpp
|
|
ex.cpp
|
|
expr_rand.cpp
|
|
expr_substitution.cpp
|
|
ext_numeral.cpp
|
|
f2n.cpp
|
|
finite_set.cpp
|
|
finite_set_rewriter.cpp
|
|
fpa.cpp
|
|
factor_rewriter.cpp
|
|
finder.cpp
|
|
fixed_bit_vector.cpp
|
|
for_each_file.cpp
|
|
get_consequences.cpp
|
|
get_implied_equalities.cpp
|
|
"${CMAKE_CURRENT_BINARY_DIR}/gparams_register_modules.cpp"
|
|
hashtable.cpp
|
|
heap.cpp
|
|
heap_trie.cpp
|
|
hilbert_basis.cpp
|
|
ho_matcher.cpp
|
|
horn_subsume_model_converter.cpp
|
|
horner.cpp
|
|
hwf.cpp
|
|
inf_rational.cpp
|
|
"${CMAKE_CURRENT_BINARY_DIR}/install_tactic.cpp"
|
|
interval.cpp
|
|
karr.cpp
|
|
list.cpp
|
|
main.cpp
|
|
map.cpp
|
|
matcher.cpp
|
|
"${CMAKE_CURRENT_BINARY_DIR}/mem_initializer.cpp"
|
|
memory.cpp
|
|
model2expr.cpp
|
|
model_based_opt.cpp
|
|
mod_factor.cpp
|
|
model_evaluator.cpp
|
|
model_retrieval.cpp
|
|
monomial_bounds.cpp
|
|
mpbq.cpp
|
|
mpf.cpp
|
|
mpff.cpp
|
|
mpfx.cpp
|
|
mpq.cpp
|
|
mpz.cpp
|
|
nlarith_util.cpp
|
|
nla_intervals.cpp
|
|
nlsat.cpp
|
|
no_overflow.cpp
|
|
object_allocator.cpp
|
|
old_interval.cpp
|
|
optional.cpp
|
|
parray.cpp
|
|
pb2bv.cpp
|
|
pdd.cpp
|
|
pdd_solver.cpp
|
|
permutation.cpp
|
|
polynomial.cpp
|
|
polynomial_factorization.cpp
|
|
polynorm.cpp
|
|
prime_generator.cpp
|
|
proof_checker.cpp
|
|
qe_arith.cpp
|
|
quant_elim.cpp
|
|
quant_solve.cpp
|
|
random.cpp
|
|
rational.cpp
|
|
rcf.cpp
|
|
region.cpp
|
|
sat_local_search.cpp
|
|
sat_lookahead.cpp
|
|
sat_user_scope.cpp
|
|
scoped_timer.cpp
|
|
scoped_vector.cpp
|
|
simple_parser.cpp
|
|
simplex.cpp
|
|
simplifier.cpp
|
|
sls_test.cpp
|
|
sls_seq_plugin.cpp
|
|
small_object_allocator.cpp
|
|
smt2print_parse.cpp
|
|
smt_context.cpp
|
|
solver_pool.cpp
|
|
sorting_network.cpp
|
|
stack.cpp
|
|
string_buffer.cpp
|
|
substitution.cpp
|
|
symbol.cpp
|
|
symbol_table.cpp
|
|
tbv.cpp
|
|
theory_dl.cpp
|
|
theory_pb.cpp
|
|
timeout.cpp
|
|
total_order.cpp
|
|
totalizer.cpp
|
|
trigo.cpp
|
|
udoc_relation.cpp
|
|
uint_set.cpp
|
|
upolynomial.cpp
|
|
value_generator.cpp
|
|
value_sweep.cpp
|
|
var_subst.cpp
|
|
vector.cpp
|
|
lp/lp.cpp
|
|
lp/nla_solver_test.cpp
|
|
zstring.cpp
|
|
${z3_test_extra_object_files}
|
|
)
|
|
z3_add_install_tactic_rule(${z3_test_deps})
|
|
z3_add_memory_initializer_rule(${z3_test_deps})
|
|
z3_add_gparams_register_modules_rule(${z3_test_deps})
|
|
target_compile_definitions(test-z3 PRIVATE ${Z3_COMPONENT_CXX_DEFINES})
|
|
target_compile_options(test-z3 PRIVATE ${Z3_COMPONENT_CXX_FLAGS})
|
|
target_link_libraries(test-z3 PRIVATE ${Z3_DEPENDENT_LIBS})
|
|
target_include_directories(test-z3 PRIVATE ${Z3_COMPONENT_EXTRA_INCLUDE_DIRS})
|
|
z3_append_linker_flag_list_to_target(test-z3 ${Z3_DEPENDENT_EXTRA_CXX_LINK_FLAGS})
|
|
z3_add_component_dependencies_to_target(test-z3 ${z3_test_expanded_deps})
|
|
|
|
|
|
|