mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 13:29:11 +00:00 
			
		
		
		
	* Initial plan * Update Z3_mk_datatype_sort API to accept array of parameters Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Update language bindings for parametric datatype sort API - Python: Updated DatatypeSort() to accept optional params list - OCaml: Added mk_sort_ref_p/mk_sort_ref_ps for parametric datatypes - .NET: Added MkDatatypeSortRef() methods with optional params - Java: Added mkDatatypeSortRef() methods with optional params - All changes maintain backward compatibility Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Fix .NET build error - rename params to parameters The 'params' keyword is reserved in C#, causing compilation errors. Renamed parameter from 'params' to 'parameters' in MkDatatypeSortRef methods. Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add unit test for parametric datatypes Added test_parametric_datatype.cpp to demonstrate polymorphic datatypes. The test creates two concrete instantiations of a generic pair concept: - pair_int_real with fields (first:Int, second:Real) - pair_real_int with fields (first:Real, second:Int) Then verifies that accessors work correctly and type checking is enforced. Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Implement polymorphic type variables support for parametric datatypes - Modified datatype_decl_plugin to allow type variables as parameters - Updated mk_datatype_decl to extract type variables from field sorts - Type variables are collected in order of first appearance - Revised unit test to use Z3_mk_type_variable for polymorphic datatypes - Test creates pair datatype with type variables alpha and beta - Successfully instantiates with concrete types (pair Int Real) and (pair Real Int) - Verifies accessor types match and equality terms are well-typed - All tests pass Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add Z3_mk_polymorphic_datatype API and refactor datatype creation - Added new API Z3_mk_polymorphic_datatype to z3_api.h - Renamed static mk_datatype_decl to api_datatype_decl in api_datatype.cpp - Modified api_datatype_decl to accept explicit type parameters - Updated all callers to use renamed function - Added test_polymorphic_datatype_api demonstrating new API usage - Both tests pass successfully Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Remove type variable collection logic from constructors Removed the logic for collecting type variables from field sorts based on constructors. * Update comments on parameter handling in api_datatype.cpp Clarify usage of parameters in API documentation. * Fix OCaml build error - use list instead of array for mk_datatype_sort Changed mk_sort_ref to pass empty list [] instead of empty array [||]. Changed mk_sort_ref_p to pass params list directly instead of converting to array. Z3native.mk_datatype_sort expects a list, not an array. Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add polymorphic datatype example to C++ examples Added polymorphic_datatype_example() demonstrating: - Creating type variables alpha and beta with Z3_mk_type_variable - Defining parametric Pair datatype with fields of type alpha and beta - Instantiating with concrete types (Pair Int Real) and (Pair Real Int) - Getting constructors and accessors from instantiated datatypes - Creating constants and expressions using the polymorphic types - Verifying type correctness with equality (= (first p1) (second p2)) 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> Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
		
			
				
	
	
		
			168 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			3.6 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
 | 
						|
  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
 | 
						|
  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
 | 
						|
  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
 | 
						|
  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})
 | 
						|
 | 
						|
 | 
						|
 |