mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 13:29:11 +00:00 
			
		
		
		
	merge
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
						commit
						b482dbd589
					
				
					 379 changed files with 7440 additions and 3352 deletions
				
			
		
							
								
								
									
										80
									
								
								examples/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								examples/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,80 @@
 | 
			
		|||
include(ExternalProject)
 | 
			
		||||
# Unfortunately `BUILD_ALWAYS` only seems to be supported with the version of ExternalProject
 | 
			
		||||
# that shipped with CMake >= 3.1.
 | 
			
		||||
if (("${CMAKE_VERSION}" VERSION_EQUAL "3.1") OR ("${CMAKE_VERSION}" VERSION_GREATER "3.1"))
 | 
			
		||||
  set(EXTERNAL_PROJECT_BUILD_ALWAYS_ARG BUILD_ALWAYS 1)
 | 
			
		||||
else()
 | 
			
		||||
  set(EXTERNAL_PROJECT_BUILD_ALWAYS_ARG "")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Build example project using libz3's C API as an external project
 | 
			
		||||
################################################################################
 | 
			
		||||
ExternalProject_Add(c_example
 | 
			
		||||
  DEPENDS libz3
 | 
			
		||||
  # Configure step
 | 
			
		||||
  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/c"
 | 
			
		||||
  CMAKE_ARGS "-DZ3_DIR=${CMAKE_BINARY_DIR}"
 | 
			
		||||
  # Build step
 | 
			
		||||
  ${EXTERNAL_PROJECT_BUILD_ALWAYS_ARG}
 | 
			
		||||
  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/c_example_build_dir"
 | 
			
		||||
  # Install Step
 | 
			
		||||
  INSTALL_COMMAND "${CMAKE_COMMAND}" -E echo "" # Dummy command
 | 
			
		||||
)
 | 
			
		||||
set_target_properties(c_example PROPERTIES EXCLUDE_FROM_ALL TRUE)
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Build maxsat example project using libz3's C API as an external project
 | 
			
		||||
################################################################################
 | 
			
		||||
ExternalProject_Add(c_maxsat_example
 | 
			
		||||
  DEPENDS libz3
 | 
			
		||||
  # Configure step
 | 
			
		||||
  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/maxsat"
 | 
			
		||||
  CMAKE_ARGS "-DZ3_DIR=${CMAKE_BINARY_DIR}"
 | 
			
		||||
  # Build step
 | 
			
		||||
  ${EXTERNAL_PROJECT_BUILD_ALWAYS_ARG}
 | 
			
		||||
  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/c_maxsat_example_build_dir"
 | 
			
		||||
  # Install Step
 | 
			
		||||
  INSTALL_COMMAND "${CMAKE_COMMAND}" -E echo "" # Dummy command
 | 
			
		||||
)
 | 
			
		||||
set_target_properties(c_maxsat_example PROPERTIES EXCLUDE_FROM_ALL TRUE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Build example project using libz3's C++ API as an external project
 | 
			
		||||
################################################################################
 | 
			
		||||
ExternalProject_Add(cpp_example
 | 
			
		||||
  DEPENDS libz3
 | 
			
		||||
  # Configure step
 | 
			
		||||
  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/c++"
 | 
			
		||||
  CMAKE_ARGS "-DZ3_DIR=${CMAKE_BINARY_DIR}"
 | 
			
		||||
  # Build step
 | 
			
		||||
  ${EXTERNAL_PROJECT_BUILD_ALWAYS_ARG}
 | 
			
		||||
  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/cpp_example_build_dir"
 | 
			
		||||
  # Install Step
 | 
			
		||||
  INSTALL_COMMAND "${CMAKE_COMMAND}" -E echo "" # Dummy command
 | 
			
		||||
)
 | 
			
		||||
set_target_properties(cpp_example PROPERTIES EXCLUDE_FROM_ALL TRUE)
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Build example tptp5 project using libz3's C++ API as an external project
 | 
			
		||||
################################################################################
 | 
			
		||||
ExternalProject_Add(z3_tptp5
 | 
			
		||||
  DEPENDS libz3
 | 
			
		||||
  # Configure step
 | 
			
		||||
  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tptp"
 | 
			
		||||
  CMAKE_ARGS "-DZ3_DIR=${CMAKE_BINARY_DIR}"
 | 
			
		||||
  # Build step
 | 
			
		||||
  ${EXTERNAL_PROJECT_BUILD_ALWAYS_ARG}
 | 
			
		||||
  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/tptp_build_dir"
 | 
			
		||||
  # Install Step
 | 
			
		||||
  INSTALL_COMMAND "${CMAKE_COMMAND}" -E echo "" # Dummy command
 | 
			
		||||
)
 | 
			
		||||
set_target_properties(z3_tptp5 PROPERTIES EXCLUDE_FROM_ALL TRUE)
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Build Python examples
 | 
			
		||||
################################################################################
 | 
			
		||||
if (BUILD_PYTHON_BINDINGS)
 | 
			
		||||
  add_subdirectory(python)
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										38
									
								
								examples/c++/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								examples/c++/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
################################################################################
 | 
			
		||||
# Example C++ project
 | 
			
		||||
################################################################################
 | 
			
		||||
project(Z3_C_EXAMPLE CXX)
 | 
			
		||||
cmake_minimum_required(VERSION 2.8.12)
 | 
			
		||||
find_package(Z3
 | 
			
		||||
  REQUIRED
 | 
			
		||||
  CONFIG
 | 
			
		||||
  # `NO_DEFAULT_PATH` is set so that -DZ3_DIR has to be passed to find Z3.
 | 
			
		||||
  # This should prevent us from accidently picking up an installed
 | 
			
		||||
  # copy of Z3. This is here to benefit Z3's build sytem when building
 | 
			
		||||
  # this project. When making your own project you probably shouldn't
 | 
			
		||||
  # use this option.
 | 
			
		||||
  NO_DEFAULT_PATH
 | 
			
		||||
)
 | 
			
		||||
message(STATUS "Z3_FOUND: ${Z3_FOUND}")
 | 
			
		||||
message(STATUS "Found Z3 ${Z3_VERSION_STRING}")
 | 
			
		||||
message(STATUS "Z3_DIR: ${Z3_DIR}")
 | 
			
		||||
 | 
			
		||||
add_executable(cpp_example example.cpp)
 | 
			
		||||
target_include_directories(cpp_example PRIVATE ${Z3_CXX_INCLUDE_DIRS})
 | 
			
		||||
target_link_libraries(cpp_example PRIVATE ${Z3_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "[Ww]indows")
 | 
			
		||||
  # On Windows we need to copy the Z3 libraries
 | 
			
		||||
  # into the same directory as the executable
 | 
			
		||||
  # so that they can be found.
 | 
			
		||||
  foreach (z3_lib ${Z3_LIBRARIES})
 | 
			
		||||
    message(STATUS "Adding copy rule for ${z3_lib}")
 | 
			
		||||
    add_custom_command(TARGET cpp_example
 | 
			
		||||
      POST_BUILD
 | 
			
		||||
      COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
        $<TARGET_FILE:${z3_lib}>
 | 
			
		||||
        $<TARGET_FILE_DIR:cpp_example>
 | 
			
		||||
    )
 | 
			
		||||
  endforeach()
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										42
									
								
								examples/c/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								examples/c/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
################################################################################
 | 
			
		||||
# Example C project
 | 
			
		||||
################################################################################
 | 
			
		||||
# NOTE: Even though this is a C project, libz3 uses C++. When using libz3
 | 
			
		||||
# as a static library if we don't configure this project to also support
 | 
			
		||||
# C++ we will use the C linker rather than the C++ linker and will not link
 | 
			
		||||
# the C++ standard library in resulting in a link failure.
 | 
			
		||||
project(Z3_C_EXAMPLE C CXX)
 | 
			
		||||
cmake_minimum_required(VERSION 2.8.12)
 | 
			
		||||
find_package(Z3
 | 
			
		||||
  REQUIRED
 | 
			
		||||
  CONFIG
 | 
			
		||||
  # `NO_DEFAULT_PATH` is set so that -DZ3_DIR has to be passed to find Z3.
 | 
			
		||||
  # This should prevent us from accidently picking up an installed
 | 
			
		||||
  # copy of Z3. This is here to benefit Z3's build sytem when building
 | 
			
		||||
  # this project. When making your own project you probably shouldn't
 | 
			
		||||
  # use this option.
 | 
			
		||||
  NO_DEFAULT_PATH
 | 
			
		||||
)
 | 
			
		||||
message(STATUS "Z3_FOUND: ${Z3_FOUND}")
 | 
			
		||||
message(STATUS "Found Z3 ${Z3_VERSION_STRING}")
 | 
			
		||||
message(STATUS "Z3_DIR: ${Z3_DIR}")
 | 
			
		||||
 | 
			
		||||
add_executable(c_example test_capi.c)
 | 
			
		||||
target_include_directories(c_example PRIVATE ${Z3_C_INCLUDE_DIRS})
 | 
			
		||||
target_link_libraries(c_example PRIVATE ${Z3_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "[Ww]indows")
 | 
			
		||||
  # On Windows we need to copy the Z3 libraries
 | 
			
		||||
  # into the same directory as the executable
 | 
			
		||||
  # so that they can be found.
 | 
			
		||||
  foreach (z3_lib ${Z3_LIBRARIES})
 | 
			
		||||
    message(STATUS "Adding copy rule for ${z3_lib}")
 | 
			
		||||
    add_custom_command(TARGET c_example
 | 
			
		||||
      POST_BUILD
 | 
			
		||||
      COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
        $<TARGET_FILE:${z3_lib}>
 | 
			
		||||
        $<TARGET_FILE_DIR:c_example>
 | 
			
		||||
    )
 | 
			
		||||
  endforeach()
 | 
			
		||||
endif()
 | 
			
		||||
| 
						 | 
				
			
			@ -2152,6 +2152,31 @@ namespace test_mapi
 | 
			
		|||
            Console.WriteLine("OK, model: {0}", s.Model.ToString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void TranslationExample()
 | 
			
		||||
        {
 | 
			
		||||
            Context ctx1 = new Context();
 | 
			
		||||
            Context ctx2 = new Context();
 | 
			
		||||
 | 
			
		||||
            Sort s1 = ctx1.IntSort;
 | 
			
		||||
            Sort s2 = ctx2.IntSort;
 | 
			
		||||
            Sort s3 = s1.Translate(ctx2);
 | 
			
		||||
 | 
			
		||||
            Console.WriteLine(s1 == s2);
 | 
			
		||||
            Console.WriteLine(s1.Equals(s2));
 | 
			
		||||
            Console.WriteLine(s2.Equals(s3));
 | 
			
		||||
            Console.WriteLine(s1.Equals(s3));
 | 
			
		||||
 | 
			
		||||
            Expr e1 = ctx1.MkIntConst("e1");
 | 
			
		||||
            Expr e2 = ctx2.MkIntConst("e1");
 | 
			
		||||
            Expr e3 = e1.Translate(ctx2);
 | 
			
		||||
 | 
			
		||||
            Console.WriteLine(e1 == e2);
 | 
			
		||||
            Console.WriteLine(e1.Equals(e2));
 | 
			
		||||
            Console.WriteLine(e2.Equals(e3));
 | 
			
		||||
            Console.WriteLine(e1.Equals(e3));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        static void Main(string[] args)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
| 
						 | 
				
			
			@ -2225,6 +2250,8 @@ namespace test_mapi
 | 
			
		|||
                    QuantifierExample4(ctx);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                TranslationExample();
 | 
			
		||||
 | 
			
		||||
                Log.Close();
 | 
			
		||||
                if (Log.isOpen())
 | 
			
		||||
                    Console.WriteLine("Log is still open!");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -281,7 +281,7 @@ class JavaExample
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    void disprove(Context ctx, BoolExpr f, boolean useMBQI) 
 | 
			
		||||
		throws TestFailedException
 | 
			
		||||
        throws TestFailedException
 | 
			
		||||
    {
 | 
			
		||||
        BoolExpr[] a = {};
 | 
			
		||||
        disprove(ctx, f, useMBQI, a);
 | 
			
		||||
| 
						 | 
				
			
			@ -2279,6 +2279,29 @@ class JavaExample
 | 
			
		|||
        System.out.println(my);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void translationExample() {
 | 
			
		||||
        Context ctx1 = new Context();
 | 
			
		||||
        Context ctx2 = new Context();
 | 
			
		||||
 | 
			
		||||
        Sort s1 = ctx1.getIntSort();
 | 
			
		||||
        Sort s2 = ctx2.getIntSort();
 | 
			
		||||
        Sort s3 = s1.translate(ctx2);
 | 
			
		||||
 | 
			
		||||
        System.out.println(s1 == s2);
 | 
			
		||||
        System.out.println(s1.equals(s2));
 | 
			
		||||
        System.out.println(s2.equals(s3));
 | 
			
		||||
        System.out.println(s1.equals(s3));
 | 
			
		||||
 | 
			
		||||
        Expr e1 = ctx1.mkIntConst("e1");
 | 
			
		||||
        Expr e2 = ctx2.mkIntConst("e1");
 | 
			
		||||
        Expr e3 = e1.translate(ctx2);
 | 
			
		||||
 | 
			
		||||
        System.out.println(e1 == e2);
 | 
			
		||||
        System.out.println(e1.equals(e2));
 | 
			
		||||
        System.out.println(e2.equals(e3));
 | 
			
		||||
        System.out.println(e1.equals(e3));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void main(String[] args)
 | 
			
		||||
    {
 | 
			
		||||
        JavaExample p = new JavaExample();
 | 
			
		||||
| 
						 | 
				
			
			@ -2300,8 +2323,8 @@ class JavaExample
 | 
			
		|||
                HashMap<String, String> cfg = new HashMap<String, String>();
 | 
			
		||||
                cfg.put("model", "true");
 | 
			
		||||
                Context ctx = new Context(cfg);
 | 
			
		||||
		
 | 
			
		||||
		p.optimizeExample(ctx);
 | 
			
		||||
        
 | 
			
		||||
                p.optimizeExample(ctx);
 | 
			
		||||
                p.basicTests(ctx);
 | 
			
		||||
                p.castingTest(ctx);
 | 
			
		||||
                p.sudokuExample(ctx);
 | 
			
		||||
| 
						 | 
				
			
			@ -2355,7 +2378,9 @@ class JavaExample
 | 
			
		|||
                Context ctx = new Context(cfg);
 | 
			
		||||
                p.quantifierExample3(ctx);
 | 
			
		||||
                p.quantifierExample4(ctx);
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p.translationExample();
 | 
			
		||||
 | 
			
		||||
            Log.close();
 | 
			
		||||
            if (Log.isOpen())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								examples/maxsat/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								examples/maxsat/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
################################################################################
 | 
			
		||||
# Example maxsat project
 | 
			
		||||
################################################################################
 | 
			
		||||
# NOTE: Even though this is a C project, libz3 uses C++. When using libz3
 | 
			
		||||
# as a static library if we don't configure this project to also support
 | 
			
		||||
# C++ we will use the C linker rather than the C++ linker and will not link
 | 
			
		||||
# the C++ standard library in resulting in a link failure.
 | 
			
		||||
project(Z3_C_MAXSAT_EXAMPLE C CXX)
 | 
			
		||||
cmake_minimum_required(VERSION 2.8.12)
 | 
			
		||||
find_package(Z3
 | 
			
		||||
  REQUIRED
 | 
			
		||||
  CONFIG
 | 
			
		||||
  # `NO_DEFAULT_PATH` is set so that -DZ3_DIR has to be passed to find Z3.
 | 
			
		||||
  # This should prevent us from accidently picking up an installed
 | 
			
		||||
  # copy of Z3. This is here to benefit Z3's build sytem when building
 | 
			
		||||
  # this project. When making your own project you probably shouldn't
 | 
			
		||||
  # use this option.
 | 
			
		||||
  NO_DEFAULT_PATH
 | 
			
		||||
)
 | 
			
		||||
message(STATUS "Z3_FOUND: ${Z3_FOUND}")
 | 
			
		||||
message(STATUS "Found Z3 ${Z3_VERSION_STRING}")
 | 
			
		||||
message(STATUS "Z3_DIR: ${Z3_DIR}")
 | 
			
		||||
 | 
			
		||||
add_executable(c_maxsat_example maxsat.c)
 | 
			
		||||
target_include_directories(c_maxsat_example PRIVATE ${Z3_C_INCLUDE_DIRS})
 | 
			
		||||
target_link_libraries(c_maxsat_example PRIVATE ${Z3_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "[Ww]indows")
 | 
			
		||||
  # On Windows we need to copy the Z3 libraries
 | 
			
		||||
  # into the same directory as the executable
 | 
			
		||||
  # so that they can be found.
 | 
			
		||||
  foreach (z3_lib ${Z3_LIBRARIES})
 | 
			
		||||
    message(STATUS "Adding copy rule for ${z3_lib}")
 | 
			
		||||
    add_custom_command(TARGET c_maxsat_example
 | 
			
		||||
      POST_BUILD
 | 
			
		||||
      COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
        $<TARGET_FILE:${z3_lib}>
 | 
			
		||||
        $<TARGET_FILE_DIR:c_maxsat_example>
 | 
			
		||||
    )
 | 
			
		||||
  endforeach()
 | 
			
		||||
endif()
 | 
			
		||||
| 
						 | 
				
			
			@ -348,7 +348,15 @@ void assert_at_most_k(Z3_context ctx, Z3_solver s, unsigned n, Z3_ast * lits, un
 | 
			
		|||
*/
 | 
			
		||||
void assert_at_most_one(Z3_context ctx, Z3_solver s, unsigned n, Z3_ast * lits) 
 | 
			
		||||
{
 | 
			
		||||
  assert_at_most_k(ctx, s, n, lits, 1);
 | 
			
		||||
    assert_at_most_k(ctx, s, n, lits, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Z3_solver mk_solver(Z3_context ctx)
 | 
			
		||||
{
 | 
			
		||||
    Z3_solver r = Z3_mk_solver(ctx);
 | 
			
		||||
    Z3_solver_inc_ref(ctx, r);
 | 
			
		||||
    return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -357,7 +365,7 @@ void assert_at_most_one(Z3_context ctx, Z3_solver s, unsigned n, Z3_ast * lits)
 | 
			
		|||
void tst_at_most_one() 
 | 
			
		||||
{
 | 
			
		||||
    Z3_context ctx = mk_context();
 | 
			
		||||
    Z3_solver s = Z3_mk_solver(ctx);
 | 
			
		||||
    Z3_solver s    = mk_solver(ctx);
 | 
			
		||||
    Z3_ast k1      = mk_bool_var(ctx, "k1");
 | 
			
		||||
    Z3_ast k2      = mk_bool_var(ctx, "k2");
 | 
			
		||||
    Z3_ast k3      = mk_bool_var(ctx, "k3");
 | 
			
		||||
| 
						 | 
				
			
			@ -376,7 +384,9 @@ void tst_at_most_one()
 | 
			
		|||
    if (result != Z3_L_TRUE)
 | 
			
		||||
        error("BUG");
 | 
			
		||||
    m = Z3_solver_get_model(ctx, s);
 | 
			
		||||
    Z3_model_inc_ref(ctx, m);
 | 
			
		||||
    printf("model:\n%s\n", Z3_model_to_string(ctx, m));
 | 
			
		||||
    Z3_model_dec_ref(ctx, m);
 | 
			
		||||
    Z3_solver_assert(ctx, s, mk_binary_or(ctx, k2, k3));
 | 
			
		||||
    Z3_solver_assert(ctx, s, mk_binary_or(ctx, k1, k6));
 | 
			
		||||
    printf("it must be sat...\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -384,12 +394,15 @@ void tst_at_most_one()
 | 
			
		|||
    if (result != Z3_L_TRUE)
 | 
			
		||||
        error("BUG");
 | 
			
		||||
    m = Z3_solver_get_model(ctx, s);
 | 
			
		||||
    Z3_model_inc_ref(ctx, m);
 | 
			
		||||
    printf("model:\n%s\n", Z3_model_to_string(ctx, m));
 | 
			
		||||
    Z3_solver_assert(ctx, s, mk_binary_or(ctx, k4, k5));
 | 
			
		||||
    printf("it must be unsat...\n");
 | 
			
		||||
    result = Z3_solver_check(ctx, s);
 | 
			
		||||
    if (result != Z3_L_FALSE)
 | 
			
		||||
        error("BUG");
 | 
			
		||||
    Z3_model_dec_ref(ctx, m);
 | 
			
		||||
    Z3_solver_dec_ref(ctx, s);
 | 
			
		||||
    Z3_del_context(ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -454,8 +467,10 @@ int naive_maxsat(Z3_context ctx, Z3_solver s, unsigned num_hard_cnstrs, Z3_ast *
 | 
			
		|||
            printf("unsat\n");
 | 
			
		||||
            return num_soft_cnstrs - k - 1;
 | 
			
		||||
        }
 | 
			
		||||
	m = Z3_solver_get_model(ctx, s);
 | 
			
		||||
    m = Z3_solver_get_model(ctx, s);
 | 
			
		||||
        Z3_model_inc_ref(ctx, m);
 | 
			
		||||
        num_disabled = get_num_disabled_soft_constraints(ctx, m, num_soft_cnstrs, aux_vars);
 | 
			
		||||
        Z3_model_dec_ref(ctx, m);
 | 
			
		||||
        if (num_disabled > k) {
 | 
			
		||||
            error("BUG");
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -506,6 +521,7 @@ int fu_malik_maxsat_step(Z3_context ctx, Z3_solver s, unsigned num_soft_cnstrs,
 | 
			
		|||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        core = Z3_solver_get_unsat_core(ctx, s);
 | 
			
		||||
        Z3_ast_vector_inc_ref(ctx, core);
 | 
			
		||||
	core_size = Z3_ast_vector_size(ctx, core);
 | 
			
		||||
        block_vars = (Z3_ast*) malloc(sizeof(Z3_ast) * core_size);
 | 
			
		||||
        k = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -514,7 +530,7 @@ int fu_malik_maxsat_step(Z3_context ctx, Z3_solver s, unsigned num_soft_cnstrs,
 | 
			
		|||
            unsigned j;
 | 
			
		||||
            // check whether assumption[i] is in the core or not
 | 
			
		||||
            for (j = 0; j < core_size; j++) {
 | 
			
		||||
  	        if (assumptions[i] == Z3_ast_vector_get(ctx, core, j))
 | 
			
		||||
              if (assumptions[i] == Z3_ast_vector_get(ctx, core, j))
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
            if (j < core_size) {
 | 
			
		||||
| 
						 | 
				
			
			@ -531,6 +547,7 @@ int fu_malik_maxsat_step(Z3_context ctx, Z3_solver s, unsigned num_soft_cnstrs,
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        assert_at_most_one(ctx, s, k, block_vars);
 | 
			
		||||
        Z3_ast_vector_dec_ref(ctx, core);
 | 
			
		||||
        return 0; // not done.
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -597,7 +614,7 @@ int smtlib_maxsat(char * file_name, int approach)
 | 
			
		|||
    Z3_ast * hard_cnstrs, * soft_cnstrs;
 | 
			
		||||
    unsigned result = 0;
 | 
			
		||||
    ctx = mk_context();
 | 
			
		||||
    s = Z3_mk_solver(ctx);
 | 
			
		||||
    s = mk_solver(ctx);
 | 
			
		||||
    Z3_parse_smtlib_file(ctx, file_name, 0, 0, 0, 0, 0, 0);
 | 
			
		||||
    hard_cnstrs = get_hard_constraints(ctx, &num_hard_cnstrs);
 | 
			
		||||
    soft_cnstrs = get_soft_constraints(ctx, &num_soft_cnstrs);
 | 
			
		||||
| 
						 | 
				
			
			@ -615,6 +632,7 @@ int smtlib_maxsat(char * file_name, int approach)
 | 
			
		|||
    }
 | 
			
		||||
    free_cnstr_array(hard_cnstrs);
 | 
			
		||||
    free_cnstr_array(soft_cnstrs);
 | 
			
		||||
    Z3_solver_dec_ref(ctx, s);
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								examples/python/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								examples/python/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
set(python_example_files
 | 
			
		||||
  all_interval_series.py
 | 
			
		||||
  complex/complex.py
 | 
			
		||||
  example.py
 | 
			
		||||
  hamiltonian/hamiltonian.py
 | 
			
		||||
  mus/marco.py
 | 
			
		||||
  mus/mss.py
 | 
			
		||||
  socrates.py
 | 
			
		||||
  visitor.py
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set(z3py_bindings_build_dest "${CMAKE_BINARY_DIR}/python")
 | 
			
		||||
 | 
			
		||||
set(build_z3_python_examples_target_depends "")
 | 
			
		||||
foreach (example_file ${python_example_files})
 | 
			
		||||
  add_custom_command(OUTPUT "${z3py_bindings_build_dest}/${example_file}"
 | 
			
		||||
    COMMAND "${CMAKE_COMMAND}" "-E" "copy"
 | 
			
		||||
      "${CMAKE_CURRENT_SOURCE_DIR}/${example_file}"
 | 
			
		||||
      # We flatten the hierarchy so that all python files have
 | 
			
		||||
      # the `z3` directory in their directory so that their import
 | 
			
		||||
      # statements "just work".
 | 
			
		||||
      "${z3py_bindings_build_dest}/"
 | 
			
		||||
    DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${example_file}"
 | 
			
		||||
    COMMENT "Copying \"${example_file}\" to ${z3py_bindings_build_dest}/${example_file}"
 | 
			
		||||
  )
 | 
			
		||||
  list(APPEND build_z3_python_examples_target_depends "${z3py_bindings_build_dest}/${example_file}")
 | 
			
		||||
endforeach()
 | 
			
		||||
 | 
			
		||||
add_custom_target(build_z3_python_examples
 | 
			
		||||
  ALL
 | 
			
		||||
  DEPENDS
 | 
			
		||||
    ${build_z3_python_examples_target_depends}
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
# adjacent entries fall in the range 0,..,n-1
 | 
			
		||||
# This is known as the "The All-Interval Series Problem"
 | 
			
		||||
# See http://www.csplib.org/Problems/prob007/
 | 
			
		||||
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
from z3 import *
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ def process_model(s, xij, n):
 | 
			
		|||
               block += [xij[i][j]]
 | 
			
		||||
               k = j
 | 
			
		||||
        values += [k]
 | 
			
		||||
    print values
 | 
			
		||||
    print(values)
 | 
			
		||||
    sys.stdout.flush()
 | 
			
		||||
    return block
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,9 +68,9 @@ def all_models(n):
 | 
			
		|||
        block = process_model(s, xij, n)
 | 
			
		||||
        s.add(Not(And(block)))
 | 
			
		||||
        count += 1
 | 
			
		||||
    print s.statistics()
 | 
			
		||||
    print time.clock() - start
 | 
			
		||||
    print count
 | 
			
		||||
    print(s.statistics())
 | 
			
		||||
    print(time.clock() - start)
 | 
			
		||||
    print(count)
 | 
			
		||||
 | 
			
		||||
set_option(verbose=1)  
 | 
			
		||||
all_models(12)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,10 @@
 | 
			
		|||
#
 | 
			
		||||
# Author: Leonardo de Moura (leonardo)
 | 
			
		||||
############################################
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
import sys
 | 
			
		||||
if sys.version_info.major >= 3:
 | 
			
		||||
    from functools import reduce
 | 
			
		||||
from z3 import *
 | 
			
		||||
 | 
			
		||||
def _to_complex(a):
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +57,7 @@ class ComplexExpr:
 | 
			
		|||
            return self
 | 
			
		||||
        if k < 0:
 | 
			
		||||
            return (self ** (-k)).inv()
 | 
			
		||||
        return reduce(lambda x, y: x * y, [self for _ in xrange(k)], ComplexExpr(1, 0))
 | 
			
		||||
        return reduce(lambda x, y: x * y, [self for _ in range(k)], ComplexExpr(1, 0))
 | 
			
		||||
 | 
			
		||||
    def inv(self):
 | 
			
		||||
        den = self.r*self.r + self.i*self.i
 | 
			
		||||
| 
						 | 
				
			
			@ -63,6 +67,12 @@ class ComplexExpr:
 | 
			
		|||
        inv_other = _to_complex(other).inv()
 | 
			
		||||
        return self.__mul__(inv_other)
 | 
			
		||||
 | 
			
		||||
    if sys.version_info.major >= 3:
 | 
			
		||||
      # In python 3 the meaning of the '/' operator
 | 
			
		||||
      # was changed.
 | 
			
		||||
      def __truediv__(self, other):
 | 
			
		||||
        return self.__div__(other)
 | 
			
		||||
 | 
			
		||||
    def __rdiv__(self, other):
 | 
			
		||||
        other = _to_complex(other)
 | 
			
		||||
        return self.inv().__mul__(other)
 | 
			
		||||
| 
						 | 
				
			
			@ -113,5 +123,5 @@ print(s.model())
 | 
			
		|||
s.add(x.i != 1)
 | 
			
		||||
print(s.check())
 | 
			
		||||
# print(s.model())
 | 
			
		||||
print ((3 + I) ** 2)/(5 - I)
 | 
			
		||||
print ((3 + I) ** -3)/(5 - I)
 | 
			
		||||
print(((3 + I) ** 2)/(5 - I))
 | 
			
		||||
print(((3 + I) ** -3)/(5 - I))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,11 +45,6 @@ def enumerate_sets(solver):
 | 
			
		|||
        else:
 | 
			
		||||
           break
 | 
			
		||||
 | 
			
		||||
class CompareSetSize():
 | 
			
		||||
   def __call__(self, s1, s2):
 | 
			
		||||
       return len(s1) < len(s2) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MSSSolver:
 | 
			
		||||
   s = Solver()
 | 
			
		||||
   varcache = {}
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +152,7 @@ class MSSSolver:
 | 
			
		|||
       mcs = [x for x in self.orig_soft_vars if not is_true(self.model[x])]
 | 
			
		||||
       self.s.add(Or(mcs))
 | 
			
		||||
       core_literals = set([])
 | 
			
		||||
       cores.sort(CompareSetSize()) 
 | 
			
		||||
       cores.sort(key=lambda element: len(element))
 | 
			
		||||
       for core in cores:
 | 
			
		||||
           if len(core & core_literals) == 0:
 | 
			
		||||
              self.relax_core(core)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
# Copyright (c) Microsoft Corporation 2015
 | 
			
		||||
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
from z3 import *
 | 
			
		||||
 | 
			
		||||
def visitor(e, seen):
 | 
			
		||||
| 
						 | 
				
			
			@ -22,8 +22,8 @@ fml = x + x + y > 2
 | 
			
		|||
seen = {}
 | 
			
		||||
for e in visitor(fml, seen):
 | 
			
		||||
    if is_const(e) and e.decl().kind() == Z3_OP_UNINTERPRETED:
 | 
			
		||||
        print "Variable", e
 | 
			
		||||
        print("Variable", e)
 | 
			
		||||
    else:
 | 
			
		||||
        print e
 | 
			
		||||
        print(e)
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										39
									
								
								examples/tptp/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								examples/tptp/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
################################################################################
 | 
			
		||||
# TPTP example
 | 
			
		||||
################################################################################
 | 
			
		||||
project(Z3_TPTP5 CXX)
 | 
			
		||||
cmake_minimum_required(VERSION 2.8.12)
 | 
			
		||||
find_package(Z3
 | 
			
		||||
  REQUIRED
 | 
			
		||||
  CONFIG
 | 
			
		||||
  # `NO_DEFAULT_PATH` is set so that -DZ3_DIR has to be passed to find Z3.
 | 
			
		||||
  # This should prevent us from accidently picking up an installed
 | 
			
		||||
  # copy of Z3. This is here to benefit Z3's build sytem when building
 | 
			
		||||
  # this project. When making your own project you probably shouldn't
 | 
			
		||||
  # use this option.
 | 
			
		||||
  NO_DEFAULT_PATH
 | 
			
		||||
)
 | 
			
		||||
message(STATUS "Z3_FOUND: ${Z3_FOUND}")
 | 
			
		||||
message(STATUS "Found Z3 ${Z3_VERSION_STRING}")
 | 
			
		||||
message(STATUS "Z3_DIR: ${Z3_DIR}")
 | 
			
		||||
 | 
			
		||||
add_executable(z3_tptp5 tptp5.cpp tptp5.lex.cpp)
 | 
			
		||||
target_include_directories(z3_tptp5 PRIVATE ${Z3_CXX_INCLUDE_DIRS})
 | 
			
		||||
target_link_libraries(z3_tptp5 PRIVATE ${Z3_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "[Ww]indows")
 | 
			
		||||
  # On Windows we need to copy the Z3 libraries
 | 
			
		||||
  # into the same directory as the executable
 | 
			
		||||
  # so that they can be found.
 | 
			
		||||
  foreach (z3_lib ${Z3_LIBRARIES})
 | 
			
		||||
    message(STATUS "Adding copy rule for ${z3_lib}")
 | 
			
		||||
    add_custom_command(TARGET z3_tptp5
 | 
			
		||||
      POST_BUILD
 | 
			
		||||
      COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
        $<TARGET_FILE:${z3_lib}>
 | 
			
		||||
        $<TARGET_FILE_DIR:z3_tptp5>
 | 
			
		||||
    )
 | 
			
		||||
  endforeach()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue