summaryrefslogtreecommitdiff
path: root/cryptominisat5
diff options
context:
space:
mode:
Diffstat (limited to 'cryptominisat5')
-rw-r--r--cryptominisat5/build/CMakeCache.txt648
-rw-r--r--cryptominisat5/build/CMakeFiles/3.10.2/CMakeCCompiler.cmake73
-rw-r--r--cryptominisat5/build/CMakeFiles/3.10.2/CMakeCXXCompiler.cmake75
-rwxr-xr-xcryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.binbin0 -> 8240 bytes
-rwxr-xr-xcryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.binbin0 -> 8256 bytes
-rw-r--r--cryptominisat5/build/CMakeFiles/3.10.2/CMakeSystem.cmake15
-rw-r--r--cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c598
-rwxr-xr-xcryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/a.outbin0 -> 8400 bytes
-rw-r--r--cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp576
-rwxr-xr-xcryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/a.outbin0 -> 8408 bytes
-rw-r--r--cryptominisat5/build/CMakeFiles/CMakeDirectoryInformation.cmake16
-rw-r--r--cryptominisat5/build/CMakeFiles/CMakeError.log120
-rw-r--r--cryptominisat5/build/CMakeFiles/CMakeOutput.log1070
-rw-r--r--cryptominisat5/build/CMakeFiles/CMakeRuleHashes.txt2
-rw-r--r--cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake28
-rw-r--r--cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake101
-rw-r--r--cryptominisat5/build/CMakeFiles/Makefile.cmake162
-rw-r--r--cryptominisat5/build/CMakeFiles/Makefile2236
-rw-r--r--cryptominisat5/build/CMakeFiles/TargetDirectories.txt16
-rw-r--r--cryptominisat5/build/CMakeFiles/cmake.check_cache1
-rw-r--r--cryptominisat5/build/CMakeFiles/cryptominisat5Config.cmake20
-rwxr-xr-xcryptominisat5/build/CMakeFiles/feature_tests.binbin0 -> 12304 bytes
-rw-r--r--cryptominisat5/build/CMakeFiles/feature_tests.c34
-rw-r--r--cryptominisat5/build/CMakeFiles/feature_tests.cxx405
-rw-r--r--cryptominisat5/build/CMakeFiles/git-data/HEAD1
-rw-r--r--cryptominisat5/build/CMakeFiles/git-data/grabRef.cmake38
-rw-r--r--cryptominisat5/build/CMakeFiles/git-data/head-ref1
-rw-r--r--cryptominisat5/build/CMakeFiles/progress.marks1
-rw-r--r--cryptominisat5/build/CMakeFiles/uninstall.dir/DependInfo.cmake11
-rw-r--r--cryptominisat5/build/CMakeFiles/uninstall.dir/build.make76
-rw-r--r--cryptominisat5/build/CMakeFiles/uninstall.dir/cmake_clean.cmake8
-rw-r--r--cryptominisat5/build/CMakeFiles/uninstall.dir/progress.make1
-rw-r--r--cryptominisat5/build/Makefile240
-rw-r--r--cryptominisat5/build/cmake_install.cmake78
-rw-r--r--cryptominisat5/build/cmake_uninstall.cmake24
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CMakeDirectoryInformation.cmake16
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/DependInfo.cmake11
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make86
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/cmake_clean.cmake5
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.internal3
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.make3
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/progress.make1
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/CXX.includecache156
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/DependInfo.cmake23
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make114
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/cmake_clean.cmake10
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.internal13
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.make13
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/flags.make10
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/link.txt1
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.obin0 -> 1275080 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/progress.make3
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/CXX.includecache1724
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake59
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.obin0 -> 28584 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make1113
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.obin0 -> 1962256 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.obin0 -> 648584 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.obin0 -> 851296 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.obin0 -> 1017336 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.obin0 -> 294472 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean.cmake47
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean_target.cmake3
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.obin0 -> 2240952 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.obin0 -> 955176 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.obin0 -> 1610288 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.obin0 -> 690808 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.obin0 -> 1427248 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.obin0 -> 408080 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.obin0 -> 1042728 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.internal1409
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.make1409
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.obin0 -> 915920 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.obin0 -> 1105168 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.obin0 -> 663920 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.obin0 -> 331848 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make10
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.obin0 -> 1008408 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.obin0 -> 1135960 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.obin0 -> 1132808 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/link.txt2
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.obin0 -> 3365912 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.obin0 -> 1980584 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/progress.make40
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.obin0 -> 1330768 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.obin0 -> 858384 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.obin0 -> 1025464 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.obin0 -> 2989592 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.obin0 -> 1221016 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.obin0 -> 920592 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.obin0 -> 364128 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.obin0 -> 4684112 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.obin0 -> 464072 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.obin0 -> 363424 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.obin0 -> 640832 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.obin0 -> 729008 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.obin0 -> 860288 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.obin0 -> 1403080 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.obin0 -> 1978952 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.obin0 -> 2026864 bytes
-rw-r--r--cryptominisat5/build/cmsat5-src/CMakeFiles/progress.marks1
-rw-r--r--cryptominisat5/build/cmsat5-src/GitSHA1.cpp64
-rw-r--r--cryptominisat5/build/cmsat5-src/Makefile1402
-rw-r--r--cryptominisat5/build/cmsat5-src/cmake_install.cmake69
-rw-r--r--cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat.h168
-rw-r--r--cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat_c.h75
-rw-r--r--cryptominisat5/build/cmsat5-src/cryptominisat5/solvertypesmini.h215
-rw-r--r--cryptominisat5/build/cmsat5-src/libcryptominisat5_export.h42
-rw-r--r--cryptominisat5/build/compile_commands.json197
-rw-r--r--cryptominisat5/build/cryptominisat5Config.cmake20
-rw-r--r--cryptominisat5/build/cryptominisat5Targets.cmake72
-rwxr-xr-xcryptominisat5/build/cryptominisat5_simplebin0 -> 19032288 bytes
-rw-r--r--cryptominisat5/build/include/cryptominisat5/cryptominisat.h168
-rw-r--r--cryptominisat5/build/include/cryptominisat5/cryptominisat_c.h75
-rw-r--r--cryptominisat5/build/include/cryptominisat5/dimacsparser.h529
-rw-r--r--cryptominisat5/build/include/cryptominisat5/solvertypesmini.h215
-rw-r--r--cryptominisat5/build/include/cryptominisat5/streambuffer.h208
-rw-r--r--cryptominisat5/build/install_manifest.txt10
-rw-r--r--cryptominisat5/build/lib/libcryptominisat5.abin0 -> 46771988 bytes
-rw-r--r--cryptominisat5/cryptominisat-5.6.3.tarbin0 -> 3409920 bytes
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/.dockerignore30
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/.gitignore21
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/.gitmodules36
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/.travis.yml156
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/AUTHORS8
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/CMakeLists.txt698
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/Dockerfile57
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/Dockerfile.web54
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/LICENSE.txt55
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/README.markdown506
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/appveyor.yml134
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/AddGTestSuite.cmake26
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/AddSTPGTest.cmake33
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindM4RI.cmake67
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindMpiCompilers.cmake144
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindPerftools.cmake139
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindPkgMacros.cmake163
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindSqlite3.cmake56
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindTBB.cmake111
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/FindValgrind.cmake22
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake116
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake.in38
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmake/cmake_uninstall.cmake.in24
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cmsat_tablestructure.sql329
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/cryptominisat5Config.cmake.in20
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/changelog5
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/compat1
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/control16
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.copyright8
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.docs1
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/menu2
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/debian/rules66
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/debian/source/format1
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/HOWTO-ANALYSIS7
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_WEB52
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_opcontrol10
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_perf11
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/Makefile23
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/cmsv4.tex73
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/ieee.cls1497
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/sigproc.bib2549
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/splncs03.bst1519
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/Makefile25
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.kilepr53
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.tex66
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/ieee.cls1497
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/sigproc.bib2589
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/splncs03.bst1519
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/Makefile25
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.kilepr53
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.tex64
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/ieee.cls1497
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/sigproc.bib2589
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/splncs03.bst1519
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/Makefile24
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv5.kilepr53
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv55.tex76
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/ieee.cls1497
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/sigproc.bib2681
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/splncs03.bst1519
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/CMakeLists.txt83
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/LICENSE26
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/MANIFEST.in5
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/Makefile35
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/README.rst116
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/setup.py.in158
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/src/pycryptosat.cpp985
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/tests/__init__.py1
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/tests/test.cnf928
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/python/tests/test_pycryptosat.py256
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/appveyor.ps113
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/README.markdown14
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/RequestSpotClient.py172
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_Maple_LCM_Dist.sh29
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cmsat_satcomp16.sh30
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cryptominisat.sh42
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_drat-trim2.sh30
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_glucose2016.sh31
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_ayv.sh32
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_bbc.sh32
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_maplecomsps_drup.sh33
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by.sh31
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by_old.sh32
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/client.py821
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/common_aws.py86
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp11_updated300
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp13_updated300
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp14_updated300
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp16_updated300
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp17_updated350
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satrace15_updated300
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/test_updated8
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/unsat_small_candidates_fullpath425
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance-test.cfg47
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance.cfg51
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/launch_server.py153
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/pack_cnf_lists.py39
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/pre-server.py36
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/aws/satcomp091113_updated751
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/server.py432
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/aws/server_option_parser.py194
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/check_all_licenses.sh21
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/docker/Dockerfile9
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/CMakeLists.txt29
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/debuglib.py148
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/fuzz/fuzz_test.py871
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/fuzz/intersperse.py31
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier.py589
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier_test.py83
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/xor_to_cnf_class.py238
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/learn/add_lemma_ind.py126
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/learn/gen_pandas.py771
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/learn/predict.py372
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/learn/predict_one.sh64
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/output_parser/convert_to_cactusplot.py27
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/output_parser/merge_sqlite.sh24
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/plotit45
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output.sh28
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_glucose.sh16
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_lingeling.sh7
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/output_parser/sqlite3_checks.py290
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/reconf/count_plus_minus.sh46
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/reconf/generate_reconf.py108
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/reconf/reconf.py334
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/reconf/tocpp.py208
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/travis-cmake.sh471
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/travis-install-cmake.sh34
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/travis-install-lcov.sh27
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/scripts/xxd-alike.py61
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/CMakeLists.txt346
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/EGaussian.cpp886
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h137
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.cpp.in64
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h29
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h423
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/Vec.h301
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h47
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/alg.h42
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h201
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/bitarray.h141
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h190
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/bva.cpp850
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/bva.h176
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h49
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clause.h510
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp379
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h128
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp387
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h90
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp312
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h90
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp54
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h74
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cloffset.h42
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp707
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cnf.h633
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp342
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/compfinder.h138
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp768
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/comphandler.h203
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp231
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h86
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/constants.h142
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp1075
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in168
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp124
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.h.in75
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cset.h191
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp353
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/datasync.h114
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h529
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp533
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h109
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp635
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h193
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/drat.h352
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp394
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/features_calc.h82
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp752
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h29
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/fuzz.cpp72
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/gatefinder.cpp1123
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/gatefinder.h319
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h44
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h67
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/hasher.h61
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/heap.h216
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp1080
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h125
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp674
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/implcache.h272
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/intree.cpp459
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/intree.h116
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/ipasir.cpp238
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/ipasir.h152
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/main.cpp1339
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/main.h134
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/main_common.h55
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/main_emscripten.cpp135
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/main_exe.cpp56
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp328
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.cpp372
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h92
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/mystack.h77
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/nomutex.h60
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp3086
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h578
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h190
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/packedrow.cpp189
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/packedrow.h282
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/popcnt.h37
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/prober.cpp954
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/prober.h283
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/propby.h209
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/propby_backup.h232
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h151
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp598
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/propengine.h475
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp323
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/reducedb.h68
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp230
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h164
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp3475
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/searcher.h642
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/searchhist.h158
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp376
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/searchstats.h116
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/shareddata.h93
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/signalcode.cpp69
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/signalcode.h40
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/simplefile.h173
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp214
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h73
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-cpp389
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-h87
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp117
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h121
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solver.cpp4082
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solver.h601
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp324
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solverconf.h386
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h607
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/solvertypesmini.h.in215
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sql_tablestructure.h28
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.cpp1187
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h131
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp63
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h118
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp211
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/stamp.h157
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp239
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h93
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h208
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp228
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h98
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp1030
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h176
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/time_mem.h144
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.cpp471
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h104
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h52
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/touchlist.h183
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/trim.h44
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/vardata.h56
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp1302
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h314
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h134
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h173
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/watcharray.h186
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.cpp122
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.h551
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/watched.h321
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/watched_backup.h347
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/xor.h158
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp873
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h359
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/CMakeLists.txt198
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/assump_test.cpp214
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp1109
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/c_test.c62
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/clause_alloc_test.cpp81
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/clause_cleaner_test.cpp139
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/clause_test.cpp86
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/CMakeLists.txt47
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-1.cnf4
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-2.cnf6
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-3.cnf4
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars.cnf10
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars_2.cnf11
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.cfg144
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.site.cfg.in14
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/reconftest.cnf8
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest.cnf5
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest2.cnf4
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/verbosity.cnf4
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor.cnf5
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor_longer.cnf14
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/comp_find_test.cpp130
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/comphandler_test.cpp172
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/distill_klee.cpp54
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/distill_long_with_implicit_test.cpp267
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/distiller_all_with_all_test.cpp133
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/dump_test.cpp150
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/gauss_test.cpp153
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/heap_test.cpp100
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/intree_test.cpp174
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/ipasir_test.cpp183
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/matrixfinder_test.cpp139
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/multisol_test.cpp84
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/probe_test.cpp365
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/readme_test.cpp76
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/scc_test.cpp196
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/searcher_test.cpp180
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/CMakeLists.txt32
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/tests/simp-checks/check_bve.py238
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/solver_test.cpp246
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/stp_test.cpp129
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/subsume_impl_test.cpp105
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/test_helper.h673
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/undefine_test.cpp208
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/vrepl_test.cpp176
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/xorfinder_test.cpp571
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/utils/config/crypt4-params.pcs65
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/README.markdown57
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/apache-config.conf15
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/connect.php21
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/drawgraphs.js162
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/web/file_creator.py62
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/get_data.php474
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/get_files.php78
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/get_gitrevs.php26
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/index.html137
-rwxr-xr-xcryptominisat5/cryptominisat-5.6.3/web/install_web.sh12
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/jquery.jqplot.css259
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/selectdata.js41
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/web/style.css143
-rwxr-xr-xcryptominisat5/install/bin/cryptominisat5_simplebin0 -> 19032288 bytes
-rw-r--r--cryptominisat5/install/include/cryptominisat5/cryptominisat.h168
-rw-r--r--cryptominisat5/install/include/cryptominisat5/cryptominisat_c.h75
-rw-r--r--cryptominisat5/install/include/cryptominisat5/dimacsparser.h529
-rw-r--r--cryptominisat5/install/include/cryptominisat5/solvertypesmini.h215
-rw-r--r--cryptominisat5/install/include/cryptominisat5/streambuffer.h208
-rw-r--r--cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Config.cmake20
-rw-r--r--cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake28
-rw-r--r--cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake101
-rw-r--r--cryptominisat5/install/lib/libcryptominisat5.abin0 -> 46771988 bytes
466 files changed, 116643 insertions, 0 deletions
diff --git a/cryptominisat5/build/CMakeCache.txt b/cryptominisat5/build/CMakeCache.txt
new file mode 100644
index 000000000..0847a3195
--- /dev/null
+++ b/cryptominisat5/build/CMakeCache.txt
@@ -0,0 +1,648 @@
+# This is the CMakeCache file.
+# For build in directory: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+# It was generated by CMake: /usr/bin/cmake
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//The directory containing a CMake configuration file for Boost.
+Boost_DIR:PATH=Boost_DIR-NOTFOUND
+
+//Path to a file.
+Boost_INCLUDE_DIR:PATH=/usr/include
+
+//Boost program_options library (debug)
+Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-NOTFOUND
+
+//Boost program_options library (release)
+Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-NOTFOUND
+
+//Path to a program.
+CMAKE_AR:FILEPATH=/usr/bin/ar
+
+//Options are Debug;Release;RelWithDebInfo;MinSizeRel
+CMAKE_BUILD_TYPE:STRING=RelWithDebInfo
+
+//Enable/Disable color output during build.
+CMAKE_COLOR_MAKEFILE:BOOL=ON
+
+//CXX compiler
+CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-7
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-7
+
+//Flags used by the compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Default flags for Debug configuration
+CMAKE_CXX_FLAGS_DEBUG:STRING=
+
+//Default flags for MinSizeRel configuration
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=
+
+//Default flags for Release configuration
+CMAKE_CXX_FLAGS_RELEASE:STRING=
+
+//Default flags for RelWithDebInfo configuration
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=
+
+//C compiler
+CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-7
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-7
+
+//Flags used by the compiler during all build types.
+CMAKE_C_FLAGS:STRING=
+
+//Default flags for Debug configuration
+CMAKE_C_FLAGS_DEBUG:STRING=
+
+//Default flags for MinSizeRel configuration
+CMAKE_C_FLAGS_MINSIZEREL:STRING=
+
+//Default flags for Release configuration
+CMAKE_C_FLAGS_RELEASE:STRING=
+
+//Default flags for RelWithDebInfo configuration
+CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=
+
+//Flags used by the linker.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Enable/Disable output of compile commands during generation.
+CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
+
+//User executables (bin)
+CMAKE_INSTALL_BINDIR:PATH=bin
+
+//Read-only architecture-independent data (DATAROOTDIR)
+CMAKE_INSTALL_DATADIR:PATH=
+
+//Read-only architecture-independent data root (share)
+CMAKE_INSTALL_DATAROOTDIR:PATH=share
+
+//Documentation root (DATAROOTDIR/doc/PROJECT_NAME)
+CMAKE_INSTALL_DOCDIR:PATH=
+
+//C header files (include)
+CMAKE_INSTALL_INCLUDEDIR:PATH=include
+
+//Info documentation (DATAROOTDIR/info)
+CMAKE_INSTALL_INFODIR:PATH=
+
+//Object code libraries (lib)
+CMAKE_INSTALL_LIBDIR:PATH=lib
+
+//Program executables (libexec)
+CMAKE_INSTALL_LIBEXECDIR:PATH=libexec
+
+//Locale-dependent data (DATAROOTDIR/locale)
+CMAKE_INSTALL_LOCALEDIR:PATH=
+
+//Modifiable single-machine data (var)
+CMAKE_INSTALL_LOCALSTATEDIR:PATH=var
+
+//Man documentation (DATAROOTDIR/man)
+CMAKE_INSTALL_MANDIR:PATH=
+
+//C header files for non-gcc (/usr/include)
+CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include
+
+//No help, variable specified on the command line.
+CMAKE_INSTALL_PREFIX:PATH=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install
+
+//Run-time variable data (LOCALSTATEDIR/run)
+CMAKE_INSTALL_RUNSTATEDIR:PATH=
+
+//System admin executables (sbin)
+CMAKE_INSTALL_SBINDIR:PATH=sbin
+
+//Modifiable architecture-independent data (com)
+CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com
+
+//Read-only single-machine data (etc)
+CMAKE_INSTALL_SYSCONFDIR:PATH=etc
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=/usr/bin/ld
+
+//Path to a program.
+CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
+
+//Flags used by the linker during the creation of modules.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=/usr/bin/nm
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=cryptominisat5
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
+
+//Default flags for configuration
+CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS:STRING=' '
+
+//Default flags for configuration
+CMAKE_SHARED_LIBRARY_LINK_C_FLAGS:STRING=' '
+
+//Flags used by the linker during the creation of dll's.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=/usr/bin/strip
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make. This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//Build with coverage check
+COVERAGE:BOOL=OFF
+
+//Installation directory for cryptominisat5 CMake files
+CRYPTOMINISAT5_INSTALL_CMAKE_DIR:PATH=lib/cmake/cryptominisat5
+
+//Generate only emscripten JS
+EMSCRIPTEN:BOOL=OFF
+
+//Build with assertions enabled
+ENABLE_ASSERTIONS:BOOL=ON
+
+//Enable Python interface
+ENABLE_PYTHON_INTERFACE:BOOL=OFF
+
+//Enable testing
+ENABLE_TESTING:BOOL=OFF
+
+//Use Clang coverage sanitizers
+FEEDBACKFUZZ:BOOL=OFF
+
+//OFF
+FORCE_PYTHON2:BOOL=OFF
+
+//Path to a program.
+GIT_EXECUTABLE:FILEPATH=/usr/bin/git
+
+//Path to a program.
+HELP2MAN_FOUND:FILEPATH=HELP2MAN_FOUND-NOTFOUND
+
+//Also build IPASIR
+IPASIR:BOOL=OFF
+
+//Allow memory usage to grow to Terabyte values -- uses 64b offsets.
+// Slower, but allows the solver to run for much longer.
+LARGEMEM:BOOL=OFF
+
+//*Only used for testing*. Limit memory used by CMS through number
+// of variables
+LIMITMEM:BOOL=OFF
+
+//Don't use m4ri
+NOM4RI:BOOL=ON
+
+//Don't use valgrind
+NOVALGRIND:BOOL=ON
+
+//Don't use zlib
+NOZLIB:BOOL=OFF
+
+//Only build very simplistic executable -- no Boost needed
+ONLY_SIMPLE:BOOL=OFF
+
+//Path to a program.
+PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python2.7
+
+//Path to a file.
+PYTHON_INCLUDE_DIR:PATH=/usr/include/python2.7
+
+//Path to a library.
+PYTHON_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython2.7.a
+
+//Path to a library.
+PYTHON_LIBRARY_DEBUG:FILEPATH=PYTHON_LIBRARY_DEBUG-NOTFOUND
+
+//Path to a library.
+PYTHON_LIBRARY_RELEASE:FILEPATH=PYTHON_LIBRARY_RELEASE-NOTFOUND
+
+//Must use m4ri
+REQUIRE_M4RI:BOOL=OFF
+
+//Use Clang sanitizers. You MUST use clang++ as the compiler for
+// this to work
+SANITIZE:BOOL=OFF
+
+//Use more debug flags
+SLOW_DEBUG:BOOL=OFF
+
+//Compile to static executable
+STATICCOMPILE:BOOL=ON
+
+//Don't use statistics at all
+STATS:BOOL=OFF
+
+//Build with every-level GAUSS enabled
+USE_GAUSS:BOOL=OFF
+
+//Path to a file.
+VALGRIND_INCLUDE_DIR:PATH=/usr/include/valgrind
+
+//Path to a program.
+VALGRIND_PROGRAM:FILEPATH=/usr/bin/valgrind
+
+//Path to a file.
+ZLIB_INCLUDE_DIR:PATH=ZLIB_INCLUDE_DIR-NOTFOUND
+
+//Path to a library.
+ZLIB_LIBRARY_DEBUG:FILEPATH=ZLIB_LIBRARY_DEBUG-NOTFOUND
+
+//Path to a library.
+ZLIB_LIBRARY_RELEASE:FILEPATH=ZLIB_LIBRARY_RELEASE-NOTFOUND
+
+//Value Computed by CMake
+cryptominisat5_BINARY_DIR:STATIC=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+//Value Computed by CMake
+cryptominisat5_SOURCE_DIR:STATIC=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+//Dependencies for the target
+libcryptominisat5_LIB_DEPENDS:STATIC=general;-pthread;
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: Boost_DIR
+Boost_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: Boost_INCLUDE_DIR
+Boost_INCLUDE_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG
+Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE
+Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//STRINGS property for variable: CMAKE_BUILD_TYPE
+CMAKE_BUILD_TYPE-STRINGS:INTERNAL=Debug;Release;RelWithDebInfo;MinSizeRel
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=10
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=2
+//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
+CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
+CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
+CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER
+CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_AR
+CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
+CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS
+CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
+CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
+CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
+CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
+CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
+CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=Unix Makefiles
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Have symbol pthread_create
+CMAKE_HAVE_LIBC_CREATE:INTERNAL=
+//Have include pthread.h
+CMAKE_HAVE_PTHREAD_H:INTERNAL=1
+//Source directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+//ADVANCED property for variable: CMAKE_INSTALL_BINDIR
+CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_DATADIR
+CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR
+CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR
+CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR
+CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_INFODIR
+CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR
+CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR
+CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR
+CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR
+CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_MANDIR
+CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR
+CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR
+CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR
+CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR
+CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1
+//Install .so files without execute permission.
+CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1
+//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR
+CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
+CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=2
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//Platform information initialized
+CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.10
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//uname command
+CMAKE_UNAME:INTERNAL=/bin/uname
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+//Compiler support for a deprecated attribute
+COMPILER_HAS_DEPRECATED:INTERNAL=1
+//Test COMPILER_HAS_DEPRECATED_ATTR
+COMPILER_HAS_DEPRECATED_ATTR:INTERNAL=1
+//Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
+COMPILER_HAS_HIDDEN_INLINE_VISIBILITY:INTERNAL=1
+//Test COMPILER_HAS_HIDDEN_VISIBILITY
+COMPILER_HAS_HIDDEN_VISIBILITY:INTERNAL=1
+//Details about finding PythonInterp
+FIND_PACKAGE_MESSAGE_DETAILS_PythonInterp:INTERNAL=[/usr/bin/python2.7][v2.7.15(2.7)]
+//Details about finding PythonLibs
+FIND_PACKAGE_MESSAGE_DETAILS_PythonLibs:INTERNAL=[/usr/lib/x86_64-linux-gnu/libpython2.7.a][/usr/include/python2.7][v2.7.15rc1(2.7)]
+//Details about finding Threads
+FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()]
+//Details about finding VALGRIND
+FIND_PACKAGE_MESSAGE_DETAILS_VALGRIND:INTERNAL=[/usr/include/valgrind][/usr/bin/valgrind][v()]
+//Test HAVE_FLAG_-Wall
+HAVE_FLAG_-Wall:INTERNAL=1
+//Test HAVE_FLAG_-Wdouble-promotion
+HAVE_FLAG_-Wdouble-promotion:INTERNAL=1
+//Test HAVE_FLAG_-Wextra
+HAVE_FLAG_-Wextra:INTERNAL=1
+//Test HAVE_FLAG_-Wextra-semi
+HAVE_FLAG_-Wextra-semi:INTERNAL=
+//Test HAVE_FLAG_-Wformat-nonliteral
+HAVE_FLAG_-Wformat-nonliteral:INTERNAL=1
+//Test HAVE_FLAG_-Wformat=2
+HAVE_FLAG_-Wformat=2:INTERNAL=1
+//Test HAVE_FLAG_-Wheader-guard
+HAVE_FLAG_-Wheader-guard:INTERNAL=
+//Test HAVE_FLAG_-Winit-self
+HAVE_FLAG_-Winit-self:INTERNAL=1
+//Test HAVE_FLAG_-Wjump-misses-init
+HAVE_FLAG_-Wjump-misses-init:INTERNAL=
+//Test HAVE_FLAG_-Wlogical-op
+HAVE_FLAG_-Wlogical-op:INTERNAL=1
+//Test HAVE_FLAG_-Wno-bitfield-constant-conversion
+HAVE_FLAG_-Wno-bitfield-constant-conversion:INTERNAL=
+//Test HAVE_FLAG_-Wno-class-memaccess
+HAVE_FLAG_-Wno-class-memaccess:INTERNAL=
+//Test HAVE_FLAG_-Wno-deprecated
+HAVE_FLAG_-Wno-deprecated:INTERNAL=1
+//Test HAVE_FLAG_-Wnull-dereference
+HAVE_FLAG_-Wnull-dereference:INTERNAL=1
+//Test HAVE_FLAG_-Wparentheses
+HAVE_FLAG_-Wparentheses:INTERNAL=1
+//Test HAVE_FLAG_-Wpointer-arith
+HAVE_FLAG_-Wpointer-arith:INTERNAL=1
+//Test HAVE_FLAG_-Wrestrict
+HAVE_FLAG_-Wrestrict:INTERNAL=1
+//Test HAVE_FLAG_-Wshadow
+HAVE_FLAG_-Wshadow:INTERNAL=1
+//Test HAVE_FLAG_-Wsign-compare
+HAVE_FLAG_-Wsign-compare:INTERNAL=1
+//Test HAVE_FLAG_-Wstrict-aliasing
+HAVE_FLAG_-Wstrict-aliasing:INTERNAL=1
+//Test HAVE_FLAG_-Wtype-limits
+HAVE_FLAG_-Wtype-limits:INTERNAL=1
+//Test HAVE_FLAG_-Wuninitialized
+HAVE_FLAG_-Wuninitialized:INTERNAL=1
+//Test HAVE_FLAG_-Wunreachable-code
+HAVE_FLAG_-Wunreachable-code:INTERNAL=1
+//Test HAVE_FLAG_-Wunused
+HAVE_FLAG_-Wunused:INTERNAL=1
+//Test HAVE_FLAG_-fno-omit-frame-pointer
+HAVE_FLAG_-fno-omit-frame-pointer:INTERNAL=1
+//Test HAVE_FLAG_-ggdb3
+HAVE_FLAG_-ggdb3:INTERNAL=1
+//Test HAVE_FLAG_-mtune=native
+HAVE_FLAG_-mtune=native:INTERNAL=1
+//Test HAVE_FLAG_-pedantic
+HAVE_FLAG_-pedantic:INTERNAL=1
+//ADVANCED property for variable: PYTHON_EXECUTABLE
+PYTHON_EXECUTABLE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: PYTHON_INCLUDE_DIR
+PYTHON_INCLUDE_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: PYTHON_LIBRARY
+PYTHON_LIBRARY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: PYTHON_LIBRARY_DEBUG
+PYTHON_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: PYTHON_LIBRARY_RELEASE
+PYTHON_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
+//Result of TRY_COMPILE
+THREADS_HAVE_PTHREAD_ARG:INTERNAL=TRUE
+//ADVANCED property for variable: VALGRIND_INCLUDE_DIR
+VALGRIND_INCLUDE_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: VALGRIND_PROGRAM
+VALGRIND_PROGRAM-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: ZLIB_INCLUDE_DIR
+ZLIB_INCLUDE_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: ZLIB_LIBRARY_DEBUG
+ZLIB_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: ZLIB_LIBRARY_RELEASE
+ZLIB_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
+//Components requested for this build tree.
+_Boost_COMPONENTS_SEARCHED:INTERNAL=program_options
+//Last used Boost_INCLUDE_DIR value.
+_Boost_INCLUDE_DIR_LAST:INTERNAL=/usr/include
+//Last used Boost_NAMESPACE value.
+_Boost_NAMESPACE_LAST:INTERNAL=boost
+//Last used Boost_USE_MULTITHREADED value.
+_Boost_USE_MULTITHREADED_LAST:INTERNAL=TRUE
+//CMAKE_INSTALL_PREFIX during last run
+_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install
+
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CMakeCCompiler.cmake b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeCCompiler.cmake
new file mode 100644
index 000000000..9a941e540
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeCCompiler.cmake
@@ -0,0 +1,73 @@
+set(CMAKE_C_COMPILER "/usr/bin/cc")
+set(CMAKE_C_COMPILER_ARG1 "")
+set(CMAKE_C_COMPILER_ID "GNU")
+set(CMAKE_C_COMPILER_VERSION "7.3.0")
+set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_C_COMPILER_WRAPPER "")
+set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11")
+set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert")
+set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
+set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
+set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
+
+set(CMAKE_C_PLATFORM_ID "Linux")
+set(CMAKE_C_SIMULATE_ID "")
+set(CMAKE_C_SIMULATE_VERSION "")
+
+
+
+set(CMAKE_AR "/usr/bin/ar")
+set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-7")
+set(CMAKE_RANLIB "/usr/bin/ranlib")
+set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-7")
+set(CMAKE_LINKER "/usr/bin/ld")
+set(CMAKE_COMPILER_IS_GNUCC 1)
+set(CMAKE_C_COMPILER_LOADED 1)
+set(CMAKE_C_COMPILER_WORKS TRUE)
+set(CMAKE_C_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW )
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+ set(CYGWIN 1)
+ set(UNIX 1)
+endif()
+
+set(CMAKE_C_COMPILER_ENV_VAR "CC")
+
+if(CMAKE_COMPILER_IS_MINGW)
+ set(MINGW 1)
+endif()
+set(CMAKE_C_COMPILER_ID_RUN 1)
+set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
+set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_C_LINKER_PREFERENCE 10)
+
+# Save compiler ABI information.
+set(CMAKE_C_SIZEOF_DATA_PTR "8")
+set(CMAKE_C_COMPILER_ABI "ELF")
+set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_C_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
+endif()
+
+if(CMAKE_C_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
+endif()
+
+set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s")
+set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
+set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CMakeCXXCompiler.cmake b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeCXXCompiler.cmake
new file mode 100644
index 000000000..1404958c2
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeCXXCompiler.cmake
@@ -0,0 +1,75 @@
+set(CMAKE_CXX_COMPILER "/usr/bin/c++")
+set(CMAKE_CXX_COMPILER_ARG1 "")
+set(CMAKE_CXX_COMPILER_ID "GNU")
+set(CMAKE_CXX_COMPILER_VERSION "7.3.0")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_CXX_COMPILER_WRAPPER "")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14")
+set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17")
+set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
+set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
+set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
+set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
+
+set(CMAKE_CXX_PLATFORM_ID "Linux")
+set(CMAKE_CXX_SIMULATE_ID "")
+set(CMAKE_CXX_SIMULATE_VERSION "")
+
+
+
+set(CMAKE_AR "/usr/bin/ar")
+set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-7")
+set(CMAKE_RANLIB "/usr/bin/ranlib")
+set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-7")
+set(CMAKE_LINKER "/usr/bin/ld")
+set(CMAKE_COMPILER_IS_GNUCXX 1)
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW )
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+ set(CYGWIN 1)
+ set(UNIX 1)
+endif()
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+if(CMAKE_COMPILER_IS_MINGW)
+ set(MINGW 1)
+endif()
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP)
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
+set(CMAKE_CXX_COMPILER_ABI "ELF")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin
new file mode 100755
index 000000000..e6eb5aff0
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin
Binary files differ
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin
new file mode 100755
index 000000000..d8b648e55
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin
Binary files differ
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CMakeSystem.cmake b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeSystem.cmake
new file mode 100644
index 000000000..858b7f933
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CMakeSystem.cmake
@@ -0,0 +1,15 @@
+set(CMAKE_HOST_SYSTEM "Linux-4.15.0-20-generic")
+set(CMAKE_HOST_SYSTEM_NAME "Linux")
+set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-20-generic")
+set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
+
+
+
+set(CMAKE_SYSTEM "Linux-4.15.0-20-generic")
+set(CMAKE_SYSTEM_NAME "Linux")
+set(CMAKE_SYSTEM_VERSION "4.15.0-20-generic")
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+
+set(CMAKE_CROSSCOMPILING "FALSE")
+
+set(CMAKE_SYSTEM_LOADED 1)
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c
new file mode 100644
index 000000000..722faa803
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c
@@ -0,0 +1,598 @@
+#ifdef __cplusplus
+# error "A C++ compiler has been selected for C."
+#endif
+
+#if defined(__18CXX)
+# define ID_VOID_MAIN
+#endif
+#if defined(__CLASSIC_C__)
+/* cv-qualifiers did not exist in K&R C */
+# define const
+# define volatile
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+ /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_C)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_C >= 0x5100
+ /* __SUNPRO_C = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
+# endif
+
+#elif defined(__HP_cc)
+# define COMPILER_ID "HP"
+ /* __HP_cc = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
+
+#elif defined(__DECC)
+# define COMPILER_ID "Compaq"
+ /* __DECC_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
+
+#elif defined(__IBMC__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__TINYC__)
+# define COMPILER_ID "TinyCC"
+
+#elif defined(__BCC__)
+# define COMPILER_ID "Bruce"
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__)
+# define COMPILER_ID "GNU"
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+#elif defined(__ARMCC_VERSION)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
+# define COMPILER_ID "SDCC"
+# if defined(__SDCC_VERSION_MAJOR)
+# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
+# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
+# else
+ /* SDCC = VRP */
+# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
+# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
+# endif
+
+#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
+# define COMPILER_ID "MIPSpro"
+# if defined(_SGI_COMPILER_VERSION)
+ /* _SGI_COMPILER_VERSION = VRP */
+# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)
+# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10)
+# else
+ /* _COMPILER_VERSION = VRP */
+# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)
+# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__sgi)
+# define COMPILER_ID "MIPSpro"
+
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXE) || defined(__CRAYXC)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
+# define PLATFORM_ID "IRIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+
+#if !defined(__STDC__)
+# if defined(_MSC_VER) && !defined(__clang__)
+# define C_DIALECT "90"
+# else
+# define C_DIALECT
+# endif
+#elif __STDC_VERSION__ >= 201000L
+# define C_DIALECT "11"
+#elif __STDC_VERSION__ >= 199901L
+# define C_DIALECT "99"
+#else
+# define C_DIALECT "90"
+#endif
+const char* info_language_dialect_default =
+ "INFO" ":" "dialect_default[" C_DIALECT "]";
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef ID_VOID_MAIN
+void main() {}
+#else
+# if defined(__CLASSIC_C__)
+int main(argc, argv) int argc; char *argv[];
+# else
+int main(int argc, char* argv[])
+# endif
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+ require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXE) || defined(__CRAYXC)
+ require += info_cray[argc];
+#endif
+ require += info_language_dialect_default[argc];
+ (void)argv;
+ return require;
+}
+#endif
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/a.out b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/a.out
new file mode 100755
index 000000000..da472d629
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/a.out
Binary files differ
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
new file mode 100644
index 000000000..2d6629858
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
@@ -0,0 +1,576 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+ recognize the extension without flags. Borland does not know .cxx for
+ example. */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__COMO__)
+# define COMPILER_ID "Comeau"
+ /* __COMO_VERSION__ = VRR */
+# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
+
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+ /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_CC)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_CC >= 0x5100
+ /* __SUNPRO_CC = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# endif
+
+#elif defined(__HP_aCC)
+# define COMPILER_ID "HP"
+ /* __HP_aCC = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
+
+#elif defined(__DECCXX)
+# define COMPILER_ID "Compaq"
+ /* __DECCXX_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
+
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define COMPILER_ID "GNU"
+# if defined(__GNUC__)
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# else
+# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+#elif defined(__ARMCC_VERSION)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
+# define COMPILER_ID "MIPSpro"
+# if defined(_SGI_COMPILER_VERSION)
+ /* _SGI_COMPILER_VERSION = VRP */
+# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)
+# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10)
+# else
+ /* _COMPILER_VERSION = VRP */
+# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)
+# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__sgi)
+# define COMPILER_ID "MIPSpro"
+
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXE) || defined(__CRAYXC)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
+# define PLATFORM_ID "IRIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+
+#if defined(_MSC_VER) && defined(_MSVC_LANG)
+#define CXX_STD _MSVC_LANG
+#else
+#define CXX_STD __cplusplus
+#endif
+
+const char* info_language_dialect_default = "INFO" ":" "dialect_default["
+#if CXX_STD > 201402L
+ "17"
+#elif CXX_STD >= 201402L
+ "14"
+#elif CXX_STD >= 201103L
+ "11"
+#else
+ "98"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXE) || defined(__CRAYXC)
+ require += info_cray[argc];
+#endif
+ require += info_language_dialect_default[argc];
+ (void)argv;
+ return require;
+}
diff --git a/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/a.out b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/a.out
new file mode 100755
index 000000000..4d71d11fc
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/a.out
Binary files differ
diff --git a/cryptominisat5/build/CMakeFiles/CMakeDirectoryInformation.cmake b/cryptominisat5/build/CMakeFiles/CMakeDirectoryInformation.cmake
new file mode 100644
index 000000000..ad7fd9767
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -0,0 +1,16 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
diff --git a/cryptominisat5/build/CMakeFiles/CMakeError.log b/cryptominisat5/build/CMakeFiles/CMakeError.log
new file mode 100644
index 000000000..154f00356
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/CMakeError.log
@@ -0,0 +1,120 @@
+Determining if the pthread_create exist failed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_1a90a/fast"
+/usr/bin/make -f CMakeFiles/cmTC_1a90a.dir/build.make CMakeFiles/cmTC_1a90a.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_1a90a.dir/CheckSymbolExists.c.o
+/usr/bin/cc -o CMakeFiles/cmTC_1a90a.dir/CheckSymbolExists.c.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c
+Linking C executable cmTC_1a90a
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1a90a.dir/link.txt --verbose=1
+/usr/bin/cc -rdynamic CMakeFiles/cmTC_1a90a.dir/CheckSymbolExists.c.o -o cmTC_1a90a
+CMakeFiles/cmTC_1a90a.dir/CheckSymbolExists.c.o: In function `main':
+CheckSymbolExists.c:(.text+0x1b): undefined reference to `pthread_create'
+collect2: error: ld returned 1 exit status
+CMakeFiles/cmTC_1a90a.dir/build.make:97: recipe for target 'cmTC_1a90a' failed
+make[1]: *** [cmTC_1a90a] Error 1
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Makefile:126: recipe for target 'cmTC_1a90a/fast' failed
+make: *** [cmTC_1a90a/fast] Error 2
+
+File /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:
+/* */
+#include <pthread.h>
+
+int main(int argc, char** argv)
+{
+ (void)argv;
+#ifndef pthread_create
+ return ((int*)(&pthread_create))[argc];
+#else
+ (void)argc;
+ return 0;
+#endif
+}
+
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wheader-guard failed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_d13c7/fast"
+/usr/bin/make -f CMakeFiles/cmTC_d13c7.dir/build.make CMakeFiles/cmTC_d13c7.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_d13c7.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -DHAVE_FLAG_-Wheader-guard -Wheader-guard -o CMakeFiles/cmTC_d13c7.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+c++: error: unrecognized command line option '-Wheader-guard'
+CMakeFiles/cmTC_d13c7.dir/build.make:65: recipe for target 'CMakeFiles/cmTC_d13c7.dir/src.cxx.o' failed
+make[1]: *** [CMakeFiles/cmTC_d13c7.dir/src.cxx.o] Error 1
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Makefile:126: recipe for target 'cmTC_d13c7/fast' failed
+make: *** [cmTC_d13c7/fast] Error 2
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wno-bitfield-constant-conversion failed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_3dcd5/fast"
+/usr/bin/make -f CMakeFiles/cmTC_3dcd5.dir/build.make CMakeFiles/cmTC_3dcd5.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_3dcd5.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -DHAVE_FLAG_-Wno-bitfield-constant-conversion -Wno-bitfield-constant-conversion -o CMakeFiles/cmTC_3dcd5.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+cc1plus: warning: unrecognized command line option '-Wno-bitfield-constant-conversion'
+Linking CXX executable cmTC_3dcd5
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3dcd5.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -DHAVE_FLAG_-Wno-bitfield-constant-conversion -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_3dcd5.dir/src.cxx.o -o cmTC_3dcd5
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wjump-misses-init failed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_dd062/fast"
+/usr/bin/make -f CMakeFiles/cmTC_dd062.dir/build.make CMakeFiles/cmTC_dd062.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_dd062.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -DHAVE_FLAG_-Wjump-misses-init -Wjump-misses-init -o CMakeFiles/cmTC_dd062.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+cc1plus: warning: command line option '-Wjump-misses-init' is valid for C/ObjC but not for C++
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_dd062
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dd062.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -DHAVE_FLAG_-Wjump-misses-init -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_dd062.dir/src.cxx.o -o cmTC_dd062
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wextra-semi failed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_03362/fast"
+/usr/bin/make -f CMakeFiles/cmTC_03362.dir/build.make CMakeFiles/cmTC_03362.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_03362.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -DHAVE_FLAG_-Wextra-semi -Wextra-semi -o CMakeFiles/cmTC_03362.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+c++: error: unrecognized command line option '-Wextra-semi'; did you mean '-Wextra'?
+CMakeFiles/cmTC_03362.dir/build.make:65: recipe for target 'CMakeFiles/cmTC_03362.dir/src.cxx.o' failed
+make[1]: *** [CMakeFiles/cmTC_03362.dir/src.cxx.o] Error 1
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Makefile:126: recipe for target 'cmTC_03362/fast' failed
+make: *** [cmTC_03362/fast] Error 2
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wno-class-memaccess failed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_e6076/fast"
+/usr/bin/make -f CMakeFiles/cmTC_e6076.dir/build.make CMakeFiles/cmTC_e6076.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_e6076.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DHAVE_FLAG_-Wno-class-memaccess -Wno-class-memaccess -o CMakeFiles/cmTC_e6076.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+cc1plus: warning: unrecognized command line option '-Wno-class-memaccess'
+Linking CXX executable cmTC_e6076
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e6076.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DHAVE_FLAG_-Wno-class-memaccess -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_e6076.dir/src.cxx.o -o cmTC_e6076
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
diff --git a/cryptominisat5/build/CMakeFiles/CMakeOutput.log b/cryptominisat5/build/CMakeFiles/CMakeOutput.log
new file mode 100644
index 000000000..468c4c1b9
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/CMakeOutput.log
@@ -0,0 +1,1070 @@
+The system is: Linux - 4.15.0-20-generic - x86_64
+Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
+Compiler: /usr/bin/cc
+Build flags:
+Id flags:
+
+The output was:
+0
+
+
+Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
+
+The C compiler identification is GNU, found in "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdC/a.out"
+
+Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
+Compiler: /usr/bin/c++
+Build flags:
+Id flags:
+
+The output was:
+0
+
+
+Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
+
+The CXX compiler identification is GNU, found in "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/3.10.2/CompilerIdCXX/a.out"
+
+Determining if the C compiler works passed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_7bfd2/fast"
+/usr/bin/make -f CMakeFiles/cmTC_7bfd2.dir/build.make CMakeFiles/cmTC_7bfd2.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_7bfd2.dir/testCCompiler.c.o
+/usr/bin/cc -o CMakeFiles/cmTC_7bfd2.dir/testCCompiler.c.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/testCCompiler.c
+Linking C executable cmTC_7bfd2
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7bfd2.dir/link.txt --verbose=1
+/usr/bin/cc -rdynamic CMakeFiles/cmTC_7bfd2.dir/testCCompiler.c.o -o cmTC_7bfd2
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+Detecting C compiler ABI info compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_f289a/fast"
+/usr/bin/make -f CMakeFiles/cmTC_f289a.dir/build.make CMakeFiles/cmTC_f289a.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o
+/usr/bin/cc -o CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.10/Modules/CMakeCCompilerABI.c
+Linking C executable cmTC_f289a
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f289a.dir/link.txt --verbose=1
+/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o -o cmTC_f289a
+Using built-in specs.
+COLLECT_GCC=/usr/bin/cc
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
+OFFLOAD_TARGET_NAMES=nvptx-none
+OFFLOAD_TARGET_DEFAULT=1
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as --with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
+COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
+LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
+COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_f289a' '-mtune=generic' '-march=x86-64'
+ /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccjNHrMc.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_f289a /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
+COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_f289a' '-mtune=generic' '-march=x86-64'
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+Parsed C implicit link information from above output:
+ link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
+ ignore line: [Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp]
+ ignore line: []
+ ignore line: [Run Build Command:"/usr/bin/make" "cmTC_f289a/fast"]
+ ignore line: [/usr/bin/make -f CMakeFiles/cmTC_f289a.dir/build.make CMakeFiles/cmTC_f289a.dir/build]
+ ignore line: [make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp']
+ ignore line: [Building C object CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o]
+ ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.10/Modules/CMakeCCompilerABI.c]
+ ignore line: [Linking C executable cmTC_f289a]
+ ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f289a.dir/link.txt --verbose=1]
+ ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o -o cmTC_f289a ]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=/usr/bin/cc]
+ ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper]
+ ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none]
+ ignore line: [OFFLOAD_TARGET_DEFAULT=1]
+ ignore line: [Target: x86_64-linux-gnu]
+ ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as --with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
+ ignore line: [Thread model: posix]
+ ignore line: [gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) ]
+ ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/]
+ ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_f289a' '-mtune=generic' '-march=x86-64']
+ link line: [ /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccjNHrMc.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_f289a /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o]
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/collect2] ==> ignore
+ arg [-plugin] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so] ==> ignore
+ arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper] ==> ignore
+ arg [-plugin-opt=-fresolution=/tmp/ccjNHrMc.res] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [--sysroot=/] ==> ignore
+ arg [--build-id] ==> ignore
+ arg [--eh-frame-hdr] ==> ignore
+ arg [-m] ==> ignore
+ arg [elf_x86_64] ==> ignore
+ arg [--hash-style=gnu] ==> ignore
+ arg [--as-needed] ==> ignore
+ arg [-export-dynamic] ==> ignore
+ arg [-dynamic-linker] ==> ignore
+ arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
+ arg [-pie] ==> ignore
+ arg [-znow] ==> ignore
+ arg [-zrelro] ==> ignore
+ arg [-o] ==> ignore
+ arg [cmTC_f289a] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o] ==> ignore
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7]
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu]
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib]
+ arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
+ arg [-L/lib/../lib] ==> dir [/lib/../lib]
+ arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
+ arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..]
+ arg [CMakeFiles/cmTC_f289a.dir/CMakeCCompilerABI.c.o] ==> ignore
+ arg [-lgcc] ==> lib [gcc]
+ arg [--push-state] ==> ignore
+ arg [--as-needed] ==> ignore
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [--pop-state] ==> ignore
+ arg [-lc] ==> lib [c]
+ arg [-lgcc] ==> lib [gcc]
+ arg [--push-state] ==> ignore
+ arg [--as-needed] ==> ignore
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [--pop-state] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o] ==> ignore
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7] ==> [/usr/lib/gcc/x86_64-linux-gnu/7]
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> [/usr/lib]
+ collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
+ collapse library dir [/lib/../lib] ==> [/lib]
+ collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
+ collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> [/usr/lib]
+ implicit libs: [gcc;gcc_s;c;gcc;gcc_s]
+ implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
+ implicit fwks: []
+
+
+
+
+Detecting C [-std=c11] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_401e4/fast"
+/usr/bin/make -f CMakeFiles/cmTC_401e4.dir/build.make CMakeFiles/cmTC_401e4.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_401e4.dir/feature_tests.c.o
+/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_401e4.dir/feature_tests.c.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.c
+Linking C executable cmTC_401e4
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_401e4.dir/link.txt --verbose=1
+/usr/bin/cc -rdynamic CMakeFiles/cmTC_401e4.dir/feature_tests.c.o -o cmTC_401e4
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: C_FEATURE:1c_function_prototypes
+ Feature record: C_FEATURE:1c_restrict
+ Feature record: C_FEATURE:1c_static_assert
+ Feature record: C_FEATURE:1c_variadic_macros
+
+
+Detecting C [-std=c99] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_bb660/fast"
+/usr/bin/make -f CMakeFiles/cmTC_bb660.dir/build.make CMakeFiles/cmTC_bb660.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_bb660.dir/feature_tests.c.o
+/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_bb660.dir/feature_tests.c.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.c
+Linking C executable cmTC_bb660
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_bb660.dir/link.txt --verbose=1
+/usr/bin/cc -rdynamic CMakeFiles/cmTC_bb660.dir/feature_tests.c.o -o cmTC_bb660
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: C_FEATURE:1c_function_prototypes
+ Feature record: C_FEATURE:1c_restrict
+ Feature record: C_FEATURE:0c_static_assert
+ Feature record: C_FEATURE:1c_variadic_macros
+
+
+Detecting C [-std=c90] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_9f73a/fast"
+/usr/bin/make -f CMakeFiles/cmTC_9f73a.dir/build.make CMakeFiles/cmTC_9f73a.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_9f73a.dir/feature_tests.c.o
+/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_9f73a.dir/feature_tests.c.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.c
+Linking C executable cmTC_9f73a
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9f73a.dir/link.txt --verbose=1
+/usr/bin/cc -rdynamic CMakeFiles/cmTC_9f73a.dir/feature_tests.c.o -o cmTC_9f73a
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: C_FEATURE:1c_function_prototypes
+ Feature record: C_FEATURE:0c_restrict
+ Feature record: C_FEATURE:0c_static_assert
+ Feature record: C_FEATURE:0c_variadic_macros
+Determining if the CXX compiler works passed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_b9d08/fast"
+/usr/bin/make -f CMakeFiles/cmTC_b9d08.dir/build.make CMakeFiles/cmTC_b9d08.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_b9d08.dir/testCXXCompiler.cxx.o
+/usr/bin/c++ -o CMakeFiles/cmTC_b9d08.dir/testCXXCompiler.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
+Linking CXX executable cmTC_b9d08
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b9d08.dir/link.txt --verbose=1
+/usr/bin/c++ -rdynamic CMakeFiles/cmTC_b9d08.dir/testCXXCompiler.cxx.o -o cmTC_b9d08
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+Detecting CXX compiler ABI info compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_44d48/fast"
+/usr/bin/make -f CMakeFiles/cmTC_44d48.dir/build.make CMakeFiles/cmTC_44d48.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o
+/usr/bin/c++ -o CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.10/Modules/CMakeCXXCompilerABI.cpp
+Linking CXX executable cmTC_44d48
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_44d48.dir/link.txt --verbose=1
+/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_44d48
+Using built-in specs.
+COLLECT_GCC=/usr/bin/c++
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
+OFFLOAD_TARGET_NAMES=nvptx-none
+OFFLOAD_TARGET_DEFAULT=1
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as --with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
+COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
+LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
+COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_44d48' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
+ /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccmXzAyE.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_44d48 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
+COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_44d48' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+Parsed CXX implicit link information from above output:
+ link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
+ ignore line: [Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp]
+ ignore line: []
+ ignore line: [Run Build Command:"/usr/bin/make" "cmTC_44d48/fast"]
+ ignore line: [/usr/bin/make -f CMakeFiles/cmTC_44d48.dir/build.make CMakeFiles/cmTC_44d48.dir/build]
+ ignore line: [make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp']
+ ignore line: [Building CXX object CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o]
+ ignore line: [/usr/bin/c++ -o CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.10/Modules/CMakeCXXCompilerABI.cpp]
+ ignore line: [Linking CXX executable cmTC_44d48]
+ ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_44d48.dir/link.txt --verbose=1]
+ ignore line: [/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_44d48 ]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=/usr/bin/c++]
+ ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper]
+ ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none]
+ ignore line: [OFFLOAD_TARGET_DEFAULT=1]
+ ignore line: [Target: x86_64-linux-gnu]
+ ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as --with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
+ ignore line: [Thread model: posix]
+ ignore line: [gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) ]
+ ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/]
+ ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_44d48' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
+ link line: [ /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccmXzAyE.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_44d48 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o]
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/collect2] ==> ignore
+ arg [-plugin] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so] ==> ignore
+ arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper] ==> ignore
+ arg [-plugin-opt=-fresolution=/tmp/ccmXzAyE.res] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [--sysroot=/] ==> ignore
+ arg [--build-id] ==> ignore
+ arg [--eh-frame-hdr] ==> ignore
+ arg [-m] ==> ignore
+ arg [elf_x86_64] ==> ignore
+ arg [--hash-style=gnu] ==> ignore
+ arg [--as-needed] ==> ignore
+ arg [-export-dynamic] ==> ignore
+ arg [-dynamic-linker] ==> ignore
+ arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
+ arg [-pie] ==> ignore
+ arg [-znow] ==> ignore
+ arg [-zrelro] ==> ignore
+ arg [-o] ==> ignore
+ arg [cmTC_44d48] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o] ==> ignore
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7]
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu]
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib]
+ arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
+ arg [-L/lib/../lib] ==> dir [/lib/../lib]
+ arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
+ arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
+ arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..]
+ arg [CMakeFiles/cmTC_44d48.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
+ arg [-lstdc++] ==> lib [stdc++]
+ arg [-lm] ==> lib [m]
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [-lgcc] ==> lib [gcc]
+ arg [-lc] ==> lib [c]
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [-lgcc] ==> lib [gcc]
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o] ==> ignore
+ arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o] ==> ignore
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7] ==> [/usr/lib/gcc/x86_64-linux-gnu/7]
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> [/usr/lib]
+ collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
+ collapse library dir [/lib/../lib] ==> [/lib]
+ collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
+ collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
+ collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> [/usr/lib]
+ implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc]
+ implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
+ implicit fwks: []
+
+
+
+
+Detecting CXX [-std=c++1z] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_f1d79/fast"
+/usr/bin/make -f CMakeFiles/cmTC_f1d79.dir/build.make CMakeFiles/cmTC_f1d79.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_f1d79.dir/feature_tests.cxx.o
+/usr/bin/c++ -std=c++1z -o CMakeFiles/cmTC_f1d79.dir/feature_tests.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.cxx
+Linking CXX executable cmTC_f1d79
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f1d79.dir/link.txt --verbose=1
+/usr/bin/c++ -rdynamic CMakeFiles/cmTC_f1d79.dir/feature_tests.cxx.o -o cmTC_f1d79
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers
+ Feature record: CXX_FEATURE:1cxx_alias_templates
+ Feature record: CXX_FEATURE:1cxx_alignas
+ Feature record: CXX_FEATURE:1cxx_alignof
+ Feature record: CXX_FEATURE:1cxx_attributes
+ Feature record: CXX_FEATURE:1cxx_attribute_deprecated
+ Feature record: CXX_FEATURE:1cxx_auto_type
+ Feature record: CXX_FEATURE:1cxx_binary_literals
+ Feature record: CXX_FEATURE:1cxx_constexpr
+ Feature record: CXX_FEATURE:1cxx_contextual_conversions
+ Feature record: CXX_FEATURE:1cxx_decltype
+ Feature record: CXX_FEATURE:1cxx_decltype_auto
+ Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types
+ Feature record: CXX_FEATURE:1cxx_default_function_template_args
+ Feature record: CXX_FEATURE:1cxx_defaulted_functions
+ Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers
+ Feature record: CXX_FEATURE:1cxx_delegating_constructors
+ Feature record: CXX_FEATURE:1cxx_deleted_functions
+ Feature record: CXX_FEATURE:1cxx_digit_separators
+ Feature record: CXX_FEATURE:1cxx_enum_forward_declarations
+ Feature record: CXX_FEATURE:1cxx_explicit_conversions
+ Feature record: CXX_FEATURE:1cxx_extended_friend_declarations
+ Feature record: CXX_FEATURE:1cxx_extern_templates
+ Feature record: CXX_FEATURE:1cxx_final
+ Feature record: CXX_FEATURE:1cxx_func_identifier
+ Feature record: CXX_FEATURE:1cxx_generalized_initializers
+ Feature record: CXX_FEATURE:1cxx_generic_lambdas
+ Feature record: CXX_FEATURE:1cxx_inheriting_constructors
+ Feature record: CXX_FEATURE:1cxx_inline_namespaces
+ Feature record: CXX_FEATURE:1cxx_lambdas
+ Feature record: CXX_FEATURE:1cxx_lambda_init_captures
+ Feature record: CXX_FEATURE:1cxx_local_type_template_args
+ Feature record: CXX_FEATURE:1cxx_long_long_type
+ Feature record: CXX_FEATURE:1cxx_noexcept
+ Feature record: CXX_FEATURE:1cxx_nonstatic_member_init
+ Feature record: CXX_FEATURE:1cxx_nullptr
+ Feature record: CXX_FEATURE:1cxx_override
+ Feature record: CXX_FEATURE:1cxx_range_for
+ Feature record: CXX_FEATURE:1cxx_raw_string_literals
+ Feature record: CXX_FEATURE:1cxx_reference_qualified_functions
+ Feature record: CXX_FEATURE:1cxx_relaxed_constexpr
+ Feature record: CXX_FEATURE:1cxx_return_type_deduction
+ Feature record: CXX_FEATURE:1cxx_right_angle_brackets
+ Feature record: CXX_FEATURE:1cxx_rvalue_references
+ Feature record: CXX_FEATURE:1cxx_sizeof_member
+ Feature record: CXX_FEATURE:1cxx_static_assert
+ Feature record: CXX_FEATURE:1cxx_strong_enums
+ Feature record: CXX_FEATURE:1cxx_template_template_parameters
+ Feature record: CXX_FEATURE:1cxx_thread_local
+ Feature record: CXX_FEATURE:1cxx_trailing_return_types
+ Feature record: CXX_FEATURE:1cxx_unicode_literals
+ Feature record: CXX_FEATURE:1cxx_uniform_initialization
+ Feature record: CXX_FEATURE:1cxx_unrestricted_unions
+ Feature record: CXX_FEATURE:1cxx_user_literals
+ Feature record: CXX_FEATURE:1cxx_variable_templates
+ Feature record: CXX_FEATURE:1cxx_variadic_macros
+ Feature record: CXX_FEATURE:1cxx_variadic_templates
+
+
+Detecting CXX [-std=c++14] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_4b1e1/fast"
+/usr/bin/make -f CMakeFiles/cmTC_4b1e1.dir/build.make CMakeFiles/cmTC_4b1e1.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_4b1e1.dir/feature_tests.cxx.o
+/usr/bin/c++ -std=c++14 -o CMakeFiles/cmTC_4b1e1.dir/feature_tests.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.cxx
+Linking CXX executable cmTC_4b1e1
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4b1e1.dir/link.txt --verbose=1
+/usr/bin/c++ -rdynamic CMakeFiles/cmTC_4b1e1.dir/feature_tests.cxx.o -o cmTC_4b1e1
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers
+ Feature record: CXX_FEATURE:1cxx_alias_templates
+ Feature record: CXX_FEATURE:1cxx_alignas
+ Feature record: CXX_FEATURE:1cxx_alignof
+ Feature record: CXX_FEATURE:1cxx_attributes
+ Feature record: CXX_FEATURE:1cxx_attribute_deprecated
+ Feature record: CXX_FEATURE:1cxx_auto_type
+ Feature record: CXX_FEATURE:1cxx_binary_literals
+ Feature record: CXX_FEATURE:1cxx_constexpr
+ Feature record: CXX_FEATURE:1cxx_contextual_conversions
+ Feature record: CXX_FEATURE:1cxx_decltype
+ Feature record: CXX_FEATURE:1cxx_decltype_auto
+ Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types
+ Feature record: CXX_FEATURE:1cxx_default_function_template_args
+ Feature record: CXX_FEATURE:1cxx_defaulted_functions
+ Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers
+ Feature record: CXX_FEATURE:1cxx_delegating_constructors
+ Feature record: CXX_FEATURE:1cxx_deleted_functions
+ Feature record: CXX_FEATURE:1cxx_digit_separators
+ Feature record: CXX_FEATURE:1cxx_enum_forward_declarations
+ Feature record: CXX_FEATURE:1cxx_explicit_conversions
+ Feature record: CXX_FEATURE:1cxx_extended_friend_declarations
+ Feature record: CXX_FEATURE:1cxx_extern_templates
+ Feature record: CXX_FEATURE:1cxx_final
+ Feature record: CXX_FEATURE:1cxx_func_identifier
+ Feature record: CXX_FEATURE:1cxx_generalized_initializers
+ Feature record: CXX_FEATURE:1cxx_generic_lambdas
+ Feature record: CXX_FEATURE:1cxx_inheriting_constructors
+ Feature record: CXX_FEATURE:1cxx_inline_namespaces
+ Feature record: CXX_FEATURE:1cxx_lambdas
+ Feature record: CXX_FEATURE:1cxx_lambda_init_captures
+ Feature record: CXX_FEATURE:1cxx_local_type_template_args
+ Feature record: CXX_FEATURE:1cxx_long_long_type
+ Feature record: CXX_FEATURE:1cxx_noexcept
+ Feature record: CXX_FEATURE:1cxx_nonstatic_member_init
+ Feature record: CXX_FEATURE:1cxx_nullptr
+ Feature record: CXX_FEATURE:1cxx_override
+ Feature record: CXX_FEATURE:1cxx_range_for
+ Feature record: CXX_FEATURE:1cxx_raw_string_literals
+ Feature record: CXX_FEATURE:1cxx_reference_qualified_functions
+ Feature record: CXX_FEATURE:1cxx_relaxed_constexpr
+ Feature record: CXX_FEATURE:1cxx_return_type_deduction
+ Feature record: CXX_FEATURE:1cxx_right_angle_brackets
+ Feature record: CXX_FEATURE:1cxx_rvalue_references
+ Feature record: CXX_FEATURE:1cxx_sizeof_member
+ Feature record: CXX_FEATURE:1cxx_static_assert
+ Feature record: CXX_FEATURE:1cxx_strong_enums
+ Feature record: CXX_FEATURE:1cxx_template_template_parameters
+ Feature record: CXX_FEATURE:1cxx_thread_local
+ Feature record: CXX_FEATURE:1cxx_trailing_return_types
+ Feature record: CXX_FEATURE:1cxx_unicode_literals
+ Feature record: CXX_FEATURE:1cxx_uniform_initialization
+ Feature record: CXX_FEATURE:1cxx_unrestricted_unions
+ Feature record: CXX_FEATURE:1cxx_user_literals
+ Feature record: CXX_FEATURE:1cxx_variable_templates
+ Feature record: CXX_FEATURE:1cxx_variadic_macros
+ Feature record: CXX_FEATURE:1cxx_variadic_templates
+
+
+Detecting CXX [-std=c++11] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_49766/fast"
+/usr/bin/make -f CMakeFiles/cmTC_49766.dir/build.make CMakeFiles/cmTC_49766.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_49766.dir/feature_tests.cxx.o
+/usr/bin/c++ -std=c++11 -o CMakeFiles/cmTC_49766.dir/feature_tests.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.cxx
+Linking CXX executable cmTC_49766
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_49766.dir/link.txt --verbose=1
+/usr/bin/c++ -rdynamic CMakeFiles/cmTC_49766.dir/feature_tests.cxx.o -o cmTC_49766
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers
+ Feature record: CXX_FEATURE:1cxx_alias_templates
+ Feature record: CXX_FEATURE:1cxx_alignas
+ Feature record: CXX_FEATURE:1cxx_alignof
+ Feature record: CXX_FEATURE:1cxx_attributes
+ Feature record: CXX_FEATURE:0cxx_attribute_deprecated
+ Feature record: CXX_FEATURE:1cxx_auto_type
+ Feature record: CXX_FEATURE:0cxx_binary_literals
+ Feature record: CXX_FEATURE:1cxx_constexpr
+ Feature record: CXX_FEATURE:0cxx_contextual_conversions
+ Feature record: CXX_FEATURE:1cxx_decltype
+ Feature record: CXX_FEATURE:0cxx_decltype_auto
+ Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types
+ Feature record: CXX_FEATURE:1cxx_default_function_template_args
+ Feature record: CXX_FEATURE:1cxx_defaulted_functions
+ Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers
+ Feature record: CXX_FEATURE:1cxx_delegating_constructors
+ Feature record: CXX_FEATURE:1cxx_deleted_functions
+ Feature record: CXX_FEATURE:0cxx_digit_separators
+ Feature record: CXX_FEATURE:1cxx_enum_forward_declarations
+ Feature record: CXX_FEATURE:1cxx_explicit_conversions
+ Feature record: CXX_FEATURE:1cxx_extended_friend_declarations
+ Feature record: CXX_FEATURE:1cxx_extern_templates
+ Feature record: CXX_FEATURE:1cxx_final
+ Feature record: CXX_FEATURE:1cxx_func_identifier
+ Feature record: CXX_FEATURE:1cxx_generalized_initializers
+ Feature record: CXX_FEATURE:0cxx_generic_lambdas
+ Feature record: CXX_FEATURE:1cxx_inheriting_constructors
+ Feature record: CXX_FEATURE:1cxx_inline_namespaces
+ Feature record: CXX_FEATURE:1cxx_lambdas
+ Feature record: CXX_FEATURE:0cxx_lambda_init_captures
+ Feature record: CXX_FEATURE:1cxx_local_type_template_args
+ Feature record: CXX_FEATURE:1cxx_long_long_type
+ Feature record: CXX_FEATURE:1cxx_noexcept
+ Feature record: CXX_FEATURE:1cxx_nonstatic_member_init
+ Feature record: CXX_FEATURE:1cxx_nullptr
+ Feature record: CXX_FEATURE:1cxx_override
+ Feature record: CXX_FEATURE:1cxx_range_for
+ Feature record: CXX_FEATURE:1cxx_raw_string_literals
+ Feature record: CXX_FEATURE:1cxx_reference_qualified_functions
+ Feature record: CXX_FEATURE:0cxx_relaxed_constexpr
+ Feature record: CXX_FEATURE:0cxx_return_type_deduction
+ Feature record: CXX_FEATURE:1cxx_right_angle_brackets
+ Feature record: CXX_FEATURE:1cxx_rvalue_references
+ Feature record: CXX_FEATURE:1cxx_sizeof_member
+ Feature record: CXX_FEATURE:1cxx_static_assert
+ Feature record: CXX_FEATURE:1cxx_strong_enums
+ Feature record: CXX_FEATURE:1cxx_template_template_parameters
+ Feature record: CXX_FEATURE:1cxx_thread_local
+ Feature record: CXX_FEATURE:1cxx_trailing_return_types
+ Feature record: CXX_FEATURE:1cxx_unicode_literals
+ Feature record: CXX_FEATURE:1cxx_uniform_initialization
+ Feature record: CXX_FEATURE:1cxx_unrestricted_unions
+ Feature record: CXX_FEATURE:1cxx_user_literals
+ Feature record: CXX_FEATURE:0cxx_variable_templates
+ Feature record: CXX_FEATURE:1cxx_variadic_macros
+ Feature record: CXX_FEATURE:1cxx_variadic_templates
+
+
+Detecting CXX [-std=c++98] compiler features compiled with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_75e06/fast"
+/usr/bin/make -f CMakeFiles/cmTC_75e06.dir/build.make CMakeFiles/cmTC_75e06.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_75e06.dir/feature_tests.cxx.o
+/usr/bin/c++ -std=c++98 -o CMakeFiles/cmTC_75e06.dir/feature_tests.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/feature_tests.cxx
+Linking CXX executable cmTC_75e06
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_75e06.dir/link.txt --verbose=1
+/usr/bin/c++ -rdynamic CMakeFiles/cmTC_75e06.dir/feature_tests.cxx.o -o cmTC_75e06
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+ Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers
+ Feature record: CXX_FEATURE:0cxx_alias_templates
+ Feature record: CXX_FEATURE:0cxx_alignas
+ Feature record: CXX_FEATURE:0cxx_alignof
+ Feature record: CXX_FEATURE:0cxx_attributes
+ Feature record: CXX_FEATURE:0cxx_attribute_deprecated
+ Feature record: CXX_FEATURE:0cxx_auto_type
+ Feature record: CXX_FEATURE:0cxx_binary_literals
+ Feature record: CXX_FEATURE:0cxx_constexpr
+ Feature record: CXX_FEATURE:0cxx_contextual_conversions
+ Feature record: CXX_FEATURE:0cxx_decltype
+ Feature record: CXX_FEATURE:0cxx_decltype_auto
+ Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types
+ Feature record: CXX_FEATURE:0cxx_default_function_template_args
+ Feature record: CXX_FEATURE:0cxx_defaulted_functions
+ Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers
+ Feature record: CXX_FEATURE:0cxx_delegating_constructors
+ Feature record: CXX_FEATURE:0cxx_deleted_functions
+ Feature record: CXX_FEATURE:0cxx_digit_separators
+ Feature record: CXX_FEATURE:0cxx_enum_forward_declarations
+ Feature record: CXX_FEATURE:0cxx_explicit_conversions
+ Feature record: CXX_FEATURE:0cxx_extended_friend_declarations
+ Feature record: CXX_FEATURE:0cxx_extern_templates
+ Feature record: CXX_FEATURE:0cxx_final
+ Feature record: CXX_FEATURE:0cxx_func_identifier
+ Feature record: CXX_FEATURE:0cxx_generalized_initializers
+ Feature record: CXX_FEATURE:0cxx_generic_lambdas
+ Feature record: CXX_FEATURE:0cxx_inheriting_constructors
+ Feature record: CXX_FEATURE:0cxx_inline_namespaces
+ Feature record: CXX_FEATURE:0cxx_lambdas
+ Feature record: CXX_FEATURE:0cxx_lambda_init_captures
+ Feature record: CXX_FEATURE:0cxx_local_type_template_args
+ Feature record: CXX_FEATURE:0cxx_long_long_type
+ Feature record: CXX_FEATURE:0cxx_noexcept
+ Feature record: CXX_FEATURE:0cxx_nonstatic_member_init
+ Feature record: CXX_FEATURE:0cxx_nullptr
+ Feature record: CXX_FEATURE:0cxx_override
+ Feature record: CXX_FEATURE:0cxx_range_for
+ Feature record: CXX_FEATURE:0cxx_raw_string_literals
+ Feature record: CXX_FEATURE:0cxx_reference_qualified_functions
+ Feature record: CXX_FEATURE:0cxx_relaxed_constexpr
+ Feature record: CXX_FEATURE:0cxx_return_type_deduction
+ Feature record: CXX_FEATURE:0cxx_right_angle_brackets
+ Feature record: CXX_FEATURE:0cxx_rvalue_references
+ Feature record: CXX_FEATURE:0cxx_sizeof_member
+ Feature record: CXX_FEATURE:0cxx_static_assert
+ Feature record: CXX_FEATURE:0cxx_strong_enums
+ Feature record: CXX_FEATURE:1cxx_template_template_parameters
+ Feature record: CXX_FEATURE:0cxx_thread_local
+ Feature record: CXX_FEATURE:0cxx_trailing_return_types
+ Feature record: CXX_FEATURE:0cxx_unicode_literals
+ Feature record: CXX_FEATURE:0cxx_uniform_initialization
+ Feature record: CXX_FEATURE:0cxx_unrestricted_unions
+ Feature record: CXX_FEATURE:0cxx_user_literals
+ Feature record: CXX_FEATURE:0cxx_variable_templates
+ Feature record: CXX_FEATURE:0cxx_variadic_macros
+ Feature record: CXX_FEATURE:0cxx_variadic_templates
+Determining if the include file pthread.h exists passed with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_5f68c/fast"
+/usr/bin/make -f CMakeFiles/cmTC_5f68c.dir/build.make CMakeFiles/cmTC_5f68c.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_5f68c.dir/CheckIncludeFile.c.o
+/usr/bin/cc -o CMakeFiles/cmTC_5f68c.dir/CheckIncludeFile.c.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/CheckIncludeFile.c
+Linking C executable cmTC_5f68c
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5f68c.dir/link.txt --verbose=1
+/usr/bin/cc -rdynamic CMakeFiles/cmTC_5f68c.dir/CheckIncludeFile.c.o -o cmTC_5f68c
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+
+Performing C++ SOURCE FILE Test HAVE_FLAG_-mtune=native succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_0f7a1/fast"
+/usr/bin/make -f CMakeFiles/cmTC_0f7a1.dir/build.make CMakeFiles/cmTC_0f7a1.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_0f7a1.dir/src.cxx.o
+/usr/bin/c++ -DHAVE_FLAG_-mtune=native -mtune=native -o CMakeFiles/cmTC_0f7a1.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_0f7a1
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0f7a1.dir/link.txt --verbose=1
+/usr/bin/c++ -DHAVE_FLAG_-mtune=native -O2 -rdynamic CMakeFiles/cmTC_0f7a1.dir/src.cxx.o -o cmTC_0f7a1
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wall succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_def1b/fast"
+/usr/bin/make -f CMakeFiles/cmTC_def1b.dir/build.make CMakeFiles/cmTC_def1b.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_def1b.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -DHAVE_FLAG_-Wall -Wall -o CMakeFiles/cmTC_def1b.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_def1b
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_def1b.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -DHAVE_FLAG_-Wall -O2 -rdynamic CMakeFiles/cmTC_def1b.dir/src.cxx.o -o cmTC_def1b
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wextra succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_6988a/fast"
+/usr/bin/make -f CMakeFiles/cmTC_6988a.dir/build.make CMakeFiles/cmTC_6988a.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_6988a.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -DHAVE_FLAG_-Wextra -Wextra -o CMakeFiles/cmTC_6988a.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_6988a
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6988a.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -DHAVE_FLAG_-Wextra -O2 -rdynamic CMakeFiles/cmTC_6988a.dir/src.cxx.o -o cmTC_6988a
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wunused succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_69d26/fast"
+/usr/bin/make -f CMakeFiles/cmTC_69d26.dir/build.make CMakeFiles/cmTC_69d26.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_69d26.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -DHAVE_FLAG_-Wunused -Wunused -o CMakeFiles/cmTC_69d26.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_69d26
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_69d26.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -DHAVE_FLAG_-Wunused -O2 -rdynamic CMakeFiles/cmTC_69d26.dir/src.cxx.o -o cmTC_69d26
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wsign-compare succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_00d94/fast"
+/usr/bin/make -f CMakeFiles/cmTC_00d94.dir/build.make CMakeFiles/cmTC_00d94.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_00d94.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -DHAVE_FLAG_-Wsign-compare -Wsign-compare -o CMakeFiles/cmTC_00d94.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_00d94
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_00d94.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -DHAVE_FLAG_-Wsign-compare -O2 -rdynamic CMakeFiles/cmTC_00d94.dir/src.cxx.o -o cmTC_00d94
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-fno-omit-frame-pointer succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_f3504/fast"
+/usr/bin/make -f CMakeFiles/cmTC_f3504.dir/build.make CMakeFiles/cmTC_f3504.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_f3504.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -DHAVE_FLAG_-fno-omit-frame-pointer -fno-omit-frame-pointer -o CMakeFiles/cmTC_f3504.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_f3504
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f3504.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -DHAVE_FLAG_-fno-omit-frame-pointer -O2 -rdynamic CMakeFiles/cmTC_f3504.dir/src.cxx.o -o cmTC_f3504
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wtype-limits succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_de5f5/fast"
+/usr/bin/make -f CMakeFiles/cmTC_de5f5.dir/build.make CMakeFiles/cmTC_de5f5.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_de5f5.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -DHAVE_FLAG_-Wtype-limits -Wtype-limits -o CMakeFiles/cmTC_de5f5.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_de5f5
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_de5f5.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -DHAVE_FLAG_-Wtype-limits -O2 -rdynamic CMakeFiles/cmTC_de5f5.dir/src.cxx.o -o cmTC_de5f5
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wuninitialized succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_24819/fast"
+/usr/bin/make -f CMakeFiles/cmTC_24819.dir/build.make CMakeFiles/cmTC_24819.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_24819.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -DHAVE_FLAG_-Wuninitialized -Wuninitialized -o CMakeFiles/cmTC_24819.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_24819
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_24819.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -DHAVE_FLAG_-Wuninitialized -O2 -rdynamic CMakeFiles/cmTC_24819.dir/src.cxx.o -o cmTC_24819
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wno-deprecated succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_43377/fast"
+/usr/bin/make -f CMakeFiles/cmTC_43377.dir/build.make CMakeFiles/cmTC_43377.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_43377.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -DHAVE_FLAG_-Wno-deprecated -Wno-deprecated -o CMakeFiles/cmTC_43377.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_43377
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_43377.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -DHAVE_FLAG_-Wno-deprecated -O2 -rdynamic CMakeFiles/cmTC_43377.dir/src.cxx.o -o cmTC_43377
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wstrict-aliasing succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_0335b/fast"
+/usr/bin/make -f CMakeFiles/cmTC_0335b.dir/build.make CMakeFiles/cmTC_0335b.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_0335b.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -DHAVE_FLAG_-Wstrict-aliasing -Wstrict-aliasing -o CMakeFiles/cmTC_0335b.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_0335b
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0335b.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -DHAVE_FLAG_-Wstrict-aliasing -O2 -rdynamic CMakeFiles/cmTC_0335b.dir/src.cxx.o -o cmTC_0335b
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wpointer-arith succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_61605/fast"
+/usr/bin/make -f CMakeFiles/cmTC_61605.dir/build.make CMakeFiles/cmTC_61605.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_61605.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -DHAVE_FLAG_-Wpointer-arith -Wpointer-arith -o CMakeFiles/cmTC_61605.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_61605
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_61605.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -DHAVE_FLAG_-Wpointer-arith -O2 -rdynamic CMakeFiles/cmTC_61605.dir/src.cxx.o -o cmTC_61605
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wformat-nonliteral succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_d949f/fast"
+/usr/bin/make -f CMakeFiles/cmTC_d949f.dir/build.make CMakeFiles/cmTC_d949f.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_d949f.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -DHAVE_FLAG_-Wformat-nonliteral -Wformat-nonliteral -o CMakeFiles/cmTC_d949f.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_d949f
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d949f.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -DHAVE_FLAG_-Wformat-nonliteral -O2 -rdynamic CMakeFiles/cmTC_d949f.dir/src.cxx.o -o cmTC_d949f
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Winit-self succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_c10c8/fast"
+/usr/bin/make -f CMakeFiles/cmTC_c10c8.dir/build.make CMakeFiles/cmTC_c10c8.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_c10c8.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -DHAVE_FLAG_-Winit-self -Winit-self -o CMakeFiles/cmTC_c10c8.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_c10c8
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c10c8.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -DHAVE_FLAG_-Winit-self -O2 -rdynamic CMakeFiles/cmTC_c10c8.dir/src.cxx.o -o cmTC_c10c8
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wparentheses succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_3c567/fast"
+/usr/bin/make -f CMakeFiles/cmTC_3c567.dir/build.make CMakeFiles/cmTC_3c567.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_3c567.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -DHAVE_FLAG_-Wparentheses -Wparentheses -o CMakeFiles/cmTC_3c567.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_3c567
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3c567.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -DHAVE_FLAG_-Wparentheses -O2 -rdynamic CMakeFiles/cmTC_3c567.dir/src.cxx.o -o cmTC_3c567
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wunreachable-code succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_19e23/fast"
+/usr/bin/make -f CMakeFiles/cmTC_19e23.dir/build.make CMakeFiles/cmTC_19e23.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_19e23.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -DHAVE_FLAG_-Wunreachable-code -Wunreachable-code -o CMakeFiles/cmTC_19e23.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_19e23
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_19e23.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -DHAVE_FLAG_-Wunreachable-code -O2 -rdynamic CMakeFiles/cmTC_19e23.dir/src.cxx.o -o cmTC_19e23
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-ggdb3 succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_4d887/fast"
+/usr/bin/make -f CMakeFiles/cmTC_4d887.dir/build.make CMakeFiles/cmTC_4d887.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_4d887.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -DHAVE_FLAG_-ggdb3 -ggdb3 -o CMakeFiles/cmTC_4d887.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_4d887
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4d887.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -DHAVE_FLAG_-ggdb3 -O2 -rdynamic CMakeFiles/cmTC_4d887.dir/src.cxx.o -o cmTC_4d887
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wlogical-op succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_8c435/fast"
+/usr/bin/make -f CMakeFiles/cmTC_8c435.dir/build.make CMakeFiles/cmTC_8c435.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_8c435.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -DHAVE_FLAG_-Wlogical-op -Wlogical-op -o CMakeFiles/cmTC_8c435.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_8c435
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8c435.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -DHAVE_FLAG_-Wlogical-op -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_8c435.dir/src.cxx.o -o cmTC_8c435
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wrestrict succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_db4b6/fast"
+/usr/bin/make -f CMakeFiles/cmTC_db4b6.dir/build.make CMakeFiles/cmTC_db4b6.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_db4b6.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -DHAVE_FLAG_-Wrestrict -Wrestrict -o CMakeFiles/cmTC_db4b6.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_db4b6
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_db4b6.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -DHAVE_FLAG_-Wrestrict -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_db4b6.dir/src.cxx.o -o cmTC_db4b6
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wnull-dereference succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_06a0e/fast"
+/usr/bin/make -f CMakeFiles/cmTC_06a0e.dir/build.make CMakeFiles/cmTC_06a0e.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_06a0e.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -DHAVE_FLAG_-Wnull-dereference -Wnull-dereference -o CMakeFiles/cmTC_06a0e.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_06a0e
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_06a0e.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -DHAVE_FLAG_-Wnull-dereference -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_06a0e.dir/src.cxx.o -o cmTC_06a0e
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wdouble-promotion succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_2cd69/fast"
+/usr/bin/make -f CMakeFiles/cmTC_2cd69.dir/build.make CMakeFiles/cmTC_2cd69.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_2cd69.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -DHAVE_FLAG_-Wdouble-promotion -Wdouble-promotion -o CMakeFiles/cmTC_2cd69.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_2cd69
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2cd69.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -DHAVE_FLAG_-Wdouble-promotion -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_2cd69.dir/src.cxx.o -o cmTC_2cd69
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wshadow succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_6e8fb/fast"
+/usr/bin/make -f CMakeFiles/cmTC_6e8fb.dir/build.make CMakeFiles/cmTC_6e8fb.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_6e8fb.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -DHAVE_FLAG_-Wshadow -Wshadow -o CMakeFiles/cmTC_6e8fb.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_6e8fb
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6e8fb.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -DHAVE_FLAG_-Wshadow -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_6e8fb.dir/src.cxx.o -o cmTC_6e8fb
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-Wformat=2 succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_2b929/fast"
+/usr/bin/make -f CMakeFiles/cmTC_2b929.dir/build.make CMakeFiles/cmTC_2b929.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_2b929.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -DHAVE_FLAG_-Wformat=2 -Wformat=2 -o CMakeFiles/cmTC_2b929.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_2b929
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2b929.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -DHAVE_FLAG_-Wformat=2 -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_2b929.dir/src.cxx.o -o cmTC_2b929
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test HAVE_FLAG_-pedantic succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_426f5/fast"
+/usr/bin/make -f CMakeFiles/cmTC_426f5.dir/build.make CMakeFiles/cmTC_426f5.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_426f5.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -DHAVE_FLAG_-pedantic -pedantic -o CMakeFiles/cmTC_426f5.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+<command-line>:0:11: warning: ISO C++11 requires whitespace after the macro name
+Linking CXX executable cmTC_426f5
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_426f5.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -DHAVE_FLAG_-pedantic -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_426f5.dir/src.cxx.o -o cmTC_426f5
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test COMPILER_HAS_HIDDEN_VISIBILITY succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_079f1/fast"
+/usr/bin/make -f CMakeFiles/cmTC_079f1.dir/build.make CMakeFiles/cmTC_079f1.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_079f1.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DCOMPILER_HAS_HIDDEN_VISIBILITY -fvisibility=hidden -o CMakeFiles/cmTC_079f1.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+Linking CXX executable cmTC_079f1
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_079f1.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DCOMPILER_HAS_HIDDEN_VISIBILITY -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_079f1.dir/src.cxx.o -o cmTC_079f1
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_0a6d5/fast"
+/usr/bin/make -f CMakeFiles/cmTC_0a6d5.dir/build.make CMakeFiles/cmTC_0a6d5.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_0a6d5.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DCOMPILER_HAS_HIDDEN_INLINE_VISIBILITY -fvisibility-inlines-hidden -o CMakeFiles/cmTC_0a6d5.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+Linking CXX executable cmTC_0a6d5
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0a6d5.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DCOMPILER_HAS_HIDDEN_INLINE_VISIBILITY -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_0a6d5.dir/src.cxx.o -o cmTC_0a6d5
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+int main() { return 0; }
+Performing C++ SOURCE FILE Test COMPILER_HAS_DEPRECATED_ATTR succeeded with the following output:
+Change Dir: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp
+
+Run Build Command:"/usr/bin/make" "cmTC_45c55/fast"
+/usr/bin/make -f CMakeFiles/cmTC_45c55.dir/build.make CMakeFiles/cmTC_45c55.dir/build
+make[1]: Entering directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_45c55.dir/src.cxx.o
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DCOMPILER_HAS_DEPRECATED_ATTR -o CMakeFiles/cmTC_45c55.dir/src.cxx.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx: In function ‘int main()’:
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx:2:34: warning: ‘int somefunc()’ is deprecated [-Wdeprecated-declarations]
+ int main() { return somefunc();}
+ ^
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp/src.cxx:1:37: note: declared here
+ __attribute__((__deprecated__)) int somefunc() { return 0; }
+ ^~~~~~~~
+Linking CXX executable cmTC_45c55
+/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_45c55.dir/link.txt --verbose=1
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -DCOMPILER_HAS_DEPRECATED_ATTR -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static -rdynamic CMakeFiles/cmTC_45c55.dir/src.cxx.o -o cmTC_45c55
+make[1]: Leaving directory '/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/CMakeTmp'
+
+Source file was:
+__attribute__((__deprecated__)) int somefunc() { return 0; }
+ int main() { return somefunc();}
diff --git a/cryptominisat5/build/CMakeFiles/CMakeRuleHashes.txt b/cryptominisat5/build/CMakeFiles/CMakeRuleHashes.txt
new file mode 100644
index 000000000..1e03cacbb
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/CMakeRuleHashes.txt
@@ -0,0 +1,2 @@
+# Hashes of file build rules.
+563537280faa62acf124881dd4da4868 CMakeFiles/uninstall
diff --git a/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake b/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake
new file mode 100644
index 000000000..82dc9fca9
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake
@@ -0,0 +1,28 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "RelWithDebInfo".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "libcryptominisat5" for configuration "RelWithDebInfo"
+set_property(TARGET libcryptominisat5 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
+set_target_properties(libcryptominisat5 PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELWITHDEBINFO "CXX"
+ IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/lib/libcryptominisat5.a"
+ )
+
+list(APPEND _IMPORT_CHECK_TARGETS libcryptominisat5 )
+list(APPEND _IMPORT_CHECK_FILES_FOR_libcryptominisat5 "${_IMPORT_PREFIX}/lib/libcryptominisat5.a" )
+
+# Import target "cryptominisat5_simple" for configuration "RelWithDebInfo"
+set_property(TARGET cryptominisat5_simple APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
+set_target_properties(cryptominisat5_simple PROPERTIES
+ IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/bin/cryptominisat5_simple"
+ )
+
+list(APPEND _IMPORT_CHECK_TARGETS cryptominisat5_simple )
+list(APPEND _IMPORT_CHECK_FILES_FOR_cryptominisat5_simple "${_IMPORT_PREFIX}/bin/cryptominisat5_simple" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake b/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake
new file mode 100644
index 000000000..34d528eb0
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake
@@ -0,0 +1,101 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
+ message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget libcryptominisat5 cryptominisat5_simple)
+ list(APPEND _expectedTargets ${_expectedTarget})
+ if(NOT TARGET ${_expectedTarget})
+ list(APPEND _targetsNotDefined ${_expectedTarget})
+ endif()
+ if(TARGET ${_expectedTarget})
+ list(APPEND _targetsDefined ${_expectedTarget})
+ endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+ unset(_targetsDefined)
+ unset(_targetsNotDefined)
+ unset(_expectedTargets)
+ set(CMAKE_IMPORT_FILE_VERSION)
+ cmake_policy(POP)
+ return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target libcryptominisat5
+add_library(libcryptominisat5 STATIC IMPORTED)
+
+set_target_properties(libcryptominisat5 PROPERTIES
+ INTERFACE_LINK_LIBRARIES "-pthread"
+)
+
+# Create imported target cryptominisat5_simple
+add_executable(cryptominisat5_simple IMPORTED)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/cryptominisat5Targets-*.cmake")
+foreach(f ${CONFIG_FILES})
+ include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+ foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+ if(NOT EXISTS "${file}" )
+ message(FATAL_ERROR "The imported target \"${target}\" references the file
+ \"${file}\"
+but this file does not exist. Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+ \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+ endif()
+ endforeach()
+ unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/cryptominisat5/build/CMakeFiles/Makefile.cmake b/cryptominisat5/build/CMakeFiles/Makefile.cmake
new file mode 100644
index 000000000..a8e54cfc7
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/Makefile.cmake
@@ -0,0 +1,162 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# The generator used is:
+set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
+
+# The top level Makefile was generated from the following files:
+set(CMAKE_MAKEFILE_DEPENDS
+ "CMakeCache.txt"
+ "/home/haozewu/Projects/skeleton/CVC4/.git/HEAD"
+ "/home/haozewu/Projects/skeleton/CVC4/.git/refs/heads/master"
+ "CMakeFiles/3.10.2/CMakeCCompiler.cmake"
+ "CMakeFiles/3.10.2/CMakeCXXCompiler.cmake"
+ "CMakeFiles/3.10.2/CMakeSystem.cmake"
+ "CMakeFiles/feature_tests.c"
+ "CMakeFiles/feature_tests.cxx"
+ "CMakeFiles/git-data/grabRef.cmake"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/CMakeLists.txt"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/cmake/FindValgrind.cmake"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake.in"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/cmake/cmake_uninstall.cmake.in"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/cryptominisat5Config.cmake.in"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/CMakeLists.txt"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.cpp.in"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.h.in"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypesmini.h.in"
+ "/usr/share/cmake-3.10/Modules/CMakeCCompiler.cmake.in"
+ "/usr/share/cmake-3.10/Modules/CMakeCCompilerABI.c"
+ "/usr/share/cmake-3.10/Modules/CMakeCInformation.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeCXXCompiler.cmake.in"
+ "/usr/share/cmake-3.10/Modules/CMakeCXXCompilerABI.cpp"
+ "/usr/share/cmake-3.10/Modules/CMakeCXXInformation.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeCommonLanguageInclude.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeCompilerIdDetection.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeConfigurableFile.in"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineCCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineCXXCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineCompileFeatures.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineCompilerABI.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineCompilerId.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeDetermineSystem.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeFindBinUtils.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeFindFrameworks.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeGenericSystem.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeLanguageInformation.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeParseImplicitLinkInfo.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeSystem.cmake.in"
+ "/usr/share/cmake-3.10/Modules/CMakeSystemSpecificInformation.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeSystemSpecificInitialize.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeTestCCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeTestCXXCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeTestCompilerCommon.cmake"
+ "/usr/share/cmake-3.10/Modules/CMakeUnixFindMake.cmake"
+ "/usr/share/cmake-3.10/Modules/CheckCXXCompilerFlag.cmake"
+ "/usr/share/cmake-3.10/Modules/CheckCXXSourceCompiles.cmake"
+ "/usr/share/cmake-3.10/Modules/CheckForPthreads.c"
+ "/usr/share/cmake-3.10/Modules/CheckIncludeFile.c.in"
+ "/usr/share/cmake-3.10/Modules/CheckIncludeFile.cmake"
+ "/usr/share/cmake-3.10/Modules/CheckLibraryExists.cmake"
+ "/usr/share/cmake-3.10/Modules/CheckSymbolExists.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/ADSP-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Borland-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Bruce-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Clang-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Cray-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GHS-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-C-FeatureTests.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-C.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-CXX-FeatureTests.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-CXX.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU-FindBinUtils.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/GNU.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/HP-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/IAR-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Intel-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/MIPSpro-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/MSVC-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/NVIDIA-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/PGI-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/PathScale-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/SCO-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/TI-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/Watcom-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/XL-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.10/Modules/FindBoost.cmake"
+ "/usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake"
+ "/usr/share/cmake-3.10/Modules/FindPackageMessage.cmake"
+ "/usr/share/cmake-3.10/Modules/FindPythonInterp.cmake"
+ "/usr/share/cmake-3.10/Modules/FindPythonLibs.cmake"
+ "/usr/share/cmake-3.10/Modules/FindThreads.cmake"
+ "/usr/share/cmake-3.10/Modules/FindZLIB.cmake"
+ "/usr/share/cmake-3.10/Modules/GNUInstallDirs.cmake"
+ "/usr/share/cmake-3.10/Modules/GenerateExportHeader.cmake"
+ "/usr/share/cmake-3.10/Modules/Internal/FeatureTesting.cmake"
+ "/usr/share/cmake-3.10/Modules/Platform/Linux-Determine-CXX.cmake"
+ "/usr/share/cmake-3.10/Modules/Platform/Linux-GNU-C.cmake"
+ "/usr/share/cmake-3.10/Modules/Platform/Linux-GNU-CXX.cmake"
+ "/usr/share/cmake-3.10/Modules/Platform/Linux-GNU.cmake"
+ "/usr/share/cmake-3.10/Modules/Platform/Linux.cmake"
+ "/usr/share/cmake-3.10/Modules/Platform/UnixPaths.cmake"
+ "/usr/share/cmake-3.10/Modules/SelectLibraryConfigurations.cmake"
+ "/usr/share/cmake-3.10/Modules/exportheader.cmake.in"
+ )
+
+# The corresponding makefile is:
+set(CMAKE_MAKEFILE_OUTPUTS
+ "Makefile"
+ "CMakeFiles/cmake.check_cache"
+ )
+
+# Byproducts of CMake generate step:
+set(CMAKE_MAKEFILE_PRODUCTS
+ "CMakeFiles/3.10.2/CMakeSystem.cmake"
+ "CMakeFiles/3.10.2/CMakeCCompiler.cmake"
+ "CMakeFiles/3.10.2/CMakeCXXCompiler.cmake"
+ "CMakeFiles/3.10.2/CMakeCCompiler.cmake"
+ "CMakeFiles/3.10.2/CMakeCXXCompiler.cmake"
+ "CMakeFiles/git-data/HEAD"
+ "CMakeFiles/git-data/grabRef.cmake"
+ "CMakeFiles/git-data/head-ref"
+ "cmake_uninstall.cmake"
+ "cryptominisat5Config.cmake"
+ "CMakeFiles/cryptominisat5Config.cmake"
+ "CMakeFiles/CMakeDirectoryInformation.cmake"
+ "cmsat5-src/CMakeFiles/CMakeDirectoryInformation.cmake"
+ )
+
+# Dependency information for all targets:
+set(CMAKE_DEPEND_INFO_FILES
+ "CMakeFiles/uninstall.dir/DependInfo.cmake"
+ "cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/DependInfo.cmake"
+ "cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/DependInfo.cmake"
+ "cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake"
+ )
diff --git a/cryptominisat5/build/CMakeFiles/Makefile2 b/cryptominisat5/build/CMakeFiles/Makefile2
new file mode 100644
index 000000000..fc08a98be
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/Makefile2
@@ -0,0 +1,236 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# The main recursive all target
+all:
+
+.PHONY : all
+
+# The main recursive preinstall target
+preinstall:
+
+.PHONY : preinstall
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+#=============================================================================
+# Target rules for target CMakeFiles/uninstall.dir
+
+# All Build rule for target.
+CMakeFiles/uninstall.dir/all:
+ $(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/depend
+ $(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num= "Built target uninstall"
+.PHONY : CMakeFiles/uninstall.dir/all
+
+# Build rule for subdir invocation for target.
+CMakeFiles/uninstall.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+ $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/uninstall.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+.PHONY : CMakeFiles/uninstall.dir/rule
+
+# Convenience name for target.
+uninstall: CMakeFiles/uninstall.dir/rule
+
+.PHONY : uninstall
+
+# clean rule for target.
+CMakeFiles/uninstall.dir/clean:
+ $(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/clean
+.PHONY : CMakeFiles/uninstall.dir/clean
+
+# clean rule for target.
+clean: CMakeFiles/uninstall.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory cmsat5-src
+
+# Convenience name for "all" pass in the directory.
+cmsat5-src/all: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/all
+cmsat5-src/all: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/all
+cmsat5-src/all: cmsat5-src/CMakeFiles/libcryptominisat5.dir/all
+
+.PHONY : cmsat5-src/all
+
+# Convenience name for "clean" pass in the directory.
+cmsat5-src/clean: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean
+cmsat5-src/clean: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean
+cmsat5-src/clean: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean
+
+.PHONY : cmsat5-src/clean
+
+# Convenience name for "preinstall" pass in the directory.
+cmsat5-src/preinstall:
+
+.PHONY : cmsat5-src/preinstall
+
+#=============================================================================
+# Target rules for target cmsat5-src/CMakeFiles/CopyPublicHeaders.dir
+
+# All Build rule for target.
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/all:
+ $(MAKE) -f cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend
+ $(MAKE) -f cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num= "Built target CopyPublicHeaders"
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/all
+
+# Include target in all.
+all: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+ $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule
+
+# Convenience name for target.
+CopyPublicHeaders: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule
+
+.PHONY : CopyPublicHeaders
+
+# clean rule for target.
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean:
+ $(MAKE) -f cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean
+
+# clean rule for target.
+clean: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target cmsat5-src/CMakeFiles/cryptominisat5_simple.dir
+
+# All Build rule for target.
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/all: cmsat5-src/CMakeFiles/libcryptominisat5.dir/all
+ $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend
+ $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=1,2 "Built target cryptominisat5_simple"
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/all
+
+# Include target in all.
+all: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 41
+ $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule
+
+# Convenience name for target.
+cryptominisat5_simple: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule
+
+.PHONY : cryptominisat5_simple
+
+# clean rule for target.
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean:
+ $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean
+
+# clean rule for target.
+clean: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target cmsat5-src/CMakeFiles/libcryptominisat5.dir
+
+# All Build rule for target.
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/all:
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 "Built target libcryptominisat5"
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/all
+
+# Include target in all.
+all: cmsat5-src/CMakeFiles/libcryptominisat5.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 39
+ $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/CMakeFiles/libcryptominisat5.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule
+
+# Convenience name for target.
+libcryptominisat5: cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule
+
+.PHONY : libcryptominisat5
+
+# clean rule for target.
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean:
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean
+
+# clean rule for target.
+clean: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+ $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/cryptominisat5/build/CMakeFiles/TargetDirectories.txt b/cryptominisat5/build/CMakeFiles/TargetDirectories.txt
new file mode 100644
index 000000000..3153a5741
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/TargetDirectories.txt
@@ -0,0 +1,16 @@
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/install/strip.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/edit_cache.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/uninstall.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/rebuild_cache.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/list_install_components.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/install/local.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/install.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/install/strip.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/install/local.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/install.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/rebuild_cache.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/list_install_components.dir
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/edit_cache.dir
diff --git a/cryptominisat5/build/CMakeFiles/cmake.check_cache b/cryptominisat5/build/CMakeFiles/cmake.check_cache
new file mode 100644
index 000000000..3dccd7317
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/cmake.check_cache
@@ -0,0 +1 @@
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file
diff --git a/cryptominisat5/build/CMakeFiles/cryptominisat5Config.cmake b/cryptominisat5/build/CMakeFiles/cryptominisat5Config.cmake
new file mode 100644
index 000000000..7307f6e62
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/cryptominisat5Config.cmake
@@ -0,0 +1,20 @@
+# Config file for the installed cryptominisat Package
+# It defines the following variables
+# CRYPTOMINISAT5_INCLUDE_DIRS - include directories for cryptominisat5
+# CRYPTOMINISAT5_LIBRARIES - libraries to link against
+# CRYPTOMINISAT5_EXECUTABLE - the cryptominisat executable
+
+# Compute paths
+get_filename_component(CRYPTOMINISAT5_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+set(CRYPTOMINISAT5_INCLUDE_DIRS "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include")
+
+# Our library dependencies (contains definitions for IMPORTED targets)
+include("${CRYPTOMINISAT5_CMAKE_DIR}/cryptominisat5Targets.cmake")
+
+# These are IMPORTED targets created by cryptominisat5Targets.cmake
+set(CRYPTOMINISAT5_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES_DEPS )
+set(CRYPTOMINISAT5_VERSION_MAJOR 5)
+set(CRYPTOMINISAT5_VERSION_MINOR 6)
+set(CRYPTOMINISAT5_EXECUTABLE cryptominisat5)
diff --git a/cryptominisat5/build/CMakeFiles/feature_tests.bin b/cryptominisat5/build/CMakeFiles/feature_tests.bin
new file mode 100755
index 000000000..e49b90eba
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/feature_tests.bin
Binary files differ
diff --git a/cryptominisat5/build/CMakeFiles/feature_tests.c b/cryptominisat5/build/CMakeFiles/feature_tests.c
new file mode 100644
index 000000000..83e86dd8c
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/feature_tests.c
@@ -0,0 +1,34 @@
+
+ const char features[] = {"\n"
+"C_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304
+"1"
+#else
+"0"
+#endif
+"c_function_prototypes\n"
+"C_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+"1"
+#else
+"0"
+#endif
+"c_restrict\n"
+"C_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L
+"1"
+#else
+"0"
+#endif
+"c_static_assert\n"
+"C_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+"1"
+#else
+"0"
+#endif
+"c_variadic_macros\n"
+
+};
+
+int main(int argc, char** argv) { (void)argv; return features[argc]; }
diff --git a/cryptominisat5/build/CMakeFiles/feature_tests.cxx b/cryptominisat5/build/CMakeFiles/feature_tests.cxx
new file mode 100644
index 000000000..b93418c6e
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/feature_tests.cxx
@@ -0,0 +1,405 @@
+
+ const char features[] = {"\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
+"1"
+#else
+"0"
+#endif
+"cxx_aggregate_default_initializers\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_alias_templates\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_alignas\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_alignof\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_attributes\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_attribute_deprecated\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_auto_type\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_binary_literals\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_constexpr\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_contextual_conversions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_decltype\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_decltype_auto\n"
+"CXX_FEATURE:"
+#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_decltype_incomplete_return_types\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_default_function_template_args\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_defaulted_functions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_defaulted_move_initializers\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_delegating_constructors\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_deleted_functions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_digit_separators\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_enum_forward_declarations\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_explicit_conversions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_extended_friend_declarations\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_extern_templates\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_final\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_func_identifier\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_generalized_initializers\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_generic_lambdas\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_inheriting_constructors\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_inline_namespaces\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_lambdas\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_lambda_init_captures\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_local_type_template_args\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_long_long_type\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_noexcept\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_nonstatic_member_init\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_nullptr\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_override\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_range_for\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_raw_string_literals\n"
+"CXX_FEATURE:"
+#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_reference_qualified_functions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
+"1"
+#else
+"0"
+#endif
+"cxx_relaxed_constexpr\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_return_type_deduction\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_right_angle_brackets\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_rvalue_references\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_sizeof_member\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_static_assert\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_strong_enums\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus
+"1"
+#else
+"0"
+#endif
+"cxx_template_template_parameters\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_thread_local\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_trailing_return_types\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_unicode_literals\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_uniform_initialization\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_unrestricted_unions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_user_literals\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
+"1"
+#else
+"0"
+#endif
+"cxx_variable_templates\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_variadic_macros\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_variadic_templates\n"
+
+};
+
+int main(int argc, char** argv) { (void)argv; return features[argc]; }
diff --git a/cryptominisat5/build/CMakeFiles/git-data/HEAD b/cryptominisat5/build/CMakeFiles/git-data/HEAD
new file mode 100644
index 000000000..cb089cd89
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/git-data/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/cryptominisat5/build/CMakeFiles/git-data/grabRef.cmake b/cryptominisat5/build/CMakeFiles/git-data/grabRef.cmake
new file mode 100644
index 000000000..bc84ad0e4
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/git-data/grabRef.cmake
@@ -0,0 +1,38 @@
+#
+# Internal file for GetGitRevisionDescription.cmake
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(HEAD_HASH)
+
+file(READ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/git-data/HEAD" HEAD_CONTENTS LIMIT 1024)
+
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+if(HEAD_CONTENTS MATCHES "ref")
+ # named branch
+ string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
+ if(EXISTS "/home/haozewu/Projects/skeleton/CVC4/.git/${HEAD_REF}")
+ configure_file("/home/haozewu/Projects/skeleton/CVC4/.git/${HEAD_REF}" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/git-data/head-ref" COPYONLY)
+ elseif(EXISTS "/home/haozewu/Projects/skeleton/CVC4/.git/logs/${HEAD_REF}")
+ configure_file("/home/haozewu/Projects/skeleton/CVC4/.git/logs/${HEAD_REF}" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/git-data/head-ref" COPYONLY)
+ set(HEAD_HASH "${HEAD_REF}")
+ endif()
+else()
+ # detached HEAD
+ configure_file("/home/haozewu/Projects/skeleton/CVC4/.git/HEAD" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/git-data/head-ref" COPYONLY)
+endif()
+
+if(NOT HEAD_HASH)
+ file(READ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/git-data/head-ref" HEAD_HASH LIMIT 1024)
+ string(STRIP "${HEAD_HASH}" HEAD_HASH)
+endif()
diff --git a/cryptominisat5/build/CMakeFiles/git-data/head-ref b/cryptominisat5/build/CMakeFiles/git-data/head-ref
new file mode 100644
index 000000000..99e5461ae
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/git-data/head-ref
@@ -0,0 +1 @@
+43e3983647365e36ec616b4ee92a223537bf4616
diff --git a/cryptominisat5/build/CMakeFiles/progress.marks b/cryptominisat5/build/CMakeFiles/progress.marks
new file mode 100644
index 000000000..87523dd7a
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/progress.marks
@@ -0,0 +1 @@
+41
diff --git a/cryptominisat5/build/CMakeFiles/uninstall.dir/DependInfo.cmake b/cryptominisat5/build/CMakeFiles/uninstall.dir/DependInfo.cmake
new file mode 100644
index 000000000..19fab2149
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/uninstall.dir/DependInfo.cmake
@@ -0,0 +1,11 @@
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+ )
+# The set of files for implicit dependencies of each language:
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+ )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/cryptominisat5/build/CMakeFiles/uninstall.dir/build.make b/cryptominisat5/build/CMakeFiles/uninstall.dir/build.make
new file mode 100644
index 000000000..1afe0f7de
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/uninstall.dir/build.make
@@ -0,0 +1,76 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+# Utility rule file for uninstall.
+
+# Include the progress variables for this target.
+include CMakeFiles/uninstall.dir/progress.make
+
+CMakeFiles/uninstall: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/uninstall_pycyrptosat
+ /usr/bin/cmake -P /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmake_uninstall.cmake
+
+uninstall: CMakeFiles/uninstall
+uninstall: CMakeFiles/uninstall.dir/build.make
+
+.PHONY : uninstall
+
+# Rule to build all files generated by this target.
+CMakeFiles/uninstall.dir/build: uninstall
+
+.PHONY : CMakeFiles/uninstall.dir/build
+
+CMakeFiles/uninstall.dir/clean:
+ $(CMAKE_COMMAND) -P CMakeFiles/uninstall.dir/cmake_clean.cmake
+.PHONY : CMakeFiles/uninstall.dir/clean
+
+CMakeFiles/uninstall.dir/depend:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/uninstall.dir/DependInfo.cmake --color=$(COLOR)
+.PHONY : CMakeFiles/uninstall.dir/depend
+
diff --git a/cryptominisat5/build/CMakeFiles/uninstall.dir/cmake_clean.cmake b/cryptominisat5/build/CMakeFiles/uninstall.dir/cmake_clean.cmake
new file mode 100644
index 000000000..027952dfb
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/uninstall.dir/cmake_clean.cmake
@@ -0,0 +1,8 @@
+file(REMOVE_RECURSE
+ "CMakeFiles/uninstall"
+)
+
+# Per-language clean rules from dependency scanning.
+foreach(lang )
+ include(CMakeFiles/uninstall.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()
diff --git a/cryptominisat5/build/CMakeFiles/uninstall.dir/progress.make b/cryptominisat5/build/CMakeFiles/uninstall.dir/progress.make
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/cryptominisat5/build/CMakeFiles/uninstall.dir/progress.make
@@ -0,0 +1 @@
+
diff --git a/cryptominisat5/build/Makefile b/cryptominisat5/build/Makefile
new file mode 100644
index 000000000..24dfb5a37
--- /dev/null
+++ b/cryptominisat5/build/Makefile
@@ -0,0 +1,240 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target install/strip
+install/strip: preinstall
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+ /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: preinstall/fast
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+ /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip/fast
+
+# Special rule for the target edit_cache
+edit_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
+ /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+
+.PHONY : edit_cache/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+ /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+
+.PHONY : rebuild_cache/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+
+.PHONY : list_install_components/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+ /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: preinstall/fast
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+ /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local/fast
+
+# Special rule for the target install
+install: preinstall
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+ /usr/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+ /usr/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# The main all target
+all: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/progress.marks
+ $(MAKE) -f CMakeFiles/Makefile2 all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+ $(MAKE) -f CMakeFiles/Makefile2 clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+ $(MAKE) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+ $(MAKE) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+ $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+#=============================================================================
+# Target rules for targets named uninstall
+
+# Build rule for target.
+uninstall: cmake_check_build_system
+ $(MAKE) -f CMakeFiles/Makefile2 uninstall
+.PHONY : uninstall
+
+# fast build rule for target.
+uninstall/fast:
+ $(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/build
+.PHONY : uninstall/fast
+
+#=============================================================================
+# Target rules for targets named CopyPublicHeaders
+
+# Build rule for target.
+CopyPublicHeaders: cmake_check_build_system
+ $(MAKE) -f CMakeFiles/Makefile2 CopyPublicHeaders
+.PHONY : CopyPublicHeaders
+
+# fast build rule for target.
+CopyPublicHeaders/fast:
+ $(MAKE) -f cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build
+.PHONY : CopyPublicHeaders/fast
+
+#=============================================================================
+# Target rules for targets named cryptominisat5_simple
+
+# Build rule for target.
+cryptominisat5_simple: cmake_check_build_system
+ $(MAKE) -f CMakeFiles/Makefile2 cryptominisat5_simple
+.PHONY : cryptominisat5_simple
+
+# fast build rule for target.
+cryptominisat5_simple/fast:
+ $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build
+.PHONY : cryptominisat5_simple/fast
+
+#=============================================================================
+# Target rules for targets named libcryptominisat5
+
+# Build rule for target.
+libcryptominisat5: cmake_check_build_system
+ $(MAKE) -f CMakeFiles/Makefile2 libcryptominisat5
+.PHONY : libcryptominisat5
+
+# fast build rule for target.
+libcryptominisat5/fast:
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/build
+.PHONY : libcryptominisat5/fast
+
+# Help Target
+help:
+ @echo "The following are some of the valid targets for this Makefile:"
+ @echo "... all (the default if no target is provided)"
+ @echo "... clean"
+ @echo "... depend"
+ @echo "... install/strip"
+ @echo "... edit_cache"
+ @echo "... uninstall"
+ @echo "... rebuild_cache"
+ @echo "... list_install_components"
+ @echo "... install/local"
+ @echo "... install"
+ @echo "... CopyPublicHeaders"
+ @echo "... cryptominisat5_simple"
+ @echo "... libcryptominisat5"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+ $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/cryptominisat5/build/cmake_install.cmake b/cryptominisat5/build/cmake_install.cmake
new file mode 100644
index 000000000..857d5f5ec
--- /dev/null
+++ b/cryptominisat5/build/cmake_install.cmake
@@ -0,0 +1,78 @@
+# Install script for directory: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+ set(CMAKE_INSTALL_PREFIX "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+ if(BUILD_TYPE)
+ string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+ CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+ else()
+ set(CMAKE_INSTALL_CONFIG_NAME "RelWithDebInfo")
+ endif()
+ message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+ if(COMPONENT)
+ message(STATUS "Install component: \"${COMPONENT}\"")
+ set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+ else()
+ set(CMAKE_INSTALL_COMPONENT)
+ endif()
+endif()
+
+# Install shared libraries without execute permission?
+if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+ set(CMAKE_INSTALL_SO_NO_EXE "1")
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+ set(CMAKE_CROSSCOMPILING "FALSE")
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT)
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5" TYPE FILE FILES "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build//CMakeFiles/cryptominisat5Config.cmake")
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT)
+ if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake")
+ file(DIFFERENT EXPORT_FILE_CHANGED FILES
+ "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake")
+ if(EXPORT_FILE_CHANGED)
+ file(GLOB OLD_CONFIG_FILES "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5/cryptominisat5Targets-*.cmake")
+ if(OLD_CONFIG_FILES)
+ message(STATUS "Old export file \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake\" will be replaced. Removing files [${OLD_CONFIG_FILES}].")
+ file(REMOVE ${OLD_CONFIG_FILES})
+ endif()
+ endif()
+ endif()
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5" TYPE FILE FILES "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake")
+ if("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$")
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/cryptominisat5" TYPE FILE FILES "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles/Export/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake")
+ endif()
+endif()
+
+if(NOT CMAKE_INSTALL_LOCAL_ONLY)
+ # Include the install script for each subdirectory.
+ include("/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cmake_install.cmake")
+
+endif()
+
+if(CMAKE_INSTALL_COMPONENT)
+ set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
+else()
+ set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
+endif()
+
+string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
+ "${CMAKE_INSTALL_MANIFEST_FILES}")
+file(WRITE "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/${CMAKE_INSTALL_MANIFEST}"
+ "${CMAKE_INSTALL_MANIFEST_CONTENT}")
diff --git a/cryptominisat5/build/cmake_uninstall.cmake b/cryptominisat5/build/cmake_uninstall.cmake
new file mode 100644
index 000000000..32b847b7a
--- /dev/null
+++ b/cryptominisat5/build/cmake_uninstall.cmake
@@ -0,0 +1,24 @@
+cmake_policy(SET CMP0007 NEW) # Suppress warnings see `cmake --help-policy CMP0007`
+
+if (NOT EXISTS "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/install_manifest.txt")
+ message(FATAL_ERROR "Cannot find install manifest: \"/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/install_manifest.txt\"")
+endif(NOT EXISTS "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/install_manifest.txt")
+
+file(READ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/install_manifest.txt" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+list(REVERSE files)
+foreach (file ${files})
+ message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
+ if (EXISTS "$ENV{DESTDIR}${file}")
+ execute_process(
+ COMMAND /usr/bin/cmake -E remove "$ENV{DESTDIR}${file}"
+ OUTPUT_VARIABLE rm_out
+ RESULT_VARIABLE rm_retval
+ )
+ if(NOT ${rm_retval} EQUAL 0)
+ message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
+ endif (NOT ${rm_retval} EQUAL 0)
+ else (EXISTS "$ENV{DESTDIR}${file}")
+ message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
+ endif (EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CMakeDirectoryInformation.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/CMakeDirectoryInformation.cmake
new file mode 100644
index 000000000..ad7fd9767
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -0,0 +1,16 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/DependInfo.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/DependInfo.cmake
new file mode 100644
index 000000000..19fab2149
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/DependInfo.cmake
@@ -0,0 +1,11 @@
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+ )
+# The set of files for implicit dependencies of each language:
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+ )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make
new file mode 100644
index 000000000..bec191993
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make
@@ -0,0 +1,86 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+# Utility rule file for CopyPublicHeaders.
+
+# Include the progress variables for this target.
+include cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/progress.make
+
+CopyPublicHeaders: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E make_directory /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E echo Copying\ cryptominisat_c.h\ to\ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E copy_if_different /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat_c.h /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E make_directory /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E echo Copying\ cryptominisat.h\ to\ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E copy_if_different /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat.h /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E make_directory /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E echo Copying\ solvertypesmini.h\ to\ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E copy_if_different /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cryptominisat5/solvertypesmini.h /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E make_directory /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E echo Copying\ dimacsparser.h\ to\ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E copy_if_different /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E make_directory /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E echo Copying\ streambuffer.h\ to\ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/cmake -E copy_if_different /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include/cryptominisat5
+.PHONY : CopyPublicHeaders
+
+# Rule to build all files generated by this target.
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build: CopyPublicHeaders
+
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build
+
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && $(CMAKE_COMMAND) -P CMakeFiles/CopyPublicHeaders.dir/cmake_clean.cmake
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/clean
+
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/DependInfo.cmake --color=$(COLOR)
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/cmake_clean.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/cmake_clean.cmake
new file mode 100644
index 000000000..e058b416e
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/cmake_clean.cmake
@@ -0,0 +1,5 @@
+
+# Per-language clean rules from dependency scanning.
+foreach(lang )
+ include(CMakeFiles/CopyPublicHeaders.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.internal b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.internal
new file mode 100644
index 000000000..60b34b74c
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.internal
@@ -0,0 +1,3 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.make
new file mode 100644
index 000000000..60b34b74c
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/depend.make
@@ -0,0 +1,3 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/progress.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/progress.make
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/progress.make
@@ -0,0 +1 @@
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/CXX.includecache b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/CXX.includecache
new file mode 100644
index 000000000..e717f07ac
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/CXX.includecache
@@ -0,0 +1,156 @@
+#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
+
+#IncludeRegexScan: ^.*$
+
+#IncludeRegexComplain: ^$
+
+#IncludeRegexTransform:
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cstdint
+-
+cstdlib
+-
+stdio.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h
+string.h
+-
+streambuffer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat.h
+cstdlib
+-
+cmath
+-
+sstream
+-
+iostream
+-
+iomanip
+-
+vector
+-
+fstream
+-
+complex
+-
+cassert
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_common.h
+cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat.h
+iostream
+-
+cmath
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
+ctime
+-
+cstring
+-
+errno.h
+-
+iostream
+-
+stdlib.h
+-
+string.h
+-
+signal.h
+-
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+main_common.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_common.h
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat.h
+dimacsparser.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+string
+-
+vector
+-
+cstdlib
+-
+cassert
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+stdio.h
+-
+iostream
+-
+iomanip
+-
+limits
+-
+string
+-
+memory
+-
+zlib.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cassert
+-
+time.h
+-
+ios
+-
+iostream
+-
+fstream
+-
+string
+-
+signal.h
+-
+ctime
+-
+sys/time.h
+-
+sys/resource.h
+-
+unistd.h
+-
+sys/types.h
+-
+
+cmsat5-src/cryptominisat5/cryptominisat.h
+atomic
+-
+vector
+-
+iostream
+-
+utility
+-
+cryptominisat5/solvertypesmini.h
+cmsat5-src/cryptominisat5/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/cryptominisat5/solvertypesmini.h
+cstdint
+-
+iostream
+-
+cassert
+-
+vector
+-
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/DependInfo.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/DependInfo.cmake
new file mode 100644
index 000000000..4cdbc07ee
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/DependInfo.cmake
@@ -0,0 +1,23 @@
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+ "CXX"
+ )
+# The set of files for implicit dependencies of each language:
+set(CMAKE_DEPENDS_CHECK_CXX
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o"
+ )
+set(CMAKE_CXX_COMPILER_ID "GNU")
+
+# The include file search paths:
+set(CMAKE_CXX_TARGET_INCLUDE_PATH
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3"
+ "cmsat5-src"
+ )
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake"
+ )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make
new file mode 100644
index 000000000..c13319b84
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make
@@ -0,0 +1,114 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+# Include any dependencies generated for this target.
+include cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.make
+
+# Include the progress variables for this target.
+include cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/progress.make
+
+# Include the compile flags for this target's objects.
+include cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/flags.make
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/flags.make
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp > CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.i
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp -o CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.s
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.requires
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.provides: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.provides
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.provides.build: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o
+
+
+# Object files for target cryptominisat5_simple
+cryptominisat5_simple_OBJECTS = \
+"CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o"
+
+# External object files for target cryptominisat5_simple
+cryptominisat5_simple_EXTERNAL_OBJECTS =
+
+cryptominisat5_simple: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o
+cryptominisat5_simple: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make
+cryptominisat5_simple: lib/libcryptominisat5.a
+cryptominisat5_simple: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/link.txt
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable ../cryptominisat5_simple"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cryptominisat5_simple.dir/link.txt --verbose=$(VERBOSE)
+
+# Rule to build all files generated by this target.
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build: cryptominisat5_simple
+
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/requires: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o.requires
+
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/requires
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && $(CMAKE_COMMAND) -P CMakeFiles/cryptominisat5_simple.dir/cmake_clean.cmake
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/clean
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/DependInfo.cmake --color=$(COLOR)
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/cmake_clean.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/cmake_clean.cmake
new file mode 100644
index 000000000..c1b996bb4
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/cmake_clean.cmake
@@ -0,0 +1,10 @@
+file(REMOVE_RECURSE
+ "CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o"
+ "../cryptominisat5_simple.pdb"
+ "../cryptominisat5_simple"
+)
+
+# Per-language clean rules from dependency scanning.
+foreach(lang CXX)
+ include(CMakeFiles/cryptominisat5_simple.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.internal b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.internal
new file mode 100644
index 000000000..df5dc1ac6
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.internal
@@ -0,0 +1,13 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_common.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ cmsat5-src/cryptominisat5/cryptominisat.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.make
new file mode 100644
index 000000000..1143bcc24
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/depend.make
@@ -0,0 +1,13 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_common.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: cmsat5-src/cryptominisat5/cryptominisat.h
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/flags.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/flags.make
new file mode 100644
index 000000000..ff33dbadd
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/flags.make
@@ -0,0 +1,10 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# compile CXX with /usr/bin/c++
+CXX_FLAGS = -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11
+
+CXX_DEFINES =
+
+CXX_INCLUDES = -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/link.txt b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/link.txt
new file mode 100644
index 000000000..23a781217
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/link.txt
@@ -0,0 +1 @@
+/usr/bin/c++ -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -O2 -Wl,--discard-all -Wl,--build-id=sha1 -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o -o ../cryptominisat5_simple ../lib/libcryptominisat5.a -pthread
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o
new file mode 100644
index 000000000..0827e199e
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/progress.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/progress.make
new file mode 100644
index 000000000..abadeb0c3
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/progress.make
@@ -0,0 +1,3 @@
+CMAKE_PROGRESS_1 = 1
+CMAKE_PROGRESS_2 = 2
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/CXX.includecache b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/CXX.includecache
new file mode 100644
index 000000000..c070a5934
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/CXX.includecache
@@ -0,0 +1,1724 @@
+#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
+
+#IncludeRegexScan: ^.*$
+
+#IncludeRegexComplain: ^$
+
+#IncludeRegexTransform:
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp
+src/GitSHA1.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/src/GitSHA1.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+vector
+-
+limits
+-
+string
+-
+utility
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+packedmatrix.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+bitarray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+gausswatched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+gqueuedata.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+iostream
+-
+limits.h
+-
+stdio.h
+-
+time.h
+-
+math.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cassert
+-
+new
+-
+cstdint
+-
+limits
+-
+utility
+-
+XAlloc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+errno.h
+-
+stdlib.h
+-
+stdio.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+iostream
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+limits
+-
+cassert
+-
+vector
+-
+cstring
+-
+sstream
+-
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+string.h
+-
+cassert
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+stdlib.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+avgcalc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cassert
+-
+vector
+-
+cstring
+-
+sstream
+-
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
+bva.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+subsumeimplicit.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmath
+-
+functional
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+heap.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+touchlist.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cstdio
+-
+vector
+-
+sys/types.h
+-
+string.h
+-
+limits
+-
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+alg.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+clabstraction.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+avgcalc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+searchhist.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+stdlib.h
+-
+algorithm
+-
+string.h
+-
+limits
+-
+cassert
+-
+cmath
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+searcher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+EGaussian.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+valgrind/valgrind.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/valgrind/valgrind.h
+valgrind/memcheck.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/valgrind/memcheck.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+stdlib.h
+-
+map
+-
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
+clausedumper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+comphandler.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+fstream
+-
+vector
+-
+limits
+-
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
+clauseusagestats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+iostream
+-
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cstdint
+-
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
+cnf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+stdexcept
+-
+vardata.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+atomic
+-
+limits
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+vardata.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+stamp.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+implcache.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+drat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+simplefile.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+gausswatched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
+set
+-
+map
+-
+iomanip
+-
+iostream
+-
+compfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+vector
+-
+map
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
+comphandler.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+compfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+iostream
+-
+cassert
+-
+iomanip
+-
+cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+map
+-
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
+completedetachreattacher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cstdint
+-
+cstdlib
+-
+stdio.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+drat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+shareddata.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+fstream
+-
+thread
+-
+mutex
+-
+atomic
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
+cryptominisat5/cryptominisat_c.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat_c.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/cryptominisat.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+limits
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
+datasync.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+shareddata.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
+distillerlong.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+vector
+-
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
+distillerlongwithimpl.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+vector
+-
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+iostream
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
+vector
+-
+cmath
+-
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+features_calc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+vector
+-
+limits
+-
+utility
+-
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+iostream
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hasher.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+Vec.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+MersenneTwister.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
+hyperengine.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cnf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+vector
+-
+set
+-
+propengine.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+mystack.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
+implcache.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+vector
+-
+limits
+-
+algorithm
+-
+vector
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
+intree.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmath
+-
+cassert
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+vector
+-
+deque
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h
+vector
+-
+map
+-
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cassert
+-
+iomanip
+-
+cmath
+-
+algorithm
+-
+set
+-
+algorithm
+-
+fstream
+-
+set
+-
+iostream
+-
+limits
+-
+cmath
+-
+functional
+-
+popcnt.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solutionextender.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+completedetachreattacher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+subsumestrengthen.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+toplevelgaussabst.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
+subsumeimplicit.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+datasync.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+xorfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+bva.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+trim.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+toplevelgauss.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+map
+-
+vector
+-
+list
+-
+set
+-
+queue
+-
+map
+-
+iomanip
+-
+fstream
+-
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+heap.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+touchlist.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+simplefile.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+algorithm
+-
+cstdint
+-
+packedrow.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+vector
+-
+cstdint
+-
+string.h
+-
+iostream
+-
+algorithm
+-
+limits
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+popcnt.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+Vec.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+intrin.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
+prober.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+iomanip
+-
+utility
+-
+set
+-
+utility
+-
+cmath
+-
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+completedetachreattacher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+set
+-
+map
+-
+vector
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
+propengine.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmath
+-
+string.h
+-
+algorithm
+-
+limits.h
+-
+vector
+-
+iomanip
+-
+algorithm
+-
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cstdio
+-
+string.h
+-
+stack
+-
+set
+-
+cmath
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+avgcalc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+heap.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+alg.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+boundedqueue.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cnf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
+reducedb.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+functional
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+clauseusagestats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
+iostream
+-
+vector
+-
+iomanip
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+sccfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+stack
+-
+set
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
+searcher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+iomanip
+-
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+propbyforgraph.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h
+algorithm
+-
+cstddef
+-
+cmath
+-
+ratio
+-
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+datasync.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+reducedb.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+hasher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hasher.h
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+distillerlong.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+xorfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+matrixfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h
+EGaussian.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+array
+-
+propengine.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+hyperengine.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+MersenneTwister.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+simplefile.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+searchstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+gqueuedata.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+gtest/gtest_prod.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gtest/gtest_prod.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cstdint
+-
+avgcalc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+boundedqueue.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+iostream
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
+searchstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cstdint
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+vector
+-
+mutex
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+fstream
+-
+iostream
+-
+string
+-
+cstdint
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
+solutionextender.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+iostream
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+limits
+-
+cstdint
+-
+string
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+fstream
+-
+cmath
+-
+fcntl.h
+-
+functional
+-
+limits
+-
+string
+-
+algorithm
+-
+vector
+-
+complex
+-
+locale
+-
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+searcher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+prober.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+distillerlong.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+solutionextender.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+completedetachreattacher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+compfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+comphandler.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+subsumestrengthen.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+subsumeimplicit.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+distillerlongwithimpl.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+str_impl_w_impl_stamp.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+datasync.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+reducedb.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+clausedumper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+sccfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+intree.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+features_calc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+GitSHA1.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
+features_to_reconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h
+trim.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+streambuffer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+EGaussian.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+drat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+xorfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+sqlitestats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+vector
+-
+fstream
+-
+iostream
+-
+utility
+-
+string
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+implcache.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+propengine.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+searcher.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+clauseusagestats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+searchstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+gtest/gtest_prod.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gtest/gtest_prod.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+limits
+-
+iomanip
+-
+sstream
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+string
+-
+vector
+-
+cstdlib
+-
+cassert
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+sstream
+-
+algorithm
+-
+limits
+-
+vector
+-
+iostream
+-
+iomanip
+-
+string
+-
+limits
+-
+cassert
+-
+solverconf.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+sqlite3.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+fcntl.h
+-
+unistd.h
+-
+ctime
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+clauseusagestats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+solvefeatures.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+searchstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
+stamp.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+vector
+-
+algorithm
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
+str_impl_w_impl_stamp.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+vector
+-
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+stdio.h
+-
+iostream
+-
+iomanip
+-
+limits
+-
+string
+-
+memory
+-
+zlib.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
+subsumeimplicit.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmath
+-
+iomanip
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+vector
+-
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+touchlist.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
+subsumestrengthen.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+watchalgos.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+subsumeimplicit.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+array
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat5/solvertypesmini.h
+clabstraction.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cassert
+-
+time.h
+-
+ios
+-
+iostream
+-
+fstream
+-
+string
+-
+signal.h
+-
+ctime
+-
+sys/time.h
+-
+sys/resource.h
+-
+unistd.h
+-
+sys/types.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+toplevelgaussabst.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
+vector
+-
+set
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+vector
+-
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+string.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+propby.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+avgcalc.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
+varreplacer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+varupdatehelper.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+clausecleaner.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+sccfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+iostream
+-
+iomanip
+-
+set
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+map
+-
+vector
+-
+utility
+-
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+clause.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+simplefile.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+iostream
+-
+set
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+watched.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+Vec.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+vector
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+clabstraction.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+constants.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cloffset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+limits
+-
+string.h
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+solvertypes.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+vector
+-
+set
+-
+iostream
+-
+algorithm
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
+xorfinder.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+time_mem.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+solver.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+occsimplifier.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+clauseallocator.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+sqlstats.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+limits
+-
+
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+vector
+-
+set
+-
+iostream
+-
+algorithm
+-
+set
+-
+xor.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cset.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+watcharray.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+
+cmsat5-src/cryptominisat5/cryptominisat.h
+atomic
+-
+vector
+-
+iostream
+-
+utility
+-
+cryptominisat5/solvertypesmini.h
+cmsat5-src/cryptominisat5/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/cryptominisat5/cryptominisat_c.h
+stddef.h
+-
+stdint.h
+-
+stdbool.h
+-
+
+cmsat5-src/cryptominisat5/solvertypesmini.h
+cstdint
+-
+iostream
+-
+cassert
+-
+vector
+-
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake
new file mode 100644
index 000000000..787e3279c
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake
@@ -0,0 +1,59 @@
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+ "CXX"
+ )
+# The set of files for implicit dependencies of each language:
+set(CMAKE_DEPENDS_CHECK_CXX
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp" "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o"
+ )
+set(CMAKE_CXX_COMPILER_ID "GNU")
+
+# The include file search paths:
+set(CMAKE_CXX_TARGET_INCLUDE_PATH
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3"
+ "cmsat5-src"
+ )
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+ )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o
new file mode 100644
index 000000000..e8af985af
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make
new file mode 100644
index 000000000..286c3bb84
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make
@@ -0,0 +1,1113 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+# Include any dependencies generated for this target.
+include cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.make
+
+# Include the progress variables for this target.
+include cmsat5-src/CMakeFiles/libcryptominisat5.dir/progress.make
+
+# Include the compile flags for this target's objects.
+include cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/cnf.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/cnf.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp > CMakeFiles/libcryptominisat5.dir/cnf.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/cnf.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp -o CMakeFiles/libcryptominisat5.dir/cnf.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/propengine.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/propengine.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp > CMakeFiles/libcryptominisat5.dir/propengine.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/propengine.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp -o CMakeFiles/libcryptominisat5.dir/propengine.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp > CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp -o CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp > CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp -o CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp > CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp -o CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/prober.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/prober.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp > CMakeFiles/libcryptominisat5.dir/prober.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/prober.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp -o CMakeFiles/libcryptominisat5.dir/prober.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp > CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp -o CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp > CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp -o CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp > CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp -o CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp > CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp -o CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/solverconf.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp > CMakeFiles/libcryptominisat5.dir/solverconf.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/solverconf.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp -o CMakeFiles/libcryptominisat5.dir/solverconf.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp > CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp -o CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp > CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp -o CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp > CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp -o CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp > CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp -o CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp > CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp -o CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/searcher.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/searcher.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp > CMakeFiles/libcryptominisat5.dir/searcher.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/searcher.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp -o CMakeFiles/libcryptominisat5.dir/searcher.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/solver.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/solver.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp > CMakeFiles/libcryptominisat5.dir/solver.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/solver.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp -o CMakeFiles/libcryptominisat5.dir/solver.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp > CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp -o CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/implcache.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/implcache.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp > CMakeFiles/libcryptominisat5.dir/implcache.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/implcache.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp -o CMakeFiles/libcryptominisat5.dir/implcache.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/stamp.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/stamp.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp > CMakeFiles/libcryptominisat5.dir/stamp.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/stamp.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp -o CMakeFiles/libcryptominisat5.dir/stamp.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/compfinder.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp > CMakeFiles/libcryptominisat5.dir/compfinder.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/compfinder.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp -o CMakeFiles/libcryptominisat5.dir/compfinder.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/comphandler.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp > CMakeFiles/libcryptominisat5.dir/comphandler.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/comphandler.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp -o CMakeFiles/libcryptominisat5.dir/comphandler.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp > CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp -o CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp > CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp -o CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/datasync.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/datasync.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp > CMakeFiles/libcryptominisat5.dir/datasync.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/datasync.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp -o CMakeFiles/libcryptominisat5.dir/datasync.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/reducedb.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp > CMakeFiles/libcryptominisat5.dir/reducedb.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/reducedb.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp -o CMakeFiles/libcryptominisat5.dir/reducedb.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp > CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp -o CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/bva.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/bva.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp > CMakeFiles/libcryptominisat5.dir/bva.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/bva.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp -o CMakeFiles/libcryptominisat5.dir/bva.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/intree.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/intree.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp > CMakeFiles/libcryptominisat5.dir/intree.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/intree.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp -o CMakeFiles/libcryptominisat5.dir/intree.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_31) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/features_calc.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp > CMakeFiles/libcryptominisat5.dir/features_calc.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/features_calc.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp -o CMakeFiles/libcryptominisat5.dir/features_calc.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_32) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp > CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp -o CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_33) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp > CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp -o CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_34) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/searchstats.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp > CMakeFiles/libcryptominisat5.dir/searchstats.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/searchstats.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp -o CMakeFiles/libcryptominisat5.dir/searchstats.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_35) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp > CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp -o CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_36) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp > CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp -o CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o: cmsat5-src/GitSHA1.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_37) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp > CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp -o CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o
+
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_38) "Building CXX object cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.i"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp > CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.i
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.s"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp -o CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.s
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.requires:
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.provides: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.requires
+ $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.provides.build
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.provides
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.provides.build: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
+
+
+# Object files for target libcryptominisat5
+libcryptominisat5_OBJECTS = \
+"CMakeFiles/libcryptominisat5.dir/cnf.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/propengine.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/prober.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/searcher.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/solver.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/implcache.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/stamp.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/datasync.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/bva.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/intree.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o" \
+"CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o"
+
+# External object files for target libcryptominisat5
+libcryptominisat5_EXTERNAL_OBJECTS =
+
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make
+lib/libcryptominisat5.a: cmsat5-src/CMakeFiles/libcryptominisat5.dir/link.txt
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_39) "Linking CXX static library ../lib/libcryptominisat5.a"
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && $(CMAKE_COMMAND) -P CMakeFiles/libcryptominisat5.dir/cmake_clean_target.cmake
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/libcryptominisat5.dir/link.txt --verbose=$(VERBOSE)
+
+# Rule to build all files generated by this target.
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/build: lib/libcryptominisat5.a
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/build
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o.requires
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires: cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o.requires
+
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/requires
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src && $(CMAKE_COMMAND) -P CMakeFiles/libcryptominisat5.dir/cmake_clean.cmake
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/clean
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/DependInfo.cmake --color=$(COLOR)
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o
new file mode 100644
index 000000000..38e22ce27
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o
new file mode 100644
index 000000000..9d9ea9f43
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o
new file mode 100644
index 000000000..25e404fda
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o
new file mode 100644
index 000000000..f3a2b815c
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o
new file mode 100644
index 000000000..d4b6b2a27
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean.cmake
new file mode 100644
index 000000000..962ea65ba
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean.cmake
@@ -0,0 +1,47 @@
+file(REMOVE_RECURSE
+ "CMakeFiles/libcryptominisat5.dir/cnf.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/propengine.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/prober.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/searcher.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/solver.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/implcache.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/stamp.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/datasync.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/bva.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/intree.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o"
+ "CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o"
+ "../lib/libcryptominisat5.pdb"
+ "../lib/libcryptominisat5.a"
+)
+
+# Per-language clean rules from dependency scanning.
+foreach(lang CXX)
+ include(CMakeFiles/libcryptominisat5.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean_target.cmake b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean_target.cmake
new file mode 100644
index 000000000..5699ade7b
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cmake_clean_target.cmake
@@ -0,0 +1,3 @@
+file(REMOVE_RECURSE
+ "../lib/libcryptominisat5.a"
+)
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o
new file mode 100644
index 000000000..0e0e015f3
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o
new file mode 100644
index 000000000..e52299001
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o
new file mode 100644
index 000000000..0bb8e6dc0
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o
new file mode 100644
index 000000000..55fbd71a6
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
new file mode 100644
index 000000000..ba1ef8f14
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o
new file mode 100644
index 000000000..331349f55
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o
new file mode 100644
index 000000000..1203cd28e
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.internal b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.internal
new file mode 100644
index 000000000..741bd3113
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.internal
@@ -0,0 +1,1409 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/cryptominisat.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/cryptominisat.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
+ cmsat5-src/cryptominisat5/cryptominisat.h
+ cmsat5-src/cryptominisat5/cryptominisat_c.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hasher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
+ /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+ cmsat5-src/cryptominisat5/solvertypesmini.h
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.make
new file mode 100644
index 000000000..b2ce8ef91
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/depend.make
@@ -0,0 +1,1409 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o: cmsat5-src/GitSHA1.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: cmsat5-src/cryptominisat5/cryptominisat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: cmsat5-src/cryptominisat5/cryptominisat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: cmsat5-src/cryptominisat5/cryptominisat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: cmsat5-src/cryptominisat5/cryptominisat_c.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hasher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/trim.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/alg.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clause.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/constants.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cset.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/drat.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/heap.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propby.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/watched.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xor.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o: cmsat5-src/cryptominisat5/solvertypesmini.h
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o
new file mode 100644
index 000000000..139ae1e23
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o
new file mode 100644
index 000000000..a3b850054
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o
new file mode 100644
index 000000000..555381207
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o
new file mode 100644
index 000000000..8e7292d73
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
new file mode 100644
index 000000000..ff33dbadd
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/flags.make
@@ -0,0 +1,10 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# compile CXX with /usr/bin/c++
+CXX_FLAGS = -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11
+
+CXX_DEFINES =
+
+CXX_INCLUDES = -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o
new file mode 100644
index 000000000..d40f68423
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o
new file mode 100644
index 000000000..582d327d6
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o
new file mode 100644
index 000000000..9cd04e144
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/link.txt b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/link.txt
new file mode 100644
index 000000000..c3ca4433e
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/link.txt
@@ -0,0 +1,2 @@
+/usr/bin/ar qc ../lib/libcryptominisat5.a CMakeFiles/libcryptominisat5.dir/cnf.cpp.o CMakeFiles/libcryptominisat5.dir/propengine.cpp.o CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o CMakeFiles/libcryptominisat5.dir/prober.cpp.o CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o CMakeFiles/libcryptominisat5.dir/searcher.cpp.o CMakeFiles/libcryptominisat5.dir/solver.cpp.o CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o CMakeFiles/libcryptominisat5.dir/implcache.cpp.o CMakeFiles/libcryptominisat5.dir/stamp.cpp.o CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o CMakeFiles/libcryptominisat5.dir/datasync.cpp.o CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o CMakeFiles/libcryptominisat5.dir/bva.cpp.o CMakeFiles/libcryptominisat5.dir/intree.cpp.o CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
+/usr/bin/ranlib ../lib/libcryptominisat5.a
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o
new file mode 100644
index 000000000..fdaf6029f
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o
new file mode 100644
index 000000000..e83d1fdc1
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/progress.make b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/progress.make
new file mode 100644
index 000000000..08db8bb85
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/progress.make
@@ -0,0 +1,40 @@
+CMAKE_PROGRESS_1 = 3
+CMAKE_PROGRESS_2 = 4
+CMAKE_PROGRESS_3 = 5
+CMAKE_PROGRESS_4 = 6
+CMAKE_PROGRESS_5 = 7
+CMAKE_PROGRESS_6 = 8
+CMAKE_PROGRESS_7 = 9
+CMAKE_PROGRESS_8 = 10
+CMAKE_PROGRESS_9 = 11
+CMAKE_PROGRESS_10 = 12
+CMAKE_PROGRESS_11 = 13
+CMAKE_PROGRESS_12 = 14
+CMAKE_PROGRESS_13 = 15
+CMAKE_PROGRESS_14 = 16
+CMAKE_PROGRESS_15 = 17
+CMAKE_PROGRESS_16 = 18
+CMAKE_PROGRESS_17 = 19
+CMAKE_PROGRESS_18 = 20
+CMAKE_PROGRESS_19 = 21
+CMAKE_PROGRESS_20 = 22
+CMAKE_PROGRESS_21 = 23
+CMAKE_PROGRESS_22 = 24
+CMAKE_PROGRESS_23 = 25
+CMAKE_PROGRESS_24 = 26
+CMAKE_PROGRESS_25 = 27
+CMAKE_PROGRESS_26 = 28
+CMAKE_PROGRESS_27 = 29
+CMAKE_PROGRESS_28 = 30
+CMAKE_PROGRESS_29 = 31
+CMAKE_PROGRESS_30 = 32
+CMAKE_PROGRESS_31 = 33
+CMAKE_PROGRESS_32 = 34
+CMAKE_PROGRESS_33 = 35
+CMAKE_PROGRESS_34 = 36
+CMAKE_PROGRESS_35 = 37
+CMAKE_PROGRESS_36 = 38
+CMAKE_PROGRESS_37 = 39
+CMAKE_PROGRESS_38 = 40
+CMAKE_PROGRESS_39 = 41
+
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o
new file mode 100644
index 000000000..baf826fbb
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o
new file mode 100644
index 000000000..d7ededcaf
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o
new file mode 100644
index 000000000..81677a46f
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o
new file mode 100644
index 000000000..9d88d58e8
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o
new file mode 100644
index 000000000..65e56de5f
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o
new file mode 100644
index 000000000..f96260408
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o
new file mode 100644
index 000000000..f5ab445e6
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o
new file mode 100644
index 000000000..db40ac6c1
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o
new file mode 100644
index 000000000..55d3be7b0
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o
new file mode 100644
index 000000000..f87699bcc
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o
new file mode 100644
index 000000000..e139ee5a4
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o
new file mode 100644
index 000000000..663c92535
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o
new file mode 100644
index 000000000..0a3090dcb
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o
new file mode 100644
index 000000000..7a655b920
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o
new file mode 100644
index 000000000..bbae17b49
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o
new file mode 100644
index 000000000..2d97e6494
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o
Binary files differ
diff --git a/cryptominisat5/build/cmsat5-src/CMakeFiles/progress.marks b/cryptominisat5/build/cmsat5-src/CMakeFiles/progress.marks
new file mode 100644
index 000000000..87523dd7a
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/CMakeFiles/progress.marks
@@ -0,0 +1 @@
+41
diff --git a/cryptominisat5/build/cmsat5-src/GitSHA1.cpp b/cryptominisat5/build/cmsat5-src/GitSHA1.cpp
new file mode 100644
index 000000000..eb6607e4e
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/GitSHA1.cpp
@@ -0,0 +1,64 @@
+/******************************************
+Copyright (c) 2017, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "src/GitSHA1.h"
+
+const char* CMSat::get_version_sha1()
+{
+ static const char myversion_sha1[] = "43e3983647365e36ec616b4ee92a223537bf4616";
+ return myversion_sha1;
+}
+
+const char* CMSat::get_version_tag()
+{
+ static const char myversion_tag[] = "5.6.3";
+ return myversion_tag;
+}
+
+const char* CMSat::get_compilation_env()
+{
+ static const char compilation_env[] =
+ "CMAKE_CXX_COMPILER = /usr/bin/c++ | "
+ "CMAKE_CXX_FLAGS = -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic | "
+ "COMPILE_DEFINES = | "
+ "STATICCOMPILE = ON | "
+ "ONLY_SIMPLE = ON | "
+ "Boost_FOUND = 0 | "
+ "STATS = OFF | "
+ "SQLITE3_FOUND = | "
+ "ZLIB_FOUND = FALSE | "
+ "VALGRIND_FOUND = TRUE | "
+ "ENABLE_TESTING = OFF | "
+ "M4RI_FOUND = | "
+ "SLOW_DEBUG = OFF | "
+ "ENABLE_ASSERTIONS = ON | "
+ "PYTHON_EXECUTABLE = /usr/bin/python2.7 | "
+ "PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython2.7.a | "
+ "PYTHON_INCLUDE_DIRS = /usr/include/python2.7 | "
+ "MY_TARGETS = | "
+ "LARGEMEM = OFF | "
+ "LIMITMEM = OFF | "
+ "compilation date time = " __DATE__ " " __TIME__
+ ""
+ ;
+ return compilation_env;
+}
diff --git a/cryptominisat5/build/cmsat5-src/Makefile b/cryptominisat5/build/cmsat5-src/Makefile
new file mode 100644
index 000000000..91ec54fed
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/Makefile
@@ -0,0 +1,1402 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.10
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target install/strip
+install/strip: preinstall
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+ /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: preinstall/fast
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+ /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+ /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: preinstall/fast
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+ /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local/fast
+
+# Special rule for the target install
+install: preinstall
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+ /usr/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+ /usr/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+ /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+
+.PHONY : rebuild_cache/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+
+.PHONY : list_install_components/fast
+
+# Special rule for the target edit_cache
+edit_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
+ /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+
+.PHONY : edit_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/CMakeFiles/progress.marks
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule
+.PHONY : cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule
+
+# Convenience name for target.
+CopyPublicHeaders: cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/rule
+
+.PHONY : CopyPublicHeaders
+
+# fast build rule for target.
+CopyPublicHeaders/fast:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build.make cmsat5-src/CMakeFiles/CopyPublicHeaders.dir/build
+.PHONY : CopyPublicHeaders/fast
+
+# Convenience name for target.
+cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule
+.PHONY : cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule
+
+# Convenience name for target.
+cryptominisat5_simple: cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/rule
+
+.PHONY : cryptominisat5_simple
+
+# fast build rule for target.
+cryptominisat5_simple/fast:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build
+.PHONY : cryptominisat5_simple/fast
+
+# Convenience name for target.
+cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f CMakeFiles/Makefile2 cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule
+.PHONY : cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule
+
+# Convenience name for target.
+libcryptominisat5: cmsat5-src/CMakeFiles/libcryptominisat5.dir/rule
+
+.PHONY : libcryptominisat5
+
+# fast build rule for target.
+libcryptominisat5/fast:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/build
+.PHONY : libcryptominisat5/fast
+
+GitSHA1.o: GitSHA1.cpp.o
+
+.PHONY : GitSHA1.o
+
+# target to build an object file
+GitSHA1.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o
+.PHONY : GitSHA1.cpp.o
+
+GitSHA1.i: GitSHA1.cpp.i
+
+.PHONY : GitSHA1.i
+
+# target to preprocess a source file
+GitSHA1.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.i
+.PHONY : GitSHA1.cpp.i
+
+GitSHA1.s: GitSHA1.cpp.s
+
+.PHONY : GitSHA1.s
+
+# target to generate assembly for a file
+GitSHA1.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.s
+.PHONY : GitSHA1.cpp.s
+
+bva.o: bva.cpp.o
+
+.PHONY : bva.o
+
+# target to build an object file
+bva.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.o
+.PHONY : bva.cpp.o
+
+bva.i: bva.cpp.i
+
+.PHONY : bva.i
+
+# target to preprocess a source file
+bva.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.i
+.PHONY : bva.cpp.i
+
+bva.s: bva.cpp.s
+
+.PHONY : bva.s
+
+# target to generate assembly for a file
+bva.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/bva.cpp.s
+.PHONY : bva.cpp.s
+
+clauseallocator.o: clauseallocator.cpp.o
+
+.PHONY : clauseallocator.o
+
+# target to build an object file
+clauseallocator.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o
+.PHONY : clauseallocator.cpp.o
+
+clauseallocator.i: clauseallocator.cpp.i
+
+.PHONY : clauseallocator.i
+
+# target to preprocess a source file
+clauseallocator.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.i
+.PHONY : clauseallocator.cpp.i
+
+clauseallocator.s: clauseallocator.cpp.s
+
+.PHONY : clauseallocator.s
+
+# target to generate assembly for a file
+clauseallocator.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.s
+.PHONY : clauseallocator.cpp.s
+
+clausecleaner.o: clausecleaner.cpp.o
+
+.PHONY : clausecleaner.o
+
+# target to build an object file
+clausecleaner.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o
+.PHONY : clausecleaner.cpp.o
+
+clausecleaner.i: clausecleaner.cpp.i
+
+.PHONY : clausecleaner.i
+
+# target to preprocess a source file
+clausecleaner.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.i
+.PHONY : clausecleaner.cpp.i
+
+clausecleaner.s: clausecleaner.cpp.s
+
+.PHONY : clausecleaner.s
+
+# target to generate assembly for a file
+clausecleaner.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.s
+.PHONY : clausecleaner.cpp.s
+
+clausedumper.o: clausedumper.cpp.o
+
+.PHONY : clausedumper.o
+
+# target to build an object file
+clausedumper.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o
+.PHONY : clausedumper.cpp.o
+
+clausedumper.i: clausedumper.cpp.i
+
+.PHONY : clausedumper.i
+
+# target to preprocess a source file
+clausedumper.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.i
+.PHONY : clausedumper.cpp.i
+
+clausedumper.s: clausedumper.cpp.s
+
+.PHONY : clausedumper.s
+
+# target to generate assembly for a file
+clausedumper.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.s
+.PHONY : clausedumper.cpp.s
+
+clauseusagestats.o: clauseusagestats.cpp.o
+
+.PHONY : clauseusagestats.o
+
+# target to build an object file
+clauseusagestats.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o
+.PHONY : clauseusagestats.cpp.o
+
+clauseusagestats.i: clauseusagestats.cpp.i
+
+.PHONY : clauseusagestats.i
+
+# target to preprocess a source file
+clauseusagestats.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.i
+.PHONY : clauseusagestats.cpp.i
+
+clauseusagestats.s: clauseusagestats.cpp.s
+
+.PHONY : clauseusagestats.s
+
+# target to generate assembly for a file
+clauseusagestats.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.s
+.PHONY : clauseusagestats.cpp.s
+
+cnf.o: cnf.cpp.o
+
+.PHONY : cnf.o
+
+# target to build an object file
+cnf.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.o
+.PHONY : cnf.cpp.o
+
+cnf.i: cnf.cpp.i
+
+.PHONY : cnf.i
+
+# target to preprocess a source file
+cnf.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.i
+.PHONY : cnf.cpp.i
+
+cnf.s: cnf.cpp.s
+
+.PHONY : cnf.s
+
+# target to generate assembly for a file
+cnf.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cnf.cpp.s
+.PHONY : cnf.cpp.s
+
+compfinder.o: compfinder.cpp.o
+
+.PHONY : compfinder.o
+
+# target to build an object file
+compfinder.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o
+.PHONY : compfinder.cpp.o
+
+compfinder.i: compfinder.cpp.i
+
+.PHONY : compfinder.i
+
+# target to preprocess a source file
+compfinder.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.i
+.PHONY : compfinder.cpp.i
+
+compfinder.s: compfinder.cpp.s
+
+.PHONY : compfinder.s
+
+# target to generate assembly for a file
+compfinder.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/compfinder.cpp.s
+.PHONY : compfinder.cpp.s
+
+comphandler.o: comphandler.cpp.o
+
+.PHONY : comphandler.o
+
+# target to build an object file
+comphandler.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o
+.PHONY : comphandler.cpp.o
+
+comphandler.i: comphandler.cpp.i
+
+.PHONY : comphandler.i
+
+# target to preprocess a source file
+comphandler.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.i
+.PHONY : comphandler.cpp.i
+
+comphandler.s: comphandler.cpp.s
+
+.PHONY : comphandler.s
+
+# target to generate assembly for a file
+comphandler.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/comphandler.cpp.s
+.PHONY : comphandler.cpp.s
+
+completedetachreattacher.o: completedetachreattacher.cpp.o
+
+.PHONY : completedetachreattacher.o
+
+# target to build an object file
+completedetachreattacher.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o
+.PHONY : completedetachreattacher.cpp.o
+
+completedetachreattacher.i: completedetachreattacher.cpp.i
+
+.PHONY : completedetachreattacher.i
+
+# target to preprocess a source file
+completedetachreattacher.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.i
+.PHONY : completedetachreattacher.cpp.i
+
+completedetachreattacher.s: completedetachreattacher.cpp.s
+
+.PHONY : completedetachreattacher.s
+
+# target to generate assembly for a file
+completedetachreattacher.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.s
+.PHONY : completedetachreattacher.cpp.s
+
+cryptominisat.o: cryptominisat.cpp.o
+
+.PHONY : cryptominisat.o
+
+# target to build an object file
+cryptominisat.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o
+.PHONY : cryptominisat.cpp.o
+
+cryptominisat.i: cryptominisat.cpp.i
+
+.PHONY : cryptominisat.i
+
+# target to preprocess a source file
+cryptominisat.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.i
+.PHONY : cryptominisat.cpp.i
+
+cryptominisat.s: cryptominisat.cpp.s
+
+.PHONY : cryptominisat.s
+
+# target to generate assembly for a file
+cryptominisat.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.s
+.PHONY : cryptominisat.cpp.s
+
+cryptominisat_c.o: cryptominisat_c.cpp.o
+
+.PHONY : cryptominisat_c.o
+
+# target to build an object file
+cryptominisat_c.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o
+.PHONY : cryptominisat_c.cpp.o
+
+cryptominisat_c.i: cryptominisat_c.cpp.i
+
+.PHONY : cryptominisat_c.i
+
+# target to preprocess a source file
+cryptominisat_c.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.i
+.PHONY : cryptominisat_c.cpp.i
+
+cryptominisat_c.s: cryptominisat_c.cpp.s
+
+.PHONY : cryptominisat_c.s
+
+# target to generate assembly for a file
+cryptominisat_c.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.s
+.PHONY : cryptominisat_c.cpp.s
+
+datasync.o: datasync.cpp.o
+
+.PHONY : datasync.o
+
+# target to build an object file
+datasync.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.o
+.PHONY : datasync.cpp.o
+
+datasync.i: datasync.cpp.i
+
+.PHONY : datasync.i
+
+# target to preprocess a source file
+datasync.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.i
+.PHONY : datasync.cpp.i
+
+datasync.s: datasync.cpp.s
+
+.PHONY : datasync.s
+
+# target to generate assembly for a file
+datasync.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/datasync.cpp.s
+.PHONY : datasync.cpp.s
+
+distillerlong.o: distillerlong.cpp.o
+
+.PHONY : distillerlong.o
+
+# target to build an object file
+distillerlong.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o
+.PHONY : distillerlong.cpp.o
+
+distillerlong.i: distillerlong.cpp.i
+
+.PHONY : distillerlong.i
+
+# target to preprocess a source file
+distillerlong.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.i
+.PHONY : distillerlong.cpp.i
+
+distillerlong.s: distillerlong.cpp.s
+
+.PHONY : distillerlong.s
+
+# target to generate assembly for a file
+distillerlong.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.s
+.PHONY : distillerlong.cpp.s
+
+distillerlongwithimpl.o: distillerlongwithimpl.cpp.o
+
+.PHONY : distillerlongwithimpl.o
+
+# target to build an object file
+distillerlongwithimpl.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o
+.PHONY : distillerlongwithimpl.cpp.o
+
+distillerlongwithimpl.i: distillerlongwithimpl.cpp.i
+
+.PHONY : distillerlongwithimpl.i
+
+# target to preprocess a source file
+distillerlongwithimpl.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.i
+.PHONY : distillerlongwithimpl.cpp.i
+
+distillerlongwithimpl.s: distillerlongwithimpl.cpp.s
+
+.PHONY : distillerlongwithimpl.s
+
+# target to generate assembly for a file
+distillerlongwithimpl.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.s
+.PHONY : distillerlongwithimpl.cpp.s
+
+features_calc.o: features_calc.cpp.o
+
+.PHONY : features_calc.o
+
+# target to build an object file
+features_calc.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o
+.PHONY : features_calc.cpp.o
+
+features_calc.i: features_calc.cpp.i
+
+.PHONY : features_calc.i
+
+# target to preprocess a source file
+features_calc.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.i
+.PHONY : features_calc.cpp.i
+
+features_calc.s: features_calc.cpp.s
+
+.PHONY : features_calc.s
+
+# target to generate assembly for a file
+features_calc.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_calc.cpp.s
+.PHONY : features_calc.cpp.s
+
+features_to_reconf.o: features_to_reconf.cpp.o
+
+.PHONY : features_to_reconf.o
+
+# target to build an object file
+features_to_reconf.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o
+.PHONY : features_to_reconf.cpp.o
+
+features_to_reconf.i: features_to_reconf.cpp.i
+
+.PHONY : features_to_reconf.i
+
+# target to preprocess a source file
+features_to_reconf.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.i
+.PHONY : features_to_reconf.cpp.i
+
+features_to_reconf.s: features_to_reconf.cpp.s
+
+.PHONY : features_to_reconf.s
+
+# target to generate assembly for a file
+features_to_reconf.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.s
+.PHONY : features_to_reconf.cpp.s
+
+hyperengine.o: hyperengine.cpp.o
+
+.PHONY : hyperengine.o
+
+# target to build an object file
+hyperengine.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o
+.PHONY : hyperengine.cpp.o
+
+hyperengine.i: hyperengine.cpp.i
+
+.PHONY : hyperengine.i
+
+# target to preprocess a source file
+hyperengine.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.i
+.PHONY : hyperengine.cpp.i
+
+hyperengine.s: hyperengine.cpp.s
+
+.PHONY : hyperengine.s
+
+# target to generate assembly for a file
+hyperengine.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.s
+.PHONY : hyperengine.cpp.s
+
+implcache.o: implcache.cpp.o
+
+.PHONY : implcache.o
+
+# target to build an object file
+implcache.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.o
+.PHONY : implcache.cpp.o
+
+implcache.i: implcache.cpp.i
+
+.PHONY : implcache.i
+
+# target to preprocess a source file
+implcache.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.i
+.PHONY : implcache.cpp.i
+
+implcache.s: implcache.cpp.s
+
+.PHONY : implcache.s
+
+# target to generate assembly for a file
+implcache.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/implcache.cpp.s
+.PHONY : implcache.cpp.s
+
+intree.o: intree.cpp.o
+
+.PHONY : intree.o
+
+# target to build an object file
+intree.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.o
+.PHONY : intree.cpp.o
+
+intree.i: intree.cpp.i
+
+.PHONY : intree.i
+
+# target to preprocess a source file
+intree.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.i
+.PHONY : intree.cpp.i
+
+intree.s: intree.cpp.s
+
+.PHONY : intree.s
+
+# target to generate assembly for a file
+intree.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/intree.cpp.s
+.PHONY : intree.cpp.s
+
+main_simple.o: main_simple.cpp.o
+
+.PHONY : main_simple.o
+
+# target to build an object file
+main_simple.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o
+.PHONY : main_simple.cpp.o
+
+main_simple.i: main_simple.cpp.i
+
+.PHONY : main_simple.i
+
+# target to preprocess a source file
+main_simple.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.i
+.PHONY : main_simple.cpp.i
+
+main_simple.s: main_simple.cpp.s
+
+.PHONY : main_simple.s
+
+# target to generate assembly for a file
+main_simple.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/build.make cmsat5-src/CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.s
+.PHONY : main_simple.cpp.s
+
+occsimplifier.o: occsimplifier.cpp.o
+
+.PHONY : occsimplifier.o
+
+# target to build an object file
+occsimplifier.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o
+.PHONY : occsimplifier.cpp.o
+
+occsimplifier.i: occsimplifier.cpp.i
+
+.PHONY : occsimplifier.i
+
+# target to preprocess a source file
+occsimplifier.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.i
+.PHONY : occsimplifier.cpp.i
+
+occsimplifier.s: occsimplifier.cpp.s
+
+.PHONY : occsimplifier.s
+
+# target to generate assembly for a file
+occsimplifier.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.s
+.PHONY : occsimplifier.cpp.s
+
+prober.o: prober.cpp.o
+
+.PHONY : prober.o
+
+# target to build an object file
+prober.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.o
+.PHONY : prober.cpp.o
+
+prober.i: prober.cpp.i
+
+.PHONY : prober.i
+
+# target to preprocess a source file
+prober.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.i
+.PHONY : prober.cpp.i
+
+prober.s: prober.cpp.s
+
+.PHONY : prober.s
+
+# target to generate assembly for a file
+prober.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/prober.cpp.s
+.PHONY : prober.cpp.s
+
+propengine.o: propengine.cpp.o
+
+.PHONY : propengine.o
+
+# target to build an object file
+propengine.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.o
+.PHONY : propengine.cpp.o
+
+propengine.i: propengine.cpp.i
+
+.PHONY : propengine.i
+
+# target to preprocess a source file
+propengine.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.i
+.PHONY : propengine.cpp.i
+
+propengine.s: propengine.cpp.s
+
+.PHONY : propengine.s
+
+# target to generate assembly for a file
+propengine.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/propengine.cpp.s
+.PHONY : propengine.cpp.s
+
+reducedb.o: reducedb.cpp.o
+
+.PHONY : reducedb.o
+
+# target to build an object file
+reducedb.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o
+.PHONY : reducedb.cpp.o
+
+reducedb.i: reducedb.cpp.i
+
+.PHONY : reducedb.i
+
+# target to preprocess a source file
+reducedb.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.i
+.PHONY : reducedb.cpp.i
+
+reducedb.s: reducedb.cpp.s
+
+.PHONY : reducedb.s
+
+# target to generate assembly for a file
+reducedb.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/reducedb.cpp.s
+.PHONY : reducedb.cpp.s
+
+sccfinder.o: sccfinder.cpp.o
+
+.PHONY : sccfinder.o
+
+# target to build an object file
+sccfinder.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o
+.PHONY : sccfinder.cpp.o
+
+sccfinder.i: sccfinder.cpp.i
+
+.PHONY : sccfinder.i
+
+# target to preprocess a source file
+sccfinder.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.i
+.PHONY : sccfinder.cpp.i
+
+sccfinder.s: sccfinder.cpp.s
+
+.PHONY : sccfinder.s
+
+# target to generate assembly for a file
+sccfinder.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.s
+.PHONY : sccfinder.cpp.s
+
+searcher.o: searcher.cpp.o
+
+.PHONY : searcher.o
+
+# target to build an object file
+searcher.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.o
+.PHONY : searcher.cpp.o
+
+searcher.i: searcher.cpp.i
+
+.PHONY : searcher.i
+
+# target to preprocess a source file
+searcher.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.i
+.PHONY : searcher.cpp.i
+
+searcher.s: searcher.cpp.s
+
+.PHONY : searcher.s
+
+# target to generate assembly for a file
+searcher.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searcher.cpp.s
+.PHONY : searcher.cpp.s
+
+searchstats.o: searchstats.cpp.o
+
+.PHONY : searchstats.o
+
+# target to build an object file
+searchstats.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o
+.PHONY : searchstats.cpp.o
+
+searchstats.i: searchstats.cpp.i
+
+.PHONY : searchstats.i
+
+# target to preprocess a source file
+searchstats.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.i
+.PHONY : searchstats.cpp.i
+
+searchstats.s: searchstats.cpp.s
+
+.PHONY : searchstats.s
+
+# target to generate assembly for a file
+searchstats.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/searchstats.cpp.s
+.PHONY : searchstats.cpp.s
+
+solutionextender.o: solutionextender.cpp.o
+
+.PHONY : solutionextender.o
+
+# target to build an object file
+solutionextender.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o
+.PHONY : solutionextender.cpp.o
+
+solutionextender.i: solutionextender.cpp.i
+
+.PHONY : solutionextender.i
+
+# target to preprocess a source file
+solutionextender.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.i
+.PHONY : solutionextender.cpp.i
+
+solutionextender.s: solutionextender.cpp.s
+
+.PHONY : solutionextender.s
+
+# target to generate assembly for a file
+solutionextender.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.s
+.PHONY : solutionextender.cpp.s
+
+solvefeatures.o: solvefeatures.cpp.o
+
+.PHONY : solvefeatures.o
+
+# target to build an object file
+solvefeatures.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o
+.PHONY : solvefeatures.cpp.o
+
+solvefeatures.i: solvefeatures.cpp.i
+
+.PHONY : solvefeatures.i
+
+# target to preprocess a source file
+solvefeatures.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.i
+.PHONY : solvefeatures.cpp.i
+
+solvefeatures.s: solvefeatures.cpp.s
+
+.PHONY : solvefeatures.s
+
+# target to generate assembly for a file
+solvefeatures.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.s
+.PHONY : solvefeatures.cpp.s
+
+solver.o: solver.cpp.o
+
+.PHONY : solver.o
+
+# target to build an object file
+solver.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.o
+.PHONY : solver.cpp.o
+
+solver.i: solver.cpp.i
+
+.PHONY : solver.i
+
+# target to preprocess a source file
+solver.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.i
+.PHONY : solver.cpp.i
+
+solver.s: solver.cpp.s
+
+.PHONY : solver.s
+
+# target to generate assembly for a file
+solver.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solver.cpp.s
+.PHONY : solver.cpp.s
+
+solverconf.o: solverconf.cpp.o
+
+.PHONY : solverconf.o
+
+# target to build an object file
+solverconf.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o
+.PHONY : solverconf.cpp.o
+
+solverconf.i: solverconf.cpp.i
+
+.PHONY : solverconf.i
+
+# target to preprocess a source file
+solverconf.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.i
+.PHONY : solverconf.cpp.i
+
+solverconf.s: solverconf.cpp.s
+
+.PHONY : solverconf.s
+
+# target to generate assembly for a file
+solverconf.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/solverconf.cpp.s
+.PHONY : solverconf.cpp.s
+
+sqlstats.o: sqlstats.cpp.o
+
+.PHONY : sqlstats.o
+
+# target to build an object file
+sqlstats.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o
+.PHONY : sqlstats.cpp.o
+
+sqlstats.i: sqlstats.cpp.i
+
+.PHONY : sqlstats.i
+
+# target to preprocess a source file
+sqlstats.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.i
+.PHONY : sqlstats.cpp.i
+
+sqlstats.s: sqlstats.cpp.s
+
+.PHONY : sqlstats.s
+
+# target to generate assembly for a file
+sqlstats.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.s
+.PHONY : sqlstats.cpp.s
+
+stamp.o: stamp.cpp.o
+
+.PHONY : stamp.o
+
+# target to build an object file
+stamp.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.o
+.PHONY : stamp.cpp.o
+
+stamp.i: stamp.cpp.i
+
+.PHONY : stamp.i
+
+# target to preprocess a source file
+stamp.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.i
+.PHONY : stamp.cpp.i
+
+stamp.s: stamp.cpp.s
+
+.PHONY : stamp.s
+
+# target to generate assembly for a file
+stamp.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/stamp.cpp.s
+.PHONY : stamp.cpp.s
+
+str_impl_w_impl_stamp.o: str_impl_w_impl_stamp.cpp.o
+
+.PHONY : str_impl_w_impl_stamp.o
+
+# target to build an object file
+str_impl_w_impl_stamp.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o
+.PHONY : str_impl_w_impl_stamp.cpp.o
+
+str_impl_w_impl_stamp.i: str_impl_w_impl_stamp.cpp.i
+
+.PHONY : str_impl_w_impl_stamp.i
+
+# target to preprocess a source file
+str_impl_w_impl_stamp.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.i
+.PHONY : str_impl_w_impl_stamp.cpp.i
+
+str_impl_w_impl_stamp.s: str_impl_w_impl_stamp.cpp.s
+
+.PHONY : str_impl_w_impl_stamp.s
+
+# target to generate assembly for a file
+str_impl_w_impl_stamp.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.s
+.PHONY : str_impl_w_impl_stamp.cpp.s
+
+subsumeimplicit.o: subsumeimplicit.cpp.o
+
+.PHONY : subsumeimplicit.o
+
+# target to build an object file
+subsumeimplicit.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o
+.PHONY : subsumeimplicit.cpp.o
+
+subsumeimplicit.i: subsumeimplicit.cpp.i
+
+.PHONY : subsumeimplicit.i
+
+# target to preprocess a source file
+subsumeimplicit.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.i
+.PHONY : subsumeimplicit.cpp.i
+
+subsumeimplicit.s: subsumeimplicit.cpp.s
+
+.PHONY : subsumeimplicit.s
+
+# target to generate assembly for a file
+subsumeimplicit.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.s
+.PHONY : subsumeimplicit.cpp.s
+
+subsumestrengthen.o: subsumestrengthen.cpp.o
+
+.PHONY : subsumestrengthen.o
+
+# target to build an object file
+subsumestrengthen.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o
+.PHONY : subsumestrengthen.cpp.o
+
+subsumestrengthen.i: subsumestrengthen.cpp.i
+
+.PHONY : subsumestrengthen.i
+
+# target to preprocess a source file
+subsumestrengthen.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.i
+.PHONY : subsumestrengthen.cpp.i
+
+subsumestrengthen.s: subsumestrengthen.cpp.s
+
+.PHONY : subsumestrengthen.s
+
+# target to generate assembly for a file
+subsumestrengthen.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.s
+.PHONY : subsumestrengthen.cpp.s
+
+varreplacer.o: varreplacer.cpp.o
+
+.PHONY : varreplacer.o
+
+# target to build an object file
+varreplacer.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o
+.PHONY : varreplacer.cpp.o
+
+varreplacer.i: varreplacer.cpp.i
+
+.PHONY : varreplacer.i
+
+# target to preprocess a source file
+varreplacer.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.i
+.PHONY : varreplacer.cpp.i
+
+varreplacer.s: varreplacer.cpp.s
+
+.PHONY : varreplacer.s
+
+# target to generate assembly for a file
+varreplacer.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.s
+.PHONY : varreplacer.cpp.s
+
+xorfinder.o: xorfinder.cpp.o
+
+.PHONY : xorfinder.o
+
+# target to build an object file
+xorfinder.cpp.o:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o
+.PHONY : xorfinder.cpp.o
+
+xorfinder.i: xorfinder.cpp.i
+
+.PHONY : xorfinder.i
+
+# target to preprocess a source file
+xorfinder.cpp.i:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.i
+.PHONY : xorfinder.cpp.i
+
+xorfinder.s: xorfinder.cpp.s
+
+.PHONY : xorfinder.s
+
+# target to generate assembly for a file
+xorfinder.cpp.s:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(MAKE) -f cmsat5-src/CMakeFiles/libcryptominisat5.dir/build.make cmsat5-src/CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.s
+.PHONY : xorfinder.cpp.s
+
+# Help Target
+help:
+ @echo "The following are some of the valid targets for this Makefile:"
+ @echo "... all (the default if no target is provided)"
+ @echo "... clean"
+ @echo "... depend"
+ @echo "... install/strip"
+ @echo "... install/local"
+ @echo "... install"
+ @echo "... CopyPublicHeaders"
+ @echo "... cryptominisat5_simple"
+ @echo "... rebuild_cache"
+ @echo "... libcryptominisat5"
+ @echo "... list_install_components"
+ @echo "... edit_cache"
+ @echo "... GitSHA1.o"
+ @echo "... GitSHA1.i"
+ @echo "... GitSHA1.s"
+ @echo "... bva.o"
+ @echo "... bva.i"
+ @echo "... bva.s"
+ @echo "... clauseallocator.o"
+ @echo "... clauseallocator.i"
+ @echo "... clauseallocator.s"
+ @echo "... clausecleaner.o"
+ @echo "... clausecleaner.i"
+ @echo "... clausecleaner.s"
+ @echo "... clausedumper.o"
+ @echo "... clausedumper.i"
+ @echo "... clausedumper.s"
+ @echo "... clauseusagestats.o"
+ @echo "... clauseusagestats.i"
+ @echo "... clauseusagestats.s"
+ @echo "... cnf.o"
+ @echo "... cnf.i"
+ @echo "... cnf.s"
+ @echo "... compfinder.o"
+ @echo "... compfinder.i"
+ @echo "... compfinder.s"
+ @echo "... comphandler.o"
+ @echo "... comphandler.i"
+ @echo "... comphandler.s"
+ @echo "... completedetachreattacher.o"
+ @echo "... completedetachreattacher.i"
+ @echo "... completedetachreattacher.s"
+ @echo "... cryptominisat.o"
+ @echo "... cryptominisat.i"
+ @echo "... cryptominisat.s"
+ @echo "... cryptominisat_c.o"
+ @echo "... cryptominisat_c.i"
+ @echo "... cryptominisat_c.s"
+ @echo "... datasync.o"
+ @echo "... datasync.i"
+ @echo "... datasync.s"
+ @echo "... distillerlong.o"
+ @echo "... distillerlong.i"
+ @echo "... distillerlong.s"
+ @echo "... distillerlongwithimpl.o"
+ @echo "... distillerlongwithimpl.i"
+ @echo "... distillerlongwithimpl.s"
+ @echo "... features_calc.o"
+ @echo "... features_calc.i"
+ @echo "... features_calc.s"
+ @echo "... features_to_reconf.o"
+ @echo "... features_to_reconf.i"
+ @echo "... features_to_reconf.s"
+ @echo "... hyperengine.o"
+ @echo "... hyperengine.i"
+ @echo "... hyperengine.s"
+ @echo "... implcache.o"
+ @echo "... implcache.i"
+ @echo "... implcache.s"
+ @echo "... intree.o"
+ @echo "... intree.i"
+ @echo "... intree.s"
+ @echo "... main_simple.o"
+ @echo "... main_simple.i"
+ @echo "... main_simple.s"
+ @echo "... occsimplifier.o"
+ @echo "... occsimplifier.i"
+ @echo "... occsimplifier.s"
+ @echo "... prober.o"
+ @echo "... prober.i"
+ @echo "... prober.s"
+ @echo "... propengine.o"
+ @echo "... propengine.i"
+ @echo "... propengine.s"
+ @echo "... reducedb.o"
+ @echo "... reducedb.i"
+ @echo "... reducedb.s"
+ @echo "... sccfinder.o"
+ @echo "... sccfinder.i"
+ @echo "... sccfinder.s"
+ @echo "... searcher.o"
+ @echo "... searcher.i"
+ @echo "... searcher.s"
+ @echo "... searchstats.o"
+ @echo "... searchstats.i"
+ @echo "... searchstats.s"
+ @echo "... solutionextender.o"
+ @echo "... solutionextender.i"
+ @echo "... solutionextender.s"
+ @echo "... solvefeatures.o"
+ @echo "... solvefeatures.i"
+ @echo "... solvefeatures.s"
+ @echo "... solver.o"
+ @echo "... solver.i"
+ @echo "... solver.s"
+ @echo "... solverconf.o"
+ @echo "... solverconf.i"
+ @echo "... solverconf.s"
+ @echo "... sqlstats.o"
+ @echo "... sqlstats.i"
+ @echo "... sqlstats.s"
+ @echo "... stamp.o"
+ @echo "... stamp.i"
+ @echo "... stamp.s"
+ @echo "... str_impl_w_impl_stamp.o"
+ @echo "... str_impl_w_impl_stamp.i"
+ @echo "... str_impl_w_impl_stamp.s"
+ @echo "... subsumeimplicit.o"
+ @echo "... subsumeimplicit.i"
+ @echo "... subsumeimplicit.s"
+ @echo "... subsumestrengthen.o"
+ @echo "... subsumestrengthen.i"
+ @echo "... subsumestrengthen.s"
+ @echo "... varreplacer.o"
+ @echo "... varreplacer.i"
+ @echo "... varreplacer.s"
+ @echo "... xorfinder.o"
+ @echo "... xorfinder.i"
+ @echo "... xorfinder.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+ cd /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/cryptominisat5/build/cmsat5-src/cmake_install.cmake b/cryptominisat5/build/cmsat5-src/cmake_install.cmake
new file mode 100644
index 000000000..f2cc19a01
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/cmake_install.cmake
@@ -0,0 +1,69 @@
+# Install script for directory: /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+ set(CMAKE_INSTALL_PREFIX "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+ if(BUILD_TYPE)
+ string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+ CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+ else()
+ set(CMAKE_INSTALL_CONFIG_NAME "RelWithDebInfo")
+ endif()
+ message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+ if(COMPONENT)
+ message(STATUS "Install component: \"${COMPONENT}\"")
+ set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+ else()
+ set(CMAKE_INSTALL_COMPONENT)
+ endif()
+endif()
+
+# Install shared libraries without execute permission?
+if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+ set(CMAKE_INSTALL_SO_NO_EXE "1")
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+ set(CMAKE_CROSSCOMPILING "FALSE")
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT)
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/lib/libcryptominisat5.a")
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT)
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/cryptominisat5" TYPE FILE FILES
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat_c.h"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat.h"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/cryptominisat5/solvertypesmini.h"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h"
+ "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h"
+ )
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT)
+ if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/cryptominisat5_simple" AND
+ NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/cryptominisat5_simple")
+ file(RPATH_CHECK
+ FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/cryptominisat5_simple"
+ RPATH "")
+ endif()
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cryptominisat5_simple")
+ if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/cryptominisat5_simple" AND
+ NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/cryptominisat5_simple")
+ if(CMAKE_INSTALL_DO_STRIP)
+ execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/cryptominisat5_simple")
+ endif()
+ endif()
+endif()
+
diff --git a/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat.h b/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat.h
new file mode 100644
index 000000000..fbaaacc2f
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat.h
@@ -0,0 +1,168 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CRYPTOMINISAT5_H__
+#define __CRYPTOMINISAT5_H__
+
+#define CRYPTOMINISAT_VERSION_MAJOR 5
+#define CRYPTOMINISAT_VERSION_MINOR 6
+#define CRYPTOMINISAT_VERSION_PATCH 3
+
+#include <atomic>
+#include <vector>
+#include <iostream>
+#include <utility>
+#include "cryptominisat5/solvertypesmini.h"
+
+namespace CMSat {
+ struct CMSatPrivateData;
+ #ifdef _WIN32
+ class __declspec(dllexport) SATSolver
+ #else
+ class SATSolver
+ #endif
+ {
+ public:
+ SATSolver(void* config = NULL
+ , std::atomic<bool>* interrupt_asap = NULL
+ );
+ ~SATSolver();
+
+ ////////////////////////////
+ // Adding variables and clauses
+ ////////////////////////////
+
+ void new_var(); //add a new variable to the solver
+ void new_vars(const size_t n); //and many new variables to the solver -- much faster
+ unsigned nVars() const; //get number of variables inside the solver
+ bool add_clause(const std::vector<Lit>& lits);
+ bool add_xor_clause(const std::vector<unsigned>& vars, bool rhs);
+
+ ////////////////////////////
+ // Solving and simplifying
+ ////////////////////////////
+
+ lbool solve(const std::vector<Lit>* assumptions = 0, bool only_indep_solution = false); //solve the problem, optionally with assumptions. If only_indep_solution is set, only the independent variables set with set_independent_vars() are returned in the solution
+ lbool simplify(const std::vector<Lit>* assumptions = 0); //simplify the problem, optionally with assumptions
+ const std::vector<lbool>& get_model() const; //get model that satisfies the problem. Only makes sense if previous solve()/simplify() call was l_True
+ const std::vector<Lit>& get_conflict() const; //get conflict in terms of the assumptions given in case the previous call to solve() was l_False
+ bool okay() const; //the problem is still solveable, i.e. the empty clause hasn't been derived
+
+ ////////////////////////////
+ // Debug all calls for later replay with --debuglit FILENAME
+ ////////////////////////////
+ void log_to_file(std::string filename);
+
+ ////////////////////////////
+ // SQLite for statistics gathering
+ ////////////////////////////
+ void set_sqlite(std::string filename);
+ void add_sql_tag(const std::string& tagname, const std::string& tag);
+ unsigned long get_sql_id() const;
+
+ ////////////////////////////
+ // Configuration
+ // -- Note that nothing else can be changed, only these.
+ // -- The main.cpp has access to the internal config, but it changes
+ // -- all the time and hence exposing it to the outside world would
+ // -- be very brittle.
+ ////////////////////////////
+
+ void set_num_threads(unsigned n); //Number of threads to use. Must be set before any vars/clauses are added
+ void set_allow_otf_gauss(); //allow on-the-fly gaussian elimination
+ void set_max_time(double max_time); //max time to run to on next solve() call
+ void set_max_confl(int64_t max_confl); //max conflict to run to on next solve() call
+ void set_verbosity(unsigned verbosity = 0); //default is 0, silent
+ void set_default_polarity(bool polarity); //default polarity when branching for all vars
+ void set_no_simplify(); //never simplify
+ void set_no_simplify_at_startup(); //doesn't simplify at start, faster startup time
+ void set_no_equivalent_lit_replacement(); //don't replace equivalent literals
+ void set_no_bva(); //No bounded variable addition
+ void set_no_bve(); //No bounded variable elimination
+ void set_greedy_undef(); //Try to set variables to l_Undef in solution
+ void set_independent_vars(std::vector<uint32_t>* ind_vars);
+ void set_timeout_all_calls(double secs); //max timeout on all subsequent solve() or simplify
+
+
+ ////////////////////////////
+ // Get generic info
+ ////////////////////////////
+ static const char* get_version(); //get solver version in string format
+ static const char* get_version_sha1(); //get SHA1 version string of the solver
+ static const char* get_compilation_env(); //get compilation environment string
+
+
+ ////////////////////////////
+ // Get info about only the last solve() OR simplify() call
+ // summed for all threads
+ ////////////////////////////
+ uint64_t get_last_conflicts(); //get total number of conflicts of last solve() or simplify() call of all threads
+ uint64_t get_last_propagations(); //get total number of propagations of last solve() or simplify() call made by all threads
+ uint64_t get_last_decisions(); //get total number of decisions of last solve() or simplify() call made by all threads
+
+
+ ////////////////////////////
+ //Get info about total sum of all time of all threads
+ ////////////////////////////
+
+ uint64_t get_sum_conflicts(); //get total number of conflicts of all time of all threads
+ uint64_t get_sum_propagations(); //get total number of propagations of all time made by all threads
+ uint64_t get_sum_decisions(); //get total number of decisions of all time made by all threads
+
+ void print_stats() const; //print solving stats. Call after solve()/simplify()
+ void set_drat(std::ostream* os, bool set_ID); //set drat to ostream, e.g. stdout or a file
+ void interrupt_asap(); //call this asynchronously, and the solver will try to cleanly abort asap
+ void open_file_and_dump_irred_clauses(std::string fname) const; //dump irredundant clauses to this file when solving finishes
+ void open_file_and_dump_red_clauses(std::string fname) const; //dump redundant ("learnt") clauses to this file when solving finishes
+ void add_in_partial_solving_stats(); //used only by Ctrl+C handler. Ignore.
+
+ ////////////////////////////
+ // Extract useful information from the solver
+ // This can be used in the theory solver
+
+ ////////////////////////////
+ std::vector<Lit> get_zero_assigned_lits() const; //get literals of fixed value
+ std::vector<std::pair<Lit, Lit> > get_all_binary_xors() const; //get all binary XORs that are = 0
+
+ //////////////////////
+ // EXPERIMENTAL
+ std::vector<std::pair<std::vector<uint32_t>, bool> > get_recovered_xors(bool elongate) const; //get XORs recovered. If "elongate" is TRUE, then variables shared ONLY by two XORs will be XORed together
+
+ //////////////////////
+ //Below must be done in-order. Multi-threading not allowed.
+ // EXPERIMENTAL!!!
+
+ void start_getting_small_clauses(uint32_t max_len, uint32_t max_glue);
+ bool get_next_small_clause(std::vector<Lit>& ret); //returns FALSE if no more
+ void end_getting_small_clauses();
+
+ private:
+
+ ////////////////////////////
+ // Do not bother with this, it's private
+ ////////////////////////////
+
+ CMSatPrivateData *data;
+ };
+}
+
+#endif //__CRYPTOMINISAT5_H__
diff --git a/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat_c.h b/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat_c.h
new file mode 100644
index 000000000..51922e78f
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/cryptominisat5/cryptominisat_c.h
@@ -0,0 +1,75 @@
+/******************************************
+Copyright (c) 2016, @Storyyeller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#pragma once
+#include <stddef.h>
+#include <stdint.h>
+
+typedef struct c_Lit { uint32_t x; } c_Lit;
+typedef struct c_lbool { uint8_t x; } c_lbool;
+typedef struct slice_Lit { const c_Lit* vals; size_t num_vals; } slice_Lit;
+typedef struct slice_lbool { const c_lbool* vals; size_t num_vals; } slice_lbool;
+
+#ifdef __cplusplus
+ #define NOEXCEPT noexcept
+
+ namespace CMSat{ struct SATSolver; }
+ using CMSat::SATSolver;
+
+ extern "C" {
+#else
+ // c stuff
+ #include <stdbool.h>
+ #define NOEXCEPT
+
+ #define L_TRUE (0u)
+ #define L_FALSE (1u)
+ #define L_UNDEF (2u)
+
+ // forward declaration
+ typedef struct SATSolver SATSolver;
+#endif
+
+#if defined _WIN32
+ #define CMS_DLL_PUBLIC __declspec(dllexport)
+#else
+ #define CMS_DLL_PUBLIC __attribute__ ((visibility ("default")))
+#endif
+
+CMS_DLL_PUBLIC SATSolver* cmsat_new(void) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_free(SATSolver* s) NOEXCEPT;
+
+CMS_DLL_PUBLIC unsigned cmsat_nvars(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_clause(SATSolver* self, const c_Lit* lits, size_t num_lits) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_xor_clause(SATSolver* self, const unsigned* vars, size_t num_vars, bool rhs) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_new_vars(SATSolver* self, const size_t n) NOEXCEPT;
+
+CMS_DLL_PUBLIC c_lbool cmsat_solve(SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC c_lbool cmsat_solve_with_assumptions(SATSolver* self, const c_Lit* assumptions, size_t num_assumptions) NOEXCEPT;
+CMS_DLL_PUBLIC slice_lbool cmsat_get_model(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC slice_Lit cmsat_get_conflict(const SATSolver* self) NOEXCEPT;
+
+CMS_DLL_PUBLIC void cmsat_set_num_threads(SATSolver* self, unsigned n) NOEXCEPT;
+
+#ifdef __cplusplus
+} // end extern c
+#endif
diff --git a/cryptominisat5/build/cmsat5-src/cryptominisat5/solvertypesmini.h b/cryptominisat5/build/cmsat5-src/cryptominisat5/solvertypesmini.h
new file mode 100644
index 000000000..571cb3510
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/cryptominisat5/solvertypesmini.h
@@ -0,0 +1,215 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SOLVERTYPESMINI_H__
+#define __SOLVERTYPESMINI_H__
+
+#include <cstdint>
+#include <iostream>
+#include <cassert>
+#include <vector>
+
+namespace CMSat {
+
+#define var_Undef (0xffffffffU >> 4)
+
+class TooManyVarsError {};
+class TooLongClauseError {};
+
+class Lit
+{
+ uint32_t x;
+ explicit Lit(uint32_t i) : x(i) { }
+public:
+ Lit() : x(var_Undef<<1) {} // (lit_Undef)
+ explicit Lit(uint32_t var, bool is_inverted) :
+ x(var + var + is_inverted)
+ {}
+
+ const uint32_t& toInt() const { // Guarantees small, positive integers suitable for array indexing.
+ return x;
+ }
+ Lit operator~() const {
+ return Lit(x ^ 1);
+ }
+ Lit operator^(const bool b) const {
+ return Lit(x ^ (uint32_t)b);
+ }
+ Lit& operator^=(const bool b) {
+ x ^= (uint32_t)b;
+ return *this;
+ }
+ bool sign() const {
+ return x & 1;
+ }
+ uint32_t var() const {
+ return x >> 1;
+ }
+ Lit unsign() const {
+ return Lit(x & ~1U);
+ }
+ bool operator==(const Lit& p) const {
+ return x == p.x;
+ }
+ bool operator!= (const Lit& p) const {
+ return x != p.x;
+ }
+ /**
+ @brief ONLY to be used for ordering such as: a, b, ~b, etc.
+ */
+ bool operator < (const Lit& p) const {
+ return x < p.x; // '<' guarantees that p, ~p are adjacent in the ordering.
+ }
+ bool operator > (const Lit& p) const {
+ return x > p.x;
+ }
+ bool operator >= (const Lit& p) const {
+ return x >= p.x;
+ }
+ static Lit toLit(uint32_t data)
+ {
+ return Lit(data);
+ }
+};
+
+static const Lit lit_Undef(var_Undef, false); // Useful special constants.
+static const Lit lit_Error(var_Undef, true ); //
+
+inline std::ostream& operator<<(std::ostream& os, const Lit lit)
+{
+ if (lit == lit_Undef) {
+ os << "lit_Undef";
+ } else {
+ os << (lit.sign() ? "-" : "") << (lit.var() + 1);
+ }
+ return os;
+}
+
+inline std::ostream& operator<<(std::ostream& co, const std::vector<Lit>& lits)
+{
+ for (uint32_t i = 0; i < lits.size(); i++) {
+ co << lits[i];
+
+ if (i != lits.size()-1)
+ co << " ";
+ }
+
+ return co;
+}
+
+#define l_True lbool((uint8_t)0) // gcc does not do constant propagation if these are real constants.
+#define l_False lbool((uint8_t)1)
+#define l_Undef lbool((uint8_t)2)
+
+
+class llbool;
+
+class lbool {
+ uint8_t value;
+
+public:
+ explicit lbool(uint8_t v) : value(v) { }
+
+ lbool() : value(0) { }
+ explicit lbool(bool x) : value(!x) { }
+ inline lbool(llbool b);
+
+ bool operator == (lbool b) const {
+ return ((b.value & 2) & (value & 2)) | (!(b.value & 2) & (value == b.value));
+ }
+ bool operator != (lbool b) const {
+ return !(*this == b);
+ }
+ lbool operator ^ (bool b) const {
+ return lbool((uint8_t)(value ^ (uint8_t)b));
+ }
+
+ lbool operator && (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xF7F755F4 >> sel) & 3;
+ return lbool(v);
+ }
+
+ lbool operator || (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xFCFCF400 >> sel) & 3;
+ return lbool(v);
+ }
+
+ uint8_t getValue() const { return value; }
+
+ friend int toInt (lbool l);
+ friend lbool toLbool(int v);
+ friend class llbool;
+};
+
+inline lbool boolToLBool(const bool b)
+{
+ if (b)
+ return l_True;
+ else
+ return l_False;
+}
+
+
+/**
+@brief A very hackish lbool that also supports l_Nothing and l_Continue
+*/
+class llbool
+{
+ char value;
+
+public:
+ llbool(): value(0) {}
+ llbool(lbool v) :
+ value(v.value) {}
+ llbool(char a) :
+ value(a) {}
+
+ inline bool operator!=(const llbool& v) const {
+ return (v.value != value);
+ }
+
+ inline bool operator==(const llbool& v) const {
+ return (v.value == value);
+ }
+
+ friend class lbool;
+};
+static const llbool l_Nothing = llbool(2);
+static const llbool l_Continue = llbool(3);
+inline lbool::lbool(llbool b): value(b.value) {
+ assert(b != l_Nothing);
+ assert(b != l_Continue);
+}
+
+inline std::ostream& operator<<(std::ostream& cout, const lbool val)
+{
+ if (val == l_True) cout << "l_True";
+ if (val == l_False) cout << "l_False";
+ if (val == l_Undef) cout << "l_Undef";
+ return cout;
+}
+
+}
+
+#endif //__SOLVERTYPESMINI_H__
diff --git a/cryptominisat5/build/cmsat5-src/libcryptominisat5_export.h b/cryptominisat5/build/cmsat5-src/libcryptominisat5_export.h
new file mode 100644
index 000000000..8e27dc6d9
--- /dev/null
+++ b/cryptominisat5/build/cmsat5-src/libcryptominisat5_export.h
@@ -0,0 +1,42 @@
+
+#ifndef LIBCRYPTOMINISAT5_EXPORT_H
+#define LIBCRYPTOMINISAT5_EXPORT_H
+
+#ifdef LIBCRYPTOMINISAT5_STATIC_DEFINE
+# define LIBCRYPTOMINISAT5_EXPORT
+# define LIBCRYPTOMINISAT5_NO_EXPORT
+#else
+# ifndef LIBCRYPTOMINISAT5_EXPORT
+# ifdef libcryptominisat5_EXPORTS
+ /* We are building this library */
+# define LIBCRYPTOMINISAT5_EXPORT
+# else
+ /* We are using this library */
+# define LIBCRYPTOMINISAT5_EXPORT
+# endif
+# endif
+
+# ifndef LIBCRYPTOMINISAT5_NO_EXPORT
+# define LIBCRYPTOMINISAT5_NO_EXPORT
+# endif
+#endif
+
+#ifndef LIBCRYPTOMINISAT5_DEPRECATED
+# define LIBCRYPTOMINISAT5_DEPRECATED __attribute__ ((__deprecated__))
+#endif
+
+#ifndef LIBCRYPTOMINISAT5_DEPRECATED_EXPORT
+# define LIBCRYPTOMINISAT5_DEPRECATED_EXPORT LIBCRYPTOMINISAT5_EXPORT LIBCRYPTOMINISAT5_DEPRECATED
+#endif
+
+#ifndef LIBCRYPTOMINISAT5_DEPRECATED_NO_EXPORT
+# define LIBCRYPTOMINISAT5_DEPRECATED_NO_EXPORT LIBCRYPTOMINISAT5_NO_EXPORT LIBCRYPTOMINISAT5_DEPRECATED
+#endif
+
+#if 0 /* DEFINE_NO_DEPRECATED */
+# ifndef LIBCRYPTOMINISAT5_NO_DEPRECATED
+# define LIBCRYPTOMINISAT5_NO_DEPRECATED
+# endif
+#endif
+
+#endif
diff --git a/cryptominisat5/build/compile_commands.json b/cryptominisat5/build/compile_commands.json
new file mode 100644
index 000000000..9abbecc90
--- /dev/null
+++ b/cryptominisat5/build/compile_commands.json
@@ -0,0 +1,197 @@
+[
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/cryptominisat5_simple.dir/main_simple.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/cnf.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/propengine.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/varreplacer.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/clausecleaner.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/clauseusagestats.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/prober.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/occsimplifier.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/subsumestrengthen.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/clauseallocator.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/sccfinder.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/solverconf.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/distillerlong.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/distillerlongwithimpl.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/str_impl_w_impl_stamp.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/solutionextender.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/completedetachreattacher.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/searcher.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/solver.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/sqlstats.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/implcache.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/stamp.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/compfinder.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/comphandler.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/hyperengine.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/subsumeimplicit.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/datasync.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/reducedb.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/clausedumper.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/bva.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/intree.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/features_calc.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/features_to_reconf.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/solvefeatures.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/searchstats.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/xorfinder.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/cryptominisat_c.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/GitSHA1.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src/GitSHA1.cpp"
+},
+{
+ "directory": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src",
+ "command": "/usr/bin/c++ -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3 -I/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cmsat5-src -mtune=native -Wall -Wextra -Wunused -Wsign-compare -fno-omit-frame-pointer -Wtype-limits -Wuninitialized -Wno-deprecated -Wstrict-aliasing -Wpointer-arith -Wpointer-arith -Wformat-nonliteral -Winit-self -Wparentheses -Wunreachable-code -ggdb3 -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 -pedantic -g -pthread -O2 -mtune=native -fPIC -std=gnu++11 -o CMakeFiles/libcryptominisat5.dir/cryptominisat.cpp.o -c /home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp",
+ "file": "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp"
+}
+] \ No newline at end of file
diff --git a/cryptominisat5/build/cryptominisat5Config.cmake b/cryptominisat5/build/cryptominisat5Config.cmake
new file mode 100644
index 000000000..e03fd1b94
--- /dev/null
+++ b/cryptominisat5/build/cryptominisat5Config.cmake
@@ -0,0 +1,20 @@
+# Config file for the Build-tree cryptominisat Package
+# It defines the following variables
+# CRYPTOMINISAT5_INCLUDE_DIRS - include directories for cryptominisat5
+# CRYPTOMINISAT5_LIBRARIES - libraries to link against
+# CRYPTOMINISAT5_EXECUTABLE - the cryptominisat executable
+
+# Compute paths
+get_filename_component(CRYPTOMINISAT5_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+set(CRYPTOMINISAT5_INCLUDE_DIRS "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/include")
+
+# Our library dependencies (contains definitions for IMPORTED targets)
+include("${CRYPTOMINISAT5_CMAKE_DIR}/cryptominisat5Targets.cmake")
+
+# These are IMPORTED targets created by cryptominisat5Targets.cmake
+set(CRYPTOMINISAT5_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES_DEPS )
+set(CRYPTOMINISAT5_VERSION_MAJOR 5)
+set(CRYPTOMINISAT5_VERSION_MINOR 6)
+set(CRYPTOMINISAT5_EXECUTABLE cryptominisat5)
diff --git a/cryptominisat5/build/cryptominisat5Targets.cmake b/cryptominisat5/build/cryptominisat5Targets.cmake
new file mode 100644
index 000000000..a4fa7bb72
--- /dev/null
+++ b/cryptominisat5/build/cryptominisat5Targets.cmake
@@ -0,0 +1,72 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
+ message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget libcryptominisat5 cryptominisat5_simple)
+ list(APPEND _expectedTargets ${_expectedTarget})
+ if(NOT TARGET ${_expectedTarget})
+ list(APPEND _targetsNotDefined ${_expectedTarget})
+ endif()
+ if(TARGET ${_expectedTarget})
+ list(APPEND _targetsDefined ${_expectedTarget})
+ endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+ unset(_targetsDefined)
+ unset(_targetsNotDefined)
+ unset(_expectedTargets)
+ set(CMAKE_IMPORT_FILE_VERSION)
+ cmake_policy(POP)
+ return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Create imported target libcryptominisat5
+add_library(libcryptominisat5 STATIC IMPORTED)
+
+set_target_properties(libcryptominisat5 PROPERTIES
+ INTERFACE_LINK_LIBRARIES "-pthread"
+)
+
+# Create imported target cryptominisat5_simple
+add_executable(cryptominisat5_simple IMPORTED)
+
+# Import target "libcryptominisat5" for configuration "RelWithDebInfo"
+set_property(TARGET libcryptominisat5 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
+set_target_properties(libcryptominisat5 PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELWITHDEBINFO "CXX"
+ IMPORTED_LOCATION_RELWITHDEBINFO "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/lib/libcryptominisat5.a"
+ )
+
+# Import target "cryptominisat5_simple" for configuration "RelWithDebInfo"
+set_property(TARGET cryptominisat5_simple APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
+set_target_properties(cryptominisat5_simple PROPERTIES
+ IMPORTED_LOCATION_RELWITHDEBINFO "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/build/cryptominisat5_simple"
+ )
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/cryptominisat5/build/cryptominisat5_simple b/cryptominisat5/build/cryptominisat5_simple
new file mode 100755
index 000000000..6fc4ec666
--- /dev/null
+++ b/cryptominisat5/build/cryptominisat5_simple
Binary files differ
diff --git a/cryptominisat5/build/include/cryptominisat5/cryptominisat.h b/cryptominisat5/build/include/cryptominisat5/cryptominisat.h
new file mode 100644
index 000000000..fbaaacc2f
--- /dev/null
+++ b/cryptominisat5/build/include/cryptominisat5/cryptominisat.h
@@ -0,0 +1,168 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CRYPTOMINISAT5_H__
+#define __CRYPTOMINISAT5_H__
+
+#define CRYPTOMINISAT_VERSION_MAJOR 5
+#define CRYPTOMINISAT_VERSION_MINOR 6
+#define CRYPTOMINISAT_VERSION_PATCH 3
+
+#include <atomic>
+#include <vector>
+#include <iostream>
+#include <utility>
+#include "cryptominisat5/solvertypesmini.h"
+
+namespace CMSat {
+ struct CMSatPrivateData;
+ #ifdef _WIN32
+ class __declspec(dllexport) SATSolver
+ #else
+ class SATSolver
+ #endif
+ {
+ public:
+ SATSolver(void* config = NULL
+ , std::atomic<bool>* interrupt_asap = NULL
+ );
+ ~SATSolver();
+
+ ////////////////////////////
+ // Adding variables and clauses
+ ////////////////////////////
+
+ void new_var(); //add a new variable to the solver
+ void new_vars(const size_t n); //and many new variables to the solver -- much faster
+ unsigned nVars() const; //get number of variables inside the solver
+ bool add_clause(const std::vector<Lit>& lits);
+ bool add_xor_clause(const std::vector<unsigned>& vars, bool rhs);
+
+ ////////////////////////////
+ // Solving and simplifying
+ ////////////////////////////
+
+ lbool solve(const std::vector<Lit>* assumptions = 0, bool only_indep_solution = false); //solve the problem, optionally with assumptions. If only_indep_solution is set, only the independent variables set with set_independent_vars() are returned in the solution
+ lbool simplify(const std::vector<Lit>* assumptions = 0); //simplify the problem, optionally with assumptions
+ const std::vector<lbool>& get_model() const; //get model that satisfies the problem. Only makes sense if previous solve()/simplify() call was l_True
+ const std::vector<Lit>& get_conflict() const; //get conflict in terms of the assumptions given in case the previous call to solve() was l_False
+ bool okay() const; //the problem is still solveable, i.e. the empty clause hasn't been derived
+
+ ////////////////////////////
+ // Debug all calls for later replay with --debuglit FILENAME
+ ////////////////////////////
+ void log_to_file(std::string filename);
+
+ ////////////////////////////
+ // SQLite for statistics gathering
+ ////////////////////////////
+ void set_sqlite(std::string filename);
+ void add_sql_tag(const std::string& tagname, const std::string& tag);
+ unsigned long get_sql_id() const;
+
+ ////////////////////////////
+ // Configuration
+ // -- Note that nothing else can be changed, only these.
+ // -- The main.cpp has access to the internal config, but it changes
+ // -- all the time and hence exposing it to the outside world would
+ // -- be very brittle.
+ ////////////////////////////
+
+ void set_num_threads(unsigned n); //Number of threads to use. Must be set before any vars/clauses are added
+ void set_allow_otf_gauss(); //allow on-the-fly gaussian elimination
+ void set_max_time(double max_time); //max time to run to on next solve() call
+ void set_max_confl(int64_t max_confl); //max conflict to run to on next solve() call
+ void set_verbosity(unsigned verbosity = 0); //default is 0, silent
+ void set_default_polarity(bool polarity); //default polarity when branching for all vars
+ void set_no_simplify(); //never simplify
+ void set_no_simplify_at_startup(); //doesn't simplify at start, faster startup time
+ void set_no_equivalent_lit_replacement(); //don't replace equivalent literals
+ void set_no_bva(); //No bounded variable addition
+ void set_no_bve(); //No bounded variable elimination
+ void set_greedy_undef(); //Try to set variables to l_Undef in solution
+ void set_independent_vars(std::vector<uint32_t>* ind_vars);
+ void set_timeout_all_calls(double secs); //max timeout on all subsequent solve() or simplify
+
+
+ ////////////////////////////
+ // Get generic info
+ ////////////////////////////
+ static const char* get_version(); //get solver version in string format
+ static const char* get_version_sha1(); //get SHA1 version string of the solver
+ static const char* get_compilation_env(); //get compilation environment string
+
+
+ ////////////////////////////
+ // Get info about only the last solve() OR simplify() call
+ // summed for all threads
+ ////////////////////////////
+ uint64_t get_last_conflicts(); //get total number of conflicts of last solve() or simplify() call of all threads
+ uint64_t get_last_propagations(); //get total number of propagations of last solve() or simplify() call made by all threads
+ uint64_t get_last_decisions(); //get total number of decisions of last solve() or simplify() call made by all threads
+
+
+ ////////////////////////////
+ //Get info about total sum of all time of all threads
+ ////////////////////////////
+
+ uint64_t get_sum_conflicts(); //get total number of conflicts of all time of all threads
+ uint64_t get_sum_propagations(); //get total number of propagations of all time made by all threads
+ uint64_t get_sum_decisions(); //get total number of decisions of all time made by all threads
+
+ void print_stats() const; //print solving stats. Call after solve()/simplify()
+ void set_drat(std::ostream* os, bool set_ID); //set drat to ostream, e.g. stdout or a file
+ void interrupt_asap(); //call this asynchronously, and the solver will try to cleanly abort asap
+ void open_file_and_dump_irred_clauses(std::string fname) const; //dump irredundant clauses to this file when solving finishes
+ void open_file_and_dump_red_clauses(std::string fname) const; //dump redundant ("learnt") clauses to this file when solving finishes
+ void add_in_partial_solving_stats(); //used only by Ctrl+C handler. Ignore.
+
+ ////////////////////////////
+ // Extract useful information from the solver
+ // This can be used in the theory solver
+
+ ////////////////////////////
+ std::vector<Lit> get_zero_assigned_lits() const; //get literals of fixed value
+ std::vector<std::pair<Lit, Lit> > get_all_binary_xors() const; //get all binary XORs that are = 0
+
+ //////////////////////
+ // EXPERIMENTAL
+ std::vector<std::pair<std::vector<uint32_t>, bool> > get_recovered_xors(bool elongate) const; //get XORs recovered. If "elongate" is TRUE, then variables shared ONLY by two XORs will be XORed together
+
+ //////////////////////
+ //Below must be done in-order. Multi-threading not allowed.
+ // EXPERIMENTAL!!!
+
+ void start_getting_small_clauses(uint32_t max_len, uint32_t max_glue);
+ bool get_next_small_clause(std::vector<Lit>& ret); //returns FALSE if no more
+ void end_getting_small_clauses();
+
+ private:
+
+ ////////////////////////////
+ // Do not bother with this, it's private
+ ////////////////////////////
+
+ CMSatPrivateData *data;
+ };
+}
+
+#endif //__CRYPTOMINISAT5_H__
diff --git a/cryptominisat5/build/include/cryptominisat5/cryptominisat_c.h b/cryptominisat5/build/include/cryptominisat5/cryptominisat_c.h
new file mode 100644
index 000000000..51922e78f
--- /dev/null
+++ b/cryptominisat5/build/include/cryptominisat5/cryptominisat_c.h
@@ -0,0 +1,75 @@
+/******************************************
+Copyright (c) 2016, @Storyyeller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#pragma once
+#include <stddef.h>
+#include <stdint.h>
+
+typedef struct c_Lit { uint32_t x; } c_Lit;
+typedef struct c_lbool { uint8_t x; } c_lbool;
+typedef struct slice_Lit { const c_Lit* vals; size_t num_vals; } slice_Lit;
+typedef struct slice_lbool { const c_lbool* vals; size_t num_vals; } slice_lbool;
+
+#ifdef __cplusplus
+ #define NOEXCEPT noexcept
+
+ namespace CMSat{ struct SATSolver; }
+ using CMSat::SATSolver;
+
+ extern "C" {
+#else
+ // c stuff
+ #include <stdbool.h>
+ #define NOEXCEPT
+
+ #define L_TRUE (0u)
+ #define L_FALSE (1u)
+ #define L_UNDEF (2u)
+
+ // forward declaration
+ typedef struct SATSolver SATSolver;
+#endif
+
+#if defined _WIN32
+ #define CMS_DLL_PUBLIC __declspec(dllexport)
+#else
+ #define CMS_DLL_PUBLIC __attribute__ ((visibility ("default")))
+#endif
+
+CMS_DLL_PUBLIC SATSolver* cmsat_new(void) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_free(SATSolver* s) NOEXCEPT;
+
+CMS_DLL_PUBLIC unsigned cmsat_nvars(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_clause(SATSolver* self, const c_Lit* lits, size_t num_lits) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_xor_clause(SATSolver* self, const unsigned* vars, size_t num_vars, bool rhs) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_new_vars(SATSolver* self, const size_t n) NOEXCEPT;
+
+CMS_DLL_PUBLIC c_lbool cmsat_solve(SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC c_lbool cmsat_solve_with_assumptions(SATSolver* self, const c_Lit* assumptions, size_t num_assumptions) NOEXCEPT;
+CMS_DLL_PUBLIC slice_lbool cmsat_get_model(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC slice_Lit cmsat_get_conflict(const SATSolver* self) NOEXCEPT;
+
+CMS_DLL_PUBLIC void cmsat_set_num_threads(SATSolver* self, unsigned n) NOEXCEPT;
+
+#ifdef __cplusplus
+} // end extern c
+#endif
diff --git a/cryptominisat5/build/include/cryptominisat5/dimacsparser.h b/cryptominisat5/build/include/cryptominisat5/dimacsparser.h
new file mode 100644
index 000000000..ebdf5edae
--- /dev/null
+++ b/cryptominisat5/build/include/cryptominisat5/dimacsparser.h
@@ -0,0 +1,529 @@
+/*****************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat -- Copyright (c) 2009 Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+******************************************************************************/
+
+#ifndef DIMACSPARSER_H
+#define DIMACSPARSER_H
+
+#include <string.h>
+#include "streambuffer.h"
+#include "cryptominisat5/cryptominisat.h"
+#include <cstdlib>
+#include <cmath>
+
+using namespace CMSat;
+using std::vector;
+
+template <class C>
+class DimacsParser
+{
+ public:
+ DimacsParser(SATSolver* solver, const std::string* debugLib, unsigned _verbosity);
+
+ template <class T> bool parse_DIMACS(T input_stream, const bool strict_header);
+ uint64_t max_var = std::numeric_limits<uint64_t>::max();
+ vector<uint32_t> independent_vars;
+ const std::string dimacs_spec = "http://www.satcompetition.org/2009/format-benchmarks2009.html";
+ const std::string please_read_dimacs = "\nPlease read DIMACS specification at http://www.satcompetition.org/2009/format-benchmarks2009.html";
+
+ private:
+ bool parse_DIMACS_main(C& in);
+ bool readClause(C& in);
+ bool parse_and_add_clause(C& in);
+ bool parse_and_add_xor_clause(C& in);
+ bool match(C& in, const char* str);
+ bool printHeader(C& in);
+ bool parseComments(C& in, const std::string& str);
+ std::string stringify(uint32_t x) const;
+ bool parse_solve_simp_comment(C& in, const bool solve);
+ void write_solution_to_debuglib_file(const lbool ret) const;
+ bool parseIndependentSet(C& in);
+ std::string get_debuglib_fname() const;
+
+
+ SATSolver* solver;
+ std::string debugLib;
+ unsigned verbosity;
+
+ //Stat
+ size_t lineNum;
+
+ //Printing partial solutions to debugLibPart1..N.output when "debugLib" is set to TRUE
+ uint32_t debugLibPart = 1;
+
+ //check header strictly
+ bool strict_header = false;
+ bool header_found = false;
+ int num_header_vars = 0;
+ int num_header_cls = 0;
+
+ //Reduce temp overhead
+ vector<Lit> lits;
+ vector<uint32_t> vars;
+
+ size_t norm_clauses_added = 0;
+ size_t xor_clauses_added = 0;
+};
+
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+#include <vector>
+#include <fstream>
+#include <complex>
+#include <cassert>
+
+using std::vector;
+using std::cout;
+using std::endl;
+
+template<class C>
+DimacsParser<C>::DimacsParser(
+ SATSolver* _solver
+ , const std::string* _debugLib
+ , unsigned _verbosity
+):
+ solver(_solver)
+ , verbosity(_verbosity)
+ , lineNum(0)
+{
+ if (_debugLib) {
+ debugLib = *_debugLib;
+ }
+}
+
+template<class C>
+std::string DimacsParser<C>::stringify(uint32_t x) const
+{
+ std::ostringstream o;
+ o << x;
+ return o.str();
+}
+
+template<class C>
+bool DimacsParser<C>::readClause(C& in)
+{
+ int32_t parsed_lit;
+ uint32_t var;
+ for (;;) {
+ if (!in.parseInt(parsed_lit, lineNum)) {
+ return false;
+ }
+ if (parsed_lit == 0) {
+ break;
+ }
+
+ var = std::abs(parsed_lit)-1;
+
+ if (var > max_var) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is too large for DIMACS parser parameter: "
+ << var << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ if (var >= (1ULL<<28)) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is far too large: " << var + 1 << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ if (strict_header && !header_found) {
+ std::cerr
+ << "ERROR! "
+ << "DIMACS header ('p cnf vars cls') never found!" << endl;
+ return false;
+ }
+
+ if ((int)var >= num_header_vars && strict_header) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is larger than the header told us." << endl
+ << " -> var is : " << var + 1 << endl
+ << " -> header told us maximum will be : " << num_header_vars << endl
+ << " -> At line " << lineNum+1
+ << endl;
+ return false;
+ }
+
+ if (var >= solver->nVars()) {
+ assert(!strict_header);
+ solver->new_vars(var - solver->nVars() +1);
+ }
+
+ lits.push_back( (parsed_lit > 0) ? Lit(var, false) : Lit(var, true) );
+ if (*in != ' ') {
+ std::cerr
+ << "ERROR! "
+ << "After last element on the line must be 0" << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl
+ << endl;
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::match(C& in, const char* str)
+{
+ for (; *str != 0; ++str, ++in)
+ if (*str != *in)
+ return false;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::printHeader(C& in)
+{
+ if (match(in, "p cnf")) {
+ if (header_found && strict_header) {
+ std::cerr << "ERROR: CNF header ('p cnf vars cls') found twice in file! Exiting." << endl;
+ exit(-1);
+ }
+ header_found = true;
+
+ if (!in.parseInt(num_header_vars, lineNum)
+ || !in.parseInt(num_header_cls, lineNum)
+ ) {
+ return false;
+ }
+ if (verbosity) {
+ cout << "c -- header says num vars: " << std::setw(12) << num_header_vars << endl;
+ cout << "c -- header says num clauses:" << std::setw(12) << num_header_cls << endl;
+ }
+ if (num_header_vars < 0) {
+ std::cerr << "ERROR: Number of variables in header cannot be less than 0" << endl;
+ return false;
+ }
+ if (num_header_cls < 0) {
+ std::cerr << "ERROR: Number of clauses in header cannot be less than 0" << endl;
+ return false;
+ }
+
+ if (solver->nVars() < (size_t)num_header_vars) {
+ solver->new_vars(num_header_vars-solver->nVars());
+ }
+ } else {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (hex: " << std::hex
+ << std::setw(2)
+ << std::setfill('0')
+ << "0x" << *in
+ << std::setfill(' ')
+ << std::dec
+ << ")"
+ << " At line " << lineNum+1
+ << "' in the header, at line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ return true;
+}
+
+template<class C>
+std::string DimacsParser<C>::get_debuglib_fname() const
+{
+ std::string sol_fname = debugLib + "-debugLibPart" + stringify(debugLibPart) +".output";
+ return sol_fname;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_solve_simp_comment(C& in, const bool solve)
+{
+ vector<Lit> assumps;
+ in.skipWhitespace();
+ while(*in != ')') {
+ int lit;
+ if (!in.parseInt(lit, lineNum)) {
+ return false;
+ }
+ assumps.push_back(Lit(std::abs(lit)-1, lit < 0));
+ in.skipWhitespace();
+ }
+
+ if (verbosity) {
+ cout
+ << "c -----------> Solver::"
+ << (solve ? "solve" : "simplify")
+ <<" called (number: "
+ << std::setw(3) << debugLibPart << ") with assumps :";
+ for(Lit lit: assumps) {
+ cout << lit << " ";
+ }
+ cout << "<-----------" << endl;
+ }
+
+ lbool ret;
+ if (solve) {
+ if (verbosity) {
+ cout << "c Solution will be written to: "
+ << get_debuglib_fname() << endl;
+ }
+ ret = solver->solve(&assumps);
+ write_solution_to_debuglib_file(ret);
+ debugLibPart++;
+ } else {
+ ret = solver->simplify(&assumps);
+ }
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::"
+ << (solve ? "solve" : "simplify")
+ << endl;
+ }
+ return true;
+}
+
+template<class C>
+void DimacsParser<C>::write_solution_to_debuglib_file(const lbool ret) const
+{
+ //Open file for writing
+ std::string s = get_debuglib_fname();
+ std::ofstream partFile;
+ partFile.open(s.c_str());
+ if (!partFile) {
+ std::cerr << "ERROR: Cannot open part file '" << s << "'";
+ std::exit(-1);
+ }
+
+ //Output to part file the result
+ if (ret == l_True) {
+ partFile << "s SATISFIABLE\n";
+ partFile << "v ";
+ for (uint32_t i = 0; i != solver->nVars(); i++) {
+ if (solver->get_model()[i] != l_Undef)
+ partFile
+ << ((solver->get_model()[i]==l_True) ? "" : "-")
+ << (i+1) << " ";
+ }
+ partFile << "0\n";
+ } else if (ret == l_False) {
+ partFile << "conflict ";
+ for (Lit lit: solver->get_conflict()) {
+ partFile << lit << " ";
+ }
+ partFile
+ << "\ns UNSAT\n";
+ } else if (ret == l_Undef) {
+ cout << "c timeout, exiting" << endl;
+ std::exit(15);
+ } else {
+ assert(false);
+ }
+ partFile.close();
+}
+
+template<class C>
+bool DimacsParser<C>::parseComments(C& in, const std::string& str)
+{
+ if (!debugLib.empty() && str.substr(0, 13) == "Solver::solve") {
+ if (!parse_solve_simp_comment(in, true)) {
+ return false;
+ }
+ } else if (!debugLib.empty() && str.substr(0, 16) == "Solver::simplify") {
+ if (!parse_solve_simp_comment(in, false)) {
+ return false;
+ }
+ } else if (!debugLib.empty() && str == "Solver::new_var()") {
+ solver->new_var();
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::new_var()" << endl;
+ }
+ } else if (!debugLib.empty() && str == "Solver::new_vars(") {
+ in.skipWhitespace();
+ int n;
+ if (!in.parseInt(n, lineNum)) {
+ return false;
+ }
+ solver->new_vars(n);
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::new_vars( " << n << " )" << endl;
+ }
+ } else if (str == "ind") {
+ if (!parseIndependentSet(in)) {
+ return false;
+ }
+ } else {
+ if (verbosity >= 6) {
+ cout
+ << "didn't understand in CNF file comment line:"
+ << "'c " << str << "'"
+ << endl;
+ }
+ }
+ in.skipLine();
+ lineNum++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_and_add_clause(C& in)
+{
+ lits.clear();
+ if (!readClause(in)) {
+ return false;
+ }
+ in.skipWhitespace();
+ if (!in.skipEOL(lineNum)) {
+ return false;
+ }
+ lineNum++;
+ solver->add_clause(lits);
+ norm_clauses_added++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_and_add_xor_clause(C& in)
+{
+ lits.clear();
+ if (!readClause(in)) {
+ return false;
+ }
+ if (!in.skipEOL(lineNum)) {
+ return false;
+ }
+ lineNum++;
+ if (lits.empty())
+ return true;
+
+ bool rhs = true;
+ vars.clear();
+ for(Lit& lit: lits) {
+ vars.push_back(lit.var());
+ if (lit.sign()) {
+ rhs ^= true;
+ }
+ }
+ solver->add_xor_clause(vars, rhs);
+ xor_clauses_added++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_DIMACS_main(C& in)
+{
+ std::string str;
+
+ for (;;) {
+ in.skipWhitespace();
+ switch (*in) {
+ case EOF:
+ return true;
+ case 'p':
+ if (!printHeader(in)) {
+ return false;
+ }
+ in.skipLine();
+ lineNum++;
+ break;
+ case 'c':
+ ++in;
+ in.parseString(str);
+ if (!parseComments(in, str)) {
+ return false;
+ }
+ break;
+ case 'x':
+ ++in;
+ if (!parse_and_add_xor_clause(in)) {
+ return false;
+ }
+ break;
+ case '\n':
+ std::cerr
+ << "c WARNING: Empty line at line number " << lineNum+1
+ << " -- this is not part of the DIMACS specifications ("
+ << dimacs_spec << "). Ignoring."
+ << endl;
+ in.skipLine();
+ lineNum++;
+ break;
+ default:
+ if (!parse_and_add_clause(in)) {
+ return false;
+ }
+ break;
+ }
+ }
+
+ return true;
+}
+
+template <class C>
+template <class T>
+bool DimacsParser<C>::parse_DIMACS(T input_stream, const bool _strict_header)
+{
+ debugLibPart = 1;
+ strict_header = _strict_header;
+ const uint32_t origNumVars = solver->nVars();
+
+ C in(input_stream);
+ if ( !parse_DIMACS_main(in)) {
+ return false;
+ }
+
+ if (verbosity) {
+ cout
+ << "c -- clauses added: " << norm_clauses_added << endl
+ << "c -- xor clauses added: " << xor_clauses_added << endl
+ << "c -- vars added " << (solver->nVars() - origNumVars)
+ << endl;
+ }
+
+ return true;
+}
+
+template <class C>
+bool DimacsParser<C>::parseIndependentSet(C& in)
+{
+ int32_t parsed_lit;
+ for (;;) {
+ if (!in.parseInt(parsed_lit, lineNum)) {
+ return false;
+ }
+ if (parsed_lit == 0) {
+ break;
+ }
+ uint32_t var = std::abs(parsed_lit) - 1;
+ independent_vars.push_back(var);
+ }
+ return true;
+}
+
+#endif //DIMACSPARSER_H
diff --git a/cryptominisat5/build/include/cryptominisat5/solvertypesmini.h b/cryptominisat5/build/include/cryptominisat5/solvertypesmini.h
new file mode 100644
index 000000000..571cb3510
--- /dev/null
+++ b/cryptominisat5/build/include/cryptominisat5/solvertypesmini.h
@@ -0,0 +1,215 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SOLVERTYPESMINI_H__
+#define __SOLVERTYPESMINI_H__
+
+#include <cstdint>
+#include <iostream>
+#include <cassert>
+#include <vector>
+
+namespace CMSat {
+
+#define var_Undef (0xffffffffU >> 4)
+
+class TooManyVarsError {};
+class TooLongClauseError {};
+
+class Lit
+{
+ uint32_t x;
+ explicit Lit(uint32_t i) : x(i) { }
+public:
+ Lit() : x(var_Undef<<1) {} // (lit_Undef)
+ explicit Lit(uint32_t var, bool is_inverted) :
+ x(var + var + is_inverted)
+ {}
+
+ const uint32_t& toInt() const { // Guarantees small, positive integers suitable for array indexing.
+ return x;
+ }
+ Lit operator~() const {
+ return Lit(x ^ 1);
+ }
+ Lit operator^(const bool b) const {
+ return Lit(x ^ (uint32_t)b);
+ }
+ Lit& operator^=(const bool b) {
+ x ^= (uint32_t)b;
+ return *this;
+ }
+ bool sign() const {
+ return x & 1;
+ }
+ uint32_t var() const {
+ return x >> 1;
+ }
+ Lit unsign() const {
+ return Lit(x & ~1U);
+ }
+ bool operator==(const Lit& p) const {
+ return x == p.x;
+ }
+ bool operator!= (const Lit& p) const {
+ return x != p.x;
+ }
+ /**
+ @brief ONLY to be used for ordering such as: a, b, ~b, etc.
+ */
+ bool operator < (const Lit& p) const {
+ return x < p.x; // '<' guarantees that p, ~p are adjacent in the ordering.
+ }
+ bool operator > (const Lit& p) const {
+ return x > p.x;
+ }
+ bool operator >= (const Lit& p) const {
+ return x >= p.x;
+ }
+ static Lit toLit(uint32_t data)
+ {
+ return Lit(data);
+ }
+};
+
+static const Lit lit_Undef(var_Undef, false); // Useful special constants.
+static const Lit lit_Error(var_Undef, true ); //
+
+inline std::ostream& operator<<(std::ostream& os, const Lit lit)
+{
+ if (lit == lit_Undef) {
+ os << "lit_Undef";
+ } else {
+ os << (lit.sign() ? "-" : "") << (lit.var() + 1);
+ }
+ return os;
+}
+
+inline std::ostream& operator<<(std::ostream& co, const std::vector<Lit>& lits)
+{
+ for (uint32_t i = 0; i < lits.size(); i++) {
+ co << lits[i];
+
+ if (i != lits.size()-1)
+ co << " ";
+ }
+
+ return co;
+}
+
+#define l_True lbool((uint8_t)0) // gcc does not do constant propagation if these are real constants.
+#define l_False lbool((uint8_t)1)
+#define l_Undef lbool((uint8_t)2)
+
+
+class llbool;
+
+class lbool {
+ uint8_t value;
+
+public:
+ explicit lbool(uint8_t v) : value(v) { }
+
+ lbool() : value(0) { }
+ explicit lbool(bool x) : value(!x) { }
+ inline lbool(llbool b);
+
+ bool operator == (lbool b) const {
+ return ((b.value & 2) & (value & 2)) | (!(b.value & 2) & (value == b.value));
+ }
+ bool operator != (lbool b) const {
+ return !(*this == b);
+ }
+ lbool operator ^ (bool b) const {
+ return lbool((uint8_t)(value ^ (uint8_t)b));
+ }
+
+ lbool operator && (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xF7F755F4 >> sel) & 3;
+ return lbool(v);
+ }
+
+ lbool operator || (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xFCFCF400 >> sel) & 3;
+ return lbool(v);
+ }
+
+ uint8_t getValue() const { return value; }
+
+ friend int toInt (lbool l);
+ friend lbool toLbool(int v);
+ friend class llbool;
+};
+
+inline lbool boolToLBool(const bool b)
+{
+ if (b)
+ return l_True;
+ else
+ return l_False;
+}
+
+
+/**
+@brief A very hackish lbool that also supports l_Nothing and l_Continue
+*/
+class llbool
+{
+ char value;
+
+public:
+ llbool(): value(0) {}
+ llbool(lbool v) :
+ value(v.value) {}
+ llbool(char a) :
+ value(a) {}
+
+ inline bool operator!=(const llbool& v) const {
+ return (v.value != value);
+ }
+
+ inline bool operator==(const llbool& v) const {
+ return (v.value == value);
+ }
+
+ friend class lbool;
+};
+static const llbool l_Nothing = llbool(2);
+static const llbool l_Continue = llbool(3);
+inline lbool::lbool(llbool b): value(b.value) {
+ assert(b != l_Nothing);
+ assert(b != l_Continue);
+}
+
+inline std::ostream& operator<<(std::ostream& cout, const lbool val)
+{
+ if (val == l_True) cout << "l_True";
+ if (val == l_False) cout << "l_False";
+ if (val == l_Undef) cout << "l_Undef";
+ return cout;
+}
+
+}
+
+#endif //__SOLVERTYPESMINI_H__
diff --git a/cryptominisat5/build/include/cryptominisat5/streambuffer.h b/cryptominisat5/build/include/cryptominisat5/streambuffer.h
new file mode 100644
index 000000000..6b4fea34e
--- /dev/null
+++ b/cryptominisat5/build/include/cryptominisat5/streambuffer.h
@@ -0,0 +1,208 @@
+/*******************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*******************************************************************************/
+
+#ifndef STREAMBUFFER_H
+#define STREAMBUFFER_H
+
+static const unsigned chunk_limit = 148576;
+
+#include <stdio.h>
+#include <iostream>
+#include <iomanip>
+#include <limits>
+#include <string>
+#include <memory>
+
+#ifdef USE_ZLIB
+#include <zlib.h>
+struct GZ {
+ static inline int read(void* buf, size_t num, size_t count, gzFile f)
+ {
+ return gzread(f, buf, num*count);
+ }
+};
+#endif
+
+struct FN {
+ static inline int read(void* buf, size_t num, size_t count, FILE* f)
+ {
+ return fread(buf, num, count, f);
+ }
+};
+
+struct CH {
+ static inline int read(void* buf, size_t num, size_t count, const char*& f)
+ {
+ int toread = num*count;
+ char* mybuf = (char*)buf;
+
+ int read = 0;
+ while(*f != 0 && read < toread) {
+ *mybuf = *f;
+ mybuf++;
+ f++;
+ read++;
+ }
+ return read;
+ }
+};
+
+template<typename A, typename B>
+class StreamBuffer
+{
+ A in;
+ void assureLookahead() {
+ if (pos >= size) {
+ pos = 0;
+ size = B::read(buf.get(), 1, chunk_limit, in);
+ }
+ }
+ int pos;
+ int size;
+ std::unique_ptr<char[]> buf;
+
+ void advance()
+ {
+ operator++();
+ }
+ int value()
+ {
+ return operator*();
+ }
+
+public:
+ StreamBuffer(A i) :
+ in(i)
+ , pos(0)
+ , size(0)
+ , buf(new char[chunk_limit]())
+ {
+ assureLookahead();
+ }
+
+ int operator * () {
+ return (pos >= size) ? EOF : buf[pos];
+ }
+ void operator ++ () {
+ pos++;
+ assureLookahead();
+ }
+
+ void skipWhitespace()
+ {
+ char c = value();
+ while (c == '\t' || c == '\r' || c == ' ') {
+ advance();
+ c = value();
+ }
+ }
+
+ void skipLine()
+ {
+ for (;;) {
+ if (value() == EOF || value() == '\0') return;
+ if (value() == '\n') {
+ advance();
+ return;
+ }
+ advance();
+ }
+ }
+
+ bool skipEOL(const size_t lineNum)
+ {
+ for (;;) {
+ if (value() == EOF || value() == '\0') return true;
+ if (value() == '\n') {
+ advance();
+ return true;
+ }
+ if (value() != '\r') {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (hex: " << std::hex
+ << std::setw(2)
+ << std::setfill('0')
+ << "0x" << value()
+ << std::setfill(' ')
+ << std::dec
+ << ")"
+ << " At line " << lineNum+1
+ << " we expected an end of line character (\\n or \\r + \\n)"
+ << std::endl;
+ return false;
+ }
+ advance();
+ }
+ exit(-1);
+ }
+
+ inline bool parseInt(int32_t& ret, size_t lineNum, bool allow_eol = false)
+ {
+ int32_t val = 0;
+ int32_t mult = 1;
+ skipWhitespace();
+ if (value() == '-') {
+ mult = -1;
+ advance();
+ } else if (value() == '+') {
+ advance();
+ }
+
+ char c = value();
+ if (allow_eol && c == '\n') {
+ ret = std::numeric_limits<int32_t>::max();
+ return true;
+ }
+ if (c < '0' || c > '9') {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (dec: '" << c << ")"
+ << " At line " << lineNum
+ << " we expected a number"
+ << std::endl;
+ return false;
+ }
+
+ while (c >= '0' && c <= '9') {
+ int32_t val2 = val*10 + (c - '0');
+ if (val2 < val) {
+ std::cerr << "PARSE ERROR! At line " << lineNum
+ << " the variable number is to high"
+ << std::endl;
+ return false;
+ }
+ val = val2;
+ advance();
+ c = value();
+ }
+ ret = mult*val;
+ return true;
+ }
+
+ void parseString(std::string& str)
+ {
+ str.clear();
+ skipWhitespace();
+ while (value() != ' ' && value() != '\n' && value() != EOF) {
+ str.push_back(value());
+ advance();
+ }
+ }
+};
+
+#endif //STREAMBUFFER_H
diff --git a/cryptominisat5/build/install_manifest.txt b/cryptominisat5/build/install_manifest.txt
new file mode 100644
index 000000000..235dc4acc
--- /dev/null
+++ b/cryptominisat5/build/install_manifest.txt
@@ -0,0 +1,10 @@
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Config.cmake
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/lib/libcryptominisat5.a
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include/cryptominisat5/cryptominisat_c.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include/cryptominisat5/cryptominisat.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include/cryptominisat5/solvertypesmini.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include/cryptominisat5/dimacsparser.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include/cryptominisat5/streambuffer.h
+/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/bin/cryptominisat5_simple \ No newline at end of file
diff --git a/cryptominisat5/build/lib/libcryptominisat5.a b/cryptominisat5/build/lib/libcryptominisat5.a
new file mode 100644
index 000000000..e084fafa3
--- /dev/null
+++ b/cryptominisat5/build/lib/libcryptominisat5.a
Binary files differ
diff --git a/cryptominisat5/cryptominisat-5.6.3.tar b/cryptominisat5/cryptominisat-5.6.3.tar
new file mode 100644
index 000000000..7e8ffd0bc
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3.tar
Binary files differ
diff --git a/cryptominisat5/cryptominisat-5.6.3/.dockerignore b/cryptominisat5/cryptominisat-5.6.3/.dockerignore
new file mode 100644
index 000000000..7bcebb415
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/.dockerignore
@@ -0,0 +1,30 @@
+# files and dirs to ignore
+scripts/fuzz
+scripts/reconf
+scripts/aws
+.git/
+debian
+
+appveyor.yml
+AUTHORS
+build
+.clang-format
+cryptominisat.kdev4
+debian
+.directory
+Dockerfile
+.dockerignore
+docs
+.git
+.gitignore
+.gitmodules
+jni
+.kdev4
+LICENSE.txt
+python
+README.markdown
+sql_*
+tests
+.travis.yml
+utils
+web/dygraphs/node_modules
diff --git a/cryptominisat5/cryptominisat-5.6.3/.gitignore b/cryptominisat5/cryptominisat-5.6.3/.gitignore
new file mode 100644
index 000000000..601812a2a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/.gitignore
@@ -0,0 +1,21 @@
+*.kdev4
+*.pyc
+.directory
+scripts/fuzzTest*.cnf
+scripts2/
+scripts3/
+scripts4/
+desc/satcomp14/cmsv4.aux
+desc/satcomp14/cmsv4.bbl
+desc/satcomp14/cmsv4.blg
+desc/satcomp14/cmsv4.kilepr
+desc/satcomp14/cmsv4.log
+desc/satcomp14/cmsv4.out
+desc/satcomp14/cmsv4.pdf
+scripts/reconf/outs
+tests/cnf-files/*.sqlite
+scripts/fuzz/fuzzTest_*
+scripts/fuzz/tmp_for_xor_to_cnf_*
+scripts/reconf/outfile*
+
+web/jquery-1.11.3.min.js
diff --git a/cryptominisat5/cryptominisat-5.6.3/.gitmodules b/cryptominisat5/cryptominisat-5.6.3/.gitmodules
new file mode 100644
index 000000000..f4c13bb15
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/.gitmodules
@@ -0,0 +1,36 @@
+[submodule "utils/OutputCheck"]
+ path = utils/OutputCheck
+ url = https://github.com/stp/OutputCheck.git
+[submodule "utils/gtest"]
+ path = utils/gtest
+ url = https://github.com/stp/googletest.git
+[submodule "utils/cnf-utils"]
+ path = utils/cnf-utils
+ url = https://github.com/msoos/cnf-utils.git
+[submodule "utils/sha1-sat"]
+ path = utils/sha1-sat
+ url = https://github.com/msoos/sha1-sat.git
+[submodule "web/dygraphs"]
+ path = web/dygraphs
+ url = https://github.com/danvk/dygraphs
+ ignore = dirty
+[submodule "utils/licensecheck"]
+ path = utils/licensecheck
+ url = https://github.com/msoos/licensecheck.git
+[submodule "scripts/build_scripts"]
+ path = scripts/build_scripts
+ url = https://github.com/msoos/cryptominisat_build.git
+[submodule "utils/drat-trim"]
+ path = utils/drat-trim
+ url = https://github.com/msoos/drat-trim
+[submodule "utils/minisat_only_elim_and_subsume"]
+ path = utils/minisat_only_elim_and_subsume
+ url = https://github.com/msoos/minisat
+ branch = only_elim_and_subsume
+[submodule "tests/simp-checks/simplifiy_testfiles"]
+ path = tests/simp-checks/simplifiy_testfiles
+ url = https://github.com/msoos/simplifiy_testfiles
+[submodule "minisat-fuzz"]
+ path = utils/minisat
+ url = https://github.com/msoos/minisat
+ branch = fuzzer
diff --git a/cryptominisat5/cryptominisat-5.6.3/.travis.yml b/cryptominisat5/cryptominisat-5.6.3/.travis.yml
new file mode 100644
index 000000000..6397e97d4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/.travis.yml
@@ -0,0 +1,156 @@
+language: cpp
+cache: ccache
+
+branches:
+ only:
+ - master
+
+compiler:
+ - gcc
+ - clang
+
+os:
+ - linux
+ - osx
+
+dist: trusty
+
+# not container-based
+sudo: required
+
+python:
+ - "2.7"
+ - "3.6"
+
+env:
+ global:
+ # below is coveralls token
+ - secure: "fZqRStzy+aN3BPTRcc97+J4oidbIXcHlAQo2Sc25WGS1pV4+NOiM/gJeh+7WDfPmszXZBHdyyg/XPXeI86OMikXL7DaG53D/6Zq+qzVehyTlHi3sT93sDs53FbwAqa5F/dDf+z74VK7P+pQZkAr96ra8sU0Pz9nWr/8XhSpdZlE="
+
+ # below is coverity token
+ - secure: "WXFslB4aWOcCtMYnNlIYLkxi0aQ8R9ApMmV3fWlGN98gm2+5aaDKsRxpy9Q25ghQNgouS894klSqJhfB9Xa7SW389LHVor3FIYvYHZC0vSQQjFMg4/kUZg+t3HXhRt4254sxIJrTXSeF/3nOq1HMVIk4UanVUp7aihEyNcfJ6rk="
+
+ matrix:
+ - CMS_CONFIG=NORMAL
+ - CMS_CONFIG=NORMAL_PYTHON2
+ - CMS_CONFIG=LARGEMEM_GAUSS
+ - CMS_CONFIG=ONLY_SIMPLE
+ - CMS_CONFIG=STATS
+ - CMS_CONFIG=NOZLIB
+ - CMS_CONFIG=RELEASE
+ - CMS_CONFIG=NOSQLITE
+ - CMS_CONFIG=NOPYTHON
+ - CMS_CONFIG=SQLITE
+ - CMS_CONFIG=M4RI
+ - CMS_CONFIG=GAUSS
+ - CMS_CONFIG=COVERAGE
+ - CMS_CONFIG=SLOW_DEBUG
+ - CMS_CONFIG=INTREE_BUILD
+ - CMS_CONFIG=NOTEST
+ - CMS_CONFIG=STATIC
+ - CMS_CONFIG=COVERAGE
+ - CMS_CONFIG=ONLY_SIMPLE_STATIC
+
+matrix:
+ exclude:
+ - os: osx
+ compiler: gcc
+
+ # COVERAGE scan should only run once
+ - compiler: clang
+ env: CMS_CONFIG=COVERAGE
+
+ - compiler: clang
+ env: CMS_CONFIG=STATS
+
+ - compiler: clang
+ env: CMS_CONFIG=SLOW_DEBUG
+
+ - compiler: clang
+ env: CMS_CONFIG=NOPYTHON
+
+ - compiler: clang
+ env: CMS_CONFIG=NOTEST
+
+ #####
+ - os: osx
+ env: CMS_CONFIG=STATS
+
+ - os: osx
+ env: CMS_CONFIG=SLOW_DEBUG
+
+ - os: osx
+ env: CMS_CONFIG=NOTEST
+
+ - os: osx
+ env: CMS_CONFIG=COVERAGE
+
+ - os: osx
+ env: CMS_CONFIG=NOSQLITE
+
+ - os: osx
+ env: CMS_CONFIG=NOZLIB
+
+ - os: osx
+ env: CMS_CONFIG=LARGEMEM_GAUSS
+
+ - os: osx
+ env: CMS_CONFIG=NOPYTHON
+
+
+ include:
+ # Covertiy scan should only run once
+ - os: linux
+ compiler: gcc
+ env: COVERITY_SCAN=1 CMS_CONFIG=NORMAL
+
+ allow_failures:
+ # Covertiy scan might fail
+ - env: COVERITY_SCAN=1 CMS_CONFIG=NORMAL
+
+addons:
+ coverity_scan:
+ project:
+ name: "msoos/cryptominisat"
+ description: "Advanced SAT solver"
+ notification_email: soos.mate@gmail.com
+ build_command_prepend: "cmake ."
+ build_command: "make"
+ branch_pattern: coverity_scan
+
+before_install:
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
+ # we probably want to install python 3 though...
+ - if [[ ("$TRAVIS_OS_NAME" == "osx") && ("$CMS_CONFIG" != "NORMAL_PYTHON2") ]]; then brew upgrade python --universal; fi
+ # - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sudo easy_install pip; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get update; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y --force-yes help2man; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y --force-yes python3-pip; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y --force-yes libboost-test-dev; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y --force-yes cmake3; fi
+
+install:
+#cmake
+ #- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./scripts/travis-install-cmake.sh; fi
+#coveralls
+ - if [[ "$CMS_CONFIG" == "COVERAGE" ]]; then ./scripts/travis-install-lcov.sh; fi
+# lit
+ # NOTE we probably should NOT use 'sudo' because Travis uses virtualenvs
+ # curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python
+
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py -o get-pip.py; fi
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sudo python get-pip.py; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -H pip install --upgrade pip; fi
+ - pip install --user lit
+ - echo $PATH
+ - export PATH=$PATH:/Users/travis/Library/Python/2.7/bin
+ - lit --version
+ - which lit
+#submodules
+ - git submodule init
+ - git submodule update
+#bulid dir
+ - mkdir -p build
+
+script:
+ - if [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then ./scripts/travis-cmake.sh ; fi
diff --git a/cryptominisat5/cryptominisat-5.6.3/AUTHORS b/cryptominisat5/cryptominisat-5.6.3/AUTHORS
new file mode 100644
index 000000000..d4f0f0753
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/AUTHORS
@@ -0,0 +1,8 @@
+Mate Soos <soos.mate@gmail.com>
+
+Acknowledgements:
+The author would like to thank in no particular order Horst Samulowitz,
+Marius T. Lindauer, Martin Maurer, Martin Albrecht, Vegard Nossum,
+Valentin Mayer-Eichberger, George Katsirelos, Karsten Nohl,
+Luca Melette, Marijn Heule, Vijay Ganesh, Trevor Hansen and Robert
+Aston for their help. \ No newline at end of file
diff --git a/cryptominisat5/cryptominisat-5.6.3/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/CMakeLists.txt
new file mode 100644
index 000000000..2aea311c6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/CMakeLists.txt
@@ -0,0 +1,698 @@
+# Copyright (c) 2017, Mate Soos
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_CXX_STANDARD 11)
+
+include (GenerateExportHeader)
+include (GNUInstallDirs)
+
+message(STATUS "LIB directory is '${CMAKE_INSTALL_LIBDIR}'")
+message(STATUS "BIN directory is '${CMAKE_INSTALL_BINDIR}'")
+
+if(POLICY CMP0048)
+ #policy for VERSION in cmake 3.0
+ cmake_policy(SET CMP0048 NEW)
+endif()
+
+
+if(POLICY CMP0022)
+ cmake_policy(SET CMP0022 NEW)
+endif()
+
+if(POLICY CMP0046)
+ cmake_policy(SET CMP0046 NEW)
+endif()
+
+if(POLICY CMP0026)
+ cmake_policy(SET CMP0026 NEW)
+endif()
+
+# -----------------------------------------------------------------------------
+# Provide scripts dir for included cmakes to use
+# -----------------------------------------------------------------------------
+set(CRYPTOMS_SCRIPTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/scripts)
+
+# -----------------------------------------------------------------------------
+# Make RelWithDebInfo the default build type if otherwise not set
+# -----------------------------------------------------------------------------
+set(build_types Debug Release RelWithDebInfo MinSizeRel)
+if(NOT CMAKE_BUILD_TYPE)
+ message(STATUS "You can choose the type of build, options are:${build_types}")
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE String
+ "Options are ${build_types}"
+ FORCE
+ )
+
+ # Provide drop down menu options in cmake-gui
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${build_types})
+endif()
+message(STATUS "Doing a ${CMAKE_BUILD_TYPE} build")
+
+# -----------------------------------------------------------------------------
+# Option to enable/disable assertions
+# -----------------------------------------------------------------------------
+
+# Filter out definition of NDEBUG from the default build configuration flags.
+# We will add this ourselves if we want to disable assertions
+foreach (build_config ${build_types})
+ string(TOUPPER ${build_config} upper_case_build_config)
+ foreach (language CXX C)
+ set(VAR_TO_MODIFY "CMAKE_${language}_FLAGS_${upper_case_build_config}")
+ string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )"
+ " "
+ replacement
+ "${${VAR_TO_MODIFY}}")
+ #message("Original (${VAR_TO_MODIFY}) is ${${VAR_TO_MODIFY}} replacement is ${replacement}")
+ set(${VAR_TO_MODIFY} "${replacement}" CACHE STRING "Default flags for ${build_config} configuration" FORCE)
+ endforeach()
+endforeach()
+
+PROJECT(cryptominisat5)
+
+# contains some library search cmake scripts
+SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+
+# generate JSON file of compile commands -- useful for code extension
+set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package (Threads REQUIRED)
+
+option(EMSCRIPTEN "Generate only emscripten JS" OFF)
+
+option(FEEDBACKFUZZ "Use Clang coverage sanitizers" OFF)
+if (FEEDBACKFUZZ)
+ SET (CMAKE_CXX_COMPILER "clang++")
+ add_compile_options("-fsanitize=address")
+ add_compile_options("-fsanitize-coverage=edge,indirect-calls,8bit-counters")
+endif()
+
+option(LARGEMEM "Allow memory usage to grow to Terabyte values -- uses 64b offsets. Slower, but allows the solver to run for much longer." OFF)
+if (LARGEMEM)
+ add_definitions(-DLARGE_OFFSETS)
+endif()
+
+macro(add_sanitize_option flagname)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flagname}" )
+endmacro()
+
+option(SANITIZE "Use Clang sanitizers. You MUST use clang++ as the compiler for this to work" OFF)
+
+include(CheckCXXCompilerFlag)
+macro(add_cxx_flag_if_supported flagname)
+ check_cxx_compiler_flag("${flagname}" HAVE_FLAG_${flagname})
+
+ if(HAVE_FLAG_${flagname})
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flagname}" )
+ endif()
+endmacro()
+
+macro(add_sanitize_flags)
+if (SANITIZE)
+ MESSAGE(WARNING "Using clang sanitizers -- you MUST use clang++ or the compile WILL fail")
+ add_sanitize_option("-fsanitize=address")
+ add_sanitize_option("-fsanitize=integer")
+ add_sanitize_option("-fsanitize=undefined")
+
+ add_sanitize_option("-fsanitize=null")
+ add_sanitize_option("-fsanitize=alignment")
+ #add_sanitize_option("-fno-sanitize-recover")
+
+ add_sanitize_option("-fsanitize=return")
+ add_sanitize_option("-fsanitize=bounds")
+ add_sanitize_option("-fsanitize=float-divide-by-zero")
+ add_sanitize_option("-fsanitize=integer-divide-by-zero")
+ add_sanitize_option("-fsanitize=unsigned-integer-overflow")
+ add_sanitize_option("-fsanitize=signed-integer-overflow")
+ add_sanitize_option("-fsanitize=bool")
+ add_sanitize_option("-fsanitize=enum")
+ add_sanitize_option("-fsanitize=float-cast-overflow")
+
+ #add_sanitize_option("-Weverything")
+ #add_sanitize_option("-Wshorten-64-to-32")
+ #add_sanitize_option("-Wweak-vtables")
+ #add_sanitize_option("-Wsign-conversion")
+ #add_sanitize_option("-Wconversion")
+endif()
+endmacro()
+
+option(USE_GAUSS "Build with every-level GAUSS enabled" OFF)
+if (USE_GAUSS)
+ add_definitions(-DUSE_GAUSS)
+ message(STATUS "Building with GAUSS enabled at every level")
+endif()
+
+option(ENABLE_ASSERTIONS "Build with assertions enabled" ON)
+message(STATUS "build type is ${CMAKE_BUILD_TYPE}")
+if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ set(ENABLE_ASSERTIONS OFF)
+endif()
+
+if (ENABLE_ASSERTIONS)
+ # NDEBUG was already removed.
+else()
+ # Note this definition doesn't appear in the cache variables.
+ add_definitions(-DNDEBUG)
+ add_cxx_flag_if_supported("-fno-stack-protector")
+ add_definitions(-D_FORTIFY_SOURCE=0)
+endif()
+
+# Note: O3 gives slight speed increase, 1 more solved from SAT Comp'14 @ 3600s
+if (NOT MSVC)
+ add_compile_options( -g)
+ add_compile_options( -pthread )
+
+ add_compile_options("$<$<CONFIG:RELWITHDEBINFO>:-O2>")
+ add_compile_options("$<$<CONFIG:RELWITHDEBINFO>:-mtune=native>")
+
+ add_compile_options("$<$<CONFIG:RELEASE>:-O2>")
+ add_compile_options("$<$<CONFIG:RELEASE>:-g0>")
+ add_compile_options("$<$<CONFIG:RELEASE>:-mtune=native>")
+
+ add_compile_options("$<$<CONFIG:DEBUG>:-O0>")
+
+ if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -O2")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2")
+ endif()
+
+else()
+ # see https://msdn.microsoft.com/en-us/library/fwkeyyhe.aspx for details
+ # /ZI = include debug info
+ # /Wall = all warnings
+
+ add_compile_options("$<$<CONFIG:RELWITHDEBINFO>:/Ox>")
+ add_compile_options("$<$<CONFIG:RELWITHDEBINFO>:/ZI>")
+
+ add_compile_options("$<$<CONFIG:RELEASE>:/Ox>")
+ add_compile_options("$<$<CONFIG:RELEASE>:/D>")
+ add_compile_options("$<$<CONFIG:RELEASE>:/NDEBUG>")
+ add_compile_options("$<$<CONFIG:RELEASE>:/ZI>")
+
+ add_compile_options("$<$<CONFIG:DEBUG>:/Od>")
+
+ if (STATICCOMPILE)
+ # We statically link to reduce dependencies
+ foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+ # /MD -- Causes the application to use the multithread-specific and DLL-specific version of the run-time library.
+ # Defines _MT and _DLL and causes the compiler to place the library name MSVCRT.lib into the .obj file.
+ if(${flag_var} MATCHES "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif(${flag_var} MATCHES "/MD")
+
+ # /MDd -- Defines _DEBUG, _MT, and _DLL and causes the application to use the debug multithread-specific and DLL-specific version of the run-time library.
+ # It also causes the compiler to place the library name MSVCRTD.lib into the .obj file.
+ if(${flag_var} MATCHES "/MDd")
+ string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
+ endif(${flag_var} MATCHES "/MDd")
+ endforeach(flag_var)
+
+ # Creates a multithreaded executable (static) file using LIBCMT.lib.
+ add_compile_options(/MT)
+ endif()
+
+ # buffers security check
+ add_compile_options(/GS)
+
+ # Proper warning level
+ add_compile_options(/W1)
+
+ # Disable STL used in DLL-boundary warning
+ add_compile_options(/wd4251)
+ add_compile_options(/D_CRT_SECURE_NO_WARNINGS)
+
+ # Wall is MSVC's Weverything, so annoying unless used from the start
+ # and with judiciously used warning disables
+ # add_compile_options(/Wall)
+
+ # /Za = only ansi C98 & C++11
+ # /Za is not recommended for use, not tested, etc.
+ # see: http://stackoverflow.com/questions/5489326/za-compiler-directive-does-not-compile-system-headers-in-vs2010
+ # add_compile_options(/Za)
+
+ add_compile_options(/fp:precise)
+
+ # exception handling. s = The exception-handling model that catches C++ exceptions only and tells the compiler to assume that functions declared as extern "C" may throw an exception.
+ # exception handling. c = If used with s (/EHsc), catches C++ exceptions only and tells the compiler to assume that functions declared as extern "C" never throw a C++ exception.
+ add_compile_options(/EHsc)
+
+
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /INCREMENTAL:NO")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /PDBCOMPRESS")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864")
+
+ #what does this do?
+ set(DEF_INSTALL_CMAKE_DIR CMake)
+endif()
+
+option(ENABLE_TESTING "Enable testing" OFF)
+option(COVERAGE "Build with coverage check" OFF)
+option(STATICCOMPILE "Compile to static executable" OFF)
+if (COVERAGE AND NOT STATICCOMPILE)
+ MESSAGE(FATAL_ERROR "Coverage can only be computed on static compilation")
+endif()
+
+if (NOT WIN32)
+ if(NOT ENABLE_TESTING AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND NOT COVERAGE)
+ #dd_cxx_flag_if_supported("-fvisibility=hidden")
+ endif()
+ add_compile_options("-fPIC")
+
+ if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ #add_cxx_flag_if_supported("-flto")
+ else()
+ add_cxx_flag_if_supported("-mtune=native")
+ add_cxx_flag_if_supported("-Wall")
+ add_cxx_flag_if_supported("-Wextra")
+ add_cxx_flag_if_supported("-Wunused")
+ add_cxx_flag_if_supported("-Wsign-compare")
+ if (NOT CMAKE_BUILD_TYPE STREQUAL "Release")
+ add_cxx_flag_if_supported("-fno-omit-frame-pointer")
+ endif()
+ add_cxx_flag_if_supported("-Wtype-limits")
+ add_cxx_flag_if_supported("-Wuninitialized")
+ add_cxx_flag_if_supported("-Wno-deprecated")
+ add_cxx_flag_if_supported("-Wstrict-aliasing")
+ add_cxx_flag_if_supported("-Wpointer-arith")
+ add_cxx_flag_if_supported("-Wheader-guard")
+ add_cxx_flag_if_supported("-Wpointer-arith")
+ add_cxx_flag_if_supported("-Wformat-nonliteral")
+ add_cxx_flag_if_supported("-Winit-self")
+ add_cxx_flag_if_supported("-Wparentheses")
+ add_cxx_flag_if_supported("-Wunreachable-code")
+ add_cxx_flag_if_supported("-ggdb3")
+ endif()
+endif()
+
+if (COVERAGE)
+ add_compile_options("--coverage")
+ SET(CMAKE_EXE_LINKER_FLAGS "--coverage")
+endif()
+
+
+option(IPASIR "Also build IPASIR" OFF)
+
+option(LIMITMEM "*Only used for testing*. Limit memory used by CMS through number of variables" OFF)
+if (LIMITMEM)
+ add_definitions(-DLIMITMEM)
+endif()
+
+# -----------------------------------------------------------------------------
+# Uncomment these for static compilation under Linux (messes up Valgrind)
+# -----------------------------------------------------------------------------
+if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND NOT SANITIZE)
+ set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} -Wl,--discard-all -Wl,--build-id=sha1")
+endif()
+
+if ((${CMAKE_SYSTEM_NAME} MATCHES "Linux") OR (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
+ if(STATICCOMPILE)
+ MESSAGE(STATUS "Compiling for static library use")
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -Wl,--whole-archive -ldl -lpthread -Wl,--no-whole-archive -static ")
+ endif()
+
+ SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+
+ # removing -rdynamic that's automatically added
+ foreach (language CXX C)
+ set(VAR_TO_MODIFY "CMAKE_SHARED_LIBRARY_LINK_${language}_FLAGS")
+ string(REGEX REPLACE "(^| )-rdynamic($| )"
+ " "
+ replacement
+ "${${VAR_TO_MODIFY}}")
+ #message("Original (${VAR_TO_MODIFY}) is ${${VAR_TO_MODIFY}} replacement is ${replacement}")
+ set(${VAR_TO_MODIFY} "${replacement}" CACHE STRING "Default flags for ${build_config} configuration" FORCE)
+ endforeach()
+ else()
+ add_definitions(-DBOOST_TEST_DYN_LINK)
+ MESSAGE(STATUS "Compiling for dynamic library use")
+ endif()
+endif()
+
+if ((${CMAKE_SYSTEM_NAME} MATCHES "Windows") AND (STATICCOMPILE))
+ set(Boost_USE_STATIC_LIBS ON)
+endif()
+
+if(NOT MSVC)
+ set(DEF_INSTALL_CMAKE_DIR lib/cmake/cryptominisat5)
+endif()
+
+option(SLOW_DEBUG "Use more debug flags" OFF)
+IF(SLOW_DEBUG)
+ add_definitions(-DSLOW_DEBUG)
+endif()
+
+# -----------------------------------------------------------------------------
+# Add GIT version
+# -----------------------------------------------------------------------------
+function(SetVersionNumber PREFIX VERSION_MAJOR VERSION_MINOR VERSION_PATCH)
+ set(${PREFIX}_VERSION_MAJOR ${VERSION_MAJOR} PARENT_SCOPE)
+ set(${PREFIX}_VERSION_MINOR ${VERSION_MINOR} PARENT_SCOPE)
+ set(${PREFIX}_VERSION_PATCH ${VERSION_PATCH} PARENT_SCOPE)
+ set(${PREFIX}_VERSION
+ "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
+ PARENT_SCOPE)
+endfunction()
+
+find_program (GIT_EXECUTABLE git)
+if (GIT_EXECUTABLE)
+ include(GetGitRevisionDescription)
+ get_git_head_revision(GIT_REFSPEC GIT_SHA1)
+ MESSAGE(STATUS "GIT hash found: ${GIT_SHA1}")
+else()
+ set(GIT_SHA "GIT-hash-notfound")
+endif()
+set(CMS_FULL_VERSION "5.6.3")
+
+string(REPLACE "." ";" CMS_FULL_VERSION_LIST ${CMS_FULL_VERSION})
+SetVersionNumber("PROJECT" ${CMS_FULL_VERSION_LIST})
+MESSAGE(STATUS "PROJECT_VERSION: ${PROJECT_VERSION}")
+MESSAGE(STATUS "PROJECT_VERSION_MAJOR: ${PROJECT_VERSION_MAJOR}")
+MESSAGE(STATUS "PROJECT_VERSION_MINOR: ${PROJECT_VERSION_MINOR}")
+MESSAGE(STATUS "PROJECT_VERSION_PATCH: ${PROJECT_VERSION_PATCH}")
+
+option(ONLY_SIMPLE "Only build very simplistic executable -- no Boost needed" OFF)
+
+if (NOT ONLY_SIMPLE)
+ set (boost_components "")
+ set(boost_components ${boost_components} program_options)
+ find_package( Boost 1.46 COMPONENTS ${boost_components})
+endif()
+
+option(STATS "Don't use statistics at all" OFF)
+if (STATS)
+ add_definitions( -DSTATS_NEEDED )
+ if (NOT NOSQLITE)
+ find_package(Sqlite3)
+ IF (SQLITE3_FOUND)
+ MESSAGE(STATUS "OK, Found Sqlite3!")
+ include_directories(${SQLITE3_INCLUDE_DIR})
+ add_definitions( -DUSE_SQLITE3 )
+ set(USING_SQLITE ON)
+ else ()
+ MESSAGE(STATUS "WARNING: Did not find Sqlite3, Sqlite3 support will be disabled")
+ endif ()
+ endif()
+ELSE ()
+ MESSAGE(STATUS "Not compiling detailed statistics. The system is faster without them")
+ENDIF ()
+
+# ----------
+# manpage
+# ----------
+if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ find_program(HELP2MAN_FOUND help2man)
+ if (HELP2MAN_FOUND)
+
+ set(mandir ${CMAKE_INSTALL_PREFIX}/share/man/man1)
+ # INSTALL(CODE "FILE(MAKE_DIRECTORY ${mandir})")
+
+
+ if (NOT ONLY_SIMPLE)
+ ADD_CUSTOM_TARGET(man_cms5
+ ALL
+ DEPENDS cryptominisat5
+ )
+
+ ADD_CUSTOM_COMMAND(
+ TARGET man_cms5
+ COMMAND help2man
+ ARGS --version-string=${CMS_FULL_VERSION} --help-option="--hhelp" $<TARGET_FILE:cryptominisat5> -o ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5.1
+ )
+
+ INSTALL(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5.1
+ DESTINATION ${mandir}
+ )
+
+ endif()
+ ADD_CUSTOM_TARGET(man_cms5_simple
+ ALL
+ DEPENDS cryptominisat5_simple
+ )
+
+ ADD_CUSTOM_COMMAND(
+ TARGET man_cms5_simple
+ COMMAND help2man
+ ARGS --version-string=${CMS_FULL_VERSION} --help-option="-h" $<TARGET_FILE:cryptominisat5_simple> -o ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5_simple.1
+ )
+
+ INSTALL(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5_simple.1
+ DESTINATION ${mandir}
+ )
+
+ message(STATUS "Manpage will be created and installed")
+ else()
+ MESSAGE(STATUS "Cannot find help2man, not creating manpage")
+ endif()
+else()
+ MESSAGE(STATUS "Not on Linux, not creating manpage")
+endif()
+
+# -----------------------------------------------------------------------------
+# Look for ZLIB (For reading zipped CNFs)
+# -----------------------------------------------------------------------------
+option(NOZLIB "Don't use zlib" OFF)
+
+# cannot currently compile static zlib under Windows
+if (NOT NOZLIB AND NOT (STATICCOMPILE AND WIN32))
+ find_package(ZLIB)
+ IF (ZLIB_FOUND)
+ MESSAGE(STATUS "OK, Found ZLIB!")
+ include_directories(${ZLIB_INCLUDE_DIR})
+ link_directories(${ZLIB_LIB_DIR})
+ add_definitions( -DUSE_ZLIB )
+ ELSE (ZLIB_FOUND)
+ MESSAGE(STATUS "WARNING: Did not find ZLIB, gzipped file support will be disabled")
+ ENDIF (ZLIB_FOUND)
+endif()
+
+option(NOVALGRIND "Don't use valgrind" ON)
+find_package(Valgrind)
+if (VALGRIND_FOUND AND NOT NOVALGRIND)
+ message(STATUS "OK, Found Valgrind. Using valgrind client requests to mark freed clauses in pool as undefined")
+ add_definitions(-DUSE_VALGRIND)
+ include_directories(${VALGRIND_INCLUDE_DIR})
+else()
+ message(STATUS "Cannot find valgrind or it's disabled, we will not be able to mark memory pool objects as undefined")
+endif()
+
+# -----------------------------------------------------------------------------
+# Look for M4RI (for Gauss)
+# -----------------------------------------------------------------------------
+option(REQUIRE_M4RI "Must use m4ri" OFF)
+option(NOM4RI "Don't use m4ri" OFF)
+if (NOT NOM4RI)
+ find_package(M4RI)
+ IF (M4RI_FOUND)
+ MESSAGE(STATUS "OK, Found M4RI lib at ${M4RI_LIBRARIES} and includes at ${M4RI_INCLUDE_DIRS}")
+ add_definitions( -DUSE_M4RI )
+ ELSE (M4RI_FOUND)
+ MESSAGE(WARNING "Did not find M4RI, XOR detection&manipulation disabled")
+ if (REQUIRE_M4RI)
+ MESSAGE(FATAL_ERROR "REQUIRE_M4RI was set but M4RI was not found!")
+ endif()
+ ENDIF (M4RI_FOUND)
+endif()
+
+#query definitions
+get_directory_property( DirDefs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
+set(COMPILE_DEFINES)
+foreach( d ${DirDefs} )
+ # message( STATUS "Found Define: " ${d} )
+ set(COMPILE_DEFINES "${COMPILE_DEFINES} -D${d}")
+endforeach()
+message(STATUS "All defines at startup: ${COMPILE_DEFINES}")
+
+
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
+
+macro(cmsat_add_public_header LIBTARGET HEADER)
+ get_target_property(EXISTING_PUBLIC_HEADERS ${LIBTARGET} PUBLIC_HEADER)
+ if(EXISTING_PUBLIC_HEADERS)
+ list(APPEND EXISTING_PUBLIC_HEADERS "${HEADER}")
+ else()
+ # Do not append to empty list
+ set(EXISTING_PUBLIC_HEADERS "${HEADER}")
+ endif()
+ set_target_properties(
+ ${LIBTARGET}
+ PROPERTIES
+ PUBLIC_HEADER "${EXISTING_PUBLIC_HEADERS}"
+ )
+endmacro()
+
+# -----------------------------------------------------------------------------
+# Look for python
+# -----------------------------------------------------------------------------
+option(ENABLE_PYTHON_INTERFACE "Enable Python interface" ON)
+option(FORCE_PYTHON2 OFF)
+if (NOT FORCE_PYTHON2)
+ find_package(PythonInterp 3)
+ find_package(PythonLibs 3)
+ message(STATUS "Python 3 -- PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}")
+ message(STATUS "Python 3 -- PYTHON_LIBRARIES=${PYTHON_LIBRARIES}")
+ message(STATUS "Python 3 -- PYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIRS}")
+ message(STATUS "Python 3 -- PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}")
+endif()
+
+if (NOT (PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND PYTHON_INCLUDE_DIRS))
+ unset(PYTHONLIBS_FOUND CACHE)
+ unset(PYTHON_LIBRARIES CACHE)
+ unset(PYTHON_INCLUDE_PATH CACHE)
+ unset(PYTHON_INCLUDE_DIRS CACHE)
+ unset(PYTHON_DEBUG_LIBRARIES CACHE)
+ unset(PYTHONLIBS_VERSION_STRING CACHE)
+
+ unset(PYTHONINTERP_FOUND CACHE)
+ unset(PYTHON_EXECUTABLE CACHE)
+ unset(PYTHON_VERSION_STRING CACHE)
+
+ message(STATUS "Python 3 not fully found or Python 2 has been forced -- trying Python 2.7")
+ find_package(PythonInterp 2.7)
+ find_package(PythonLibs 2.7)
+
+ message(STATUS "Python 2.7 -- PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}")
+ message(STATUS "Python 2.7 -- PYTHON_LIBRARIES=${PYTHON_LIBRARIES}")
+ message(STATUS "Python 2.7 -- PYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIRS}")
+ message(STATUS "Python 2.7 -- PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}")
+endif()
+
+#command-line parsing executable needs boost program-options
+if(NOT Boost_FOUND)
+ set(ONLY_SIMPLE ON)
+ message(STATUS "Only building executable with few command-line options because the boost program_options library were not available")
+endif()
+
+# -----------------------------------------------------------------------------
+# Provide an export name to be used by targets that wish to export themselves.
+# -----------------------------------------------------------------------------
+set(CRYPTOMINISAT5_EXPORT_NAME "cryptominisat5Targets")
+
+add_subdirectory(src cmsat5-src)
+
+# -----------------------------------------------------------------------------
+# Add uninstall target for makefiles
+# -----------------------------------------------------------------------------
+configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY
+)
+
+add_custom_target(uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
+ DEPENDS uninstall_pycyrptosat
+)
+
+# -----------------------------------------------------------------------------
+# Testing
+# -----------------------------------------------------------------------------
+if (ENABLE_TESTING)
+ enable_testing()
+
+ #use valgrind
+ find_program(MEMORYCHECK_COMMAND valgrind)
+ if(MEMORYCHECK_COMMAND-NOTFOUND)
+ message(WARNING "Valgrind not found. Test will be run without valgrind.")
+ else()
+ message(STATUS "Valgrind found: ${MEMORYCHECK_COMMAND}. Running test using it.")
+ set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full")
+ endif()
+
+ # too unstable to add (depends on CPU)
+ #if (NOT STATS AND NOT SLOW_DEBUG)
+ #add_test (NAME library_speed_test COMMAND tests/library_speed_test)
+ #endif()
+
+ message(STATUS "Testing is enabled")
+ set(UNIT_TEST_EXE_SUFFIX "Tests" CACHE STRING "Suffix for Unit test executable")
+ add_subdirectory(tests)
+ add_subdirectory(scripts/fuzz)
+
+else()
+ message(WARNING "Testing is disabled")
+endif()
+
+if (ENABLE_PYTHON_INTERFACE)
+ if (PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND PYTHON_INCLUDE_DIRS AND NOT COVERAGE)
+ message(STATUS "Found python interpreter, libs and header files")
+ message(STATUS "Building python interface")
+ add_subdirectory(python pycryptosat)
+ else()
+ message(WARNING "Cannot find python interpreter, libs and header files, cannot build python interface")
+ endif()
+endif()
+
+# -----------------------------------------------------------------------------
+# Export our targets so that other CMake based projects can interface with
+# the build of cryptominisat5 in the build-tree
+# -----------------------------------------------------------------------------
+set(CRYPTOMINISAT5_TARGETS_FILENAME "cryptominisat5Targets.cmake")
+set(CRYPTOMINISAT5_CONFIG_FILENAME "cryptominisat5Config.cmake")
+set(CRYPTOMINISAT5_STATIC_DEPS
+ ${SQLITE3_LIBRARIES}
+ ${M4RI_LIBRARIES}
+)
+
+# Export targets
+set(MY_TARGETS libcryptominisat5 cryptominisat5_simple)
+if (NOT ONLY_SIMPLE)
+ set(MY_TARGETS ${MY_TARGETS} cryptominisat5)
+endif()
+if (IPASIR)
+ set(MY_TARGETS ${MY_TARGETS} ipasircryptominisat5)
+endif()
+export(
+ TARGETS ${MY_TARGETS}
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/${CRYPTOMINISAT5_TARGETS_FILENAME}"
+)
+
+# Create cryptominisat5Config file
+set(EXPORT_TYPE "Build-tree")
+set(CONF_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/include")
+configure_file(cryptominisat5Config.cmake.in
+ "${CMAKE_CURRENT_BINARY_DIR}/${CRYPTOMINISAT5_CONFIG_FILENAME}" @ONLY
+)
+
+set(CRYPTOMINISAT5_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH
+ "Installation directory for cryptominisat5 CMake files")
+
+# Create cryptominisat5Config file
+set(EXPORT_TYPE "installed")
+set(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include")
+configure_file(cryptominisat5Config.cmake.in
+ "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/${CRYPTOMINISAT5_CONFIG_FILENAME}" @ONLY
+)
+
+install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/${CRYPTOMINISAT5_CONFIG_FILENAME}"
+ DESTINATION "${CRYPTOMINISAT5_INSTALL_CMAKE_DIR}"
+)
+
+# Install the export set for use with the install-tree
+install(
+ EXPORT ${CRYPTOMINISAT5_EXPORT_NAME}
+ DESTINATION "${CRYPTOMINISAT5_INSTALL_CMAKE_DIR}"
+)
diff --git a/cryptominisat5/cryptominisat-5.6.3/Dockerfile b/cryptominisat5/cryptominisat-5.6.3/Dockerfile
new file mode 100644
index 000000000..eb2a57041
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/Dockerfile
@@ -0,0 +1,57 @@
+FROM ubuntu:16.04
+
+LABEL maintainer="Mate Soos"
+LABEL version="5.0"
+LABEL Description="An advanced SAT solver"
+
+# get curl, etc
+RUN apt-get update && apt-get install --no-install-recommends -y software-properties-common && rm -rf /var/lib/apt/lists/*
+RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test && rm -rf /var/lib/apt/lists/*
+RUN apt-get update && apt-get install --no-install-recommends -y libboost-program-options-dev gcc g++ make cmake zlib1g-dev wget && rm -rf /var/lib/apt/lists/*
+
+# get M4RI
+RUN wget https://bitbucket.org/malb/m4ri/downloads/m4ri-20140914.tar.gz \
+ && tar -xvf m4ri-20140914.tar.gz
+WORKDIR m4ri-20140914
+RUN ./configure \
+ && make \
+ && make install \
+ && make clean
+
+# set up build env
+RUN groupadd -r solver -g 433
+RUN useradd -u 431 -r -g solver -d /home/solver -s /sbin/nologin -c "Docker image user" solver
+RUN mkdir -p /home/solver/cms
+RUN chown -R solver:solver /home/solver
+
+# build CMS
+USER root
+COPY . /home/solver/cms
+WORKDIR /home/solver/cms
+RUN mkdir build
+WORKDIR /home/solver/cms/build
+RUN cmake .. \
+ && make -j6 \
+ && make install \
+ && rm -rf *
+
+# set up for running
+USER solver
+WORKDIR /home/solver/
+ENTRYPOINT ["cryptominisat5"]
+
+# --------------------
+# HOW TO USE
+# --------------------
+# on file through STDIN:
+# zcat mizh-md5-47-3.cnf.gz | docker run --rm -i -a stdin -a stdout cms
+
+# on a file:
+# docker run --rm -v `pwd`/myfile.cnf.gz:/in cms in
+
+# echo through STDIN:
+# echo "1 2 0" | docker run --rm -i -a stdin -a stdout cms
+
+# hand-written CNF:
+# docker run --rm -ti -a stdin -a stdout cms
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/Dockerfile.web b/cryptominisat5/cryptominisat-5.6.3/Dockerfile.web
new file mode 100644
index 000000000..1cb5c5c03
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/Dockerfile.web
@@ -0,0 +1,54 @@
+FROM ubuntu:16.04
+
+LABEL maintainer="Mate Soos"
+LABEL version="5.0"
+LABEL Description="An advanced SAT solver"
+
+ENV LOCALE en_US.UTF-8
+EXPOSE 80
+
+RUN apt-get update && \
+ DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y apache2 apache2-utils libapache2-mod-php php-sqlite3 && rm -rf /var/lib/apt/lists/*
+
+# generate dygraph & get nodejs
+# cd web
+# ./install_web.sh
+
+# Setup Apache
+RUN mkdir -p /var/www/site
+RUN chown -R www-data: /var/www/site
+
+# Enable apache mods.
+RUN a2enmod php7.0
+RUN a2enmod rewrite
+
+# Update the PHP.ini file, enable <? ?> tags and quieten logging.
+RUN sed -i "s/short_open_tag = Off/short_open_tag = On/" /etc/php/7.0/apache2/php.ini
+RUN sed -i "s/error_reporting = .*$/error_reporting = E_ERROR | E_WARNING | E_PARSE/" /etc/php/7.0/apache2/php.ini
+
+# Expose apache
+EXPOSE 80
+
+# Manually set up the apache environment variables
+ENV APACHE_RUN_USER www-data
+ENV APACHE_RUN_GROUP www-data
+ENV APACHE_LOG_DIR /var/log/apache2
+ENV APACHE_LOCK_DIR /var/lock/apache2
+ENV APACHE_PID_FILE /var/run/apache2.pid
+
+# copy dirs
+COPY ./web/ /var/www/site
+ADD ./web/apache-config.conf /etc/apache2/sites-enabled/000-default.conf
+CMD /usr/sbin/apache2ctl -D FOREGROUND
+
+# --------------------
+# HOW TO USE
+# --------------------
+
+# run normally:
+# docker run --rm -p 8080:80 -i -t cmsweb
+# -> will be accessible from host on 8080
+
+# how to debug:
+# docker run --rm -p 8080:80 -i -t cmsweb bash
+# -> will drop to shell
diff --git a/cryptominisat5/cryptominisat-5.6.3/LICENSE.txt b/cryptominisat5/cryptominisat-5.6.3/LICENSE.txt
new file mode 100644
index 000000000..8ee8604ce
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/LICENSE.txt
@@ -0,0 +1,55 @@
+CryptoMiniSat Copyright (c) Mate Soos 2009-2018
+All rights reserved.
+
+The general priciple of the licensing is as follows. Everything that's
+needed to run/build/install/link the system is MIT licensed. This allows
+easy distribution and running of the system everywhere. Files that
+have no copyright header are also MIT licensed.
+
+Everything else that's not needed to run/build/install/link is usually GPLv2
+licensed or compatible (see the copyright headers.) The only exceptions are the
+following files in docs/:
+* `splncs03.bat` which is under the LPPL
+* `ieee.cls` which is covered by the IEEE Copyright Policy
+
+
+MIT License
+===================
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+GPL License v2
+===================
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; version 2
+of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.
diff --git a/cryptominisat5/cryptominisat-5.6.3/README.markdown b/cryptominisat5/cryptominisat-5.6.3/README.markdown
new file mode 100644
index 000000000..371888364
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/README.markdown
@@ -0,0 +1,506 @@
+[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
+[![Linux build](https://travis-ci.org/msoos/cryptominisat.svg?branch=master)](https://travis-ci.org/msoos/cryptominisat)
+[![Windows build](https://ci.appveyor.com/api/projects/status/8d000iy63xu7eau5?svg=true)](https://ci.appveyor.com/project/msoos/cryptominisat)
+[![Coverity](https://scan.coverity.com/projects/507/badge.svg)](https://scan.coverity.com/projects/507)
+[![code coverage](https://coveralls.io/repos/msoos/cryptominisat/badge.svg?branch=master)](https://coveralls.io/r/msoos/cryptominisat?branch=master)
+[![Codacy Badge](https://api.codacy.com/project/badge/Grade/f043efa22ea64e9ba44fde0f3a4fb09f)](https://www.codacy.com/app/soos.mate/cryptominisat?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=msoos/cryptominisat&amp;utm_campaign=Badge_Grade)
+[![Docker Hub](https://img.shields.io/badge/docker-latest-blue.svg)](https://hub.docker.com/r/msoos/cryptominisat/)
+
+
+CryptoMiniSat SAT solver
+===========================================
+
+This system provides CryptoMiniSat, an advanced SAT solver. The system has 3
+interfaces: command-line, C++ library and python. The command-line interface
+takes a [cnf](http://en.wikipedia.org/wiki/Conjunctive_normal_form) as an
+input in the [DIMACS](http://www.satcompetition.org/2009/format-benchmarks2009.html)
+format with the extension of XOR clauses. The C++ interface mimics this except
+that it allows for a more efficient system, with assumptions and multiple
+`solve()` calls. A C compatible wrapper is also provided. The python interface provides
+a high-level yet efficient API to use most of the C++ interface with ease.
+
+When citing, always reference our [SAT 2009 conference paper](https://link.springer.com/chapter/10.1007%2F978-3-642-02777-2_24), bibtex record is [here](http://dblp.uni-trier.de/rec/bibtex/conf/sat/SoosNC09).
+
+
+Docker usage
+-----
+
+To run on file `myfile.cnf`:
+
+```
+docker pull msoos/cryptominisat
+cat myfile.cnf | docker run --rm -i msoos/cryptominisat
+```
+
+To run on a hand-written CNF:
+
+```
+docker pull msoos/cryptominisat
+echo "1 2 0" | docker run --rm -i msoos/cryptominisat
+```
+
+To run on the file `/home/myfolder/myfile.cnf.gz` by mounting it (may be faster):
+
+```
+docker pull msoos/cryptominisat
+docker run --rm -v /home/myfolder/myfile.cnf.gz:/f msoos/cryptominisat f
+```
+
+To build and run locally:
+
+```
+git clone https://github.com/msoos/cryptominisat.git
+cd cryptominisat
+git submodule update --init
+docker build -t cms .
+cat myfile.cnf | docker run --rm -i cms
+```
+
+To build and run the web interface:
+
+```
+git clone https://github.com/msoos/cryptominisat.git
+cd cryptominisat
+git submodule update --init
+docker build -t cmsweb -f Dockerfile.web .
+docker run --rm -i -p 80:80 cmsweb
+```
+
+
+Compiling in Linux
+-----
+
+To build and install, issue:
+
+```
+sudo apt-get install build-essential cmake
+# not required but very useful
+sudo apt-get install libzip-dev libboost-program-options-dev libm4ri-dev libsqlite3-dev
+tar xzvf cryptominisat-version.tar.gz
+cd cryptominisat-version
+mkdir build && cd build
+cmake ..
+make
+sudo make install
+sudo ldconfig
+```
+
+Compiling in Mac OSX
+-----
+
+First, you must get Homebew from https://brew.sh/ then:
+
+```
+brew install cmake boost zlib
+tar xzvf cryptominisat-version.tar.gz
+cd cryptominisat-version
+mkdir build && cd build
+cmake ..
+make
+sudo make install
+```
+
+Compiling in Windows
+-----
+
+You will need python installed, then for Visual Studio 2015:
+
+```
+C:\> [ download cryptominisat-version.zip ]
+C:\> unzip cryptominisat-version.zip
+C:\> rename cryptominisat-version cms
+C:\> cd cms
+C:\cms> mkdir build
+C:\cms> cd build
+
+C:\cms\build> [ download http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.zip ]
+C:\cms\build> unzip boost_1_59_0.zip
+C:\cms\build> mkdir boost_1_59_0_install
+C:\cms\build> cd boost_1_59_0
+C:\cms\build\boost_1_59_0> bootstrap.bat --with-libraries=program_options
+C:\cms\build\boost_1_59_0> b2 --with-program_options address-model=64 toolset=msvc-14.0 variant=release link=static threading=multi runtime-link=static install --prefix="C:\cms\build\boost_1_59_0_install" > boost_install.out
+C:\cms\build\boost_1_59_0> cd ..
+
+C:\cms\build> git clone https://github.com/madler/zlib
+C:\cms\build> cd zlib
+C:\cms\build\zlib> git checkout v1.2.8
+C:\cms\build\zlib> mkdir build
+C:\cms\build\zlib> mkdir myinstall
+C:\cms\build\zlib> cd build
+C:\cms\build\zlib\build> cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=C:\cms\build\zlib\myinstall ..
+C:\cms\build\zlib\build> msbuild /t:Build /p:Configuration=Release /p:Platform="x64" zlib.sln
+C:\cms\build\zlib\build> msbuild INSTALL.vcxproj
+C:\cms\build> cd ..\..
+
+C:\cms\build> cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release -DSTATICCOMPILE=ON -DZLIB_ROOT=C:\cms\build\zlib\myinstall -DBOOST_ROOT=C:\cms\build\boost_1_59_0_install ..
+C:\cms\build> cmake --build --config Release .
+```
+
+You now have the static binary under `C:\cms\build\Release\cryptominisat5.exe`
+
+Compiling under Cygwin64 in Windows
+-----
+
+This is just a rough guide, but it should work. Compiling with Visual Studio may be easier, and better, though:
+
+```
+get boost from Boost.org e.g. boost_1_66_0.tar.gz
+$ tar xzvf cryptominisat-version.tar.gz
+$ cd cryptominisat-version
+$ mkdir build
+$ cd build
+$ gunzip -c ../../boost_1_66_0.tar.gz | tar -xvof -
+$ cd boost_1_66_0/
+$ ./bootstrap.sh --with-libraries=program_options
+$ ./b2
+$ export BOOST_ROOT=$(pwd)
+$ cd ..
+$ cmake ..
+$ make
+$ make install
+$ cp ./boost_1_66_0/bin.v2/libs/program_options/build/gcc-gnu-6.4.0/release/threadapi-pthread/threading-multi/cygboost_program_options.dll /usr/local/bin
+```
+
+Command-line usage
+-----
+
+Let's take the file:
+```
+p cnf 3 3
+1 0
+-2 0
+-1 2 3 0
+```
+
+The file has 3 variables and 3 clauses, this is reflected in the header
+`p cnf 3 3` which gives the number of variables as the first number and the number of clauses as the second.
+Every clause is ended by '0'. The clauses say: 1 must be True, 2
+must be False, and either 1 has to be False, 2 has to be True or 3 has to be
+True. The only solution to this problem is:
+```
+cryptominisat5 --verb 0 file.cnf
+s SATISFIABLE
+v 1 -2 3 0
+```
+
+Which means, that setting variable 1 True, variable 2 False and variable 3 True satisfies the set of constraints (clauses) in the CNF. If the file had contained:
+```
+p cnf 3 4
+1 0
+-2 0
+-3 0
+-1 2 3 0
+```
+
+Then there is no solution and the solver returns `s UNSATISFIABLE`.
+
+Python usage
+-----
+The python module works with both Python 2 and Python 3. It must be compiled as per (notice "python-dev"):
+
+```
+sudo apt-get install build-essential cmake
+sudo apt-get install libzip-dev libboost-program-options-dev libm4ri-dev libsqlite3-dev
+sudo apt-get install python3-setuptools python3-dev
+tar xzvf cryptominisat-version.tar.gz
+cd cryptominisat-version
+mkdir build && cd build
+cmake ..
+make
+sudo make install
+sudo ldconfig
+
+```
+
+You can then use it as:
+
+```
+>>> from pycryptosat import Solver
+>>> s = Solver()
+>>> s.add_clause([1])
+>>> s.add_clause([-2])
+>>> s.add_clause([3])
+>>> s.add_clause([-1, 2, 3])
+>>> sat, solution = s.solve()
+>>> print sat
+True
+>>> print solution
+(None, True, False, True)
+```
+
+We can also try to assume any variable values for a single solver run:
+```
+>>> sat, solution = s.solve([-3])
+>>> print sat
+False
+>>> print solution
+None
+>>> sat, solution = s.solve()
+>>> print sat
+True
+>>> print solution
+(None, True, False, True)
+```
+
+For more detailed usage instructions, please see the README.rst under the `python`
+directory.
+
+Library usage
+-----
+The library uses a variable numbering scheme that starts from 0. Since 0 cannot
+be negated, the class `Lit` is used as: `Lit(variable_number, is_negated)`. As
+such, the 1st CNF above would become:
+
+```
+#include <cryptominisat5/cryptominisat.h>
+#include <assert.h>
+#include <vector>
+using std::vector;
+using namespace CMSat;
+
+int main()
+{
+ SATSolver solver;
+ vector<Lit> clause;
+
+ //Let's use 4 threads
+ solver.set_num_threads(4);
+
+ //We need 3 variables
+ solver.new_vars(3);
+
+ //adds "1 0"
+ clause.push_back(Lit(0, false));
+ solver.add_clause(clause);
+
+ //adds "-2 0"
+ clause.clear();
+ clause.push_back(Lit(1, true));
+ solver.add_clause(clause);
+
+ //adds "-1 2 3 0"
+ clause.clear();
+ clause.push_back(Lit(0, true));
+ clause.push_back(Lit(1, false));
+ clause.push_back(Lit(2, false));
+ solver.add_clause(clause);
+
+ lbool ret = solver.solve();
+ assert(ret == l_True);
+ assert(solver.get_model()[0] == l_True);
+ assert(solver.get_model()[1] == l_False);
+ assert(solver.get_model()[2] == l_True);
+ std::cout
+ << "Solution is: "
+ << solver.get_model()[0]
+ << ", " << solver.get_model()[1]
+ << ", " << solver.get_model()[2]
+ << std::endl;
+
+ return 0;
+}
+```
+
+The library usage also allows for assumptions. We can add these lines just
+before the `return 0;` above:
+```
+vector<Lit> assumptions;
+assumptions.push_back(Lit(2, true));
+lbool ret = solver.solve(&assumptions);
+assert(ret == l_False);
+
+lbool ret = solver.solve();
+assert(ret == l_True);
+```
+
+Since we assume that variabe 2 must be false, there is no solution. However,
+if we solve again, without the assumption, we get back the original solution.
+Assumptions allow us to assume certain literal values for a _specific run_ but
+not all runs -- for all runs, we can simply add these assumptions as 1-long
+clauses.
+
+Multiple solutions
+-----
+
+To find multiple solutions to your problem, just run the solver in a loop
+and ban the previous solution found:
+
+```
+while(true) {
+ lbool ret = solver->solve();
+ if (ret != l_True) {
+ assert(ret == l_False);
+ //All solutions found.
+ exit(0);
+ }
+
+ //Use solution here. print it, for example.
+
+ //Banning found solution
+ vector<Lit> ban_solution;
+ for (uint32_t var = 0; var < solver->nVars(); var++) {
+ if (solver->get_model()[var] != l_Undef) {
+ ban_solution.push_back(
+ Lit(var, (solver->get_model()[var] == l_True)? true : false));
+ }
+ }
+ solver->add_clause(ban_solution);
+}
+```
+
+The above loop will run as long as there are solutions. It is __highly__
+suggested to __only__ add into the new clause(`bad_solutions` above) the
+variables that are "important" or "main" to your problem. Variables that were
+only used to translate the original problem into CNF should not be added.
+This way, you will not get spurious solutions that don't differ in the main,
+important variables.
+
+Preprocessor usage
+-----
+
+Run cryptominisat5 as:
+
+```
+./cryptominisat5 -p1 input.cnf simplified.cnf
+some_sat_solver simplified.cnf > output
+./cryptominisat5 -p2 output
+```
+
+where `some_sat_solver` is a SAT solver of your choice that outputs a solution in the format of:
+
+```
+s SATISFIABLE
+v [solution] 0
+```
+
+or
+
+```
+s UNSATISFIABLE
+```
+
+You can tune the schedule of simplifications by issuing `--sched "X,Y,Z..."`. The default schedule for preprocessing is:
+
+```
+handle-comps,scc-vrepl, cache-clean, cache-tryboth,sub-impl, intree-probe, probe,
+sub-str-cls-with-bin, distill-cls, scc-vrepl, sub-impl,occ-backw-sub-str,
+occ-xor, occ-clean-implicit, occ-bve, occ-bva, occ-gates,str-impl, cache-clean,
+sub-str-cls-with-bin, distill-cls, scc-vrepl, sub-impl,str-impl, sub-impl,
+sub-str-cls-with-bin, occ-backw-sub-str, occ-bve,check-cache-size, renumber
+```
+
+It is a good idea to put `renumber` as late as possible, as it renumbers the variables for memory usage reduction.
+
+Gaussian elimination
+-----
+For building with Gaussian Elimination, you need to build as per:
+
+```
+sudo apt-get install build-essential cmake
+sudo apt-get install libzip-dev libboost-program-options-dev libm4ri-dev libsqlite3-dev
+tar xzvf cryptominisat-version.tar.gz
+cd cryptominisat-version
+mkdir build && cd build
+cmake -DUSE_GAUSS=ON ..
+make
+sudo make install
+```
+
+To use Gaussian elimination, provide a CNF with xors in it (either in CNF or XOR+CNF form) and tune the gaussian parameters. Use `--hhelp` to find all the gaussian elimination options:
+
+```
+Gauss options:
+ --iterreduce arg (=1) Reduce iteratively the matrix that is updated.We
+ effectively are moving the start to the last
+ column updated
+ --maxmatrixrows arg (=3000) Set maximum no. of rows for gaussian matrix. Too
+ large matrixes should be discarded for reasons of
+ efficiency
+ --autodisablegauss arg (=1) Automatically disable gauss when performing badly
+ --minmatrixrows arg (=5) Set minimum no. of rows for gaussian matrix.
+ Normally, too small matrixes are discarded for
+ reasons of efficiency
+ --savematrix arg (=2) Save matrix every Nth decision level
+ --maxnummatrixes arg (=3) Maximum number of matrixes to treat.
+```
+
+If any of these options seem to be non-existent, then either you forgot to compile the SAT solver with the above options, or you forgot to re-install it with `sudo make install`.
+
+Testing
+-----
+For testing you will need the GIT checkout and build as per:
+
+```
+sudo apt-get install build-essential cmake git
+sudo apt-get install libzip-dev libboost-program-options-dev libm4ri-dev libsqlite3-dev
+sudo apt-get install git python3-pip python3-setuptools python3-dev
+sudo pip3 install --upgrade pip
+sudo pip3 install lit
+git clone https://github.com/msoos/cryptominisat.git
+cd cryptominisat
+git submodule update --init
+mkdir build && cd build
+cmake -DENABLE_TESTING=ON ..
+make -j4
+make test
+sudo make install
+sudo ldconfig
+```
+
+Fuzzing
+-----
+Build for test as per above, then:
+
+```
+cd ../cryptominisat/scripts/fuzz/
+./fuzz_test.py
+```
+
+Configuring a build for a minimal binary&library
+-----
+The following configures the system to build a bare minimal binary&library. It needs a compiler, but nothing much else:
+
+```
+cmake -DONLY_SIMPLE=ON -DNOZLIB=ON -DNOM4RI=ON -DSTATS=OFF -DNOVALGRIND=ON -DENABLE_TESTING=OFF .
+```
+
+Trying different configurations
+-----
+Try solving using different reconfiguration values between 1..15 as per:
+
+```
+./cryptominisat5 --reconfat 0 --reconf 1 my_hard_problem.cnf
+./cryptominisat5 --reconfat 0 --reconf 2 my_hard_problem.cnf
+...
+./cryptominisat5 --reconfat 0 --reconf 15 my_hard_problem.cnf
+```
+
+These configurations are designed to be relatively orthogonal. Check if any of them solve a lot faster. If it does, try using that for similar problems going forward. Please do come back to the author with what you have found to work best for you.
+
+Getting learnt clauses
+-----
+As an experimental feature, you can get the learnt clauses from the system with the following code, where `lits` is filled with learnt clauses every time `get_next_small_clause` is called. The example below will eventually return all clauses of size 4 or less. You can call `end_getting_small_clauses` at any time.
+
+```
+SATSolver s;
+//fill the solver, run solve, etc.
+
+//Get all clauses of size 4 or less
+
+s->start_getting_small_clauses(4);
+
+vector<Lit> lits;
+bool ret = true;
+while (ret) {
+ bool ret = s->get_next_small_clause(lits);
+ if (ret) {
+ //deal with clause in "lits"
+ add_to_my_db(lits);
+ }
+}
+s->end_getting_small_clauses();
+```
+
+C usage
+-----
+See src/cryptominisat_c.h.in for details. This is an experimental feature.
diff --git a/cryptominisat5/cryptominisat-5.6.3/appveyor.yml b/cryptominisat5/cryptominisat-5.6.3/appveyor.yml
new file mode 100644
index 000000000..9deefaeab
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/appveyor.yml
@@ -0,0 +1,134 @@
+# branches to build
+branches:
+ # whitelist
+ only:
+ - master
+ - appveyor_debug
+
+image:
+ - Visual Studio 2015
+ # if 2015 works, this should work too
+ - Visual Studio 2017
+ # may or may not work, let's not try
+ #- Visual Studio 2013
+
+# scripts that are called at very beginning, before repo cloning
+init:
+ - git config --global core.autocrlf input
+
+
+# clone directory
+clone_folder: c:\projects\cryptominisat
+
+platform:
+ - x64
+# - x86
+
+environment:
+ global:
+ BOOST_ROOT: C:\projects\cryptominisat\boost_1_59_0_install
+ ZLIB_ROOT: C:\projects\cryptominisat\zlib\myinstall
+ PYTHON: "C:\\Python27"
+ PYTHON_ARCH: "x86"
+ PYTHON_VERSION: "2.7.13"
+ BUILD_TYPE: Release
+ APPVEYOR_SAVE_CACHE_ON_ERROR: false
+
+ # WarningLevel of 1 is ONLY SEVERE warnings, nothing else. See
+ # https://stackoverflow.com/questions/1023858/how-to-suppress-specific-msbuild-warning
+ MSBUILD_FLAGS: /maxcpucount /nologo /property:WarningLevel=1
+ matrix:
+ # No Gauss
+ - STATICCOMPILE_SETTING: OFF
+ EXTRA_FLAGS:
+ BOOST_OPTIONS:
+ - STATICCOMPILE_SETTING: ON
+ EXTRA_FLAGS:
+ BOOST_OPTIONS: runtime-link=static link=static
+ # Gauss ---
+ - STATICCOMPILE_SETTING: ON
+ BOOST_OPTIONS: runtime-link=static link=static
+ EXTRA_FLAGS: -DUSE_GAUSS=ON
+ # Largemem ---
+ - STATICCOMPILE_SETTING: ON
+ BOOST_OPTIONS: runtime-link=static link=static
+ EXTRA_FLAGS: -DLARGEMEM=ON
+
+configuration:
+ - Release
+
+before_build:
+ - echo %PYTHON% %PYTHON_VERSION% %PYTHON_ARCH%
+ #- "%PYTHON%\python -c \"import platform; print(platform.architecture())\""
+ - IF "%PLATFORM%" == "x86" ( SET CMAKE_GENERATOR="Visual Studio 14 2015")
+ - IF "%PLATFORM%" == "x64" ( SET CMAKE_GENERATOR="Visual Studio 14 2015 Win64")
+ - echo %PLATFORM%
+ - echo %CMAKE_GENERATOR%
+ - echo %configuration%
+
+ # get "lit" from python pip
+ - "%PYTHON%/python -m pip install lit"
+
+ # boost
+ - cd c:\projects\cryptominisat
+ - mkdir boost_1_59_0_install
+ - ps: . .\scripts\appveyor.ps1
+ - cd boost_1_59_0
+ - echo "Building boost.."
+ - bootstrap.bat --with-libraries=program_options
+ - cat project-config.jam
+ - b2 --with-program_options address-model=64 toolset=msvc-14.0 variant=release %BOOST_OPTIONS% threading=multi install --prefix="C:\projects\cryptominisat\boost_1_59_0_install" > boost_install.out
+
+ # zlib
+ # TODO check out http://stackoverflow.com/questions/10507893/libzip-with-visual-studio-2010
+ # below is C:\projects\cryptominisat
+ - cd C:\projects\cryptominisat
+ - git clone https://github.com/madler/zlib
+ - cd zlib
+ - git checkout v1.2.8
+ - echo %cd%
+ - mkdir build
+ - mkdir myinstall
+ - cd build
+ - cmake -G %CMAKE_GENERATOR% -DCMAKE_INSTALL_PREFIX=%ZLIB_ROOT% ..
+ - if %PLATFORM%==x86 call msbuild %MSBUILD_FLAGS% /t:Build /p:Configuration=%CONFIGURATION% /p:Platform="x86" zlib.sln
+ - if %PLATFORM%==x64 call msbuild %MSBUILD_FLAGS% /t:Build /p:Configuration=%CONFIGURATION% /p:Platform="x64" zlib.sln
+ - msbuild %MSBUILD_FLAGS% INSTALL.vcxproj
+
+ # build CMS
+ - echo Running cmake...
+ - cd c:\projects\cryptominisat
+ - git submodule update --init --recursive
+ - mkdir build
+ - cd build
+ - cmake --version
+ # AppVeyor is broken, its python was compiled with MSVC 9.0 which doesn't understand atomic
+ # so the python interface cannot work.
+ - cmake -G %CMAKE_GENERATOR% %EXTRA_FLAGS% -DENABLE_TESTING=%STATICCOMPILE_SETTING% -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DSTATICCOMPILE=%STATICCOMPILE_SETTING% -DZLIB_ROOT=%ZLIB_ROOT% -DENABLE_PYTHON_INTERFACE=OFF -DBoost_DEBUG=1 ..
+ - ls
+
+after_build:
+ - call ctest -V -C %CONFIGURATION%
+ # - call DUMPBIN C:\Program Files\cryptominisat5\bin\cryptominisat5_simple.exe /ALL
+ # - call "C:\Program Files\cryptominisat5\bin\cryptominisat5_simple.exe" --help
+ - if %STATICCOMPILE_SETTING%==ON call "C:\Program Files\cryptominisat5\bin\cryptominisat5.exe" --help
+ - echo %APPVEYOR_BUILD_FOLDER%
+ - 7z a c:\projects\cryptominisat\cryptominisat.zip %APPVEYOR_BUILD_FOLDER%\build -tzip
+ - cd c:\projects\cryptominisat
+
+
+build:
+ project: build\INSTALL.vcxproj
+ parallel: true
+ verbosity: minimal
+
+
+artifacts:
+ - path: cryptominisat.zip
+ name: cryptominisat.zip
+
+deploy_script:
+ #- cd c:\projects\cryptominisat
+ #- curl -T cryptominisat.zip --user %ACCOUNT% https://someplace/
+
+test: off
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/AddGTestSuite.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/AddGTestSuite.cmake
new file mode 100644
index 000000000..0dbe1ec02
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/AddGTestSuite.cmake
@@ -0,0 +1,26 @@
+# Sets for the current directory (and below) the testsuite to use.
+# This macro should be used with the AddSTPGTest function.
+macro(AddGTestSuite TESTSUITENAME)
+ set(TESTSUITE "${TESTSUITENAME}") # Unit test group name
+ # Setup custom target
+ add_custom_target(${TESTSUITE})
+ add_dependencies(check ${TESTSUITE})
+
+ if(USE_VALGRIND)
+ set(LIT_EXTRA_FLAGS --vg --vg-leak)
+ else()
+ set(LIT_EXTRA_FLAGS "")
+ endif()
+
+ add_custom_command(TARGET ${TESTSUITE}
+ POST_BUILD
+ COMMAND ${LIT_TOOL} ${LIT_ARGS} ${LIT_EXTRA_FLAGS} ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Running ${TESTSUITE}"
+ )
+
+ # Setup lit configuration
+ configure_file(${CMAKE_SOURCE_DIR}/tests/lit-unit-tests-common.site.cfg.in
+ ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
+ @ONLY@
+ )
+endmacro()
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/AddSTPGTest.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/AddSTPGTest.cmake
new file mode 100644
index 000000000..25dc7401e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/AddSTPGTest.cmake
@@ -0,0 +1,33 @@
+# AddSTPGTest(<sourcefile> [<defines> ...])
+#
+# Adds a GoogleTest to the current test suite (${TESTSUITE})
+# with executable name <sourcefile> with the file extension removed and
+# the UNIT_TEST_EXE_SUFFIX appended.
+# The executable will be linked with libstp.
+# Remaining arguments to this function are interpreted as preprocessor macros
+# to defines.
+#
+# e.g.
+# AddSTPGTest(mysimpleprogram.cpp FOO=15 BAR=\"a string\")
+#
+function(AddSTPGTest sourcefile)
+ get_filename_component(testname ${sourcefile} NAME_WE)
+
+ # testname has suffix because lit expects this
+ set(testname "${testname}${UNIT_TEST_EXE_SUFFIX}")
+
+ add_executable(${testname} EXCLUDE_FROM_ALL ${sourcefile})
+
+ # Add define flags requested by users
+ list(LENGTH ARGN LEN_ARGN)
+ if(LEN_ARGN GREATER 0)
+ set_property(TARGET ${testname} APPEND PROPERTY COMPILE_DEFINITIONS ${ARGN})
+ #message(STATUS "Added flags to test ${testname} ${ARGN}")
+ endif()
+
+ target_link_libraries(${testname} libstp ${GTEST_BOTH_LIBRARIES})
+
+ # Add dependency so that building the testsuite
+ # will cause this test (testname) to be built
+ add_dependencies(${TESTSUITE} ${testname})
+endfunction()
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindM4RI.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindM4RI.cmake
new file mode 100644
index 000000000..e9f1c909c
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindM4RI.cmake
@@ -0,0 +1,67 @@
+# - Try to find libm4ri
+find_package(PkgConfig)
+pkg_check_modules(PC_M4RI QUIET libm4ri)
+set(M4RI_DEFINITIONS ${PC_M4RI_CFLAGS_OTHER})
+
+MACRO(DBG_MSG _MSG)
+ # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}):\n${_MSG}")
+ENDMACRO(DBG_MSG)
+
+SET (M4RI_POSSIBLE_ROOT_DIRS
+ "${M4RI_ROOT_DIR}"
+ "$ENV{M4RI_ROOT_DIR}"
+ "$ENV{M4RI_DIR}"
+ "$ENV{M4RI_HOME}"
+ /usr/local
+ /usr
+ )
+
+FIND_PATH(M4RI_ROOT_DIR
+ NAMES
+ include/m4ri/m4ri.h
+ PATHS ${M4RI_POSSIBLE_ROOT_DIRS}
+)
+DBG_MSG("M4RI_ROOT_DIR=${M4RI_ROOT_DIR}")
+
+SET(M4RI_INCDIR_SUFFIXES
+ include
+ m4ri/include
+ m4ri
+)
+DBG_MSG("M4RI_INCDIR_SUFFIXES=${M4RI_INCDIR_SUFFIXES}")
+
+FIND_PATH(M4RI_INCLUDE_DIRS
+ NAMES m4ri/m4ri.h
+ PATHS ${M4RI_ROOT_DIR}
+ PATH_SUFFIXES ${M4RI_INCDIR_SUFFIXES}
+ NO_CMAKE_SYSTEM_PATH
+)
+DBG_MSG("M4RI_INCLUDE_DIRS=${M4RI_INCLUDE_DIRS}")
+
+SET(M4RI_LIBDIR_SUFFIXES
+ .libs
+ lib
+ lib/m4ri
+ m4ri/lib
+)
+DBG_MSG("M4RI_LIBDIR_SUFFIXES=${M4RI_LIBDIR_SUFFIXES}")
+
+
+find_library(M4RI_LIBRARIES
+ NAMES m4ri libm4ri
+ PATHS ${M4RI_ROOT_DIR}
+ PATH_SUFFIXES ${M4RI_LIBDIR_SUFFIXES}
+)
+DBG_MSG("M4RI_LIBRARIES=${M4RI_LIBRARIES}")
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set M4RI_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(m4ri DEFAULT_MSG
+ M4RI_LIBRARIES M4RI_INCLUDE_DIRS)
+IF (M4RI_INCLUDE_DIRS AND M4RI_LIBRARIES)
+ SET(M4RI_FOUND TRUE)
+endif (M4RI_INCLUDE_DIRS AND M4RI_LIBRARIES)
+
+
+mark_as_advanced(M4RI_INCLUDE_DIRS M4RI_LIBRARIES )
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindMpiCompilers.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindMpiCompilers.cmake
new file mode 100644
index 000000000..03722d492
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindMpiCompilers.cmake
@@ -0,0 +1,144 @@
+# - Find the MPI compiler wrappers
+# This module locates the MPI compiler wrappers (mpicc, mpicxx/mpic++, mpif77 and mpif90).
+# It is useful if one wants to force a project to use the MPI compiler wrappers as default
+# compilers.
+#
+# The module has the following COMPONENTS:
+# C searches for mpicc
+# CXX searches for mpicxx and mpic++
+# F77 searches for mpif77
+# F90 searches for mpif90
+# If no components are specified, all of them are enabled by default.
+#
+# The module sets the following cache variables (if the corresponding module is enabled):
+# MPICOMPILERS_C the mpicc compiler
+# MPICOMPILERS_CXX the mpicxx/mpic++ compiler
+# MPICOMPILERS_F77 the mpif77 compiler
+# MPICOMPILERS_F90 the mpif90 compiler
+#
+# If the user wishes to specify a specific compiler wrapper (e.g. one which is
+# using a non-standard name or one which is not found on the path) can do so
+# by setting the corresponding MPICOMPILERS_XXX variable (e.g. using the
+# -D flag the first time CMake is run). It also honours environment variables
+# by the same name. The CC, CXX and similar variables are not considered by
+# design.
+#
+# If the module is not REQUIRED make sure to check the MPICOMPILERS_XXX
+# variables.
+#
+# Beware that although the module can search for both the mpif77 andmpif90
+# compiler wrappers, CMake only knows the CMAKE_Fortran_COMPILER variable
+# which means that you can't use both of the wrappers in the same project. This,
+# however, probably is not a big issue as Fortran90 is a superset of
+# Fortran77 and all Fortran90 compilers I know of also process Fortran77
+# sources.
+#
+# An example CMakeLists.txt could look like this:
+#
+# # prevent CMake from compiler detection using NONE as the project language
+# project( some_project NONE )
+#
+# cmake_minimum_required( VERSION 2.6 )
+#
+# # find the mpi compiler wrappers
+# find_package( MpiCompilers REQUIRED CXX F77 )
+#
+# # set the CMAKE_XXX_COMPILER variables
+# set( CMAKE_CXX_COMPILER ${MPICOMPILERS_CXX} )
+# set( CMAKE_Fortran_COMPILER ${MPICOMPILERS_F77} )
+# # enable the corresponding languages to do the compiler detection
+# enable_language( CXX )
+# enable_language( Fortran )
+#
+# # now go on as usual
+# add_executable( fancy_mpi_program source1.cxx source2.f )
+
+# Copyright 2009 Michael Wild <themiwi at users.sourceforge.net>
+
+# check the components that are requested
+if( MpiCompilers_FIND_COMPONENTS )
+ set( __MpiCompilers_C FALSE )
+ set( __MpiCompilers_CXX FALSE )
+ set( __MpiCompilers_F77 FALSE )
+ set( __MpiCompilers_F90 FALSE )
+ foreach( __MpiCompilers_comp ${MpiCompilers_FIND_COMPONENTS} )
+ if( __MpiCompilers_comp STREQUAL C )
+ set( __MpiCompilers_C TRUE )
+ elseif( __MpiCompilers_comp STREQUAL CXX )
+ set( __MpiCompilers_CXX TRUE )
+ elseif(__MpiCompilers_comp STREQUAL F77 )
+ set( __MpiCompilers_F77 TRUE )
+ elseif( __MpiCompilers_comp STREQUAL F90 )
+ set( __MpiCompilers_F90 TRUE )
+ else( __MpiCompilers_comp STREQUAL C )
+ message( FATAL_ERROR "Unknown component ${__MpiCompilers_comp}" )
+ endif( __MpiCompilers_comp STREQUAL C )
+ endforeach( __MpiCompilers_comp )
+else( MpiCompilers_FIND_COMPONENTS )
+ # by default turn all components on
+ set( __MpiCompilers_C TRUE )
+ set( __MpiCompilers_CXX TRUE )
+ set( __MpiCompilers_F77 TRUE )
+ set( __MpiCompilers_F90 TRUE )
+endif( MpiCompilers_FIND_COMPONENTS )
+
+# find the requested compilers and set up the list
+# of required variables
+set( __MpiCompilers_REQVARS "" )
+set( __MpiCompilers_FOUNDCOMPILERS "" )
+if( __MpiCompilers_C )
+ if( NOT "$ENV{MPICOMPILERS_C}" STREQUAL "" )
+ set( MPICOMPILERS_C $ENV{MPICOMPILERS_C} CACHE FILEPATH "Path to
+the MPI C compiler" )
+ else( NOT "$ENV{MPICOMPILERS_C}" STREQUAL "" )
+ find_program( MPICOMPILERS_C mpicc DOC "Path to the MPI C
+compiler" )
+ endif( NOT "$ENV{MPICOMPILERS_C}" STREQUAL "" )
+ list( APPEND __MpiCompilers_REQVARS MPICOMPILERS_C )
+ set( __MpiCompilers_FOUNDCOMPILERS "$
+{__MpiCompilers_FOUNDCOMPILERS} ${MPICOMPILERS_C}" )
+endif( __MpiCompilers_C )
+if( __MpiCompilers_CXX )
+ if( NOT "$ENV{MPICOMPILERS_CXX}" STREQUAL "" )
+ set( MPICOMPILERS_CXX $ENV{MPICOMPILERS_CXX} CACHE FILEPATH "Path
+to the MPI C++ compiler" )
+ else( NOT "$ENV{MPICOMPILERS_CXX}" STREQUAL "" )
+ find_program( MPICOMPILERS_CXX NAMES mpicxx mpic++ DOC "Path to
+the MPI C++ compiler" )
+ endif( NOT "$ENV{MPICOMPILERS_CXX}" STREQUAL "" )
+ list( APPEND __MpiCompilers_REQVARS MPICOMPILERS_CXX )
+ set( __MpiCompilers_FOUNDCOMPILERS "$
+{__MpiCompilers_FOUNDCOMPILERS} ${MPICOMPILERS_CXX}" )
+endif( __MpiCompilers_CXX )
+if( __MpiCompilers_F77 )
+ if( NOT "$ENV{MPICOMPILERS_F77}" STREQUAL "" )
+ set( MPICOMPILERS_F77 $ENV{MPICOMPILERS_F77} CACHE FILEPATH "Path
+to the MPI F77 compiler" )
+ else( NOT "$ENV{MPICOMPILERS_F77}" STREQUAL "" )
+ find_program( MPICOMPILERS_F77 mpif77 DOC "Path to the MPI F77
+compiler" )
+ endif( NOT "$ENV{MPICOMPILERS_F77}" STREQUAL "" )
+ list( APPEND __MpiCompilers_REQVARS MPICOMPILERS_F77 )
+ set( __MpiCompilers_FOUNDCOMPILERS "$
+{__MpiCompilers_FOUNDCOMPILERS} ${MPICOMPILERS_F77}" )
+endif( __MpiCompilers_F77 )
+if( __MpiCompilers_F90 )
+ if( NOT "$ENV{MPICOMPILERS_F90}" STREQUAL "" )
+ set( MPICOMPILERS_F90 $ENV{MPICOMPILERS_F90} CACHE FILEPATH "Path
+to the MPI F90 compiler" )
+ else( NOT "$ENV{MPICOMPILERS_F90}" STREQUAL "" )
+ find_program( MPICOMPILERS_F90 mpif90 DOC "Path to the MPI F77
+compiler" )
+ endif( NOT "$ENV{MPICOMPILERS_F90}" STREQUAL "" )
+ list( APPEND __MpiCompilers_REQVARS MPICOMPILERS_F90 )
+ set( __MpiCompilers_FOUNDCOMPILERS "$
+{__MpiCompilers_FOUNDCOMPILERS} ${MPICOMPILERS_F90}" )
+endif( __MpiCompilers_F90 )
+
+mark_as_advanced( ${__MpiCompilers_REQVARS} )
+
+# handle standard arguments
+include( FindPackageHandleStandardArgs )
+find_package_handle_standard_args( MpiCompilers DEFAULT_MSG
+__MpiCompilers_FOUNDCOMPILERS ${__MpiCompilers_REQVARS} )
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindPerftools.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindPerftools.cmake
new file mode 100644
index 000000000..f40ace7cd
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindPerftools.cmake
@@ -0,0 +1,139 @@
+# - Try to find Google perftools include dirs and libraries
+#
+# Usage of this module as follows:
+#
+# find_package(Perftools)
+#
+# Variables used by this module, they can change the default behaviour and need
+# to be set before calling find_package:
+#
+# PERFTOOLS_ROOT Preferred installation prefix for searching for
+# Perftools, set this if the module has problems
+# finding the proper installation path.
+# PERFTOOLS_INCLUDEDIR Set this to the include directory of the Google
+# perftools, if the module has problems finding the
+# installation path.
+# PERFTOOLS_LIBRARYDIR Set this to the library directory of the Google
+# perftools if the module has problems finding the
+# proper installation path.
+#
+# Variables defined by this module:
+#
+# Perftools_FOUND System has Google perftools, this means the
+# include dir and all the libraries were found.
+# Perftools_INCLUDE_DIRS Google perftools include directories.
+# Perftools_LIBRARIES Link these to use the Google perftools libraries.
+#
+# Perftools_TCMALLOC_LIBRARY Path to the tcmalloc library.
+# Perftools_STACKTRACE_LIBRARY Path to the stacktrace library.
+# Perftools_PROFILER_LIBRARY Path to the profiler library.
+
+if (PERFTOOLS_ROOT)
+ set(Perftools_ADDITIONAL_INCLUDE_SEARCH_DIRS ${PERFTOOLS_ROOT}/include)
+ set(Perftools_ADDITIONAL_LIBRARY_SEARCH_DIRS ${PERFTOOLS_ROOT}/lib)
+endif ()
+
+if (PERFTOOLS_INCLUDEDIR)
+ set(Perftools_ADDITIONAL_INCLUDE_SEARCH_DIRS ${PERFTOOLS_ROOT}/include)
+endif ()
+
+if (PERFTOOLS_LIBRARYDIR)
+ set(Perftools_ADDITIONAL_LIBRARY_SEARCH_DIRS ${PERFTOOLS_ROOT}/lib)
+endif ()
+
+
+if (Perftools_LIBRARIES AND Perftools_INCLUDE_DIRS)
+ # In cache already.
+ set(Perftools_FOUND true)
+else ()
+ find_path(Perftools_INCLUDE_DIRS
+ NAMES
+ google/heap-profiler.h
+ PATHS
+ ${Perftools_ADDITIONAL_INCLUDE_SEARCH_DIRS}
+ /usr/local/include
+ /opt/local/include
+ /sw/include
+ /usr/include
+ )
+
+ # tcmalloc
+ set(tcmalloc_names ${tcmalloc_names} tcmalloc)
+ find_library(perftools_tcmalloc_library
+ NAMES
+ ${tcmalloc_names}
+ PATHS
+ ${Perftools_ADDITIONAL_LIBRARY_SEARCH_DIRS}
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+ /usr/lib
+ )
+
+ if (perftools_tcmalloc_library AND Perftools_INCLUDE_DIRS)
+ set(Perftools_TCMALLOC_LIBRARY ${perftools_tcmalloc_library})
+ set(Perftools_LIBRARIES
+ ${Perftools_LIBRARIES} ${perftools_tcmalloc_library})
+ set(Perftools_FOUND true)
+ else ()
+ set(Perftools_FOUND false)
+ endif ()
+
+
+ # stacktrace
+ set(stacktrace_names ${stacktrace_names} stacktrace)
+ find_library(perftools_stacktrace_library
+ NAMES
+ ${stacktrace_names}
+ PATHS
+ ${Perftools_ADDITIONAL_LIBRARY_SEARCH_DIRS}
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+ /usr/lib
+ )
+
+ if (perftools_stacktrace_library AND Perftools_INCLUDE_DIRS)
+ set(Perftools_STACKTRACE_LIBRARY ${perftools_stacktrace_library})
+ set(Perftools_LIBRARIES
+ ${Perftools_LIBRARIES} ${perftools_stacktrace_library})
+ endif ()
+
+
+ # profiler
+ set(profiler_names ${profiler_names} profiler)
+ find_library(perftools_profiler_library
+ NAMES
+ ${profiler_names}
+ PATHS
+ ${Perftools_ADDITIONAL_LIBRARY_SEARCH_DIRS}
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+ /usr/lib
+ )
+
+ if (perftools_profiler_library AND Perftools_INCLUDE_DIRS)
+ set(Perftools_PROFILER_LIBRARY ${perftools_profiler_library})
+ set(Perftools_LIBRARIES
+ ${Perftools_LIBRARIES} ${perftools_profiler_library})
+ endif ()
+
+ if (Perftools_FOUND)
+ if (NOT Perftools_FIND_QUIETLY)
+ message(STATUS "Found Google perftools")
+ endif ()
+ else ()
+ if (Perftools_FIND_REQUIRED)
+ message(FATAL_ERROR "Could not find Google perftools")
+ endif ()
+ endif ()
+
+ mark_as_advanced(
+ Perftools_INCLUDE_DIRS
+ Perftools_LIBRARIES
+ Perftools_TCMALLOC_LIBRARY
+ Perftools_STACKTRACE_LIBRARY
+ Perftools_PROFILER_LIBRARY
+ )
+endif()
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindPkgMacros.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindPkgMacros.cmake
new file mode 100644
index 000000000..59686232a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindPkgMacros.cmake
@@ -0,0 +1,163 @@
+#-------------------------------------------------------------------
+# This file is part of the CMake build system for OGRE
+# (Object-oriented Graphics Rendering Engine)
+# For the latest info, see http://www.ogre3d.org/
+#
+# The contents of this file are placed in the public domain. Feel
+# free to make use of it in any way you like.
+#-------------------------------------------------------------------
+
+##################################################################
+# Provides some common functionality for the FindPackage modules
+##################################################################
+
+# Begin processing of package
+macro(findpkg_begin PREFIX)
+ if (NOT ${PREFIX}_FIND_QUIETLY)
+ message(STATUS "Looking for ${PREFIX}...")
+ endif ()
+endmacro(findpkg_begin)
+
+# Display a status message unless FIND_QUIETLY is set
+macro(pkg_message PREFIX)
+ if (NOT ${PREFIX}_FIND_QUIETLY)
+ message(STATUS ${ARGN})
+ endif ()
+endmacro(pkg_message)
+
+# Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes
+macro(getenv_path VAR)
+ set(ENV_${VAR} $ENV{${VAR}})
+ # replace won't work if var is blank
+ if (ENV_${VAR})
+ string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} )
+ endif ()
+endmacro(getenv_path)
+
+# Construct search paths for includes and libraries from a PREFIX_PATH
+macro(create_search_paths PREFIX)
+ foreach(dir ${${PREFIX}_PREFIX_PATH})
+ set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH}
+ ${dir}/include ${dir}/Include ${dir}/include/${PREFIX} ${dir}/Headers)
+ set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH}
+ ${dir}/lib ${dir}/Lib ${dir}/lib/${PREFIX} ${dir}/Libs)
+ set(${PREFIX}_BIN_SEARCH_PATH ${${PREFIX}_BIN_SEARCH_PATH}
+ ${dir}/bin)
+ endforeach(dir)
+ if(ANDROID)
+ set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} ${OGRE_DEPENDENCIES_DIR}/lib/${ANDROID_ABI})
+ endif()
+ set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH})
+endmacro(create_search_paths)
+
+# clear cache variables if a certain variable changed
+macro(clear_if_changed TESTVAR)
+ # test against internal check variable
+ # HACK: Apparently, adding a variable to the cache cleans up the list
+ # a bit. We need to also remove any empty strings from the list, but
+ # at the same time ensure that we are actually dealing with a list.
+ list(APPEND ${TESTVAR} "")
+ list(REMOVE_ITEM ${TESTVAR} "")
+ if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}")
+ message(STATUS "${TESTVAR} changed.")
+ foreach(var ${ARGN})
+ set(${var} "NOTFOUND" CACHE STRING "x" FORCE)
+ endforeach(var)
+ endif ()
+ set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE)
+endmacro(clear_if_changed)
+
+# Try to get some hints from pkg-config, if available
+macro(use_pkgconfig PREFIX PKGNAME)
+ find_package(PkgConfig)
+ if (PKG_CONFIG_FOUND)
+ pkg_check_modules(${PREFIX} ${PKGNAME})
+ endif ()
+endmacro (use_pkgconfig)
+
+# Couple a set of release AND debug libraries (or frameworks)
+macro(make_library_set PREFIX)
+ if (${PREFIX}_FWK)
+ set(${PREFIX} ${${PREFIX}_FWK})
+ elseif (${PREFIX}_REL AND ${PREFIX}_DBG)
+ set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG})
+ elseif (${PREFIX}_REL)
+ set(${PREFIX} ${${PREFIX}_REL})
+ elseif (${PREFIX}_DBG)
+ set(${PREFIX} ${${PREFIX}_DBG})
+ endif ()
+endmacro(make_library_set)
+
+# Generate debug names from given release names
+macro(get_debug_names PREFIX)
+ foreach(i ${${PREFIX}})
+ set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i})
+ endforeach(i)
+endmacro(get_debug_names)
+
+# Add the parent dir from DIR to VAR
+macro(add_parent_dir VAR DIR)
+ get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE)
+ set(${VAR} ${${VAR}} ${${DIR}_TEMP})
+endmacro(add_parent_dir)
+
+# Do the final processing for the package find.
+macro(findpkg_finish PREFIX)
+ # skip if already processed during this run
+ if (NOT ${PREFIX}_FOUND)
+ if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY)
+ set(${PREFIX}_FOUND TRUE)
+ set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR})
+ set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY})
+ if (NOT ${PREFIX}_FIND_QUIETLY)
+ message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}")
+ endif ()
+ else ()
+ if (NOT ${PREFIX}_FIND_QUIETLY)
+ message(STATUS "Could not locate ${PREFIX}")
+ endif ()
+ if (${PREFIX}_FIND_REQUIRED)
+ message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.")
+ endif ()
+ endif ()
+
+ mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK)
+ endif ()
+endmacro(findpkg_finish)
+
+
+# Slightly customised framework finder
+macro(findpkg_framework fwk)
+ if(APPLE)
+ set(${fwk}_FRAMEWORK_PATH
+ ${${fwk}_FRAMEWORK_SEARCH_PATH}
+ ${CMAKE_FRAMEWORK_PATH}
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /System/Library/Frameworks
+ /Network/Library/Frameworks
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx/Release
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx/Debug
+ )
+ # These could be arrays of paths, add each individually to the search paths
+ foreach(i ${OGRE_PREFIX_PATH})
+ set(${fwk}_FRAMEWORK_PATH ${${fwk}_FRAMEWORK_PATH} ${i}/lib/macosx/Release ${i}/lib/macosx/Debug)
+ endforeach(i)
+
+ foreach(i ${OGRE_PREFIX_BUILD})
+ set(${fwk}_FRAMEWORK_PATH ${${fwk}_FRAMEWORK_PATH} ${i}/lib/macosx/Release ${i}/lib/macosx/Debug)
+ endforeach(i)
+
+ foreach(dir ${${fwk}_FRAMEWORK_PATH})
+ set(fwkpath ${dir}/${fwk}.framework)
+ if(EXISTS ${fwkpath})
+ set(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES}
+ ${fwkpath}/Headers ${fwkpath}/PrivateHeaders)
+ set(${fwk}_FRAMEWORK_PATH ${dir})
+ if (NOT ${fwk}_LIBRARY_FWK)
+ set(${fwk}_LIBRARY_FWK "-framework ${fwk}")
+ endif ()
+ endif(EXISTS ${fwkpath})
+ endforeach(dir)
+ endif(APPLE)
+endmacro(findpkg_framework)
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindSqlite3.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindSqlite3.cmake
new file mode 100644
index 000000000..0eccec225
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindSqlite3.cmake
@@ -0,0 +1,56 @@
+# - find Sqlite 3
+# SQLITE3_INCLUDE_DIR - Where to find Sqlite 3 header files (directory)
+# SQLITE3_LIBRARIES - Sqlite 3 libraries
+# SQLITE3_LIBRARY_RELEASE - Where the release library is
+# SQLITE3_LIBRARY_DEBUG - Where the debug library is
+# SQLITE3_FOUND - Set to TRUE if we found everything (library, includes and executable)
+
+# Copyright (c) 2010 Pau Garcia i Quiles, <pgquiles@elpauer.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+# Generated by CModuler, a CMake Module Generator - http://gitorious.org/cmoduler
+
+IF( SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY_RELEASE AND SQLITE3_LIBRARY_DEBUG )
+ SET(SQLITE3_FIND_QUIETLY TRUE)
+ENDIF( SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY_RELEASE AND SQLITE3_LIBRARY_DEBUG )
+
+FIND_PATH( SQLITE3_INCLUDE_DIR sqlite3.h )
+
+FIND_LIBRARY(SQLITE3_LIBRARY_RELEASE NAMES sqlite3 )
+
+FIND_LIBRARY(SQLITE3_LIBRARY_DEBUG NAMES sqlite3 sqlite3d HINTS /usr/lib/debug/usr/lib/ )
+
+IF( SQLITE3_LIBRARY_RELEASE OR SQLITE3_LIBRARY_DEBUG AND SQLITE3_INCLUDE_DIR )
+ SET( SQLITE3_FOUND TRUE )
+ENDIF( SQLITE3_LIBRARY_RELEASE OR SQLITE3_LIBRARY_DEBUG AND SQLITE3_INCLUDE_DIR )
+
+IF( SQLITE3_LIBRARY_DEBUG AND SQLITE3_LIBRARY_RELEASE )
+ # if the generator supports configuration types then set
+ # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value
+ IF( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+ SET( SQLITE3_LIBRARIES optimized ${SQLITE3_LIBRARY_RELEASE} debug ${SQLITE3_LIBRARY_DEBUG} )
+ ELSE( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+ # if there are no configuration types and CMAKE_BUILD_TYPE has no value
+ # then just use the release libraries
+ SET( SQLITE3_LIBRARIES ${SQLITE3_LIBRARY_RELEASE} )
+ ENDIF( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+ELSEIF( SQLITE3_LIBRARY_RELEASE )
+ SET( SQLITE3_LIBRARIES ${SQLITE3_LIBRARY_RELEASE} )
+ELSE( SQLITE3_LIBRARY_DEBUG AND SQLITE3_LIBRARY_RELEASE )
+ SET( SQLITE3_LIBRARIES ${SQLITE3_LIBRARY_DEBUG} )
+ENDIF( SQLITE3_LIBRARY_DEBUG AND SQLITE3_LIBRARY_RELEASE )
+
+IF( SQLITE3_FOUND )
+ IF( NOT SQLITE3_FIND_QUIETLY )
+ MESSAGE( STATUS "Found Sqlite3 header file in ${SQLITE3_INCLUDE_DIR}")
+ MESSAGE( STATUS "Found Sqlite3 libraries: ${SQLITE3_LIBRARIES}")
+ ENDIF( NOT SQLITE3_FIND_QUIETLY )
+ELSE(SQLITE3_FOUND)
+ IF( SQLITE3_FIND_REQUIRED)
+ MESSAGE( FATAL_ERROR "Could not find Sqlite3" )
+ ELSE( SQLITE3_FIND_REQUIRED)
+ MESSAGE( STATUS "Optional package Sqlite3 was not found" )
+ ENDIF( SQLITE3_FIND_REQUIRED)
+ENDIF(SQLITE3_FOUND)
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindTBB.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindTBB.cmake
new file mode 100644
index 000000000..beb7f7b86
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindTBB.cmake
@@ -0,0 +1,111 @@
+#-------------------------------------------------------------------
+# This file is part of the CMake build system for OGRE
+# (Object-oriented Graphics Rendering Engine)
+# For the latest info, see http://www.ogre3d.org/
+#
+# The contents of this file are placed in the public domain. Feel
+# free to make use of it in any way you like.
+#-------------------------------------------------------------------
+
+# - Try to find ThreadingBuildingBlocks libraries
+# Once done, this will define
+#
+# TBB_FOUND - system has TBB
+# TBB_INCLUDE_DIRS - the TBB include directories
+# TBB_LIBRARIES - link these to use TBB
+
+include(FindPkgMacros)
+findpkg_begin(TBB)
+
+# Get path, convert backslashes as ${ENV_${var}}
+getenv_path(TBB_HOME)
+getenv_path(TBB_ROOT)
+getenv_path(TBB_BASE)
+
+# construct search paths
+set(TBB_PREFIX_PATH
+ ${TBB_HOME} ${ENV_TBB_HOME}
+ ${TBB_ROOT} ${ENV_TBB_ROOT}
+ ${TBB_BASE} ${ENV_TBB_BASE}
+)
+# redo search if prefix path changed
+clear_if_changed(TBB_PREFIX_PATH
+ TBB_LIBRARY_FWK
+ TBB_LIBRARY_REL
+ TBB_LIBRARY_DBG
+ TBB_INCLUDE_DIR
+)
+
+create_search_paths(TBB)
+set(TBB_INC_SEARCH_PATH ${TBB_INC_SEARCH_PATH} ${TBB_PREFIX_PATH})
+
+# For Windows, let's assume that the user might be using the precompiled
+# TBB packages from the main website. These use a rather awkward directory
+# structure (at least for automatically finding the right files) depending
+# on platform and compiler, but we'll do our best to accomodate it.
+# Not adding the same effort for the precompiled linux builds, though. Those
+# have different versions for CC compiler versions and linux kernels which
+# will never adequately match the user's setup, so there is no feasible way
+# to detect the "best" version to use. The user will have to manually
+# select the right files. (Chances are the distributions are shipping their
+# custom version of tbb, anyway, so the problem is probably nonexistant.)
+if (WIN32)
+ set(COMPILER_PREFIX "vc7.1")
+ if (MSVC80)
+ set(COMPILER_PREFIX "vc8")
+ endif ()
+ if (MSVC90)
+ set(COMPILER_PREFIX "vc9")
+ endif ()
+
+ # for each prefix path, add ia32/64\${COMPILER_PREFIX}\lib to the lib search path
+ foreach (dir ${TBB_PREFIX_PATH})
+ if (CMAKE_CL_64)
+ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia64/${COMPILER_PREFIX}/lib)
+ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${COMPILER_PREFIX}/lib)
+ else ()
+ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${COMPILER_PREFIX}/lib)
+ endif ()
+ endforeach ()
+endif ()
+
+
+
+set(TBB_LIBRARY_NAMES tbb)
+get_debug_names(TBB_LIBRARY_NAMES)
+
+# use_pkgconfig(TBB_PKGC TBB)
+
+findpkg_framework(TBB)
+
+find_path(TBB_INCLUDE_DIR NAMES tbb/tbb.h HINTS ${TBB_INC_SEARCH_PATH} ${TBB_PKGC_INCLUDE_DIRS})
+find_library(TBB_LIBRARY_REL NAMES ${TBB_LIBRARY_NAMES} HINTS ${TBB_LIB_SEARCH_PATH} ${TBB_PKGC_LIBRARY_DIRS})
+find_library(TBB_LIBRARY_DBG NAMES ${TBB_LIBRARY_NAMES_DBG} HINTS ${TBB_LIB_SEARCH_PATH} ${TBB_PKGC_LIBRARY_DIRS})
+make_library_set(TBB_LIBRARY)
+
+findpkg_finish(TBB)
+
+if (NOT TBB_FOUND)
+ return()
+endif ()
+
+
+# Look for TBB's malloc package
+findpkg_begin(TBB_MALLOC)
+set(TBB_MALLOC_LIBRARY_NAMES tbbmalloc)
+get_debug_names(TBB_MALLOC_LIBRARY_NAMES)
+find_path(TBB_MALLOC_INCLUDE_DIR NAMES tbb/tbb.h HINTS ${TBB_INCLUDE_DIR} ${TBB_INC_SEARCH_PATH} ${TBB_PKGC_INCLUDE_DIRS} )
+find_library(TBB_MALLOC_LIBRARY_REL NAMES ${TBB_MALLOC_LIBRARY_NAMES} HINTS ${TBB_LIB_SEARCH_PATH} ${TBB_PKGC_LIBRARY_DIRS} )
+find_library(TBB_MALLOC_LIBRARY_DBG NAMES ${TBB_MALLOC_LIBRARY_NAMES_DBG} HINTS ${TBB_LIB_SEARCH_PATH} ${TBB_PKGC_LIBRARY_DIRS} )
+make_library_set(TBB_MALLOC_LIBRARY)
+findpkg_finish(TBB_MALLOC)
+
+# Look for TBB's malloc proxy package
+findpkg_begin(TBB_MALLOC_PROXY)
+set(TBB_MALLOC_PROXY_LIBRARY_NAMES tbbmalloc_proxy)
+get_debug_names(TBB_MALLOC_PROXY_LIBRARY_NAMES)
+find_path(TBB_MALLOC_PROXY_INCLUDE_DIR NAMES tbb/tbbmalloc_proxy.h HINTS ${TBB_INCLUDE_DIR} ${TBB_INC_SEARCH_PATH} ${TBB_PKGC_INCLUDE_DIRS})
+find_library(TBB_MALLOC_PROXY_LIBRARY_REL NAMES ${TBB_MALLOC_PROXY_LIBRARY_NAMES} HINTS ${TBB_LIB_SEARCH_PATH} ${TBB_PKGC_LIBRARY_DIRS})
+find_library(TBB_MALLOC_PROXY_LIBRARY_DBG NAMES ${TBB_MALLOC_PROXY_LIBRARY_NAMES_DBG} HINTS ${TBB_LIB_SEARCH_PATH} ${TBB_PKGC_LIBRARY_DIRS})
+make_library_set(TBB_MALLOC_PROXY_LIBRARY)
+findpkg_finish(TBB_MALLOC_PROXY)
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/FindValgrind.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/FindValgrind.cmake
new file mode 100644
index 000000000..cafc01167
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/FindValgrind.cmake
@@ -0,0 +1,22 @@
+# Find Valgrind.
+#
+# This module defines:
+# VALGRIND_INCLUDE_DIR, where to find valgrind/memcheck.h, etc.
+# VALGRIND_PROGRAM, the valgrind executable.
+# VALGRIND_FOUND, If false, do not try to use valgrind.
+#
+# If you have valgrind installed in a non-standard place, you can define
+# VALGRIND_PREFIX to tell cmake where it is.
+
+message(STATUS "Valgrind Prefix: ${VALGRIND_PREFIX}")
+
+find_path(VALGRIND_INCLUDE_DIR memcheck.h
+ /usr/include /usr/include/valgrind /usr/local/include /usr/local/include/valgrind
+ ${VALGRIND_PREFIX}/include ${VALGRIND_PREFIX}/include/valgrind)
+find_program(VALGRIND_PROGRAM NAMES valgrind PATH /usr/bin /usr/local/bin ${VALGRIND_PREFIX}/bin)
+
+find_package_handle_standard_args(VALGRIND DEFAULT_MSG
+ VALGRIND_INCLUDE_DIR
+ VALGRIND_PROGRAM)
+
+mark_as_advanced(VALGRIND_INCLUDE_DIR VALGRIND_PROGRAM)
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake b/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake
new file mode 100644
index 000000000..2fb24584a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake
@@ -0,0 +1,116 @@
+# - Returns a version string from Git
+#
+# These functions force a re-configure on each git commit so that you can
+# trust the values of the variables in your build system.
+#
+# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
+#
+# Returns the refspec and sha hash of the current head revision
+#
+# git_describe(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe on the source tree, and adjusting
+# the output so that it tests false if an error occurs.
+#
+# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe --exact-match on the source tree,
+# and adjusting the output so that it tests false if there was no exact
+# matching tag.
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__get_git_revision_description)
+ return()
+endif()
+set(__get_git_revision_description YES)
+
+# We must run the following at "include" time, not at function call time,
+# to find the path to this module rather than the path to a calling list file
+get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+
+function(get_git_head_revision _refspecvar _hashvar)
+ set(GIT_PARENT_DIR "${CMAKE_SOURCE_DIR}")
+ set(GIT_DIR "${GIT_PARENT_DIR}/.git")
+ while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
+ set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
+ get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
+ if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
+ # We have reached the root directory, we are not in git
+ set(${_refspecvar} "GIT-notfound" PARENT_SCOPE)
+ set(${_hashvar} "GIT-notfound" PARENT_SCOPE)
+ return()
+ endif()
+ set(GIT_DIR "${GIT_PARENT_DIR}/.git")
+ endwhile()
+ set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
+ if(NOT EXISTS "${GIT_DATA}")
+ file(MAKE_DIRECTORY "${GIT_DATA}")
+ endif()
+
+ if(NOT EXISTS "${GIT_DIR}/HEAD")
+ return()
+ endif()
+ set(HEAD_FILE "${GIT_DATA}/HEAD")
+ configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
+
+ configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
+ "${GIT_DATA}/grabRef.cmake"
+ @ONLY)
+ include("${GIT_DATA}/grabRef.cmake")
+
+ set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
+ set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
+endfunction()
+
+function(git_describe _var)
+ if(NOT GIT_FOUND)
+ find_package(Git QUIET)
+ endif()
+ get_git_head_revision(refspec hash)
+ if(NOT GIT_FOUND)
+ set(${_var} "${CPACK_PACKAGE_VERSION}-compiled-from-cmake" PARENT_SCOPE)
+ return()
+ endif()
+ if(NOT hash)
+ set(${_var} "${CPACK_PACKAGE_VERSION}-compiled-from-cmake" PARENT_SCOPE)
+ return()
+ endif()
+
+ # TODO sanitize
+ #if((${ARGN}" MATCHES "&&") OR
+ # (ARGN MATCHES "||") OR
+ # (ARGN MATCHES "\\;"))
+ # message("Please report the following error to the project!")
+ # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
+ #endif()
+
+ #message(STATUS "Arguments to execute_process: ${ARGN}")
+
+ execute_process(COMMAND "${GIT_EXECUTABLE}" describe ${hash} ${ARGN}
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ RESULT_VARIABLE res
+ OUTPUT_VARIABLE out
+ #ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT res EQUAL 0)
+ set(out "${CPACK_PACKAGE_VERSION} (approximate version number)")
+ endif()
+
+ set(${_var} "${out}" PARENT_SCOPE)
+endfunction()
+
+function(git_get_exact_tag _var)
+ git_describe(out --exact-match ${ARGN})
+ set(${_var} "${out}" PARENT_SCOPE)
+endfunction()
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake.in b/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake.in
new file mode 100644
index 000000000..888ce13aa
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/GetGitRevisionDescription.cmake.in
@@ -0,0 +1,38 @@
+#
+# Internal file for GetGitRevisionDescription.cmake
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(HEAD_HASH)
+
+file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
+
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+if(HEAD_CONTENTS MATCHES "ref")
+ # named branch
+ string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
+ if(EXISTS "@GIT_DIR@/${HEAD_REF}")
+ configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+ elseif(EXISTS "@GIT_DIR@/logs/${HEAD_REF}")
+ configure_file("@GIT_DIR@/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+ set(HEAD_HASH "${HEAD_REF}")
+ endif()
+else()
+ # detached HEAD
+ configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
+endif()
+
+if(NOT HEAD_HASH)
+ file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
+ string(STRIP "${HEAD_HASH}" HEAD_HASH)
+endif()
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmake/cmake_uninstall.cmake.in b/cryptominisat5/cryptominisat-5.6.3/cmake/cmake_uninstall.cmake.in
new file mode 100644
index 000000000..13cedcc55
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmake/cmake_uninstall.cmake.in
@@ -0,0 +1,24 @@
+cmake_policy(SET CMP0007 NEW) # Suppress warnings see `cmake --help-policy CMP0007`
+
+if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
+endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+list(REVERSE files)
+foreach (file ${files})
+ message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
+ if (EXISTS "$ENV{DESTDIR}${file}")
+ execute_process(
+ COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
+ OUTPUT_VARIABLE rm_out
+ RESULT_VARIABLE rm_retval
+ )
+ if(NOT ${rm_retval} EQUAL 0)
+ message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
+ endif (NOT ${rm_retval} EQUAL 0)
+ else (EXISTS "$ENV{DESTDIR}${file}")
+ message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
+ endif (EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)
diff --git a/cryptominisat5/cryptominisat-5.6.3/cmsat_tablestructure.sql b/cryptominisat5/cryptominisat-5.6.3/cmsat_tablestructure.sql
new file mode 100644
index 000000000..28c24c306
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cmsat_tablestructure.sql
@@ -0,0 +1,329 @@
+DROP TABLE IF EXISTS `tags`;
+CREATE TABLE `tags` (
+ `runID` bigint(20) NOT NULL,
+ `tagname` varchar(500) NOT NULL,
+ `tag` varchar(500) NOT NULL
+);
+
+DROP TABLE IF EXISTS `reduceDB`;
+CREATE TABLE `reduceDB` (
+ `runID` bigint(20) NOT NULL,
+ `simplifications` int(20) NOT NULL,
+ `restarts` bigint(20) NOT NULL,
+ `conflicts` bigint(20) NOT NULL,
+ `runtime` float NOT NULL,
+
+ `clauseID` int(20) NOT NULL,
+ `dump_no` int(20) NOT NULL,
+ `conflicts_made` bigint(20) NOT NULL,
+ `sum_of_branch_depth_conflict` bigint(20) NOT NULL,
+ `propagations_made` bigint(20) NOT NULL,
+ `clause_looked_at` bigint(20) NOT NULL,
+ `used_for_uip_creation` bigint(20) NOT NULL,
+ `last_touched_diff` bigint(20) NOT NULL,
+ `activity_rel` float(20) NOT NULL,
+ `locked` int(20) NOT NULL,
+ `in_xor` int(20) NOT NULL,
+ `glue` int(20) NOT NULL,
+ `size` int(20) NOT NULL,
+ `ttl` int(20) NOT NULL
+);
+
+DROP TABLE IF EXISTS `restart`;
+CREATE TABLE `restart` (
+ `runID` bigint(20) NOT NULL,
+ `simplifications` int(20) NOT NULL,
+ `restarts` bigint(20) NOT NULL,
+ `conflicts` bigint(20) NOT NULL,
+ `latest_feature_calc` int(20) NOT NULL,
+ `runtime` float NOT NULL,
+ `numIrredBins` int(20) NOT NULL,
+ `numIrredLongs` int(20) NOT NULL,
+ `numRedBins` int(20) NOT NULL,
+ `numRedLongs` int(20) NOT NULL,
+ `numIrredLits` bigint(20) NOT NULL,
+ `numredLits` bigint(20) NOT NULL,
+ `restart_type` char(20) NOT NULL,
+ `glue` float NOT NULL,
+ `glueSD` float NOT NULL,
+ `glueMin` int(20) NOT NULL,
+ `glueMax` int(20) NOT NULL,
+ `size` float NOT NULL,
+ `sizeSD` float NOT NULL,
+ `sizeMin` int(20) NOT NULL,
+ `sizeMax` int(20) NOT NULL,
+ `resolutions` float NOT NULL,
+ `resolutionsSD` float NOT NULL,
+ `resolutionsMin` int(20) NOT NULL,
+ `resolutionsMax` int(20) NOT NULL,
+ `branchDepth` float NOT NULL,
+ `branchDepthSD` float NOT NULL,
+ `branchDepthMin` int(20) NOT NULL,
+ `branchDepthMax` int(20) NOT NULL,
+ `branchDepthDelta` float NOT NULL,
+ `branchDepthDeltaSD` float NOT NULL,
+ `branchDepthDeltaMin` int(20) NOT NULL,
+ `branchDepthDeltaMax` int(20) NOT NULL,
+ `trailDepth` float NOT NULL,
+ `trailDepthSD` float NOT NULL,
+ `trailDepthMin` int(20) NOT NULL,
+ `trailDepthMax` int(20) NOT NULL,
+ `trailDepthDelta` float NOT NULL,
+ `trailDepthDeltaSD` float NOT NULL,
+ `trailDepthDeltaMin` int(20) NOT NULL,
+ `trailDepthDeltaMax` int(20) NOT NULL,
+ `propBinIrred` bigint(20) NOT NULL,
+ `propBinRed` bigint(20) NOT NULL,
+ `propLongIrred` bigint(20) NOT NULL,
+ `propLongRed` bigint(20) NOT NULL,
+ `conflBinIrred` bigint(20) NOT NULL,
+ `conflBinRed` bigint(20) NOT NULL,
+ `conflLongIrred` bigint(20) NOT NULL,
+ `conflLongRed` bigint(20) NOT NULL,
+ `learntUnits` int(20) NOT NULL,
+ `learntBins` int(20) NOT NULL,
+ `learntLongs` int(20) NOT NULL,
+ `resolBinIrred` bigint(20) NOT NULL,
+ `resolBinRed` bigint(20) NOT NULL,
+ `resolLIrred` bigint(20) NOT NULL,
+ `resolLRed` bigint(20) NOT NULL,
+ `propagations` bigint(20) NOT NULL,
+ `decisions` bigint(20) NOT NULL,
+ `flipped` bigint(20) NOT NULL,
+ `varSetPos` bigint(20) NOT NULL,
+ `varSetNeg` bigint(20) NOT NULL,
+ `free` int(20) NOT NULL,
+ `replaced` int(20) NOT NULL,
+ `eliminated` int(20) NOT NULL,
+ `set` int(20) NOT NULL,
+ `clauseIDstartInclusive` int(20) NOT NULL,
+ `clauseIDendExclusive` int(20) NOT NULL
+);
+
+DROP TABLE IF EXISTS `timepassed`;
+CREATE TABLE `timepassed` (
+ `runID` bigint(20) NOT NULL,
+ `simplifications` bigint(20) NOT NULL,
+ `conflicts` bigint(20) NOT NULL,
+ `runtime` float NOT NULL,
+ `name` varchar(200) NOT NULL,
+ `elapsed` float NOT NULL,
+ `timeout` int(20) DEFAULT NULL,
+ `percenttimeremain` float DEFAULT NULL
+);
+
+DROP TABLE IF EXISTS `memused`;
+CREATE TABLE `memused` (
+ `runID` bigint(20) NOT NULL,
+ `simplifications` bigint(20) NOT NULL,
+ `conflicts` bigint(20) NOT NULL,
+ `runtime` float NOT NULL,
+ `name` varchar(200) NOT NULL,
+ `MB` int(20) NOT NULL
+);
+
+DROP TABLE IF EXISTS `solverRun`;
+CREATE TABLE `solverRun` (
+ `runID` bigint(20) NOT NULL,
+ `runtime` float NOT NULL,
+ `gitrev` varchar(100) NOT NULL
+);
+
+DROP TABLE IF EXISTS `startup`;
+CREATE TABLE `startup` (
+ `runID` bigint(20) NOT NULL,
+ `startTime` datetime NOT NULL
+);
+
+DROP TABLE IF EXISTS `finishup`;
+CREATE TABLE `finishup` (
+ `runID` bigint(20) NOT NULL,
+ `endTime` datetime NOT NULL,
+ `status` varchar(255) NOT NULL
+);
+
+DROP TABLE IF EXISTS `clauseStats`;
+CREATE TABLE `clauseStats` (
+ `runID` bigint(20) NOT NULL,
+ `simplifications` int(20) NOT NULL,
+ `restarts` bigint(20) NOT NULL,
+ `prev_restart` bigint(20) NOT NULL,
+ `conflicts` bigint(20) NOT NULL,
+ `latest_feature_calc` int(20) NOT NULL,
+ `clauseID` bigint(20) NOT NULL,
+
+ `glue` int(20) NOT NULL,
+ `size` int(20) NOT NULL,
+ `conflicts_this_restart` bigint(20) NOT NULL,
+ `num_overlap_literals` int(20) NOT NULL,
+ `num_antecedents` int(20) NOT NULL,
+ `num_total_lits_antecedents` int(20) NOT NULL,
+ `antecedents_avg_size` float(20) NOT NULL,
+
+ `backtrack_level` int(20) NOT NULL,
+ `decision_level` int(20) NOT NULL,
+ `decision_level_pre1` int(20) NOT NULL,
+ `decision_level_pre2` int(20) NOT NULL,
+ `trail_depth_level` int(20) NOT NULL,
+ `cur_restart_type` char(20) NOT NULL,
+
+ `atedecents_binIrred` int(20) NOT NULL,
+ `atedecents_binRed` int(20) NOT NULL,
+ `atedecents_longIrred` int(20) NOT NULL,
+ `atedecents_longRed` int(20) NOT NULL,
+
+ `last_dec_var_act_vsids_0` float NOT NULL,
+ `last_dec_var_act_vsids_1` float NOT NULL,
+ `first_dec_var_act_vsids_0` float NOT NULL,
+ `first_dec_var_act_vsids_1` float NOT NULL,
+
+ `vsids_vars_avg` float NOT NULL,
+ `vsids_vars_var` float NOT NULL,
+ `vsids_vars_min` float NOT NULL,
+ `vsids_vars_max` float NOT NULL,
+
+ `antecedents_glue_long_reds_avg` float NOT NULL,
+ `antecedents_glue_long_reds_var` float NOT NULL,
+ `antecedents_glue_long_reds_min` int(20) NOT NULL,
+ `antecedents_glue_long_reds_max` int(20) NOT NULL,
+
+ `antecedents_long_red_age_avg` float NOT NULL,
+ `antecedents_long_red_age_var` float NOT NULL,
+ `antecedents_long_red_age_min` bigint(20) NOT NULL,
+ `antecedents_long_red_age_max` bigint(20) NOT NULL,
+
+ `vsids_of_resolving_literals_avg` float NOT NULL,
+ `vsids_of_resolving_literals_var` float NOT NULL,
+ `vsids_of_resolving_literals_min` float NOT NULL,
+ `vsids_of_resolving_literals_max` float NOT NULL,
+
+ `vsids_of_all_incoming_lits_avg` float NOT NULL,
+ `vsids_of_all_incoming_lits_var` float NOT NULL,
+ `vsids_of_all_incoming_lits_min` float NOT NULL,
+ `vsids_of_all_incoming_lits_max` float NOT NULL,
+
+ `antecedents_antecedents_vsids_avg` float NOT NULL,
+
+ `decision_level_hist` float NOT NULL,
+ `backtrack_level_hist_lt` float NOT NULL,
+ `trail_depth_level_hist` float NOT NULL,
+ `vsids_vars_hist` float NOT NULL,
+ `size_hist` float NOT NULL,
+ `glue_hist` float NOT NULL,
+ `num_antecedents_hist` float NOT NULL,
+ `antec_sum_size_hist` float NOT NULL,
+ `antec_overlap_hist` float NOT NULL,
+
+ `branch_depth_hist_queue` float NOT NULL,
+ `trail_depth_hist` float NOT NULL,
+ `trail_depth_hist_longer` float NOT NULL,
+ `num_resolutions_hist` float NOT NULL,
+ `confl_size_hist` float NOT NULL,
+ `trail_depth_delta_hist` float NOT NULL,
+ `backtrack_level_hist` float NOT NULL,
+ `glue_hist_queue` float NOT NULL,
+ `glue_hist_long` float NOT NULL
+);
+
+DROP TABLE IF EXISTS `features`;
+CREATE TABLE `features` (
+ `runID` bigint(20) NOT NULL,
+ `simplifications` int(20) NOT NULL,
+ `restarts` bigint(20) NOT NULL,
+ `conflicts` bigint(20) NOT NULL,
+ `latest_feature_calc` int(20) NOT NULL,
+
+ `numVars` int(20) NOT NULL,
+ `numClauses` int(20) NOT NULL,
+ `var_cl_ratio` double NOT NULL,
+
+ -- Clause distribution
+ `binary` double NOT NULL,
+ `horn` double NOT NULL,
+ `horn_mean` double NOT NULL,
+ `horn_std` double NOT NULL,
+ `horn_min` double NOT NULL,
+ `horn_max` double NOT NULL,
+ `horn_spread` double NOT NULL,
+
+ `vcg_var_mean` double NOT NULL,
+ `vcg_var_std` double NOT NULL,
+ `vcg_var_min` double NOT NULL,
+ `vcg_var_max` double NOT NULL,
+ `vcg_var_spread` double NOT NULL,
+
+ `vcg_cls_mean` double NOT NULL,
+ `vcg_cls_std` double NOT NULL,
+ `vcg_cls_min` double NOT NULL,
+ `vcg_cls_max` double NOT NULL,
+ `vcg_cls_spread` double NOT NULL,
+
+ `pnr_var_mean` double NOT NULL,
+ `pnr_var_std` double NOT NULL,
+ `pnr_var_min` double NOT NULL,
+ `pnr_var_max` double NOT NULL,
+ `pnr_var_spread` double NOT NULL,
+
+ `pnr_cls_mean` double NOT NULL,
+ `pnr_cls_std` double NOT NULL,
+ `pnr_cls_min` double NOT NULL,
+ `pnr_cls_max` double NOT NULL,
+ `pnr_cls_spread` double NOT NULL,
+
+ -- Conflict clauses
+ `avg_confl_size` double NOT NULL,
+ `confl_size_min` double NOT NULL,
+ `confl_size_max` double NOT NULL,
+ `avg_confl_glue` double NOT NULL,
+ `confl_glue_min` double NOT NULL,
+ `confl_glue_max` double NOT NULL,
+ `avg_num_resolutions` double NOT NULL,
+ `num_resolutions_min` double NOT NULL,
+ `num_resolutions_max` double NOT NULL,
+ `learnt_bins_per_confl` double NOT NULL,
+
+ -- Search
+ `avg_branch_depth` double NOT NULL,
+ `branch_depth_min` double NOT NULL,
+ `branch_depth_max` double NOT NULL,
+ `avg_trail_depth_delta` double NOT NULL,
+ `trail_depth_delta_min` double NOT NULL,
+ `trail_depth_delta_max` double NOT NULL,
+ `avg_branch_depth_delta` double NOT NULL,
+ `props_per_confl` double NOT NULL,
+ `confl_per_restart` double NOT NULL,
+ `decisions_per_conflict` double NOT NULL,
+
+ -- clause distributions
+ `red_glue_distr_mean` double NOT NULL,
+ `red_glue_distr_var` double NOT NULL,
+ `red_size_distr_mean` double NOT NULL,
+ `red_size_distr_var` double NOT NULL,
+ `red_activity_distr_mean` double NOT NULL,
+ `red_activity_distr_var` double NOT NULL,
+
+ `irred_glue_distr_mean` double NOT NULL,
+ `irred_glue_distr_var` double NOT NULL,
+ `irred_size_distr_mean` double NOT NULL,
+ `irred_size_distr_var` double NOT NULL,
+ `irred_activity_distr_mean` double NOT NULL,
+ `irred_activity_distr_var` double NOT NULL
+);
+
+DROP TABLE IF EXISTS `goodClauses`;
+create table `goodClauses` (
+ `runID` bigint(20) NOT NULL,
+ `clauseID` bigint(20) NOT NULL,
+ `num_used` bigint(20) NOT NULL,
+ `last_confl_used` bigint(20) NOT NULL
+);
+
+-- create index `idx6` on `restart` (`runID`,`simplifications`);
+-- create index `idx7` on `timepassed` (`runID`,`conflicts`);
+-- create index `idx7_2` on `memused` (`runID`,`conflicts`);
+-- create index `idx9` on `solverRun` (`runID`);
+-- create index `idx10` on `startup` (`runID`);
+-- create index `idx11` on `finishup` (`runID`);
+-- create index `idx3` on `tags` (`runID`);
+-- create index `idx4` on `reduceDB` (`runID`,`conflicts`);
+-- create index `idx12` on `sum_clause_stats` (`runID`,`reduceDB`);
diff --git a/cryptominisat5/cryptominisat-5.6.3/cryptominisat5Config.cmake.in b/cryptominisat5/cryptominisat-5.6.3/cryptominisat5Config.cmake.in
new file mode 100644
index 000000000..bb74ae5f5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/cryptominisat5Config.cmake.in
@@ -0,0 +1,20 @@
+# Config file for the @EXPORT_TYPE@ cryptominisat Package
+# It defines the following variables
+# CRYPTOMINISAT5_INCLUDE_DIRS - include directories for cryptominisat5
+# CRYPTOMINISAT5_LIBRARIES - libraries to link against
+# CRYPTOMINISAT5_EXECUTABLE - the cryptominisat executable
+
+# Compute paths
+get_filename_component(CRYPTOMINISAT5_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+set(CRYPTOMINISAT5_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
+
+# Our library dependencies (contains definitions for IMPORTED targets)
+include("${CRYPTOMINISAT5_CMAKE_DIR}/@CRYPTOMINISAT5_TARGETS_FILENAME@")
+
+# These are IMPORTED targets created by @CRYPTOMINISAT5_TARGETS_FILENAME@
+set(CRYPTOMINISAT5_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES_DEPS @CRYPTOMINISAT5_STATIC_DEPS@)
+set(CRYPTOMINISAT5_VERSION_MAJOR @PROJECT_VERSION_MAJOR@)
+set(CRYPTOMINISAT5_VERSION_MINOR @PROJECT_VERSION_MINOR@)
+set(CRYPTOMINISAT5_EXECUTABLE cryptominisat5)
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/changelog b/cryptominisat5/cryptominisat-5.6.3/debian/changelog
new file mode 100644
index 000000000..d030f8a66
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/changelog
@@ -0,0 +1,5 @@
+cryptominisat5 (5.0.0+dfsg-1) unstable; urgency=low
+
+ * First 5.0 release
+
+ -- Mate Soos <soos.mate@gmail.com> Tue, 28 Jun 2016 01:00:00 +0200
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/compat b/cryptominisat5/cryptominisat-5.6.3/debian/compat
new file mode 100644
index 000000000..ec635144f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/control b/cryptominisat5/cryptominisat-5.6.3/debian/control
new file mode 100644
index 000000000..495cf0c9d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/control
@@ -0,0 +1,16 @@
+Source: cryptominisat5
+Section: science
+Priority: optional
+Maintainer: Mate Soos <soos.mate@gmail.com>
+Build-Depends: debhelper (>= 8.0.0), cmake (>=3.3), libboost-program-options-dev (>= 1.54), zlib1g-dev (>= 1.1), python3
+Standards-Version: 3.9.6
+Homepage: https://www.msoos.org
+Vcs-Git: git://github.com/msoos/cryptominisat.git
+Vcs-Browser: git://github.com/msoos/cryptominisat.git
+
+Package: cryptominisat5
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: An advanced SAT solver
+ CryptoMiniSat is an award-winning SAT solver with a DIMACS input
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.copyright b/cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.copyright
new file mode 100644
index 000000000..81c14cf56
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.copyright
@@ -0,0 +1,8 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: cryptominisat
+Upstream-Contact: soos.mate@gmail.com
+Source: https://github.com/msoos/cryptominisat
+
+Files: *
+Copyright: 2009-2018, Mate Soos
+License: MIT
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.docs b/cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.docs
new file mode 100644
index 000000000..8d526b990
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/cryptominisat5.docs
@@ -0,0 +1 @@
+README.markdown
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/menu b/cryptominisat5/cryptominisat-5.6.3/debian/menu
new file mode 100644
index 000000000..5008b3415
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/menu
@@ -0,0 +1,2 @@
+?package(cryptominisat5):needs="text" section="Applications/Science/Mathematics"\
+ title="cryptominisat5" command="/usr/bin/cryptominisat5"
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/rules b/cryptominisat5/cryptominisat-5.6.3/debian/rules
new file mode 100755
index 000000000..82e701c9a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/rules
@@ -0,0 +1,66 @@
+#!/usr/bin/make -f
+# See debhelper(7) (uncomment to enable)
+# output every command that modifies files on the build system.
+#DH_VERBOSE = 1
+
+# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/default.mk
+
+# This has to be exported to make some magic below work.
+export DH_OPTIONS
+
+# see FEATURE AREAS in dpkg-buildflags(1)
+#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+
+# see ENVIRONMENT in dpkg-buildflags(1)
+# package maintainers to append CFLAGS
+#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
+# package maintainers to append LDFLAGS
+#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
+
+BUILDDIR = $(CURDIR)/build
+OUTPUTCHECK_ARCHIVE = $(CURDIR)/../cryptominisat5_5.0.0+dfsg.orig-outputcheck.tar.gz
+UTILS_DIR = $(CURDIR)/utils
+
+override_dh_auto_clean:
+ dh_auto_clean
+ $(RM) -rf $(UTILS_DIR)/gtest/*
+ $(RM) -rf $(UTILS_DIR)/OutputCheck
+
+override_dh_auto_configure: configure_cryptominisat5 configure_gtest
+
+override_dh_auto_build:
+ dh_auto_build
+ $(MAKE) --directory=$(CURDIR)/utils/gtest
+
+configure_cryptominisat5: copy_gtest extract_outputcheck
+ dh_auto_configure -- \
+ -DENABLE_TESTING=ON \
+ -DLIT_TOOL=/usr/lib/llvm-3.5/build/utils/lit/lit.py \
+ -DENABLE_PYTHON_INTERFACE=ON \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DENABLE_ASSERTIONS=ON \
+ -DCMAKE_INSTALL_PREFIX=/usr
+
+configure_gtest: copy_gtest
+ cd $(CURDIR)/utils/gtest && \
+ cmake . && \
+ cd -
+
+copy_gtest:
+ cp -a /usr/src/gtest $(CURDIR)/utils/
+
+extract_outputcheck:
+ tar xf $(OUTPUTCHECK_ARCHIVE) --directory $(UTILS_DIR)
+
+# main packaging script based on dh7 syntax
+%:
+ dh $@ --parallel --builddirectory=$(BUILDDIR)
+
+# debmake generated override targets
+# This is example for Cmake (See http://bugs.debian.org/641051 )
+#override_dh_auto_configure:
+# dh_auto_configure -- \
+# -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/debian/source/format b/cryptominisat5/cryptominisat-5.6.3/debian/source/format
new file mode 100644
index 000000000..163aaf8d8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO-ANALYSIS b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO-ANALYSIS
new file mode 100644
index 000000000..b878b0c56
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO-ANALYSIS
@@ -0,0 +1,7 @@
+#does not work
+CXX="clang++" ~/development/llvm/llvm/tools/clang/tools/scan-build/scan-build --use-cc="clang" --use-c++="clang++" -v --use-analyzer=/usr/local/bin/clang cmake ../
+
+#clang-check
+CXX="clang++" cmake -DCMAKE_EXPORT_COMPILE_COMMANDS="ON" ..
+make -j4
+clang-check -analyze ../cmsat/solver.cpp
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_WEB b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_WEB
new file mode 100644
index 000000000..f609622da
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_WEB
@@ -0,0 +1,52 @@
+1) You will need:
+* MySQL server
+* MySQL libraries
+* PHP5
+* Apache
+* Chrome or Firefox, but prefer chrome, js is faster there
+
+2) create "cryptoms database" in mysql:
+
+$ mysql -u root -p PASS
+$ create database cryptoms
+
+3) create two MySQL users:
+* one "cryptomsuser" , with empty password, which can read-write to database "cryptoms"
+* one "presenter", with empty password, which can read database "cryptoms"
+
+4) run:
+
+$ mysql -u cryptomsuser cryptoms < web/tablestructure.sql
+
+this will create the table structures needed
+
+4) compile and exectute cryptoms as:
+
+$ ./cryptominisat --sql 1 MYFILE.cnf
+
+and let it run for at least 20'000 conflicts. It should run without any problems.
+If there is any problem with MySQL, it will print the exact error, errors are not
+silently ignored.
+
+5) you can now play around with the data in mysql:
+
+$ mysql -u cryptomsuser cryptoms
+$ show tables;
+$ select * from restartDB;
+
+3) Copy everything under "web" into /var/www/cryptoms and make sure that it's
+readable by apache.
+
+4) point your browser to
+
+http://localhost/cryptoms
+
+you should see the output of the last run. You can also refresh it, and if it's
+running in the background, you will see the graphs update. Note that if your
+last solving run was aborted early,and there was no data input into MySQL
+then there will be no data shown. So make sure your last run of cryptominisat
+with option "--sql 1" was meaningful, i.e. long enough.
+
+
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_opcontrol b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_opcontrol
new file mode 100644
index 000000000..1617703d4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_opcontrol
@@ -0,0 +1,10 @@
+opcontrol --deinit
+opcontrol --reset
+
+#for callgraph
+opcontrol --vmlinux=/usr/lib/debug/boot/vmlinux-2.6.32-5-amd64 --callgraph=10 -i /home/soos/Development/sat_solvers/cryptominisat/build/cryptominisat --event=LLC_MISSES:200000 --event=CPU_CLK_UNHALTED:90000 --start
+
+#for l2 cache miss
+opcontrol --vmlinux=/usr/lib/debug/boot/vmlinux-2.6.32-5-amd64 --setup -i /home/soos/Development/sat_solvers/cryptominisat/build/cryptominisat --event=LLC_MISSES:300000 --callgraph=10 --start
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_perf b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_perf
new file mode 100644
index 000000000..b7cf81ae3
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/HOWTO_perf
@@ -0,0 +1,11 @@
+To 'connect' to already running instance
+========================================
+perf top
+
+But MUCH better results are achievable
+========================================
+Run cryptoms and record its profile into perf.data :
+perf record ./cryptominisat satfile.cnf
+
+Read perf.data and display profile:
+perf report
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/Makefile b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/Makefile
new file mode 100644
index 000000000..99046573a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/Makefile
@@ -0,0 +1,23 @@
+TEX = pdflatex -shell-escape -interaction=nonstopmode -file-line-error
+PRE = $(TEX) -ini -job-name="preamble" "&pdflatex preamble.tex\dump"
+BIB = bibtex
+
+all: cmsv4.pdf
+
+view :
+ open cmsv4.pdf
+
+cmsv4.pdf : cmsv4.tex cmsv4.bbl cmsv4.blg
+ $(TEX) cmsv4.tex
+
+cmsv4.bbl cmsv4.blg : cmsv4.bib cmsv4.aux
+ $(BIB) cmsv4
+
+cmsv4.aux : cmsv4.tex
+ $(TEX) cmsv4.tex
+
+cmsv4.bib : cmsv4.tex
+ $(TEX) cmsv4.tex
+
+clean:
+ rm -f *.aux *.bbl *.out cmsv4.pdf *.log *.blg
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/cmsv4.tex b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/cmsv4.tex
new file mode 100644
index 000000000..ec9b29d20
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/cmsv4.tex
@@ -0,0 +1,73 @@
+%\documentclass[runningheads]{llncs}
+\documentclass[final]{ieee}
+
+\usepackage{microtype} %This gives MUCH better PDF results!
+%\usepackage[active]{srcltx} %DVI search
+\usepackage[cmex10]{amsmath}
+\usepackage{amssymb}
+\usepackage{fnbreak} %warn for split footnotes
+\usepackage{url}
+%\usepackage{qtree} %for drawing trees
+%\usepackage{fancybox} % if we need rounded corners
+%\usepackage{pict2e} % large circles can be drawn
+%\usepackage{courier} %for using courier in texttt{}
+%\usepackage{nth} %allows to \nth{4} to make 1st 2nd, etc.
+%\usepackage{subfigure} %allows to have side-by-side figures
+%\usepackage{booktabs} %nice tables
+%\usepackage{multirow} %allow multiple cells with rows in tabular
+\usepackage[utf8]{inputenc} % allows to write Faugere correctly
+\usepackage[bookmarks=true, citecolor=black, linkcolor=black, colorlinks=true]{hyperref}
+\hypersetup{
+pdfauthor = {Mate Soos},
+pdftitle = {CryptoMiniSat v4},
+pdfsubject = {SAT Competition 2013},
+pdfkeywords = {SAT Solver, DPLL},
+pdfcreator = {PdfLaTeX with hyperref package},
+pdfproducer = {PdfLaTex}}
+%\usepackage{butterma}
+
+%\usepackage{pstricks}
+\usepackage{graphicx,epsfig,xcolor}
+\usepackage[algoruled, linesnumbered, lined]{algorithm2e} %algorithms
+
+\begin{document}
+\title{CryptoMiniSat v4}
+\author{Mate Soos\\Security Research Labs}
+
+\maketitle
+\thispagestyle{empty}
+\pagestyle{empty}
+
+\section{Introduction}
+This paper presents the conflict-driven clause-learning SAT solver CryptoMiniSat v4 (\emph{cmsat4}). \emph{cmsat4} aims to be a modern SAT Solver that allows for multi-threaded in-processing techniques while still retaining a strong CDCL component. In this description only the features relative to \emph{forl}, the previous year's submission, are explained. Please refer to the previous years' description for details.
+
+
+\subsection{Cleaner code}
+The code has been significantly cleaned up. In particular, it has been refactored to use more descriptive names, smaller functions and uses C++11 constructs that aid in simplifying code.
+
+\subsection{Better data gathering}
+More data is gathered into an SQL database that allows for interactive display of solving parameters. It also allows for later analysis of the solving, spotting e.g. that certain simplification steps take too long. Every simplification step is recorded and many important factors about clauses, clause cleaning, propagation and conflict analysis are dumped to the database.
+
+\subsection{Bounded variable addition}
+As per \cite{DBLP:conf/hvc/MantheyHB12}
+variables are added to simplify the formula. CryptoMiniSat allows for not only 1-literal diff as per the research paper, but also 2-literal diffs. In terms of the algorithm in the research paper this difference introduces almost no change, though makes the implementation somewhat more elaborate.
+
+\subsection{Tuned time-outs}
+Thanks to the SQL-based query functionality, time-outs could be queried easily and checked. This allowed for fine-tuning of time-outs for weird problems.
+
+\subsection{Multi-threading}
+An experimental multi-threading system has been added. It only exchanges unit and binary lemmas. The system works even in case of library usage: it cleanly aborts the other threads even if the other threads are solving subcomponents with subsolvers.
+
+\subsection{Better stability}
+The API has been cleaned up and connected to a number of fuzzers, including e.g. a wrapper for python and a python-based test-suite. This allowed for more rigorious testing to be carried out.
+
+\section*{Acknowledgements}
+The author would like to thank in no particular order Horst Samulowitz, Marius T. Lindauer, Martin Maurer, Martin Albrecht, Vegard Nossum, Valentin Mayer-Eichberger, George Katsirelos, Karsten Nohl, Luca Melette, Marijn Heule, Vijay Ganesh, Trevor Hansen and Robert Aston for their help.
+
+\bibliographystyle{splncs03}
+\bibliography{sigproc}
+
+\vfill
+\pagebreak
+
+\end{document}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/ieee.cls b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/ieee.cls
new file mode 100644
index 000000000..3c57bba5d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/ieee.cls
@@ -0,0 +1,1497 @@
+% Copyright 2014 IEEEE
+% for terms of use see https://www.ieee.org/publications_standards/publications/rights/copyrightpolicy.html
+
+% =========================================================================
+% -------------------------------------------------------------------------
+% XX X
+% X
+% XX XXX XXX XXX XXX X XXXX
+% X X X X X X X X X X X
+% X XXXXX XXXXX XXXXX X X XXX
+% X X X X XX X X X X
+% XXX XXX XXX XXX XX XXX X XXXX
+% -------------------------------------------------------------------------
+% =========================================================================
+% ieee.cls --- For formatting IEEE conference & journal papers
+% --- Compiled by Gregory Plett, Sept 1997
+%
+% This class was inspired by one first compiled by Gerry Murray and
+% Silvano Balemi for LaTeX209. It was later updated for use with
+% LaTeX2e, and some bugs were fixed, all by Istvan Kollar. Lastly,
+% I have tried to make the class easier to use by paper authors.
+% Significant new functionality has been added. Many routines are
+% "borrowed" from other people's packages and modified extensively.
+% When I rembered where I got the routines from, I gave the author
+% credit.
+%
+% After I made many changes on my own, I found a version by Peter
+% N"uchter, and tried to retain some amount of compatibility with his
+% version. To be completely compatible with him, you may need to
+% manually:
+% \usepackage{rawfonts}\usepackage{oldlfont}
+% \AtBeginDocument{\parindent1.0em} (?)
+%
+%===========================================================================
+%
+% Usage:
+% \documentclass[main-mode,sub-mode,misc-options]{ieee}
+% \usepackage{your own packages}
+% \begin{document}
+% \bibliographystyle{IEEEbib}
+% \title[short]{regular}
+% \author[short]{full}
+% \maketitle
+% \begin{abstract}...\end{abstract}
+% \begin{keywords}...\end{keywords}
+% \section{...}
+% \PARstart ... or \PARstartCal ...
+% ...
+% \begin{biography}[picname.ps]{Author's name}...\end{biography}
+% \end{document}
+%
+% The document class options are:
+%
+% main-mode: One of the following is required. (draft is the default)
+% draft: Double-spaced, single column with date/time stamp.
+% submission: Double-spaced, suitable for submission for review.
+% compressed: Same as "submission", only single spaced.
+% final: Double-column, for assessing page-length and
+% format of final version.
+%
+% sub-mode:
+% techreport: This can modify "final" to produce a two-col
+% technical report.
+% internal: This can modify "submission", "compressed" or "final".
+% It changes the header to notify the reader that
+% this is a version of the manuscript to be used for
+% internal review processes only, and not to be
+% distributed.
+% submitted: This can modify "compressed" or "final". It changes
+% the header to notify the reader that this
+% is a preprint and not to be distributed.
+% inpress: This can modify "compressed" or "final". It changes the
+% header to notify the reader that this paper has
+% been accepted for publishing, but it is not yet to be
+% distributed.
+% reprint: This can modify "final". It changes the header
+% to notify the reader where the paper is reprinted from.
+%
+% misc-options:
+% narroweqnarray: Changes the spacing around the "=" sign in
+% equation arrays to make it the same as in displayed math.
+% inline: Compresses the horizontal spacing of inline math equations.
+% notitlepage: No separate title page. (default)
+% titlepage: Separate title page.
+% anonymous: Omit all author information from main part of paper.
+% Author info only prints on titlepage.
+% 9pt,10pt,11pt,12pt: Choose the appropriate type size. You should
+% not need to do this as the "correct" size is automatically
+% chosen. However, if you want, you may use these to change
+% the type size of the main text. "9pt" is a bit of a hack
+% to retain backward-compatibility.
+% invited: If the paper is an "invited" paper, then this option
+% prints "(Invited Paper)" under the authors' names.
+%
+% For regular IEEE submissions, define the journal name as:
+% \journal{IEEE Trans. Inst. Meas.}
+%
+% To specify the conference place and date:
+% \confplacedate{Ottawa, Canada, May 19--21, 1997}
+%
+% Before \maketitle, define:
+% \title{Title of paper}
+% \author{Author1\member{Fellow}\authorinfo{Department of
+% Electrical Engineering\\ Some University, Somewhere, CA 94305
+% USA} \and Author2\member{Senior Member}\authorinfo{Deptartment of
+% Measurement and Instrument Eng., Another University, ...}}
+%
+% Note, the contents of \authorinfo tends to vary depending on if it is
+% a conference or journal paper. The amount of manual changes are
+% small, and must be done by a human anyway. The example given is for an
+% IMTC conference.
+%
+% See also IEEEbib.bst and ieeefig.sty
+% Also very useful for document preparation is the style file "endfloat",
+% available on all CTAN TeX archives.
+%
+%===========================================================================
+% modified 14 October 2002:
+% - fixed bibliography listing of [#] when # < 10 and number of
+% references is greater than 9. Thanks for Janos Markus for finding
+% this bug and suggesting a solution.
+% modified 15 January 2000:
+% - "fixed" narroweqnarray. Never implemented! Now it is...
+% modified 12 January 2000:
+% - modified so only first \title and \author commands are recognized.
+% This allows LyX to have \title and \author with full syntax in
+% header, but dummy \title and \author show up in GUI.
+% - added "\date" so the \date command can change "submitted" and
+% "draft" date headers.
+% modified 11 January 2000:
+% - added PARstartLyX and PARstartCalLyX for LyX compatibility
+% - added biographyLyX
+% modified 1 Dec 1997:
+% - fixed first page in reprint mode to be same length as other pages
+% - added "invited" misc-option
+% modified 5 Sept 1997:
+% - added the inpress, reprint and internal sub-modes
+% - removed IMTC-conf and CDC-conf to separate files
+% modified 1 Sept 1997:
+% - included Babel package compatibility
+% - removed paper title from header on first page of draft
+% manuscript
+% - removed the fixed option "letterpaper" to allow a4paper (etc)
+% modified 1 Aug 1997:
+% - included the CDC-conf option
+%===========================================================================
+% **************************************************************************
+% ****** ******************************************
+% ***** LaTeX2e INITIALIZATION *****************************************
+% ****** ******************************************
+% **************************************************************************
+\typeout{Document Class `ieee' <Modified: 2000, Gregory L. Plett>.}
+\NeedsTeXFormat{LaTeX2e}[1993/11/11] % Oldest acceptable version of LaTeX2e
+\ProvidesClass{ieee}[2000/01/11] % Name of package provided, date
+\def\i@@@cls{exists}
+
+% Initial Code & Declaration of Options
+% -------------------------------------
+\newif\ifev@l \ev@lfalse % true if "final" mode.
+\newif\ifsubm@t \subm@tfalse % true if "submission" mode.
+\newif\ifdr@ft \dr@fttrue % true if "draft" mode.
+\newif\ifc@mpress \c@mpressfalse % true if "compressed" mode.
+
+\newif\if@technote \@technotefalse % true if "technote" sub-mode.
+\newif\ifintern@l \intern@lfalse % true if "internal" sub-mode.
+\newif\ifprepr@nt \prepr@ntfalse % true if "preprint" sub-mode.
+\newif\ifinpr@ss \inpr@ssfalse % true if "inpress" sub-mode.
+\newif\ifrepr@nt \repr@ntfalse % true if "reprint" sub-mode.
+
+\newif\iftitlep@ge \titlep@gefalse % true if has own titlepage
+\newif\if@non \@nonfalse % true if anonymous
+\newif\ifixpt \ixptfalse % true if trying to do 9 pt
+\newif\if@nvited \@nvitedfalse % true if an invited paper
+
+% Main options
+% ------------
+\DeclareOption{draft}{\ev@lfalse\subm@tfalse\dr@fttrue%
+ \typeout{ieee: `Draft' mode selected.}}
+\DeclareOption{submission}{\ev@lfalse\dr@ftfalse\subm@ttrue%
+ \typeout{ieee: `Submission' mode selected.}}
+\DeclareOption{compressed}{\ev@lfalse\dr@ftfalse\subm@tfalse\c@mpresstrue%
+ \typeout{ieee: `Compressed' mode selected.}}
+\DeclareOption{final}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}}
+\DeclareOption{evaluation}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}} % synonym for final
+
+% Sub options
+% -----------
+\DeclareOption{technote}{\@technotetrue%
+ \typeout{ieee: `Technote' sub-mode selected.}}
+\DeclareOption{internal}{\intern@ltrue\prepr@ntfalse\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Internal-Review' sub-mode selected.}}
+\DeclareOption{submitted}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}}
+\DeclareOption{preprint}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}} % synonym for submitted
+\DeclareOption{inpress}{\intern@lfalse\prepr@ntfalse\inpr@sstrue\repr@ntfalse%
+ \typeout{ieee: `Inpress' sub-mode selected.}}
+\DeclareOption{reprint}{\intern@lfalse\prepr@ntfalse\inpr@ssfalse\repr@nttrue%
+ \typeout{ieee: `Reprint' sub-mode selected.}}
+
+% Misc options
+% ------------
+ % regular or compressed "=" spacing in
+\def\eqnarr@ysep{\arraycolsep} % eqnarray (this is the default)
+ % NOTE: we must use "def" and not "="
+ % as arraycolsep not yet defined.
+\DeclareOption{narroweqnarray}{\gdef\eqnarr@ysep{0.28em\relax}%
+ \typeout{ieee: Narrow equation arrays selected.}}
+\DeclareOption{inline}{\everymath{\thinmuskip=2mu plus 1mu
+ \medmuskip=3mu plus 1mu minus 2mu
+ \thickmuskip=4mu plus 2mu\relax}%
+ \typeout{ieee: Narrower inline equations selected.}}
+\DeclareOption{notitlepage}{\titlep@gefalse%
+ \typeout{ieee: No separate title page.}}
+\DeclareOption{titlepage}{\titlep@getrue%
+ \typeout{ieee: Use separate title page.}}
+\DeclareOption{anonymous}{\@nontrue\AtBeginDocument{\glpexclude{biography}}
+ \typeout{ieee: Omit author information from paper.}}
+\DeclareOption{invited}{\@nvitedtrue%
+ \typeout{ieee: (Invited Paper).}}
+
+\DeclareOption{9pt}{\ixpttrue%
+ \typeout{ieee: Trying to emulate old `9pt' document class.}}
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+% Execution of Options/Package Loading
+% ------------------------------------
+\newlength\narrowcol
+\newlength\parindentsave % recover parindent in blsone text
+
+\ProcessOptions
+\ifev@l % if "final" mode...
+ \if@technote\ixpttrue\typeout{ieee: Trying to emulate old `9pt'
+ document class.}\fi%
+ \LoadClass[twoside,final,twocolumn,10pt]{article}
+\else % if "draft"/"submission"/(compressed) mode...
+ \ifixpt
+ \LoadClass[oneside,final,onecolumn,10pt]{article}
+ \else
+ \LoadClass[oneside,final,onecolumn,12pt]{article}
+ \fi
+\fi
+\RequirePackage[final]{graphicx}
+\RequirePackage{ifthen}
+
+% Re-Definitions of English words which must be done before
+% the Babel package (optional) is loaded.
+% ---------------------------------------------------------
+\def\keywordsname{Index Terms}
+\def\indexterms#1{\def\keywordsname{#1}}
+\def\appendicesname{Appendices}
+\def\figurename{Fig.}
+
+% **************************************************************************
+% ***** Check Sub-Options for Compatibility w/ Main-Options ************
+% **************************************************************************
+\if@technote\ifev@l\else\ClassError{ieee}{`technote' sub-mode may be
+ used only with the `final' ^^Jmain-mode. It may not be used
+ with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+\ifintern@l\ifdr@ft\ClassError{ieee}{`internal' sub-mode may be
+ used only with the ^^J`submission,' `compressed,' or `final' main-modes.
+ It may not be used ^^Jwith the `draft' main-mode}{}\endinput\fi\fi
+\ifprepr@nt\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`submitted'
+ sub-mode may be used only with the ^^J`compressed' or `final'
+ main-modes. It may not be used with either the ^^J`draft' or
+ `submission' main-modes}{}\endinput\fi\fi\fi
+\ifinpr@ss\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`inpress'
+ sub-mode may be used only with the `compressed' ^^Jor `final'
+ main-modes. It may not be used with either the `draft' or
+ ^^J`submission' main-modes}{}\endinput\fi\fi\fi
+\ifrepr@nt\ifev@l\else\ClassError{ieee}{`reprint'
+ sub-mode may be used only with the `final' ^^Jmain-mode. It may not be
+ used with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+
+% **************************************************************************
+% ***** Page Layout Definition *****************************************
+% **************************************************************************
+%% Layout definitions (mostly) common to all options.
+
+\hoffset 0in \voffset 0in
+\headheight 12pt \headsep 7mm
+\marginparsep 10pt \marginparwidth 20pt
+\marginparpush 25pt
+\columnsep 4mm
+\parindent 1.0em
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\partopsep \z@
+\topsep 1.3ex
+\parsep \z@
+\itemsep \z@
+
+\setlength{\parindentsave}{\parindent}
+
+\ifev@l % if "evaluation" mode
+ % if camera-ready or A4paper ...
+ \ifdim\paperwidth<211mm
+ \oddsidemargin -11.4mm \evensidemargin -11.4mm
+ % for regular US Letter, not camera-ready
+ \else
+ \oddsidemargin -8.45mm \evensidemargin -8.45mm
+ \fi
+ \ifrepr@nt
+ \textheight 237.5mm % leave 6mm for cpyright on first page
+ \else
+ \textheight 243.5mm
+ \fi
+ \voffset -0.5in
+ \textwidth 182.0mm
+ \topmargin -12pt
+ \setlength{\narrowcol}{89mm}
+\else % if "draft"/"submission" mode...
+ \ifc@mpress % and "compressed"
+ \oddsidemargin -0.25in \evensidemargin -0.25in
+ \textheight 9in \textwidth 7in
+ \topmargin -0.25in
+ \setlength{\narrowcol}{7in}
+ \else % and NOT "compressed"
+ \renewcommand\baselinestretch{1.8}\renewcommand{\arraystretch}{0.8}
+ \parindent=1.8\parindent
+ \oddsidemargin 0pt \evensidemargin 0pt
+ \headheight 12pt \headsep 0.375in
+ \topmargin 0pt
+ \textheight 8.5in \textwidth 6.5in
+ \marginparsep 0in \marginparwidth 0pt
+ \marginparpush 5pt
+ \setlength{\narrowcol}{6.5in}
+ \fi
+\fi
+
+\def\normalstyle{\rmfamily}
+
+% **************************************************************************
+% ***** Font Definition ************************************************
+% **************************************************************************
+%% The 9-point option is being faked since it is not supported by the
+%% article base class.
+
+%% Check if we have selected 9 points
+\ifixpt
+\typeout{-- This is a 9 point document}
+\gdef\@ptsize{9}
+\def\@normalsize{\@setsize\normalsize{10.7pt}\ixpt\@ixpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.12pt}\viiipt\@viipt}
+\def\footnotesize{\@setsize\footnotesize{8.15pt}\viipt\@vipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vpt}
+\def\tiny{\@setsize\tiny{5pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{18pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+\fi
+%%
+%% Check if we have selected 10 points
+\def\@tempa{0}\if\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.2pt}\viiipt\@viiipt}
+\def\footnotesize{\@setsize\footnotesize{8.8pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{1}\if\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{2}\if\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\AtBeginDocument{\normalsize\normalstyle\ps@headings\pagenumbering{arabic}}
+
+% **************************************************************************
+% ***** List Definition ************************************************
+% **************************************************************************
+%% Change aspect of lists with
+%% 1) \itemindent, label indentation wrt to left list margin
+%% 2) \leftmargini, the indentation of the whole list (on left, first level)
+\ifev@l
+ \itemindent -1em
+ \leftmargini 2em
+ \leftmarginii 1em
+ \leftmarginiii 1.5em
+ \leftmarginiv 1.5em
+ \leftmarginv 1.0em
+ \leftmarginvi 1.0em
+\else
+ \itemindent -1em
+ \leftmargini 3em
+ \leftmarginii 3em
+ \leftmarginiii 3em
+ \leftmarginiv 3em
+ \leftmarginv 3em
+ \leftmarginvi 3em
+\fi
+%\itemindent 2em % Alternative values: sometimes used..
+%\leftmargini 0em
+\labelsep 5pt
+\leftmargin\leftmargini
+\labelwidth \z@
+
+\def\@listI{\leftmargin\leftmargini} \@listI
+\def\@listi{\leftmargin\leftmargini \topsep \z@ plus 1pt minus 1pt}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)} \def\theenumii{\alph{enumii}}
+\def\labelenumiii{\theenumiii.} \def\theenumiii{\roman{enumiii}}
+\def\labelenumiv{\theenumiv.} \def\theenumiv{\Alph{enumiv}}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\scriptstyle\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%% \itemindent is set to \z@ by list, so define new temporary variable
+\newdimen\tmpitemindent
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+\def\@mklab#1{#1}
+\def\description{\tmpitemindent\itemindent\list{}{\itemindent\tmpitemindent
+ \labelwidth\z@\def\makelabel##1{\hspace\labelsep\emph{##1}}}}
+\def\enddescription{\endlist\par}
+\def\enumerate{\tmpitemindent\itemindent\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \list{\csname label\@enumctr\endcsname}{\itemindent\tmpitemindent
+ \usecounter{\@enumctr}\def\makelabel##1{\hspace\labelsep\hfil{##1}}}\fi}
+\def\endenumerate{\endlist\par}
+\def\itemize{\tmpitemindent\itemindent\ifnum \@itemdepth >3 \@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}{\itemindent\tmpitemindent
+ \def\makelabel##1{\hspace\labelsep\hfil\emph{##1}}}\fi}
+\def\enditemize{\endlist\par}
+
+\newif\if@restonecol
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{coverpagestyle}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi%
+\if@twoside\mbox{}\thispagestyle{coverpagestyle}\c@page\z@\cleardoublepage\fi}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep\labelsep
+
+% **************************************************************************
+% ***** Footnote Definition ********************************************
+% **************************************************************************
+\skip\footins 10pt plus 5pt minus 2pt
+\footnotesep 7pt
+\footskip 6mm
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+\long\def\@makefntext#1{\parindent .8em\indent$^{\@thefnmark}$#1}
+\def\footnoterule{}
+
+% Reset baselinestretch within footnotes.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\long\def\@footnotetext#1{\insert\footins{\blsone%
+ \footnotesize\interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ \let\par\\
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% **************************************************************************
+% ***** Keep track of Sections *****************************************
+% **************************************************************************
+\if@technote
+ \setcounter{secnumdepth}{3}
+\else
+ \setcounter{secnumdepth}{4}
+\fi
+
+\def\thesection{\@Roman\c@section}
+\def\thesubsection{\Alph{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\thesubsubsectiondis{\Alph{subsection}.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\alph{paragraph}}
+\def\theparagraphdis{\thesubsubsectiondis.\alph{paragraph}}
+
+\def\theequation{\arabic{equation}}
+
+% **************************************************************************
+% ***** Table of Contents, List of Figures/Tables Definitions **********
+% **************************************************************************
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+ \@tempdima 1.8em \begingroup \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip-\@pnumwidth \bf\leavevmode #1\hfil\hbox to\@pnumwidth{\hss #2}
+ \par \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1em}{1.8em}}
+\def\listoftables{\section*{\listtablename}\@starttoc{lot}}
+\let\l@table\l@figure
+
+% **************************************************************************
+% ***** Float Definitions **********************************************
+% **************************************************************************
+%% Normal Floats %% Double Column Floats
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt
+%\@maxsep 20pt \@dblmaxsep 20pt %!PN
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+% Reset baselinestretch within floats.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\small\normalsize
+ \hsize\columnwidth \@parboxrestore}
+
+% **************************************************************************
+% ***** Caption Definition *********************************************
+% **************************************************************************
+% some journals do not have centered captions for figures.
+\newif\ifc@ptionleft \c@ptionlefttrue
+\def\leftfigcaptions{\c@ptionlefttrue}
+\def\centerfigcaptions{\c@ptionleftfalse}
+
+\long\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup \@parboxrestore \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+% changed by GLP to allow table captions to be set to a specific maximum
+% width "\captionwidth", if defined.
+\newlength{\captionindent}
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 5pt
+ \setbox\@tempboxa\hbox{\small #1.~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\small #1.~ }
+ %\setlength\captionindent{\wd\@tempboxa} \divide\captionindent by 2
+ %\parbox[t]{\hsize}{\small \hangindent \captionindent \hangafter=1%
+ \parbox[t]{\hsize}{\small
+ \unhbox\@tempboxa#2}
+ \else \hbox
+ to\hsize{\small\ifc@ptionleft\else\hfil\fi\box\@tempboxa\hfil}
+ \fi
+\else
+ \begin{center}
+ \ifx\captionwidth\undefined {\small #1}\\{\small\scshape #2}
+ \else
+ \begin{minipage}{\captionwidth}
+ \begin{center}{\small #1}\\{\small\scshape #2}\end{center}
+ \end{minipage}
+ \fi
+ \end{center}\vskip 4pt
+\fi}
+
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\ \thefigure}
+%\def\figure{\@float{figure}} % GLP
+%\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% **************************************************************************
+% ***** Header/Footer Definition ***************************************
+% **************************************************************************
+% compute the time in hours and minutes; make new vars \timehh and \timemm
+\newcount\timehh\newcount\timemm\timehh=\time\divide\timehh by 60
+\timemm=\time\count255=\timehh\multiply\count255 by-60
+\advance\timemm by \count255
+\ifnum\timehh=12\def\apm{pm}\else
+\ifnum\timehh>12\def\apm{pm}\advance\timehh by-12\else
+\def\apm{am}\fi\fi
+\def\t@me{\number\timehh\,:\,\ifnum\timemm<10 0\fi\number\timemm\,\apm}
+
+% default definitions
+% -------------------
+\def\theevenhe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+\def\theoddhe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+\def\theevenf@@t{}
+\def\theoddf@@t{}
+
+\def\theeventphe@d{\footnotesize\thepage \hfil \hbox{}}
+\def\theoddtphe@d{\hbox{}\footnotesize \hfil \thepage}
+\def\theeventpf@@t{}
+\def\theoddtpf@@t{}
+
+\def\theevencphe@d{}
+\def\theoddcphe@d{}
+\def\theevencpf@@t{}
+\def\theoddcpf@@t{}
+
+\def\internalmsg{Preliminary version for evaluation: Please do not
+ circulate without the permission of the author(s)}
+\def\submittedmsg{SUBMITTED FOR PUBLICATION TO:}
+\def\acceptedmsg{ACCEPTED FOR PUBLICATION:}
+\def\inpressmsg{(IN PRESS)}
+\def\reprintmsg{REPRINTED FROM:}
+
+% default cover page style (optional cover page)
+% ----------------------------------------------
+\def\ps@coverpagestyle{
+ \def\@oddhead{\theoddcphe@d} \def\@evenhead{\theevencphe@d}
+ \def\@oddfoot{\theoddcpf@@t} \def\@evenfoot{\theevencpf@@t}
+}
+
+% default title page style (first page of paper)
+% ----------------------------------------------
+\def\ps@titlepagestyle{
+ \def\@oddhead{\theoddtphe@d} \def\@evenhead{\theeventphe@d}
+ \def\@oddfoot{\theoddtpf@@t} \def\@evenfoot{\theeventpf@@t}
+}
+
+% default regular page style
+% --------------------------
+\if@twoside
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@evenhead{\theevenhe@d}
+ \def\@oddfoot{\theoddf@@t} \def\@evenfoot{\theevenf@@t}
+ }
+\else
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@oddfoot{\theoddf@@t}
+ \def\@evenhead{} \def\@evenfoot{}
+ }
+\fi
+
+% For draft mode (no sub-modes allowed)
+% -------------------------------------
+\ifdr@ft
+ \def\leftmark{\sh@rttitle}\let\rightmark\leftmark
+ \def\theoddf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theevenf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+ \def\theoddtpf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theeventpf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+\fi
+
+% For submission mode (default plus internal sub-modes allowed)
+% -------------------------------------------------------------
+\ifsubm@t
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \else % put date on first page.
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+\fi
+
+% For compressed mode (default, internal, submitted and
+% inpress sub-modes allowed)
+% -----------------------------------------------------
+\ifc@mpress
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \fi
+\fi
+
+% For final (evaluate) mode (default, techreport, internal,
+% submitted, inpress and reprint sub-modes allowed)
+% ---------------------------------------------------------
+\ifev@l
+ \edef\TODAY{\uppercase{\today}}
+ \def\leftmark{\@journal\@titletext}\def\rightmark{\titl@line}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \if@technote % make header a little bigger
+ \def\theevenhe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddhe@d{\hbox{}\small\rightmark \hfil \thepage}
+ \def\theeventphe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\small\leftmark \hfil \thepage}
+ \fi
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \def\leftmark{\submittedmsg\ \@journal\@titletext, \TODAY}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \fi
+ \ifrepr@nt
+ % reset page size on second and following pages b/c no copyright info
+ \let\oldshipout\shipout
+ \gdef\shipout{\global\textheight 243.5mm\oldshipout}
+ \def\theeventpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\theoddtpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\leftmark{\reprintmsg\ \@journal\@titletext}
+ \fi
+\fi
+
+%% Defines the command for putting the header. footernote{TEXT} is the same
+%% as markboth{TEXT}{TEXT}. Here for compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+\def\footernote#1{\markboth{#1}{#1}}
+
+% **************************************************************************
+% ***** Citation/Bibliography Definitions ******************************
+% **************************************************************************
+%% separate citations with "], ["
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{],
+[}\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on
+page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{[{#1\if@tempswa, #2\fi}]}
+
+%% Allow short (name-less) citations, when used in conjunction with a
+%% bibliography style that creates labels like \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
+
+\def\thebibliography#1{\section*{\refname}\footnotesize\list
+ {\hss[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep \itemsep 0pt plus .5pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+ \ifev@l\else\normalsize\fi %added by GLP
+}
+\let\endthebibliography=\endlist
+
+% **************************************************************************
+% ***** Appendix/Appendices Definitions ********************************
+% **************************************************************************
+\newcounter{numappendices}\setcounter{numappendices}{0}
+\newif\ifappendix \appendixfalse
+%% appendix command for one single appendix
+\def\appendix{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}}
+ \ifnum \value{numappendices}>1
+ \section*{\appendicesname}
+ \else
+ \section*{\appendixname}
+ \fi
+ \setcounter{numappendices}{0}
+}
+%% appendices command for multiple appendicies
+\def\appendices{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}} \section*{\appendicesname}
+ \setcounter{numappendices}{0}
+}
+\AtEndDocument{\if@filesw\immediate\write\@auxout{\string\setcounter{numappendices}{\arabic{numappendices}}}\fi}
+
+% **************************************************************************
+% ***** Title Definitions **********************************************
+% **************************************************************************
+\def\titl@line{\sh@rttitle} %for the header at the top of the page.
+
+\def\@title{\typeout{ieee: Warning! No \noexpand\title given!}}
+\def\title{\@ifnextchar [{\titlea}{\titleb}}%]
+
+\def\set@title#1{\gdef\@title{#1}\global\def\set@title##1{}}
+\def\setsh@rttitle#1{\gdef\sh@rttitle{#1}\global\def\setsh@rttitle##1{}}
+\def\titlea[#1]#2{\set@title{#2}\setsh@rttitle{\uppercase{#1}}}
+\def\titleb#1{\set@title{#1}\setsh@rttitle{\uppercase{#1}}}
+
+\def\authorinfo#1{\let\\\relax\thanks{#1}}
+
+\ifev@l
+ \if@technote
+ \def\member#1{}
+ \else
+ \def\member#1{, \emph{#1, IEEE}}
+ \fi
+\else
+ \def\member#1{}
+\fi
+
+\def\and{\unskip% % \begin{tabular}
+\end{tabular}%
+\hskip 0pt plus 0.1pt%
+\begin{tabular}[t]{@{}c@{}}\ }%
+
+\def\@author{\typeout{ieee: Warning! No \noexpand\author given!}}
+\def\author{\@ifnextchar [{\authora}{\authorb}}%]
+\def\set@author#1{\gdef\@author{#1}\global\def\set@author##1{}}
+\def\settitl@line#1{\gdef\titl@line{#1}\global\def\settitl@line##1{}}
+\def\authora[#1]#2{\set@author{#2}\if@non\else\settitl@line{#1: \sh@rttitle}\fi}
+\def\authorb#1{\set@author{#1}}
+
+\def\date#1{\def\today{#1}\edef\TODAY{\uppercase{\today}}}
+
+\long\def\maketitle{%
+ \begingroup
+ \let\@thanks\@empty
+ \renewcommand\thefootnote{} % the \thanks{} mark type is empty
+ \iftitlep@ge\begin{titlepage}\@maketitlepage\@thanks\end{titlepage}%
+ \let\@thanks\@empty\fi
+ \thispagestyle{titlepagestyle}
+ \if@twocolumn
+ \if@technote
+ %\if@twoside\newpage\cleardoublepage\else\newpage\fi%
+ \newpage\global\@topnum\z@
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else
+ \ifnum \col@number=\@ne
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else \twocolumn[%
+ \ifrepr@nt%
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo%
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi%
+ \@maketitle]%
+ \fi
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi
+ \fi
+ \@maketitle
+ \fi
+ \thispagestyle{titlepagestyle}%
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax \global\let\maketitle\relax
+ \global\let\@maketitle\relax \global\let\@thanks\@empty
+ \global\let\@author\@empty \global\let\@date\@empty
+ \global\let\@title\@empty \global\let\title\relax
+ \global\let\author\relax \global\let\date\relax
+ \global\let\and\relax
+}
+
+\long\def\@maketitle{\unskip\newpage%
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\if@non\else\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}\fi\par
+ \else\unskip
+ \noindent{\Huge\@title\par}%
+ \if@non\else\vskip1.0em%
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}%
+ \fi\par%
+ \if@nvited\vskip1.0em\noindent\emph{\large(Invited Paper)}\par\fi
+ \fi
+ \ifrepr@nt
+ \ifx\@lognumber\undefined\typeout{ieee: Warning! No
+ \noexpand\pubitemident or \noexpand\lognumber
+ given!}\else\thanks{\@lognumber}\fi%
+ \fi
+ \end{center}\par\vskip 0.5em}%
+
+\long\def\@maketitlepage{\newpage%
+ \mbox{}\vfil
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}
+ \else
+ \vskip0.2em{\Huge\@title\par}\vskip1.0em%
+ \iftitlep@ge\vfil\fi
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}%
+ \fi
+ \end{center}\par\vfil\mbox{}}
+
+\def\@journal{\typeout{ieee: Warning! No \noexpand\journal given!}}
+\def\journal#1{\def\@journal{\uppercase{#1}}}
+
+\def\@ieeecopyright{\typeout{ieee: Warning! No \noexpand\ieeecopyright given!}}
+\def\ieeecopyright#1{\def\@ieeecopyright{#1}}
+
+\def\lognumber#1{\def\@lognumber{IEEE Log Number #1.}}
+\def\pubitemident#1{\def\@lognumber{Publisher Item Identifier #1.}}
+\long\def\loginfo#1{\long\def\@loginfo{\hbox{\vrule height 3ex width \z@}#1}}
+
+\def\sh@rttitle{}
+\def\@titletext{}
+\def\titletext#1{\def\@titletext{#1}}
+
+\def\firstpage#1{\setcounter{page}{#1}}
+
+% **************************************************************************
+% ***** Abstract Definition ********************************************
+% **************************************************************************
+\def\abstract{%
+ \if@twocolumn
+ \small\bfseries{\itshape\abstractname\/---}%
+ \else
+ \begin{center}\vspace{-0.8em}\small\bf\abstractname\end{center}
+ \quotation\small
+ \fi\ignorespaces}
+\def\endabstract{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Keywords Definition ********************************************
+% **************************************************************************
+\def\keywords{\vspace{-.3em}
+ \if@twocolumn
+ \small\bfseries{\itshape\keywordsname\/---}%
+ \else
+ \begin{center}\small\bf\keywordsname\end{center}\quotation\small
+ \fi\ignorespaces}
+\def\endkeywords{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Fix Section Numbering ******************************************
+% **************************************************************************
+\gdef\@punct{.\ \ } % Punctuation after run-in section heading
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{%
+ %\ifnum #2=1\Roman{#1}.\fi\ifnum #2=2\Alph{#1}.\fi
+ \ifnum #2=1\thesection.\fi
+ \ifnum #2=2\thesubsection.\fi
+ \ifnum #2>2{\csname the#1dis\endcsname}\if@technote.\fi\fi \hskip .5em}
+ \ifnum #2=1\ifappendix\stepcounter{numappendices}\fi\fi
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}
+ \fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5\@punct}\fi
+ \@xsect{#3}}
+
+% **************************************************************************
+% ***** Section Definitions ********************************************
+% **************************************************************************
+\def\section{\@startsection{section}{1}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\centering\scshape}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\itshape}}
+\if@technote
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .1ex}{0pt}{\itshape}}
+\else
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\normalstyle}}
+ \def\paragraph{\@startsection{paragraph}{4}{\z@}{1.0ex plus .5ex
+ minus .2ex}{0ex}{\normalstyle}}
+\fi
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\def\QED{\mbox{\rule[0pt]{1.5ex}{1.5ex}}}
+\def\proof{\noindent\hspace{1em}{\it Proof: }}
+\def\endproof{\hspace*{\fill}~\QED\par\endtrivlist\unskip}
+\def\@begintheorem#1#2{\tmpitemindent\itemindent\topsep 0pt\normalstyle\trivlist
+ \item[\hskip \labelsep{\indent\it #1\ #2:}]\itemindent\tmpitemindent}
+\def\@opargbegintheorem#1#2#3{\tmpitemindent\itemindent\topsep 0pt\normalstyle \trivlist
+ \item[\hskip\labelsep{\indent\it #1\ #2\ \normalstyle(#3)}]\itemindent\tmpitemindent}
+\def\@endtheorem{\endtrivlist\unskip}
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\if@twoside\else\raggedbottom\fi
+
+%% Definition for Big letter at the beginning of a paragraph
+%%
+\def\PARstart#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartCal#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartLyX#1{\PARstart #1}
+\def\PARstartCalLyX#1{\PARstartCal #1}
+
+\if@technote\def\PARstart#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartCal#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartLyX#1{#1}\fi % if technical note, disable it
+\if@technote\def\PARstartCalLyx#1{#1}\fi % if technical note, disable it
+
+% **************************************************************************
+% ***** Misc. Definitions **********************************************
+% **************************************************************************
+%Restore single spacing
+\newcommand{\blsone}{\renewcommand\baselinestretch{1}%
+ \renewcommand\arraystretch{1.2}\setlength{\parindent}{\parindentsave}%
+ \normalsize}
+\newcommand{\capitem}[1]{{\hspace{0.2ex}(#1)}~}
+\newcommand{\insdate}{}
+
+% **************************************************************************
+% ***** MATH Definitions ***********************************************
+% **************************************************************************
+\def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \eqnarr@ysep\hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \eqnarr@ysep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\def\endeqnarray{%
+ \@@eqncr
+ \egroup
+ \global\advance\c@equation\m@ne
+ $$\@ignoretrue
+}
+
+% **************************************************************************
+% ***** Biography Definitions ******************************************
+% **************************************************************************
+% This is the main code for the biography environment of the IEEE
+% transactions class. The previous biography code had some known
+% problems which were difficult to fix. The crux of the issue was that
+% the photo frame was overlaid by text when \baselinestretch>1 or when
+% the biography consisted of multiple short paragraphs.
+%
+% The fix was done by extracting code from the excellent package:
+% 'picinpar.sty' version 1.2a as of july 13, 1993
+% by Friedhelm Sowa
+%
+% (At least most of) The bugs you find in this code were introduced
+% unwittingly by myself.
+%
+%----------------
+% Known problems:
+%
+% - Don't use multiple blank lines to separate paragraphs. A single
+% blank line works well, but multiple blank lines will confuse
+% the code. This has something to do with the \def\par{\\\indent}
+% line, but I can't think of an appropriate fix. Similarly, make
+% sure the environment doesn't end with an extra blank line.
+% - Don't use \samepage
+% - Use \footnotemark within and \footnotetext outside the
+% window-environment instead of \footnote
+% - When using the epic-package load picinpar before epic
+% like \documentstyle[...,picinpar,epic]{...}
+%
+% Counts
+\newcount\br \newcount\nb \newcount\tcdsav \newcount\tcl \newcount\tcd
+\newcount\tcn \newcount\cumtcl
+% Dimens
+\newdimen\rtside \newdimen\hpic \newdimen\vpic \newdimen\strutilg
+\newdimen\picwd \newdimen\topheight \newdimen\ilg \newdimen\lpic
+\newdimen\lwindowsep \newdimen\rwindowsep % VK 10 Feb 93
+\lwindowsep0.5\baselineskip % "
+\rwindowsep0.5\baselineskip % "
+\newdimen\cumpar
+% Tokens
+\newtoks\twa \newtoks\la \newtoks\ra \newtoks\ha \newtoks\pictoc
+% Boxes
+\newbox\rawtext \newbox\holder \newbox\windowbox \newbox\wartext
+\newbox\finaltext \newbox\aslice \newbox\bslice \newbox\wbox
+\newbox\wstrutbox \newbox\picbox \newbox\waslice \newbox\wbslice
+\newbox\fslice
+ % Another strut
+\def\wstrut{\relax\ifmmode\copy\wstrutbox\else\unhcopy\wstrutbox\fi}
+%
+
+\def\getpic#1{\sbox{\@tempboxa}{\includegraphics{#1}}%
+\newcount\tmpcta \tmpcta=\ht\@tempboxa%
+\newcount\tmpctb \tmpctb=\wd\@tempboxa%
+\divide\tmpctb by 100%
+\divide\tmpcta by\tmpctb%
+\ifnum\tmpcta>133%
+\typeout{ieee: Biography picture `#1' too tall.}%
+\frame{\hbox to 25mm{\hfil\resizebox{!}{32mm}{\usebox{\@tempboxa}}\hfil}}%
+\else \ifnum\tmpcta<123%
+\typeout{ieee: Biography picture `#1' too wide.}%
+\frame{\vbox to 32mm{\vss\hbox{\resizebox{25mm}{!}{\usebox{\@tempboxa}}}\vss}}%
+\else%
+\resizebox{25mm}{32mm}{\usebox{\@tempboxa}}
+\fi\fi}
+
+\long\def\biographyLyX#1{\if@non\else\begin{biography} #1\end{biography}\fi}
+
+\if@non
+ \long\def\biography{}
+\else
+ \long\def\biography{\@ifnextchar [{\@biographyb}{\@biographya[{\unitlength
+ 1mm\hbox{\framebox(25,32){}}}]}}
+\fi
+
+\long\def\@biographyb[#1]{\@biographya[\getpic{#1}]}
+
+\long\def\@biographya[#1]#2{\bgroup
+\footnotesize\bigskip\bigskip\bigskip\parskip=0pt\par%
+\rule{0pt}{35mm}\vspace*{-35mm}\par% garantees correct page breaking
+\begin{main@bio}[{#1}]%
+\noindent{\bf #2}%
+}
+\def\endbiography{\if@non\else\end{main@bio}\egroup\fi}
+
+\long\def\main@bio[#1]{% #1 is the material for setting a graphic box
+\vskip\parskip\everypar{}
+\global\cumpar=0pt
+\global\cumtcl=0
+ \tcd=0
+ \rtside=0pt
+% \hpic=\linewidth
+ \twa={} \la={} \ra={} \ha={}
+\setbox\wbox=\hbox{(}
+\computeilg
+\pictoc={#1}
+\setbox\windowbox=\vbox{\hbox{#1}}
+\picwd=\wd\windowbox
+\hpic=\picwd
+\vpic=\ht\windowbox\advance\vpic\dp\windowbox
+\rtside=\linewidth\advance\rtside-\picwd
+\setbox\picbox=\vbox{\hsize=\hpic\vbox to\vpic{\box\windowbox}}% \vfill}}%
+
+\vpic=\ht\picbox\advance\vpic\dp\picbox
+\ifdim\rtside>0pt\advance\rtside-\rwindowsep\fi % "
+\global\br=\rtside
+\ifnum\picwd=0
+\ifdim\vpic>0pt\picwd=\hpic
+\else\vpic=\ht\picbox\advance\vpic\dp\picbox
+\fi
+\fi
+ \global\tcl=0 \lpic=0pt
+ \loop\global\advance\tcl by 1 \lpic=\tcl\baselineskip
+ \ifdim\lpic<\vpic\repeat
+ \vpic=\lpic
+ \global\cumtcl=\tcl
+%
+% Here we know exactly the number of indented lines and
+% are able to generate the tokens for the \parshape list
+%
+ \ifnum\br>0\ra={ 0pt \rtside}\fi
+ \ifnum\tcd>0\ha={ 0pt \linewidth}\fi
+ \ifnum\tcl<1\global\tcl=1\fi
+ \createparshapespec
+ \tcd=0 % restore the lintel
+ \global\tcdsav=0
+%
+% This is a very tricky part of the package. Some day there
+% will exist a detailed documentation.
+%
+\def\par{\\\indent}
+%
+% This is where we start to pick up the paragraph(s)
+%
+ \setbox\rawtext=\vbox\bgroup\unvbox\rawtext\unskip
+ \clubpenalty=0\widowpenalty=0
+ \ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+ \tolerance=1000
+ \parshape=\tcn \the\twa }
+%
+\def\endmain@bio{%
+ %\par
+ \global\tcd=\tcdsav
+ \egroup\vskip\parskip\parshape=0 % reset parshape; end \box\rawtext
+ \vbadness=10000
+ \splittopskip=0pt
+%
+% Now we build the boxes beside the window
+%
+\global\topheight=\tcl\baselineskip
+\ifnum\br>0\setbox\holder=\vsplit\rawtext to\topheight\fi
+\tcn=\tcl \nb=0
+\ifnum\br>0\nb=\tcn\fi
+%
+% text on the right side
+%
+\ifnum\nb>0
+ \loop\advance\nb -1
+ \setbox\bslice=\vsplit\holder to\baselineskip
+ \prune\bslice\rtside
+ \setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+ to\rtside{\box\bslice\hfil}}
+ \ifdim\ht\holder>0pt\repeat
+\fi
+%GLP add fix to make sure bio starts at top of picture
+\setbox\wbslice=\vbox to\topheight{\unvbox\wbslice\vfill\vss}
+%
+% fixing the dimensions of the window part
+%
+\topheight=\ht\wbslice
+%
+% ship out the window material to the main vertical list
+%
+\setbox\windowbox=\vbox{\hbox to\linewidth{%
+\vbox to\topheight{\hrule width\picwd height0pt depth0pt\vskip0pt%
+\vfill\unvbox\picbox%
+\ifnum\picwd>0\vfill\fi%
+\vss}\ifnum\br>0\hfill\vbox{\box\wbslice}\fi}}%
+%
+\unvbox\windowbox%
+\loop% lines below picture....
+ \setbox\bslice=\vsplit\rawtext to\baselineskip
+ \prune\bslice\linewidth
+ \setbox\wbslice=\vbox{\hbox to\linewidth{\box\bslice\hfil}}
+ \unvbox\wbslice
+ \ifdim\ht\rawtext>0pt
+\repeat
+%GLP
+%\ifnum\nb>0\topheight=\nb\baselineskip %\advance\topheight by\ilg
+%\vspace*{\topheight}
+%\fi
+}% FINITO
+%
+% What else do we need?
+%
+\def\prune#1#2{
+% take a \vbox containing a single \hbox,
+% \unvbox it, and cancel the \lastskip
+% put in a \hbox of width #2
+ \unvbox#1 \setbox#1=\lastbox % \box#1 now is an \hbox
+ \ifdim\ht#1=\parskip
+ \setbox#1=\hbox to#2{\vrule height\parskip depth0pt width0pt\hfill}
+ \else\ifdim\ht#1=0pt\relax
+ \else\setbox#1=\hbox to#2{\wstrut\unhbox#1\unskip}\fi\fi}
+%
+% Here the token \twa is generated.
+% It's not so difficult as it looks like.
+%
+\def\createparshapespec{%
+\global\tcn=0
+\ifnum\br>0\global\tcn=\tcl\fi
+\nb=0
+\ifnum\br>0\nb=\tcn\fi
+\global\advance\tcn by\tcd \global\advance\tcn by1
+\ifnum\tcd>0
+\loop\twa=\expandafter{\the\twa\the\ha}\advance\tcd -1
+\ifnum\tcd>0\repeat
+\fi
+\ifnum\nb>0
+\loop\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\nb>0\repeat
+\fi
+\global\twa=\expandafter{\the\twa 0pt \the\linewidth}}
+%
+\def\computeilg{% compute the interline glue
+ \tcl=0\ilg=0pt\strutilg=0pt
+ \loop\setbox\wbox=\hbox{\char\tcl}
+ \ifdim\ht\wbox>\ilg\ilg=\ht\wbox\fi
+ \ifdim\dp\wbox>\strutilg\strutilg=\dp\wbox\fi
+ \advance\tcl by 1
+ \ifnum\tcl<128\repeat
+ \ht\wbox=\ilg
+ \dp\wbox=\strutilg
+ \strutilg=\ht\wbox %\advance\strutilg by\ilg
+ \ifdim\strutilg>\baselineskip
+ \typeout{character with height greater baselineskip found in font}
+ \typeout{baselineskip changed to 1.5 of that height!}
+ \baselineskip=1.5\strutilg
+ \fi
+ \global\ilg=\baselineskip
+ \global\advance\ilg-\ht\wbox \global\advance\ilg-\dp\wbox
+ \strutilg=\ht\wbox \advance\strutilg by\ilg
+ \setbox\wstrutbox=\hbox{\vrule height\strutilg depth\dp\wbox width0pt}}
+
+
+% the following code from version.sty by Stephen Bellantoni 1990, loosely
+% based on "annotation.sty" by Tom Hofmann. Used to exclude "biography" from
+% anonymous mode.
+\begingroup
+\catcode`@=11\relax%
+\catcode`{=12\relax\catcode`}=12\relax%
+\catcode`(=1\relax \catcode`)=2\relax%
+\gdef\glpinclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ ()%
+ \expandafter\gdef\csname end#1\endcsname%
+ ()%
+)%
+\gdef\glpexclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ (\@bsphack\catcode`{=12\relax\catcode`}=12\relax\csname #1@NOTE\endcsname)%
+ \long\expandafter\gdef\csname #1@NOTE\endcsname ##1\end{#1}%
+ (\csname #1END@NOTE\endcsname)%
+ \expandafter\gdef\csname #1END@NOTE\endcsname%
+ (\@esphack\end(#1))%
+)%
+\endgroup
+
+%-------
+\def\@confplacedate{\typeout{ieee: Warning! No \noexpand\confplacedate set!}
+\bfseries `confplacedate' needs to be set. For example, to: Stanford, CA, USA,
+September 29--30, 1991}
+\def\confplacedate#1{\def\@confplacedate{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% End of ieee.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/sigproc.bib b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/sigproc.bib
new file mode 100644
index 000000000..6ccae92ae
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/sigproc.bib
@@ -0,0 +1,2549 @@
+@BOOK{salas:calculus,
+ AUTHOR = "S.L. Salas and Einar Hille",
+ TITLE = "Calculus: One and Several Variable",
+ PUBLISHER = "John Wiley and Sons",
+ ADDRESS = "New York",
+ YEAR = "1978" }
+
+@inproceedings{804350,
+ author = {Thomas J. Schaefer},
+ title = {The complexity of satisfiability problems},
+ booktitle = {{STOC}'78},
+ year = {1978},
+ pages = {216--226},
+ location = {San Diego, California, United States},
+ doi = {http://doi.acm.org/10.1145/800133.804350},
+}
+
+Proceedings of the tenth annual ACM symposium on Theory of computing --
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings{smith94phase,
+ author = "Barbara Smith",
+ title = "The Phase Transition in Constraint Satisfaction Problems: {A} {CL}oser Look at the Mushy Region",
+ booktitle = {{ECAI}'94},
+ year = "1994"
+}
+
+@inproceedings{cheeseman91where,
+ author = "Peter Cheeseman and Bob Kanefsky and William M. Taylor",
+ title = "Where the Really Hard Problems Are",
+ booktitle = "IJCAI-91",
+ pages = "331--337",
+ year = "1991",
+}
+Proceedings of the Twelfth International Joint Conference on Artificial Intelligence, Sidney, Australia
+
+@INPROCEEDINGS{Juels-2004-scn,
+ author = {Juels, Ari},
+ title = {Minimalist Cryptography for Low-Cost {RFID} Tags},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2004},
+ year = {2004},
+ editor = {Blundo, Carlo and Cimato, Stelvio},
+ volume = {3352},
+ series = {LNCS},
+ pages = {149--164},
+ month = {September},
+ publisher = {Springer-Verlag},
+ address = {Amalfi, Italia},
+}
+
+
+@inproceedings{achlioptas-threshold,
+ author = {Dimitris Achlioptas and Yuval Peres},
+ title = {The Threshold for Random k-{SAT} is 2\^\ k(ln 2 - O(k))},
+ booktitle = {{STOC}'03},
+ year = {2003},
+ isbn = {1-58113-674-9},
+ pages = {223--231},
+ location = {San Diego, CA, USA},
+ doi = {http://doi.acm.org/10.1145/780542.780577},
+}
+Proceedings of the thirty-fifth annual ACM symposium on Theory of computing --
+publisher = {ACM Press}
+address = {New York, NY, USA}
+
+@article{DPLL,
+ author = {Martin Davis and Hilary Putnam},
+ title = {A Computing Procedure for Quantification Theory},
+ journal = {J. ACM},
+ volume = {7},
+ number = {3},
+ year = {1960},
+ issn = {0004-5411},
+ pages = {201--215},
+ doi = {http://doi.acm.org/10.1145/321033.321034},
+}
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings {Minisat+,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Translating {P}seudo-{B}oolean constraints into {SAT}},
+ booktitle= {Journal on Satisfiability, Boolean Modeling and Computation},
+ year = {2006},
+ pages = {1-26},
+ volume = {2},
+}
+
+@inproceedings {EenS03MiniSat,
+ title = {An Extensible {SAT}-solver},
+ author = {Niklas E\'en and Niklas S\"{o}rensson},
+ booktitle = {SAT},
+ editor = {Enrico Giunchiglia and Armando Tacchella},
+ pages = {502--518},
+ publisher = {Springer},
+ series = {LNCS},
+ url = {http://dblp.uni-trier.de/db/conf/sat/sat2003.html#EenS03},
+ volume = {2919},
+ year = {2003},
+ ee = {http://www.cs.chalmers.se/Cs/Research/FormalMethods/MiniSat/cgi/MiniSat.ps.gz.cgi},
+ keywords = {2003 2004 SAT-solver ais-07w efficiency implementation },
+}
+
+@misc { toolbar,
+ author="S. Bouveret and F. Heras and S. de Givry and J. Larrosa and M. Sanchez and T. Schiex",
+ title="Toolbar: a state-of-the-art platform for wcsp",
+ url="http://www.inra.fr/mia/T/degivry/ToolBar.pdf",
+ year="2004"
+}
+
+@inproceedings{1267340,
+ author = {Kirschenbaum, Ilan and Wool, Avishai},
+ title = {How to build a low-cost, extended-range {RFID} skimmer},
+ booktitle = {USENIX-SS'06: Proceedings of the 15th conference on {USENIX} Security Symposium},
+ year = {2006},
+ location = {Vancouver, B.C., Canada},
+ publisher = {{USENIX} Association},
+ address = {Berkeley, CA, USA},
+}
+
+@misc{Benetton-boycott,
+ author = {{CASPIAN - Consumers Against Supermarket Privacy Invasion and Numbering}},
+ howpublished={Press release},
+ note= {\url{http://www.boycottbenetton.com}},
+ title = {Boycott {B}enetton},
+ year = {2003},
+ month = {March},
+}
+
+@article{ improved-deterministic,
+ author="Michael H. Schulz and Elisabeth Auth",
+ title="Improved Deterministic Test Pattern Generation with Applications to Redundancy Identification",
+ year="1989",
+ month="July",
+ journal="IEEE Transactions on computer-aided design",
+ volume="8",
+ number="7",
+ pages={811--816},
+ issn="0278-0070"
+}
+publisher = " IEEE Circuits and Systems Society",
+address="Piscataway, NJ 08854, USA",
+
+@inproceedings{244560,
+ author = {Jo\&\#227;o P. Marques Silva and Karem A. Sakallah},
+ title = {{GRASP}-a new search algorithm for satisfiability},
+ booktitle = {ICCAD'96},
+ year = {1996},
+ isbn = {0-8186-7597-7},
+ pages = {220--227},
+ location = {San Jose, California, United States},
+ publisher = {IEEE Computer Society},
+}
+Proceedings of the 1996 IEEE/ACM international conference on Computer-aided design ---
+address = {Washington, DC, USA},
+
+ @inproceedings{ chai03fast,
+ author = "D. Chai and A. Kuehlmann",
+ title = "A fast pseudo-boolean constraint solver",
+ pages = {305--317},
+ booktitle = "IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 2003",
+ year = {2003},
+ month =" mar",
+ volume = "24",
+ issue = "3",
+ issn = "0278-0070"
+}
+publisher = "IEEE Circuits and Systems Society",
+
+@TechReport{EPC-standard,
+ author = "EPCglobal",
+ url="http://www.epcglobalinc.org/standards/specs/13.56_MHz_ISM_Band_Class_1_RFID_Tag_Interface_Specification.pdf",
+ title="13.56 {MHz} {ISM} Band Class 1 Radio Frequency Identification Tag Interface Specification (2003)",
+ institution = "Auto-ID cetner, MIT",
+ year ="2003",
+ month = "February",
+ version = "1.0.0"
+}
+address = "77 massachusetts avenue, bldg 3-449, cambridge, ma 02139-4307, USA",
+
+@INPROCEEDINGS{LuLHHN-2007-percom,
+ author = {Lu, Li and Liu, Yunhao and Hu, Lei and Han, Jinsong and Ni, Lionel},
+ title = {A Dynamic Key-Updating Private Authentication Protocol for {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {13--22},
+ month = {March},
+ organization = {IEEE}
+}
+International Conference on Pervasive Computing and Communications
+publisher = {IEEE Computer Society Press}
+address = {New York, USA},
+
+@INPROCEEDINGS{Ohkubo04Efficient,
+ author = {Ohkubo, Miyako and Suzuki, Koutarou and Kinoshita, Shingo},
+ title = {Efficient Hash-Chain Based {RFID} Privacy Protection Scheme},
+ booktitle = {International Conference on Ubiquitous Computing --- Ubicomp 2004, Workshop Privacy: Current Status and Future Directions},
+ month = {September},
+ year = {2004},
+ address = {Nottingham, England},
+}
+
+@INPROCEEDINGS{MolnarSW-2005-sac,
+ author = {Molnar, David and Soppera, Andrea and Wagner, David},
+ title = {A Scalable, Delegatable Pseudonym Protocol Enabling Ownership Transfer of {RFID} Tags},
+ booktitle = {Selected Areas in Cryptography --- SAC 2005},
+ editor = {Preneel, Bart and Tavares, Stafford},
+ volume = {3897},
+ series = {LNCS},
+ pages = {276--290},
+ month = {August},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+ year = {2005},
+ address = {Kingston, Canada},
+}
+
+@inproceedings{DBLP:conf/otm/FeldhoferR06,
+ author = {Martin Feldhofer and Christian Rechberger},
+ title = {A Case Against Currently Used Hash Functions in {RFID} Protocols},
+ booktitle = {OTM Workshops (1)},
+ year = {2006},
+ pages = {372-381},
+ ee = {http://dx.doi.org/10.1007/11915034_61},
+ crossref = {DBLP:conf/otm/2006-w1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/otm/2006-w1,
+ editor = {Robert Meersman and Zahir Tari and Pilar Herrero},
+ title = {On the Move to Meaningful Internet Systems 2006: OTM 2006 Workshops, OTM Confederated International Workshops and Posters, AWeSOMe, CAMS, COMINF, IS, KSinBIT, MIOS-CIAO, MONET, OnToContent, ORM, PerSys, OTM Academy Doctoral Consortium, RDDS, SWWS, and SeBGIS 2006, Montpellier, France, October 29 - November 3, 2006. Proceedings, Part I},
+ booktitle = {OTM Workshops (1)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4277},
+ year = {2006},
+ isbn = {3-540-48269-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@INPROCEEDINGS{VajdaB-2003-ubicom,
+ author = {Vajda, Istv\'an and Butty\'an, Levente},
+ title = {Lightweight Authentication Protocols for Low-Cost {RFID} Tags},
+ booktitle = {Ubicomp 2003 Second Workshop on Security in Ubiquitous Computing},
+ month = {October},
+ year = {2003}
+}
+address = {Seattle, WA, USA},
+
+@INPROCEEDINGS{LiW-2007-sec,
+ author = {Li, Tieyan and Wang, Guilin},
+ title = {Security Analysis of Two Ultra-Lightweight {RFID} Authentication Protocols},
+ booktitle = {IFIP SEC 2007},
+ month = {May},
+ organization = {IFIP},
+}
+year = {2007},
+address = {Sandton, Gauteng, South Africa},
+
+@MISC{BatinaGKMTV-2006-eprint,
+ author = {Batina, Lejla and Guajardo, Jorge and Kerins, Tim and Mentens, Nele and Tuyls, Pim and Verbauwhede, Ingrid},
+ title = {An Elliptic Curve Processor Suitable For {RFID}-Tags},
+ howpublished = {Cryptology ePrint Archive, Report 2006/227},
+ year = {2006},
+ organization = {IACR},
+}
+
+@inproceedings {AES-grain-sand,
+ title = {{AES} implementation on a grain of sand},
+ issue = "1",
+ ISSN="1747-0722",
+ pages = {13--20},
+ author="Feldhofer, M. and Wolkerstorfer, J. and Rijmen, V.",
+ year = "2005",
+ voulme="152",
+ booktitle = "Information Security",
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press},
+
+@MISC{Juels-2005-manuscript-2,
+ author = {Juels, Ari},
+ title = {{RFID} Security and Privacy: A research Survey},
+ howpublished = {Manuscript},
+ year = {2005},
+ month = {September},
+ organization = {RSA Laboratories},
+}
+
+@INPROCEEDINGS{JuelsW-2007-percom,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {{Defining Strong Privacy for RFID}},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2007},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {342--347},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Vaudenay-2007-asiacrypt,
+ author = {Vaudenay, Serge},
+ title = {On Privacy Models for {RFID}},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2007},
+ year = {2007},
+ editor = {},
+ volume = {4833},
+ series = {LNCS},
+ pages = {68--87},
+ address = {Kuching, Malaysia},
+ month = {December},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{BolotnyyR-2007-percom,
+ author = {Bolotnyy, Leonid and Robins, Gabriel},
+ title = {Physically Unclonable Function-Based Security and Privacy in {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {211--220},
+ month = {March},
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press}
+International Conference on Pervasive Computing and Communications --
+address = {New York, USA},
+
+@INPROCEEDINGS{JuelsRS-2003-ccs,
+ author = {Juels, Ari and Rivest, Ronald and Szydlo, Michael},
+ title = {The Blocker Tag: Selective Blocking of {RFID} Tags for Consumer Privacy},
+ booktitle = {ACM CCS 2003},
+ year = {2003},
+ editor = {Atluri, Vijay},
+ pages = {103--111},
+ month = {October},
+ publisher = "ACM Press"
+}
+address = {Washington, DC, USA},
+Conference on Computer and Communications Security
+organization = "ACM",
+
+@INPROCEEDINGS{JuelsW-2005-crypto,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {Authenticating Pervasive Devices with Human Protocols},
+ booktitle = {Advances in Cryptology --- CRYPTO'05},
+ year = {2005},
+ editor = {Shoup, Victor},
+ volume = {3126},
+ series = {LNCS},
+ pages = {293--308},
+ month = {August},
+ organization = {IACR},
+ address = {Santa Barbara, California, USA},
+ publisher = {Springer-Verlag},
+ series = {LNCS},
+}
+
+@inproceedings{ zhang01efficient,
+ author = "Lintao Zhang and Conor F. Madigan and Matthew W. Moskewicz and Sharad Malik",
+ title = "Efficient Conflict Driven Learning in Boolean Satisfiability Solver",
+ booktitle = "{ICCAD}",
+ pages = "279-285",
+ year = "2001",
+ url = "citeseer.ist.psu.edu/article/zhang01efficient.html" }
+
+
+@INPROCEEDINGS{ButtyanHV-2006-pet,
+ author = {Butty\'an, Levente and Holczer, Tam\'as and Vajda, Istv\'an},
+ title = {Optimal Key-Trees for Tree-Based Private Authentication},
+ booktitle = {Workshop on Privacy Enhancing Technologies --- PET 2006},
+ pages = {332-350},
+ month = {June},
+ year = {2007},
+ address = {Cambridge, United Kingdom},
+}
+
+
+@INPROCEEDINGS{Castelluccia07Secret,
+ author = {Castelluccia, Claude and Soos, Mate},
+ title = {Secret Shuffling: A Novel Approach to {RFID} Private Identification},
+ booktitle = {{RFIDSec}'07},
+ pages = {169-180},
+ year = {2007},
+ month = {July}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@INPROCEEDINGS{breaking-lmap,
+ author = {Mihaly B\'arasz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel Nagy},
+ title = {Breaking {LMAP}},
+ pages = {69-78},
+ month = {July},
+ year = {2007},
+ booktitle = {Conference on RFID Security --- {RFIDSec}'07},
+ address = {Malaga, Spain},
+}
+
+@INPROCEEDINGS{Initial-SRAM,
+ author = {Daniel Holcom and Wayne Burleson and Kevin Fu.},
+ title = {Initial {SRAM} state as a Fingerprint and Source of True Random Numbers for {RFID} Tags},
+ booktitle = {{RFIDSec}'07},
+ pages = {29-40},
+ month = {July},
+ year = {2007}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@inproceedings{HBattack,
+ author = {Gilbert, Henri and Robshaw, Matt and Sibert, Herve},
+ title = {An Active Attack Against {HB}$^+$ - A Provably Secure Lightweight Authentication Protocol},
+ booktitle = {IEE Electronic Letters 41, 21},
+ year = {2005},
+ pages = {1169--1170}
+}
+
+@INPROCEEDINGS{KatzS-2006-eurocrypt,
+ author = {Katz, Jonathan and Sun Shin, Ji},
+ title = {Parallel and Concurrent Security of the {HB} and {HB}$^{+}$ Protocols},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '06},
+ organization = {IACR},
+ year = {2006}
+}
+Advances in Cryptology
+publisher = {Springer-Verlag},
+
+@MISC{KatzS-2006-eprint,
+ author = {Katz, Jonathan and Smith, Adam},
+ title = {Analyzing the {HB} and {HB}+ Protocols in the ``Large Error'' Case},
+ howpublished = {Cryptology ePrint Archive, Report 2006/326},
+ organization = {IACR},
+}
+
+@inproceedings{1229319,
+ author = {Tri Van Le and Mike Burmester and Breno de Medeiros},
+ title = {Universally composable and forward-secure {RFID} authentication and authenticated key exchange},
+ booktitle = {Proceedings of the 2nd ACM symposium on Information, Computer and Communications Security --- {ASIACCS}'07},
+ year = {2007},
+ isbn = {1-59593-574-6},
+ pages = {242--252},
+ location = {Singapore},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ doi = {http://doi.acm.org/10.1145/1229285.1229319},
+}
+
+
+
+@INPROCEEDINGS{PUF-based-RNG,
+ author = {Charles W. O'Donnell and G. Edward Suh and Srinivas Devadas},
+ title = {{PUF}-Based Random Number Generation},
+ booktitle = {MIT CSAIL CSG Technical Memo 481},
+ url = {http://csg.csail.mit.edu/pubs/memos/Memo-481/Memo-481.pdf},
+ year = {2004},
+ month = {November}
+}
+
+@book{Ipatov05Spread,
+ author = {Valeri P. Ipatov},
+ year = {2005},
+ month = {May},
+ title = {Spread Spectrum and {CDMA}: {P}rinciples and Applications},
+ publisher = {John Wiley \& Sons, Ltd.},
+ ISBN = {978-0470091784},
+}
+
+@article{DBLP:journals/ijwmc/HellJM07,
+ author = {Martin Hell and
+ Thomas Johansson and
+ Willi Meier},
+ title = {Grain: a stream cipher for constrained environments},
+ journal = {IJWMC},
+ volume = {2},
+ number = {1},
+ year = {2007},
+ pages = {86-93},
+ ee = {http://dx.doi.org/10.1504/IJWMC.2007.013798},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{applied-crypto,
+ year= {1996},
+ ISBN ={0-8493-8523-7},
+ author={Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone},
+ title ={Handbook of applied cryptography},
+ publisher={CRC Press},
+ address={Boca Raton, Florida},
+}
+url={http://cacr.math.uwaterloo.ca/hac}
+
+@inproceedings{DiPietro07Information,
+ author={Roberto Di Pietro and Refik Molva},
+ title={Information confinement, privacy, and security in {RFID} systems},
+ month={September},
+ booktitle={Proceedings of the 12th European Symposium On Research In Computer Security},
+ year={2007},
+ pages={187-202},
+}
+
+@inproceedings{PerisHER-2006-rfidsec,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{LMAP}: A Real Lightweight Mutual Authentication Protocol for Low-cost {RFID} tags},
+ booktitle = {Proceedings of {RFIDSec}'06},
+ year = {2006},
+ month = {July},
+ address = {Graz, Austria},
+ organization = {Ecrypt},
+}
+
+@INPROCEEDINGS{BringerCD-2006-secperu,
+ author = {Bringer, Julien and Chabanne, Herv\'e and Dottax Emmanuelle},
+ title = {{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+ booktitle = {{IEEE} SecPerU 2006},
+ year = {2006},
+ month = {June},
+ organization = {IEEE},
+}
+International Conference on Pervasive Services, Workshop on Security, Privacy and Trust in Pervasive and Ubiquitous Computing
+address = {Lyon, France},
+publisher = {IEEE Computer Society Press},
+
+@INPROCEEDINGS{PerisHER-2006-uic,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{M2AP}: A Minimalist Mutual-Authentication Protocol for Low-cost {RFID} Tags},
+ booktitle = {International Conference on Ubiquitous Intelligence and Computing --- {UIC}’06},
+ year = {2006},
+ editor = {},
+ volume = {4159},
+ pages = {912--923},
+ month = {September},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+}
+
+
+@INPROCEEDINGS{M2AP-break,
+ author={Mih\'aly B\'ar\'asz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel A. Nagy},
+ title={Passive Attack Against the {M2AP} Mutual Authentication Protocol for {RFID} Tags},
+ year = {2007},
+ month= {September},
+ date = {24-25},
+ booktitle={{RFID} 2007 --- The First International {EURASIP} Workshop on {RFID} Technology},
+ country = {Austria},
+ city={Vienna}
+}
+
+@INPROCEEDINGS{HBppbreak,
+ author= {Henri Gilbert and Matthew J.B. Robshaw and Yannick Seurin},
+ title={Good Variants of {HB}+ are Hard to Find},
+ year={2008},
+ month={January},
+ booktitle={Financial Cryptography},
+ publisher={Springer},
+ country={Mexico}
+}
+
+@inproceedings{MAGMA,
+ author = {Wieb Bosma and John Cannon and Graham Matthews},
+ title = {Programming with algebraic structures: design of the {MAGMA} language},
+ booktitle = {Proceedings of the international symposium on Symbolic and algebraic computation --- ISSAC '94},
+ year = {1994},
+ isbn = {0-89791-638-7},
+ pages = {52--57},
+ location = {Oxford, United Kingdom},
+ doi = {http://doi.acm.org/10.1145/190347.190362},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+@inproceedings{Singular,
+ author = {Gert-Martin Greuel and Gerhard Pfister and Hans Sch\"{o}nemann},
+ title = {{SINGULAR} --- A computer algebra system for polynomial computations},
+ booktitle = {Symbolic computation and automated reasoning},
+ year = {2001},
+ isbn = {1-56881-145-4},
+ pages = {227--233},
+ publisher = {A. K. Peters, Ltd.},
+ address = {Natick, MA, USA},
+}
+
+@misc{SAGE,
+ author = {{The SAGE Group}},
+ year = {2008},
+ title = {{SAGE} Mathematics Software},
+ note = {\url{http://www.sagemath.org}},
+}
+
+@misc{new-sparse-technique,
+ author={H{\aa}vard Raddum and Igor Semae},
+ title={New Technique for Solving Sparse Equation Systems},
+ month={January},
+ year={2006},
+ note={\url{eprint.iacr.org/2006/475/}},
+}
+
+@TechReport{algebraic-DES,
+ author={Nicolas T. Courtois and Gregory V. Bard},
+ title={Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ year={2006},
+ institution = {IACR E-print},
+ number = {2006/402},
+ month={November},
+ booktitle={IACR E-print, \url{http://eprint.iacr.org/2006/402}},
+}
+
+
+
+@inproceedings{early-DES-algebraic,
+ author={Chaum, David and Evertse, Jan-Hendrik},
+ title={Cryptanalysis of {DES} with a Reduced Number of Rounds},
+ booktitle = {Advances in Cryptology --- {CRYPTO}'85},
+ year = {1986},
+ pages = {192--211},
+ publisher = {Springer-Verlag}
+}
+
+@InProceedings{Bofilletal2008CAV,
+ author = {M. Bofill and R. Nieuwenhuis and A. Oliveras and E. Rodr\'\i guez-Carbonell and A. Rubio},
+ title = {The {B}arcelogic {SMT} Solver},
+ pages = {294-298},
+ booktitle = {{CAV}'08},
+ year = {2008},
+ series = {LNCS},
+ volume = {5123},
+ publisher = {Springer},
+ editor = {A. Gupta and S. Malik},
+}
+
+@techreport{RSAT,
+ author = {Knot Pipatsrisawat and Adnan Darwiche},
+ institution = {Automated Reasoning Group, Computer Science},
+ title = {{RS}at 2.0: {SAT} Solver Description},
+ year = {2007},
+}
+
+@inproceedings{DBLP:conf/fse/CourtoisBW08,
+ author = {Nicolas Courtois and Gregory V. Bard and David Wagner},
+ title = {Algebraic and Slide Attacks on {K}ee{L}oq},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {97-115},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_6},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{cryptoeprint:2008:166,
+ author = {Nicolas T. Courtois and Karsten Nohl and Sean O'Neil},
+ title = {Algebraic Attacks on the {C}rypto-1 Stream Cipher in {Mifare} {C}lassic and {O}yster Cards},
+ number = {2008/166},
+ institution = {Cryptology ePrint Archive},
+ year = {2008},
+}
+howpublished = {Cryptology ePrint Archive, Report 2008/166},
+note = {\url{http://eprint.iacr.org/}},
+
+@INPROCEEDINGS{Biere99symbolicmodel,
+ author = {Armin Biere and A. Cimatti and E. M. Clarke and M. Fujita and Y. Zhu},
+ title = {Symbolic Model Checking Using {SAT} Procedures instead of {BDDs}},
+ booktitle = {Proc. of Design Automation Conference ({DAC}'99)},
+ year = {1999},
+ pages = {317--320}
+}
+
+@INPROCEEDINGS{temporalinduction,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Temporal Induction by Incremental {SAT} Solving},
+ booktitle={Proc. of First Intrenational Workshop on Bounded Model Checking},
+ year={2003},
+ volume={89},
+ issue={4},
+ series={ENTCS},
+ publisher={Elsevier}
+}
+
+@inproceedings{ARMS02,
+ author = {Fadi A. Aloul and Arathi Ramani and Igor Markov and Karem Sakallah},
+ title = {Generic {ILP} versus Specialized 0-1 {ILP}: an Update},
+ booktitle = {Proc. ACM/IEEE Intl. Conf. Comp.-Aided Design},
+ pages = {450 - 457},
+ month = {November},
+ year = {2002},
+ URL = {http://www.gigascale.org/pubs/190.html}
+}
+
+@inproceedings{knowledge-compiling,
+ author={Adnan Dawiche},
+ title={New advances in compiling {CNF} to decomposable negation normal form},
+ booktitle={Proc. of European Conference on Artificial Intelligence},
+ year={2004},
+ pages={328 - 332},
+}
+
+@InProceedings{S-Match,
+ author = {Fausto Giunchiglia and Pavel Shvaiko and Mikalai Yatskevich},
+ title = {S-{M}atch: an algorithm and an implementation of semantic matching},
+ booktitle = {Semantic Interoperability and Integration},
+ year = {2005},
+ number = {04391},
+ series = {Dagstuhl Seminar Proceedings},
+ ISSN = {1862-4405},
+ publisher = {IBFI},
+ note = {\url{http://drops.dagstuhl.de/opus/volltexte/2005/37}},
+ editor = {Y. Kalfoglou and M. Schorlemmer and A. Sheth and S. Staab and M. Uschold},
+}
+publisher = {Internationales Begegnungs- und Forschungszentrum fuer Informatik (IBFI)},
+
+
+
+@techreport{bard-thesis,
+ author = {Gregory V. Bard},
+ title = {Algorithms for the Solution of Polynomial and Linear Systems of Equations over Finite Fields, with an Application to the Cryptanalysis of {K}ee{L}oq},
+ institution={University of Maryland Dissertation},
+ month={April},
+ year={2008},
+ note = {Ph.D. Thesis},
+}
+
+@inproceedings{Toyocrypt-nicolas-attack,
+ author={Nicolas T. Courtois},
+ title={Higher Order Correlation Attacks, {XL} algorithm and Cryptanalysis of {T}oyocrypt ({A}n updated version)},
+ booktitle={ICISC 2002},
+ series={LNCS},
+ volume={2587},
+ publisher={Springer},
+ year={2002},
+}
+
+@inproceedings{General-LFSR-attacks,
+ author={Nicolas T. Courtois and Willi Meier},
+ title={Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- EUROCRYPT '03},
+ series={LNCS},
+ volume={2656},
+ pages={345–359},
+ publisher={Springer},
+ address = {Warsaw, Poland}
+}
+
+@inproceedings{Canniere06Trivium,
+ author = {Christophe De Canni{\`e}re},
+ title = {Trivium: A Stream Cipher Construction Inspired by Block Cipher Design Principles},
+ booktitle = {ISC},
+ year = {2006},
+ pages = {171-186},
+ ee = {http://dx.doi.org/10.1007/11836810_13},
+ crossref = {DBLP:conf/isw/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/isw/2006,
+ editor = {Sokratis K. Katsikas and et al},
+ title = {Information Security, 9th International Conference, ISC 2006, Samos Island, Greece, August 30 - September 2, 2006, Proceedings},
+ booktitle = {ISC},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4176},
+ year = {2006},
+ isbn = {3-540-38341-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Javier Lopez and
+Michael Backes and
+Stefanos Gritzalis and
+Bart Preneel
+
+@inproceedings{BiviumWithSATsolvers,
+ author = {Tobias Eibach and Enrico Pilz and Gunnar V{\"o}lkel},
+ title = {Attacking {B}ivium Using {SAT} Solvers},
+ booktitle = {SAT},
+ year = {2008},
+ pages = {63-76},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79719-7_7},
+ crossref = {DBLP:conf/sat/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2008,
+ editor = {Hans Kleine B{\"u}ning and Xishun Zhao},
+ title = {Theory and Applications of Satisfiability Testing - SAT 2008, 11th International Conference, SAT 2008, Guangzhou, China, May 12-15, 2008. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4996},
+ year = {2008},
+ isbn = {978-3-540-79718-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{Bivium,
+ author={Havard Raddum},
+ title={Cryptanalytic results on {T}rivium},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2006},
+ number={2006/039},
+ note = {\url{www.ecrypt.eu.org/stream/papersdir/2006/039.ps}},
+}
+
+@misc{using-equation-solvers,
+ author = {Havard Raddum and Igor Semaev},
+ title = {New Technique for Solving Sparse Equation Systems},
+ howpublished = {Cryptology ePrint Archive, Report 2006/475},
+ year = {2006},
+ note = {\url{http://eprint.iacr.org/}},
+}
+
+
+@TechReport{BiviumWithMiniSat,
+ author={Cameron McDonald and Chris Charnes and Josef Pieprzyk},
+ title={Attacking {B}ivium with {M}ini{S}at},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2007},
+ number={2007/040}
+}
+
+@inproceedings{FaugereF5,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases without reduction to zero ({F}5)},
+ booktitle = {ISSAC '02},
+ year = {2002},
+ isbn = {1-58113-484-3},
+ pages = {75--83},
+ location = {Lille, France},
+ doi = {http://doi.acm.org/10.1145/780506.780516},
+ publisher = {ACM},
+ }
+ISSAC '02: Proceedings of the 2002 international symposium on Symbolic and algebraic computation
+address = {New York, NY, USA},
+
+
+@article{FaugereF4,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases ({F}4)},
+ journal = {Journal of Pure and Applied Algebra},
+ year = {1999},
+ month = {June},
+ pages = {61--88},
+ volume = {1},
+ number = {139},
+}
+
+@inproceedings{DismantlingMifare,
+ author = {Flavio D. Garcia and et al.},
+ title = {Dismantling {MIFARE} {C}lassic},
+ booktitle = {ESORICS},
+ year = {2008},
+ pages = {97-114},
+ ee = {http://dx.doi.org/10.1007/978-3-540-88313-5_7},
+ crossref = {DBLP:conf/esorics/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Gerhard de Koning Gans and
+Ruben Muijrers and
+Peter van Rossum and
+Roel Verdult and
+Ronny Wichers Schreur and
+Bart Jacobs
+
+@proceedings{DBLP:conf/esorics/2008,
+ editor = {Sushil Jajodia and Javier L{\'o}pez},
+ title = {Computer Security - ESORICS 2008, 13th European Symposium on Research in Computer Security, M{\'a}laga, Spain, October 6-8, 2008. Proceedings},
+ booktitle = {ESORICS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5283},
+ year = {2008},
+ isbn = {978-3-540-88312-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Karsten-webpage-HiTag2,
+ author={Karsten Nohl},
+ title={Description of {H}i{T}ag2},
+ howpublished={Press release},
+ note= {\url{http://cryptolib.com/ciphers/hitag2/}},
+ month={March},
+ day = {12},
+ year={2008},
+}
+
+@InProceedings{Ouafi08Privacy,
+ address = {Berlin},
+ affiliation = {EPFL},
+ author = {Ouafi, Khaled and Phan, Raphael C.-W.},
+ booktitle = {Information {S}ecurity {P}ractice and {E}xperience, 4th {I}nternational {C}onference, {ISPEC} 2008},
+ location = {Sydney, Australia},
+ oai-id = {oai:infoscience.epfl.ch:126418},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {263--277},
+ publisher = {Springer},
+ review = {REVIEWED},
+ series = {LNCS},
+ status = {PUBLISHED},
+ title = {Privacy of {R}ecent {RFID} {A}uthentication {P}rotocols},
+ unit = {LASEC},
+ year = {2008},
+ keywords = {RFID; authentication protocols, ; privacy; untraceability; provably secure},
+ details = {http://infoscience.epfl.ch/record/126418},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=126418&mode=best},
+}
+
+@INPROCEEDINGS{Ohkubo04Cryptographic,
+ author = {Miyako Ohkubo Koutarou and Koutarou Suzuki and Shingo Kinoshita},
+ title = {Cryptographic Approach to "Privacy-Friendly" Tags},
+ booktitle = {RFID Privacy Workshop},
+ year = {2003},
+ address = {MIT, Massachusetts, USA},
+ month = {November},
+}
+
+@article{Lamport81Password,
+ author = {Lamport,, Leslie},
+ title = {Password authentication with insecure communication},
+ journal = {Commun. ACM},
+ volume = {24},
+ number = {11},
+ year = {1981},
+ issn = {0001-0782},
+ pages = {770--772},
+ doi = {http://doi.acm.org/10.1145/358790.358797},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+@InProceedings{OSK_Avoine,
+ affiliation = {EPFL},
+ author = {Avoine, Gildas and Oechslin, Philippe},
+ booktitle = {The 2nd {IEEE} {I}nternational {W}orkshop on {P}ervasive {C}omputing and {C}ommunication {S}ecurity - {P}er{S}ec 2005},
+ details = {http://infoscience.epfl.ch/record/99461},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=99461&mode=best},
+ keywords = {NCCR-MICS; NCCR-MICS/CL3},
+ location = {Kauai island, Hawaii, USA},
+ oai-id = {oai:infoscience.epfl.ch:99461},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {110--114},
+ review = {REVIEWED},
+ status = {PUBLISHED},
+ title = {A {S}calable and {P}rovably {S}ecure {H}ash-{B}ased {RFID} {P}rotocol},
+ unit = {LASEC},
+ year = 2005
+}
+
+@inproceedings{Trade-off-Hellman,
+ author = {Hellman, Martin E.},
+ title = {A cryptanalytic time-memory trade off},
+ booktitle = {{IEEE} Transactions on Information Theory},
+ volume = {IT-26/4},
+ pages = {401--406},
+ year = {1980},
+}
+
+@inproceedings{Faster-crypto-time-memory,
+ author = {Oechslin, Philippe },
+ booktitle = {Advances in Cryptology --- CRYPTO 2003},
+ series = {LNCS},
+ volume = {2729},
+ publisher = {Springer},
+ pages = {617--630},
+ posted-at = {2008-07-07 15:11:06},
+ priority = {2},
+ title = {Making a Faster Cryptanalytic Time-Memory Trade-Off},
+ url = {http://www.springerlink.com/content/u9gxwd29p2tnx3wl},
+ year = {2003}
+}
+
+@inproceedings{Molnar04Keytrees,
+ address = {New York, NY, USA},
+ author = {Molnar, David and Wagner, David },
+ booktitle = {CCS '04: Proceedings of the 11th ACM conference on Computer and communications security},
+ citeulike-article-id = {202290},
+ doi = {10.1145/1030083.1030112},
+ isbn = {1581139616},
+ keywords = {libraries, privacy},
+ pages = {210--219},
+ posted-at = {2007-12-25 21:42:23},
+ priority = {5},
+ publisher = {ACM Press},
+ title = {Privacy and security in library {RFID}: issues, practices, and architectures},
+ url = {http://dx.doi.org/10.1145/1030083.1030112},
+ year = {2004}
+}
+
+@INPROCEEDINGS{NohlE-2008-sec,
+ author = {Nohl, Karsten and Evans, David},
+ title = {{Hiding in Groups: On the Expressiveness of Privacy Distributions}},
+ booktitle = {Proceedings of The Ifip Tc 11 23rd International Information Security Conference --- SEC 2008},
+ year = {2008},
+ editor = {},
+ volume = {278},
+ series = {LNCS},
+ pages = {1--15},
+ address = {Milan, Italia},
+ month = {September},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GIS), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/fse/Shamir08,
+ author = {Adi Shamir},
+ title = {{SQUASH} --- A New {MAC} with Provable Security Properties for Highly Constrained Devices Such as {RFID} Tags},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {144-157},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_9},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2008,
+ editor = {Kaisa Nyberg},
+ title = {Fast Software Encryption, 15th International Workshop, {FSE} 2008, Lausanne, Switzerland, February 10-13, 2008, Revised Selected Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5086},
+ year = {2008},
+ isbn = {978-3-540-71038-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Oren2008WIPRPublic,
+author = {Yossef Oren and Martin Feldhofer},
+title = {{WIPR} --- a Public Key Implementation on Two Grains of Sand},
+booktitle = {Workshop on RFID Security 2008},
+year = {2008},
+editor = {Sandra Dominikus},
+pages = {15 - 27},
+}
+
+@inproceedings{DBLP:conf/ctrsa/McLooneR07,
+ author = {M{\'a}ire McLoone and Matthew J. B. Robshaw},
+ title = {Public Key Cryptography and {RFID} Tags},
+ booktitle = {CT-RSA},
+ year = {2007},
+ pages = {372-384},
+ ee = {http://dx.doi.org/10.1007/11967668_24},
+ crossref = {DBLP:conf/ctrsa/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ctrsa/2007,
+ editor = {Masayuki Abe},
+ title = {Topics in Cryptology - CT-RSA 2007, The Cryptographers' Track at the RSA Conference 2007, San Francisco, CA, USA, February 5-9, 2007, Proceedings},
+ booktitle = {CT-RSA},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4377},
+ year = {2006},
+ isbn = {3-540-69327-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+
+@proceedings{DBLP:conf/eurocrypt/91,
+ editor = {Donald W. Davies},
+ title = {Advances in Cryptology --- EUROCRYPT '91, Workshop on the Theory and Application of of Cryptographic Techniques, Brighton, UK, April 8-11, 1991, Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {547},
+ year = {1991},
+ isbn = {3-540-54620-0},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/Girault91,
+ author = {Marc Girault},
+ title = {Self-Certified Public Keys},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ year = {1991},
+ pages = {490-497},
+ ee = {http://link.springer.de/link/service/series/0558/bibs/0547/05470490.htm},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cardis/Girault00,
+ author = {Marc Girault},
+ title = {Low-Size Coupons for Low-Cost {IC} Cards},
+ booktitle = {CARDIS},
+ year = {2000},
+ pages = {39-50},
+ crossref = {DBLP:conf/cardis/2000},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2000,
+ editor = {Josep Domingo-Ferrer and David Chan and Anthony Watson},
+ title = {Smart Card Research and Advanced Applications, Proceedings of the Fourth Working Conference on Smart Card Research and Advanced Applications, CARDIS 2000, September 20-22, 2000, Bristol, UK},
+ booktitle = {CARDIS},
+ publisher = {Kluwer},
+ series = {IFIP Conference Proceedings},
+ volume = {180},
+ year = {2000},
+ isbn = {0-7923-7953-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Secure-human-ID,
+ author = {Hopper,, Nicholas J. and Blum,, Manuel},
+ title = {Secure Human Identification Protocols},
+ booktitle = {ASIACRYPT '01: Proceedings of the 7th International Conference on the Theory and Application of Cryptology and Information Security},
+ year = {2001},
+ isbn = {3-540-42987-5},
+ pages = {52--66},
+ publisher = {Springer-Verlag},
+ address = {London, UK},
+}
+
+@ARTICLE{Inherent-intracability,
+title={On the inherent intractability of certain coding problems (Corresp.)},
+author={ Berlekamp, E. and McEliece, R. and van Tilborg, H.},
+journal={Information Theory, IEEE Transactions on},
+year={1978},
+month={May},
+volume={24},
+number={3},
+pages={ 384-386},
+keywords={null Decoding, Linear codes},
+doi={},
+ISSN={0018-9448},
+}
+
+@article{Noise-tolerant-learning,
+ author = {Blum,, Avrim and Kalai,, Adam and Wasserman,, Hal},
+ title = {Noise-tolerant learning, the parity problem, and the statistical query model},
+ journal = {J. ACM},
+ volume = {50},
+ number = {4},
+ year = {2003},
+ issn = {0004-5411},
+ pages = {506--519},
+ doi = {http://doi.acm.org/10.1145/792538.792543},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+
+@INPROCEEDINGS{To06anovel,
+ author = {Marc P. C. Fossorier and Miodrag J. Mihaljević and Hideki Imai and Yang Cui and Kanta Matsuura},
+ title = {A Novel Algorithm for Solving the {LPN} Problem and Its Applicatio to Security Evaluation of the {HB} Protocol for {RFID} Authentication},
+ booktitle = {INDOCRYPT},
+ editor = {Rana Barua and Tanja Lange},
+ volume = {4329},
+ series = {LNCS},
+ year = {2006},
+ pages = {48--62},
+ publisher = {Springer}
+}
+
+@INPROCEEDINGS{Levieil_animproved,
+ author = {Éric Levieil and Pierre-Alain Fouque},
+ title = {An improved {LPN} algorithm},
+ editor = {Roberto De Prisco and Moti Yung},
+ booktitle = {Security and Cryptography for Networks --- SCN},
+ volume = {4116},
+ series = {LNCS},
+ year = {2006},
+ pages = {348--359},
+ Publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+}
+
+@INPROCEEDINGS{HBpp,
+title={{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+author={Bringer, J. and Chabanne, H. and Dottax, E.},
+booktitle={Security, Privacy and Trust in Pervasive and Ubiquitous Computing, 2006 --- SecPerU 2006},
+year={2006},
+month={June},
+volume={},
+number={},
+pages={28--33},
+doi={10.1109/SECPERU.2006.10},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/GilbertRS08,
+ author = {Henri Gilbert and Matthew J. B. Robshaw and Yannick Seurin},
+ title = {{HB}$^{\mbox{\#}}$: Increasing the Security and Efficiency of {HB}$^{\mbox{+}}$},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ year = {2008},
+ pages = {361-378},
+ ee = {http://dx.doi.org/10.1007/978-3-540-78967-3_21},
+ crossref = {DBLP:conf/eurocrypt/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2008,
+ editor = {Nigel P. Smart},
+ title = {Advances in Cryptology --- EUROCRYPT 2008, 27th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Istanbul, Turkey, April 13-17, 2008. Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4965},
+ year = {2008},
+ isbn = {978-3-540-78966-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2001,
+ editor = {Mitsuru Matsui},
+ title = {Fast Software Encryption, 8th International Workshop, FSE 2001 Yokohama, Japan, April 2-4, 2001, Revised Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2355},
+ year = {2002},
+ isbn = {3-540-43869-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Rabin79Digitalized,
+ author = {Rabin, M. O.},
+ title = {Digitalized Signatures and Public-Key Functions as Intractable as Factorization},
+ year = {1979},
+ institution = {Massachusetts Institute of Technology},
+ address = {Cambridge, MA, USA},
+ }
+
+@article{HBmp,
+ author = {Munilla,, J. and Peinado,, A.},
+ title = {{HB}-{MP}: A further step in the HB-family of lightweight authentication protocols},
+ journal = {Comput. Netw.},
+ volume = {51},
+ number = {9},
+ year = {2007},
+ issn = {1389-1286},
+ pages = {2262--2267},
+ doi = {http://dx.doi.org/10.1016/j.comnet.2007.01.011},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {New York, NY, USA},
+ }
+
+@article{HBstar,
+ author={D.N. Duc and K. Kim},
+ title={Securing {HB}$^+$ Against {GRS} Man-in-the-Middle Attack},
+ journal={Institute of Electronics, Information and Communication Engineers, Symposium on Cryptography and Information, Security},
+ date = {January 23--26},
+ year = {2007},
+}
+
+@INPROCEEDINGS{OuafiOV-2008-asiacrypt,
+ author = {Ouafi, Khaled and Overbeck, Raphael and Vaudenay, Serge},
+ title = {On the Security of {HB\#} against a Man-in-the-Middle Attack},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2008},
+ year = {2008},
+ editor = {},
+ volume = {5350},
+ series = {LNCS},
+ pages = {108--124},
+ address = {Melbourne, Australia},
+ month = {December},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{PRESENT,
+ author = {Bogdanov, Andrey and Knudsen, Lars Ramkilde and Leander, Gregor and Paar, Christof and Poschmann, Axel and Robshaw, Matthew J.B. and Seurin, Yannick and Vikkelsoe, C.},
+ title = {{PRESENT}: An Ultra-Lightweight Block Cipher},
+ booktitle = {Workshop on Cryptographic Hardware and Embedded Systems --- CHES 2007},
+ year = {2007},
+ editor = {Paillier, Pascal and Verbauwhede, Ingrid},
+ volume = {4727},
+ series = {LNCS},
+ pages = {450--466},
+ address = {Vienna, Austria},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{ChoiKKK-2006-isce,
+ author = {Choi, Yongje and Kim, Mooseop and Kim, Taesung and Kim, Howon},
+ title = {Low power implementation of {SHA}-1 algorithm for {RFID} system},
+ booktitle = {IEEE Tenth International Symposium on Consumer Electronics --- ISCE '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {1--5},
+ address = {St.Petersburg, Russia},
+ month = {September},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{DES-RFID-implement,
+ author = {Axel Poschmann and Gregor Le and Kai Schramm and Christof Paar},
+ title = {A Family of Light-Weight Block Ciphers Based on {DES} Suited for {RFID} Applications},
+ booktitle = {Proceedings of FSE 2007, LNCS},
+ year = {2006},
+ publisher = {Springer-Verlag}
+}
+
+@article{4253019,
+title={Strong Crypto for {RFID} Tags - A Comparison of Low-Power Hardware Implementations},
+author={Feldhofer, M. and Wolkerstorfer, J.},
+journal={Circuits and Systems, 2007. ISCAS 2007. IEEE International Symposium on},
+year={2007},
+month={May},
+volume={},
+number={},
+pages={1839-1842},
+keywords={cryptographic protocols, radiofrequency identificationAES-128, ECC-192, MD5, SHA-1, SHA-256, implementation efficiency, passive RFID tags, security protocols, standardized cryptographic algorithms, strong cryptography},
+doi={10.1109/ISCAS.2007.378272},
+ISSN={},
+}
+
+@techreport{PUF-optical,
+ author= {P. Ravinkanth},
+ title= {Physical One-Way Functions},
+ note = {Ph.D. Thesis},
+ institution = {MIT},
+ year={2001}
+}
+
+@inproceedings{PUF-silicon,
+ author={B. Gassend and D. Clarke and M. van Dijk and S. Devadas},
+ title = {Controlled Physical Random Functions},
+ booktitle = {Proceedings of the 18th Annual Computer Security Applications Conference --- ACSAC '02},
+ year = {2002},
+ ISBN = {0-7695-1828-1},
+ page = {149},
+ publisher = {IEEE},
+}
+
+@article{PUF-circ-secret-key,
+ author = {D. Lim and J. W. Lee and B. Gassend and G. E. Suh and M. van Dijk and S. Devadas},
+ title = {Extracting Secret Keys From Integrated Circuits},
+ journal = {IEEE Transactions on Very Large Scale Integration (VLSI) Systems},
+ pages = {1200--1205},
+ year = {2005},
+ issue = {13 (10)},
+}
+
+
+@INPROCEEDINGS{Li99equivalencyreasoning,
+ author = {Chu Min Li},
+ title = {Equivalency reasoning to solve a class of hard {SAT} problems},
+ booktitle = {Information Processing Letters},
+ year = {1999},
+ pages = {76--1}
+}
+
+@INPROCEEDINGS{Silva96conflictanalysis,
+ author = {Joo P. Marques and Silva Karem and A. Sakallah},
+ title = {Conflict analysis in search algorithms for propositional satisfiability},
+ booktitle = {Proc. of the IEEE Intl. Conf. on Tools with Artificial Intelligence},
+ year = {1996}
+}
+
+@article{Chaff01,
+ author = {Sharad Malik and Ying Zhao and Conor F. Madigan and Lintao Zhang and Matthew W. Moskewicz},
+ title = {Chaff: Engineering an Efficient {SAT} Solver},
+ journal ={Design Automation Conference},
+ year = {2001},
+ pages = {530-535},
+ doi = {http://doi.ieeecomputersociety.org/10.1109/DAC.2001.935565},
+ publisher = {IEEE Computer Society},
+ address = {Los Alamitos, CA, USA},
+}
+volume = {0},
+isbn = {},
+
+@article{visualizingDPLL,
+ author = {Sinz, Carsten},
+ title = {Visualizing {SAT} Instances and Runs of the {DPLL} Algorithm},
+ journal = {J. Autom. Reason.},
+ volume = {39},
+ number = {2},
+ year = {2007},
+ issn = {0168-7433},
+ pages = {219--243},
+ doi = {http://dx.doi.org/10.1007/s10817-007-9074-1},
+ publisher = {Kluwer Academic Publishers},
+ address = {Hingham, MA, USA},
+ }
+
+@inproceedings{nicolas.linear_feedback,
+ author={Nicolas T. Courtois},
+ title={Fast Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- {CRYPTO} 2003},
+ year={2003},
+ pages={176-194},
+ volume={2729/2003},
+ series={LNCS},
+ publisher={Springer},
+}
+
+@misc{Karsten-webpage-Cyrpto-1,
+ author={Karsten Nohl},
+ title={Cryptanalysis of {C}rypto-1},
+ howpublished={Press release},
+ month={March},
+ day = {12},
+ year={2008},
+ note= {\url{http://www.cs.virginia.edu/~kn5f/Mifare.Cryptanalysis.htm}}
+}
+
+@Misc{Radboud-Mifare-press,
+ author = {{Digital {S}ecurity group, {R}adboud {U}niversity {N}ijmegen}},
+ title = {Security Flaw in {M}ifare {C}lassic},
+ howpublished = {Press release},
+ month = {March},
+ day = {12},
+ year = {2008},
+ note = {\url{http://www.ru.nl/english/general/radboud_university/vm/security_flaw_in/}},
+}
+
+@ARTICLE{Massacci00logicalcryptanalysis,
+ author = {Fabio Massacci and Laura Marraro},
+ title = {Logical cryptanalysis as a {SAT}-problem: Encoding and analysis},
+ journal = {Journal of Automated Reasoning},
+ year = {2000},
+ volume = {24},
+ pages = {165--203}
+}
+
+@article{Monte-Carlo-method,
+ abstract = {We shall present here the motivation and a general description of a method dealing with a class of problems in mathematical physics. The method is, essentially, a statistical approach to the study of differential equations, or more generally, of integro-differential equations that occur in various branches of the natural sciences.},
+ author = {Metropolis, Nicholas and Ulam, S. },
+ citeulike-article-id = {1886002},
+ doi = {10.2307/2280232},
+ journal = {Journal of the American Statistical Association},
+ keywords = {random, sampling},
+ number = {247},
+ pages = {335--341},
+ posted-at = {2009-04-12 22:32:37},
+ priority = {2},
+ title = {The {M}onte {C}arlo Method},
+ url = {http://dx.doi.org/10.2307/2280232},
+ volume = {44},
+ year = {1949}
+}
+
+@article{Rabin-primality-test,
+ author = {Rabin, Michael O. },
+ citeulike-article-id = {1505894},
+ doi = {10.1016/0022-314X(80)90084-0},
+ journal = {J. Number Theory},
+ mrnumber = {MR566880},
+ number = {1},
+ pages = {128--138},
+ posted-at = {2007-07-27 00:11:40},
+ priority = {2},
+ title = {Probabilistic algorithm for testing primality},
+ url = {http://dx.doi.org/10.1016/0022-314X(80)90084-0},
+ volume = {12},
+ year = {1980}
+}
+
+@article{Mersenne-Twister,
+ address = {New York, NY, USA},
+ author = {Matsumoto, Makoto and Nishimura, Takuji },
+ citeulike-article-id = {611171},
+ doi = {10.1145/272991.272995},
+ issn = {1049-3301},
+ journal = {ACM Trans. Model. Comput. Simul.},
+ keywords = {algorithm},
+ month = {January},
+ number = {1},
+ pages = {3--30},
+ posted-at = {2008-10-26 00:03:42},
+ priority = {0},
+ publisher = {ACM Press},
+ title = {Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator},
+ url = {http://dx.doi.org/10.1145/272991.272995},
+ volume = {8},
+ year = {1998}
+}
+
+@inproceedings{L'Ecuyer98randomnumber,
+ author = {Pierre L'Ecuyer and Peter Hellekalek},
+ title = {Random Number Generators: Selection Criteria and Testing},
+ booktitle = {Random and Quasi-Random Point Sets},
+ series = {Lecture Notes in Statistics},
+ volume = {138},
+ publisher = {Springer-Verlag},
+ address = {New York},
+ pages = {223--266},
+ year = {1998},
+}
+
+@inproceedings{DBLP:conf/sat/SinzD05,
+ author = {Carsten Sinz and Edda-Maria Dieringer},
+ title = {{DP}vis --- {A} Tool to Visualize the Structure of {SAT} Instances},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {257-268},
+ ee = {http://dx.doi.org/10.1007/11499107_19},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@article{gomes00heavytailed,
+ author = {Carla P. Gomes and Bart Selman and Nuno Crato and Henry A. Kautz},
+ title = {Heavy-Tailed Phenomena in Satisfiability and Constraint Satisfaction Problems},
+ journal = {Journal of Automated Reasoning},
+ volume = {24},
+ number = {1/2},
+ pages = {67--100},
+ year = {2000},
+ url = {citeseer.ist.psu.edu/article/gomes99heavytailed.html}
+}
+
+@article{Mandelbrot60Pareto,
+ author = {Benoît B. Mandelbrot},
+ title = {The Pareto-Lévy law and the distribution of income},
+ journal = {Internat. Econom. Rev.},
+ volume = {1},
+ year = {1960},
+ pages = {79--106}
+}
+
+@inproceedings{Moura07tutorial,
+ author = {Leonardo de Moura, Bruno Dutertre and Natarajan Shankar},
+ title = {A Tutorial on Satisfiability Modulo Theories},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {4590/2007},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ pages = {20--36},
+ booktitle = {Computer Aided Verification},
+}
+ doi = {10.1007/978-3-540-73368-3},
+
+@article{Karnaugh53Logic,
+ author = {Karnaugh, Maurice},
+ year = {1953},
+ month = {November},
+ title = {The Map Method for Synthesis of Combinational Logic Circuits},
+ journal = {Transactions of American Institute of Electrical Engineers part I},
+ volume = {72},
+ number = {9},
+ pages = {593--599},
+}
+
+@inproceedings{Li00Integrating,
+ author = {Li, Chu Min},
+ title = {Integrating Equivalency Reasoning into Davis-Putnam Procedure},
+ booktitle = {Proceedings of the Seventeenth National Conference on Artificial Intelligence and Twelfth Conference on Innovative Applications of Artificial Intelligence},
+ year = {2000},
+ isbn = {0-262-51112-6},
+ pages = {291--296},
+ publisher = {AAAI Press / The MIT Press},
+}
+
+@article{Warners99TwoPhase,
+ author = {Joost P. Warners and Hans Van Maaren},
+ title = {A Two Phase Algorithm for Solving a Class of Hard Satisfiability Problems},
+ journal = {Operations Research Letters},
+ year = {1999},
+ volume = {23},
+ number = {3--5},
+ pages = {81--88}
+}
+
+@inproceedings{Massacci00Taming,
+ author = {Peter Baumgartner and Fabio Massacci},
+ title = {The Taming of the {(X)OR}},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+ volume = {1861/2000},
+ booktitle = {Computational Logic — CL 2000},
+ doi = {10.1007/3-540-44957-4},
+ year = {2000},
+ isbn = {978-3-540-67797-0},
+ pages = {508--522},
+}
+
+@inproceedings{Massacci99Using,
+ author = {Fabio Massacci},
+ title = {Using {W}alk-{SAT} and {R}el-sat for cryptographic key search},
+ booktitle = {Proc. of IJCAI-99},
+ year = {1999},
+ editor = {Morgan Kaufmann},
+ pages = {290--295},
+}
+
+@inproceedings{Girault04Public,
+author = {Marc Girault and David Lefranc},
+title = {Public Key Authentication with One (Online) Single Addition},
+series = {LNCS},
+bublisher = {Springer Berlin / Heidelberg},
+ISSN = {0302-9743},
+volume = {3156/2004},
+booktitle = {Cryptographic Hardware and Embedded Systems - CHES 2004},
+doi ={10.1007/b99451},
+year = {2004},
+isbn = {978-3-540-22666-6},
+pages = {967--984}
+}
+
+@article{Hsieh72OnOptimal,
+ author = {Hsieh, H. Y. and Ghausi, M. S.},
+ title = {On optimal-pivoting algorithms in sparse matrices},
+ journal = {IEEE Trans. Circuit Theory},
+ volume = {CT-19},
+ pages = {93--96},
+ month = {January},
+ year = {1972}
+}
+
+@article{HerasetalJAIR2008,
+ author = {Federico Heras and Javier Larrosa and Albert Oliveras},
+ title = {{MiniMaxSAT: An efficient Weighted Max-SAT Solver}},
+ journal = {Journal of Artificial Intelligence Research},
+ volume = {31},
+ year = {2008},
+ pages = {1--32}
+ }
+
+@techreport{Wieringa07MiniMarch,
+ title = {{M}ini{M}arch --- {E}mbedding lookahead direction heuristics in a conflict driven solver},
+ author = {Siert Wieringa},
+ institution = {Technische Universiteit Delft},
+ note = {Research Report},
+ year = {2007},
+ url = {http://www.st.ewi.tudelft.nl/sat/theses/minimarch.pdf},
+}
+
+techreport{OSI-MIT-Licence,
+url = {http://www.opensource.org/licenses/mit-license.php}
+
+
+@techreport{eStream,
+ title = {The e{STREAM} Portfolio},
+ author = {Steve Babbage and Christophe De Canniere and Anne Canteaut and Carlos Cid and Henri Gilbert and Thomas Johansson and Christof Paar and Matthew Parker and Bart Preneel and Vincent Rijmen and Matt Robshaw and Hongjun Wu},
+ url = {http://www.ecrypt.eu.org/stream/portfolio.pdf},
+ institution = {eStream Project},
+ year = {2008},
+ month = {September},
+ day = {8},
+}
+
+@techreport{Kibria08MiniSat,
+ author = {Raihan Kibria},
+ title = {Midi{S}AT - {A}n extension of {M}ini{SAT}},
+ institution = {Department of Electrical and Computer Engineering, Darmstadt University of Technology},
+ year = {2005},
+ month = {April},
+ day = {26},
+ url = {www.lri.fr/~simon/contest/results/descriptions/solvers/midisat_static.pdf},
+}
+
+@incollection{DaemenR05Rijndael,
+ author = {Joan Daemen and Vincent Rijmen},
+ title = {Rijndael/AES},
+ booktitle = {Encyclopedia of Cryptography and Security},
+ year = {2005},
+ ee = {http://dx.doi.org/10.1007/0-387-23483-7_358},
+ crossref = {DBLP:reference/crypt/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{DBLP:reference/crypt/2005,
+ editor = {Henk C. A. van Tilborg},
+ title = {Encyclopedia of Cryptography and Security},
+ publisher = {Springer},
+ year = {2005},
+ isbn = {978-0-387-23473-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Strassen69Gaussian,
+ author = {Volker Strassen},
+ title = {Gaussian Elimination is Not Optimal},
+ journal = {Numerische Mathematik},
+ volume = {13},
+ pages = {354--356},
+ year = {1969}
+}
+
+@techreport{Crawford94TheMinimal,
+ author = {Crawford, J. M. and Kearns, M. J. and Shapire, R. E.},
+ title = {The Minimal Disagreement Parity Problem as a Hard Satisfiability Problem},
+ institution = {Computational Intelligence Research Laboratory and {AT\&T} {B}ell {L}abs},
+ month = {February},
+ year = {1994},
+}
+
+@inproceedings{OuafiV09Smashing,
+ author = {Khaled Ouafi and Serge Vaudenay},
+ title = {Smashing {SQUASH}-0},
+ volume = {5479},
+ crossref = {DBLP:conf/eurocrypt/2009},
+}
+
+@inproceedings{ShamirRFIDSecLecture,
+author = {Adi Shamir},
+title = {{SQUASH}: {A} new one-way hash function with provable security properties for higley contrained devices such as {RFID} tags},
+booktitle = {Invited lecture to the RFID Securty 2007 Workshop},
+year = {2007},
+}
+
+@misc{DES77,
+ author = {{National Bureau of Standards}},
+ year = {1977},
+ title = {Data {E}ncryption {S}tandard},
+ institution = {U. S. Department of Commerce, National Bureau of Standards, Standards Publication (FIPS PUB) 46},
+ address = {Washington, DC},
+}s
+
+@INPROCEEDINGS{Tsudik06Yet,
+ author = {Tsudik, Gene},
+ title = {{YA-TRAP}: Yet Another Trivial {RFID} Authentication Protocol},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2006},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {640--643},
+ address = {Pisa, Italy},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+
+@INPROCEEDINGS{Conti07RIPP,
+ author = {Conti, Mauro and Pietro, Roberto~Di and Mancini, Luigi~Vincenzo and Spognardi, Angelo},
+ title = {{RIPP-FS}: an {RFID} Identification, Privacy Preserving Protocol with Forward Secrecy},
+ booktitle = {International Workshop on Pervasive Computing and Communication Security --- PerSec '07},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {229--234},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Burmester06Provably,
+ author = {Burmester, Mike and Le, Tri van and Medeiros, Breno de},
+ title = {Provably Secure Ubiquitous Systems: Universally Composable {RFID} Authentication Protocols},
+ booktitle = {Conference on Security and Privacy for Emerging Areas in Communication Networks --- SecureComm '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Baltimore, Maryland, USA},
+ month = {August-September},
+ organization = {IEEE},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@misc{ISO14443-standard,
+ author = {ISO/IEC},
+ title = {14443-3 --- {I}dentification cards -- {C}ontactless integrated circuit(s) cards -- {P}roximity cards -- {P}art 3: {I}nitialization and anticollision},
+ year = {2001, Stage: 90.92 --- 2007-12-11},
+ institution = {International Organization for Standardization},
+ address = {Geneva, Switzerland},
+ url = {http://www.isotopicmaps.org/sam/sam-model/YYYY-MM-DD/},
+}
+
+@INPROCEEDINGS{Bailey05Shoehorning,
+ author = {Bailey, Daniel and Juels, Ari},
+ title = {{Shoehorning Security into the EPC Standard}},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2006},
+ year = {2006},
+ editor = {De~Prisco, Roberto and Yung, Moti},
+ volume = {4116},
+ series = {LNCS},
+ pages = {303--320},
+ address = {Maiori, Italy},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Soos08Analysing,
+ author = {Soos, Mate},
+ title = {{Analysing the {M}olva and {D}i {P}ietro Private {RFID} Authentication Scheme}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'08},
+ year = {2008},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Budapest, Hungary},
+ month = {July},
+ organization = {},
+ publisher = {},
+}
+
+@inproceedings{DBLP:conf/ccs/BurmesterMM08,
+ author = {Mike Burmester and Breno de Medeiros and Rossana Motta},
+ title = {Robust, anonymous {RFID} authentication with constant key-lookup},
+ booktitle = {ASIACCS},
+ year = {2008},
+ pages = {283-291},
+ ee = {http://doi.acm.org/10.1145/1368310.1368351},
+ crossref = {DBLP:conf/ccs/2008asia},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ccs/2008asia,
+ editor = {Masayuki Abe and Virgil D. Gligor},
+ title = {Proceedings of the 2008 ACM Symposium on Information, Computer and Communications Security, ASIACCS 2008, Tokyo, Japan, March 18-20, 2008},
+ booktitle = {ASIACCS},
+ publisher = {ACM},
+ year = {2008},
+ isbn = {978-1-59593-979-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@INPROCEEDINGS{Blass09Ff,
+ author = {Blass, Erik-Oliver and Kurmus, Anil and Molva, Refik and Noubir, Guevara and Shikfa, Abdullatif},
+ title = {{The {F}f-Family of Protocols for {RFID}-Privacy and Authentication}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'09},
+ year = {2009},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Leuven, Belgium},
+ month = {July},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/cardis/CastellucciaA06,
+ author = {Claude Castelluccia and Gildas Avoine},
+ title = {Noisy Tags: {A} Pretty Good Key Exchange Protocol for {RFID} Tags},
+ booktitle = {CARDIS},
+ year = {2006},
+ pages = {289-299},
+ ee = {http://dx.doi.org/10.1007/11733447_21},
+ crossref = {DBLP:conf/cardis/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2006,
+ editor = {Josep Domingo-Ferrer and
+ Joachim Posegga and
+ Daniel Schreckling},
+ title = {Smart Card Research and Advanced Applications, 7th IFIP
+ WG 8.8/11.2 International Conference, CARDIS 2006, Tarragona,
+ Spain, April 19-21, 2006, Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3928},
+ year = {2006},
+ isbn = {3-540-33311-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ches/SavryPDRR07,
+ author = {O. Savry and F. Pebay-Peyroula and F. Dehmas and G. Robert and J. Reverdy},
+ title = {{RFID} Noisy Reader --- {H}ow to Prevent from Eavesdropping on the Communication?},
+ booktitle = {CHES},
+ year = {2007},
+ pages = {334-345},
+ ee = {http://dx.doi.org/10.1007/978-3-540-74735-2_23},
+ crossref = {DBLP:conf/ches/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ches/2007,
+ editor = {Pascal Paillier and Ingrid Verbauwhede},
+ title = {Cryptographic Hardware and Embedded Systems --- {CHES} 2007,
+ 9th International Workshop, Vienna, Austria, September 10-13,
+ 2007, Proceedings},
+ booktitle = {CHES},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4727},
+ year = {2007},
+ isbn = {978-3-540-74734-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Hancke07Modulating,
+ author = {G. Hancke},
+ title = {Modulating a noisy carrier signal for eavesdropping-resistant {HF RFID}},
+ journal = {e\&i --- Elektrotechnik und Informationstechnik},
+ year = {2007},
+ volume = {124},
+ number = {11},
+ month = {November},
+ pages = {404--408},
+ publisher = {Springer Wien},
+ ISSN = {0932-383X},
+ DOI = {10.1007/s00502-007-0479-7}
+}
+
+@inproceedings{1423361,
+ author = {Babbage, Steve and Dodd, Matthew},
+ title = {The {MICKEY} Stream Ciphers},
+ booktitle = {New Stream Cipher Designs: The e{STREAM} Finalists},
+ year = {2008},
+ isbn = {978-3-540-68350-6},
+ pages = {191--209},
+ doi = {http://dx.doi.org/10.1007/978-3-540-68351-3_15},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+ }
+
+@inproceedings{DBLP:conf/wistp/DeursenMR08,
+ author = {Ton van Deursen and Sjouke Mauw and Sasa Radomirovic},
+ title = {Untraceability of {RFID} Protocols},
+ booktitle = {WISTP},
+ year = {2008},
+ pages = {1-15},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79966-5_1},
+ crossref = {DBLP:conf/wistp/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/wistp/2008,
+ editor = {Jose Antonio Onieva and Damien Sauveron and Serge Chaumette and Dieter Gollmann and Constantinos Markantonakis},
+ title = {Information Security Theory and Practices. Smart Devices, Convergence and Next Generation Networks, Second {IFIP WG} 11.2 International Workshop, {WISTP} 2008, Seville, Spain, May 13-16, 2008. Proceedings},
+ booktitle = {WISTP},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5019},
+ year = {2008},
+ isbn = {978-3-540-79965-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{A51,
+ author = {Ross Anderson},
+ title = {A5 (was: Hacking digital phones)},
+ howpublished = {Newsgroup Communication},
+ year = {1994},
+}
+
+@inproceedings{DBLP:conf/cardis/GansHG08,
+ author = {Gerhard de Koning Gans and Jaap-Henk Hoepman and Flavio D. Garcia},
+ title = {A Practical Attack on the {MIFARE} {C}lassic},
+ booktitle = {CARDIS},
+ year = {2008},
+ pages = {267-282},
+ ee = {http://dx.doi.org/10.1007/978-3-540-85893-5_20},
+ crossref = {DBLP:conf/cardis/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2008,
+ editor = {Gilles Grimaud and Fran\c{c}ois-Xavier Standaert},
+ title = {Smart Card Research and Advanced Applications, 8th IFIP WG 8.8/11.2 International Conference, CARDIS 2008, London, UK, September 8-11, 2008. Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5189},
+ year = {2008},
+ isbn = {978-3-540-85892-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ima/CourtoisB07,
+ author = {Nicolas T. Courtois and Gregory V. Bard},
+ title = {Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ booktitle = {{IMA} Int. Conf.},
+ year = {2007},
+ pages = {152-169},
+ ee = {http://dx.doi.org/10.1007/978-3-540-77272-9_10},
+ crossref = {DBLP:conf/ima/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ima/2007,
+ editor = {Steven D. Galbraith},
+ title = {Cryptography and Coding, 11th IMA International Conference, Cirencester, UK, December 18-20, 2007, Proceedings},
+ booktitle = {IMA Int. Conf.},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4887},
+ year = {2007},
+ isbn = {978-3-540-77271-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Bard-algebraic,
+ title = {Algebraic Cryptanalysis},
+ author = {Gregory V. Bard},
+ year = {2009},
+ pages = {392},
+ volume = {XXXIV},
+ series = {Security and Cryptology},
+ ISBN = {978-0-387-88756-2},
+ publisher = {Springer},
+}
+
+@inproceedings{Graphviz,
+ author = {John Ellson and Emden R. Gansner and Eleftherios Koutsofios and Stephen C. North and Gordon Woodhull},
+ year = {2001},
+ title = {Graphviz --- open source graph drawing tools},
+ pages = {483--484},
+ crossref = {DBLP:conf/gd/2001},
+}
+
+@proceedings{DBLP:conf/gd/2001,
+ editor = {Petra Mutzel and Michael J{\"u}nger and Sebastian Leipert},
+ title = {Graph Drawing, 9th International Symposium, GD 2001 Vienna, Austria, September 23--26, 2001, Revised Papers},
+ booktitle = {Graph Drawing},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2265},
+ year = {2002},
+ isbn = {3-540-43309-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Borghoff09Mixed,
+ booktitle = {WEWoRC --- Western European Workshop on Research in Cryptology},
+ title = {Bivium as a Mixed-0-1 Linear Programming Problem},
+ author = {Julia Borghoff and Lars R. Knudsen and Mathias Stolpe},
+ month = {July},
+ year = {2009},
+ address = {Graz, Austria},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/DinurS09,
+ author = {Itai Dinur and Adi Shamir},
+ title = {Cube Attacks on Tweakable Black Box Polynomials},
+ booktitle = {EUROCRYPT},
+ year = {2009},
+ pages = {278--299},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9_16},
+ crossref = {DBLP:conf/eurocrypt/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2009,
+ editor = {Antoine Joux},
+ title = {Advances in Cryptology --- EUROCRYPT 2009, 28th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Cologne, Germany, April 26--30, 2009. Proceedings},
+ booktitle = {EUROCRYPT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5479},
+ year = {2009},
+ isbn = {978-3-642-01000-2},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{eStreamFinalists,
+ title = {The e{STREAM} Finalists},
+ editor = {Matthew Robshaw and Olivier Billet},
+ series = {LNCS},
+ subseries = {Security and Cryptology},
+ volume = {4986},
+ year = {2008},
+ pages = {295},
+ isbn = {978-3-540-68350-6},
+ publisher = {Springer},
+}
+
+@article{diffie76new,
+ author = "Whitfield Diffie and Martin E. Hellman",
+ title = "New Directions in Cryptography",
+ journal = "IEEE Transactions on Information Theory",
+ volume = "IT-22",
+ number = "6",
+ pages = "644--654",
+ date = "November 1976",
+ year = "1976",
+ url = "citeseer.ist.psu.edu/diffie76new.html"
+}
+
+@ARTICLE{Rivest78amethod,
+ author = {Ron L. Rivest and Adi Shamir and Leonard Max Adleman},
+ title = {A Method for Obtaining Digital Signatures and Public-Key Cryptosystems},
+ journal = {Communications of the ACM},
+ year = {1978},
+ volume = {21},
+ pages = {120--126}
+}
+
+@inproceedings{Pfizmann01Anonimity,
+ author = {Andreas Pfitzmann and Marit Köhntopp},
+ title = {Anonymity, Unobservability, and Pseudonymity --- {A} Proposal for Terminology},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {2009},
+ year = {2001},
+ booktitle = {Designing Privacy Enhancing Technologies},
+ doi = {10.1007/3-540-44702-4},
+ isbn = {978-3-540-41724-8},
+ pages = {1--9},
+}
+
+@misc{Bard07efficientmethods,
+ author = {Gregory V. Bard and Nicolas T. Courtois and Chris Jefferson},
+ title = {Efficient Methods for Conversion and Solution of Sparse Systems of Low-Degree Multivariate Polynomials over {GF}(2) via {SAT}-Solvers},
+ howpublished = {Cryptology ePrint Archive, Report 2007/024, \url{http://eprint.iacr.org/2007/024}},
+ year = {2007},
+ organization = {IACR},
+}
+
+@inproceedings{DBLP:conf/sat/SoosNC09,
+ author = {Mate Soos and
+ Karsten Nohl and
+ Claude Castelluccia},
+ title = {Extending {SAT} Solvers to Cryptographic Problems},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {244--257},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_24},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cav/GaneshD07,
+ author = {Vijay Ganesh and
+ David L. Dill},
+ title = {A Decision Procedure for Bit-Vectors and Arrays},
+ booktitle = {CAV},
+ year = {2007},
+ pages = {519-531},
+ ee = {http://dx.doi.org/10.1007/978-3-540-73368-3_52},
+ crossref = {DBLP:conf/cav/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cav/2007,
+ editor = {Werner Damm and
+ Holger Hermanns},
+ title = {Computer Aided Verification, 19th International Conference,
+ CAV 2007, Berlin, Germany, July 3-7, 2007, Proceedings},
+ booktitle = {CAV},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4590},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Logic2CNF,
+ author = {Edd Barrett},
+ title = {Logic2{CNF} Logic Solver and Converter},
+ note = {\url{http://projects.cs.kent.ac.uk/projects/logic2cnf/trac/wiki/WikiStart}},
+ year = {2010},
+ month = {March},
+}
+
+@misc{CryptoMiniSat,
+ author = {Mate Soos},
+ title = {Crypto{M}ini{S}at --- a {SAT} solver for cryptographic problems},
+ note = {\url{http://planete.inrialpes.fr/~soos/CryptoMiniSat/index.html}},
+ year = {2009},
+}
+
+@inproceedings{DBLP:conf/sat/EenB05,
+ author = {Niklas E{\'e}n and
+ Armin Biere},
+ title = {Effective Preprocessing in {SAT} Through Variable and Clause
+ Elimination},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {61-75},
+ ee = {http://dx.doi.org/10.1007/11499107_5},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{glucose,
+ author = {Gilles Audemard and Laurent Simon},
+ title = {{GLUCOSE}: a solver that predicts learnt clauses quality},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {7--8},
+}
+
+@inproceedings{precosat,
+ author = {Armin Biere},
+ title = {P\{re,i\}coSAT@SC’09},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {41--42},
+}
+
+@inproceedings{DBLP:conf/sat/HeuleM04a,
+ author = {Marijn Heule and
+ Hans van Maaren},
+ title = {Aligning {CNF}- and Equivalence-Reasoning},
+ booktitle = {SAT (Selected Papers},
+ year = {2004},
+ pages = {145--156},
+ ee = {http://dx.doi.org/10.1007/11527695_12},
+ crossref = {DBLP:conf/sat/2004lncs},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2004lncs,
+ editor = {Holger H. Hoos and
+ David G. Mitchell},
+ title = {Theory and Applications of Satisfiability Testing, 7th International
+ Conference, SAT 2004, Vancouver, BC, Canada, May 10-13,
+ 2004, Revised Selected Papers},
+ booktitle = {SAT (Selected Papers)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3542},
+ year = {2005},
+ isbn = {3-540-27829-X},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Heule-thesis,
+ author = {Marijn Heule},
+ title = {{m}arch: Towards a lookahead Sat solver for general purposes},
+ institution={Technische Universiteit Delft},
+ month={February},
+ year={2004},
+}
+
+@techreport{Heule-phd,
+ author = {Marijn J.H. Heule},
+ title = {Smart solving: Tool and techniques for satisfiability solvers},
+ institution={Technische Universiteit Delft},
+ year={2008},
+}
+
+@article{DBLP:journals/amai/JeroslowW90,
+ author = {Robert G. Jeroslow and
+ Jinchang Wang},
+ title = {Solving Propositional Satisfiability Problems},
+ journal = {Ann. Math. Artif. Intell.},
+ volume = {1},
+ year = {1990},
+ pages = {167-187},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/PipatsrisawatD07,
+ author = {Knot Pipatsrisawat and
+ Adnan Darwiche},
+ title = {A Lightweight Component Caching Scheme for Satisfiability
+ Solvers},
+ booktitle = {SAT},
+ year = {2007},
+ pages = {294-299},
+ ee = {http://dx.doi.org/10.1007/978-3-540-72788-0_28},
+ crossref = {DBLP:conf/sat/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2007,
+ editor = {Jo{\~a}o Marques-Silva and
+ Karem A. Sakallah},
+ title = {Theory and Applications of Satisfiability Testing --- SAT
+ 2007, 10th International Conference, Lisbon, Portugal, May
+ 28-31, 2007, Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4501},
+ year = {2007},
+ isbn = {978-3-540-72787-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ijcai/AudemardS09,
+ author = {Gilles Audemard and
+ Laurent Simon},
+ title = {Predicting Learnt Clauses Quality in Modern {SAT} Solvers},
+ booktitle = {IJCAI},
+ year = {2009},
+ pages = {399-404},
+ ee = {http://ijcai.org/papers09/Papers/IJCAI09-074.pdf},
+ crossref = {DBLP:conf/ijcai/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ijcai/2009,
+ editor = {Craig Boutilier},
+ title = {IJCAI 2009, Proceedings of the 21st International Joint
+ Conference on Artificial Intelligence, Pasadena, California,
+ USA, July 11-17, 2009},
+ booktitle = {IJCAI},
+ year = {2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/tacas/JarvisaloBH10,
+ author = {Matti J{\"a}rvisalo and
+ Armin Biere and
+ Marijn Heule},
+ title = {Blocked Clause Elimination},
+ booktitle = {TACAS},
+ year = {2010},
+ pages = {129-144},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2_10},
+ crossref = {DBLP:conf/tacas/2010},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/tacas/2010,
+ editor = {Javier Esparza and
+ Rupak Majumdar},
+ title = {Tools and Algorithms for the Construction and Analysis of
+ Systems, 16th International Conference, TACAS 2010, Held
+ as Part of the Joint European Conferences on Theory and
+ Practice of Software, ETAPS 2010, Paphos, Cyprus, March
+ 20-28, 2010. Proceedings},
+ booktitle = {TACAS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6015},
+ year = {2010},
+ isbn = {978-3-642-12001-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{DBLP:journals/dam/Li03,
+ author = {Chu Min Li},
+ title = {Equivalent literal propagation in the {DLL} procedure},
+ journal = {Discrete Applied Mathematics},
+ volume = {130},
+ number = {2},
+ year = {2003},
+ pages = {251-276},
+ ee = {http://dx.doi.org/10.1016/S0166-218X(02)00407-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Grid5000,
+ author = {{The Grid'5000 team}},
+ title = {The {G}rid'5000 project},
+ note = {\url{https://www.grid5000.fr}},
+}
+ year = {2008},
+
+@article{DBLP:journals/endm/Berre01,
+ author = {Daniel Le Berre},
+ title = {Exploiting the real power of unit propagation lookahead},
+ journal = {Electronic Notes in Discrete Mathematics},
+ volume = {9},
+ year = {2001},
+ pages = {59-80},
+ ee = {http://dx.doi.org/10.1016/S1571-0653(04)00314-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/GershmanS05,
+ author = {Roman Gershman and Ofer Strichman},
+ title = {Cost-Effective Hyper-Resolution for Preprocessing {CNF} Formulas},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {423-429},
+ ee = {http://dx.doi.org/10.1007/11499107_34},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/HeuleJB11,
+ author = {Marijn Heule and
+ Matti J{\"a}rvisalo and
+ Armin Biere},
+ title = {Efficient {CNF} Simplification Based on Binary Implication
+ Graphs},
+ booktitle = {SAT},
+ year = {2011},
+ pages = {201-215},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0_17},
+ crossref = {DBLP:conf/sat/2011},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2011,
+ editor = {Karem A. Sakallah and
+ Laurent Simon},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2011 - 14th International Conference, SAT 2011, Ann Arbor,
+ MI, USA, June 19-22, 2011. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6695},
+ year = {2011},
+ isbn = {978-3-642-21580-3},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ecai/PietteHS08,
+ author = {C{\'e}dric Piette and
+ Youssef Hamadi and
+ Lakhdar Sais},
+ title = {Vivifying Propositional Clausal Formulae},
+ booktitle = {ECAI},
+ year = {2008},
+ pages = {525-529},
+ ee = {http://dx.doi.org/10.3233/978-1-58603-891-5-525},
+ crossref = {DBLP:conf/ecai/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/ecai/2008,
+ editor = {Malik Ghallab and
+ Constantine D. Spyropoulos and
+ Nikos Fakotakis and
+ Nikolaos M. Avouris},
+ title = {ECAI 2008 - 18th European Conference on Artificial Intelligence,
+ Patras, Greece, July 21-25, 2008, Proceedings},
+ booktitle = {ECAI},
+ publisher = {IOS Press},
+ series = {Frontiers in Artificial Intelligence and Applications},
+ volume = {178},
+ year = {2008},
+ isbn = {978-1-58603-891-5},
+ ee = {http://www.booksonline.iospress.nl/Content/View.aspx?piid=9905},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/HanS09,
+ author = {HyoJung Han and
+ Fabio Somenzi},
+ title = {On-the-Fly Clause Improvement},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {209-222},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_21},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/SorenssonB09,
+ author = {Niklas S{\"o}rensson and
+ Armin Biere},
+ title = {Minimizing Learned Clauses},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {237-243},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_23},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/BacchusW03,
+ author = {Fahiem Bacchus and
+ Jonathan Winter},
+ title = {Effective Preprocessing with Hyper-Resolution and Equality
+ Reduction},
+ booktitle = {SAT},
+ year = {2003},
+ pages = {341-355},
+ ee = {http://dx.doi.org/10.1007/978-3-540-24605-3_26},
+ crossref = {DBLP:conf/sat/2003},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2003,
+ editor = {Enrico Giunchiglia and
+ Armando Tacchella},
+ title = {Theory and Applications of Satisfiability Testing, 6th International
+ Conference, SAT 2003. Santa Margherita Ligure, Italy, May
+ 5-8, 2003 Selected Revised Papers},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2919},
+ year = {2004},
+ isbn = {3-540-20851-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2005,
+ editor = {Fahiem Bacchus and
+ Toby Walsh},
+ title = {Theory and Applications of Satisfiability Testing, 8th International
+ Conference, SAT 2005, St. Andrews, UK, June 19-23, 2005,
+ Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3569},
+ year = {2005},
+ isbn = {3-540-26276-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2009,
+ editor = {Oliver Kullmann},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2009, 12th International Conference, SAT 2009, Swansea,
+ UK, June 30 - July 3, 2009. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {5584},
+ year = {2009},
+ isbn = {978-3-642-02776-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/hvc/MantheyHB12,
+ author = {Norbert Manthey and
+ Marijn Heule and
+ Armin Biere},
+ title = {Automated Reencoding of Boolean Formulas},
+ booktitle = {Haifa Verification Conference},
+ year = {2012},
+ pages = {102-117},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3_14},
+ crossref = {DBLP:conf/hvc/2012},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/hvc/2012,
+ editor = {Armin Biere and
+ Amir Nahir and
+ Tanja E. J. Vos},
+ title = {Hardware and Software: Verification and Testing - 8th International
+ Haifa Verification Conference, HVC 2012, Haifa, Israel,
+ November 6-8, 2012. Revised Selected Papers},
+ booktitle = {Haifa Verification Conference},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {7857},
+ year = {2013},
+ isbn = {978-3-642-39610-6},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+} \ No newline at end of file
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/splncs03.bst b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/splncs03.bst
new file mode 100644
index 000000000..327916917
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp14-pdf/splncs03.bst
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'
+%%
+%% BibTeX bibliography style for use with numbered references in
+%% Springer Verlag's "Lecture Notes in Computer Science" series.
+%% (See Springer's documentation for llncs.cls for
+%% more details of the suggested reference format.) Note that this
+%% file will not work for author-year style citations.
+%%
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
+%%
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre
+%%
+%% ================================================================================================
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
+%%
+%% CHANGES (with respect to titto-lncs-01.bst):
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
+%% ================================================================================================
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
+%% Edited by hand by titto based on `titto.bst' (see below)
+%%
+%% CHANGES (with respect to titto.bst):
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
+%% ================================================================================================
+%% This was file `titto.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
+%% ----------------------------------------
+%% *** Tentative .bst file for Springer LNCS ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ % \bibitem{key}...
+ % Usage of \cite is as follows:
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is alphabetical by authors.
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+% newline$
+% "\newblock " write$ % removed for titto-lncs-01
+ " " write$ % to avoid long spaces between title and "In: ..."
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+
+FUNCTION {add.colon}
+{ duplicate$ empty$
+ 'skip$
+ { ":" * add.blank }
+ if$
+}
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+STRINGS {z}
+FUNCTION {remove.dots}
+{ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+}
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ skip$ }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+FUNCTION {titto.space.prefix} % always introduce a space
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {titto.bbl.volume} % for handling journals
+{ "" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {titto.bbl.pages} % for journals
+{ "" }
+
+FUNCTION {titto.bbl.page} % for journals
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+% { "\urlprefix\url{" url * "}" * }
+ { "\url{" url * "}" * } % changed in titto-lncs-02.bst
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}{, f{.}.}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f{.}.~}{vv~}{ll}{ jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{
+ month "month" bibinfo.check
+ duplicate$ empty$
+ year "year" bibinfo.check duplicate$ empty$
+ { swap$ 'skip$
+ { "there's a month but no year in " cite$ * warning$ }
+ if$
+ *
+ }
+ { swap$ 'skip$
+ {
+ swap$
+ " " * swap$
+ }
+ if$
+ *
+ remove.dots
+ }
+ if$
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { emphasize ", " * swap$ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'titto.bbl.pages
+ 'titto.bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+% bbl.volume swap$ tie.or.space.prefix
+ titto.bbl.volume swap$ titto.space.prefix
+% rationale for the change above: for journals you don't want "vol." label
+% hence it does not make sense to attach the journal number to the label when
+% it is short
+ "volume" bibinfo.check
+ * *
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+% editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
+ editor "editor" format.names duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ key duplicate$ empty$
+ { pop$
+ journal duplicate$ empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+ { "journal" bibinfo.check emphasize word.in swap$ * }
+ if$
+ }
+ { word.in swap$ * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ {
+ bbl.and space.word
+ * editor #2 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { format.booktitle duplicate$ empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ }
+ { word.in swap$ * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.chapter.pages output
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ new.sentence % added by titto
+ format.bvolume output
+ format.pages output
+ new.sentence
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization "organization" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { output
+ address "address" bibinfo.check output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ {
+ address new.block.checka
+ address "address" bibinfo.check output
+ }
+ 'skip$
+ if$
+ }
+ {
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ }
+ if$
+ format.edition output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ add.colon
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished "howpublished" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+ empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization "organization" bibinfo.check output
+ }
+ { format.editors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ editor empty$
+ { publisher empty$
+ { format.number.series output }
+ {
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+ new.sentence
+ format.number.series output
+ format.organization.address output }
+ {
+ new.sentence
+ format.number.series output
+ organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {presort}
+SORT
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `titto.bst'.
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/Makefile b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/Makefile
new file mode 100644
index 000000000..9b86a32c9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/Makefile
@@ -0,0 +1,25 @@
+TEX = pdflatex -shell-escape -interaction=nonstopmode -file-line-error
+PRE = $(TEX) -ini -job-name="preamble" "&pdflatex preamble.tex\dump"
+BIB = bibtex
+
+all: cmsv4.pdf
+
+view :
+ okular cmsv44.pdf
+
+cmsv4.pdf : clean cmsv4.tex cmsv4.bbl cmsv4.blg
+ $(TEX) cmsv4.tex
+ $(TEX) cmsv4.tex
+ mv cmsv4.pdf cmsv44.pdf
+
+cmsv4.bbl cmsv4.blg : cmsv4.bib cmsv4.aux
+ $(BIB) cmsv4
+
+cmsv4.aux : cmsv4.tex
+ $(TEX) cmsv4.tex
+
+cmsv4.bib : cmsv4.tex
+ $(TEX) cmsv4.tex
+
+clean:
+ rm -f *.log *.pdf *.blg *.bbl *.aux *.out
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.kilepr b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.kilepr
new file mode 100644
index 000000000..1c48f5ab1
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.kilepr
@@ -0,0 +1,53 @@
+[General]
+def_graphic_ext=
+img_extIsRegExp=false
+img_extensions=.eps .jpg .jpeg .png .pdf .ps .fig .gif .dvi
+kileprversion=2
+kileversion=2.1.0
+lastDocument=cmsv4.tex
+masterDocument=
+name=auth_eloadas
+pkg_extIsRegExp=false
+pkg_extensions=.cls .sty .bbx .cbx .lbx
+src_extIsRegExp=false
+src_extensions=.tex .ltx .latex .dtx .ins .bib .mp
+
+[Tools]
+MakeIndex=
+QuickBuild=
+
+[document-settings,item:cmsv4.tex]
+Bookmarks=
+Encoding=UTF-8
+FoldedColumns=
+FoldedLines=
+Highlighting=LaTeX
+Indentation Mode=normal
+Mode=LaTeX
+ReadWrite=true
+
+[item:cmsv4.kilepr]
+archive=true
+column=0
+encoding=
+highlight=
+line=0
+mode=
+open=false
+order=-1
+
+[item:cmsv4.tex]
+archive=true
+column=1
+encoding=UTF-8
+highlight=LaTeX
+line=245
+mode=LaTeX
+open=true
+order=0
+
+[view-settings,view=0,item:cmsv4.tex]
+CursorColumn=1
+CursorLine=245
+JumpList=
+ViMarks=
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.tex b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.tex
new file mode 100644
index 000000000..128ca6c20
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/cmsv4.tex
@@ -0,0 +1,66 @@
+%\documentclass[runningheads]{llncs}
+\documentclass[final]{ieee}
+
+\usepackage{microtype} %This gives MUCH better PDF results!
+%\usepackage[active]{srcltx} %DVI search
+\usepackage[cmex10]{amsmath}
+\usepackage{amssymb}
+\usepackage{fnbreak} %warn for split footnotes
+\usepackage{url}
+%\usepackage{qtree} %for drawing trees
+%\usepackage{fancybox} % if we need rounded corners
+%\usepackage{pict2e} % large circles can be drawn
+%\usepackage{courier} %for using courier in texttt{}
+%\usepackage{nth} %allows to \nth{4} to make 1st 2nd, etc.
+%\usepackage{subfigure} %allows to have side-by-side figures
+%\usepackage{booktabs} %nice tables
+%\usepackage{multirow} %allow multiple cells with rows in tabular
+\usepackage[utf8]{inputenc} % allows to write Faugere correctly
+\usepackage[bookmarks=true, citecolor=black, linkcolor=black, colorlinks=true]{hyperref}
+\hypersetup{
+pdfauthor = {Mate Soos},
+pdftitle = {CryptoMiniSat v4.4},
+pdfsubject = {SAT Race 2015},
+pdfkeywords = {SAT Solver, DPLL},
+pdfcreator = {PdfLaTeX with hyperref package},
+pdfproducer = {PdfLaTex}}
+%\usepackage{butterma}
+
+%\usepackage{pstricks}
+\usepackage{graphicx,epsfig,xcolor}
+
+\begin{document}
+\title{The CryptoMiniSat-4.4 set of solvers at the SAT Race 2015}
+\author{Mate Soos, Marius Lindauer}
+
+\maketitle
+\thispagestyle{empty}
+\pagestyle{empty}
+
+\section{Introduction}
+This paper presents the conflict-driven clause-learning SAT solver CryptoMiniSat v4.4 (\emph{CMS4.4}) as submitted to SAT Race 15. CMS4.4 aims to be a modern, open-source SAT solver that allows for multi-threaded in-processing techniques while still retaining a strong CDCL component. In this description only the features relative to CMS4.4, the previous year's submission, are explained. Please refer to the previous years' description for details. In general, CMS4.4 is a in-processing SAT solver that usues optimized datastructures and finely-tuned timeouts to have good control over both memory and time usage of simplification steps.
+
+\subsection{Using watchlists as occurrence lists}
+As per lingeling \cite{lingeling}, CMS4.4 now uses the watchlist to store occurrence lists (when they are needed) and related occurrence information such as data related to looking for XOR clauses or gates. This significantly reduces the memory overhead and, due to cache locality, increases speed.
+
+\subsection{Removal of uneeded code}
+Over the years, many lines of code has been added to CMS that in the end didn't help and often was detrimental to both maintinability and efficiency of the solver. Many such additions have now been removed. This simplifies understanding and developing the system. Further, it allows the system to be more lean especially in the tight loops such as propagation and conflict analysis where most of the time is spent.
+
+\subsection{Integration of ideas from SWDiA5BY A26}
+Some of the ideas from SWDiA5BY A26\cite{swdia} have been included into CMS. In particular, the clause cleaning system employed and the switching restart have both made their way into CMS. Further, SWDiA5BY A26 was used as a test-bed against CMS to clean up the codebase from unwated and unneeded elements.
+
+\subsection{Incremental solving}
+Incremental solving for a in-processing solver is not trivial and many bugs have been found in fuzzing the incremental solving interface. The fuzzer developed for this purpose contains more than 1000 lines of python and allows for testing both the incremental and the DRAT~\cite{drat} interface of the solver.
+
+\subsection{Auto-tuning}
+The version 'autotune' reconfigures itself after about 160K conflicts. The configuration picked is one of 13 different setups that vary many different parameters of the solving such as learnt clause removal strategy, restart strategy, and in-processing strategies. CMS4.4 was run on all SAT Comp'09 + 11 + 13 problems with all configurations, extracting relevant information from the all problems after they have been solved and simplified for 160K conflicts. The information extracted and the top 5 best configurations were then given to a machine learning algorithm (C5.0\cite{Quinlan:1993:CPM:152181}) which built a decision tree from this data. This decision tree was then translated into C++ and compiled into the CMS4.4 source code.
+
+This work was carried out by the first author through a script for Amazon Web Services for reliably running any setup ($>1500$ lines of python), a script for extracting and sanitizing the parameters ($>500$ lines of python), and a script for translating the rule-based output of C5 into C++.
+
+\bibliographystyle{splncs03}
+\bibliography{sigproc}
+
+\vfill
+\pagebreak
+
+\end{document}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/ieee.cls b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/ieee.cls
new file mode 100644
index 000000000..3c57bba5d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/ieee.cls
@@ -0,0 +1,1497 @@
+% Copyright 2014 IEEEE
+% for terms of use see https://www.ieee.org/publications_standards/publications/rights/copyrightpolicy.html
+
+% =========================================================================
+% -------------------------------------------------------------------------
+% XX X
+% X
+% XX XXX XXX XXX XXX X XXXX
+% X X X X X X X X X X X
+% X XXXXX XXXXX XXXXX X X XXX
+% X X X X XX X X X X
+% XXX XXX XXX XXX XX XXX X XXXX
+% -------------------------------------------------------------------------
+% =========================================================================
+% ieee.cls --- For formatting IEEE conference & journal papers
+% --- Compiled by Gregory Plett, Sept 1997
+%
+% This class was inspired by one first compiled by Gerry Murray and
+% Silvano Balemi for LaTeX209. It was later updated for use with
+% LaTeX2e, and some bugs were fixed, all by Istvan Kollar. Lastly,
+% I have tried to make the class easier to use by paper authors.
+% Significant new functionality has been added. Many routines are
+% "borrowed" from other people's packages and modified extensively.
+% When I rembered where I got the routines from, I gave the author
+% credit.
+%
+% After I made many changes on my own, I found a version by Peter
+% N"uchter, and tried to retain some amount of compatibility with his
+% version. To be completely compatible with him, you may need to
+% manually:
+% \usepackage{rawfonts}\usepackage{oldlfont}
+% \AtBeginDocument{\parindent1.0em} (?)
+%
+%===========================================================================
+%
+% Usage:
+% \documentclass[main-mode,sub-mode,misc-options]{ieee}
+% \usepackage{your own packages}
+% \begin{document}
+% \bibliographystyle{IEEEbib}
+% \title[short]{regular}
+% \author[short]{full}
+% \maketitle
+% \begin{abstract}...\end{abstract}
+% \begin{keywords}...\end{keywords}
+% \section{...}
+% \PARstart ... or \PARstartCal ...
+% ...
+% \begin{biography}[picname.ps]{Author's name}...\end{biography}
+% \end{document}
+%
+% The document class options are:
+%
+% main-mode: One of the following is required. (draft is the default)
+% draft: Double-spaced, single column with date/time stamp.
+% submission: Double-spaced, suitable for submission for review.
+% compressed: Same as "submission", only single spaced.
+% final: Double-column, for assessing page-length and
+% format of final version.
+%
+% sub-mode:
+% techreport: This can modify "final" to produce a two-col
+% technical report.
+% internal: This can modify "submission", "compressed" or "final".
+% It changes the header to notify the reader that
+% this is a version of the manuscript to be used for
+% internal review processes only, and not to be
+% distributed.
+% submitted: This can modify "compressed" or "final". It changes
+% the header to notify the reader that this
+% is a preprint and not to be distributed.
+% inpress: This can modify "compressed" or "final". It changes the
+% header to notify the reader that this paper has
+% been accepted for publishing, but it is not yet to be
+% distributed.
+% reprint: This can modify "final". It changes the header
+% to notify the reader where the paper is reprinted from.
+%
+% misc-options:
+% narroweqnarray: Changes the spacing around the "=" sign in
+% equation arrays to make it the same as in displayed math.
+% inline: Compresses the horizontal spacing of inline math equations.
+% notitlepage: No separate title page. (default)
+% titlepage: Separate title page.
+% anonymous: Omit all author information from main part of paper.
+% Author info only prints on titlepage.
+% 9pt,10pt,11pt,12pt: Choose the appropriate type size. You should
+% not need to do this as the "correct" size is automatically
+% chosen. However, if you want, you may use these to change
+% the type size of the main text. "9pt" is a bit of a hack
+% to retain backward-compatibility.
+% invited: If the paper is an "invited" paper, then this option
+% prints "(Invited Paper)" under the authors' names.
+%
+% For regular IEEE submissions, define the journal name as:
+% \journal{IEEE Trans. Inst. Meas.}
+%
+% To specify the conference place and date:
+% \confplacedate{Ottawa, Canada, May 19--21, 1997}
+%
+% Before \maketitle, define:
+% \title{Title of paper}
+% \author{Author1\member{Fellow}\authorinfo{Department of
+% Electrical Engineering\\ Some University, Somewhere, CA 94305
+% USA} \and Author2\member{Senior Member}\authorinfo{Deptartment of
+% Measurement and Instrument Eng., Another University, ...}}
+%
+% Note, the contents of \authorinfo tends to vary depending on if it is
+% a conference or journal paper. The amount of manual changes are
+% small, and must be done by a human anyway. The example given is for an
+% IMTC conference.
+%
+% See also IEEEbib.bst and ieeefig.sty
+% Also very useful for document preparation is the style file "endfloat",
+% available on all CTAN TeX archives.
+%
+%===========================================================================
+% modified 14 October 2002:
+% - fixed bibliography listing of [#] when # < 10 and number of
+% references is greater than 9. Thanks for Janos Markus for finding
+% this bug and suggesting a solution.
+% modified 15 January 2000:
+% - "fixed" narroweqnarray. Never implemented! Now it is...
+% modified 12 January 2000:
+% - modified so only first \title and \author commands are recognized.
+% This allows LyX to have \title and \author with full syntax in
+% header, but dummy \title and \author show up in GUI.
+% - added "\date" so the \date command can change "submitted" and
+% "draft" date headers.
+% modified 11 January 2000:
+% - added PARstartLyX and PARstartCalLyX for LyX compatibility
+% - added biographyLyX
+% modified 1 Dec 1997:
+% - fixed first page in reprint mode to be same length as other pages
+% - added "invited" misc-option
+% modified 5 Sept 1997:
+% - added the inpress, reprint and internal sub-modes
+% - removed IMTC-conf and CDC-conf to separate files
+% modified 1 Sept 1997:
+% - included Babel package compatibility
+% - removed paper title from header on first page of draft
+% manuscript
+% - removed the fixed option "letterpaper" to allow a4paper (etc)
+% modified 1 Aug 1997:
+% - included the CDC-conf option
+%===========================================================================
+% **************************************************************************
+% ****** ******************************************
+% ***** LaTeX2e INITIALIZATION *****************************************
+% ****** ******************************************
+% **************************************************************************
+\typeout{Document Class `ieee' <Modified: 2000, Gregory L. Plett>.}
+\NeedsTeXFormat{LaTeX2e}[1993/11/11] % Oldest acceptable version of LaTeX2e
+\ProvidesClass{ieee}[2000/01/11] % Name of package provided, date
+\def\i@@@cls{exists}
+
+% Initial Code & Declaration of Options
+% -------------------------------------
+\newif\ifev@l \ev@lfalse % true if "final" mode.
+\newif\ifsubm@t \subm@tfalse % true if "submission" mode.
+\newif\ifdr@ft \dr@fttrue % true if "draft" mode.
+\newif\ifc@mpress \c@mpressfalse % true if "compressed" mode.
+
+\newif\if@technote \@technotefalse % true if "technote" sub-mode.
+\newif\ifintern@l \intern@lfalse % true if "internal" sub-mode.
+\newif\ifprepr@nt \prepr@ntfalse % true if "preprint" sub-mode.
+\newif\ifinpr@ss \inpr@ssfalse % true if "inpress" sub-mode.
+\newif\ifrepr@nt \repr@ntfalse % true if "reprint" sub-mode.
+
+\newif\iftitlep@ge \titlep@gefalse % true if has own titlepage
+\newif\if@non \@nonfalse % true if anonymous
+\newif\ifixpt \ixptfalse % true if trying to do 9 pt
+\newif\if@nvited \@nvitedfalse % true if an invited paper
+
+% Main options
+% ------------
+\DeclareOption{draft}{\ev@lfalse\subm@tfalse\dr@fttrue%
+ \typeout{ieee: `Draft' mode selected.}}
+\DeclareOption{submission}{\ev@lfalse\dr@ftfalse\subm@ttrue%
+ \typeout{ieee: `Submission' mode selected.}}
+\DeclareOption{compressed}{\ev@lfalse\dr@ftfalse\subm@tfalse\c@mpresstrue%
+ \typeout{ieee: `Compressed' mode selected.}}
+\DeclareOption{final}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}}
+\DeclareOption{evaluation}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}} % synonym for final
+
+% Sub options
+% -----------
+\DeclareOption{technote}{\@technotetrue%
+ \typeout{ieee: `Technote' sub-mode selected.}}
+\DeclareOption{internal}{\intern@ltrue\prepr@ntfalse\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Internal-Review' sub-mode selected.}}
+\DeclareOption{submitted}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}}
+\DeclareOption{preprint}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}} % synonym for submitted
+\DeclareOption{inpress}{\intern@lfalse\prepr@ntfalse\inpr@sstrue\repr@ntfalse%
+ \typeout{ieee: `Inpress' sub-mode selected.}}
+\DeclareOption{reprint}{\intern@lfalse\prepr@ntfalse\inpr@ssfalse\repr@nttrue%
+ \typeout{ieee: `Reprint' sub-mode selected.}}
+
+% Misc options
+% ------------
+ % regular or compressed "=" spacing in
+\def\eqnarr@ysep{\arraycolsep} % eqnarray (this is the default)
+ % NOTE: we must use "def" and not "="
+ % as arraycolsep not yet defined.
+\DeclareOption{narroweqnarray}{\gdef\eqnarr@ysep{0.28em\relax}%
+ \typeout{ieee: Narrow equation arrays selected.}}
+\DeclareOption{inline}{\everymath{\thinmuskip=2mu plus 1mu
+ \medmuskip=3mu plus 1mu minus 2mu
+ \thickmuskip=4mu plus 2mu\relax}%
+ \typeout{ieee: Narrower inline equations selected.}}
+\DeclareOption{notitlepage}{\titlep@gefalse%
+ \typeout{ieee: No separate title page.}}
+\DeclareOption{titlepage}{\titlep@getrue%
+ \typeout{ieee: Use separate title page.}}
+\DeclareOption{anonymous}{\@nontrue\AtBeginDocument{\glpexclude{biography}}
+ \typeout{ieee: Omit author information from paper.}}
+\DeclareOption{invited}{\@nvitedtrue%
+ \typeout{ieee: (Invited Paper).}}
+
+\DeclareOption{9pt}{\ixpttrue%
+ \typeout{ieee: Trying to emulate old `9pt' document class.}}
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+% Execution of Options/Package Loading
+% ------------------------------------
+\newlength\narrowcol
+\newlength\parindentsave % recover parindent in blsone text
+
+\ProcessOptions
+\ifev@l % if "final" mode...
+ \if@technote\ixpttrue\typeout{ieee: Trying to emulate old `9pt'
+ document class.}\fi%
+ \LoadClass[twoside,final,twocolumn,10pt]{article}
+\else % if "draft"/"submission"/(compressed) mode...
+ \ifixpt
+ \LoadClass[oneside,final,onecolumn,10pt]{article}
+ \else
+ \LoadClass[oneside,final,onecolumn,12pt]{article}
+ \fi
+\fi
+\RequirePackage[final]{graphicx}
+\RequirePackage{ifthen}
+
+% Re-Definitions of English words which must be done before
+% the Babel package (optional) is loaded.
+% ---------------------------------------------------------
+\def\keywordsname{Index Terms}
+\def\indexterms#1{\def\keywordsname{#1}}
+\def\appendicesname{Appendices}
+\def\figurename{Fig.}
+
+% **************************************************************************
+% ***** Check Sub-Options for Compatibility w/ Main-Options ************
+% **************************************************************************
+\if@technote\ifev@l\else\ClassError{ieee}{`technote' sub-mode may be
+ used only with the `final' ^^Jmain-mode. It may not be used
+ with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+\ifintern@l\ifdr@ft\ClassError{ieee}{`internal' sub-mode may be
+ used only with the ^^J`submission,' `compressed,' or `final' main-modes.
+ It may not be used ^^Jwith the `draft' main-mode}{}\endinput\fi\fi
+\ifprepr@nt\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`submitted'
+ sub-mode may be used only with the ^^J`compressed' or `final'
+ main-modes. It may not be used with either the ^^J`draft' or
+ `submission' main-modes}{}\endinput\fi\fi\fi
+\ifinpr@ss\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`inpress'
+ sub-mode may be used only with the `compressed' ^^Jor `final'
+ main-modes. It may not be used with either the `draft' or
+ ^^J`submission' main-modes}{}\endinput\fi\fi\fi
+\ifrepr@nt\ifev@l\else\ClassError{ieee}{`reprint'
+ sub-mode may be used only with the `final' ^^Jmain-mode. It may not be
+ used with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+
+% **************************************************************************
+% ***** Page Layout Definition *****************************************
+% **************************************************************************
+%% Layout definitions (mostly) common to all options.
+
+\hoffset 0in \voffset 0in
+\headheight 12pt \headsep 7mm
+\marginparsep 10pt \marginparwidth 20pt
+\marginparpush 25pt
+\columnsep 4mm
+\parindent 1.0em
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\partopsep \z@
+\topsep 1.3ex
+\parsep \z@
+\itemsep \z@
+
+\setlength{\parindentsave}{\parindent}
+
+\ifev@l % if "evaluation" mode
+ % if camera-ready or A4paper ...
+ \ifdim\paperwidth<211mm
+ \oddsidemargin -11.4mm \evensidemargin -11.4mm
+ % for regular US Letter, not camera-ready
+ \else
+ \oddsidemargin -8.45mm \evensidemargin -8.45mm
+ \fi
+ \ifrepr@nt
+ \textheight 237.5mm % leave 6mm for cpyright on first page
+ \else
+ \textheight 243.5mm
+ \fi
+ \voffset -0.5in
+ \textwidth 182.0mm
+ \topmargin -12pt
+ \setlength{\narrowcol}{89mm}
+\else % if "draft"/"submission" mode...
+ \ifc@mpress % and "compressed"
+ \oddsidemargin -0.25in \evensidemargin -0.25in
+ \textheight 9in \textwidth 7in
+ \topmargin -0.25in
+ \setlength{\narrowcol}{7in}
+ \else % and NOT "compressed"
+ \renewcommand\baselinestretch{1.8}\renewcommand{\arraystretch}{0.8}
+ \parindent=1.8\parindent
+ \oddsidemargin 0pt \evensidemargin 0pt
+ \headheight 12pt \headsep 0.375in
+ \topmargin 0pt
+ \textheight 8.5in \textwidth 6.5in
+ \marginparsep 0in \marginparwidth 0pt
+ \marginparpush 5pt
+ \setlength{\narrowcol}{6.5in}
+ \fi
+\fi
+
+\def\normalstyle{\rmfamily}
+
+% **************************************************************************
+% ***** Font Definition ************************************************
+% **************************************************************************
+%% The 9-point option is being faked since it is not supported by the
+%% article base class.
+
+%% Check if we have selected 9 points
+\ifixpt
+\typeout{-- This is a 9 point document}
+\gdef\@ptsize{9}
+\def\@normalsize{\@setsize\normalsize{10.7pt}\ixpt\@ixpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.12pt}\viiipt\@viipt}
+\def\footnotesize{\@setsize\footnotesize{8.15pt}\viipt\@vipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vpt}
+\def\tiny{\@setsize\tiny{5pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{18pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+\fi
+%%
+%% Check if we have selected 10 points
+\def\@tempa{0}\if\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.2pt}\viiipt\@viiipt}
+\def\footnotesize{\@setsize\footnotesize{8.8pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{1}\if\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{2}\if\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\AtBeginDocument{\normalsize\normalstyle\ps@headings\pagenumbering{arabic}}
+
+% **************************************************************************
+% ***** List Definition ************************************************
+% **************************************************************************
+%% Change aspect of lists with
+%% 1) \itemindent, label indentation wrt to left list margin
+%% 2) \leftmargini, the indentation of the whole list (on left, first level)
+\ifev@l
+ \itemindent -1em
+ \leftmargini 2em
+ \leftmarginii 1em
+ \leftmarginiii 1.5em
+ \leftmarginiv 1.5em
+ \leftmarginv 1.0em
+ \leftmarginvi 1.0em
+\else
+ \itemindent -1em
+ \leftmargini 3em
+ \leftmarginii 3em
+ \leftmarginiii 3em
+ \leftmarginiv 3em
+ \leftmarginv 3em
+ \leftmarginvi 3em
+\fi
+%\itemindent 2em % Alternative values: sometimes used..
+%\leftmargini 0em
+\labelsep 5pt
+\leftmargin\leftmargini
+\labelwidth \z@
+
+\def\@listI{\leftmargin\leftmargini} \@listI
+\def\@listi{\leftmargin\leftmargini \topsep \z@ plus 1pt minus 1pt}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)} \def\theenumii{\alph{enumii}}
+\def\labelenumiii{\theenumiii.} \def\theenumiii{\roman{enumiii}}
+\def\labelenumiv{\theenumiv.} \def\theenumiv{\Alph{enumiv}}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\scriptstyle\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%% \itemindent is set to \z@ by list, so define new temporary variable
+\newdimen\tmpitemindent
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+\def\@mklab#1{#1}
+\def\description{\tmpitemindent\itemindent\list{}{\itemindent\tmpitemindent
+ \labelwidth\z@\def\makelabel##1{\hspace\labelsep\emph{##1}}}}
+\def\enddescription{\endlist\par}
+\def\enumerate{\tmpitemindent\itemindent\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \list{\csname label\@enumctr\endcsname}{\itemindent\tmpitemindent
+ \usecounter{\@enumctr}\def\makelabel##1{\hspace\labelsep\hfil{##1}}}\fi}
+\def\endenumerate{\endlist\par}
+\def\itemize{\tmpitemindent\itemindent\ifnum \@itemdepth >3 \@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}{\itemindent\tmpitemindent
+ \def\makelabel##1{\hspace\labelsep\hfil\emph{##1}}}\fi}
+\def\enditemize{\endlist\par}
+
+\newif\if@restonecol
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{coverpagestyle}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi%
+\if@twoside\mbox{}\thispagestyle{coverpagestyle}\c@page\z@\cleardoublepage\fi}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep\labelsep
+
+% **************************************************************************
+% ***** Footnote Definition ********************************************
+% **************************************************************************
+\skip\footins 10pt plus 5pt minus 2pt
+\footnotesep 7pt
+\footskip 6mm
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+\long\def\@makefntext#1{\parindent .8em\indent$^{\@thefnmark}$#1}
+\def\footnoterule{}
+
+% Reset baselinestretch within footnotes.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\long\def\@footnotetext#1{\insert\footins{\blsone%
+ \footnotesize\interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ \let\par\\
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% **************************************************************************
+% ***** Keep track of Sections *****************************************
+% **************************************************************************
+\if@technote
+ \setcounter{secnumdepth}{3}
+\else
+ \setcounter{secnumdepth}{4}
+\fi
+
+\def\thesection{\@Roman\c@section}
+\def\thesubsection{\Alph{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\thesubsubsectiondis{\Alph{subsection}.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\alph{paragraph}}
+\def\theparagraphdis{\thesubsubsectiondis.\alph{paragraph}}
+
+\def\theequation{\arabic{equation}}
+
+% **************************************************************************
+% ***** Table of Contents, List of Figures/Tables Definitions **********
+% **************************************************************************
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+ \@tempdima 1.8em \begingroup \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip-\@pnumwidth \bf\leavevmode #1\hfil\hbox to\@pnumwidth{\hss #2}
+ \par \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1em}{1.8em}}
+\def\listoftables{\section*{\listtablename}\@starttoc{lot}}
+\let\l@table\l@figure
+
+% **************************************************************************
+% ***** Float Definitions **********************************************
+% **************************************************************************
+%% Normal Floats %% Double Column Floats
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt
+%\@maxsep 20pt \@dblmaxsep 20pt %!PN
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+% Reset baselinestretch within floats.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\small\normalsize
+ \hsize\columnwidth \@parboxrestore}
+
+% **************************************************************************
+% ***** Caption Definition *********************************************
+% **************************************************************************
+% some journals do not have centered captions for figures.
+\newif\ifc@ptionleft \c@ptionlefttrue
+\def\leftfigcaptions{\c@ptionlefttrue}
+\def\centerfigcaptions{\c@ptionleftfalse}
+
+\long\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup \@parboxrestore \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+% changed by GLP to allow table captions to be set to a specific maximum
+% width "\captionwidth", if defined.
+\newlength{\captionindent}
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 5pt
+ \setbox\@tempboxa\hbox{\small #1.~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\small #1.~ }
+ %\setlength\captionindent{\wd\@tempboxa} \divide\captionindent by 2
+ %\parbox[t]{\hsize}{\small \hangindent \captionindent \hangafter=1%
+ \parbox[t]{\hsize}{\small
+ \unhbox\@tempboxa#2}
+ \else \hbox
+ to\hsize{\small\ifc@ptionleft\else\hfil\fi\box\@tempboxa\hfil}
+ \fi
+\else
+ \begin{center}
+ \ifx\captionwidth\undefined {\small #1}\\{\small\scshape #2}
+ \else
+ \begin{minipage}{\captionwidth}
+ \begin{center}{\small #1}\\{\small\scshape #2}\end{center}
+ \end{minipage}
+ \fi
+ \end{center}\vskip 4pt
+\fi}
+
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\ \thefigure}
+%\def\figure{\@float{figure}} % GLP
+%\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% **************************************************************************
+% ***** Header/Footer Definition ***************************************
+% **************************************************************************
+% compute the time in hours and minutes; make new vars \timehh and \timemm
+\newcount\timehh\newcount\timemm\timehh=\time\divide\timehh by 60
+\timemm=\time\count255=\timehh\multiply\count255 by-60
+\advance\timemm by \count255
+\ifnum\timehh=12\def\apm{pm}\else
+\ifnum\timehh>12\def\apm{pm}\advance\timehh by-12\else
+\def\apm{am}\fi\fi
+\def\t@me{\number\timehh\,:\,\ifnum\timemm<10 0\fi\number\timemm\,\apm}
+
+% default definitions
+% -------------------
+\def\theevenhe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+\def\theoddhe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+\def\theevenf@@t{}
+\def\theoddf@@t{}
+
+\def\theeventphe@d{\footnotesize\thepage \hfil \hbox{}}
+\def\theoddtphe@d{\hbox{}\footnotesize \hfil \thepage}
+\def\theeventpf@@t{}
+\def\theoddtpf@@t{}
+
+\def\theevencphe@d{}
+\def\theoddcphe@d{}
+\def\theevencpf@@t{}
+\def\theoddcpf@@t{}
+
+\def\internalmsg{Preliminary version for evaluation: Please do not
+ circulate without the permission of the author(s)}
+\def\submittedmsg{SUBMITTED FOR PUBLICATION TO:}
+\def\acceptedmsg{ACCEPTED FOR PUBLICATION:}
+\def\inpressmsg{(IN PRESS)}
+\def\reprintmsg{REPRINTED FROM:}
+
+% default cover page style (optional cover page)
+% ----------------------------------------------
+\def\ps@coverpagestyle{
+ \def\@oddhead{\theoddcphe@d} \def\@evenhead{\theevencphe@d}
+ \def\@oddfoot{\theoddcpf@@t} \def\@evenfoot{\theevencpf@@t}
+}
+
+% default title page style (first page of paper)
+% ----------------------------------------------
+\def\ps@titlepagestyle{
+ \def\@oddhead{\theoddtphe@d} \def\@evenhead{\theeventphe@d}
+ \def\@oddfoot{\theoddtpf@@t} \def\@evenfoot{\theeventpf@@t}
+}
+
+% default regular page style
+% --------------------------
+\if@twoside
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@evenhead{\theevenhe@d}
+ \def\@oddfoot{\theoddf@@t} \def\@evenfoot{\theevenf@@t}
+ }
+\else
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@oddfoot{\theoddf@@t}
+ \def\@evenhead{} \def\@evenfoot{}
+ }
+\fi
+
+% For draft mode (no sub-modes allowed)
+% -------------------------------------
+\ifdr@ft
+ \def\leftmark{\sh@rttitle}\let\rightmark\leftmark
+ \def\theoddf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theevenf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+ \def\theoddtpf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theeventpf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+\fi
+
+% For submission mode (default plus internal sub-modes allowed)
+% -------------------------------------------------------------
+\ifsubm@t
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \else % put date on first page.
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+\fi
+
+% For compressed mode (default, internal, submitted and
+% inpress sub-modes allowed)
+% -----------------------------------------------------
+\ifc@mpress
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \fi
+\fi
+
+% For final (evaluate) mode (default, techreport, internal,
+% submitted, inpress and reprint sub-modes allowed)
+% ---------------------------------------------------------
+\ifev@l
+ \edef\TODAY{\uppercase{\today}}
+ \def\leftmark{\@journal\@titletext}\def\rightmark{\titl@line}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \if@technote % make header a little bigger
+ \def\theevenhe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddhe@d{\hbox{}\small\rightmark \hfil \thepage}
+ \def\theeventphe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\small\leftmark \hfil \thepage}
+ \fi
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \def\leftmark{\submittedmsg\ \@journal\@titletext, \TODAY}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \fi
+ \ifrepr@nt
+ % reset page size on second and following pages b/c no copyright info
+ \let\oldshipout\shipout
+ \gdef\shipout{\global\textheight 243.5mm\oldshipout}
+ \def\theeventpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\theoddtpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\leftmark{\reprintmsg\ \@journal\@titletext}
+ \fi
+\fi
+
+%% Defines the command for putting the header. footernote{TEXT} is the same
+%% as markboth{TEXT}{TEXT}. Here for compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+\def\footernote#1{\markboth{#1}{#1}}
+
+% **************************************************************************
+% ***** Citation/Bibliography Definitions ******************************
+% **************************************************************************
+%% separate citations with "], ["
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{],
+[}\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on
+page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{[{#1\if@tempswa, #2\fi}]}
+
+%% Allow short (name-less) citations, when used in conjunction with a
+%% bibliography style that creates labels like \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
+
+\def\thebibliography#1{\section*{\refname}\footnotesize\list
+ {\hss[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep \itemsep 0pt plus .5pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+ \ifev@l\else\normalsize\fi %added by GLP
+}
+\let\endthebibliography=\endlist
+
+% **************************************************************************
+% ***** Appendix/Appendices Definitions ********************************
+% **************************************************************************
+\newcounter{numappendices}\setcounter{numappendices}{0}
+\newif\ifappendix \appendixfalse
+%% appendix command for one single appendix
+\def\appendix{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}}
+ \ifnum \value{numappendices}>1
+ \section*{\appendicesname}
+ \else
+ \section*{\appendixname}
+ \fi
+ \setcounter{numappendices}{0}
+}
+%% appendices command for multiple appendicies
+\def\appendices{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}} \section*{\appendicesname}
+ \setcounter{numappendices}{0}
+}
+\AtEndDocument{\if@filesw\immediate\write\@auxout{\string\setcounter{numappendices}{\arabic{numappendices}}}\fi}
+
+% **************************************************************************
+% ***** Title Definitions **********************************************
+% **************************************************************************
+\def\titl@line{\sh@rttitle} %for the header at the top of the page.
+
+\def\@title{\typeout{ieee: Warning! No \noexpand\title given!}}
+\def\title{\@ifnextchar [{\titlea}{\titleb}}%]
+
+\def\set@title#1{\gdef\@title{#1}\global\def\set@title##1{}}
+\def\setsh@rttitle#1{\gdef\sh@rttitle{#1}\global\def\setsh@rttitle##1{}}
+\def\titlea[#1]#2{\set@title{#2}\setsh@rttitle{\uppercase{#1}}}
+\def\titleb#1{\set@title{#1}\setsh@rttitle{\uppercase{#1}}}
+
+\def\authorinfo#1{\let\\\relax\thanks{#1}}
+
+\ifev@l
+ \if@technote
+ \def\member#1{}
+ \else
+ \def\member#1{, \emph{#1, IEEE}}
+ \fi
+\else
+ \def\member#1{}
+\fi
+
+\def\and{\unskip% % \begin{tabular}
+\end{tabular}%
+\hskip 0pt plus 0.1pt%
+\begin{tabular}[t]{@{}c@{}}\ }%
+
+\def\@author{\typeout{ieee: Warning! No \noexpand\author given!}}
+\def\author{\@ifnextchar [{\authora}{\authorb}}%]
+\def\set@author#1{\gdef\@author{#1}\global\def\set@author##1{}}
+\def\settitl@line#1{\gdef\titl@line{#1}\global\def\settitl@line##1{}}
+\def\authora[#1]#2{\set@author{#2}\if@non\else\settitl@line{#1: \sh@rttitle}\fi}
+\def\authorb#1{\set@author{#1}}
+
+\def\date#1{\def\today{#1}\edef\TODAY{\uppercase{\today}}}
+
+\long\def\maketitle{%
+ \begingroup
+ \let\@thanks\@empty
+ \renewcommand\thefootnote{} % the \thanks{} mark type is empty
+ \iftitlep@ge\begin{titlepage}\@maketitlepage\@thanks\end{titlepage}%
+ \let\@thanks\@empty\fi
+ \thispagestyle{titlepagestyle}
+ \if@twocolumn
+ \if@technote
+ %\if@twoside\newpage\cleardoublepage\else\newpage\fi%
+ \newpage\global\@topnum\z@
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else
+ \ifnum \col@number=\@ne
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else \twocolumn[%
+ \ifrepr@nt%
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo%
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi%
+ \@maketitle]%
+ \fi
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi
+ \fi
+ \@maketitle
+ \fi
+ \thispagestyle{titlepagestyle}%
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax \global\let\maketitle\relax
+ \global\let\@maketitle\relax \global\let\@thanks\@empty
+ \global\let\@author\@empty \global\let\@date\@empty
+ \global\let\@title\@empty \global\let\title\relax
+ \global\let\author\relax \global\let\date\relax
+ \global\let\and\relax
+}
+
+\long\def\@maketitle{\unskip\newpage%
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\if@non\else\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}\fi\par
+ \else\unskip
+ \noindent{\Huge\@title\par}%
+ \if@non\else\vskip1.0em%
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}%
+ \fi\par%
+ \if@nvited\vskip1.0em\noindent\emph{\large(Invited Paper)}\par\fi
+ \fi
+ \ifrepr@nt
+ \ifx\@lognumber\undefined\typeout{ieee: Warning! No
+ \noexpand\pubitemident or \noexpand\lognumber
+ given!}\else\thanks{\@lognumber}\fi%
+ \fi
+ \end{center}\par\vskip 0.5em}%
+
+\long\def\@maketitlepage{\newpage%
+ \mbox{}\vfil
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}
+ \else
+ \vskip0.2em{\Huge\@title\par}\vskip1.0em%
+ \iftitlep@ge\vfil\fi
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}%
+ \fi
+ \end{center}\par\vfil\mbox{}}
+
+\def\@journal{\typeout{ieee: Warning! No \noexpand\journal given!}}
+\def\journal#1{\def\@journal{\uppercase{#1}}}
+
+\def\@ieeecopyright{\typeout{ieee: Warning! No \noexpand\ieeecopyright given!}}
+\def\ieeecopyright#1{\def\@ieeecopyright{#1}}
+
+\def\lognumber#1{\def\@lognumber{IEEE Log Number #1.}}
+\def\pubitemident#1{\def\@lognumber{Publisher Item Identifier #1.}}
+\long\def\loginfo#1{\long\def\@loginfo{\hbox{\vrule height 3ex width \z@}#1}}
+
+\def\sh@rttitle{}
+\def\@titletext{}
+\def\titletext#1{\def\@titletext{#1}}
+
+\def\firstpage#1{\setcounter{page}{#1}}
+
+% **************************************************************************
+% ***** Abstract Definition ********************************************
+% **************************************************************************
+\def\abstract{%
+ \if@twocolumn
+ \small\bfseries{\itshape\abstractname\/---}%
+ \else
+ \begin{center}\vspace{-0.8em}\small\bf\abstractname\end{center}
+ \quotation\small
+ \fi\ignorespaces}
+\def\endabstract{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Keywords Definition ********************************************
+% **************************************************************************
+\def\keywords{\vspace{-.3em}
+ \if@twocolumn
+ \small\bfseries{\itshape\keywordsname\/---}%
+ \else
+ \begin{center}\small\bf\keywordsname\end{center}\quotation\small
+ \fi\ignorespaces}
+\def\endkeywords{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Fix Section Numbering ******************************************
+% **************************************************************************
+\gdef\@punct{.\ \ } % Punctuation after run-in section heading
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{%
+ %\ifnum #2=1\Roman{#1}.\fi\ifnum #2=2\Alph{#1}.\fi
+ \ifnum #2=1\thesection.\fi
+ \ifnum #2=2\thesubsection.\fi
+ \ifnum #2>2{\csname the#1dis\endcsname}\if@technote.\fi\fi \hskip .5em}
+ \ifnum #2=1\ifappendix\stepcounter{numappendices}\fi\fi
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}
+ \fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5\@punct}\fi
+ \@xsect{#3}}
+
+% **************************************************************************
+% ***** Section Definitions ********************************************
+% **************************************************************************
+\def\section{\@startsection{section}{1}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\centering\scshape}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\itshape}}
+\if@technote
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .1ex}{0pt}{\itshape}}
+\else
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\normalstyle}}
+ \def\paragraph{\@startsection{paragraph}{4}{\z@}{1.0ex plus .5ex
+ minus .2ex}{0ex}{\normalstyle}}
+\fi
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\def\QED{\mbox{\rule[0pt]{1.5ex}{1.5ex}}}
+\def\proof{\noindent\hspace{1em}{\it Proof: }}
+\def\endproof{\hspace*{\fill}~\QED\par\endtrivlist\unskip}
+\def\@begintheorem#1#2{\tmpitemindent\itemindent\topsep 0pt\normalstyle\trivlist
+ \item[\hskip \labelsep{\indent\it #1\ #2:}]\itemindent\tmpitemindent}
+\def\@opargbegintheorem#1#2#3{\tmpitemindent\itemindent\topsep 0pt\normalstyle \trivlist
+ \item[\hskip\labelsep{\indent\it #1\ #2\ \normalstyle(#3)}]\itemindent\tmpitemindent}
+\def\@endtheorem{\endtrivlist\unskip}
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\if@twoside\else\raggedbottom\fi
+
+%% Definition for Big letter at the beginning of a paragraph
+%%
+\def\PARstart#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartCal#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartLyX#1{\PARstart #1}
+\def\PARstartCalLyX#1{\PARstartCal #1}
+
+\if@technote\def\PARstart#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartCal#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartLyX#1{#1}\fi % if technical note, disable it
+\if@technote\def\PARstartCalLyx#1{#1}\fi % if technical note, disable it
+
+% **************************************************************************
+% ***** Misc. Definitions **********************************************
+% **************************************************************************
+%Restore single spacing
+\newcommand{\blsone}{\renewcommand\baselinestretch{1}%
+ \renewcommand\arraystretch{1.2}\setlength{\parindent}{\parindentsave}%
+ \normalsize}
+\newcommand{\capitem}[1]{{\hspace{0.2ex}(#1)}~}
+\newcommand{\insdate}{}
+
+% **************************************************************************
+% ***** MATH Definitions ***********************************************
+% **************************************************************************
+\def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \eqnarr@ysep\hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \eqnarr@ysep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\def\endeqnarray{%
+ \@@eqncr
+ \egroup
+ \global\advance\c@equation\m@ne
+ $$\@ignoretrue
+}
+
+% **************************************************************************
+% ***** Biography Definitions ******************************************
+% **************************************************************************
+% This is the main code for the biography environment of the IEEE
+% transactions class. The previous biography code had some known
+% problems which were difficult to fix. The crux of the issue was that
+% the photo frame was overlaid by text when \baselinestretch>1 or when
+% the biography consisted of multiple short paragraphs.
+%
+% The fix was done by extracting code from the excellent package:
+% 'picinpar.sty' version 1.2a as of july 13, 1993
+% by Friedhelm Sowa
+%
+% (At least most of) The bugs you find in this code were introduced
+% unwittingly by myself.
+%
+%----------------
+% Known problems:
+%
+% - Don't use multiple blank lines to separate paragraphs. A single
+% blank line works well, but multiple blank lines will confuse
+% the code. This has something to do with the \def\par{\\\indent}
+% line, but I can't think of an appropriate fix. Similarly, make
+% sure the environment doesn't end with an extra blank line.
+% - Don't use \samepage
+% - Use \footnotemark within and \footnotetext outside the
+% window-environment instead of \footnote
+% - When using the epic-package load picinpar before epic
+% like \documentstyle[...,picinpar,epic]{...}
+%
+% Counts
+\newcount\br \newcount\nb \newcount\tcdsav \newcount\tcl \newcount\tcd
+\newcount\tcn \newcount\cumtcl
+% Dimens
+\newdimen\rtside \newdimen\hpic \newdimen\vpic \newdimen\strutilg
+\newdimen\picwd \newdimen\topheight \newdimen\ilg \newdimen\lpic
+\newdimen\lwindowsep \newdimen\rwindowsep % VK 10 Feb 93
+\lwindowsep0.5\baselineskip % "
+\rwindowsep0.5\baselineskip % "
+\newdimen\cumpar
+% Tokens
+\newtoks\twa \newtoks\la \newtoks\ra \newtoks\ha \newtoks\pictoc
+% Boxes
+\newbox\rawtext \newbox\holder \newbox\windowbox \newbox\wartext
+\newbox\finaltext \newbox\aslice \newbox\bslice \newbox\wbox
+\newbox\wstrutbox \newbox\picbox \newbox\waslice \newbox\wbslice
+\newbox\fslice
+ % Another strut
+\def\wstrut{\relax\ifmmode\copy\wstrutbox\else\unhcopy\wstrutbox\fi}
+%
+
+\def\getpic#1{\sbox{\@tempboxa}{\includegraphics{#1}}%
+\newcount\tmpcta \tmpcta=\ht\@tempboxa%
+\newcount\tmpctb \tmpctb=\wd\@tempboxa%
+\divide\tmpctb by 100%
+\divide\tmpcta by\tmpctb%
+\ifnum\tmpcta>133%
+\typeout{ieee: Biography picture `#1' too tall.}%
+\frame{\hbox to 25mm{\hfil\resizebox{!}{32mm}{\usebox{\@tempboxa}}\hfil}}%
+\else \ifnum\tmpcta<123%
+\typeout{ieee: Biography picture `#1' too wide.}%
+\frame{\vbox to 32mm{\vss\hbox{\resizebox{25mm}{!}{\usebox{\@tempboxa}}}\vss}}%
+\else%
+\resizebox{25mm}{32mm}{\usebox{\@tempboxa}}
+\fi\fi}
+
+\long\def\biographyLyX#1{\if@non\else\begin{biography} #1\end{biography}\fi}
+
+\if@non
+ \long\def\biography{}
+\else
+ \long\def\biography{\@ifnextchar [{\@biographyb}{\@biographya[{\unitlength
+ 1mm\hbox{\framebox(25,32){}}}]}}
+\fi
+
+\long\def\@biographyb[#1]{\@biographya[\getpic{#1}]}
+
+\long\def\@biographya[#1]#2{\bgroup
+\footnotesize\bigskip\bigskip\bigskip\parskip=0pt\par%
+\rule{0pt}{35mm}\vspace*{-35mm}\par% garantees correct page breaking
+\begin{main@bio}[{#1}]%
+\noindent{\bf #2}%
+}
+\def\endbiography{\if@non\else\end{main@bio}\egroup\fi}
+
+\long\def\main@bio[#1]{% #1 is the material for setting a graphic box
+\vskip\parskip\everypar{}
+\global\cumpar=0pt
+\global\cumtcl=0
+ \tcd=0
+ \rtside=0pt
+% \hpic=\linewidth
+ \twa={} \la={} \ra={} \ha={}
+\setbox\wbox=\hbox{(}
+\computeilg
+\pictoc={#1}
+\setbox\windowbox=\vbox{\hbox{#1}}
+\picwd=\wd\windowbox
+\hpic=\picwd
+\vpic=\ht\windowbox\advance\vpic\dp\windowbox
+\rtside=\linewidth\advance\rtside-\picwd
+\setbox\picbox=\vbox{\hsize=\hpic\vbox to\vpic{\box\windowbox}}% \vfill}}%
+
+\vpic=\ht\picbox\advance\vpic\dp\picbox
+\ifdim\rtside>0pt\advance\rtside-\rwindowsep\fi % "
+\global\br=\rtside
+\ifnum\picwd=0
+\ifdim\vpic>0pt\picwd=\hpic
+\else\vpic=\ht\picbox\advance\vpic\dp\picbox
+\fi
+\fi
+ \global\tcl=0 \lpic=0pt
+ \loop\global\advance\tcl by 1 \lpic=\tcl\baselineskip
+ \ifdim\lpic<\vpic\repeat
+ \vpic=\lpic
+ \global\cumtcl=\tcl
+%
+% Here we know exactly the number of indented lines and
+% are able to generate the tokens for the \parshape list
+%
+ \ifnum\br>0\ra={ 0pt \rtside}\fi
+ \ifnum\tcd>0\ha={ 0pt \linewidth}\fi
+ \ifnum\tcl<1\global\tcl=1\fi
+ \createparshapespec
+ \tcd=0 % restore the lintel
+ \global\tcdsav=0
+%
+% This is a very tricky part of the package. Some day there
+% will exist a detailed documentation.
+%
+\def\par{\\\indent}
+%
+% This is where we start to pick up the paragraph(s)
+%
+ \setbox\rawtext=\vbox\bgroup\unvbox\rawtext\unskip
+ \clubpenalty=0\widowpenalty=0
+ \ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+ \tolerance=1000
+ \parshape=\tcn \the\twa }
+%
+\def\endmain@bio{%
+ %\par
+ \global\tcd=\tcdsav
+ \egroup\vskip\parskip\parshape=0 % reset parshape; end \box\rawtext
+ \vbadness=10000
+ \splittopskip=0pt
+%
+% Now we build the boxes beside the window
+%
+\global\topheight=\tcl\baselineskip
+\ifnum\br>0\setbox\holder=\vsplit\rawtext to\topheight\fi
+\tcn=\tcl \nb=0
+\ifnum\br>0\nb=\tcn\fi
+%
+% text on the right side
+%
+\ifnum\nb>0
+ \loop\advance\nb -1
+ \setbox\bslice=\vsplit\holder to\baselineskip
+ \prune\bslice\rtside
+ \setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+ to\rtside{\box\bslice\hfil}}
+ \ifdim\ht\holder>0pt\repeat
+\fi
+%GLP add fix to make sure bio starts at top of picture
+\setbox\wbslice=\vbox to\topheight{\unvbox\wbslice\vfill\vss}
+%
+% fixing the dimensions of the window part
+%
+\topheight=\ht\wbslice
+%
+% ship out the window material to the main vertical list
+%
+\setbox\windowbox=\vbox{\hbox to\linewidth{%
+\vbox to\topheight{\hrule width\picwd height0pt depth0pt\vskip0pt%
+\vfill\unvbox\picbox%
+\ifnum\picwd>0\vfill\fi%
+\vss}\ifnum\br>0\hfill\vbox{\box\wbslice}\fi}}%
+%
+\unvbox\windowbox%
+\loop% lines below picture....
+ \setbox\bslice=\vsplit\rawtext to\baselineskip
+ \prune\bslice\linewidth
+ \setbox\wbslice=\vbox{\hbox to\linewidth{\box\bslice\hfil}}
+ \unvbox\wbslice
+ \ifdim\ht\rawtext>0pt
+\repeat
+%GLP
+%\ifnum\nb>0\topheight=\nb\baselineskip %\advance\topheight by\ilg
+%\vspace*{\topheight}
+%\fi
+}% FINITO
+%
+% What else do we need?
+%
+\def\prune#1#2{
+% take a \vbox containing a single \hbox,
+% \unvbox it, and cancel the \lastskip
+% put in a \hbox of width #2
+ \unvbox#1 \setbox#1=\lastbox % \box#1 now is an \hbox
+ \ifdim\ht#1=\parskip
+ \setbox#1=\hbox to#2{\vrule height\parskip depth0pt width0pt\hfill}
+ \else\ifdim\ht#1=0pt\relax
+ \else\setbox#1=\hbox to#2{\wstrut\unhbox#1\unskip}\fi\fi}
+%
+% Here the token \twa is generated.
+% It's not so difficult as it looks like.
+%
+\def\createparshapespec{%
+\global\tcn=0
+\ifnum\br>0\global\tcn=\tcl\fi
+\nb=0
+\ifnum\br>0\nb=\tcn\fi
+\global\advance\tcn by\tcd \global\advance\tcn by1
+\ifnum\tcd>0
+\loop\twa=\expandafter{\the\twa\the\ha}\advance\tcd -1
+\ifnum\tcd>0\repeat
+\fi
+\ifnum\nb>0
+\loop\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\nb>0\repeat
+\fi
+\global\twa=\expandafter{\the\twa 0pt \the\linewidth}}
+%
+\def\computeilg{% compute the interline glue
+ \tcl=0\ilg=0pt\strutilg=0pt
+ \loop\setbox\wbox=\hbox{\char\tcl}
+ \ifdim\ht\wbox>\ilg\ilg=\ht\wbox\fi
+ \ifdim\dp\wbox>\strutilg\strutilg=\dp\wbox\fi
+ \advance\tcl by 1
+ \ifnum\tcl<128\repeat
+ \ht\wbox=\ilg
+ \dp\wbox=\strutilg
+ \strutilg=\ht\wbox %\advance\strutilg by\ilg
+ \ifdim\strutilg>\baselineskip
+ \typeout{character with height greater baselineskip found in font}
+ \typeout{baselineskip changed to 1.5 of that height!}
+ \baselineskip=1.5\strutilg
+ \fi
+ \global\ilg=\baselineskip
+ \global\advance\ilg-\ht\wbox \global\advance\ilg-\dp\wbox
+ \strutilg=\ht\wbox \advance\strutilg by\ilg
+ \setbox\wstrutbox=\hbox{\vrule height\strutilg depth\dp\wbox width0pt}}
+
+
+% the following code from version.sty by Stephen Bellantoni 1990, loosely
+% based on "annotation.sty" by Tom Hofmann. Used to exclude "biography" from
+% anonymous mode.
+\begingroup
+\catcode`@=11\relax%
+\catcode`{=12\relax\catcode`}=12\relax%
+\catcode`(=1\relax \catcode`)=2\relax%
+\gdef\glpinclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ ()%
+ \expandafter\gdef\csname end#1\endcsname%
+ ()%
+)%
+\gdef\glpexclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ (\@bsphack\catcode`{=12\relax\catcode`}=12\relax\csname #1@NOTE\endcsname)%
+ \long\expandafter\gdef\csname #1@NOTE\endcsname ##1\end{#1}%
+ (\csname #1END@NOTE\endcsname)%
+ \expandafter\gdef\csname #1END@NOTE\endcsname%
+ (\@esphack\end(#1))%
+)%
+\endgroup
+
+%-------
+\def\@confplacedate{\typeout{ieee: Warning! No \noexpand\confplacedate set!}
+\bfseries `confplacedate' needs to be set. For example, to: Stanford, CA, USA,
+September 29--30, 1991}
+\def\confplacedate#1{\def\@confplacedate{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% End of ieee.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/sigproc.bib b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/sigproc.bib
new file mode 100644
index 000000000..b8fc175a9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/sigproc.bib
@@ -0,0 +1,2589 @@
+@BOOK{salas:calculus,
+ AUTHOR = "S.L. Salas and Einar Hille",
+ TITLE = "Calculus: One and Several Variable",
+ PUBLISHER = "John Wiley and Sons",
+ ADDRESS = "New York",
+ YEAR = "1978" }
+
+@inproceedings{804350,
+ author = {Thomas J. Schaefer},
+ title = {The complexity of satisfiability problems},
+ booktitle = {{STOC}'78},
+ year = {1978},
+ pages = {216--226},
+ location = {San Diego, California, United States},
+ doi = {http://doi.acm.org/10.1145/800133.804350},
+}
+
+Proceedings of the tenth annual ACM symposium on Theory of computing --
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings{smith94phase,
+ author = "Barbara Smith",
+ title = "The Phase Transition in Constraint Satisfaction Problems: {A} {CL}oser Look at the Mushy Region",
+ booktitle = {{ECAI}'94},
+ year = "1994"
+}
+
+@inproceedings{swdia,
+ author = "Chanseok Oh",
+ title = "{MiniSat HACK 999ED, MiniSat HACK 1430ED and SWDiA5BY}",
+ booktitle = "SAT Competition 2014 Booklet",
+ year = "201",
+}
+
+@inproceedings{lingeling,
+ author = "Armin Biere",
+ title = "Yet another Local Search Solver and Lingeling and Friends Entering the SAT Competition 2014",
+ booktitle = "SAT Competition 2014 Booklet",
+ year = "2014",
+}
+
+@inproceedings{cheeseman91where,
+ author = "Peter Cheeseman and Bob Kanefsky and William M. Taylor",
+ title = "Where the Really Hard Problems Are",
+ booktitle = "IJCAI-91",
+ pages = "331--337",
+ year = "1991",
+}
+Proceedings of the Twelfth International Joint Conference on Artificial Intelligence, Sidney, Australia
+
+@INPROCEEDINGS{Juels-2004-scn,
+ author = {Juels, Ari},
+ title = {Minimalist Cryptography for Low-Cost {RFID} Tags},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2004},
+ year = {2004},
+ editor = {Blundo, Carlo and Cimato, Stelvio},
+ volume = {3352},
+ series = {LNCS},
+ pages = {149--164},
+ month = {September},
+ publisher = {Springer-Verlag},
+ address = {Amalfi, Italia},
+}
+
+
+@inproceedings{achlioptas-threshold,
+ author = {Dimitris Achlioptas and Yuval Peres},
+ title = {The Threshold for Random k-{SAT} is 2\^\ k(ln 2 - O(k))},
+ booktitle = {{STOC}'03},
+ year = {2003},
+ isbn = {1-58113-674-9},
+ pages = {223--231},
+ location = {San Diego, CA, USA},
+ doi = {http://doi.acm.org/10.1145/780542.780577},
+}
+Proceedings of the thirty-fifth annual ACM symposium on Theory of computing --
+publisher = {ACM Press}
+address = {New York, NY, USA}
+
+@article{DPLL,
+ author = {Martin Davis and Hilary Putnam},
+ title = {A Computing Procedure for Quantification Theory},
+ journal = {J. ACM},
+ volume = {7},
+ number = {3},
+ year = {1960},
+ issn = {0004-5411},
+ pages = {201--215},
+ doi = {http://doi.acm.org/10.1145/321033.321034},
+}
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings {Minisat+,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Translating {P}seudo-{B}oolean constraints into {SAT}},
+ booktitle= {Journal on Satisfiability, Boolean Modeling and Computation},
+ year = {2006},
+ pages = {1-26},
+ volume = {2},
+}
+
+@inproceedings {EenS03MiniSat,
+ title = {An Extensible {SAT}-solver},
+ author = {Niklas E\'en and Niklas S\"{o}rensson},
+ booktitle = {SAT},
+ editor = {Enrico Giunchiglia and Armando Tacchella},
+ pages = {502--518},
+ publisher = {Springer},
+ series = {LNCS},
+ url = {http://dblp.uni-trier.de/db/conf/sat/sat2003.html#EenS03},
+ volume = {2919},
+ year = {2003},
+ ee = {http://www.cs.chalmers.se/Cs/Research/FormalMethods/MiniSat/cgi/MiniSat.ps.gz.cgi},
+ keywords = {2003 2004 SAT-solver ais-07w efficiency implementation },
+}
+
+@misc { toolbar,
+ author="S. Bouveret and F. Heras and S. de Givry and J. Larrosa and M. Sanchez and T. Schiex",
+ title="Toolbar: a state-of-the-art platform for wcsp",
+ url="http://www.inra.fr/mia/T/degivry/ToolBar.pdf",
+ year="2004"
+}
+
+@inproceedings{1267340,
+ author = {Kirschenbaum, Ilan and Wool, Avishai},
+ title = {How to build a low-cost, extended-range {RFID} skimmer},
+ booktitle = {USENIX-SS'06: Proceedings of the 15th conference on {USENIX} Security Symposium},
+ year = {2006},
+ location = {Vancouver, B.C., Canada},
+ publisher = {{USENIX} Association},
+ address = {Berkeley, CA, USA},
+}
+
+@misc{Benetton-boycott,
+ author = {{CASPIAN - Consumers Against Supermarket Privacy Invasion and Numbering}},
+ howpublished={Press release},
+ note= {\url{http://www.boycottbenetton.com}},
+ title = {Boycott {B}enetton},
+ year = {2003},
+ month = {March},
+}
+
+@article{ improved-deterministic,
+ author="Michael H. Schulz and Elisabeth Auth",
+ title="Improved Deterministic Test Pattern Generation with Applications to Redundancy Identification",
+ year="1989",
+ month="July",
+ journal="IEEE Transactions on computer-aided design",
+ volume="8",
+ number="7",
+ pages={811--816},
+ issn="0278-0070"
+}
+publisher = " IEEE Circuits and Systems Society",
+address="Piscataway, NJ 08854, USA",
+
+@inproceedings{244560,
+ author = {Jo\&\#227;o P. Marques Silva and Karem A. Sakallah},
+ title = {{GRASP}-a new search algorithm for satisfiability},
+ booktitle = {ICCAD'96},
+ year = {1996},
+ isbn = {0-8186-7597-7},
+ pages = {220--227},
+ location = {San Jose, California, United States},
+ publisher = {IEEE Computer Society},
+}
+Proceedings of the 1996 IEEE/ACM international conference on Computer-aided design ---
+address = {Washington, DC, USA},
+
+ @inproceedings{ chai03fast,
+ author = "D. Chai and A. Kuehlmann",
+ title = "A fast pseudo-boolean constraint solver",
+ pages = {305--317},
+ booktitle = "IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 2003",
+ year = {2003},
+ month =" mar",
+ volume = "24",
+ issue = "3",
+ issn = "0278-0070"
+}
+publisher = "IEEE Circuits and Systems Society",
+
+@TechReport{EPC-standard,
+ author = "EPCglobal",
+ url="http://www.epcglobalinc.org/standards/specs/13.56_MHz_ISM_Band_Class_1_RFID_Tag_Interface_Specification.pdf",
+ title="13.56 {MHz} {ISM} Band Class 1 Radio Frequency Identification Tag Interface Specification (2003)",
+ institution = "Auto-ID cetner, MIT",
+ year ="2003",
+ month = "February",
+ version = "1.0.0"
+}
+address = "77 massachusetts avenue, bldg 3-449, cambridge, ma 02139-4307, USA",
+
+@INPROCEEDINGS{LuLHHN-2007-percom,
+ author = {Lu, Li and Liu, Yunhao and Hu, Lei and Han, Jinsong and Ni, Lionel},
+ title = {A Dynamic Key-Updating Private Authentication Protocol for {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {13--22},
+ month = {March},
+ organization = {IEEE}
+}
+International Conference on Pervasive Computing and Communications
+publisher = {IEEE Computer Society Press}
+address = {New York, USA},
+
+@INPROCEEDINGS{Ohkubo04Efficient,
+ author = {Ohkubo, Miyako and Suzuki, Koutarou and Kinoshita, Shingo},
+ title = {Efficient Hash-Chain Based {RFID} Privacy Protection Scheme},
+ booktitle = {International Conference on Ubiquitous Computing --- Ubicomp 2004, Workshop Privacy: Current Status and Future Directions},
+ month = {September},
+ year = {2004},
+ address = {Nottingham, England},
+}
+
+@INPROCEEDINGS{MolnarSW-2005-sac,
+ author = {Molnar, David and Soppera, Andrea and Wagner, David},
+ title = {A Scalable, Delegatable Pseudonym Protocol Enabling Ownership Transfer of {RFID} Tags},
+ booktitle = {Selected Areas in Cryptography --- SAC 2005},
+ editor = {Preneel, Bart and Tavares, Stafford},
+ volume = {3897},
+ series = {LNCS},
+ pages = {276--290},
+ month = {August},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+ year = {2005},
+ address = {Kingston, Canada},
+}
+
+@inproceedings{DBLP:conf/otm/FeldhoferR06,
+ author = {Martin Feldhofer and Christian Rechberger},
+ title = {A Case Against Currently Used Hash Functions in {RFID} Protocols},
+ booktitle = {OTM Workshops (1)},
+ year = {2006},
+ pages = {372-381},
+ ee = {http://dx.doi.org/10.1007/11915034_61},
+ crossref = {DBLP:conf/otm/2006-w1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/otm/2006-w1,
+ editor = {Robert Meersman and Zahir Tari and Pilar Herrero},
+ title = {On the Move to Meaningful Internet Systems 2006: OTM 2006 Workshops, OTM Confederated International Workshops and Posters, AWeSOMe, CAMS, COMINF, IS, KSinBIT, MIOS-CIAO, MONET, OnToContent, ORM, PerSys, OTM Academy Doctoral Consortium, RDDS, SWWS, and SeBGIS 2006, Montpellier, France, October 29 - November 3, 2006. Proceedings, Part I},
+ booktitle = {OTM Workshops (1)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4277},
+ year = {2006},
+ isbn = {3-540-48269-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@INPROCEEDINGS{VajdaB-2003-ubicom,
+ author = {Vajda, Istv\'an and Butty\'an, Levente},
+ title = {Lightweight Authentication Protocols for Low-Cost {RFID} Tags},
+ booktitle = {Ubicomp 2003 Second Workshop on Security in Ubiquitous Computing},
+ month = {October},
+ year = {2003}
+}
+address = {Seattle, WA, USA},
+
+@INPROCEEDINGS{LiW-2007-sec,
+ author = {Li, Tieyan and Wang, Guilin},
+ title = {Security Analysis of Two Ultra-Lightweight {RFID} Authentication Protocols},
+ booktitle = {IFIP SEC 2007},
+ month = {May},
+ organization = {IFIP},
+}
+year = {2007},
+address = {Sandton, Gauteng, South Africa},
+
+@MISC{BatinaGKMTV-2006-eprint,
+ author = {Batina, Lejla and Guajardo, Jorge and Kerins, Tim and Mentens, Nele and Tuyls, Pim and Verbauwhede, Ingrid},
+ title = {An Elliptic Curve Processor Suitable For {RFID}-Tags},
+ howpublished = {Cryptology ePrint Archive, Report 2006/227},
+ year = {2006},
+ organization = {IACR},
+}
+
+@inproceedings {AES-grain-sand,
+ title = {{AES} implementation on a grain of sand},
+ issue = "1",
+ ISSN="1747-0722",
+ pages = {13--20},
+ author="Feldhofer, M. and Wolkerstorfer, J. and Rijmen, V.",
+ year = "2005",
+ voulme="152",
+ booktitle = "Information Security",
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press},
+
+@MISC{Juels-2005-manuscript-2,
+ author = {Juels, Ari},
+ title = {{RFID} Security and Privacy: A research Survey},
+ howpublished = {Manuscript},
+ year = {2005},
+ month = {September},
+ organization = {RSA Laboratories},
+}
+
+@INPROCEEDINGS{JuelsW-2007-percom,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {{Defining Strong Privacy for RFID}},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2007},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {342--347},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Vaudenay-2007-asiacrypt,
+ author = {Vaudenay, Serge},
+ title = {On Privacy Models for {RFID}},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2007},
+ year = {2007},
+ editor = {},
+ volume = {4833},
+ series = {LNCS},
+ pages = {68--87},
+ address = {Kuching, Malaysia},
+ month = {December},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{BolotnyyR-2007-percom,
+ author = {Bolotnyy, Leonid and Robins, Gabriel},
+ title = {Physically Unclonable Function-Based Security and Privacy in {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {211--220},
+ month = {March},
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press}
+International Conference on Pervasive Computing and Communications --
+address = {New York, USA},
+
+@INPROCEEDINGS{JuelsRS-2003-ccs,
+ author = {Juels, Ari and Rivest, Ronald and Szydlo, Michael},
+ title = {The Blocker Tag: Selective Blocking of {RFID} Tags for Consumer Privacy},
+ booktitle = {ACM CCS 2003},
+ year = {2003},
+ editor = {Atluri, Vijay},
+ pages = {103--111},
+ month = {October},
+ publisher = "ACM Press"
+}
+address = {Washington, DC, USA},
+Conference on Computer and Communications Security
+organization = "ACM",
+
+@INPROCEEDINGS{JuelsW-2005-crypto,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {Authenticating Pervasive Devices with Human Protocols},
+ booktitle = {Advances in Cryptology --- CRYPTO'05},
+ year = {2005},
+ editor = {Shoup, Victor},
+ volume = {3126},
+ series = {LNCS},
+ pages = {293--308},
+ month = {August},
+ organization = {IACR},
+ address = {Santa Barbara, California, USA},
+ publisher = {Springer-Verlag},
+ series = {LNCS},
+}
+
+@inproceedings{ zhang01efficient,
+ author = "Lintao Zhang and Conor F. Madigan and Matthew W. Moskewicz and Sharad Malik",
+ title = "Efficient Conflict Driven Learning in Boolean Satisfiability Solver",
+ booktitle = "{ICCAD}",
+ pages = "279-285",
+ year = "2001",
+ url = "citeseer.ist.psu.edu/article/zhang01efficient.html" }
+
+
+@INPROCEEDINGS{ButtyanHV-2006-pet,
+ author = {Butty\'an, Levente and Holczer, Tam\'as and Vajda, Istv\'an},
+ title = {Optimal Key-Trees for Tree-Based Private Authentication},
+ booktitle = {Workshop on Privacy Enhancing Technologies --- PET 2006},
+ pages = {332-350},
+ month = {June},
+ year = {2007},
+ address = {Cambridge, United Kingdom},
+}
+
+
+@INPROCEEDINGS{Castelluccia07Secret,
+ author = {Castelluccia, Claude and Soos, Mate},
+ title = {Secret Shuffling: A Novel Approach to {RFID} Private Identification},
+ booktitle = {{RFIDSec}'07},
+ pages = {169-180},
+ year = {2007},
+ month = {July}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@INPROCEEDINGS{breaking-lmap,
+ author = {Mihaly B\'arasz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel Nagy},
+ title = {Breaking {LMAP}},
+ pages = {69-78},
+ month = {July},
+ year = {2007},
+ booktitle = {Conference on RFID Security --- {RFIDSec}'07},
+ address = {Malaga, Spain},
+}
+
+@INPROCEEDINGS{Initial-SRAM,
+ author = {Daniel Holcom and Wayne Burleson and Kevin Fu.},
+ title = {Initial {SRAM} state as a Fingerprint and Source of True Random Numbers for {RFID} Tags},
+ booktitle = {{RFIDSec}'07},
+ pages = {29-40},
+ month = {July},
+ year = {2007}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@inproceedings{HBattack,
+ author = {Gilbert, Henri and Robshaw, Matt and Sibert, Herve},
+ title = {An Active Attack Against {HB}$^+$ - A Provably Secure Lightweight Authentication Protocol},
+ booktitle = {IEE Electronic Letters 41, 21},
+ year = {2005},
+ pages = {1169--1170}
+}
+
+@INPROCEEDINGS{KatzS-2006-eurocrypt,
+ author = {Katz, Jonathan and Sun Shin, Ji},
+ title = {Parallel and Concurrent Security of the {HB} and {HB}$^{+}$ Protocols},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '06},
+ organization = {IACR},
+ year = {2006}
+}
+Advances in Cryptology
+publisher = {Springer-Verlag},
+
+@MISC{KatzS-2006-eprint,
+ author = {Katz, Jonathan and Smith, Adam},
+ title = {Analyzing the {HB} and {HB}+ Protocols in the ``Large Error'' Case},
+ howpublished = {Cryptology ePrint Archive, Report 2006/326},
+ organization = {IACR},
+}
+
+@inproceedings{1229319,
+ author = {Tri Van Le and Mike Burmester and Breno de Medeiros},
+ title = {Universally composable and forward-secure {RFID} authentication and authenticated key exchange},
+ booktitle = {Proceedings of the 2nd ACM symposium on Information, Computer and Communications Security --- {ASIACCS}'07},
+ year = {2007},
+ isbn = {1-59593-574-6},
+ pages = {242--252},
+ location = {Singapore},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ doi = {http://doi.acm.org/10.1145/1229285.1229319},
+}
+
+
+
+@INPROCEEDINGS{PUF-based-RNG,
+ author = {Charles W. O'Donnell and G. Edward Suh and Srinivas Devadas},
+ title = {{PUF}-Based Random Number Generation},
+ booktitle = {MIT CSAIL CSG Technical Memo 481},
+ url = {http://csg.csail.mit.edu/pubs/memos/Memo-481/Memo-481.pdf},
+ year = {2004},
+ month = {November}
+}
+
+@book{Ipatov05Spread,
+ author = {Valeri P. Ipatov},
+ year = {2005},
+ month = {May},
+ title = {Spread Spectrum and {CDMA}: {P}rinciples and Applications},
+ publisher = {John Wiley \& Sons, Ltd.},
+ ISBN = {978-0470091784},
+}
+
+@article{DBLP:journals/ijwmc/HellJM07,
+ author = {Martin Hell and
+ Thomas Johansson and
+ Willi Meier},
+ title = {Grain: a stream cipher for constrained environments},
+ journal = {IJWMC},
+ volume = {2},
+ number = {1},
+ year = {2007},
+ pages = {86-93},
+ ee = {http://dx.doi.org/10.1504/IJWMC.2007.013798},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{applied-crypto,
+ year= {1996},
+ ISBN ={0-8493-8523-7},
+ author={Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone},
+ title ={Handbook of applied cryptography},
+ publisher={CRC Press},
+ address={Boca Raton, Florida},
+}
+url={http://cacr.math.uwaterloo.ca/hac}
+
+@inproceedings{DiPietro07Information,
+ author={Roberto Di Pietro and Refik Molva},
+ title={Information confinement, privacy, and security in {RFID} systems},
+ month={September},
+ booktitle={Proceedings of the 12th European Symposium On Research In Computer Security},
+ year={2007},
+ pages={187-202},
+}
+
+@inproceedings{PerisHER-2006-rfidsec,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{LMAP}: A Real Lightweight Mutual Authentication Protocol for Low-cost {RFID} tags},
+ booktitle = {Proceedings of {RFIDSec}'06},
+ year = {2006},
+ month = {July},
+ address = {Graz, Austria},
+ organization = {Ecrypt},
+}
+
+@INPROCEEDINGS{BringerCD-2006-secperu,
+ author = {Bringer, Julien and Chabanne, Herv\'e and Dottax Emmanuelle},
+ title = {{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+ booktitle = {{IEEE} SecPerU 2006},
+ year = {2006},
+ month = {June},
+ organization = {IEEE},
+}
+International Conference on Pervasive Services, Workshop on Security, Privacy and Trust in Pervasive and Ubiquitous Computing
+address = {Lyon, France},
+publisher = {IEEE Computer Society Press},
+
+@INPROCEEDINGS{PerisHER-2006-uic,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{M2AP}: A Minimalist Mutual-Authentication Protocol for Low-cost {RFID} Tags},
+ booktitle = {International Conference on Ubiquitous Intelligence and Computing --- {UIC}’06},
+ year = {2006},
+ editor = {},
+ volume = {4159},
+ pages = {912--923},
+ month = {September},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+}
+
+
+@INPROCEEDINGS{M2AP-break,
+ author={Mih\'aly B\'ar\'asz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel A. Nagy},
+ title={Passive Attack Against the {M2AP} Mutual Authentication Protocol for {RFID} Tags},
+ year = {2007},
+ month= {September},
+ date = {24-25},
+ booktitle={{RFID} 2007 --- The First International {EURASIP} Workshop on {RFID} Technology},
+ country = {Austria},
+ city={Vienna}
+}
+
+@INPROCEEDINGS{HBppbreak,
+ author= {Henri Gilbert and Matthew J.B. Robshaw and Yannick Seurin},
+ title={Good Variants of {HB}+ are Hard to Find},
+ year={2008},
+ month={January},
+ booktitle={Financial Cryptography},
+ publisher={Springer},
+ country={Mexico}
+}
+
+@inproceedings{MAGMA,
+ author = {Wieb Bosma and John Cannon and Graham Matthews},
+ title = {Programming with algebraic structures: design of the {MAGMA} language},
+ booktitle = {Proceedings of the international symposium on Symbolic and algebraic computation --- ISSAC '94},
+ year = {1994},
+ isbn = {0-89791-638-7},
+ pages = {52--57},
+ location = {Oxford, United Kingdom},
+ doi = {http://doi.acm.org/10.1145/190347.190362},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+@inproceedings{Singular,
+ author = {Gert-Martin Greuel and Gerhard Pfister and Hans Sch\"{o}nemann},
+ title = {{SINGULAR} --- A computer algebra system for polynomial computations},
+ booktitle = {Symbolic computation and automated reasoning},
+ year = {2001},
+ isbn = {1-56881-145-4},
+ pages = {227--233},
+ publisher = {A. K. Peters, Ltd.},
+ address = {Natick, MA, USA},
+}
+
+@misc{SAGE,
+ author = {{The SAGE Group}},
+ year = {2008},
+ title = {{SAGE} Mathematics Software},
+ note = {\url{http://www.sagemath.org}},
+}
+
+@misc{new-sparse-technique,
+ author={H{\aa}vard Raddum and Igor Semae},
+ title={New Technique for Solving Sparse Equation Systems},
+ month={January},
+ year={2006},
+ note={\url{eprint.iacr.org/2006/475/}},
+}
+
+@TechReport{algebraic-DES,
+ author={Nicolas T. Courtois and Gregory V. Bard},
+ title={Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ year={2006},
+ institution = {IACR E-print},
+ number = {2006/402},
+ month={November},
+ booktitle={IACR E-print, \url{http://eprint.iacr.org/2006/402}},
+}
+
+
+
+@inproceedings{early-DES-algebraic,
+ author={Chaum, David and Evertse, Jan-Hendrik},
+ title={Cryptanalysis of {DES} with a Reduced Number of Rounds},
+ booktitle = {Advances in Cryptology --- {CRYPTO}'85},
+ year = {1986},
+ pages = {192--211},
+ publisher = {Springer-Verlag}
+}
+
+@InProceedings{Bofilletal2008CAV,
+ author = {M. Bofill and R. Nieuwenhuis and A. Oliveras and E. Rodr\'\i guez-Carbonell and A. Rubio},
+ title = {The {B}arcelogic {SMT} Solver},
+ pages = {294-298},
+ booktitle = {{CAV}'08},
+ year = {2008},
+ series = {LNCS},
+ volume = {5123},
+ publisher = {Springer},
+ editor = {A. Gupta and S. Malik},
+}
+
+@techreport{RSAT,
+ author = {Knot Pipatsrisawat and Adnan Darwiche},
+ institution = {Automated Reasoning Group, Computer Science},
+ title = {{RS}at 2.0: {SAT} Solver Description},
+ year = {2007},
+}
+
+@inproceedings{DBLP:conf/fse/CourtoisBW08,
+ author = {Nicolas Courtois and Gregory V. Bard and David Wagner},
+ title = {Algebraic and Slide Attacks on {K}ee{L}oq},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {97-115},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_6},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{cryptoeprint:2008:166,
+ author = {Nicolas T. Courtois and Karsten Nohl and Sean O'Neil},
+ title = {Algebraic Attacks on the {C}rypto-1 Stream Cipher in {Mifare} {C}lassic and {O}yster Cards},
+ number = {2008/166},
+ institution = {Cryptology ePrint Archive},
+ year = {2008},
+}
+howpublished = {Cryptology ePrint Archive, Report 2008/166},
+note = {\url{http://eprint.iacr.org/}},
+
+@INPROCEEDINGS{Biere99symbolicmodel,
+ author = {Armin Biere and A. Cimatti and E. M. Clarke and M. Fujita and Y. Zhu},
+ title = {Symbolic Model Checking Using {SAT} Procedures instead of {BDDs}},
+ booktitle = {Proc. of Design Automation Conference ({DAC}'99)},
+ year = {1999},
+ pages = {317--320}
+}
+
+@INPROCEEDINGS{temporalinduction,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Temporal Induction by Incremental {SAT} Solving},
+ booktitle={Proc. of First Intrenational Workshop on Bounded Model Checking},
+ year={2003},
+ volume={89},
+ issue={4},
+ series={ENTCS},
+ publisher={Elsevier}
+}
+
+@inproceedings{ARMS02,
+ author = {Fadi A. Aloul and Arathi Ramani and Igor Markov and Karem Sakallah},
+ title = {Generic {ILP} versus Specialized 0-1 {ILP}: an Update},
+ booktitle = {Proc. ACM/IEEE Intl. Conf. Comp.-Aided Design},
+ pages = {450 - 457},
+ month = {November},
+ year = {2002},
+ URL = {http://www.gigascale.org/pubs/190.html}
+}
+
+@inproceedings{knowledge-compiling,
+ author={Adnan Dawiche},
+ title={New advances in compiling {CNF} to decomposable negation normal form},
+ booktitle={Proc. of European Conference on Artificial Intelligence},
+ year={2004},
+ pages={328 - 332},
+}
+
+@InProceedings{S-Match,
+ author = {Fausto Giunchiglia and Pavel Shvaiko and Mikalai Yatskevich},
+ title = {S-{M}atch: an algorithm and an implementation of semantic matching},
+ booktitle = {Semantic Interoperability and Integration},
+ year = {2005},
+ number = {04391},
+ series = {Dagstuhl Seminar Proceedings},
+ ISSN = {1862-4405},
+ publisher = {IBFI},
+ note = {\url{http://drops.dagstuhl.de/opus/volltexte/2005/37}},
+ editor = {Y. Kalfoglou and M. Schorlemmer and A. Sheth and S. Staab and M. Uschold},
+}
+publisher = {Internationales Begegnungs- und Forschungszentrum fuer Informatik (IBFI)},
+
+
+
+@techreport{bard-thesis,
+ author = {Gregory V. Bard},
+ title = {Algorithms for the Solution of Polynomial and Linear Systems of Equations over Finite Fields, with an Application to the Cryptanalysis of {K}ee{L}oq},
+ institution={University of Maryland Dissertation},
+ month={April},
+ year={2008},
+ note = {Ph.D. Thesis},
+}
+
+@inproceedings{Toyocrypt-nicolas-attack,
+ author={Nicolas T. Courtois},
+ title={Higher Order Correlation Attacks, {XL} algorithm and Cryptanalysis of {T}oyocrypt ({A}n updated version)},
+ booktitle={ICISC 2002},
+ series={LNCS},
+ volume={2587},
+ publisher={Springer},
+ year={2002},
+}
+
+@inproceedings{General-LFSR-attacks,
+ author={Nicolas T. Courtois and Willi Meier},
+ title={Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- EUROCRYPT '03},
+ series={LNCS},
+ volume={2656},
+ pages={345–359},
+ publisher={Springer},
+ address = {Warsaw, Poland}
+}
+
+@inproceedings{Canniere06Trivium,
+ author = {Christophe De Canni{\`e}re},
+ title = {Trivium: A Stream Cipher Construction Inspired by Block Cipher Design Principles},
+ booktitle = {ISC},
+ year = {2006},
+ pages = {171-186},
+ ee = {http://dx.doi.org/10.1007/11836810_13},
+ crossref = {DBLP:conf/isw/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/isw/2006,
+ editor = {Sokratis K. Katsikas and et al},
+ title = {Information Security, 9th International Conference, ISC 2006, Samos Island, Greece, August 30 - September 2, 2006, Proceedings},
+ booktitle = {ISC},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4176},
+ year = {2006},
+ isbn = {3-540-38341-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Javier Lopez and
+Michael Backes and
+Stefanos Gritzalis and
+Bart Preneel
+
+@inproceedings{BiviumWithSATsolvers,
+ author = {Tobias Eibach and Enrico Pilz and Gunnar V{\"o}lkel},
+ title = {Attacking {B}ivium Using {SAT} Solvers},
+ booktitle = {SAT},
+ year = {2008},
+ pages = {63-76},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79719-7_7},
+ crossref = {DBLP:conf/sat/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2008,
+ editor = {Hans Kleine B{\"u}ning and Xishun Zhao},
+ title = {Theory and Applications of Satisfiability Testing - SAT 2008, 11th International Conference, SAT 2008, Guangzhou, China, May 12-15, 2008. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4996},
+ year = {2008},
+ isbn = {978-3-540-79718-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{Bivium,
+ author={Havard Raddum},
+ title={Cryptanalytic results on {T}rivium},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2006},
+ number={2006/039},
+ note = {\url{www.ecrypt.eu.org/stream/papersdir/2006/039.ps}},
+}
+
+@misc{using-equation-solvers,
+ author = {Havard Raddum and Igor Semaev},
+ title = {New Technique for Solving Sparse Equation Systems},
+ howpublished = {Cryptology ePrint Archive, Report 2006/475},
+ year = {2006},
+ note = {\url{http://eprint.iacr.org/}},
+}
+
+
+@TechReport{BiviumWithMiniSat,
+ author={Cameron McDonald and Chris Charnes and Josef Pieprzyk},
+ title={Attacking {B}ivium with {M}ini{S}at},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2007},
+ number={2007/040}
+}
+
+@inproceedings{FaugereF5,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases without reduction to zero ({F}5)},
+ booktitle = {ISSAC '02},
+ year = {2002},
+ isbn = {1-58113-484-3},
+ pages = {75--83},
+ location = {Lille, France},
+ doi = {http://doi.acm.org/10.1145/780506.780516},
+ publisher = {ACM},
+ }
+ISSAC '02: Proceedings of the 2002 international symposium on Symbolic and algebraic computation
+address = {New York, NY, USA},
+
+
+@article{FaugereF4,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases ({F}4)},
+ journal = {Journal of Pure and Applied Algebra},
+ year = {1999},
+ month = {June},
+ pages = {61--88},
+ volume = {1},
+ number = {139},
+}
+
+@inproceedings{DismantlingMifare,
+ author = {Flavio D. Garcia and et al.},
+ title = {Dismantling {MIFARE} {C}lassic},
+ booktitle = {ESORICS},
+ year = {2008},
+ pages = {97-114},
+ ee = {http://dx.doi.org/10.1007/978-3-540-88313-5_7},
+ crossref = {DBLP:conf/esorics/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Gerhard de Koning Gans and
+Ruben Muijrers and
+Peter van Rossum and
+Roel Verdult and
+Ronny Wichers Schreur and
+Bart Jacobs
+
+@proceedings{DBLP:conf/esorics/2008,
+ editor = {Sushil Jajodia and Javier L{\'o}pez},
+ title = {Computer Security - ESORICS 2008, 13th European Symposium on Research in Computer Security, M{\'a}laga, Spain, October 6-8, 2008. Proceedings},
+ booktitle = {ESORICS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5283},
+ year = {2008},
+ isbn = {978-3-540-88312-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Karsten-webpage-HiTag2,
+ author={Karsten Nohl},
+ title={Description of {H}i{T}ag2},
+ howpublished={Press release},
+ note= {\url{http://cryptolib.com/ciphers/hitag2/}},
+ month={March},
+ day = {12},
+ year={2008},
+}
+
+@InProceedings{Ouafi08Privacy,
+ address = {Berlin},
+ affiliation = {EPFL},
+ author = {Ouafi, Khaled and Phan, Raphael C.-W.},
+ booktitle = {Information {S}ecurity {P}ractice and {E}xperience, 4th {I}nternational {C}onference, {ISPEC} 2008},
+ location = {Sydney, Australia},
+ oai-id = {oai:infoscience.epfl.ch:126418},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {263--277},
+ publisher = {Springer},
+ review = {REVIEWED},
+ series = {LNCS},
+ status = {PUBLISHED},
+ title = {Privacy of {R}ecent {RFID} {A}uthentication {P}rotocols},
+ unit = {LASEC},
+ year = {2008},
+ keywords = {RFID; authentication protocols, ; privacy; untraceability; provably secure},
+ details = {http://infoscience.epfl.ch/record/126418},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=126418&mode=best},
+}
+
+@INPROCEEDINGS{Ohkubo04Cryptographic,
+ author = {Miyako Ohkubo Koutarou and Koutarou Suzuki and Shingo Kinoshita},
+ title = {Cryptographic Approach to "Privacy-Friendly" Tags},
+ booktitle = {RFID Privacy Workshop},
+ year = {2003},
+ address = {MIT, Massachusetts, USA},
+ month = {November},
+}
+
+@article{Lamport81Password,
+ author = {Lamport,, Leslie},
+ title = {Password authentication with insecure communication},
+ journal = {Commun. ACM},
+ volume = {24},
+ number = {11},
+ year = {1981},
+ issn = {0001-0782},
+ pages = {770--772},
+ doi = {http://doi.acm.org/10.1145/358790.358797},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+@InProceedings{OSK_Avoine,
+ affiliation = {EPFL},
+ author = {Avoine, Gildas and Oechslin, Philippe},
+ booktitle = {The 2nd {IEEE} {I}nternational {W}orkshop on {P}ervasive {C}omputing and {C}ommunication {S}ecurity - {P}er{S}ec 2005},
+ details = {http://infoscience.epfl.ch/record/99461},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=99461&mode=best},
+ keywords = {NCCR-MICS; NCCR-MICS/CL3},
+ location = {Kauai island, Hawaii, USA},
+ oai-id = {oai:infoscience.epfl.ch:99461},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {110--114},
+ review = {REVIEWED},
+ status = {PUBLISHED},
+ title = {A {S}calable and {P}rovably {S}ecure {H}ash-{B}ased {RFID} {P}rotocol},
+ unit = {LASEC},
+ year = 2005
+}
+
+@inproceedings{Trade-off-Hellman,
+ author = {Hellman, Martin E.},
+ title = {A cryptanalytic time-memory trade off},
+ booktitle = {{IEEE} Transactions on Information Theory},
+ volume = {IT-26/4},
+ pages = {401--406},
+ year = {1980},
+}
+
+@inproceedings{Faster-crypto-time-memory,
+ author = {Oechslin, Philippe },
+ booktitle = {Advances in Cryptology --- CRYPTO 2003},
+ series = {LNCS},
+ volume = {2729},
+ publisher = {Springer},
+ pages = {617--630},
+ posted-at = {2008-07-07 15:11:06},
+ priority = {2},
+ title = {Making a Faster Cryptanalytic Time-Memory Trade-Off},
+ url = {http://www.springerlink.com/content/u9gxwd29p2tnx3wl},
+ year = {2003}
+}
+
+@inproceedings{Molnar04Keytrees,
+ address = {New York, NY, USA},
+ author = {Molnar, David and Wagner, David },
+ booktitle = {CCS '04: Proceedings of the 11th ACM conference on Computer and communications security},
+ citeulike-article-id = {202290},
+ doi = {10.1145/1030083.1030112},
+ isbn = {1581139616},
+ keywords = {libraries, privacy},
+ pages = {210--219},
+ posted-at = {2007-12-25 21:42:23},
+ priority = {5},
+ publisher = {ACM Press},
+ title = {Privacy and security in library {RFID}: issues, practices, and architectures},
+ url = {http://dx.doi.org/10.1145/1030083.1030112},
+ year = {2004}
+}
+
+@INPROCEEDINGS{NohlE-2008-sec,
+ author = {Nohl, Karsten and Evans, David},
+ title = {{Hiding in Groups: On the Expressiveness of Privacy Distributions}},
+ booktitle = {Proceedings of The Ifip Tc 11 23rd International Information Security Conference --- SEC 2008},
+ year = {2008},
+ editor = {},
+ volume = {278},
+ series = {LNCS},
+ pages = {1--15},
+ address = {Milan, Italia},
+ month = {September},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GIS), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/fse/Shamir08,
+ author = {Adi Shamir},
+ title = {{SQUASH} --- A New {MAC} with Provable Security Properties for Highly Constrained Devices Such as {RFID} Tags},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {144-157},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_9},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2008,
+ editor = {Kaisa Nyberg},
+ title = {Fast Software Encryption, 15th International Workshop, {FSE} 2008, Lausanne, Switzerland, February 10-13, 2008, Revised Selected Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5086},
+ year = {2008},
+ isbn = {978-3-540-71038-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Oren2008WIPRPublic,
+author = {Yossef Oren and Martin Feldhofer},
+title = {{WIPR} --- a Public Key Implementation on Two Grains of Sand},
+booktitle = {Workshop on RFID Security 2008},
+year = {2008},
+editor = {Sandra Dominikus},
+pages = {15 - 27},
+}
+
+@incollection{drat,
+year={2014},
+isbn={978-3-319-09283-6},
+booktitle={Theory and Applications of Satisfiability Testing – SAT 2014},
+volume={8561},
+series={Lecture Notes in Computer Science},
+editor={Sinz, Carsten and Egly, Uwe},
+doi={10.1007/978-3-319-09284-3_31},
+title={DRAT-trim: Efficient Checking and Trimming Using Expressive Clausal Proofs},
+url={http://dx.doi.org/10.1007/978-3-319-09284-3_31},
+publisher={Springer International Publishing},
+author={Wetzler, Nathan and Heule, MarijnJ.H. and Hunt, WarrenA., Jr.},
+pages={422-429},
+language={English}
+}
+
+
+@inproceedings{DBLP:conf/ctrsa/McLooneR07,
+ author = {M{\'a}ire McLoone and Matthew J. B. Robshaw},
+ title = {Public Key Cryptography and {RFID} Tags},
+ booktitle = {CT-RSA},
+ year = {2007},
+ pages = {372-384},
+ ee = {http://dx.doi.org/10.1007/11967668_24},
+ crossref = {DBLP:conf/ctrsa/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ctrsa/2007,
+ editor = {Masayuki Abe},
+ title = {Topics in Cryptology - CT-RSA 2007, The Cryptographers' Track at the RSA Conference 2007, San Francisco, CA, USA, February 5-9, 2007, Proceedings},
+ booktitle = {CT-RSA},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4377},
+ year = {2006},
+ isbn = {3-540-69327-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+
+@proceedings{DBLP:conf/eurocrypt/91,
+ editor = {Donald W. Davies},
+ title = {Advances in Cryptology --- EUROCRYPT '91, Workshop on the Theory and Application of of Cryptographic Techniques, Brighton, UK, April 8-11, 1991, Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {547},
+ year = {1991},
+ isbn = {3-540-54620-0},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/Girault91,
+ author = {Marc Girault},
+ title = {Self-Certified Public Keys},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ year = {1991},
+ pages = {490-497},
+ ee = {http://link.springer.de/link/service/series/0558/bibs/0547/05470490.htm},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cardis/Girault00,
+ author = {Marc Girault},
+ title = {Low-Size Coupons for Low-Cost {IC} Cards},
+ booktitle = {CARDIS},
+ year = {2000},
+ pages = {39-50},
+ crossref = {DBLP:conf/cardis/2000},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2000,
+ editor = {Josep Domingo-Ferrer and David Chan and Anthony Watson},
+ title = {Smart Card Research and Advanced Applications, Proceedings of the Fourth Working Conference on Smart Card Research and Advanced Applications, CARDIS 2000, September 20-22, 2000, Bristol, UK},
+ booktitle = {CARDIS},
+ publisher = {Kluwer},
+ series = {IFIP Conference Proceedings},
+ volume = {180},
+ year = {2000},
+ isbn = {0-7923-7953-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Secure-human-ID,
+ author = {Hopper,, Nicholas J. and Blum,, Manuel},
+ title = {Secure Human Identification Protocols},
+ booktitle = {ASIACRYPT '01: Proceedings of the 7th International Conference on the Theory and Application of Cryptology and Information Security},
+ year = {2001},
+ isbn = {3-540-42987-5},
+ pages = {52--66},
+ publisher = {Springer-Verlag},
+ address = {London, UK},
+}
+
+@ARTICLE{Inherent-intracability,
+title={On the inherent intractability of certain coding problems (Corresp.)},
+author={ Berlekamp, E. and McEliece, R. and van Tilborg, H.},
+journal={Information Theory, IEEE Transactions on},
+year={1978},
+month={May},
+volume={24},
+number={3},
+pages={ 384-386},
+keywords={null Decoding, Linear codes},
+doi={},
+ISSN={0018-9448},
+}
+
+@article{Noise-tolerant-learning,
+ author = {Blum,, Avrim and Kalai,, Adam and Wasserman,, Hal},
+ title = {Noise-tolerant learning, the parity problem, and the statistical query model},
+ journal = {J. ACM},
+ volume = {50},
+ number = {4},
+ year = {2003},
+ issn = {0004-5411},
+ pages = {506--519},
+ doi = {http://doi.acm.org/10.1145/792538.792543},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+
+@INPROCEEDINGS{To06anovel,
+ author = {Marc P. C. Fossorier and Miodrag J. Mihaljević and Hideki Imai and Yang Cui and Kanta Matsuura},
+ title = {A Novel Algorithm for Solving the {LPN} Problem and Its Applicatio to Security Evaluation of the {HB} Protocol for {RFID} Authentication},
+ booktitle = {INDOCRYPT},
+ editor = {Rana Barua and Tanja Lange},
+ volume = {4329},
+ series = {LNCS},
+ year = {2006},
+ pages = {48--62},
+ publisher = {Springer}
+}
+
+@INPROCEEDINGS{Levieil_animproved,
+ author = {Éric Levieil and Pierre-Alain Fouque},
+ title = {An improved {LPN} algorithm},
+ editor = {Roberto De Prisco and Moti Yung},
+ booktitle = {Security and Cryptography for Networks --- SCN},
+ volume = {4116},
+ series = {LNCS},
+ year = {2006},
+ pages = {348--359},
+ Publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+}
+
+@INPROCEEDINGS{HBpp,
+title={{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+author={Bringer, J. and Chabanne, H. and Dottax, E.},
+booktitle={Security, Privacy and Trust in Pervasive and Ubiquitous Computing, 2006 --- SecPerU 2006},
+year={2006},
+month={June},
+volume={},
+number={},
+pages={28--33},
+doi={10.1109/SECPERU.2006.10},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/GilbertRS08,
+ author = {Henri Gilbert and Matthew J. B. Robshaw and Yannick Seurin},
+ title = {{HB}$^{\mbox{\#}}$: Increasing the Security and Efficiency of {HB}$^{\mbox{+}}$},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ year = {2008},
+ pages = {361-378},
+ ee = {http://dx.doi.org/10.1007/978-3-540-78967-3_21},
+ crossref = {DBLP:conf/eurocrypt/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2008,
+ editor = {Nigel P. Smart},
+ title = {Advances in Cryptology --- EUROCRYPT 2008, 27th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Istanbul, Turkey, April 13-17, 2008. Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4965},
+ year = {2008},
+ isbn = {978-3-540-78966-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2001,
+ editor = {Mitsuru Matsui},
+ title = {Fast Software Encryption, 8th International Workshop, FSE 2001 Yokohama, Japan, April 2-4, 2001, Revised Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2355},
+ year = {2002},
+ isbn = {3-540-43869-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Rabin79Digitalized,
+ author = {Rabin, M. O.},
+ title = {Digitalized Signatures and Public-Key Functions as Intractable as Factorization},
+ year = {1979},
+ institution = {Massachusetts Institute of Technology},
+ address = {Cambridge, MA, USA},
+ }
+
+@article{HBmp,
+ author = {Munilla,, J. and Peinado,, A.},
+ title = {{HB}-{MP}: A further step in the HB-family of lightweight authentication protocols},
+ journal = {Comput. Netw.},
+ volume = {51},
+ number = {9},
+ year = {2007},
+ issn = {1389-1286},
+ pages = {2262--2267},
+ doi = {http://dx.doi.org/10.1016/j.comnet.2007.01.011},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {New York, NY, USA},
+ }
+
+@article{HBstar,
+ author={D.N. Duc and K. Kim},
+ title={Securing {HB}$^+$ Against {GRS} Man-in-the-Middle Attack},
+ journal={Institute of Electronics, Information and Communication Engineers, Symposium on Cryptography and Information, Security},
+ date = {January 23--26},
+ year = {2007},
+}
+
+@INPROCEEDINGS{OuafiOV-2008-asiacrypt,
+ author = {Ouafi, Khaled and Overbeck, Raphael and Vaudenay, Serge},
+ title = {On the Security of {HB\#} against a Man-in-the-Middle Attack},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2008},
+ year = {2008},
+ editor = {},
+ volume = {5350},
+ series = {LNCS},
+ pages = {108--124},
+ address = {Melbourne, Australia},
+ month = {December},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{PRESENT,
+ author = {Bogdanov, Andrey and Knudsen, Lars Ramkilde and Leander, Gregor and Paar, Christof and Poschmann, Axel and Robshaw, Matthew J.B. and Seurin, Yannick and Vikkelsoe, C.},
+ title = {{PRESENT}: An Ultra-Lightweight Block Cipher},
+ booktitle = {Workshop on Cryptographic Hardware and Embedded Systems --- CHES 2007},
+ year = {2007},
+ editor = {Paillier, Pascal and Verbauwhede, Ingrid},
+ volume = {4727},
+ series = {LNCS},
+ pages = {450--466},
+ address = {Vienna, Austria},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{ChoiKKK-2006-isce,
+ author = {Choi, Yongje and Kim, Mooseop and Kim, Taesung and Kim, Howon},
+ title = {Low power implementation of {SHA}-1 algorithm for {RFID} system},
+ booktitle = {IEEE Tenth International Symposium on Consumer Electronics --- ISCE '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {1--5},
+ address = {St.Petersburg, Russia},
+ month = {September},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{DES-RFID-implement,
+ author = {Axel Poschmann and Gregor Le and Kai Schramm and Christof Paar},
+ title = {A Family of Light-Weight Block Ciphers Based on {DES} Suited for {RFID} Applications},
+ booktitle = {Proceedings of FSE 2007, LNCS},
+ year = {2006},
+ publisher = {Springer-Verlag}
+}
+
+@article{4253019,
+title={Strong Crypto for {RFID} Tags - A Comparison of Low-Power Hardware Implementations},
+author={Feldhofer, M. and Wolkerstorfer, J.},
+journal={Circuits and Systems, 2007. ISCAS 2007. IEEE International Symposium on},
+year={2007},
+month={May},
+volume={},
+number={},
+pages={1839-1842},
+keywords={cryptographic protocols, radiofrequency identificationAES-128, ECC-192, MD5, SHA-1, SHA-256, implementation efficiency, passive RFID tags, security protocols, standardized cryptographic algorithms, strong cryptography},
+doi={10.1109/ISCAS.2007.378272},
+ISSN={},
+}
+
+@techreport{PUF-optical,
+ author= {P. Ravinkanth},
+ title= {Physical One-Way Functions},
+ note = {Ph.D. Thesis},
+ institution = {MIT},
+ year={2001}
+}
+
+@inproceedings{PUF-silicon,
+ author={B. Gassend and D. Clarke and M. van Dijk and S. Devadas},
+ title = {Controlled Physical Random Functions},
+ booktitle = {Proceedings of the 18th Annual Computer Security Applications Conference --- ACSAC '02},
+ year = {2002},
+ ISBN = {0-7695-1828-1},
+ page = {149},
+ publisher = {IEEE},
+}
+
+@article{PUF-circ-secret-key,
+ author = {D. Lim and J. W. Lee and B. Gassend and G. E. Suh and M. van Dijk and S. Devadas},
+ title = {Extracting Secret Keys From Integrated Circuits},
+ journal = {IEEE Transactions on Very Large Scale Integration (VLSI) Systems},
+ pages = {1200--1205},
+ year = {2005},
+ issue = {13 (10)},
+}
+
+
+@INPROCEEDINGS{Li99equivalencyreasoning,
+ author = {Chu Min Li},
+ title = {Equivalency reasoning to solve a class of hard {SAT} problems},
+ booktitle = {Information Processing Letters},
+ year = {1999},
+ pages = {76--1}
+}
+
+@INPROCEEDINGS{Silva96conflictanalysis,
+ author = {Joo P. Marques and Silva Karem and A. Sakallah},
+ title = {Conflict analysis in search algorithms for propositional satisfiability},
+ booktitle = {Proc. of the IEEE Intl. Conf. on Tools with Artificial Intelligence},
+ year = {1996}
+}
+
+@article{Chaff01,
+ author = {Sharad Malik and Ying Zhao and Conor F. Madigan and Lintao Zhang and Matthew W. Moskewicz},
+ title = {Chaff: Engineering an Efficient {SAT} Solver},
+ journal ={Design Automation Conference},
+ year = {2001},
+ pages = {530-535},
+ doi = {http://doi.ieeecomputersociety.org/10.1109/DAC.2001.935565},
+ publisher = {IEEE Computer Society},
+ address = {Los Alamitos, CA, USA},
+}
+volume = {0},
+isbn = {},
+
+@article{visualizingDPLL,
+ author = {Sinz, Carsten},
+ title = {Visualizing {SAT} Instances and Runs of the {DPLL} Algorithm},
+ journal = {J. Autom. Reason.},
+ volume = {39},
+ number = {2},
+ year = {2007},
+ issn = {0168-7433},
+ pages = {219--243},
+ doi = {http://dx.doi.org/10.1007/s10817-007-9074-1},
+ publisher = {Kluwer Academic Publishers},
+ address = {Hingham, MA, USA},
+ }
+
+@inproceedings{nicolas.linear_feedback,
+ author={Nicolas T. Courtois},
+ title={Fast Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- {CRYPTO} 2003},
+ year={2003},
+ pages={176-194},
+ volume={2729/2003},
+ series={LNCS},
+ publisher={Springer},
+}
+
+@misc{Karsten-webpage-Cyrpto-1,
+ author={Karsten Nohl},
+ title={Cryptanalysis of {C}rypto-1},
+ howpublished={Press release},
+ month={March},
+ day = {12},
+ year={2008},
+ note= {\url{http://www.cs.virginia.edu/~kn5f/Mifare.Cryptanalysis.htm}}
+}
+
+@Misc{Radboud-Mifare-press,
+ author = {{Digital {S}ecurity group, {R}adboud {U}niversity {N}ijmegen}},
+ title = {Security Flaw in {M}ifare {C}lassic},
+ howpublished = {Press release},
+ month = {March},
+ day = {12},
+ year = {2008},
+ note = {\url{http://www.ru.nl/english/general/radboud_university/vm/security_flaw_in/}},
+}
+
+@ARTICLE{Massacci00logicalcryptanalysis,
+ author = {Fabio Massacci and Laura Marraro},
+ title = {Logical cryptanalysis as a {SAT}-problem: Encoding and analysis},
+ journal = {Journal of Automated Reasoning},
+ year = {2000},
+ volume = {24},
+ pages = {165--203}
+}
+
+@article{Monte-Carlo-method,
+ abstract = {We shall present here the motivation and a general description of a method dealing with a class of problems in mathematical physics. The method is, essentially, a statistical approach to the study of differential equations, or more generally, of integro-differential equations that occur in various branches of the natural sciences.},
+ author = {Metropolis, Nicholas and Ulam, S. },
+ citeulike-article-id = {1886002},
+ doi = {10.2307/2280232},
+ journal = {Journal of the American Statistical Association},
+ keywords = {random, sampling},
+ number = {247},
+ pages = {335--341},
+ posted-at = {2009-04-12 22:32:37},
+ priority = {2},
+ title = {The {M}onte {C}arlo Method},
+ url = {http://dx.doi.org/10.2307/2280232},
+ volume = {44},
+ year = {1949}
+}
+
+@article{Rabin-primality-test,
+ author = {Rabin, Michael O. },
+ citeulike-article-id = {1505894},
+ doi = {10.1016/0022-314X(80)90084-0},
+ journal = {J. Number Theory},
+ mrnumber = {MR566880},
+ number = {1},
+ pages = {128--138},
+ posted-at = {2007-07-27 00:11:40},
+ priority = {2},
+ title = {Probabilistic algorithm for testing primality},
+ url = {http://dx.doi.org/10.1016/0022-314X(80)90084-0},
+ volume = {12},
+ year = {1980}
+}
+
+@article{Mersenne-Twister,
+ address = {New York, NY, USA},
+ author = {Matsumoto, Makoto and Nishimura, Takuji },
+ citeulike-article-id = {611171},
+ doi = {10.1145/272991.272995},
+ issn = {1049-3301},
+ journal = {ACM Trans. Model. Comput. Simul.},
+ keywords = {algorithm},
+ month = {January},
+ number = {1},
+ pages = {3--30},
+ posted-at = {2008-10-26 00:03:42},
+ priority = {0},
+ publisher = {ACM Press},
+ title = {Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator},
+ url = {http://dx.doi.org/10.1145/272991.272995},
+ volume = {8},
+ year = {1998}
+}
+
+@inproceedings{L'Ecuyer98randomnumber,
+ author = {Pierre L'Ecuyer and Peter Hellekalek},
+ title = {Random Number Generators: Selection Criteria and Testing},
+ booktitle = {Random and Quasi-Random Point Sets},
+ series = {Lecture Notes in Statistics},
+ volume = {138},
+ publisher = {Springer-Verlag},
+ address = {New York},
+ pages = {223--266},
+ year = {1998},
+}
+
+@inproceedings{DBLP:conf/sat/SinzD05,
+ author = {Carsten Sinz and Edda-Maria Dieringer},
+ title = {{DP}vis --- {A} Tool to Visualize the Structure of {SAT} Instances},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {257-268},
+ ee = {http://dx.doi.org/10.1007/11499107_19},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@article{gomes00heavytailed,
+ author = {Carla P. Gomes and Bart Selman and Nuno Crato and Henry A. Kautz},
+ title = {Heavy-Tailed Phenomena in Satisfiability and Constraint Satisfaction Problems},
+ journal = {Journal of Automated Reasoning},
+ volume = {24},
+ number = {1/2},
+ pages = {67--100},
+ year = {2000},
+ url = {citeseer.ist.psu.edu/article/gomes99heavytailed.html}
+}
+
+@article{Mandelbrot60Pareto,
+ author = {Benoît B. Mandelbrot},
+ title = {The Pareto-Lévy law and the distribution of income},
+ journal = {Internat. Econom. Rev.},
+ volume = {1},
+ year = {1960},
+ pages = {79--106}
+}
+
+@inproceedings{Moura07tutorial,
+ author = {Leonardo de Moura, Bruno Dutertre and Natarajan Shankar},
+ title = {A Tutorial on Satisfiability Modulo Theories},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {4590/2007},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ pages = {20--36},
+ booktitle = {Computer Aided Verification},
+}
+ doi = {10.1007/978-3-540-73368-3},
+
+@article{Karnaugh53Logic,
+ author = {Karnaugh, Maurice},
+ year = {1953},
+ month = {November},
+ title = {The Map Method for Synthesis of Combinational Logic Circuits},
+ journal = {Transactions of American Institute of Electrical Engineers part I},
+ volume = {72},
+ number = {9},
+ pages = {593--599},
+}
+
+@inproceedings{Li00Integrating,
+ author = {Li, Chu Min},
+ title = {Integrating Equivalency Reasoning into Davis-Putnam Procedure},
+ booktitle = {Proceedings of the Seventeenth National Conference on Artificial Intelligence and Twelfth Conference on Innovative Applications of Artificial Intelligence},
+ year = {2000},
+ isbn = {0-262-51112-6},
+ pages = {291--296},
+ publisher = {AAAI Press / The MIT Press},
+}
+
+@article{Warners99TwoPhase,
+ author = {Joost P. Warners and Hans Van Maaren},
+ title = {A Two Phase Algorithm for Solving a Class of Hard Satisfiability Problems},
+ journal = {Operations Research Letters},
+ year = {1999},
+ volume = {23},
+ number = {3--5},
+ pages = {81--88}
+}
+
+@inproceedings{Massacci00Taming,
+ author = {Peter Baumgartner and Fabio Massacci},
+ title = {The Taming of the {(X)OR}},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+ volume = {1861/2000},
+ booktitle = {Computational Logic — CL 2000},
+ doi = {10.1007/3-540-44957-4},
+ year = {2000},
+ isbn = {978-3-540-67797-0},
+ pages = {508--522},
+}
+
+@inproceedings{Massacci99Using,
+ author = {Fabio Massacci},
+ title = {Using {W}alk-{SAT} and {R}el-sat for cryptographic key search},
+ booktitle = {Proc. of IJCAI-99},
+ year = {1999},
+ editor = {Morgan Kaufmann},
+ pages = {290--295},
+}
+
+@inproceedings{Girault04Public,
+author = {Marc Girault and David Lefranc},
+title = {Public Key Authentication with One (Online) Single Addition},
+series = {LNCS},
+bublisher = {Springer Berlin / Heidelberg},
+ISSN = {0302-9743},
+volume = {3156/2004},
+booktitle = {Cryptographic Hardware and Embedded Systems - CHES 2004},
+doi ={10.1007/b99451},
+year = {2004},
+isbn = {978-3-540-22666-6},
+pages = {967--984}
+}
+
+@article{Hsieh72OnOptimal,
+ author = {Hsieh, H. Y. and Ghausi, M. S.},
+ title = {On optimal-pivoting algorithms in sparse matrices},
+ journal = {IEEE Trans. Circuit Theory},
+ volume = {CT-19},
+ pages = {93--96},
+ month = {January},
+ year = {1972}
+}
+
+@article{HerasetalJAIR2008,
+ author = {Federico Heras and Javier Larrosa and Albert Oliveras},
+ title = {{MiniMaxSAT: An efficient Weighted Max-SAT Solver}},
+ journal = {Journal of Artificial Intelligence Research},
+ volume = {31},
+ year = {2008},
+ pages = {1--32}
+ }
+
+@techreport{Wieringa07MiniMarch,
+ title = {{M}ini{M}arch --- {E}mbedding lookahead direction heuristics in a conflict driven solver},
+ author = {Siert Wieringa},
+ institution = {Technische Universiteit Delft},
+ note = {Research Report},
+ year = {2007},
+ url = {http://www.st.ewi.tudelft.nl/sat/theses/minimarch.pdf},
+}
+
+techreport{OSI-MIT-Licence,
+url = {http://www.opensource.org/licenses/mit-license.php}
+
+
+@techreport{eStream,
+ title = {The e{STREAM} Portfolio},
+ author = {Steve Babbage and Christophe De Canniere and Anne Canteaut and Carlos Cid and Henri Gilbert and Thomas Johansson and Christof Paar and Matthew Parker and Bart Preneel and Vincent Rijmen and Matt Robshaw and Hongjun Wu},
+ url = {http://www.ecrypt.eu.org/stream/portfolio.pdf},
+ institution = {eStream Project},
+ year = {2008},
+ month = {September},
+ day = {8},
+}
+
+@techreport{Kibria08MiniSat,
+ author = {Raihan Kibria},
+ title = {Midi{S}AT - {A}n extension of {M}ini{SAT}},
+ institution = {Department of Electrical and Computer Engineering, Darmstadt University of Technology},
+ year = {2005},
+ month = {April},
+ day = {26},
+ url = {www.lri.fr/~simon/contest/results/descriptions/solvers/midisat_static.pdf},
+}
+
+@incollection{DaemenR05Rijndael,
+ author = {Joan Daemen and Vincent Rijmen},
+ title = {Rijndael/AES},
+ booktitle = {Encyclopedia of Cryptography and Security},
+ year = {2005},
+ ee = {http://dx.doi.org/10.1007/0-387-23483-7_358},
+ crossref = {DBLP:reference/crypt/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{DBLP:reference/crypt/2005,
+ editor = {Henk C. A. van Tilborg},
+ title = {Encyclopedia of Cryptography and Security},
+ publisher = {Springer},
+ year = {2005},
+ isbn = {978-0-387-23473-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Strassen69Gaussian,
+ author = {Volker Strassen},
+ title = {Gaussian Elimination is Not Optimal},
+ journal = {Numerische Mathematik},
+ volume = {13},
+ pages = {354--356},
+ year = {1969}
+}
+
+@techreport{Crawford94TheMinimal,
+ author = {Crawford, J. M. and Kearns, M. J. and Shapire, R. E.},
+ title = {The Minimal Disagreement Parity Problem as a Hard Satisfiability Problem},
+ institution = {Computational Intelligence Research Laboratory and {AT\&T} {B}ell {L}abs},
+ month = {February},
+ year = {1994},
+}
+
+@inproceedings{OuafiV09Smashing,
+ author = {Khaled Ouafi and Serge Vaudenay},
+ title = {Smashing {SQUASH}-0},
+ volume = {5479},
+ crossref = {DBLP:conf/eurocrypt/2009},
+}
+
+@inproceedings{ShamirRFIDSecLecture,
+author = {Adi Shamir},
+title = {{SQUASH}: {A} new one-way hash function with provable security properties for higley contrained devices such as {RFID} tags},
+booktitle = {Invited lecture to the RFID Securty 2007 Workshop},
+year = {2007},
+}
+
+@misc{DES77,
+ author = {{National Bureau of Standards}},
+ year = {1977},
+ title = {Data {E}ncryption {S}tandard},
+ institution = {U. S. Department of Commerce, National Bureau of Standards, Standards Publication (FIPS PUB) 46},
+ address = {Washington, DC},
+}s
+
+@INPROCEEDINGS{Tsudik06Yet,
+ author = {Tsudik, Gene},
+ title = {{YA-TRAP}: Yet Another Trivial {RFID} Authentication Protocol},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2006},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {640--643},
+ address = {Pisa, Italy},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+
+@INPROCEEDINGS{Conti07RIPP,
+ author = {Conti, Mauro and Pietro, Roberto~Di and Mancini, Luigi~Vincenzo and Spognardi, Angelo},
+ title = {{RIPP-FS}: an {RFID} Identification, Privacy Preserving Protocol with Forward Secrecy},
+ booktitle = {International Workshop on Pervasive Computing and Communication Security --- PerSec '07},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {229--234},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Burmester06Provably,
+ author = {Burmester, Mike and Le, Tri van and Medeiros, Breno de},
+ title = {Provably Secure Ubiquitous Systems: Universally Composable {RFID} Authentication Protocols},
+ booktitle = {Conference on Security and Privacy for Emerging Areas in Communication Networks --- SecureComm '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Baltimore, Maryland, USA},
+ month = {August-September},
+ organization = {IEEE},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@misc{ISO14443-standard,
+ author = {ISO/IEC},
+ title = {14443-3 --- {I}dentification cards -- {C}ontactless integrated circuit(s) cards -- {P}roximity cards -- {P}art 3: {I}nitialization and anticollision},
+ year = {2001, Stage: 90.92 --- 2007-12-11},
+ institution = {International Organization for Standardization},
+ address = {Geneva, Switzerland},
+ url = {http://www.isotopicmaps.org/sam/sam-model/YYYY-MM-DD/},
+}
+
+@INPROCEEDINGS{Bailey05Shoehorning,
+ author = {Bailey, Daniel and Juels, Ari},
+ title = {{Shoehorning Security into the EPC Standard}},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2006},
+ year = {2006},
+ editor = {De~Prisco, Roberto and Yung, Moti},
+ volume = {4116},
+ series = {LNCS},
+ pages = {303--320},
+ address = {Maiori, Italy},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Soos08Analysing,
+ author = {Soos, Mate},
+ title = {{Analysing the {M}olva and {D}i {P}ietro Private {RFID} Authentication Scheme}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'08},
+ year = {2008},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Budapest, Hungary},
+ month = {July},
+ organization = {},
+ publisher = {},
+}
+
+@inproceedings{DBLP:conf/ccs/BurmesterMM08,
+ author = {Mike Burmester and Breno de Medeiros and Rossana Motta},
+ title = {Robust, anonymous {RFID} authentication with constant key-lookup},
+ booktitle = {ASIACCS},
+ year = {2008},
+ pages = {283-291},
+ ee = {http://doi.acm.org/10.1145/1368310.1368351},
+ crossref = {DBLP:conf/ccs/2008asia},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ccs/2008asia,
+ editor = {Masayuki Abe and Virgil D. Gligor},
+ title = {Proceedings of the 2008 ACM Symposium on Information, Computer and Communications Security, ASIACCS 2008, Tokyo, Japan, March 18-20, 2008},
+ booktitle = {ASIACCS},
+ publisher = {ACM},
+ year = {2008},
+ isbn = {978-1-59593-979-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@INPROCEEDINGS{Blass09Ff,
+ author = {Blass, Erik-Oliver and Kurmus, Anil and Molva, Refik and Noubir, Guevara and Shikfa, Abdullatif},
+ title = {{The {F}f-Family of Protocols for {RFID}-Privacy and Authentication}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'09},
+ year = {2009},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Leuven, Belgium},
+ month = {July},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/cardis/CastellucciaA06,
+ author = {Claude Castelluccia and Gildas Avoine},
+ title = {Noisy Tags: {A} Pretty Good Key Exchange Protocol for {RFID} Tags},
+ booktitle = {CARDIS},
+ year = {2006},
+ pages = {289-299},
+ ee = {http://dx.doi.org/10.1007/11733447_21},
+ crossref = {DBLP:conf/cardis/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2006,
+ editor = {Josep Domingo-Ferrer and
+ Joachim Posegga and
+ Daniel Schreckling},
+ title = {Smart Card Research and Advanced Applications, 7th IFIP
+ WG 8.8/11.2 International Conference, CARDIS 2006, Tarragona,
+ Spain, April 19-21, 2006, Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3928},
+ year = {2006},
+ isbn = {3-540-33311-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ches/SavryPDRR07,
+ author = {O. Savry and F. Pebay-Peyroula and F. Dehmas and G. Robert and J. Reverdy},
+ title = {{RFID} Noisy Reader --- {H}ow to Prevent from Eavesdropping on the Communication?},
+ booktitle = {CHES},
+ year = {2007},
+ pages = {334-345},
+ ee = {http://dx.doi.org/10.1007/978-3-540-74735-2_23},
+ crossref = {DBLP:conf/ches/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ches/2007,
+ editor = {Pascal Paillier and Ingrid Verbauwhede},
+ title = {Cryptographic Hardware and Embedded Systems --- {CHES} 2007,
+ 9th International Workshop, Vienna, Austria, September 10-13,
+ 2007, Proceedings},
+ booktitle = {CHES},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4727},
+ year = {2007},
+ isbn = {978-3-540-74734-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Hancke07Modulating,
+ author = {G. Hancke},
+ title = {Modulating a noisy carrier signal for eavesdropping-resistant {HF RFID}},
+ journal = {e\&i --- Elektrotechnik und Informationstechnik},
+ year = {2007},
+ volume = {124},
+ number = {11},
+ month = {November},
+ pages = {404--408},
+ publisher = {Springer Wien},
+ ISSN = {0932-383X},
+ DOI = {10.1007/s00502-007-0479-7}
+}
+
+@inproceedings{1423361,
+ author = {Babbage, Steve and Dodd, Matthew},
+ title = {The {MICKEY} Stream Ciphers},
+ booktitle = {New Stream Cipher Designs: The e{STREAM} Finalists},
+ year = {2008},
+ isbn = {978-3-540-68350-6},
+ pages = {191--209},
+ doi = {http://dx.doi.org/10.1007/978-3-540-68351-3_15},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+ }
+
+@inproceedings{DBLP:conf/wistp/DeursenMR08,
+ author = {Ton van Deursen and Sjouke Mauw and Sasa Radomirovic},
+ title = {Untraceability of {RFID} Protocols},
+ booktitle = {WISTP},
+ year = {2008},
+ pages = {1-15},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79966-5_1},
+ crossref = {DBLP:conf/wistp/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/wistp/2008,
+ editor = {Jose Antonio Onieva and Damien Sauveron and Serge Chaumette and Dieter Gollmann and Constantinos Markantonakis},
+ title = {Information Security Theory and Practices. Smart Devices, Convergence and Next Generation Networks, Second {IFIP WG} 11.2 International Workshop, {WISTP} 2008, Seville, Spain, May 13-16, 2008. Proceedings},
+ booktitle = {WISTP},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5019},
+ year = {2008},
+ isbn = {978-3-540-79965-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{A51,
+ author = {Ross Anderson},
+ title = {A5 (was: Hacking digital phones)},
+ howpublished = {Newsgroup Communication},
+ year = {1994},
+}
+
+@inproceedings{DBLP:conf/cardis/GansHG08,
+ author = {Gerhard de Koning Gans and Jaap-Henk Hoepman and Flavio D. Garcia},
+ title = {A Practical Attack on the {MIFARE} {C}lassic},
+ booktitle = {CARDIS},
+ year = {2008},
+ pages = {267-282},
+ ee = {http://dx.doi.org/10.1007/978-3-540-85893-5_20},
+ crossref = {DBLP:conf/cardis/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2008,
+ editor = {Gilles Grimaud and Fran\c{c}ois-Xavier Standaert},
+ title = {Smart Card Research and Advanced Applications, 8th IFIP WG 8.8/11.2 International Conference, CARDIS 2008, London, UK, September 8-11, 2008. Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5189},
+ year = {2008},
+ isbn = {978-3-540-85892-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ima/CourtoisB07,
+ author = {Nicolas T. Courtois and Gregory V. Bard},
+ title = {Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ booktitle = {{IMA} Int. Conf.},
+ year = {2007},
+ pages = {152-169},
+ ee = {http://dx.doi.org/10.1007/978-3-540-77272-9_10},
+ crossref = {DBLP:conf/ima/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ima/2007,
+ editor = {Steven D. Galbraith},
+ title = {Cryptography and Coding, 11th IMA International Conference, Cirencester, UK, December 18-20, 2007, Proceedings},
+ booktitle = {IMA Int. Conf.},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4887},
+ year = {2007},
+ isbn = {978-3-540-77271-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Bard-algebraic,
+ title = {Algebraic Cryptanalysis},
+ author = {Gregory V. Bard},
+ year = {2009},
+ pages = {392},
+ volume = {XXXIV},
+ series = {Security and Cryptology},
+ ISBN = {978-0-387-88756-2},
+ publisher = {Springer},
+}
+
+@inproceedings{Graphviz,
+ author = {John Ellson and Emden R. Gansner and Eleftherios Koutsofios and Stephen C. North and Gordon Woodhull},
+ year = {2001},
+ title = {Graphviz --- open source graph drawing tools},
+ pages = {483--484},
+ crossref = {DBLP:conf/gd/2001},
+}
+
+@proceedings{DBLP:conf/gd/2001,
+ editor = {Petra Mutzel and Michael J{\"u}nger and Sebastian Leipert},
+ title = {Graph Drawing, 9th International Symposium, GD 2001 Vienna, Austria, September 23--26, 2001, Revised Papers},
+ booktitle = {Graph Drawing},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2265},
+ year = {2002},
+ isbn = {3-540-43309-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Borghoff09Mixed,
+ booktitle = {WEWoRC --- Western European Workshop on Research in Cryptology},
+ title = {Bivium as a Mixed-0-1 Linear Programming Problem},
+ author = {Julia Borghoff and Lars R. Knudsen and Mathias Stolpe},
+ month = {July},
+ year = {2009},
+ address = {Graz, Austria},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/DinurS09,
+ author = {Itai Dinur and Adi Shamir},
+ title = {Cube Attacks on Tweakable Black Box Polynomials},
+ booktitle = {EUROCRYPT},
+ year = {2009},
+ pages = {278--299},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9_16},
+ crossref = {DBLP:conf/eurocrypt/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2009,
+ editor = {Antoine Joux},
+ title = {Advances in Cryptology --- EUROCRYPT 2009, 28th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Cologne, Germany, April 26--30, 2009. Proceedings},
+ booktitle = {EUROCRYPT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5479},
+ year = {2009},
+ isbn = {978-3-642-01000-2},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{eStreamFinalists,
+ title = {The e{STREAM} Finalists},
+ editor = {Matthew Robshaw and Olivier Billet},
+ series = {LNCS},
+ subseries = {Security and Cryptology},
+ volume = {4986},
+ year = {2008},
+ pages = {295},
+ isbn = {978-3-540-68350-6},
+ publisher = {Springer},
+}
+
+@article{diffie76new,
+ author = "Whitfield Diffie and Martin E. Hellman",
+ title = "New Directions in Cryptography",
+ journal = "IEEE Transactions on Information Theory",
+ volume = "IT-22",
+ number = "6",
+ pages = "644--654",
+ date = "November 1976",
+ year = "1976",
+ url = "citeseer.ist.psu.edu/diffie76new.html"
+}
+
+@ARTICLE{Rivest78amethod,
+ author = {Ron L. Rivest and Adi Shamir and Leonard Max Adleman},
+ title = {A Method for Obtaining Digital Signatures and Public-Key Cryptosystems},
+ journal = {Communications of the ACM},
+ year = {1978},
+ volume = {21},
+ pages = {120--126}
+}
+
+@inproceedings{Pfizmann01Anonimity,
+ author = {Andreas Pfitzmann and Marit Köhntopp},
+ title = {Anonymity, Unobservability, and Pseudonymity --- {A} Proposal for Terminology},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {2009},
+ year = {2001},
+ booktitle = {Designing Privacy Enhancing Technologies},
+ doi = {10.1007/3-540-44702-4},
+ isbn = {978-3-540-41724-8},
+ pages = {1--9},
+}
+
+@misc{Bard07efficientmethods,
+ author = {Gregory V. Bard and Nicolas T. Courtois and Chris Jefferson},
+ title = {Efficient Methods for Conversion and Solution of Sparse Systems of Low-Degree Multivariate Polynomials over {GF}(2) via {SAT}-Solvers},
+ howpublished = {Cryptology ePrint Archive, Report 2007/024, \url{http://eprint.iacr.org/2007/024}},
+ year = {2007},
+ organization = {IACR},
+}
+
+@inproceedings{DBLP:conf/sat/SoosNC09,
+ author = {Mate Soos and
+ Karsten Nohl and
+ Claude Castelluccia},
+ title = {Extending {SAT} Solvers to Cryptographic Problems},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {244--257},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_24},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cav/GaneshD07,
+ author = {Vijay Ganesh and
+ David L. Dill},
+ title = {A Decision Procedure for Bit-Vectors and Arrays},
+ booktitle = {CAV},
+ year = {2007},
+ pages = {519-531},
+ ee = {http://dx.doi.org/10.1007/978-3-540-73368-3_52},
+ crossref = {DBLP:conf/cav/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cav/2007,
+ editor = {Werner Damm and
+ Holger Hermanns},
+ title = {Computer Aided Verification, 19th International Conference,
+ CAV 2007, Berlin, Germany, July 3-7, 2007, Proceedings},
+ booktitle = {CAV},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4590},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Logic2CNF,
+ author = {Edd Barrett},
+ title = {Logic2{CNF} Logic Solver and Converter},
+ note = {\url{http://projects.cs.kent.ac.uk/projects/logic2cnf/trac/wiki/WikiStart}},
+ year = {2010},
+ month = {March},
+}
+
+@misc{CryptoMiniSat,
+ author = {Mate Soos},
+ title = {Crypto{M}ini{S}at --- a {SAT} solver for cryptographic problems},
+ note = {\url{http://planete.inrialpes.fr/~soos/CryptoMiniSat/index.html}},
+ year = {2009},
+}
+
+@inproceedings{DBLP:conf/sat/EenB05,
+ author = {Niklas E{\'e}n and
+ Armin Biere},
+ title = {Effective Preprocessing in {SAT} Through Variable and Clause
+ Elimination},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {61-75},
+ ee = {http://dx.doi.org/10.1007/11499107_5},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{glucose,
+ author = {Gilles Audemard and Laurent Simon},
+ title = {{GLUCOSE}: a solver that predicts learnt clauses quality},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {7--8},
+}
+
+@inproceedings{precosat,
+ author = {Armin Biere},
+ title = {P\{re,i\}coSAT@SC’09},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {41--42},
+}
+
+@inproceedings{DBLP:conf/sat/HeuleM04a,
+ author = {Marijn Heule and
+ Hans van Maaren},
+ title = {Aligning {CNF}- and Equivalence-Reasoning},
+ booktitle = {SAT (Selected Papers},
+ year = {2004},
+ pages = {145--156},
+ ee = {http://dx.doi.org/10.1007/11527695_12},
+ crossref = {DBLP:conf/sat/2004lncs},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2004lncs,
+ editor = {Holger H. Hoos and
+ David G. Mitchell},
+ title = {Theory and Applications of Satisfiability Testing, 7th International
+ Conference, SAT 2004, Vancouver, BC, Canada, May 10-13,
+ 2004, Revised Selected Papers},
+ booktitle = {SAT (Selected Papers)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3542},
+ year = {2005},
+ isbn = {3-540-27829-X},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Heule-thesis,
+ author = {Marijn Heule},
+ title = {{m}arch: Towards a lookahead Sat solver for general purposes},
+ institution={Technische Universiteit Delft},
+ month={February},
+ year={2004},
+}
+
+@techreport{Heule-phd,
+ author = {Marijn J.H. Heule},
+ title = {Smart solving: Tool and techniques for satisfiability solvers},
+ institution={Technische Universiteit Delft},
+ year={2008},
+}
+
+@article{DBLP:journals/amai/JeroslowW90,
+ author = {Robert G. Jeroslow and
+ Jinchang Wang},
+ title = {Solving Propositional Satisfiability Problems},
+ journal = {Ann. Math. Artif. Intell.},
+ volume = {1},
+ year = {1990},
+ pages = {167-187},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/PipatsrisawatD07,
+ author = {Knot Pipatsrisawat and
+ Adnan Darwiche},
+ title = {A Lightweight Component Caching Scheme for Satisfiability
+ Solvers},
+ booktitle = {SAT},
+ year = {2007},
+ pages = {294-299},
+ ee = {http://dx.doi.org/10.1007/978-3-540-72788-0_28},
+ crossref = {DBLP:conf/sat/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2007,
+ editor = {Jo{\~a}o Marques-Silva and
+ Karem A. Sakallah},
+ title = {Theory and Applications of Satisfiability Testing --- SAT
+ 2007, 10th International Conference, Lisbon, Portugal, May
+ 28-31, 2007, Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4501},
+ year = {2007},
+ isbn = {978-3-540-72787-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ijcai/AudemardS09,
+ author = {Gilles Audemard and
+ Laurent Simon},
+ title = {Predicting Learnt Clauses Quality in Modern {SAT} Solvers},
+ booktitle = {IJCAI},
+ year = {2009},
+ pages = {399-404},
+ ee = {http://ijcai.org/papers09/Papers/IJCAI09-074.pdf},
+ crossref = {DBLP:conf/ijcai/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ijcai/2009,
+ editor = {Craig Boutilier},
+ title = {IJCAI 2009, Proceedings of the 21st International Joint
+ Conference on Artificial Intelligence, Pasadena, California,
+ USA, July 11-17, 2009},
+ booktitle = {IJCAI},
+ year = {2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/tacas/JarvisaloBH10,
+ author = {Matti J{\"a}rvisalo and
+ Armin Biere and
+ Marijn Heule},
+ title = {Blocked Clause Elimination},
+ booktitle = {TACAS},
+ year = {2010},
+ pages = {129-144},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2_10},
+ crossref = {DBLP:conf/tacas/2010},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/tacas/2010,
+ editor = {Javier Esparza and
+ Rupak Majumdar},
+ title = {Tools and Algorithms for the Construction and Analysis of
+ Systems, 16th International Conference, TACAS 2010, Held
+ as Part of the Joint European Conferences on Theory and
+ Practice of Software, ETAPS 2010, Paphos, Cyprus, March
+ 20-28, 2010. Proceedings},
+ booktitle = {TACAS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6015},
+ year = {2010},
+ isbn = {978-3-642-12001-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{DBLP:journals/dam/Li03,
+ author = {Chu Min Li},
+ title = {Equivalent literal propagation in the {DLL} procedure},
+ journal = {Discrete Applied Mathematics},
+ volume = {130},
+ number = {2},
+ year = {2003},
+ pages = {251-276},
+ ee = {http://dx.doi.org/10.1016/S0166-218X(02)00407-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Grid5000,
+ author = {{The Grid'5000 team}},
+ title = {The {G}rid'5000 project},
+ note = {\url{https://www.grid5000.fr}},
+}
+ year = {2008},
+
+@article{DBLP:journals/endm/Berre01,
+ author = {Daniel Le Berre},
+ title = {Exploiting the real power of unit propagation lookahead},
+ journal = {Electronic Notes in Discrete Mathematics},
+ volume = {9},
+ year = {2001},
+ pages = {59-80},
+ ee = {http://dx.doi.org/10.1016/S1571-0653(04)00314-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/GershmanS05,
+ author = {Roman Gershman and Ofer Strichman},
+ title = {Cost-Effective Hyper-Resolution for Preprocessing {CNF} Formulas},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {423-429},
+ ee = {http://dx.doi.org/10.1007/11499107_34},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/HeuleJB11,
+ author = {Marijn Heule and
+ Matti J{\"a}rvisalo and
+ Armin Biere},
+ title = {Efficient {CNF} Simplification Based on Binary Implication
+ Graphs},
+ booktitle = {SAT},
+ year = {2011},
+ pages = {201-215},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0_17},
+ crossref = {DBLP:conf/sat/2011},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2011,
+ editor = {Karem A. Sakallah and
+ Laurent Simon},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2011 - 14th International Conference, SAT 2011, Ann Arbor,
+ MI, USA, June 19-22, 2011. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6695},
+ year = {2011},
+ isbn = {978-3-642-21580-3},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ecai/PietteHS08,
+ author = {C{\'e}dric Piette and
+ Youssef Hamadi and
+ Lakhdar Sais},
+ title = {Vivifying Propositional Clausal Formulae},
+ booktitle = {ECAI},
+ year = {2008},
+ pages = {525-529},
+ ee = {http://dx.doi.org/10.3233/978-1-58603-891-5-525},
+ crossref = {DBLP:conf/ecai/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/ecai/2008,
+ editor = {Malik Ghallab and
+ Constantine D. Spyropoulos and
+ Nikos Fakotakis and
+ Nikolaos M. Avouris},
+ title = {ECAI 2008 - 18th European Conference on Artificial Intelligence,
+ Patras, Greece, July 21-25, 2008, Proceedings},
+ booktitle = {ECAI},
+ publisher = {IOS Press},
+ series = {Frontiers in Artificial Intelligence and Applications},
+ volume = {178},
+ year = {2008},
+ isbn = {978-1-58603-891-5},
+ ee = {http://www.booksonline.iospress.nl/Content/View.aspx?piid=9905},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/HanS09,
+ author = {HyoJung Han and
+ Fabio Somenzi},
+ title = {On-the-Fly Clause Improvement},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {209-222},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_21},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/SorenssonB09,
+ author = {Niklas S{\"o}rensson and
+ Armin Biere},
+ title = {Minimizing Learned Clauses},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {237-243},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_23},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/BacchusW03,
+ author = {Fahiem Bacchus and
+ Jonathan Winter},
+ title = {Effective Preprocessing with Hyper-Resolution and Equality
+ Reduction},
+ booktitle = {SAT},
+ year = {2003},
+ pages = {341-355},
+ ee = {http://dx.doi.org/10.1007/978-3-540-24605-3_26},
+ crossref = {DBLP:conf/sat/2003},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2003,
+ editor = {Enrico Giunchiglia and
+ Armando Tacchella},
+ title = {Theory and Applications of Satisfiability Testing, 6th International
+ Conference, SAT 2003. Santa Margherita Ligure, Italy, May
+ 5-8, 2003 Selected Revised Papers},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2919},
+ year = {2004},
+ isbn = {3-540-20851-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2005,
+ editor = {Fahiem Bacchus and
+ Toby Walsh},
+ title = {Theory and Applications of Satisfiability Testing, 8th International
+ Conference, SAT 2005, St. Andrews, UK, June 19-23, 2005,
+ Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3569},
+ year = {2005},
+ isbn = {3-540-26276-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2009,
+ editor = {Oliver Kullmann},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2009, 12th International Conference, SAT 2009, Swansea,
+ UK, June 30 - July 3, 2009. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {5584},
+ year = {2009},
+ isbn = {978-3-642-02776-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/hvc/MantheyHB12,
+ author = {Norbert Manthey and
+ Marijn Heule and
+ Armin Biere},
+ title = {Automated Reencoding of Boolean Formulas},
+ booktitle = {Haifa Verification Conference},
+ year = {2012},
+ pages = {102-117},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3_14},
+ crossref = {DBLP:conf/hvc/2012},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/hvc/2012,
+ editor = {Armin Biere and
+ Amir Nahir and
+ Tanja E. J. Vos},
+ title = {Hardware and Software: Verification and Testing - 8th International
+ Haifa Verification Conference, HVC 2012, Haifa, Israel,
+ November 6-8, 2012. Revised Selected Papers},
+ booktitle = {Haifa Verification Conference},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {7857},
+ year = {2013},
+ isbn = {978-3-642-39610-6},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Quinlan:1993:CPM:152181,
+ author = {Quinlan, J. Ross},
+ title = {C4.5: Programs for Machine Learning},
+ year = {1993},
+ isbn = {1-55860-238-0},
+ publisher = {Morgan Kaufmann Publishers Inc.},
+ address = {San Francisco, CA, USA},
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/splncs03.bst b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/splncs03.bst
new file mode 100644
index 000000000..327916917
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp15-pdf/splncs03.bst
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'
+%%
+%% BibTeX bibliography style for use with numbered references in
+%% Springer Verlag's "Lecture Notes in Computer Science" series.
+%% (See Springer's documentation for llncs.cls for
+%% more details of the suggested reference format.) Note that this
+%% file will not work for author-year style citations.
+%%
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
+%%
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre
+%%
+%% ================================================================================================
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
+%%
+%% CHANGES (with respect to titto-lncs-01.bst):
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
+%% ================================================================================================
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
+%% Edited by hand by titto based on `titto.bst' (see below)
+%%
+%% CHANGES (with respect to titto.bst):
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
+%% ================================================================================================
+%% This was file `titto.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
+%% ----------------------------------------
+%% *** Tentative .bst file for Springer LNCS ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ % \bibitem{key}...
+ % Usage of \cite is as follows:
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is alphabetical by authors.
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+% newline$
+% "\newblock " write$ % removed for titto-lncs-01
+ " " write$ % to avoid long spaces between title and "In: ..."
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+
+FUNCTION {add.colon}
+{ duplicate$ empty$
+ 'skip$
+ { ":" * add.blank }
+ if$
+}
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+STRINGS {z}
+FUNCTION {remove.dots}
+{ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+}
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ skip$ }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+FUNCTION {titto.space.prefix} % always introduce a space
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {titto.bbl.volume} % for handling journals
+{ "" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {titto.bbl.pages} % for journals
+{ "" }
+
+FUNCTION {titto.bbl.page} % for journals
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+% { "\urlprefix\url{" url * "}" * }
+ { "\url{" url * "}" * } % changed in titto-lncs-02.bst
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}{, f{.}.}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f{.}.~}{vv~}{ll}{ jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{
+ month "month" bibinfo.check
+ duplicate$ empty$
+ year "year" bibinfo.check duplicate$ empty$
+ { swap$ 'skip$
+ { "there's a month but no year in " cite$ * warning$ }
+ if$
+ *
+ }
+ { swap$ 'skip$
+ {
+ swap$
+ " " * swap$
+ }
+ if$
+ *
+ remove.dots
+ }
+ if$
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { emphasize ", " * swap$ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'titto.bbl.pages
+ 'titto.bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+% bbl.volume swap$ tie.or.space.prefix
+ titto.bbl.volume swap$ titto.space.prefix
+% rationale for the change above: for journals you don't want "vol." label
+% hence it does not make sense to attach the journal number to the label when
+% it is short
+ "volume" bibinfo.check
+ * *
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+% editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
+ editor "editor" format.names duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ key duplicate$ empty$
+ { pop$
+ journal duplicate$ empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+ { "journal" bibinfo.check emphasize word.in swap$ * }
+ if$
+ }
+ { word.in swap$ * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ {
+ bbl.and space.word
+ * editor #2 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { format.booktitle duplicate$ empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ }
+ { word.in swap$ * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.chapter.pages output
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ new.sentence % added by titto
+ format.bvolume output
+ format.pages output
+ new.sentence
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization "organization" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { output
+ address "address" bibinfo.check output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ {
+ address new.block.checka
+ address "address" bibinfo.check output
+ }
+ 'skip$
+ if$
+ }
+ {
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ }
+ if$
+ format.edition output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ add.colon
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished "howpublished" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+ empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization "organization" bibinfo.check output
+ }
+ { format.editors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ editor empty$
+ { publisher empty$
+ { format.number.series output }
+ {
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+ new.sentence
+ format.number.series output
+ format.organization.address output }
+ {
+ new.sentence
+ format.number.series output
+ organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {presort}
+SORT
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `titto.bst'.
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/Makefile b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/Makefile
new file mode 100644
index 000000000..64b69b492
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/Makefile
@@ -0,0 +1,25 @@
+TEX = pdflatex -shell-escape -interaction=nonstopmode -file-line-error
+PRE = $(TEX) -ini -job-name="preamble" "&pdflatex preamble.tex\dump"
+BIB = bibtex
+
+all: cmsv5.pdf
+
+view :
+ okular cmsv5.pdf
+
+cmsv5.pdf : clean cmsv5.tex cmsv5.bbl cmsv5.blg
+ $(TEX) cmsv5.tex
+ $(TEX) cmsv5.tex
+ mv cmsv5.pdf cmsv54.pdf
+
+cmsv5.bbl cmsv5.blg : cmsv5.bib cmsv5.aux
+ $(BIB) cmsv5
+
+cmsv5.aux : cmsv5.tex
+ $(TEX) cmsv5.tex
+
+cmsv5.bib : cmsv5.tex
+ $(TEX) cmsv5.tex
+
+clean:
+ rm -f *.log *.pdf *.blg *.bbl *.aux *.out *.backup
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.kilepr b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.kilepr
new file mode 100644
index 000000000..92617e203
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.kilepr
@@ -0,0 +1,53 @@
+[General]
+def_graphic_ext=
+img_extIsRegExp=false
+img_extensions=.eps .jpg .jpeg .png .pdf .ps .fig .gif .dvi
+kileprversion=2
+kileversion=2.1.0
+lastDocument=cmsv5.tex
+masterDocument=
+name=auth_eloadas
+pkg_extIsRegExp=false
+pkg_extensions=.cls .sty .bbx .cbx .lbx
+src_extIsRegExp=false
+src_extensions=.tex .ltx .latex .dtx .ins .bib .mp
+
+[Tools]
+MakeIndex=
+QuickBuild=
+
+[document-settings,item:cmsv5.tex]
+Bookmarks=
+Encoding=UTF-8
+FoldedColumns=
+FoldedLines=
+Highlighting=LaTeX
+Indentation Mode=normal
+Mode=LaTeX
+ReadWrite=true
+
+[item:cmsv5.kilepr]
+archive=true
+column=0
+encoding=
+highlight=
+line=0
+mode=
+open=false
+order=-1
+
+[item:cmsv5.tex]
+archive=true
+column=1
+encoding=UTF-8
+highlight=LaTeX
+line=245
+mode=LaTeX
+open=true
+order=0
+
+[view-settings,view=0,item:cmsv5.tex]
+CursorColumn=1
+CursorLine=245
+JumpList=
+ViMarks=
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.tex b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.tex
new file mode 100644
index 000000000..7cd4aaeb8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/cmsv5.tex
@@ -0,0 +1,64 @@
+%\documentclass[runningheads]{llncs}
+\documentclass[final]{ieee}
+
+\usepackage{microtype} %This gives MUCH better PDF results!
+%\usepackage[active]{srcltx} %DVI search
+\usepackage[cmex10]{amsmath}
+\usepackage{amssymb}
+\usepackage{fnbreak} %warn for split footnotes
+\usepackage{url}
+%\usepackage{qtree} %for drawing trees
+%\usepackage{fancybox} % if we need rounded corners
+%\usepackage{pict2e} % large circles can be drawn
+%\usepackage{courier} %for using courier in texttt{}
+%\usepackage{nth} %allows to \nth{4} to make 1st 2nd, etc.
+%\usepackage{subfigure} %allows to have side-by-side figures
+%\usepackage{booktabs} %nice tables
+%\usepackage{multirow} %allow multiple cells with rows in tabular
+\usepackage[utf8]{inputenc} % allows to write Faugere correctly
+\usepackage[bookmarks=true, citecolor=black, linkcolor=black, colorlinks=true]{hyperref}
+\hypersetup{
+pdfauthor = {Mate Soos},
+pdftitle = {CryptoMiniSat v5},
+pdfsubject = {SAT Competition 2016},
+pdfkeywords = {SAT Solver, DPLL},
+pdfcreator = {PdfLaTeX with hyperref package},
+pdfproducer = {PdfLaTex}}
+%\usepackage{butterma}
+
+%\usepackage{pstricks}
+\usepackage{graphicx,epsfig,xcolor}
+
+\begin{document}
+\title{The CryptoMiniSat 5 set of solvers at SAT Competition 2016}
+\author{Mate Soos}
+
+\maketitle
+\thispagestyle{empty}
+\pagestyle{empty}
+
+\section{Introduction}
+This paper presents the conflict-driven clause-learning SAT solver CryptoMiniSat v5 (\emph{CMS5}) as submitted to SAT Competition 2016. CMS5 aims to be a modern, open-source SAT solver that allows for multi-threaded in-processing techniques while still retaining a strong CDCL component. In this description only the features relative to CMS4.4, the previous year's submission, are explained. Please refer to the previous years' description for details. In general, CMS5 is a in-processing SAT solver that usues optimized datastructures and finely-tuned timeouts to have good control over both memory and time usage of simplification steps.
+
+\subsection{Removal of uneeded code}
+Over the years, many lines of code has been added to CMS that in the end didn't help and often was detrimental to both maintinability and efficiency of the solver. Many such additions have now been removed. This simplifies understanding and developing the system. Further, it allows the system to be more lean especially in the tight loops such as propagation and conflict analysis where most of the time is spent.
+
+\subsection{Integration of ideas from COMiniSatPS}
+Some of the ideas from COMiniSatPS\cite{swdia} have been included into CMS. In particular, the clause cleaning system employed and the switching restart have both made their way into CMS.
+
+\subsection{On-the-fly Gaussian Elimination}
+On-the-fly Gaussian elimination is again part of CryptoMiniSat. This is explicitly disabled for the compeititon, but the code is available and well-tested. This allows for special uses of the solver that other solvers, without on-the-fly Gaussian elimination, are not capable of.
+
+\subsection{Clause usefulness guessing}
+Besides glues and clause activites, CMS5 also tries to guess clause usefulness based on the trail size, the backjump level and the activity of the variables in the ancestor of the learnt clause. Although this is at a very early stage of development, it has been found to be helpful.
+
+\subsection{Auto-tuning}
+The version 'autotune' reconfigures itself after about 160K conflicts. The configuration picked is one of 2 different setups that vary many different parameters of the solving such as learnt clause removal strategy, restart strategy, and in-processing strategies. CMS5 was run on all SAT Comp'09 + 11 + 13 + 14 + 15 problems with both configurations, extracting relevant information from the all problems after they have been solved and simplified for 160K conflicts. configurations were then given to a machine learning algorithm (C5.0\cite{Quinlan:1993:CPM:152181}) which built a decision tree from this data. This decision tree was then translated into C++ and compiled into the CMS5 source code.
+
+\bibliographystyle{splncs03}
+\bibliography{sigproc}
+
+\vfill
+\pagebreak
+
+\end{document}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/ieee.cls b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/ieee.cls
new file mode 100644
index 000000000..3c57bba5d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/ieee.cls
@@ -0,0 +1,1497 @@
+% Copyright 2014 IEEEE
+% for terms of use see https://www.ieee.org/publications_standards/publications/rights/copyrightpolicy.html
+
+% =========================================================================
+% -------------------------------------------------------------------------
+% XX X
+% X
+% XX XXX XXX XXX XXX X XXXX
+% X X X X X X X X X X X
+% X XXXXX XXXXX XXXXX X X XXX
+% X X X X XX X X X X
+% XXX XXX XXX XXX XX XXX X XXXX
+% -------------------------------------------------------------------------
+% =========================================================================
+% ieee.cls --- For formatting IEEE conference & journal papers
+% --- Compiled by Gregory Plett, Sept 1997
+%
+% This class was inspired by one first compiled by Gerry Murray and
+% Silvano Balemi for LaTeX209. It was later updated for use with
+% LaTeX2e, and some bugs were fixed, all by Istvan Kollar. Lastly,
+% I have tried to make the class easier to use by paper authors.
+% Significant new functionality has been added. Many routines are
+% "borrowed" from other people's packages and modified extensively.
+% When I rembered where I got the routines from, I gave the author
+% credit.
+%
+% After I made many changes on my own, I found a version by Peter
+% N"uchter, and tried to retain some amount of compatibility with his
+% version. To be completely compatible with him, you may need to
+% manually:
+% \usepackage{rawfonts}\usepackage{oldlfont}
+% \AtBeginDocument{\parindent1.0em} (?)
+%
+%===========================================================================
+%
+% Usage:
+% \documentclass[main-mode,sub-mode,misc-options]{ieee}
+% \usepackage{your own packages}
+% \begin{document}
+% \bibliographystyle{IEEEbib}
+% \title[short]{regular}
+% \author[short]{full}
+% \maketitle
+% \begin{abstract}...\end{abstract}
+% \begin{keywords}...\end{keywords}
+% \section{...}
+% \PARstart ... or \PARstartCal ...
+% ...
+% \begin{biography}[picname.ps]{Author's name}...\end{biography}
+% \end{document}
+%
+% The document class options are:
+%
+% main-mode: One of the following is required. (draft is the default)
+% draft: Double-spaced, single column with date/time stamp.
+% submission: Double-spaced, suitable for submission for review.
+% compressed: Same as "submission", only single spaced.
+% final: Double-column, for assessing page-length and
+% format of final version.
+%
+% sub-mode:
+% techreport: This can modify "final" to produce a two-col
+% technical report.
+% internal: This can modify "submission", "compressed" or "final".
+% It changes the header to notify the reader that
+% this is a version of the manuscript to be used for
+% internal review processes only, and not to be
+% distributed.
+% submitted: This can modify "compressed" or "final". It changes
+% the header to notify the reader that this
+% is a preprint and not to be distributed.
+% inpress: This can modify "compressed" or "final". It changes the
+% header to notify the reader that this paper has
+% been accepted for publishing, but it is not yet to be
+% distributed.
+% reprint: This can modify "final". It changes the header
+% to notify the reader where the paper is reprinted from.
+%
+% misc-options:
+% narroweqnarray: Changes the spacing around the "=" sign in
+% equation arrays to make it the same as in displayed math.
+% inline: Compresses the horizontal spacing of inline math equations.
+% notitlepage: No separate title page. (default)
+% titlepage: Separate title page.
+% anonymous: Omit all author information from main part of paper.
+% Author info only prints on titlepage.
+% 9pt,10pt,11pt,12pt: Choose the appropriate type size. You should
+% not need to do this as the "correct" size is automatically
+% chosen. However, if you want, you may use these to change
+% the type size of the main text. "9pt" is a bit of a hack
+% to retain backward-compatibility.
+% invited: If the paper is an "invited" paper, then this option
+% prints "(Invited Paper)" under the authors' names.
+%
+% For regular IEEE submissions, define the journal name as:
+% \journal{IEEE Trans. Inst. Meas.}
+%
+% To specify the conference place and date:
+% \confplacedate{Ottawa, Canada, May 19--21, 1997}
+%
+% Before \maketitle, define:
+% \title{Title of paper}
+% \author{Author1\member{Fellow}\authorinfo{Department of
+% Electrical Engineering\\ Some University, Somewhere, CA 94305
+% USA} \and Author2\member{Senior Member}\authorinfo{Deptartment of
+% Measurement and Instrument Eng., Another University, ...}}
+%
+% Note, the contents of \authorinfo tends to vary depending on if it is
+% a conference or journal paper. The amount of manual changes are
+% small, and must be done by a human anyway. The example given is for an
+% IMTC conference.
+%
+% See also IEEEbib.bst and ieeefig.sty
+% Also very useful for document preparation is the style file "endfloat",
+% available on all CTAN TeX archives.
+%
+%===========================================================================
+% modified 14 October 2002:
+% - fixed bibliography listing of [#] when # < 10 and number of
+% references is greater than 9. Thanks for Janos Markus for finding
+% this bug and suggesting a solution.
+% modified 15 January 2000:
+% - "fixed" narroweqnarray. Never implemented! Now it is...
+% modified 12 January 2000:
+% - modified so only first \title and \author commands are recognized.
+% This allows LyX to have \title and \author with full syntax in
+% header, but dummy \title and \author show up in GUI.
+% - added "\date" so the \date command can change "submitted" and
+% "draft" date headers.
+% modified 11 January 2000:
+% - added PARstartLyX and PARstartCalLyX for LyX compatibility
+% - added biographyLyX
+% modified 1 Dec 1997:
+% - fixed first page in reprint mode to be same length as other pages
+% - added "invited" misc-option
+% modified 5 Sept 1997:
+% - added the inpress, reprint and internal sub-modes
+% - removed IMTC-conf and CDC-conf to separate files
+% modified 1 Sept 1997:
+% - included Babel package compatibility
+% - removed paper title from header on first page of draft
+% manuscript
+% - removed the fixed option "letterpaper" to allow a4paper (etc)
+% modified 1 Aug 1997:
+% - included the CDC-conf option
+%===========================================================================
+% **************************************************************************
+% ****** ******************************************
+% ***** LaTeX2e INITIALIZATION *****************************************
+% ****** ******************************************
+% **************************************************************************
+\typeout{Document Class `ieee' <Modified: 2000, Gregory L. Plett>.}
+\NeedsTeXFormat{LaTeX2e}[1993/11/11] % Oldest acceptable version of LaTeX2e
+\ProvidesClass{ieee}[2000/01/11] % Name of package provided, date
+\def\i@@@cls{exists}
+
+% Initial Code & Declaration of Options
+% -------------------------------------
+\newif\ifev@l \ev@lfalse % true if "final" mode.
+\newif\ifsubm@t \subm@tfalse % true if "submission" mode.
+\newif\ifdr@ft \dr@fttrue % true if "draft" mode.
+\newif\ifc@mpress \c@mpressfalse % true if "compressed" mode.
+
+\newif\if@technote \@technotefalse % true if "technote" sub-mode.
+\newif\ifintern@l \intern@lfalse % true if "internal" sub-mode.
+\newif\ifprepr@nt \prepr@ntfalse % true if "preprint" sub-mode.
+\newif\ifinpr@ss \inpr@ssfalse % true if "inpress" sub-mode.
+\newif\ifrepr@nt \repr@ntfalse % true if "reprint" sub-mode.
+
+\newif\iftitlep@ge \titlep@gefalse % true if has own titlepage
+\newif\if@non \@nonfalse % true if anonymous
+\newif\ifixpt \ixptfalse % true if trying to do 9 pt
+\newif\if@nvited \@nvitedfalse % true if an invited paper
+
+% Main options
+% ------------
+\DeclareOption{draft}{\ev@lfalse\subm@tfalse\dr@fttrue%
+ \typeout{ieee: `Draft' mode selected.}}
+\DeclareOption{submission}{\ev@lfalse\dr@ftfalse\subm@ttrue%
+ \typeout{ieee: `Submission' mode selected.}}
+\DeclareOption{compressed}{\ev@lfalse\dr@ftfalse\subm@tfalse\c@mpresstrue%
+ \typeout{ieee: `Compressed' mode selected.}}
+\DeclareOption{final}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}}
+\DeclareOption{evaluation}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}} % synonym for final
+
+% Sub options
+% -----------
+\DeclareOption{technote}{\@technotetrue%
+ \typeout{ieee: `Technote' sub-mode selected.}}
+\DeclareOption{internal}{\intern@ltrue\prepr@ntfalse\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Internal-Review' sub-mode selected.}}
+\DeclareOption{submitted}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}}
+\DeclareOption{preprint}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}} % synonym for submitted
+\DeclareOption{inpress}{\intern@lfalse\prepr@ntfalse\inpr@sstrue\repr@ntfalse%
+ \typeout{ieee: `Inpress' sub-mode selected.}}
+\DeclareOption{reprint}{\intern@lfalse\prepr@ntfalse\inpr@ssfalse\repr@nttrue%
+ \typeout{ieee: `Reprint' sub-mode selected.}}
+
+% Misc options
+% ------------
+ % regular or compressed "=" spacing in
+\def\eqnarr@ysep{\arraycolsep} % eqnarray (this is the default)
+ % NOTE: we must use "def" and not "="
+ % as arraycolsep not yet defined.
+\DeclareOption{narroweqnarray}{\gdef\eqnarr@ysep{0.28em\relax}%
+ \typeout{ieee: Narrow equation arrays selected.}}
+\DeclareOption{inline}{\everymath{\thinmuskip=2mu plus 1mu
+ \medmuskip=3mu plus 1mu minus 2mu
+ \thickmuskip=4mu plus 2mu\relax}%
+ \typeout{ieee: Narrower inline equations selected.}}
+\DeclareOption{notitlepage}{\titlep@gefalse%
+ \typeout{ieee: No separate title page.}}
+\DeclareOption{titlepage}{\titlep@getrue%
+ \typeout{ieee: Use separate title page.}}
+\DeclareOption{anonymous}{\@nontrue\AtBeginDocument{\glpexclude{biography}}
+ \typeout{ieee: Omit author information from paper.}}
+\DeclareOption{invited}{\@nvitedtrue%
+ \typeout{ieee: (Invited Paper).}}
+
+\DeclareOption{9pt}{\ixpttrue%
+ \typeout{ieee: Trying to emulate old `9pt' document class.}}
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+% Execution of Options/Package Loading
+% ------------------------------------
+\newlength\narrowcol
+\newlength\parindentsave % recover parindent in blsone text
+
+\ProcessOptions
+\ifev@l % if "final" mode...
+ \if@technote\ixpttrue\typeout{ieee: Trying to emulate old `9pt'
+ document class.}\fi%
+ \LoadClass[twoside,final,twocolumn,10pt]{article}
+\else % if "draft"/"submission"/(compressed) mode...
+ \ifixpt
+ \LoadClass[oneside,final,onecolumn,10pt]{article}
+ \else
+ \LoadClass[oneside,final,onecolumn,12pt]{article}
+ \fi
+\fi
+\RequirePackage[final]{graphicx}
+\RequirePackage{ifthen}
+
+% Re-Definitions of English words which must be done before
+% the Babel package (optional) is loaded.
+% ---------------------------------------------------------
+\def\keywordsname{Index Terms}
+\def\indexterms#1{\def\keywordsname{#1}}
+\def\appendicesname{Appendices}
+\def\figurename{Fig.}
+
+% **************************************************************************
+% ***** Check Sub-Options for Compatibility w/ Main-Options ************
+% **************************************************************************
+\if@technote\ifev@l\else\ClassError{ieee}{`technote' sub-mode may be
+ used only with the `final' ^^Jmain-mode. It may not be used
+ with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+\ifintern@l\ifdr@ft\ClassError{ieee}{`internal' sub-mode may be
+ used only with the ^^J`submission,' `compressed,' or `final' main-modes.
+ It may not be used ^^Jwith the `draft' main-mode}{}\endinput\fi\fi
+\ifprepr@nt\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`submitted'
+ sub-mode may be used only with the ^^J`compressed' or `final'
+ main-modes. It may not be used with either the ^^J`draft' or
+ `submission' main-modes}{}\endinput\fi\fi\fi
+\ifinpr@ss\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`inpress'
+ sub-mode may be used only with the `compressed' ^^Jor `final'
+ main-modes. It may not be used with either the `draft' or
+ ^^J`submission' main-modes}{}\endinput\fi\fi\fi
+\ifrepr@nt\ifev@l\else\ClassError{ieee}{`reprint'
+ sub-mode may be used only with the `final' ^^Jmain-mode. It may not be
+ used with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+
+% **************************************************************************
+% ***** Page Layout Definition *****************************************
+% **************************************************************************
+%% Layout definitions (mostly) common to all options.
+
+\hoffset 0in \voffset 0in
+\headheight 12pt \headsep 7mm
+\marginparsep 10pt \marginparwidth 20pt
+\marginparpush 25pt
+\columnsep 4mm
+\parindent 1.0em
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\partopsep \z@
+\topsep 1.3ex
+\parsep \z@
+\itemsep \z@
+
+\setlength{\parindentsave}{\parindent}
+
+\ifev@l % if "evaluation" mode
+ % if camera-ready or A4paper ...
+ \ifdim\paperwidth<211mm
+ \oddsidemargin -11.4mm \evensidemargin -11.4mm
+ % for regular US Letter, not camera-ready
+ \else
+ \oddsidemargin -8.45mm \evensidemargin -8.45mm
+ \fi
+ \ifrepr@nt
+ \textheight 237.5mm % leave 6mm for cpyright on first page
+ \else
+ \textheight 243.5mm
+ \fi
+ \voffset -0.5in
+ \textwidth 182.0mm
+ \topmargin -12pt
+ \setlength{\narrowcol}{89mm}
+\else % if "draft"/"submission" mode...
+ \ifc@mpress % and "compressed"
+ \oddsidemargin -0.25in \evensidemargin -0.25in
+ \textheight 9in \textwidth 7in
+ \topmargin -0.25in
+ \setlength{\narrowcol}{7in}
+ \else % and NOT "compressed"
+ \renewcommand\baselinestretch{1.8}\renewcommand{\arraystretch}{0.8}
+ \parindent=1.8\parindent
+ \oddsidemargin 0pt \evensidemargin 0pt
+ \headheight 12pt \headsep 0.375in
+ \topmargin 0pt
+ \textheight 8.5in \textwidth 6.5in
+ \marginparsep 0in \marginparwidth 0pt
+ \marginparpush 5pt
+ \setlength{\narrowcol}{6.5in}
+ \fi
+\fi
+
+\def\normalstyle{\rmfamily}
+
+% **************************************************************************
+% ***** Font Definition ************************************************
+% **************************************************************************
+%% The 9-point option is being faked since it is not supported by the
+%% article base class.
+
+%% Check if we have selected 9 points
+\ifixpt
+\typeout{-- This is a 9 point document}
+\gdef\@ptsize{9}
+\def\@normalsize{\@setsize\normalsize{10.7pt}\ixpt\@ixpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.12pt}\viiipt\@viipt}
+\def\footnotesize{\@setsize\footnotesize{8.15pt}\viipt\@vipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vpt}
+\def\tiny{\@setsize\tiny{5pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{18pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+\fi
+%%
+%% Check if we have selected 10 points
+\def\@tempa{0}\if\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.2pt}\viiipt\@viiipt}
+\def\footnotesize{\@setsize\footnotesize{8.8pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{1}\if\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{2}\if\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\AtBeginDocument{\normalsize\normalstyle\ps@headings\pagenumbering{arabic}}
+
+% **************************************************************************
+% ***** List Definition ************************************************
+% **************************************************************************
+%% Change aspect of lists with
+%% 1) \itemindent, label indentation wrt to left list margin
+%% 2) \leftmargini, the indentation of the whole list (on left, first level)
+\ifev@l
+ \itemindent -1em
+ \leftmargini 2em
+ \leftmarginii 1em
+ \leftmarginiii 1.5em
+ \leftmarginiv 1.5em
+ \leftmarginv 1.0em
+ \leftmarginvi 1.0em
+\else
+ \itemindent -1em
+ \leftmargini 3em
+ \leftmarginii 3em
+ \leftmarginiii 3em
+ \leftmarginiv 3em
+ \leftmarginv 3em
+ \leftmarginvi 3em
+\fi
+%\itemindent 2em % Alternative values: sometimes used..
+%\leftmargini 0em
+\labelsep 5pt
+\leftmargin\leftmargini
+\labelwidth \z@
+
+\def\@listI{\leftmargin\leftmargini} \@listI
+\def\@listi{\leftmargin\leftmargini \topsep \z@ plus 1pt minus 1pt}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)} \def\theenumii{\alph{enumii}}
+\def\labelenumiii{\theenumiii.} \def\theenumiii{\roman{enumiii}}
+\def\labelenumiv{\theenumiv.} \def\theenumiv{\Alph{enumiv}}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\scriptstyle\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%% \itemindent is set to \z@ by list, so define new temporary variable
+\newdimen\tmpitemindent
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+\def\@mklab#1{#1}
+\def\description{\tmpitemindent\itemindent\list{}{\itemindent\tmpitemindent
+ \labelwidth\z@\def\makelabel##1{\hspace\labelsep\emph{##1}}}}
+\def\enddescription{\endlist\par}
+\def\enumerate{\tmpitemindent\itemindent\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \list{\csname label\@enumctr\endcsname}{\itemindent\tmpitemindent
+ \usecounter{\@enumctr}\def\makelabel##1{\hspace\labelsep\hfil{##1}}}\fi}
+\def\endenumerate{\endlist\par}
+\def\itemize{\tmpitemindent\itemindent\ifnum \@itemdepth >3 \@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}{\itemindent\tmpitemindent
+ \def\makelabel##1{\hspace\labelsep\hfil\emph{##1}}}\fi}
+\def\enditemize{\endlist\par}
+
+\newif\if@restonecol
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{coverpagestyle}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi%
+\if@twoside\mbox{}\thispagestyle{coverpagestyle}\c@page\z@\cleardoublepage\fi}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep\labelsep
+
+% **************************************************************************
+% ***** Footnote Definition ********************************************
+% **************************************************************************
+\skip\footins 10pt plus 5pt minus 2pt
+\footnotesep 7pt
+\footskip 6mm
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+\long\def\@makefntext#1{\parindent .8em\indent$^{\@thefnmark}$#1}
+\def\footnoterule{}
+
+% Reset baselinestretch within footnotes.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\long\def\@footnotetext#1{\insert\footins{\blsone%
+ \footnotesize\interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ \let\par\\
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% **************************************************************************
+% ***** Keep track of Sections *****************************************
+% **************************************************************************
+\if@technote
+ \setcounter{secnumdepth}{3}
+\else
+ \setcounter{secnumdepth}{4}
+\fi
+
+\def\thesection{\@Roman\c@section}
+\def\thesubsection{\Alph{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\thesubsubsectiondis{\Alph{subsection}.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\alph{paragraph}}
+\def\theparagraphdis{\thesubsubsectiondis.\alph{paragraph}}
+
+\def\theequation{\arabic{equation}}
+
+% **************************************************************************
+% ***** Table of Contents, List of Figures/Tables Definitions **********
+% **************************************************************************
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+ \@tempdima 1.8em \begingroup \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip-\@pnumwidth \bf\leavevmode #1\hfil\hbox to\@pnumwidth{\hss #2}
+ \par \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1em}{1.8em}}
+\def\listoftables{\section*{\listtablename}\@starttoc{lot}}
+\let\l@table\l@figure
+
+% **************************************************************************
+% ***** Float Definitions **********************************************
+% **************************************************************************
+%% Normal Floats %% Double Column Floats
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt
+%\@maxsep 20pt \@dblmaxsep 20pt %!PN
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+% Reset baselinestretch within floats.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\small\normalsize
+ \hsize\columnwidth \@parboxrestore}
+
+% **************************************************************************
+% ***** Caption Definition *********************************************
+% **************************************************************************
+% some journals do not have centered captions for figures.
+\newif\ifc@ptionleft \c@ptionlefttrue
+\def\leftfigcaptions{\c@ptionlefttrue}
+\def\centerfigcaptions{\c@ptionleftfalse}
+
+\long\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup \@parboxrestore \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+% changed by GLP to allow table captions to be set to a specific maximum
+% width "\captionwidth", if defined.
+\newlength{\captionindent}
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 5pt
+ \setbox\@tempboxa\hbox{\small #1.~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\small #1.~ }
+ %\setlength\captionindent{\wd\@tempboxa} \divide\captionindent by 2
+ %\parbox[t]{\hsize}{\small \hangindent \captionindent \hangafter=1%
+ \parbox[t]{\hsize}{\small
+ \unhbox\@tempboxa#2}
+ \else \hbox
+ to\hsize{\small\ifc@ptionleft\else\hfil\fi\box\@tempboxa\hfil}
+ \fi
+\else
+ \begin{center}
+ \ifx\captionwidth\undefined {\small #1}\\{\small\scshape #2}
+ \else
+ \begin{minipage}{\captionwidth}
+ \begin{center}{\small #1}\\{\small\scshape #2}\end{center}
+ \end{minipage}
+ \fi
+ \end{center}\vskip 4pt
+\fi}
+
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\ \thefigure}
+%\def\figure{\@float{figure}} % GLP
+%\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% **************************************************************************
+% ***** Header/Footer Definition ***************************************
+% **************************************************************************
+% compute the time in hours and minutes; make new vars \timehh and \timemm
+\newcount\timehh\newcount\timemm\timehh=\time\divide\timehh by 60
+\timemm=\time\count255=\timehh\multiply\count255 by-60
+\advance\timemm by \count255
+\ifnum\timehh=12\def\apm{pm}\else
+\ifnum\timehh>12\def\apm{pm}\advance\timehh by-12\else
+\def\apm{am}\fi\fi
+\def\t@me{\number\timehh\,:\,\ifnum\timemm<10 0\fi\number\timemm\,\apm}
+
+% default definitions
+% -------------------
+\def\theevenhe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+\def\theoddhe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+\def\theevenf@@t{}
+\def\theoddf@@t{}
+
+\def\theeventphe@d{\footnotesize\thepage \hfil \hbox{}}
+\def\theoddtphe@d{\hbox{}\footnotesize \hfil \thepage}
+\def\theeventpf@@t{}
+\def\theoddtpf@@t{}
+
+\def\theevencphe@d{}
+\def\theoddcphe@d{}
+\def\theevencpf@@t{}
+\def\theoddcpf@@t{}
+
+\def\internalmsg{Preliminary version for evaluation: Please do not
+ circulate without the permission of the author(s)}
+\def\submittedmsg{SUBMITTED FOR PUBLICATION TO:}
+\def\acceptedmsg{ACCEPTED FOR PUBLICATION:}
+\def\inpressmsg{(IN PRESS)}
+\def\reprintmsg{REPRINTED FROM:}
+
+% default cover page style (optional cover page)
+% ----------------------------------------------
+\def\ps@coverpagestyle{
+ \def\@oddhead{\theoddcphe@d} \def\@evenhead{\theevencphe@d}
+ \def\@oddfoot{\theoddcpf@@t} \def\@evenfoot{\theevencpf@@t}
+}
+
+% default title page style (first page of paper)
+% ----------------------------------------------
+\def\ps@titlepagestyle{
+ \def\@oddhead{\theoddtphe@d} \def\@evenhead{\theeventphe@d}
+ \def\@oddfoot{\theoddtpf@@t} \def\@evenfoot{\theeventpf@@t}
+}
+
+% default regular page style
+% --------------------------
+\if@twoside
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@evenhead{\theevenhe@d}
+ \def\@oddfoot{\theoddf@@t} \def\@evenfoot{\theevenf@@t}
+ }
+\else
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@oddfoot{\theoddf@@t}
+ \def\@evenhead{} \def\@evenfoot{}
+ }
+\fi
+
+% For draft mode (no sub-modes allowed)
+% -------------------------------------
+\ifdr@ft
+ \def\leftmark{\sh@rttitle}\let\rightmark\leftmark
+ \def\theoddf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theevenf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+ \def\theoddtpf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theeventpf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+\fi
+
+% For submission mode (default plus internal sub-modes allowed)
+% -------------------------------------------------------------
+\ifsubm@t
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \else % put date on first page.
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+\fi
+
+% For compressed mode (default, internal, submitted and
+% inpress sub-modes allowed)
+% -----------------------------------------------------
+\ifc@mpress
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \fi
+\fi
+
+% For final (evaluate) mode (default, techreport, internal,
+% submitted, inpress and reprint sub-modes allowed)
+% ---------------------------------------------------------
+\ifev@l
+ \edef\TODAY{\uppercase{\today}}
+ \def\leftmark{\@journal\@titletext}\def\rightmark{\titl@line}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \if@technote % make header a little bigger
+ \def\theevenhe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddhe@d{\hbox{}\small\rightmark \hfil \thepage}
+ \def\theeventphe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\small\leftmark \hfil \thepage}
+ \fi
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \def\leftmark{\submittedmsg\ \@journal\@titletext, \TODAY}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \fi
+ \ifrepr@nt
+ % reset page size on second and following pages b/c no copyright info
+ \let\oldshipout\shipout
+ \gdef\shipout{\global\textheight 243.5mm\oldshipout}
+ \def\theeventpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\theoddtpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\leftmark{\reprintmsg\ \@journal\@titletext}
+ \fi
+\fi
+
+%% Defines the command for putting the header. footernote{TEXT} is the same
+%% as markboth{TEXT}{TEXT}. Here for compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+\def\footernote#1{\markboth{#1}{#1}}
+
+% **************************************************************************
+% ***** Citation/Bibliography Definitions ******************************
+% **************************************************************************
+%% separate citations with "], ["
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{],
+[}\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on
+page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{[{#1\if@tempswa, #2\fi}]}
+
+%% Allow short (name-less) citations, when used in conjunction with a
+%% bibliography style that creates labels like \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
+
+\def\thebibliography#1{\section*{\refname}\footnotesize\list
+ {\hss[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep \itemsep 0pt plus .5pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+ \ifev@l\else\normalsize\fi %added by GLP
+}
+\let\endthebibliography=\endlist
+
+% **************************************************************************
+% ***** Appendix/Appendices Definitions ********************************
+% **************************************************************************
+\newcounter{numappendices}\setcounter{numappendices}{0}
+\newif\ifappendix \appendixfalse
+%% appendix command for one single appendix
+\def\appendix{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}}
+ \ifnum \value{numappendices}>1
+ \section*{\appendicesname}
+ \else
+ \section*{\appendixname}
+ \fi
+ \setcounter{numappendices}{0}
+}
+%% appendices command for multiple appendicies
+\def\appendices{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}} \section*{\appendicesname}
+ \setcounter{numappendices}{0}
+}
+\AtEndDocument{\if@filesw\immediate\write\@auxout{\string\setcounter{numappendices}{\arabic{numappendices}}}\fi}
+
+% **************************************************************************
+% ***** Title Definitions **********************************************
+% **************************************************************************
+\def\titl@line{\sh@rttitle} %for the header at the top of the page.
+
+\def\@title{\typeout{ieee: Warning! No \noexpand\title given!}}
+\def\title{\@ifnextchar [{\titlea}{\titleb}}%]
+
+\def\set@title#1{\gdef\@title{#1}\global\def\set@title##1{}}
+\def\setsh@rttitle#1{\gdef\sh@rttitle{#1}\global\def\setsh@rttitle##1{}}
+\def\titlea[#1]#2{\set@title{#2}\setsh@rttitle{\uppercase{#1}}}
+\def\titleb#1{\set@title{#1}\setsh@rttitle{\uppercase{#1}}}
+
+\def\authorinfo#1{\let\\\relax\thanks{#1}}
+
+\ifev@l
+ \if@technote
+ \def\member#1{}
+ \else
+ \def\member#1{, \emph{#1, IEEE}}
+ \fi
+\else
+ \def\member#1{}
+\fi
+
+\def\and{\unskip% % \begin{tabular}
+\end{tabular}%
+\hskip 0pt plus 0.1pt%
+\begin{tabular}[t]{@{}c@{}}\ }%
+
+\def\@author{\typeout{ieee: Warning! No \noexpand\author given!}}
+\def\author{\@ifnextchar [{\authora}{\authorb}}%]
+\def\set@author#1{\gdef\@author{#1}\global\def\set@author##1{}}
+\def\settitl@line#1{\gdef\titl@line{#1}\global\def\settitl@line##1{}}
+\def\authora[#1]#2{\set@author{#2}\if@non\else\settitl@line{#1: \sh@rttitle}\fi}
+\def\authorb#1{\set@author{#1}}
+
+\def\date#1{\def\today{#1}\edef\TODAY{\uppercase{\today}}}
+
+\long\def\maketitle{%
+ \begingroup
+ \let\@thanks\@empty
+ \renewcommand\thefootnote{} % the \thanks{} mark type is empty
+ \iftitlep@ge\begin{titlepage}\@maketitlepage\@thanks\end{titlepage}%
+ \let\@thanks\@empty\fi
+ \thispagestyle{titlepagestyle}
+ \if@twocolumn
+ \if@technote
+ %\if@twoside\newpage\cleardoublepage\else\newpage\fi%
+ \newpage\global\@topnum\z@
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else
+ \ifnum \col@number=\@ne
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else \twocolumn[%
+ \ifrepr@nt%
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo%
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi%
+ \@maketitle]%
+ \fi
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi
+ \fi
+ \@maketitle
+ \fi
+ \thispagestyle{titlepagestyle}%
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax \global\let\maketitle\relax
+ \global\let\@maketitle\relax \global\let\@thanks\@empty
+ \global\let\@author\@empty \global\let\@date\@empty
+ \global\let\@title\@empty \global\let\title\relax
+ \global\let\author\relax \global\let\date\relax
+ \global\let\and\relax
+}
+
+\long\def\@maketitle{\unskip\newpage%
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\if@non\else\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}\fi\par
+ \else\unskip
+ \noindent{\Huge\@title\par}%
+ \if@non\else\vskip1.0em%
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}%
+ \fi\par%
+ \if@nvited\vskip1.0em\noindent\emph{\large(Invited Paper)}\par\fi
+ \fi
+ \ifrepr@nt
+ \ifx\@lognumber\undefined\typeout{ieee: Warning! No
+ \noexpand\pubitemident or \noexpand\lognumber
+ given!}\else\thanks{\@lognumber}\fi%
+ \fi
+ \end{center}\par\vskip 0.5em}%
+
+\long\def\@maketitlepage{\newpage%
+ \mbox{}\vfil
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}
+ \else
+ \vskip0.2em{\Huge\@title\par}\vskip1.0em%
+ \iftitlep@ge\vfil\fi
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}%
+ \fi
+ \end{center}\par\vfil\mbox{}}
+
+\def\@journal{\typeout{ieee: Warning! No \noexpand\journal given!}}
+\def\journal#1{\def\@journal{\uppercase{#1}}}
+
+\def\@ieeecopyright{\typeout{ieee: Warning! No \noexpand\ieeecopyright given!}}
+\def\ieeecopyright#1{\def\@ieeecopyright{#1}}
+
+\def\lognumber#1{\def\@lognumber{IEEE Log Number #1.}}
+\def\pubitemident#1{\def\@lognumber{Publisher Item Identifier #1.}}
+\long\def\loginfo#1{\long\def\@loginfo{\hbox{\vrule height 3ex width \z@}#1}}
+
+\def\sh@rttitle{}
+\def\@titletext{}
+\def\titletext#1{\def\@titletext{#1}}
+
+\def\firstpage#1{\setcounter{page}{#1}}
+
+% **************************************************************************
+% ***** Abstract Definition ********************************************
+% **************************************************************************
+\def\abstract{%
+ \if@twocolumn
+ \small\bfseries{\itshape\abstractname\/---}%
+ \else
+ \begin{center}\vspace{-0.8em}\small\bf\abstractname\end{center}
+ \quotation\small
+ \fi\ignorespaces}
+\def\endabstract{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Keywords Definition ********************************************
+% **************************************************************************
+\def\keywords{\vspace{-.3em}
+ \if@twocolumn
+ \small\bfseries{\itshape\keywordsname\/---}%
+ \else
+ \begin{center}\small\bf\keywordsname\end{center}\quotation\small
+ \fi\ignorespaces}
+\def\endkeywords{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Fix Section Numbering ******************************************
+% **************************************************************************
+\gdef\@punct{.\ \ } % Punctuation after run-in section heading
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{%
+ %\ifnum #2=1\Roman{#1}.\fi\ifnum #2=2\Alph{#1}.\fi
+ \ifnum #2=1\thesection.\fi
+ \ifnum #2=2\thesubsection.\fi
+ \ifnum #2>2{\csname the#1dis\endcsname}\if@technote.\fi\fi \hskip .5em}
+ \ifnum #2=1\ifappendix\stepcounter{numappendices}\fi\fi
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}
+ \fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5\@punct}\fi
+ \@xsect{#3}}
+
+% **************************************************************************
+% ***** Section Definitions ********************************************
+% **************************************************************************
+\def\section{\@startsection{section}{1}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\centering\scshape}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\itshape}}
+\if@technote
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .1ex}{0pt}{\itshape}}
+\else
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\normalstyle}}
+ \def\paragraph{\@startsection{paragraph}{4}{\z@}{1.0ex plus .5ex
+ minus .2ex}{0ex}{\normalstyle}}
+\fi
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\def\QED{\mbox{\rule[0pt]{1.5ex}{1.5ex}}}
+\def\proof{\noindent\hspace{1em}{\it Proof: }}
+\def\endproof{\hspace*{\fill}~\QED\par\endtrivlist\unskip}
+\def\@begintheorem#1#2{\tmpitemindent\itemindent\topsep 0pt\normalstyle\trivlist
+ \item[\hskip \labelsep{\indent\it #1\ #2:}]\itemindent\tmpitemindent}
+\def\@opargbegintheorem#1#2#3{\tmpitemindent\itemindent\topsep 0pt\normalstyle \trivlist
+ \item[\hskip\labelsep{\indent\it #1\ #2\ \normalstyle(#3)}]\itemindent\tmpitemindent}
+\def\@endtheorem{\endtrivlist\unskip}
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\if@twoside\else\raggedbottom\fi
+
+%% Definition for Big letter at the beginning of a paragraph
+%%
+\def\PARstart#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartCal#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartLyX#1{\PARstart #1}
+\def\PARstartCalLyX#1{\PARstartCal #1}
+
+\if@technote\def\PARstart#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartCal#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartLyX#1{#1}\fi % if technical note, disable it
+\if@technote\def\PARstartCalLyx#1{#1}\fi % if technical note, disable it
+
+% **************************************************************************
+% ***** Misc. Definitions **********************************************
+% **************************************************************************
+%Restore single spacing
+\newcommand{\blsone}{\renewcommand\baselinestretch{1}%
+ \renewcommand\arraystretch{1.2}\setlength{\parindent}{\parindentsave}%
+ \normalsize}
+\newcommand{\capitem}[1]{{\hspace{0.2ex}(#1)}~}
+\newcommand{\insdate}{}
+
+% **************************************************************************
+% ***** MATH Definitions ***********************************************
+% **************************************************************************
+\def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \eqnarr@ysep\hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \eqnarr@ysep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\def\endeqnarray{%
+ \@@eqncr
+ \egroup
+ \global\advance\c@equation\m@ne
+ $$\@ignoretrue
+}
+
+% **************************************************************************
+% ***** Biography Definitions ******************************************
+% **************************************************************************
+% This is the main code for the biography environment of the IEEE
+% transactions class. The previous biography code had some known
+% problems which were difficult to fix. The crux of the issue was that
+% the photo frame was overlaid by text when \baselinestretch>1 or when
+% the biography consisted of multiple short paragraphs.
+%
+% The fix was done by extracting code from the excellent package:
+% 'picinpar.sty' version 1.2a as of july 13, 1993
+% by Friedhelm Sowa
+%
+% (At least most of) The bugs you find in this code were introduced
+% unwittingly by myself.
+%
+%----------------
+% Known problems:
+%
+% - Don't use multiple blank lines to separate paragraphs. A single
+% blank line works well, but multiple blank lines will confuse
+% the code. This has something to do with the \def\par{\\\indent}
+% line, but I can't think of an appropriate fix. Similarly, make
+% sure the environment doesn't end with an extra blank line.
+% - Don't use \samepage
+% - Use \footnotemark within and \footnotetext outside the
+% window-environment instead of \footnote
+% - When using the epic-package load picinpar before epic
+% like \documentstyle[...,picinpar,epic]{...}
+%
+% Counts
+\newcount\br \newcount\nb \newcount\tcdsav \newcount\tcl \newcount\tcd
+\newcount\tcn \newcount\cumtcl
+% Dimens
+\newdimen\rtside \newdimen\hpic \newdimen\vpic \newdimen\strutilg
+\newdimen\picwd \newdimen\topheight \newdimen\ilg \newdimen\lpic
+\newdimen\lwindowsep \newdimen\rwindowsep % VK 10 Feb 93
+\lwindowsep0.5\baselineskip % "
+\rwindowsep0.5\baselineskip % "
+\newdimen\cumpar
+% Tokens
+\newtoks\twa \newtoks\la \newtoks\ra \newtoks\ha \newtoks\pictoc
+% Boxes
+\newbox\rawtext \newbox\holder \newbox\windowbox \newbox\wartext
+\newbox\finaltext \newbox\aslice \newbox\bslice \newbox\wbox
+\newbox\wstrutbox \newbox\picbox \newbox\waslice \newbox\wbslice
+\newbox\fslice
+ % Another strut
+\def\wstrut{\relax\ifmmode\copy\wstrutbox\else\unhcopy\wstrutbox\fi}
+%
+
+\def\getpic#1{\sbox{\@tempboxa}{\includegraphics{#1}}%
+\newcount\tmpcta \tmpcta=\ht\@tempboxa%
+\newcount\tmpctb \tmpctb=\wd\@tempboxa%
+\divide\tmpctb by 100%
+\divide\tmpcta by\tmpctb%
+\ifnum\tmpcta>133%
+\typeout{ieee: Biography picture `#1' too tall.}%
+\frame{\hbox to 25mm{\hfil\resizebox{!}{32mm}{\usebox{\@tempboxa}}\hfil}}%
+\else \ifnum\tmpcta<123%
+\typeout{ieee: Biography picture `#1' too wide.}%
+\frame{\vbox to 32mm{\vss\hbox{\resizebox{25mm}{!}{\usebox{\@tempboxa}}}\vss}}%
+\else%
+\resizebox{25mm}{32mm}{\usebox{\@tempboxa}}
+\fi\fi}
+
+\long\def\biographyLyX#1{\if@non\else\begin{biography} #1\end{biography}\fi}
+
+\if@non
+ \long\def\biography{}
+\else
+ \long\def\biography{\@ifnextchar [{\@biographyb}{\@biographya[{\unitlength
+ 1mm\hbox{\framebox(25,32){}}}]}}
+\fi
+
+\long\def\@biographyb[#1]{\@biographya[\getpic{#1}]}
+
+\long\def\@biographya[#1]#2{\bgroup
+\footnotesize\bigskip\bigskip\bigskip\parskip=0pt\par%
+\rule{0pt}{35mm}\vspace*{-35mm}\par% garantees correct page breaking
+\begin{main@bio}[{#1}]%
+\noindent{\bf #2}%
+}
+\def\endbiography{\if@non\else\end{main@bio}\egroup\fi}
+
+\long\def\main@bio[#1]{% #1 is the material for setting a graphic box
+\vskip\parskip\everypar{}
+\global\cumpar=0pt
+\global\cumtcl=0
+ \tcd=0
+ \rtside=0pt
+% \hpic=\linewidth
+ \twa={} \la={} \ra={} \ha={}
+\setbox\wbox=\hbox{(}
+\computeilg
+\pictoc={#1}
+\setbox\windowbox=\vbox{\hbox{#1}}
+\picwd=\wd\windowbox
+\hpic=\picwd
+\vpic=\ht\windowbox\advance\vpic\dp\windowbox
+\rtside=\linewidth\advance\rtside-\picwd
+\setbox\picbox=\vbox{\hsize=\hpic\vbox to\vpic{\box\windowbox}}% \vfill}}%
+
+\vpic=\ht\picbox\advance\vpic\dp\picbox
+\ifdim\rtside>0pt\advance\rtside-\rwindowsep\fi % "
+\global\br=\rtside
+\ifnum\picwd=0
+\ifdim\vpic>0pt\picwd=\hpic
+\else\vpic=\ht\picbox\advance\vpic\dp\picbox
+\fi
+\fi
+ \global\tcl=0 \lpic=0pt
+ \loop\global\advance\tcl by 1 \lpic=\tcl\baselineskip
+ \ifdim\lpic<\vpic\repeat
+ \vpic=\lpic
+ \global\cumtcl=\tcl
+%
+% Here we know exactly the number of indented lines and
+% are able to generate the tokens for the \parshape list
+%
+ \ifnum\br>0\ra={ 0pt \rtside}\fi
+ \ifnum\tcd>0\ha={ 0pt \linewidth}\fi
+ \ifnum\tcl<1\global\tcl=1\fi
+ \createparshapespec
+ \tcd=0 % restore the lintel
+ \global\tcdsav=0
+%
+% This is a very tricky part of the package. Some day there
+% will exist a detailed documentation.
+%
+\def\par{\\\indent}
+%
+% This is where we start to pick up the paragraph(s)
+%
+ \setbox\rawtext=\vbox\bgroup\unvbox\rawtext\unskip
+ \clubpenalty=0\widowpenalty=0
+ \ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+ \tolerance=1000
+ \parshape=\tcn \the\twa }
+%
+\def\endmain@bio{%
+ %\par
+ \global\tcd=\tcdsav
+ \egroup\vskip\parskip\parshape=0 % reset parshape; end \box\rawtext
+ \vbadness=10000
+ \splittopskip=0pt
+%
+% Now we build the boxes beside the window
+%
+\global\topheight=\tcl\baselineskip
+\ifnum\br>0\setbox\holder=\vsplit\rawtext to\topheight\fi
+\tcn=\tcl \nb=0
+\ifnum\br>0\nb=\tcn\fi
+%
+% text on the right side
+%
+\ifnum\nb>0
+ \loop\advance\nb -1
+ \setbox\bslice=\vsplit\holder to\baselineskip
+ \prune\bslice\rtside
+ \setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+ to\rtside{\box\bslice\hfil}}
+ \ifdim\ht\holder>0pt\repeat
+\fi
+%GLP add fix to make sure bio starts at top of picture
+\setbox\wbslice=\vbox to\topheight{\unvbox\wbslice\vfill\vss}
+%
+% fixing the dimensions of the window part
+%
+\topheight=\ht\wbslice
+%
+% ship out the window material to the main vertical list
+%
+\setbox\windowbox=\vbox{\hbox to\linewidth{%
+\vbox to\topheight{\hrule width\picwd height0pt depth0pt\vskip0pt%
+\vfill\unvbox\picbox%
+\ifnum\picwd>0\vfill\fi%
+\vss}\ifnum\br>0\hfill\vbox{\box\wbslice}\fi}}%
+%
+\unvbox\windowbox%
+\loop% lines below picture....
+ \setbox\bslice=\vsplit\rawtext to\baselineskip
+ \prune\bslice\linewidth
+ \setbox\wbslice=\vbox{\hbox to\linewidth{\box\bslice\hfil}}
+ \unvbox\wbslice
+ \ifdim\ht\rawtext>0pt
+\repeat
+%GLP
+%\ifnum\nb>0\topheight=\nb\baselineskip %\advance\topheight by\ilg
+%\vspace*{\topheight}
+%\fi
+}% FINITO
+%
+% What else do we need?
+%
+\def\prune#1#2{
+% take a \vbox containing a single \hbox,
+% \unvbox it, and cancel the \lastskip
+% put in a \hbox of width #2
+ \unvbox#1 \setbox#1=\lastbox % \box#1 now is an \hbox
+ \ifdim\ht#1=\parskip
+ \setbox#1=\hbox to#2{\vrule height\parskip depth0pt width0pt\hfill}
+ \else\ifdim\ht#1=0pt\relax
+ \else\setbox#1=\hbox to#2{\wstrut\unhbox#1\unskip}\fi\fi}
+%
+% Here the token \twa is generated.
+% It's not so difficult as it looks like.
+%
+\def\createparshapespec{%
+\global\tcn=0
+\ifnum\br>0\global\tcn=\tcl\fi
+\nb=0
+\ifnum\br>0\nb=\tcn\fi
+\global\advance\tcn by\tcd \global\advance\tcn by1
+\ifnum\tcd>0
+\loop\twa=\expandafter{\the\twa\the\ha}\advance\tcd -1
+\ifnum\tcd>0\repeat
+\fi
+\ifnum\nb>0
+\loop\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\nb>0\repeat
+\fi
+\global\twa=\expandafter{\the\twa 0pt \the\linewidth}}
+%
+\def\computeilg{% compute the interline glue
+ \tcl=0\ilg=0pt\strutilg=0pt
+ \loop\setbox\wbox=\hbox{\char\tcl}
+ \ifdim\ht\wbox>\ilg\ilg=\ht\wbox\fi
+ \ifdim\dp\wbox>\strutilg\strutilg=\dp\wbox\fi
+ \advance\tcl by 1
+ \ifnum\tcl<128\repeat
+ \ht\wbox=\ilg
+ \dp\wbox=\strutilg
+ \strutilg=\ht\wbox %\advance\strutilg by\ilg
+ \ifdim\strutilg>\baselineskip
+ \typeout{character with height greater baselineskip found in font}
+ \typeout{baselineskip changed to 1.5 of that height!}
+ \baselineskip=1.5\strutilg
+ \fi
+ \global\ilg=\baselineskip
+ \global\advance\ilg-\ht\wbox \global\advance\ilg-\dp\wbox
+ \strutilg=\ht\wbox \advance\strutilg by\ilg
+ \setbox\wstrutbox=\hbox{\vrule height\strutilg depth\dp\wbox width0pt}}
+
+
+% the following code from version.sty by Stephen Bellantoni 1990, loosely
+% based on "annotation.sty" by Tom Hofmann. Used to exclude "biography" from
+% anonymous mode.
+\begingroup
+\catcode`@=11\relax%
+\catcode`{=12\relax\catcode`}=12\relax%
+\catcode`(=1\relax \catcode`)=2\relax%
+\gdef\glpinclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ ()%
+ \expandafter\gdef\csname end#1\endcsname%
+ ()%
+)%
+\gdef\glpexclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ (\@bsphack\catcode`{=12\relax\catcode`}=12\relax\csname #1@NOTE\endcsname)%
+ \long\expandafter\gdef\csname #1@NOTE\endcsname ##1\end{#1}%
+ (\csname #1END@NOTE\endcsname)%
+ \expandafter\gdef\csname #1END@NOTE\endcsname%
+ (\@esphack\end(#1))%
+)%
+\endgroup
+
+%-------
+\def\@confplacedate{\typeout{ieee: Warning! No \noexpand\confplacedate set!}
+\bfseries `confplacedate' needs to be set. For example, to: Stanford, CA, USA,
+September 29--30, 1991}
+\def\confplacedate#1{\def\@confplacedate{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% End of ieee.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/sigproc.bib b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/sigproc.bib
new file mode 100644
index 000000000..b8fc175a9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/sigproc.bib
@@ -0,0 +1,2589 @@
+@BOOK{salas:calculus,
+ AUTHOR = "S.L. Salas and Einar Hille",
+ TITLE = "Calculus: One and Several Variable",
+ PUBLISHER = "John Wiley and Sons",
+ ADDRESS = "New York",
+ YEAR = "1978" }
+
+@inproceedings{804350,
+ author = {Thomas J. Schaefer},
+ title = {The complexity of satisfiability problems},
+ booktitle = {{STOC}'78},
+ year = {1978},
+ pages = {216--226},
+ location = {San Diego, California, United States},
+ doi = {http://doi.acm.org/10.1145/800133.804350},
+}
+
+Proceedings of the tenth annual ACM symposium on Theory of computing --
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings{smith94phase,
+ author = "Barbara Smith",
+ title = "The Phase Transition in Constraint Satisfaction Problems: {A} {CL}oser Look at the Mushy Region",
+ booktitle = {{ECAI}'94},
+ year = "1994"
+}
+
+@inproceedings{swdia,
+ author = "Chanseok Oh",
+ title = "{MiniSat HACK 999ED, MiniSat HACK 1430ED and SWDiA5BY}",
+ booktitle = "SAT Competition 2014 Booklet",
+ year = "201",
+}
+
+@inproceedings{lingeling,
+ author = "Armin Biere",
+ title = "Yet another Local Search Solver and Lingeling and Friends Entering the SAT Competition 2014",
+ booktitle = "SAT Competition 2014 Booklet",
+ year = "2014",
+}
+
+@inproceedings{cheeseman91where,
+ author = "Peter Cheeseman and Bob Kanefsky and William M. Taylor",
+ title = "Where the Really Hard Problems Are",
+ booktitle = "IJCAI-91",
+ pages = "331--337",
+ year = "1991",
+}
+Proceedings of the Twelfth International Joint Conference on Artificial Intelligence, Sidney, Australia
+
+@INPROCEEDINGS{Juels-2004-scn,
+ author = {Juels, Ari},
+ title = {Minimalist Cryptography for Low-Cost {RFID} Tags},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2004},
+ year = {2004},
+ editor = {Blundo, Carlo and Cimato, Stelvio},
+ volume = {3352},
+ series = {LNCS},
+ pages = {149--164},
+ month = {September},
+ publisher = {Springer-Verlag},
+ address = {Amalfi, Italia},
+}
+
+
+@inproceedings{achlioptas-threshold,
+ author = {Dimitris Achlioptas and Yuval Peres},
+ title = {The Threshold for Random k-{SAT} is 2\^\ k(ln 2 - O(k))},
+ booktitle = {{STOC}'03},
+ year = {2003},
+ isbn = {1-58113-674-9},
+ pages = {223--231},
+ location = {San Diego, CA, USA},
+ doi = {http://doi.acm.org/10.1145/780542.780577},
+}
+Proceedings of the thirty-fifth annual ACM symposium on Theory of computing --
+publisher = {ACM Press}
+address = {New York, NY, USA}
+
+@article{DPLL,
+ author = {Martin Davis and Hilary Putnam},
+ title = {A Computing Procedure for Quantification Theory},
+ journal = {J. ACM},
+ volume = {7},
+ number = {3},
+ year = {1960},
+ issn = {0004-5411},
+ pages = {201--215},
+ doi = {http://doi.acm.org/10.1145/321033.321034},
+}
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings {Minisat+,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Translating {P}seudo-{B}oolean constraints into {SAT}},
+ booktitle= {Journal on Satisfiability, Boolean Modeling and Computation},
+ year = {2006},
+ pages = {1-26},
+ volume = {2},
+}
+
+@inproceedings {EenS03MiniSat,
+ title = {An Extensible {SAT}-solver},
+ author = {Niklas E\'en and Niklas S\"{o}rensson},
+ booktitle = {SAT},
+ editor = {Enrico Giunchiglia and Armando Tacchella},
+ pages = {502--518},
+ publisher = {Springer},
+ series = {LNCS},
+ url = {http://dblp.uni-trier.de/db/conf/sat/sat2003.html#EenS03},
+ volume = {2919},
+ year = {2003},
+ ee = {http://www.cs.chalmers.se/Cs/Research/FormalMethods/MiniSat/cgi/MiniSat.ps.gz.cgi},
+ keywords = {2003 2004 SAT-solver ais-07w efficiency implementation },
+}
+
+@misc { toolbar,
+ author="S. Bouveret and F. Heras and S. de Givry and J. Larrosa and M. Sanchez and T. Schiex",
+ title="Toolbar: a state-of-the-art platform for wcsp",
+ url="http://www.inra.fr/mia/T/degivry/ToolBar.pdf",
+ year="2004"
+}
+
+@inproceedings{1267340,
+ author = {Kirschenbaum, Ilan and Wool, Avishai},
+ title = {How to build a low-cost, extended-range {RFID} skimmer},
+ booktitle = {USENIX-SS'06: Proceedings of the 15th conference on {USENIX} Security Symposium},
+ year = {2006},
+ location = {Vancouver, B.C., Canada},
+ publisher = {{USENIX} Association},
+ address = {Berkeley, CA, USA},
+}
+
+@misc{Benetton-boycott,
+ author = {{CASPIAN - Consumers Against Supermarket Privacy Invasion and Numbering}},
+ howpublished={Press release},
+ note= {\url{http://www.boycottbenetton.com}},
+ title = {Boycott {B}enetton},
+ year = {2003},
+ month = {March},
+}
+
+@article{ improved-deterministic,
+ author="Michael H. Schulz and Elisabeth Auth",
+ title="Improved Deterministic Test Pattern Generation with Applications to Redundancy Identification",
+ year="1989",
+ month="July",
+ journal="IEEE Transactions on computer-aided design",
+ volume="8",
+ number="7",
+ pages={811--816},
+ issn="0278-0070"
+}
+publisher = " IEEE Circuits and Systems Society",
+address="Piscataway, NJ 08854, USA",
+
+@inproceedings{244560,
+ author = {Jo\&\#227;o P. Marques Silva and Karem A. Sakallah},
+ title = {{GRASP}-a new search algorithm for satisfiability},
+ booktitle = {ICCAD'96},
+ year = {1996},
+ isbn = {0-8186-7597-7},
+ pages = {220--227},
+ location = {San Jose, California, United States},
+ publisher = {IEEE Computer Society},
+}
+Proceedings of the 1996 IEEE/ACM international conference on Computer-aided design ---
+address = {Washington, DC, USA},
+
+ @inproceedings{ chai03fast,
+ author = "D. Chai and A. Kuehlmann",
+ title = "A fast pseudo-boolean constraint solver",
+ pages = {305--317},
+ booktitle = "IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 2003",
+ year = {2003},
+ month =" mar",
+ volume = "24",
+ issue = "3",
+ issn = "0278-0070"
+}
+publisher = "IEEE Circuits and Systems Society",
+
+@TechReport{EPC-standard,
+ author = "EPCglobal",
+ url="http://www.epcglobalinc.org/standards/specs/13.56_MHz_ISM_Band_Class_1_RFID_Tag_Interface_Specification.pdf",
+ title="13.56 {MHz} {ISM} Band Class 1 Radio Frequency Identification Tag Interface Specification (2003)",
+ institution = "Auto-ID cetner, MIT",
+ year ="2003",
+ month = "February",
+ version = "1.0.0"
+}
+address = "77 massachusetts avenue, bldg 3-449, cambridge, ma 02139-4307, USA",
+
+@INPROCEEDINGS{LuLHHN-2007-percom,
+ author = {Lu, Li and Liu, Yunhao and Hu, Lei and Han, Jinsong and Ni, Lionel},
+ title = {A Dynamic Key-Updating Private Authentication Protocol for {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {13--22},
+ month = {March},
+ organization = {IEEE}
+}
+International Conference on Pervasive Computing and Communications
+publisher = {IEEE Computer Society Press}
+address = {New York, USA},
+
+@INPROCEEDINGS{Ohkubo04Efficient,
+ author = {Ohkubo, Miyako and Suzuki, Koutarou and Kinoshita, Shingo},
+ title = {Efficient Hash-Chain Based {RFID} Privacy Protection Scheme},
+ booktitle = {International Conference on Ubiquitous Computing --- Ubicomp 2004, Workshop Privacy: Current Status and Future Directions},
+ month = {September},
+ year = {2004},
+ address = {Nottingham, England},
+}
+
+@INPROCEEDINGS{MolnarSW-2005-sac,
+ author = {Molnar, David and Soppera, Andrea and Wagner, David},
+ title = {A Scalable, Delegatable Pseudonym Protocol Enabling Ownership Transfer of {RFID} Tags},
+ booktitle = {Selected Areas in Cryptography --- SAC 2005},
+ editor = {Preneel, Bart and Tavares, Stafford},
+ volume = {3897},
+ series = {LNCS},
+ pages = {276--290},
+ month = {August},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+ year = {2005},
+ address = {Kingston, Canada},
+}
+
+@inproceedings{DBLP:conf/otm/FeldhoferR06,
+ author = {Martin Feldhofer and Christian Rechberger},
+ title = {A Case Against Currently Used Hash Functions in {RFID} Protocols},
+ booktitle = {OTM Workshops (1)},
+ year = {2006},
+ pages = {372-381},
+ ee = {http://dx.doi.org/10.1007/11915034_61},
+ crossref = {DBLP:conf/otm/2006-w1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/otm/2006-w1,
+ editor = {Robert Meersman and Zahir Tari and Pilar Herrero},
+ title = {On the Move to Meaningful Internet Systems 2006: OTM 2006 Workshops, OTM Confederated International Workshops and Posters, AWeSOMe, CAMS, COMINF, IS, KSinBIT, MIOS-CIAO, MONET, OnToContent, ORM, PerSys, OTM Academy Doctoral Consortium, RDDS, SWWS, and SeBGIS 2006, Montpellier, France, October 29 - November 3, 2006. Proceedings, Part I},
+ booktitle = {OTM Workshops (1)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4277},
+ year = {2006},
+ isbn = {3-540-48269-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@INPROCEEDINGS{VajdaB-2003-ubicom,
+ author = {Vajda, Istv\'an and Butty\'an, Levente},
+ title = {Lightweight Authentication Protocols for Low-Cost {RFID} Tags},
+ booktitle = {Ubicomp 2003 Second Workshop on Security in Ubiquitous Computing},
+ month = {October},
+ year = {2003}
+}
+address = {Seattle, WA, USA},
+
+@INPROCEEDINGS{LiW-2007-sec,
+ author = {Li, Tieyan and Wang, Guilin},
+ title = {Security Analysis of Two Ultra-Lightweight {RFID} Authentication Protocols},
+ booktitle = {IFIP SEC 2007},
+ month = {May},
+ organization = {IFIP},
+}
+year = {2007},
+address = {Sandton, Gauteng, South Africa},
+
+@MISC{BatinaGKMTV-2006-eprint,
+ author = {Batina, Lejla and Guajardo, Jorge and Kerins, Tim and Mentens, Nele and Tuyls, Pim and Verbauwhede, Ingrid},
+ title = {An Elliptic Curve Processor Suitable For {RFID}-Tags},
+ howpublished = {Cryptology ePrint Archive, Report 2006/227},
+ year = {2006},
+ organization = {IACR},
+}
+
+@inproceedings {AES-grain-sand,
+ title = {{AES} implementation on a grain of sand},
+ issue = "1",
+ ISSN="1747-0722",
+ pages = {13--20},
+ author="Feldhofer, M. and Wolkerstorfer, J. and Rijmen, V.",
+ year = "2005",
+ voulme="152",
+ booktitle = "Information Security",
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press},
+
+@MISC{Juels-2005-manuscript-2,
+ author = {Juels, Ari},
+ title = {{RFID} Security and Privacy: A research Survey},
+ howpublished = {Manuscript},
+ year = {2005},
+ month = {September},
+ organization = {RSA Laboratories},
+}
+
+@INPROCEEDINGS{JuelsW-2007-percom,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {{Defining Strong Privacy for RFID}},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2007},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {342--347},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Vaudenay-2007-asiacrypt,
+ author = {Vaudenay, Serge},
+ title = {On Privacy Models for {RFID}},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2007},
+ year = {2007},
+ editor = {},
+ volume = {4833},
+ series = {LNCS},
+ pages = {68--87},
+ address = {Kuching, Malaysia},
+ month = {December},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{BolotnyyR-2007-percom,
+ author = {Bolotnyy, Leonid and Robins, Gabriel},
+ title = {Physically Unclonable Function-Based Security and Privacy in {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {211--220},
+ month = {March},
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press}
+International Conference on Pervasive Computing and Communications --
+address = {New York, USA},
+
+@INPROCEEDINGS{JuelsRS-2003-ccs,
+ author = {Juels, Ari and Rivest, Ronald and Szydlo, Michael},
+ title = {The Blocker Tag: Selective Blocking of {RFID} Tags for Consumer Privacy},
+ booktitle = {ACM CCS 2003},
+ year = {2003},
+ editor = {Atluri, Vijay},
+ pages = {103--111},
+ month = {October},
+ publisher = "ACM Press"
+}
+address = {Washington, DC, USA},
+Conference on Computer and Communications Security
+organization = "ACM",
+
+@INPROCEEDINGS{JuelsW-2005-crypto,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {Authenticating Pervasive Devices with Human Protocols},
+ booktitle = {Advances in Cryptology --- CRYPTO'05},
+ year = {2005},
+ editor = {Shoup, Victor},
+ volume = {3126},
+ series = {LNCS},
+ pages = {293--308},
+ month = {August},
+ organization = {IACR},
+ address = {Santa Barbara, California, USA},
+ publisher = {Springer-Verlag},
+ series = {LNCS},
+}
+
+@inproceedings{ zhang01efficient,
+ author = "Lintao Zhang and Conor F. Madigan and Matthew W. Moskewicz and Sharad Malik",
+ title = "Efficient Conflict Driven Learning in Boolean Satisfiability Solver",
+ booktitle = "{ICCAD}",
+ pages = "279-285",
+ year = "2001",
+ url = "citeseer.ist.psu.edu/article/zhang01efficient.html" }
+
+
+@INPROCEEDINGS{ButtyanHV-2006-pet,
+ author = {Butty\'an, Levente and Holczer, Tam\'as and Vajda, Istv\'an},
+ title = {Optimal Key-Trees for Tree-Based Private Authentication},
+ booktitle = {Workshop on Privacy Enhancing Technologies --- PET 2006},
+ pages = {332-350},
+ month = {June},
+ year = {2007},
+ address = {Cambridge, United Kingdom},
+}
+
+
+@INPROCEEDINGS{Castelluccia07Secret,
+ author = {Castelluccia, Claude and Soos, Mate},
+ title = {Secret Shuffling: A Novel Approach to {RFID} Private Identification},
+ booktitle = {{RFIDSec}'07},
+ pages = {169-180},
+ year = {2007},
+ month = {July}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@INPROCEEDINGS{breaking-lmap,
+ author = {Mihaly B\'arasz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel Nagy},
+ title = {Breaking {LMAP}},
+ pages = {69-78},
+ month = {July},
+ year = {2007},
+ booktitle = {Conference on RFID Security --- {RFIDSec}'07},
+ address = {Malaga, Spain},
+}
+
+@INPROCEEDINGS{Initial-SRAM,
+ author = {Daniel Holcom and Wayne Burleson and Kevin Fu.},
+ title = {Initial {SRAM} state as a Fingerprint and Source of True Random Numbers for {RFID} Tags},
+ booktitle = {{RFIDSec}'07},
+ pages = {29-40},
+ month = {July},
+ year = {2007}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@inproceedings{HBattack,
+ author = {Gilbert, Henri and Robshaw, Matt and Sibert, Herve},
+ title = {An Active Attack Against {HB}$^+$ - A Provably Secure Lightweight Authentication Protocol},
+ booktitle = {IEE Electronic Letters 41, 21},
+ year = {2005},
+ pages = {1169--1170}
+}
+
+@INPROCEEDINGS{KatzS-2006-eurocrypt,
+ author = {Katz, Jonathan and Sun Shin, Ji},
+ title = {Parallel and Concurrent Security of the {HB} and {HB}$^{+}$ Protocols},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '06},
+ organization = {IACR},
+ year = {2006}
+}
+Advances in Cryptology
+publisher = {Springer-Verlag},
+
+@MISC{KatzS-2006-eprint,
+ author = {Katz, Jonathan and Smith, Adam},
+ title = {Analyzing the {HB} and {HB}+ Protocols in the ``Large Error'' Case},
+ howpublished = {Cryptology ePrint Archive, Report 2006/326},
+ organization = {IACR},
+}
+
+@inproceedings{1229319,
+ author = {Tri Van Le and Mike Burmester and Breno de Medeiros},
+ title = {Universally composable and forward-secure {RFID} authentication and authenticated key exchange},
+ booktitle = {Proceedings of the 2nd ACM symposium on Information, Computer and Communications Security --- {ASIACCS}'07},
+ year = {2007},
+ isbn = {1-59593-574-6},
+ pages = {242--252},
+ location = {Singapore},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ doi = {http://doi.acm.org/10.1145/1229285.1229319},
+}
+
+
+
+@INPROCEEDINGS{PUF-based-RNG,
+ author = {Charles W. O'Donnell and G. Edward Suh and Srinivas Devadas},
+ title = {{PUF}-Based Random Number Generation},
+ booktitle = {MIT CSAIL CSG Technical Memo 481},
+ url = {http://csg.csail.mit.edu/pubs/memos/Memo-481/Memo-481.pdf},
+ year = {2004},
+ month = {November}
+}
+
+@book{Ipatov05Spread,
+ author = {Valeri P. Ipatov},
+ year = {2005},
+ month = {May},
+ title = {Spread Spectrum and {CDMA}: {P}rinciples and Applications},
+ publisher = {John Wiley \& Sons, Ltd.},
+ ISBN = {978-0470091784},
+}
+
+@article{DBLP:journals/ijwmc/HellJM07,
+ author = {Martin Hell and
+ Thomas Johansson and
+ Willi Meier},
+ title = {Grain: a stream cipher for constrained environments},
+ journal = {IJWMC},
+ volume = {2},
+ number = {1},
+ year = {2007},
+ pages = {86-93},
+ ee = {http://dx.doi.org/10.1504/IJWMC.2007.013798},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{applied-crypto,
+ year= {1996},
+ ISBN ={0-8493-8523-7},
+ author={Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone},
+ title ={Handbook of applied cryptography},
+ publisher={CRC Press},
+ address={Boca Raton, Florida},
+}
+url={http://cacr.math.uwaterloo.ca/hac}
+
+@inproceedings{DiPietro07Information,
+ author={Roberto Di Pietro and Refik Molva},
+ title={Information confinement, privacy, and security in {RFID} systems},
+ month={September},
+ booktitle={Proceedings of the 12th European Symposium On Research In Computer Security},
+ year={2007},
+ pages={187-202},
+}
+
+@inproceedings{PerisHER-2006-rfidsec,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{LMAP}: A Real Lightweight Mutual Authentication Protocol for Low-cost {RFID} tags},
+ booktitle = {Proceedings of {RFIDSec}'06},
+ year = {2006},
+ month = {July},
+ address = {Graz, Austria},
+ organization = {Ecrypt},
+}
+
+@INPROCEEDINGS{BringerCD-2006-secperu,
+ author = {Bringer, Julien and Chabanne, Herv\'e and Dottax Emmanuelle},
+ title = {{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+ booktitle = {{IEEE} SecPerU 2006},
+ year = {2006},
+ month = {June},
+ organization = {IEEE},
+}
+International Conference on Pervasive Services, Workshop on Security, Privacy and Trust in Pervasive and Ubiquitous Computing
+address = {Lyon, France},
+publisher = {IEEE Computer Society Press},
+
+@INPROCEEDINGS{PerisHER-2006-uic,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{M2AP}: A Minimalist Mutual-Authentication Protocol for Low-cost {RFID} Tags},
+ booktitle = {International Conference on Ubiquitous Intelligence and Computing --- {UIC}’06},
+ year = {2006},
+ editor = {},
+ volume = {4159},
+ pages = {912--923},
+ month = {September},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+}
+
+
+@INPROCEEDINGS{M2AP-break,
+ author={Mih\'aly B\'ar\'asz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel A. Nagy},
+ title={Passive Attack Against the {M2AP} Mutual Authentication Protocol for {RFID} Tags},
+ year = {2007},
+ month= {September},
+ date = {24-25},
+ booktitle={{RFID} 2007 --- The First International {EURASIP} Workshop on {RFID} Technology},
+ country = {Austria},
+ city={Vienna}
+}
+
+@INPROCEEDINGS{HBppbreak,
+ author= {Henri Gilbert and Matthew J.B. Robshaw and Yannick Seurin},
+ title={Good Variants of {HB}+ are Hard to Find},
+ year={2008},
+ month={January},
+ booktitle={Financial Cryptography},
+ publisher={Springer},
+ country={Mexico}
+}
+
+@inproceedings{MAGMA,
+ author = {Wieb Bosma and John Cannon and Graham Matthews},
+ title = {Programming with algebraic structures: design of the {MAGMA} language},
+ booktitle = {Proceedings of the international symposium on Symbolic and algebraic computation --- ISSAC '94},
+ year = {1994},
+ isbn = {0-89791-638-7},
+ pages = {52--57},
+ location = {Oxford, United Kingdom},
+ doi = {http://doi.acm.org/10.1145/190347.190362},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+@inproceedings{Singular,
+ author = {Gert-Martin Greuel and Gerhard Pfister and Hans Sch\"{o}nemann},
+ title = {{SINGULAR} --- A computer algebra system for polynomial computations},
+ booktitle = {Symbolic computation and automated reasoning},
+ year = {2001},
+ isbn = {1-56881-145-4},
+ pages = {227--233},
+ publisher = {A. K. Peters, Ltd.},
+ address = {Natick, MA, USA},
+}
+
+@misc{SAGE,
+ author = {{The SAGE Group}},
+ year = {2008},
+ title = {{SAGE} Mathematics Software},
+ note = {\url{http://www.sagemath.org}},
+}
+
+@misc{new-sparse-technique,
+ author={H{\aa}vard Raddum and Igor Semae},
+ title={New Technique for Solving Sparse Equation Systems},
+ month={January},
+ year={2006},
+ note={\url{eprint.iacr.org/2006/475/}},
+}
+
+@TechReport{algebraic-DES,
+ author={Nicolas T. Courtois and Gregory V. Bard},
+ title={Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ year={2006},
+ institution = {IACR E-print},
+ number = {2006/402},
+ month={November},
+ booktitle={IACR E-print, \url{http://eprint.iacr.org/2006/402}},
+}
+
+
+
+@inproceedings{early-DES-algebraic,
+ author={Chaum, David and Evertse, Jan-Hendrik},
+ title={Cryptanalysis of {DES} with a Reduced Number of Rounds},
+ booktitle = {Advances in Cryptology --- {CRYPTO}'85},
+ year = {1986},
+ pages = {192--211},
+ publisher = {Springer-Verlag}
+}
+
+@InProceedings{Bofilletal2008CAV,
+ author = {M. Bofill and R. Nieuwenhuis and A. Oliveras and E. Rodr\'\i guez-Carbonell and A. Rubio},
+ title = {The {B}arcelogic {SMT} Solver},
+ pages = {294-298},
+ booktitle = {{CAV}'08},
+ year = {2008},
+ series = {LNCS},
+ volume = {5123},
+ publisher = {Springer},
+ editor = {A. Gupta and S. Malik},
+}
+
+@techreport{RSAT,
+ author = {Knot Pipatsrisawat and Adnan Darwiche},
+ institution = {Automated Reasoning Group, Computer Science},
+ title = {{RS}at 2.0: {SAT} Solver Description},
+ year = {2007},
+}
+
+@inproceedings{DBLP:conf/fse/CourtoisBW08,
+ author = {Nicolas Courtois and Gregory V. Bard and David Wagner},
+ title = {Algebraic and Slide Attacks on {K}ee{L}oq},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {97-115},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_6},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{cryptoeprint:2008:166,
+ author = {Nicolas T. Courtois and Karsten Nohl and Sean O'Neil},
+ title = {Algebraic Attacks on the {C}rypto-1 Stream Cipher in {Mifare} {C}lassic and {O}yster Cards},
+ number = {2008/166},
+ institution = {Cryptology ePrint Archive},
+ year = {2008},
+}
+howpublished = {Cryptology ePrint Archive, Report 2008/166},
+note = {\url{http://eprint.iacr.org/}},
+
+@INPROCEEDINGS{Biere99symbolicmodel,
+ author = {Armin Biere and A. Cimatti and E. M. Clarke and M. Fujita and Y. Zhu},
+ title = {Symbolic Model Checking Using {SAT} Procedures instead of {BDDs}},
+ booktitle = {Proc. of Design Automation Conference ({DAC}'99)},
+ year = {1999},
+ pages = {317--320}
+}
+
+@INPROCEEDINGS{temporalinduction,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Temporal Induction by Incremental {SAT} Solving},
+ booktitle={Proc. of First Intrenational Workshop on Bounded Model Checking},
+ year={2003},
+ volume={89},
+ issue={4},
+ series={ENTCS},
+ publisher={Elsevier}
+}
+
+@inproceedings{ARMS02,
+ author = {Fadi A. Aloul and Arathi Ramani and Igor Markov and Karem Sakallah},
+ title = {Generic {ILP} versus Specialized 0-1 {ILP}: an Update},
+ booktitle = {Proc. ACM/IEEE Intl. Conf. Comp.-Aided Design},
+ pages = {450 - 457},
+ month = {November},
+ year = {2002},
+ URL = {http://www.gigascale.org/pubs/190.html}
+}
+
+@inproceedings{knowledge-compiling,
+ author={Adnan Dawiche},
+ title={New advances in compiling {CNF} to decomposable negation normal form},
+ booktitle={Proc. of European Conference on Artificial Intelligence},
+ year={2004},
+ pages={328 - 332},
+}
+
+@InProceedings{S-Match,
+ author = {Fausto Giunchiglia and Pavel Shvaiko and Mikalai Yatskevich},
+ title = {S-{M}atch: an algorithm and an implementation of semantic matching},
+ booktitle = {Semantic Interoperability and Integration},
+ year = {2005},
+ number = {04391},
+ series = {Dagstuhl Seminar Proceedings},
+ ISSN = {1862-4405},
+ publisher = {IBFI},
+ note = {\url{http://drops.dagstuhl.de/opus/volltexte/2005/37}},
+ editor = {Y. Kalfoglou and M. Schorlemmer and A. Sheth and S. Staab and M. Uschold},
+}
+publisher = {Internationales Begegnungs- und Forschungszentrum fuer Informatik (IBFI)},
+
+
+
+@techreport{bard-thesis,
+ author = {Gregory V. Bard},
+ title = {Algorithms for the Solution of Polynomial and Linear Systems of Equations over Finite Fields, with an Application to the Cryptanalysis of {K}ee{L}oq},
+ institution={University of Maryland Dissertation},
+ month={April},
+ year={2008},
+ note = {Ph.D. Thesis},
+}
+
+@inproceedings{Toyocrypt-nicolas-attack,
+ author={Nicolas T. Courtois},
+ title={Higher Order Correlation Attacks, {XL} algorithm and Cryptanalysis of {T}oyocrypt ({A}n updated version)},
+ booktitle={ICISC 2002},
+ series={LNCS},
+ volume={2587},
+ publisher={Springer},
+ year={2002},
+}
+
+@inproceedings{General-LFSR-attacks,
+ author={Nicolas T. Courtois and Willi Meier},
+ title={Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- EUROCRYPT '03},
+ series={LNCS},
+ volume={2656},
+ pages={345–359},
+ publisher={Springer},
+ address = {Warsaw, Poland}
+}
+
+@inproceedings{Canniere06Trivium,
+ author = {Christophe De Canni{\`e}re},
+ title = {Trivium: A Stream Cipher Construction Inspired by Block Cipher Design Principles},
+ booktitle = {ISC},
+ year = {2006},
+ pages = {171-186},
+ ee = {http://dx.doi.org/10.1007/11836810_13},
+ crossref = {DBLP:conf/isw/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/isw/2006,
+ editor = {Sokratis K. Katsikas and et al},
+ title = {Information Security, 9th International Conference, ISC 2006, Samos Island, Greece, August 30 - September 2, 2006, Proceedings},
+ booktitle = {ISC},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4176},
+ year = {2006},
+ isbn = {3-540-38341-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Javier Lopez and
+Michael Backes and
+Stefanos Gritzalis and
+Bart Preneel
+
+@inproceedings{BiviumWithSATsolvers,
+ author = {Tobias Eibach and Enrico Pilz and Gunnar V{\"o}lkel},
+ title = {Attacking {B}ivium Using {SAT} Solvers},
+ booktitle = {SAT},
+ year = {2008},
+ pages = {63-76},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79719-7_7},
+ crossref = {DBLP:conf/sat/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2008,
+ editor = {Hans Kleine B{\"u}ning and Xishun Zhao},
+ title = {Theory and Applications of Satisfiability Testing - SAT 2008, 11th International Conference, SAT 2008, Guangzhou, China, May 12-15, 2008. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4996},
+ year = {2008},
+ isbn = {978-3-540-79718-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{Bivium,
+ author={Havard Raddum},
+ title={Cryptanalytic results on {T}rivium},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2006},
+ number={2006/039},
+ note = {\url{www.ecrypt.eu.org/stream/papersdir/2006/039.ps}},
+}
+
+@misc{using-equation-solvers,
+ author = {Havard Raddum and Igor Semaev},
+ title = {New Technique for Solving Sparse Equation Systems},
+ howpublished = {Cryptology ePrint Archive, Report 2006/475},
+ year = {2006},
+ note = {\url{http://eprint.iacr.org/}},
+}
+
+
+@TechReport{BiviumWithMiniSat,
+ author={Cameron McDonald and Chris Charnes and Josef Pieprzyk},
+ title={Attacking {B}ivium with {M}ini{S}at},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2007},
+ number={2007/040}
+}
+
+@inproceedings{FaugereF5,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases without reduction to zero ({F}5)},
+ booktitle = {ISSAC '02},
+ year = {2002},
+ isbn = {1-58113-484-3},
+ pages = {75--83},
+ location = {Lille, France},
+ doi = {http://doi.acm.org/10.1145/780506.780516},
+ publisher = {ACM},
+ }
+ISSAC '02: Proceedings of the 2002 international symposium on Symbolic and algebraic computation
+address = {New York, NY, USA},
+
+
+@article{FaugereF4,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases ({F}4)},
+ journal = {Journal of Pure and Applied Algebra},
+ year = {1999},
+ month = {June},
+ pages = {61--88},
+ volume = {1},
+ number = {139},
+}
+
+@inproceedings{DismantlingMifare,
+ author = {Flavio D. Garcia and et al.},
+ title = {Dismantling {MIFARE} {C}lassic},
+ booktitle = {ESORICS},
+ year = {2008},
+ pages = {97-114},
+ ee = {http://dx.doi.org/10.1007/978-3-540-88313-5_7},
+ crossref = {DBLP:conf/esorics/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Gerhard de Koning Gans and
+Ruben Muijrers and
+Peter van Rossum and
+Roel Verdult and
+Ronny Wichers Schreur and
+Bart Jacobs
+
+@proceedings{DBLP:conf/esorics/2008,
+ editor = {Sushil Jajodia and Javier L{\'o}pez},
+ title = {Computer Security - ESORICS 2008, 13th European Symposium on Research in Computer Security, M{\'a}laga, Spain, October 6-8, 2008. Proceedings},
+ booktitle = {ESORICS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5283},
+ year = {2008},
+ isbn = {978-3-540-88312-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Karsten-webpage-HiTag2,
+ author={Karsten Nohl},
+ title={Description of {H}i{T}ag2},
+ howpublished={Press release},
+ note= {\url{http://cryptolib.com/ciphers/hitag2/}},
+ month={March},
+ day = {12},
+ year={2008},
+}
+
+@InProceedings{Ouafi08Privacy,
+ address = {Berlin},
+ affiliation = {EPFL},
+ author = {Ouafi, Khaled and Phan, Raphael C.-W.},
+ booktitle = {Information {S}ecurity {P}ractice and {E}xperience, 4th {I}nternational {C}onference, {ISPEC} 2008},
+ location = {Sydney, Australia},
+ oai-id = {oai:infoscience.epfl.ch:126418},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {263--277},
+ publisher = {Springer},
+ review = {REVIEWED},
+ series = {LNCS},
+ status = {PUBLISHED},
+ title = {Privacy of {R}ecent {RFID} {A}uthentication {P}rotocols},
+ unit = {LASEC},
+ year = {2008},
+ keywords = {RFID; authentication protocols, ; privacy; untraceability; provably secure},
+ details = {http://infoscience.epfl.ch/record/126418},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=126418&mode=best},
+}
+
+@INPROCEEDINGS{Ohkubo04Cryptographic,
+ author = {Miyako Ohkubo Koutarou and Koutarou Suzuki and Shingo Kinoshita},
+ title = {Cryptographic Approach to "Privacy-Friendly" Tags},
+ booktitle = {RFID Privacy Workshop},
+ year = {2003},
+ address = {MIT, Massachusetts, USA},
+ month = {November},
+}
+
+@article{Lamport81Password,
+ author = {Lamport,, Leslie},
+ title = {Password authentication with insecure communication},
+ journal = {Commun. ACM},
+ volume = {24},
+ number = {11},
+ year = {1981},
+ issn = {0001-0782},
+ pages = {770--772},
+ doi = {http://doi.acm.org/10.1145/358790.358797},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+@InProceedings{OSK_Avoine,
+ affiliation = {EPFL},
+ author = {Avoine, Gildas and Oechslin, Philippe},
+ booktitle = {The 2nd {IEEE} {I}nternational {W}orkshop on {P}ervasive {C}omputing and {C}ommunication {S}ecurity - {P}er{S}ec 2005},
+ details = {http://infoscience.epfl.ch/record/99461},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=99461&mode=best},
+ keywords = {NCCR-MICS; NCCR-MICS/CL3},
+ location = {Kauai island, Hawaii, USA},
+ oai-id = {oai:infoscience.epfl.ch:99461},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {110--114},
+ review = {REVIEWED},
+ status = {PUBLISHED},
+ title = {A {S}calable and {P}rovably {S}ecure {H}ash-{B}ased {RFID} {P}rotocol},
+ unit = {LASEC},
+ year = 2005
+}
+
+@inproceedings{Trade-off-Hellman,
+ author = {Hellman, Martin E.},
+ title = {A cryptanalytic time-memory trade off},
+ booktitle = {{IEEE} Transactions on Information Theory},
+ volume = {IT-26/4},
+ pages = {401--406},
+ year = {1980},
+}
+
+@inproceedings{Faster-crypto-time-memory,
+ author = {Oechslin, Philippe },
+ booktitle = {Advances in Cryptology --- CRYPTO 2003},
+ series = {LNCS},
+ volume = {2729},
+ publisher = {Springer},
+ pages = {617--630},
+ posted-at = {2008-07-07 15:11:06},
+ priority = {2},
+ title = {Making a Faster Cryptanalytic Time-Memory Trade-Off},
+ url = {http://www.springerlink.com/content/u9gxwd29p2tnx3wl},
+ year = {2003}
+}
+
+@inproceedings{Molnar04Keytrees,
+ address = {New York, NY, USA},
+ author = {Molnar, David and Wagner, David },
+ booktitle = {CCS '04: Proceedings of the 11th ACM conference on Computer and communications security},
+ citeulike-article-id = {202290},
+ doi = {10.1145/1030083.1030112},
+ isbn = {1581139616},
+ keywords = {libraries, privacy},
+ pages = {210--219},
+ posted-at = {2007-12-25 21:42:23},
+ priority = {5},
+ publisher = {ACM Press},
+ title = {Privacy and security in library {RFID}: issues, practices, and architectures},
+ url = {http://dx.doi.org/10.1145/1030083.1030112},
+ year = {2004}
+}
+
+@INPROCEEDINGS{NohlE-2008-sec,
+ author = {Nohl, Karsten and Evans, David},
+ title = {{Hiding in Groups: On the Expressiveness of Privacy Distributions}},
+ booktitle = {Proceedings of The Ifip Tc 11 23rd International Information Security Conference --- SEC 2008},
+ year = {2008},
+ editor = {},
+ volume = {278},
+ series = {LNCS},
+ pages = {1--15},
+ address = {Milan, Italia},
+ month = {September},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GIS), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/fse/Shamir08,
+ author = {Adi Shamir},
+ title = {{SQUASH} --- A New {MAC} with Provable Security Properties for Highly Constrained Devices Such as {RFID} Tags},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {144-157},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_9},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2008,
+ editor = {Kaisa Nyberg},
+ title = {Fast Software Encryption, 15th International Workshop, {FSE} 2008, Lausanne, Switzerland, February 10-13, 2008, Revised Selected Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5086},
+ year = {2008},
+ isbn = {978-3-540-71038-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Oren2008WIPRPublic,
+author = {Yossef Oren and Martin Feldhofer},
+title = {{WIPR} --- a Public Key Implementation on Two Grains of Sand},
+booktitle = {Workshop on RFID Security 2008},
+year = {2008},
+editor = {Sandra Dominikus},
+pages = {15 - 27},
+}
+
+@incollection{drat,
+year={2014},
+isbn={978-3-319-09283-6},
+booktitle={Theory and Applications of Satisfiability Testing – SAT 2014},
+volume={8561},
+series={Lecture Notes in Computer Science},
+editor={Sinz, Carsten and Egly, Uwe},
+doi={10.1007/978-3-319-09284-3_31},
+title={DRAT-trim: Efficient Checking and Trimming Using Expressive Clausal Proofs},
+url={http://dx.doi.org/10.1007/978-3-319-09284-3_31},
+publisher={Springer International Publishing},
+author={Wetzler, Nathan and Heule, MarijnJ.H. and Hunt, WarrenA., Jr.},
+pages={422-429},
+language={English}
+}
+
+
+@inproceedings{DBLP:conf/ctrsa/McLooneR07,
+ author = {M{\'a}ire McLoone and Matthew J. B. Robshaw},
+ title = {Public Key Cryptography and {RFID} Tags},
+ booktitle = {CT-RSA},
+ year = {2007},
+ pages = {372-384},
+ ee = {http://dx.doi.org/10.1007/11967668_24},
+ crossref = {DBLP:conf/ctrsa/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ctrsa/2007,
+ editor = {Masayuki Abe},
+ title = {Topics in Cryptology - CT-RSA 2007, The Cryptographers' Track at the RSA Conference 2007, San Francisco, CA, USA, February 5-9, 2007, Proceedings},
+ booktitle = {CT-RSA},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4377},
+ year = {2006},
+ isbn = {3-540-69327-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+
+@proceedings{DBLP:conf/eurocrypt/91,
+ editor = {Donald W. Davies},
+ title = {Advances in Cryptology --- EUROCRYPT '91, Workshop on the Theory and Application of of Cryptographic Techniques, Brighton, UK, April 8-11, 1991, Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {547},
+ year = {1991},
+ isbn = {3-540-54620-0},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/Girault91,
+ author = {Marc Girault},
+ title = {Self-Certified Public Keys},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ year = {1991},
+ pages = {490-497},
+ ee = {http://link.springer.de/link/service/series/0558/bibs/0547/05470490.htm},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cardis/Girault00,
+ author = {Marc Girault},
+ title = {Low-Size Coupons for Low-Cost {IC} Cards},
+ booktitle = {CARDIS},
+ year = {2000},
+ pages = {39-50},
+ crossref = {DBLP:conf/cardis/2000},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2000,
+ editor = {Josep Domingo-Ferrer and David Chan and Anthony Watson},
+ title = {Smart Card Research and Advanced Applications, Proceedings of the Fourth Working Conference on Smart Card Research and Advanced Applications, CARDIS 2000, September 20-22, 2000, Bristol, UK},
+ booktitle = {CARDIS},
+ publisher = {Kluwer},
+ series = {IFIP Conference Proceedings},
+ volume = {180},
+ year = {2000},
+ isbn = {0-7923-7953-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Secure-human-ID,
+ author = {Hopper,, Nicholas J. and Blum,, Manuel},
+ title = {Secure Human Identification Protocols},
+ booktitle = {ASIACRYPT '01: Proceedings of the 7th International Conference on the Theory and Application of Cryptology and Information Security},
+ year = {2001},
+ isbn = {3-540-42987-5},
+ pages = {52--66},
+ publisher = {Springer-Verlag},
+ address = {London, UK},
+}
+
+@ARTICLE{Inherent-intracability,
+title={On the inherent intractability of certain coding problems (Corresp.)},
+author={ Berlekamp, E. and McEliece, R. and van Tilborg, H.},
+journal={Information Theory, IEEE Transactions on},
+year={1978},
+month={May},
+volume={24},
+number={3},
+pages={ 384-386},
+keywords={null Decoding, Linear codes},
+doi={},
+ISSN={0018-9448},
+}
+
+@article{Noise-tolerant-learning,
+ author = {Blum,, Avrim and Kalai,, Adam and Wasserman,, Hal},
+ title = {Noise-tolerant learning, the parity problem, and the statistical query model},
+ journal = {J. ACM},
+ volume = {50},
+ number = {4},
+ year = {2003},
+ issn = {0004-5411},
+ pages = {506--519},
+ doi = {http://doi.acm.org/10.1145/792538.792543},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+
+@INPROCEEDINGS{To06anovel,
+ author = {Marc P. C. Fossorier and Miodrag J. Mihaljević and Hideki Imai and Yang Cui and Kanta Matsuura},
+ title = {A Novel Algorithm for Solving the {LPN} Problem and Its Applicatio to Security Evaluation of the {HB} Protocol for {RFID} Authentication},
+ booktitle = {INDOCRYPT},
+ editor = {Rana Barua and Tanja Lange},
+ volume = {4329},
+ series = {LNCS},
+ year = {2006},
+ pages = {48--62},
+ publisher = {Springer}
+}
+
+@INPROCEEDINGS{Levieil_animproved,
+ author = {Éric Levieil and Pierre-Alain Fouque},
+ title = {An improved {LPN} algorithm},
+ editor = {Roberto De Prisco and Moti Yung},
+ booktitle = {Security and Cryptography for Networks --- SCN},
+ volume = {4116},
+ series = {LNCS},
+ year = {2006},
+ pages = {348--359},
+ Publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+}
+
+@INPROCEEDINGS{HBpp,
+title={{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+author={Bringer, J. and Chabanne, H. and Dottax, E.},
+booktitle={Security, Privacy and Trust in Pervasive and Ubiquitous Computing, 2006 --- SecPerU 2006},
+year={2006},
+month={June},
+volume={},
+number={},
+pages={28--33},
+doi={10.1109/SECPERU.2006.10},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/GilbertRS08,
+ author = {Henri Gilbert and Matthew J. B. Robshaw and Yannick Seurin},
+ title = {{HB}$^{\mbox{\#}}$: Increasing the Security and Efficiency of {HB}$^{\mbox{+}}$},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ year = {2008},
+ pages = {361-378},
+ ee = {http://dx.doi.org/10.1007/978-3-540-78967-3_21},
+ crossref = {DBLP:conf/eurocrypt/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2008,
+ editor = {Nigel P. Smart},
+ title = {Advances in Cryptology --- EUROCRYPT 2008, 27th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Istanbul, Turkey, April 13-17, 2008. Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4965},
+ year = {2008},
+ isbn = {978-3-540-78966-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2001,
+ editor = {Mitsuru Matsui},
+ title = {Fast Software Encryption, 8th International Workshop, FSE 2001 Yokohama, Japan, April 2-4, 2001, Revised Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2355},
+ year = {2002},
+ isbn = {3-540-43869-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Rabin79Digitalized,
+ author = {Rabin, M. O.},
+ title = {Digitalized Signatures and Public-Key Functions as Intractable as Factorization},
+ year = {1979},
+ institution = {Massachusetts Institute of Technology},
+ address = {Cambridge, MA, USA},
+ }
+
+@article{HBmp,
+ author = {Munilla,, J. and Peinado,, A.},
+ title = {{HB}-{MP}: A further step in the HB-family of lightweight authentication protocols},
+ journal = {Comput. Netw.},
+ volume = {51},
+ number = {9},
+ year = {2007},
+ issn = {1389-1286},
+ pages = {2262--2267},
+ doi = {http://dx.doi.org/10.1016/j.comnet.2007.01.011},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {New York, NY, USA},
+ }
+
+@article{HBstar,
+ author={D.N. Duc and K. Kim},
+ title={Securing {HB}$^+$ Against {GRS} Man-in-the-Middle Attack},
+ journal={Institute of Electronics, Information and Communication Engineers, Symposium on Cryptography and Information, Security},
+ date = {January 23--26},
+ year = {2007},
+}
+
+@INPROCEEDINGS{OuafiOV-2008-asiacrypt,
+ author = {Ouafi, Khaled and Overbeck, Raphael and Vaudenay, Serge},
+ title = {On the Security of {HB\#} against a Man-in-the-Middle Attack},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2008},
+ year = {2008},
+ editor = {},
+ volume = {5350},
+ series = {LNCS},
+ pages = {108--124},
+ address = {Melbourne, Australia},
+ month = {December},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{PRESENT,
+ author = {Bogdanov, Andrey and Knudsen, Lars Ramkilde and Leander, Gregor and Paar, Christof and Poschmann, Axel and Robshaw, Matthew J.B. and Seurin, Yannick and Vikkelsoe, C.},
+ title = {{PRESENT}: An Ultra-Lightweight Block Cipher},
+ booktitle = {Workshop on Cryptographic Hardware and Embedded Systems --- CHES 2007},
+ year = {2007},
+ editor = {Paillier, Pascal and Verbauwhede, Ingrid},
+ volume = {4727},
+ series = {LNCS},
+ pages = {450--466},
+ address = {Vienna, Austria},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{ChoiKKK-2006-isce,
+ author = {Choi, Yongje and Kim, Mooseop and Kim, Taesung and Kim, Howon},
+ title = {Low power implementation of {SHA}-1 algorithm for {RFID} system},
+ booktitle = {IEEE Tenth International Symposium on Consumer Electronics --- ISCE '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {1--5},
+ address = {St.Petersburg, Russia},
+ month = {September},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{DES-RFID-implement,
+ author = {Axel Poschmann and Gregor Le and Kai Schramm and Christof Paar},
+ title = {A Family of Light-Weight Block Ciphers Based on {DES} Suited for {RFID} Applications},
+ booktitle = {Proceedings of FSE 2007, LNCS},
+ year = {2006},
+ publisher = {Springer-Verlag}
+}
+
+@article{4253019,
+title={Strong Crypto for {RFID} Tags - A Comparison of Low-Power Hardware Implementations},
+author={Feldhofer, M. and Wolkerstorfer, J.},
+journal={Circuits and Systems, 2007. ISCAS 2007. IEEE International Symposium on},
+year={2007},
+month={May},
+volume={},
+number={},
+pages={1839-1842},
+keywords={cryptographic protocols, radiofrequency identificationAES-128, ECC-192, MD5, SHA-1, SHA-256, implementation efficiency, passive RFID tags, security protocols, standardized cryptographic algorithms, strong cryptography},
+doi={10.1109/ISCAS.2007.378272},
+ISSN={},
+}
+
+@techreport{PUF-optical,
+ author= {P. Ravinkanth},
+ title= {Physical One-Way Functions},
+ note = {Ph.D. Thesis},
+ institution = {MIT},
+ year={2001}
+}
+
+@inproceedings{PUF-silicon,
+ author={B. Gassend and D. Clarke and M. van Dijk and S. Devadas},
+ title = {Controlled Physical Random Functions},
+ booktitle = {Proceedings of the 18th Annual Computer Security Applications Conference --- ACSAC '02},
+ year = {2002},
+ ISBN = {0-7695-1828-1},
+ page = {149},
+ publisher = {IEEE},
+}
+
+@article{PUF-circ-secret-key,
+ author = {D. Lim and J. W. Lee and B. Gassend and G. E. Suh and M. van Dijk and S. Devadas},
+ title = {Extracting Secret Keys From Integrated Circuits},
+ journal = {IEEE Transactions on Very Large Scale Integration (VLSI) Systems},
+ pages = {1200--1205},
+ year = {2005},
+ issue = {13 (10)},
+}
+
+
+@INPROCEEDINGS{Li99equivalencyreasoning,
+ author = {Chu Min Li},
+ title = {Equivalency reasoning to solve a class of hard {SAT} problems},
+ booktitle = {Information Processing Letters},
+ year = {1999},
+ pages = {76--1}
+}
+
+@INPROCEEDINGS{Silva96conflictanalysis,
+ author = {Joo P. Marques and Silva Karem and A. Sakallah},
+ title = {Conflict analysis in search algorithms for propositional satisfiability},
+ booktitle = {Proc. of the IEEE Intl. Conf. on Tools with Artificial Intelligence},
+ year = {1996}
+}
+
+@article{Chaff01,
+ author = {Sharad Malik and Ying Zhao and Conor F. Madigan and Lintao Zhang and Matthew W. Moskewicz},
+ title = {Chaff: Engineering an Efficient {SAT} Solver},
+ journal ={Design Automation Conference},
+ year = {2001},
+ pages = {530-535},
+ doi = {http://doi.ieeecomputersociety.org/10.1109/DAC.2001.935565},
+ publisher = {IEEE Computer Society},
+ address = {Los Alamitos, CA, USA},
+}
+volume = {0},
+isbn = {},
+
+@article{visualizingDPLL,
+ author = {Sinz, Carsten},
+ title = {Visualizing {SAT} Instances and Runs of the {DPLL} Algorithm},
+ journal = {J. Autom. Reason.},
+ volume = {39},
+ number = {2},
+ year = {2007},
+ issn = {0168-7433},
+ pages = {219--243},
+ doi = {http://dx.doi.org/10.1007/s10817-007-9074-1},
+ publisher = {Kluwer Academic Publishers},
+ address = {Hingham, MA, USA},
+ }
+
+@inproceedings{nicolas.linear_feedback,
+ author={Nicolas T. Courtois},
+ title={Fast Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- {CRYPTO} 2003},
+ year={2003},
+ pages={176-194},
+ volume={2729/2003},
+ series={LNCS},
+ publisher={Springer},
+}
+
+@misc{Karsten-webpage-Cyrpto-1,
+ author={Karsten Nohl},
+ title={Cryptanalysis of {C}rypto-1},
+ howpublished={Press release},
+ month={March},
+ day = {12},
+ year={2008},
+ note= {\url{http://www.cs.virginia.edu/~kn5f/Mifare.Cryptanalysis.htm}}
+}
+
+@Misc{Radboud-Mifare-press,
+ author = {{Digital {S}ecurity group, {R}adboud {U}niversity {N}ijmegen}},
+ title = {Security Flaw in {M}ifare {C}lassic},
+ howpublished = {Press release},
+ month = {March},
+ day = {12},
+ year = {2008},
+ note = {\url{http://www.ru.nl/english/general/radboud_university/vm/security_flaw_in/}},
+}
+
+@ARTICLE{Massacci00logicalcryptanalysis,
+ author = {Fabio Massacci and Laura Marraro},
+ title = {Logical cryptanalysis as a {SAT}-problem: Encoding and analysis},
+ journal = {Journal of Automated Reasoning},
+ year = {2000},
+ volume = {24},
+ pages = {165--203}
+}
+
+@article{Monte-Carlo-method,
+ abstract = {We shall present here the motivation and a general description of a method dealing with a class of problems in mathematical physics. The method is, essentially, a statistical approach to the study of differential equations, or more generally, of integro-differential equations that occur in various branches of the natural sciences.},
+ author = {Metropolis, Nicholas and Ulam, S. },
+ citeulike-article-id = {1886002},
+ doi = {10.2307/2280232},
+ journal = {Journal of the American Statistical Association},
+ keywords = {random, sampling},
+ number = {247},
+ pages = {335--341},
+ posted-at = {2009-04-12 22:32:37},
+ priority = {2},
+ title = {The {M}onte {C}arlo Method},
+ url = {http://dx.doi.org/10.2307/2280232},
+ volume = {44},
+ year = {1949}
+}
+
+@article{Rabin-primality-test,
+ author = {Rabin, Michael O. },
+ citeulike-article-id = {1505894},
+ doi = {10.1016/0022-314X(80)90084-0},
+ journal = {J. Number Theory},
+ mrnumber = {MR566880},
+ number = {1},
+ pages = {128--138},
+ posted-at = {2007-07-27 00:11:40},
+ priority = {2},
+ title = {Probabilistic algorithm for testing primality},
+ url = {http://dx.doi.org/10.1016/0022-314X(80)90084-0},
+ volume = {12},
+ year = {1980}
+}
+
+@article{Mersenne-Twister,
+ address = {New York, NY, USA},
+ author = {Matsumoto, Makoto and Nishimura, Takuji },
+ citeulike-article-id = {611171},
+ doi = {10.1145/272991.272995},
+ issn = {1049-3301},
+ journal = {ACM Trans. Model. Comput. Simul.},
+ keywords = {algorithm},
+ month = {January},
+ number = {1},
+ pages = {3--30},
+ posted-at = {2008-10-26 00:03:42},
+ priority = {0},
+ publisher = {ACM Press},
+ title = {Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator},
+ url = {http://dx.doi.org/10.1145/272991.272995},
+ volume = {8},
+ year = {1998}
+}
+
+@inproceedings{L'Ecuyer98randomnumber,
+ author = {Pierre L'Ecuyer and Peter Hellekalek},
+ title = {Random Number Generators: Selection Criteria and Testing},
+ booktitle = {Random and Quasi-Random Point Sets},
+ series = {Lecture Notes in Statistics},
+ volume = {138},
+ publisher = {Springer-Verlag},
+ address = {New York},
+ pages = {223--266},
+ year = {1998},
+}
+
+@inproceedings{DBLP:conf/sat/SinzD05,
+ author = {Carsten Sinz and Edda-Maria Dieringer},
+ title = {{DP}vis --- {A} Tool to Visualize the Structure of {SAT} Instances},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {257-268},
+ ee = {http://dx.doi.org/10.1007/11499107_19},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@article{gomes00heavytailed,
+ author = {Carla P. Gomes and Bart Selman and Nuno Crato and Henry A. Kautz},
+ title = {Heavy-Tailed Phenomena in Satisfiability and Constraint Satisfaction Problems},
+ journal = {Journal of Automated Reasoning},
+ volume = {24},
+ number = {1/2},
+ pages = {67--100},
+ year = {2000},
+ url = {citeseer.ist.psu.edu/article/gomes99heavytailed.html}
+}
+
+@article{Mandelbrot60Pareto,
+ author = {Benoît B. Mandelbrot},
+ title = {The Pareto-Lévy law and the distribution of income},
+ journal = {Internat. Econom. Rev.},
+ volume = {1},
+ year = {1960},
+ pages = {79--106}
+}
+
+@inproceedings{Moura07tutorial,
+ author = {Leonardo de Moura, Bruno Dutertre and Natarajan Shankar},
+ title = {A Tutorial on Satisfiability Modulo Theories},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {4590/2007},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ pages = {20--36},
+ booktitle = {Computer Aided Verification},
+}
+ doi = {10.1007/978-3-540-73368-3},
+
+@article{Karnaugh53Logic,
+ author = {Karnaugh, Maurice},
+ year = {1953},
+ month = {November},
+ title = {The Map Method for Synthesis of Combinational Logic Circuits},
+ journal = {Transactions of American Institute of Electrical Engineers part I},
+ volume = {72},
+ number = {9},
+ pages = {593--599},
+}
+
+@inproceedings{Li00Integrating,
+ author = {Li, Chu Min},
+ title = {Integrating Equivalency Reasoning into Davis-Putnam Procedure},
+ booktitle = {Proceedings of the Seventeenth National Conference on Artificial Intelligence and Twelfth Conference on Innovative Applications of Artificial Intelligence},
+ year = {2000},
+ isbn = {0-262-51112-6},
+ pages = {291--296},
+ publisher = {AAAI Press / The MIT Press},
+}
+
+@article{Warners99TwoPhase,
+ author = {Joost P. Warners and Hans Van Maaren},
+ title = {A Two Phase Algorithm for Solving a Class of Hard Satisfiability Problems},
+ journal = {Operations Research Letters},
+ year = {1999},
+ volume = {23},
+ number = {3--5},
+ pages = {81--88}
+}
+
+@inproceedings{Massacci00Taming,
+ author = {Peter Baumgartner and Fabio Massacci},
+ title = {The Taming of the {(X)OR}},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+ volume = {1861/2000},
+ booktitle = {Computational Logic — CL 2000},
+ doi = {10.1007/3-540-44957-4},
+ year = {2000},
+ isbn = {978-3-540-67797-0},
+ pages = {508--522},
+}
+
+@inproceedings{Massacci99Using,
+ author = {Fabio Massacci},
+ title = {Using {W}alk-{SAT} and {R}el-sat for cryptographic key search},
+ booktitle = {Proc. of IJCAI-99},
+ year = {1999},
+ editor = {Morgan Kaufmann},
+ pages = {290--295},
+}
+
+@inproceedings{Girault04Public,
+author = {Marc Girault and David Lefranc},
+title = {Public Key Authentication with One (Online) Single Addition},
+series = {LNCS},
+bublisher = {Springer Berlin / Heidelberg},
+ISSN = {0302-9743},
+volume = {3156/2004},
+booktitle = {Cryptographic Hardware and Embedded Systems - CHES 2004},
+doi ={10.1007/b99451},
+year = {2004},
+isbn = {978-3-540-22666-6},
+pages = {967--984}
+}
+
+@article{Hsieh72OnOptimal,
+ author = {Hsieh, H. Y. and Ghausi, M. S.},
+ title = {On optimal-pivoting algorithms in sparse matrices},
+ journal = {IEEE Trans. Circuit Theory},
+ volume = {CT-19},
+ pages = {93--96},
+ month = {January},
+ year = {1972}
+}
+
+@article{HerasetalJAIR2008,
+ author = {Federico Heras and Javier Larrosa and Albert Oliveras},
+ title = {{MiniMaxSAT: An efficient Weighted Max-SAT Solver}},
+ journal = {Journal of Artificial Intelligence Research},
+ volume = {31},
+ year = {2008},
+ pages = {1--32}
+ }
+
+@techreport{Wieringa07MiniMarch,
+ title = {{M}ini{M}arch --- {E}mbedding lookahead direction heuristics in a conflict driven solver},
+ author = {Siert Wieringa},
+ institution = {Technische Universiteit Delft},
+ note = {Research Report},
+ year = {2007},
+ url = {http://www.st.ewi.tudelft.nl/sat/theses/minimarch.pdf},
+}
+
+techreport{OSI-MIT-Licence,
+url = {http://www.opensource.org/licenses/mit-license.php}
+
+
+@techreport{eStream,
+ title = {The e{STREAM} Portfolio},
+ author = {Steve Babbage and Christophe De Canniere and Anne Canteaut and Carlos Cid and Henri Gilbert and Thomas Johansson and Christof Paar and Matthew Parker and Bart Preneel and Vincent Rijmen and Matt Robshaw and Hongjun Wu},
+ url = {http://www.ecrypt.eu.org/stream/portfolio.pdf},
+ institution = {eStream Project},
+ year = {2008},
+ month = {September},
+ day = {8},
+}
+
+@techreport{Kibria08MiniSat,
+ author = {Raihan Kibria},
+ title = {Midi{S}AT - {A}n extension of {M}ini{SAT}},
+ institution = {Department of Electrical and Computer Engineering, Darmstadt University of Technology},
+ year = {2005},
+ month = {April},
+ day = {26},
+ url = {www.lri.fr/~simon/contest/results/descriptions/solvers/midisat_static.pdf},
+}
+
+@incollection{DaemenR05Rijndael,
+ author = {Joan Daemen and Vincent Rijmen},
+ title = {Rijndael/AES},
+ booktitle = {Encyclopedia of Cryptography and Security},
+ year = {2005},
+ ee = {http://dx.doi.org/10.1007/0-387-23483-7_358},
+ crossref = {DBLP:reference/crypt/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{DBLP:reference/crypt/2005,
+ editor = {Henk C. A. van Tilborg},
+ title = {Encyclopedia of Cryptography and Security},
+ publisher = {Springer},
+ year = {2005},
+ isbn = {978-0-387-23473-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Strassen69Gaussian,
+ author = {Volker Strassen},
+ title = {Gaussian Elimination is Not Optimal},
+ journal = {Numerische Mathematik},
+ volume = {13},
+ pages = {354--356},
+ year = {1969}
+}
+
+@techreport{Crawford94TheMinimal,
+ author = {Crawford, J. M. and Kearns, M. J. and Shapire, R. E.},
+ title = {The Minimal Disagreement Parity Problem as a Hard Satisfiability Problem},
+ institution = {Computational Intelligence Research Laboratory and {AT\&T} {B}ell {L}abs},
+ month = {February},
+ year = {1994},
+}
+
+@inproceedings{OuafiV09Smashing,
+ author = {Khaled Ouafi and Serge Vaudenay},
+ title = {Smashing {SQUASH}-0},
+ volume = {5479},
+ crossref = {DBLP:conf/eurocrypt/2009},
+}
+
+@inproceedings{ShamirRFIDSecLecture,
+author = {Adi Shamir},
+title = {{SQUASH}: {A} new one-way hash function with provable security properties for higley contrained devices such as {RFID} tags},
+booktitle = {Invited lecture to the RFID Securty 2007 Workshop},
+year = {2007},
+}
+
+@misc{DES77,
+ author = {{National Bureau of Standards}},
+ year = {1977},
+ title = {Data {E}ncryption {S}tandard},
+ institution = {U. S. Department of Commerce, National Bureau of Standards, Standards Publication (FIPS PUB) 46},
+ address = {Washington, DC},
+}s
+
+@INPROCEEDINGS{Tsudik06Yet,
+ author = {Tsudik, Gene},
+ title = {{YA-TRAP}: Yet Another Trivial {RFID} Authentication Protocol},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2006},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {640--643},
+ address = {Pisa, Italy},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+
+@INPROCEEDINGS{Conti07RIPP,
+ author = {Conti, Mauro and Pietro, Roberto~Di and Mancini, Luigi~Vincenzo and Spognardi, Angelo},
+ title = {{RIPP-FS}: an {RFID} Identification, Privacy Preserving Protocol with Forward Secrecy},
+ booktitle = {International Workshop on Pervasive Computing and Communication Security --- PerSec '07},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {229--234},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Burmester06Provably,
+ author = {Burmester, Mike and Le, Tri van and Medeiros, Breno de},
+ title = {Provably Secure Ubiquitous Systems: Universally Composable {RFID} Authentication Protocols},
+ booktitle = {Conference on Security and Privacy for Emerging Areas in Communication Networks --- SecureComm '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Baltimore, Maryland, USA},
+ month = {August-September},
+ organization = {IEEE},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@misc{ISO14443-standard,
+ author = {ISO/IEC},
+ title = {14443-3 --- {I}dentification cards -- {C}ontactless integrated circuit(s) cards -- {P}roximity cards -- {P}art 3: {I}nitialization and anticollision},
+ year = {2001, Stage: 90.92 --- 2007-12-11},
+ institution = {International Organization for Standardization},
+ address = {Geneva, Switzerland},
+ url = {http://www.isotopicmaps.org/sam/sam-model/YYYY-MM-DD/},
+}
+
+@INPROCEEDINGS{Bailey05Shoehorning,
+ author = {Bailey, Daniel and Juels, Ari},
+ title = {{Shoehorning Security into the EPC Standard}},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2006},
+ year = {2006},
+ editor = {De~Prisco, Roberto and Yung, Moti},
+ volume = {4116},
+ series = {LNCS},
+ pages = {303--320},
+ address = {Maiori, Italy},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Soos08Analysing,
+ author = {Soos, Mate},
+ title = {{Analysing the {M}olva and {D}i {P}ietro Private {RFID} Authentication Scheme}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'08},
+ year = {2008},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Budapest, Hungary},
+ month = {July},
+ organization = {},
+ publisher = {},
+}
+
+@inproceedings{DBLP:conf/ccs/BurmesterMM08,
+ author = {Mike Burmester and Breno de Medeiros and Rossana Motta},
+ title = {Robust, anonymous {RFID} authentication with constant key-lookup},
+ booktitle = {ASIACCS},
+ year = {2008},
+ pages = {283-291},
+ ee = {http://doi.acm.org/10.1145/1368310.1368351},
+ crossref = {DBLP:conf/ccs/2008asia},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ccs/2008asia,
+ editor = {Masayuki Abe and Virgil D. Gligor},
+ title = {Proceedings of the 2008 ACM Symposium on Information, Computer and Communications Security, ASIACCS 2008, Tokyo, Japan, March 18-20, 2008},
+ booktitle = {ASIACCS},
+ publisher = {ACM},
+ year = {2008},
+ isbn = {978-1-59593-979-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@INPROCEEDINGS{Blass09Ff,
+ author = {Blass, Erik-Oliver and Kurmus, Anil and Molva, Refik and Noubir, Guevara and Shikfa, Abdullatif},
+ title = {{The {F}f-Family of Protocols for {RFID}-Privacy and Authentication}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'09},
+ year = {2009},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Leuven, Belgium},
+ month = {July},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/cardis/CastellucciaA06,
+ author = {Claude Castelluccia and Gildas Avoine},
+ title = {Noisy Tags: {A} Pretty Good Key Exchange Protocol for {RFID} Tags},
+ booktitle = {CARDIS},
+ year = {2006},
+ pages = {289-299},
+ ee = {http://dx.doi.org/10.1007/11733447_21},
+ crossref = {DBLP:conf/cardis/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2006,
+ editor = {Josep Domingo-Ferrer and
+ Joachim Posegga and
+ Daniel Schreckling},
+ title = {Smart Card Research and Advanced Applications, 7th IFIP
+ WG 8.8/11.2 International Conference, CARDIS 2006, Tarragona,
+ Spain, April 19-21, 2006, Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3928},
+ year = {2006},
+ isbn = {3-540-33311-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ches/SavryPDRR07,
+ author = {O. Savry and F. Pebay-Peyroula and F. Dehmas and G. Robert and J. Reverdy},
+ title = {{RFID} Noisy Reader --- {H}ow to Prevent from Eavesdropping on the Communication?},
+ booktitle = {CHES},
+ year = {2007},
+ pages = {334-345},
+ ee = {http://dx.doi.org/10.1007/978-3-540-74735-2_23},
+ crossref = {DBLP:conf/ches/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ches/2007,
+ editor = {Pascal Paillier and Ingrid Verbauwhede},
+ title = {Cryptographic Hardware and Embedded Systems --- {CHES} 2007,
+ 9th International Workshop, Vienna, Austria, September 10-13,
+ 2007, Proceedings},
+ booktitle = {CHES},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4727},
+ year = {2007},
+ isbn = {978-3-540-74734-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Hancke07Modulating,
+ author = {G. Hancke},
+ title = {Modulating a noisy carrier signal for eavesdropping-resistant {HF RFID}},
+ journal = {e\&i --- Elektrotechnik und Informationstechnik},
+ year = {2007},
+ volume = {124},
+ number = {11},
+ month = {November},
+ pages = {404--408},
+ publisher = {Springer Wien},
+ ISSN = {0932-383X},
+ DOI = {10.1007/s00502-007-0479-7}
+}
+
+@inproceedings{1423361,
+ author = {Babbage, Steve and Dodd, Matthew},
+ title = {The {MICKEY} Stream Ciphers},
+ booktitle = {New Stream Cipher Designs: The e{STREAM} Finalists},
+ year = {2008},
+ isbn = {978-3-540-68350-6},
+ pages = {191--209},
+ doi = {http://dx.doi.org/10.1007/978-3-540-68351-3_15},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+ }
+
+@inproceedings{DBLP:conf/wistp/DeursenMR08,
+ author = {Ton van Deursen and Sjouke Mauw and Sasa Radomirovic},
+ title = {Untraceability of {RFID} Protocols},
+ booktitle = {WISTP},
+ year = {2008},
+ pages = {1-15},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79966-5_1},
+ crossref = {DBLP:conf/wistp/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/wistp/2008,
+ editor = {Jose Antonio Onieva and Damien Sauveron and Serge Chaumette and Dieter Gollmann and Constantinos Markantonakis},
+ title = {Information Security Theory and Practices. Smart Devices, Convergence and Next Generation Networks, Second {IFIP WG} 11.2 International Workshop, {WISTP} 2008, Seville, Spain, May 13-16, 2008. Proceedings},
+ booktitle = {WISTP},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5019},
+ year = {2008},
+ isbn = {978-3-540-79965-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{A51,
+ author = {Ross Anderson},
+ title = {A5 (was: Hacking digital phones)},
+ howpublished = {Newsgroup Communication},
+ year = {1994},
+}
+
+@inproceedings{DBLP:conf/cardis/GansHG08,
+ author = {Gerhard de Koning Gans and Jaap-Henk Hoepman and Flavio D. Garcia},
+ title = {A Practical Attack on the {MIFARE} {C}lassic},
+ booktitle = {CARDIS},
+ year = {2008},
+ pages = {267-282},
+ ee = {http://dx.doi.org/10.1007/978-3-540-85893-5_20},
+ crossref = {DBLP:conf/cardis/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2008,
+ editor = {Gilles Grimaud and Fran\c{c}ois-Xavier Standaert},
+ title = {Smart Card Research and Advanced Applications, 8th IFIP WG 8.8/11.2 International Conference, CARDIS 2008, London, UK, September 8-11, 2008. Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5189},
+ year = {2008},
+ isbn = {978-3-540-85892-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ima/CourtoisB07,
+ author = {Nicolas T. Courtois and Gregory V. Bard},
+ title = {Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ booktitle = {{IMA} Int. Conf.},
+ year = {2007},
+ pages = {152-169},
+ ee = {http://dx.doi.org/10.1007/978-3-540-77272-9_10},
+ crossref = {DBLP:conf/ima/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ima/2007,
+ editor = {Steven D. Galbraith},
+ title = {Cryptography and Coding, 11th IMA International Conference, Cirencester, UK, December 18-20, 2007, Proceedings},
+ booktitle = {IMA Int. Conf.},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4887},
+ year = {2007},
+ isbn = {978-3-540-77271-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Bard-algebraic,
+ title = {Algebraic Cryptanalysis},
+ author = {Gregory V. Bard},
+ year = {2009},
+ pages = {392},
+ volume = {XXXIV},
+ series = {Security and Cryptology},
+ ISBN = {978-0-387-88756-2},
+ publisher = {Springer},
+}
+
+@inproceedings{Graphviz,
+ author = {John Ellson and Emden R. Gansner and Eleftherios Koutsofios and Stephen C. North and Gordon Woodhull},
+ year = {2001},
+ title = {Graphviz --- open source graph drawing tools},
+ pages = {483--484},
+ crossref = {DBLP:conf/gd/2001},
+}
+
+@proceedings{DBLP:conf/gd/2001,
+ editor = {Petra Mutzel and Michael J{\"u}nger and Sebastian Leipert},
+ title = {Graph Drawing, 9th International Symposium, GD 2001 Vienna, Austria, September 23--26, 2001, Revised Papers},
+ booktitle = {Graph Drawing},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2265},
+ year = {2002},
+ isbn = {3-540-43309-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Borghoff09Mixed,
+ booktitle = {WEWoRC --- Western European Workshop on Research in Cryptology},
+ title = {Bivium as a Mixed-0-1 Linear Programming Problem},
+ author = {Julia Borghoff and Lars R. Knudsen and Mathias Stolpe},
+ month = {July},
+ year = {2009},
+ address = {Graz, Austria},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/DinurS09,
+ author = {Itai Dinur and Adi Shamir},
+ title = {Cube Attacks on Tweakable Black Box Polynomials},
+ booktitle = {EUROCRYPT},
+ year = {2009},
+ pages = {278--299},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9_16},
+ crossref = {DBLP:conf/eurocrypt/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2009,
+ editor = {Antoine Joux},
+ title = {Advances in Cryptology --- EUROCRYPT 2009, 28th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Cologne, Germany, April 26--30, 2009. Proceedings},
+ booktitle = {EUROCRYPT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5479},
+ year = {2009},
+ isbn = {978-3-642-01000-2},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{eStreamFinalists,
+ title = {The e{STREAM} Finalists},
+ editor = {Matthew Robshaw and Olivier Billet},
+ series = {LNCS},
+ subseries = {Security and Cryptology},
+ volume = {4986},
+ year = {2008},
+ pages = {295},
+ isbn = {978-3-540-68350-6},
+ publisher = {Springer},
+}
+
+@article{diffie76new,
+ author = "Whitfield Diffie and Martin E. Hellman",
+ title = "New Directions in Cryptography",
+ journal = "IEEE Transactions on Information Theory",
+ volume = "IT-22",
+ number = "6",
+ pages = "644--654",
+ date = "November 1976",
+ year = "1976",
+ url = "citeseer.ist.psu.edu/diffie76new.html"
+}
+
+@ARTICLE{Rivest78amethod,
+ author = {Ron L. Rivest and Adi Shamir and Leonard Max Adleman},
+ title = {A Method for Obtaining Digital Signatures and Public-Key Cryptosystems},
+ journal = {Communications of the ACM},
+ year = {1978},
+ volume = {21},
+ pages = {120--126}
+}
+
+@inproceedings{Pfizmann01Anonimity,
+ author = {Andreas Pfitzmann and Marit Köhntopp},
+ title = {Anonymity, Unobservability, and Pseudonymity --- {A} Proposal for Terminology},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {2009},
+ year = {2001},
+ booktitle = {Designing Privacy Enhancing Technologies},
+ doi = {10.1007/3-540-44702-4},
+ isbn = {978-3-540-41724-8},
+ pages = {1--9},
+}
+
+@misc{Bard07efficientmethods,
+ author = {Gregory V. Bard and Nicolas T. Courtois and Chris Jefferson},
+ title = {Efficient Methods for Conversion and Solution of Sparse Systems of Low-Degree Multivariate Polynomials over {GF}(2) via {SAT}-Solvers},
+ howpublished = {Cryptology ePrint Archive, Report 2007/024, \url{http://eprint.iacr.org/2007/024}},
+ year = {2007},
+ organization = {IACR},
+}
+
+@inproceedings{DBLP:conf/sat/SoosNC09,
+ author = {Mate Soos and
+ Karsten Nohl and
+ Claude Castelluccia},
+ title = {Extending {SAT} Solvers to Cryptographic Problems},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {244--257},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_24},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cav/GaneshD07,
+ author = {Vijay Ganesh and
+ David L. Dill},
+ title = {A Decision Procedure for Bit-Vectors and Arrays},
+ booktitle = {CAV},
+ year = {2007},
+ pages = {519-531},
+ ee = {http://dx.doi.org/10.1007/978-3-540-73368-3_52},
+ crossref = {DBLP:conf/cav/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cav/2007,
+ editor = {Werner Damm and
+ Holger Hermanns},
+ title = {Computer Aided Verification, 19th International Conference,
+ CAV 2007, Berlin, Germany, July 3-7, 2007, Proceedings},
+ booktitle = {CAV},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4590},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Logic2CNF,
+ author = {Edd Barrett},
+ title = {Logic2{CNF} Logic Solver and Converter},
+ note = {\url{http://projects.cs.kent.ac.uk/projects/logic2cnf/trac/wiki/WikiStart}},
+ year = {2010},
+ month = {March},
+}
+
+@misc{CryptoMiniSat,
+ author = {Mate Soos},
+ title = {Crypto{M}ini{S}at --- a {SAT} solver for cryptographic problems},
+ note = {\url{http://planete.inrialpes.fr/~soos/CryptoMiniSat/index.html}},
+ year = {2009},
+}
+
+@inproceedings{DBLP:conf/sat/EenB05,
+ author = {Niklas E{\'e}n and
+ Armin Biere},
+ title = {Effective Preprocessing in {SAT} Through Variable and Clause
+ Elimination},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {61-75},
+ ee = {http://dx.doi.org/10.1007/11499107_5},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{glucose,
+ author = {Gilles Audemard and Laurent Simon},
+ title = {{GLUCOSE}: a solver that predicts learnt clauses quality},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {7--8},
+}
+
+@inproceedings{precosat,
+ author = {Armin Biere},
+ title = {P\{re,i\}coSAT@SC’09},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {41--42},
+}
+
+@inproceedings{DBLP:conf/sat/HeuleM04a,
+ author = {Marijn Heule and
+ Hans van Maaren},
+ title = {Aligning {CNF}- and Equivalence-Reasoning},
+ booktitle = {SAT (Selected Papers},
+ year = {2004},
+ pages = {145--156},
+ ee = {http://dx.doi.org/10.1007/11527695_12},
+ crossref = {DBLP:conf/sat/2004lncs},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2004lncs,
+ editor = {Holger H. Hoos and
+ David G. Mitchell},
+ title = {Theory and Applications of Satisfiability Testing, 7th International
+ Conference, SAT 2004, Vancouver, BC, Canada, May 10-13,
+ 2004, Revised Selected Papers},
+ booktitle = {SAT (Selected Papers)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3542},
+ year = {2005},
+ isbn = {3-540-27829-X},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Heule-thesis,
+ author = {Marijn Heule},
+ title = {{m}arch: Towards a lookahead Sat solver for general purposes},
+ institution={Technische Universiteit Delft},
+ month={February},
+ year={2004},
+}
+
+@techreport{Heule-phd,
+ author = {Marijn J.H. Heule},
+ title = {Smart solving: Tool and techniques for satisfiability solvers},
+ institution={Technische Universiteit Delft},
+ year={2008},
+}
+
+@article{DBLP:journals/amai/JeroslowW90,
+ author = {Robert G. Jeroslow and
+ Jinchang Wang},
+ title = {Solving Propositional Satisfiability Problems},
+ journal = {Ann. Math. Artif. Intell.},
+ volume = {1},
+ year = {1990},
+ pages = {167-187},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/PipatsrisawatD07,
+ author = {Knot Pipatsrisawat and
+ Adnan Darwiche},
+ title = {A Lightweight Component Caching Scheme for Satisfiability
+ Solvers},
+ booktitle = {SAT},
+ year = {2007},
+ pages = {294-299},
+ ee = {http://dx.doi.org/10.1007/978-3-540-72788-0_28},
+ crossref = {DBLP:conf/sat/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2007,
+ editor = {Jo{\~a}o Marques-Silva and
+ Karem A. Sakallah},
+ title = {Theory and Applications of Satisfiability Testing --- SAT
+ 2007, 10th International Conference, Lisbon, Portugal, May
+ 28-31, 2007, Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4501},
+ year = {2007},
+ isbn = {978-3-540-72787-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ijcai/AudemardS09,
+ author = {Gilles Audemard and
+ Laurent Simon},
+ title = {Predicting Learnt Clauses Quality in Modern {SAT} Solvers},
+ booktitle = {IJCAI},
+ year = {2009},
+ pages = {399-404},
+ ee = {http://ijcai.org/papers09/Papers/IJCAI09-074.pdf},
+ crossref = {DBLP:conf/ijcai/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ijcai/2009,
+ editor = {Craig Boutilier},
+ title = {IJCAI 2009, Proceedings of the 21st International Joint
+ Conference on Artificial Intelligence, Pasadena, California,
+ USA, July 11-17, 2009},
+ booktitle = {IJCAI},
+ year = {2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/tacas/JarvisaloBH10,
+ author = {Matti J{\"a}rvisalo and
+ Armin Biere and
+ Marijn Heule},
+ title = {Blocked Clause Elimination},
+ booktitle = {TACAS},
+ year = {2010},
+ pages = {129-144},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2_10},
+ crossref = {DBLP:conf/tacas/2010},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/tacas/2010,
+ editor = {Javier Esparza and
+ Rupak Majumdar},
+ title = {Tools and Algorithms for the Construction and Analysis of
+ Systems, 16th International Conference, TACAS 2010, Held
+ as Part of the Joint European Conferences on Theory and
+ Practice of Software, ETAPS 2010, Paphos, Cyprus, March
+ 20-28, 2010. Proceedings},
+ booktitle = {TACAS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6015},
+ year = {2010},
+ isbn = {978-3-642-12001-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{DBLP:journals/dam/Li03,
+ author = {Chu Min Li},
+ title = {Equivalent literal propagation in the {DLL} procedure},
+ journal = {Discrete Applied Mathematics},
+ volume = {130},
+ number = {2},
+ year = {2003},
+ pages = {251-276},
+ ee = {http://dx.doi.org/10.1016/S0166-218X(02)00407-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Grid5000,
+ author = {{The Grid'5000 team}},
+ title = {The {G}rid'5000 project},
+ note = {\url{https://www.grid5000.fr}},
+}
+ year = {2008},
+
+@article{DBLP:journals/endm/Berre01,
+ author = {Daniel Le Berre},
+ title = {Exploiting the real power of unit propagation lookahead},
+ journal = {Electronic Notes in Discrete Mathematics},
+ volume = {9},
+ year = {2001},
+ pages = {59-80},
+ ee = {http://dx.doi.org/10.1016/S1571-0653(04)00314-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/GershmanS05,
+ author = {Roman Gershman and Ofer Strichman},
+ title = {Cost-Effective Hyper-Resolution for Preprocessing {CNF} Formulas},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {423-429},
+ ee = {http://dx.doi.org/10.1007/11499107_34},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/HeuleJB11,
+ author = {Marijn Heule and
+ Matti J{\"a}rvisalo and
+ Armin Biere},
+ title = {Efficient {CNF} Simplification Based on Binary Implication
+ Graphs},
+ booktitle = {SAT},
+ year = {2011},
+ pages = {201-215},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0_17},
+ crossref = {DBLP:conf/sat/2011},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2011,
+ editor = {Karem A. Sakallah and
+ Laurent Simon},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2011 - 14th International Conference, SAT 2011, Ann Arbor,
+ MI, USA, June 19-22, 2011. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6695},
+ year = {2011},
+ isbn = {978-3-642-21580-3},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ecai/PietteHS08,
+ author = {C{\'e}dric Piette and
+ Youssef Hamadi and
+ Lakhdar Sais},
+ title = {Vivifying Propositional Clausal Formulae},
+ booktitle = {ECAI},
+ year = {2008},
+ pages = {525-529},
+ ee = {http://dx.doi.org/10.3233/978-1-58603-891-5-525},
+ crossref = {DBLP:conf/ecai/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/ecai/2008,
+ editor = {Malik Ghallab and
+ Constantine D. Spyropoulos and
+ Nikos Fakotakis and
+ Nikolaos M. Avouris},
+ title = {ECAI 2008 - 18th European Conference on Artificial Intelligence,
+ Patras, Greece, July 21-25, 2008, Proceedings},
+ booktitle = {ECAI},
+ publisher = {IOS Press},
+ series = {Frontiers in Artificial Intelligence and Applications},
+ volume = {178},
+ year = {2008},
+ isbn = {978-1-58603-891-5},
+ ee = {http://www.booksonline.iospress.nl/Content/View.aspx?piid=9905},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/HanS09,
+ author = {HyoJung Han and
+ Fabio Somenzi},
+ title = {On-the-Fly Clause Improvement},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {209-222},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_21},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/SorenssonB09,
+ author = {Niklas S{\"o}rensson and
+ Armin Biere},
+ title = {Minimizing Learned Clauses},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {237-243},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_23},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/BacchusW03,
+ author = {Fahiem Bacchus and
+ Jonathan Winter},
+ title = {Effective Preprocessing with Hyper-Resolution and Equality
+ Reduction},
+ booktitle = {SAT},
+ year = {2003},
+ pages = {341-355},
+ ee = {http://dx.doi.org/10.1007/978-3-540-24605-3_26},
+ crossref = {DBLP:conf/sat/2003},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2003,
+ editor = {Enrico Giunchiglia and
+ Armando Tacchella},
+ title = {Theory and Applications of Satisfiability Testing, 6th International
+ Conference, SAT 2003. Santa Margherita Ligure, Italy, May
+ 5-8, 2003 Selected Revised Papers},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2919},
+ year = {2004},
+ isbn = {3-540-20851-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2005,
+ editor = {Fahiem Bacchus and
+ Toby Walsh},
+ title = {Theory and Applications of Satisfiability Testing, 8th International
+ Conference, SAT 2005, St. Andrews, UK, June 19-23, 2005,
+ Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3569},
+ year = {2005},
+ isbn = {3-540-26276-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2009,
+ editor = {Oliver Kullmann},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2009, 12th International Conference, SAT 2009, Swansea,
+ UK, June 30 - July 3, 2009. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {5584},
+ year = {2009},
+ isbn = {978-3-642-02776-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/hvc/MantheyHB12,
+ author = {Norbert Manthey and
+ Marijn Heule and
+ Armin Biere},
+ title = {Automated Reencoding of Boolean Formulas},
+ booktitle = {Haifa Verification Conference},
+ year = {2012},
+ pages = {102-117},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3_14},
+ crossref = {DBLP:conf/hvc/2012},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/hvc/2012,
+ editor = {Armin Biere and
+ Amir Nahir and
+ Tanja E. J. Vos},
+ title = {Hardware and Software: Verification and Testing - 8th International
+ Haifa Verification Conference, HVC 2012, Haifa, Israel,
+ November 6-8, 2012. Revised Selected Papers},
+ booktitle = {Haifa Verification Conference},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {7857},
+ year = {2013},
+ isbn = {978-3-642-39610-6},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Quinlan:1993:CPM:152181,
+ author = {Quinlan, J. Ross},
+ title = {C4.5: Programs for Machine Learning},
+ year = {1993},
+ isbn = {1-55860-238-0},
+ publisher = {Morgan Kaufmann Publishers Inc.},
+ address = {San Francisco, CA, USA},
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/splncs03.bst b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/splncs03.bst
new file mode 100644
index 000000000..327916917
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp16-pdf/splncs03.bst
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'
+%%
+%% BibTeX bibliography style for use with numbered references in
+%% Springer Verlag's "Lecture Notes in Computer Science" series.
+%% (See Springer's documentation for llncs.cls for
+%% more details of the suggested reference format.) Note that this
+%% file will not work for author-year style citations.
+%%
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
+%%
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre
+%%
+%% ================================================================================================
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
+%%
+%% CHANGES (with respect to titto-lncs-01.bst):
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
+%% ================================================================================================
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
+%% Edited by hand by titto based on `titto.bst' (see below)
+%%
+%% CHANGES (with respect to titto.bst):
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
+%% ================================================================================================
+%% This was file `titto.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
+%% ----------------------------------------
+%% *** Tentative .bst file for Springer LNCS ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ % \bibitem{key}...
+ % Usage of \cite is as follows:
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is alphabetical by authors.
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+% newline$
+% "\newblock " write$ % removed for titto-lncs-01
+ " " write$ % to avoid long spaces between title and "In: ..."
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+
+FUNCTION {add.colon}
+{ duplicate$ empty$
+ 'skip$
+ { ":" * add.blank }
+ if$
+}
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+STRINGS {z}
+FUNCTION {remove.dots}
+{ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+}
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ skip$ }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+FUNCTION {titto.space.prefix} % always introduce a space
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {titto.bbl.volume} % for handling journals
+{ "" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {titto.bbl.pages} % for journals
+{ "" }
+
+FUNCTION {titto.bbl.page} % for journals
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+% { "\urlprefix\url{" url * "}" * }
+ { "\url{" url * "}" * } % changed in titto-lncs-02.bst
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}{, f{.}.}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f{.}.~}{vv~}{ll}{ jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{
+ month "month" bibinfo.check
+ duplicate$ empty$
+ year "year" bibinfo.check duplicate$ empty$
+ { swap$ 'skip$
+ { "there's a month but no year in " cite$ * warning$ }
+ if$
+ *
+ }
+ { swap$ 'skip$
+ {
+ swap$
+ " " * swap$
+ }
+ if$
+ *
+ remove.dots
+ }
+ if$
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { emphasize ", " * swap$ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'titto.bbl.pages
+ 'titto.bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+% bbl.volume swap$ tie.or.space.prefix
+ titto.bbl.volume swap$ titto.space.prefix
+% rationale for the change above: for journals you don't want "vol." label
+% hence it does not make sense to attach the journal number to the label when
+% it is short
+ "volume" bibinfo.check
+ * *
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+% editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
+ editor "editor" format.names duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ key duplicate$ empty$
+ { pop$
+ journal duplicate$ empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+ { "journal" bibinfo.check emphasize word.in swap$ * }
+ if$
+ }
+ { word.in swap$ * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ {
+ bbl.and space.word
+ * editor #2 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { format.booktitle duplicate$ empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ }
+ { word.in swap$ * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.chapter.pages output
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ new.sentence % added by titto
+ format.bvolume output
+ format.pages output
+ new.sentence
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization "organization" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { output
+ address "address" bibinfo.check output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ {
+ address new.block.checka
+ address "address" bibinfo.check output
+ }
+ 'skip$
+ if$
+ }
+ {
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ }
+ if$
+ format.edition output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ add.colon
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished "howpublished" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+ empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization "organization" bibinfo.check output
+ }
+ { format.editors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ editor empty$
+ { publisher empty$
+ { format.number.series output }
+ {
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+ new.sentence
+ format.number.series output
+ format.organization.address output }
+ {
+ new.sentence
+ format.number.series output
+ organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {presort}
+SORT
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `titto.bst'.
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/Makefile b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/Makefile
new file mode 100644
index 000000000..c209fb871
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/Makefile
@@ -0,0 +1,24 @@
+TEX = pdflatex -shell-escape -interaction=nonstopmode -file-line-error
+PRE = $(TEX) -ini -job-name="preamble" "&pdflatex preamble.tex\dump"
+BIB = bibtex
+
+all: cmsv55.pdf
+
+view :
+ okular cmsv55.pdf
+
+cmsv55.pdf : clean cmsv55.tex cmsv55.bbl cmsv55.blg
+ $(TEX) cmsv55.tex
+ $(TEX) cmsv55.tex
+
+cmsv55.bbl cmsv5.blg : cmsv55.bib cmsv55.aux
+ $(BIB) cmsv55
+
+cmsv55.aux : cmsv55.tex
+ $(TEX) cmsv55.tex
+
+cmsv55.bib : cmsv55.tex
+ $(TEX) cmsv55.tex
+
+clean:
+ rm -f *.log *.pdf *.blg *.bbl *.aux *.out *.backup
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv5.kilepr b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv5.kilepr
new file mode 100644
index 000000000..92617e203
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv5.kilepr
@@ -0,0 +1,53 @@
+[General]
+def_graphic_ext=
+img_extIsRegExp=false
+img_extensions=.eps .jpg .jpeg .png .pdf .ps .fig .gif .dvi
+kileprversion=2
+kileversion=2.1.0
+lastDocument=cmsv5.tex
+masterDocument=
+name=auth_eloadas
+pkg_extIsRegExp=false
+pkg_extensions=.cls .sty .bbx .cbx .lbx
+src_extIsRegExp=false
+src_extensions=.tex .ltx .latex .dtx .ins .bib .mp
+
+[Tools]
+MakeIndex=
+QuickBuild=
+
+[document-settings,item:cmsv5.tex]
+Bookmarks=
+Encoding=UTF-8
+FoldedColumns=
+FoldedLines=
+Highlighting=LaTeX
+Indentation Mode=normal
+Mode=LaTeX
+ReadWrite=true
+
+[item:cmsv5.kilepr]
+archive=true
+column=0
+encoding=
+highlight=
+line=0
+mode=
+open=false
+order=-1
+
+[item:cmsv5.tex]
+archive=true
+column=1
+encoding=UTF-8
+highlight=LaTeX
+line=245
+mode=LaTeX
+open=true
+order=0
+
+[view-settings,view=0,item:cmsv5.tex]
+CursorColumn=1
+CursorLine=245
+JumpList=
+ViMarks=
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv55.tex b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv55.tex
new file mode 100644
index 000000000..613e50a5a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/cmsv55.tex
@@ -0,0 +1,76 @@
+%\documentclass[runningheads]{llncs}
+\documentclass[final]{ieee}
+
+\usepackage{microtype} %This gives MUCH better PDF results!
+%\usepackage[active]{srcltx} %DVI search
+\usepackage[cmex10]{amsmath}
+\usepackage{amssymb}
+\usepackage{fnbreak} %warn for split footnotes
+\usepackage{url}
+%\usepackage{qtree} %for drawing trees
+%\usepackage{fancybox} % if we need rounded corners
+%\usepackage{pict2e} % large circles can be drawn
+%\usepackage{courier} %for using courier in texttt{}
+%\usepackage{nth} %allows to \nth{4} to make 1st 2nd, etc.
+%\usepackage{subfigure} %allows to have side-by-side figures
+%\usepackage{booktabs} %nice tables
+%\usepackage{multirow} %allow multiple cells with rows in tabular
+\usepackage[utf8]{inputenc} % allows to write Faugere correctly
+\usepackage[bookmarks=true, citecolor=black, linkcolor=black, colorlinks=true]{hyperref}
+\hypersetup{
+pdfauthor = {Mate Soos},
+pdftitle = {CryptoMiniSat v5.5},
+pdfsubject = {SAT Competition 2018},
+pdfkeywords = {SAT Solver, DPLL},
+pdfcreator = {PdfLaTeX with hyperref package},
+pdfproducer = {PdfLaTex}}
+%\usepackage{butterma}
+
+%\usepackage{pstricks}
+\usepackage{graphicx,epsfig,xcolor}
+
+\begin{document}
+\title{The CryptoMiniSat 5.5 set of solvers at the SAT Competition 2018}
+\author{Mate Soos, National University of Singapore}
+
+\maketitle
+\thispagestyle{empty}
+\pagestyle{empty}
+
+\section{Introduction}
+This paper presents the conflict-driven clause-learning SAT solver CryptoMiniSat v5.5 (\emph{CMS}) as submitted to SAT Competition 2018. CMS aims to be a modern, open-source SAT solver that allows for multi-threaded in-processing techniques while still retaining a strong CDCL component. In general, CMS is a inprocessing SAT solver that uses optimised data structures and finely-tuned timeouts to have good control over both memory and time usage of simplification steps. Below are the changes to CMS compared to the SAT Competition 2016 version.
+
+\section{Major Improvements}
+\subsection{Careful code review}
+Over the years, much cruft has accumulated in CryptoMiniSat. This has left serious bugs in the implementation in important parts of the solver such as clause cleaning and restarting. This has lead to low performance. A code review of the most important parts of the solver such as bounded variable elimination, restarting, clause cleaning and variable activities has been conducted.
+
+\subsection{Integration of ideas from Maple\_LCM\_Dist}
+Some of the ideas from Maple\_LCM\_Dist\cite{maple}\cite{learning-based-maple} have been included into CMS. In particular, the clause cleaning system, the radical in-process distillation and the Maple-based variable activities are all used.
+
+\subsection{Cluster Tuning}
+The author has been generously given time on the ASPIRE-1 cluster of the National Supercomputing Centre Singapore\cite{nscc}. This allowed experimentation and tuning that would have been impossible otherwise. CMS has not been tuned on a cluster for over 6 years and the difference shows. A slightly interesting side-effect is that the parameters suggested by the cluster are non-intuitive, such as not simplifying the CNF straight away, but rather CDCL-solving it first. Another interesting effect is that intree probing\cite{HeuleJB13} seems to be very important.
+
+\subsection{Parallel Solving}
+As in previous competitions, CMS only shares unit and binary clauses, and shares them very rarely. The different threads, however, are run with very different, hoping to be orthogonal, parameters varying everything from clause cleaning strategies to default polarities.
+
+\subsection{Automatic Tuning}
+The "autotune" version of the solver measures internal solving parameters and re-configures itself after a preset number of conflicts to a configuration that has been suggested by the parameters and the machine learning algorithm C4.5\cite{Salzberg1994}.
+
+\section{General Notes}
+\subsection{On-the-fly Gaussian Elimination}
+On-the-fly Gaussian elimination is again part of CryptoMiniSat. This is explicitly disabled for the competition, but the code is available and well-tested. This allows for special uses of the solver that other solvers, without on-the-fly Gaussian elimination, are not capable of.
+
+\subsection{Robustness}
+CMS aims to be usable in both industry and academia. CMS has over 150 test cases and over 2000 lines of Python just for fuzzing orchestration, and runs without fault under both the ASAN and UBSAN sanitisers of clang. It also compiles and runs under Windows, Linux and MacOS X. This is in contrast many academic winning SAT solvers that produce results that are non-reproducible, cannot be compiled on anything but a few select systems, and/or produce segmentation faults if used as a library. CryptoMiniSat has extensive fuzzing setup for library usage and is very robust under strange/unexpected use cases.
+
+\section{Thanks}
+This work was supported in part by NUS ODPRT Grant, R-252-000-685-133. The computational work for this article was performed on resources of the National Supercomputing Centre, Singapore\cite{nscc}. The author would also like to thank all the users of CryptoMiniSat who have submitted over 400 issues and many pull requests to the GitHub CMS repository\cite{CMS}.
+
+
+\bibliographystyle{splncs03}
+\bibliography{sigproc}
+
+\vfill
+\pagebreak
+
+\end{document}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/ieee.cls b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/ieee.cls
new file mode 100644
index 000000000..3c57bba5d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/ieee.cls
@@ -0,0 +1,1497 @@
+% Copyright 2014 IEEEE
+% for terms of use see https://www.ieee.org/publications_standards/publications/rights/copyrightpolicy.html
+
+% =========================================================================
+% -------------------------------------------------------------------------
+% XX X
+% X
+% XX XXX XXX XXX XXX X XXXX
+% X X X X X X X X X X X
+% X XXXXX XXXXX XXXXX X X XXX
+% X X X X XX X X X X
+% XXX XXX XXX XXX XX XXX X XXXX
+% -------------------------------------------------------------------------
+% =========================================================================
+% ieee.cls --- For formatting IEEE conference & journal papers
+% --- Compiled by Gregory Plett, Sept 1997
+%
+% This class was inspired by one first compiled by Gerry Murray and
+% Silvano Balemi for LaTeX209. It was later updated for use with
+% LaTeX2e, and some bugs were fixed, all by Istvan Kollar. Lastly,
+% I have tried to make the class easier to use by paper authors.
+% Significant new functionality has been added. Many routines are
+% "borrowed" from other people's packages and modified extensively.
+% When I rembered where I got the routines from, I gave the author
+% credit.
+%
+% After I made many changes on my own, I found a version by Peter
+% N"uchter, and tried to retain some amount of compatibility with his
+% version. To be completely compatible with him, you may need to
+% manually:
+% \usepackage{rawfonts}\usepackage{oldlfont}
+% \AtBeginDocument{\parindent1.0em} (?)
+%
+%===========================================================================
+%
+% Usage:
+% \documentclass[main-mode,sub-mode,misc-options]{ieee}
+% \usepackage{your own packages}
+% \begin{document}
+% \bibliographystyle{IEEEbib}
+% \title[short]{regular}
+% \author[short]{full}
+% \maketitle
+% \begin{abstract}...\end{abstract}
+% \begin{keywords}...\end{keywords}
+% \section{...}
+% \PARstart ... or \PARstartCal ...
+% ...
+% \begin{biography}[picname.ps]{Author's name}...\end{biography}
+% \end{document}
+%
+% The document class options are:
+%
+% main-mode: One of the following is required. (draft is the default)
+% draft: Double-spaced, single column with date/time stamp.
+% submission: Double-spaced, suitable for submission for review.
+% compressed: Same as "submission", only single spaced.
+% final: Double-column, for assessing page-length and
+% format of final version.
+%
+% sub-mode:
+% techreport: This can modify "final" to produce a two-col
+% technical report.
+% internal: This can modify "submission", "compressed" or "final".
+% It changes the header to notify the reader that
+% this is a version of the manuscript to be used for
+% internal review processes only, and not to be
+% distributed.
+% submitted: This can modify "compressed" or "final". It changes
+% the header to notify the reader that this
+% is a preprint and not to be distributed.
+% inpress: This can modify "compressed" or "final". It changes the
+% header to notify the reader that this paper has
+% been accepted for publishing, but it is not yet to be
+% distributed.
+% reprint: This can modify "final". It changes the header
+% to notify the reader where the paper is reprinted from.
+%
+% misc-options:
+% narroweqnarray: Changes the spacing around the "=" sign in
+% equation arrays to make it the same as in displayed math.
+% inline: Compresses the horizontal spacing of inline math equations.
+% notitlepage: No separate title page. (default)
+% titlepage: Separate title page.
+% anonymous: Omit all author information from main part of paper.
+% Author info only prints on titlepage.
+% 9pt,10pt,11pt,12pt: Choose the appropriate type size. You should
+% not need to do this as the "correct" size is automatically
+% chosen. However, if you want, you may use these to change
+% the type size of the main text. "9pt" is a bit of a hack
+% to retain backward-compatibility.
+% invited: If the paper is an "invited" paper, then this option
+% prints "(Invited Paper)" under the authors' names.
+%
+% For regular IEEE submissions, define the journal name as:
+% \journal{IEEE Trans. Inst. Meas.}
+%
+% To specify the conference place and date:
+% \confplacedate{Ottawa, Canada, May 19--21, 1997}
+%
+% Before \maketitle, define:
+% \title{Title of paper}
+% \author{Author1\member{Fellow}\authorinfo{Department of
+% Electrical Engineering\\ Some University, Somewhere, CA 94305
+% USA} \and Author2\member{Senior Member}\authorinfo{Deptartment of
+% Measurement and Instrument Eng., Another University, ...}}
+%
+% Note, the contents of \authorinfo tends to vary depending on if it is
+% a conference or journal paper. The amount of manual changes are
+% small, and must be done by a human anyway. The example given is for an
+% IMTC conference.
+%
+% See also IEEEbib.bst and ieeefig.sty
+% Also very useful for document preparation is the style file "endfloat",
+% available on all CTAN TeX archives.
+%
+%===========================================================================
+% modified 14 October 2002:
+% - fixed bibliography listing of [#] when # < 10 and number of
+% references is greater than 9. Thanks for Janos Markus for finding
+% this bug and suggesting a solution.
+% modified 15 January 2000:
+% - "fixed" narroweqnarray. Never implemented! Now it is...
+% modified 12 January 2000:
+% - modified so only first \title and \author commands are recognized.
+% This allows LyX to have \title and \author with full syntax in
+% header, but dummy \title and \author show up in GUI.
+% - added "\date" so the \date command can change "submitted" and
+% "draft" date headers.
+% modified 11 January 2000:
+% - added PARstartLyX and PARstartCalLyX for LyX compatibility
+% - added biographyLyX
+% modified 1 Dec 1997:
+% - fixed first page in reprint mode to be same length as other pages
+% - added "invited" misc-option
+% modified 5 Sept 1997:
+% - added the inpress, reprint and internal sub-modes
+% - removed IMTC-conf and CDC-conf to separate files
+% modified 1 Sept 1997:
+% - included Babel package compatibility
+% - removed paper title from header on first page of draft
+% manuscript
+% - removed the fixed option "letterpaper" to allow a4paper (etc)
+% modified 1 Aug 1997:
+% - included the CDC-conf option
+%===========================================================================
+% **************************************************************************
+% ****** ******************************************
+% ***** LaTeX2e INITIALIZATION *****************************************
+% ****** ******************************************
+% **************************************************************************
+\typeout{Document Class `ieee' <Modified: 2000, Gregory L. Plett>.}
+\NeedsTeXFormat{LaTeX2e}[1993/11/11] % Oldest acceptable version of LaTeX2e
+\ProvidesClass{ieee}[2000/01/11] % Name of package provided, date
+\def\i@@@cls{exists}
+
+% Initial Code & Declaration of Options
+% -------------------------------------
+\newif\ifev@l \ev@lfalse % true if "final" mode.
+\newif\ifsubm@t \subm@tfalse % true if "submission" mode.
+\newif\ifdr@ft \dr@fttrue % true if "draft" mode.
+\newif\ifc@mpress \c@mpressfalse % true if "compressed" mode.
+
+\newif\if@technote \@technotefalse % true if "technote" sub-mode.
+\newif\ifintern@l \intern@lfalse % true if "internal" sub-mode.
+\newif\ifprepr@nt \prepr@ntfalse % true if "preprint" sub-mode.
+\newif\ifinpr@ss \inpr@ssfalse % true if "inpress" sub-mode.
+\newif\ifrepr@nt \repr@ntfalse % true if "reprint" sub-mode.
+
+\newif\iftitlep@ge \titlep@gefalse % true if has own titlepage
+\newif\if@non \@nonfalse % true if anonymous
+\newif\ifixpt \ixptfalse % true if trying to do 9 pt
+\newif\if@nvited \@nvitedfalse % true if an invited paper
+
+% Main options
+% ------------
+\DeclareOption{draft}{\ev@lfalse\subm@tfalse\dr@fttrue%
+ \typeout{ieee: `Draft' mode selected.}}
+\DeclareOption{submission}{\ev@lfalse\dr@ftfalse\subm@ttrue%
+ \typeout{ieee: `Submission' mode selected.}}
+\DeclareOption{compressed}{\ev@lfalse\dr@ftfalse\subm@tfalse\c@mpresstrue%
+ \typeout{ieee: `Compressed' mode selected.}}
+\DeclareOption{final}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}}
+\DeclareOption{evaluation}{\ev@ltrue\dr@ftfalse\subm@tfalse%
+ \typeout{ieee: `Final' mode selected.}} % synonym for final
+
+% Sub options
+% -----------
+\DeclareOption{technote}{\@technotetrue%
+ \typeout{ieee: `Technote' sub-mode selected.}}
+\DeclareOption{internal}{\intern@ltrue\prepr@ntfalse\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Internal-Review' sub-mode selected.}}
+\DeclareOption{submitted}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}}
+\DeclareOption{preprint}{\intern@lfalse\prepr@nttrue\inpr@ssfalse\repr@ntfalse%
+ \typeout{ieee: `Submitted' sub-mode selected.}} % synonym for submitted
+\DeclareOption{inpress}{\intern@lfalse\prepr@ntfalse\inpr@sstrue\repr@ntfalse%
+ \typeout{ieee: `Inpress' sub-mode selected.}}
+\DeclareOption{reprint}{\intern@lfalse\prepr@ntfalse\inpr@ssfalse\repr@nttrue%
+ \typeout{ieee: `Reprint' sub-mode selected.}}
+
+% Misc options
+% ------------
+ % regular or compressed "=" spacing in
+\def\eqnarr@ysep{\arraycolsep} % eqnarray (this is the default)
+ % NOTE: we must use "def" and not "="
+ % as arraycolsep not yet defined.
+\DeclareOption{narroweqnarray}{\gdef\eqnarr@ysep{0.28em\relax}%
+ \typeout{ieee: Narrow equation arrays selected.}}
+\DeclareOption{inline}{\everymath{\thinmuskip=2mu plus 1mu
+ \medmuskip=3mu plus 1mu minus 2mu
+ \thickmuskip=4mu plus 2mu\relax}%
+ \typeout{ieee: Narrower inline equations selected.}}
+\DeclareOption{notitlepage}{\titlep@gefalse%
+ \typeout{ieee: No separate title page.}}
+\DeclareOption{titlepage}{\titlep@getrue%
+ \typeout{ieee: Use separate title page.}}
+\DeclareOption{anonymous}{\@nontrue\AtBeginDocument{\glpexclude{biography}}
+ \typeout{ieee: Omit author information from paper.}}
+\DeclareOption{invited}{\@nvitedtrue%
+ \typeout{ieee: (Invited Paper).}}
+
+\DeclareOption{9pt}{\ixpttrue%
+ \typeout{ieee: Trying to emulate old `9pt' document class.}}
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+% Execution of Options/Package Loading
+% ------------------------------------
+\newlength\narrowcol
+\newlength\parindentsave % recover parindent in blsone text
+
+\ProcessOptions
+\ifev@l % if "final" mode...
+ \if@technote\ixpttrue\typeout{ieee: Trying to emulate old `9pt'
+ document class.}\fi%
+ \LoadClass[twoside,final,twocolumn,10pt]{article}
+\else % if "draft"/"submission"/(compressed) mode...
+ \ifixpt
+ \LoadClass[oneside,final,onecolumn,10pt]{article}
+ \else
+ \LoadClass[oneside,final,onecolumn,12pt]{article}
+ \fi
+\fi
+\RequirePackage[final]{graphicx}
+\RequirePackage{ifthen}
+
+% Re-Definitions of English words which must be done before
+% the Babel package (optional) is loaded.
+% ---------------------------------------------------------
+\def\keywordsname{Index Terms}
+\def\indexterms#1{\def\keywordsname{#1}}
+\def\appendicesname{Appendices}
+\def\figurename{Fig.}
+
+% **************************************************************************
+% ***** Check Sub-Options for Compatibility w/ Main-Options ************
+% **************************************************************************
+\if@technote\ifev@l\else\ClassError{ieee}{`technote' sub-mode may be
+ used only with the `final' ^^Jmain-mode. It may not be used
+ with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+\ifintern@l\ifdr@ft\ClassError{ieee}{`internal' sub-mode may be
+ used only with the ^^J`submission,' `compressed,' or `final' main-modes.
+ It may not be used ^^Jwith the `draft' main-mode}{}\endinput\fi\fi
+\ifprepr@nt\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`submitted'
+ sub-mode may be used only with the ^^J`compressed' or `final'
+ main-modes. It may not be used with either the ^^J`draft' or
+ `submission' main-modes}{}\endinput\fi\fi\fi
+\ifinpr@ss\ifc@mpress\else\ifev@l\else\ClassError{ieee}{`inpress'
+ sub-mode may be used only with the `compressed' ^^Jor `final'
+ main-modes. It may not be used with either the `draft' or
+ ^^J`submission' main-modes}{}\endinput\fi\fi\fi
+\ifrepr@nt\ifev@l\else\ClassError{ieee}{`reprint'
+ sub-mode may be used only with the `final' ^^Jmain-mode. It may not be
+ used with either the `draft,' `submission,' or ^^J`compressed'
+ main-modes}{}\endinput\fi\fi
+
+% **************************************************************************
+% ***** Page Layout Definition *****************************************
+% **************************************************************************
+%% Layout definitions (mostly) common to all options.
+
+\hoffset 0in \voffset 0in
+\headheight 12pt \headsep 7mm
+\marginparsep 10pt \marginparwidth 20pt
+\marginparpush 25pt
+\columnsep 4mm
+\parindent 1.0em
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\partopsep \z@
+\topsep 1.3ex
+\parsep \z@
+\itemsep \z@
+
+\setlength{\parindentsave}{\parindent}
+
+\ifev@l % if "evaluation" mode
+ % if camera-ready or A4paper ...
+ \ifdim\paperwidth<211mm
+ \oddsidemargin -11.4mm \evensidemargin -11.4mm
+ % for regular US Letter, not camera-ready
+ \else
+ \oddsidemargin -8.45mm \evensidemargin -8.45mm
+ \fi
+ \ifrepr@nt
+ \textheight 237.5mm % leave 6mm for cpyright on first page
+ \else
+ \textheight 243.5mm
+ \fi
+ \voffset -0.5in
+ \textwidth 182.0mm
+ \topmargin -12pt
+ \setlength{\narrowcol}{89mm}
+\else % if "draft"/"submission" mode...
+ \ifc@mpress % and "compressed"
+ \oddsidemargin -0.25in \evensidemargin -0.25in
+ \textheight 9in \textwidth 7in
+ \topmargin -0.25in
+ \setlength{\narrowcol}{7in}
+ \else % and NOT "compressed"
+ \renewcommand\baselinestretch{1.8}\renewcommand{\arraystretch}{0.8}
+ \parindent=1.8\parindent
+ \oddsidemargin 0pt \evensidemargin 0pt
+ \headheight 12pt \headsep 0.375in
+ \topmargin 0pt
+ \textheight 8.5in \textwidth 6.5in
+ \marginparsep 0in \marginparwidth 0pt
+ \marginparpush 5pt
+ \setlength{\narrowcol}{6.5in}
+ \fi
+\fi
+
+\def\normalstyle{\rmfamily}
+
+% **************************************************************************
+% ***** Font Definition ************************************************
+% **************************************************************************
+%% The 9-point option is being faked since it is not supported by the
+%% article base class.
+
+%% Check if we have selected 9 points
+\ifixpt
+\typeout{-- This is a 9 point document}
+\gdef\@ptsize{9}
+\def\@normalsize{\@setsize\normalsize{10.7pt}\ixpt\@ixpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.12pt}\viiipt\@viipt}
+\def\footnotesize{\@setsize\footnotesize{8.15pt}\viipt\@vipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vpt}
+\def\tiny{\@setsize\tiny{5pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{18pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+\fi
+%%
+%% Check if we have selected 10 points
+\def\@tempa{0}\if\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{9.2pt}\viiipt\@viiipt}
+\def\footnotesize{\@setsize\footnotesize{8.8pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{1}\if\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{2}\if\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt
+\topsep \belowdisplayshortskip%!PN
+}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\AtBeginDocument{\normalsize\normalstyle\ps@headings\pagenumbering{arabic}}
+
+% **************************************************************************
+% ***** List Definition ************************************************
+% **************************************************************************
+%% Change aspect of lists with
+%% 1) \itemindent, label indentation wrt to left list margin
+%% 2) \leftmargini, the indentation of the whole list (on left, first level)
+\ifev@l
+ \itemindent -1em
+ \leftmargini 2em
+ \leftmarginii 1em
+ \leftmarginiii 1.5em
+ \leftmarginiv 1.5em
+ \leftmarginv 1.0em
+ \leftmarginvi 1.0em
+\else
+ \itemindent -1em
+ \leftmargini 3em
+ \leftmarginii 3em
+ \leftmarginiii 3em
+ \leftmarginiv 3em
+ \leftmarginv 3em
+ \leftmarginvi 3em
+\fi
+%\itemindent 2em % Alternative values: sometimes used..
+%\leftmargini 0em
+\labelsep 5pt
+\leftmargin\leftmargini
+\labelwidth \z@
+
+\def\@listI{\leftmargin\leftmargini} \@listI
+\def\@listi{\leftmargin\leftmargini \topsep \z@ plus 1pt minus 1pt}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)} \def\theenumii{\alph{enumii}}
+\def\labelenumiii{\theenumiii.} \def\theenumiii{\roman{enumiii}}
+\def\labelenumiv{\theenumiv.} \def\theenumiv{\Alph{enumiv}}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\scriptstyle\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%% \itemindent is set to \z@ by list, so define new temporary variable
+\newdimen\tmpitemindent
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+\def\@mklab#1{#1}
+\def\description{\tmpitemindent\itemindent\list{}{\itemindent\tmpitemindent
+ \labelwidth\z@\def\makelabel##1{\hspace\labelsep\emph{##1}}}}
+\def\enddescription{\endlist\par}
+\def\enumerate{\tmpitemindent\itemindent\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \list{\csname label\@enumctr\endcsname}{\itemindent\tmpitemindent
+ \usecounter{\@enumctr}\def\makelabel##1{\hspace\labelsep\hfil{##1}}}\fi}
+\def\endenumerate{\endlist\par}
+\def\itemize{\tmpitemindent\itemindent\ifnum \@itemdepth >3 \@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}{\itemindent\tmpitemindent
+ \def\makelabel##1{\hspace\labelsep\hfil\emph{##1}}}\fi}
+\def\enditemize{\endlist\par}
+
+\newif\if@restonecol
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{coverpagestyle}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi%
+\if@twoside\mbox{}\thispagestyle{coverpagestyle}\c@page\z@\cleardoublepage\fi}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep\labelsep
+
+% **************************************************************************
+% ***** Footnote Definition ********************************************
+% **************************************************************************
+\skip\footins 10pt plus 5pt minus 2pt
+\footnotesep 7pt
+\footskip 6mm
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+\long\def\@makefntext#1{\parindent .8em\indent$^{\@thefnmark}$#1}
+\def\footnoterule{}
+
+% Reset baselinestretch within footnotes.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\long\def\@footnotetext#1{\insert\footins{\blsone%
+ \footnotesize\interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ \let\par\\
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% **************************************************************************
+% ***** Keep track of Sections *****************************************
+% **************************************************************************
+\if@technote
+ \setcounter{secnumdepth}{3}
+\else
+ \setcounter{secnumdepth}{4}
+\fi
+
+\def\thesection{\@Roman\c@section}
+\def\thesubsection{\Alph{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\thesubsubsectiondis{\Alph{subsection}.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\alph{paragraph}}
+\def\theparagraphdis{\thesubsubsectiondis.\alph{paragraph}}
+
+\def\theequation{\arabic{equation}}
+
+% **************************************************************************
+% ***** Table of Contents, List of Figures/Tables Definitions **********
+% **************************************************************************
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+ \@tempdima 1.8em \begingroup \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip-\@pnumwidth \bf\leavevmode #1\hfil\hbox to\@pnumwidth{\hss #2}
+ \par \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1em}{1.8em}}
+\def\listoftables{\section*{\listtablename}\@starttoc{lot}}
+\let\l@table\l@figure
+
+% **************************************************************************
+% ***** Float Definitions **********************************************
+% **************************************************************************
+%% Normal Floats %% Double Column Floats
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt
+%\@maxsep 20pt \@dblmaxsep 20pt %!PN
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+% Reset baselinestretch within floats.
+% Originally stolen from Stanford University thesis style.
+% --------------------------------------------------------
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\small\normalsize
+ \hsize\columnwidth \@parboxrestore}
+
+% **************************************************************************
+% ***** Caption Definition *********************************************
+% **************************************************************************
+% some journals do not have centered captions for figures.
+\newif\ifc@ptionleft \c@ptionlefttrue
+\def\leftfigcaptions{\c@ptionlefttrue}
+\def\centerfigcaptions{\c@ptionleftfalse}
+
+\long\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup \@parboxrestore \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+% changed by GLP to allow table captions to be set to a specific maximum
+% width "\captionwidth", if defined.
+\newlength{\captionindent}
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 5pt
+ \setbox\@tempboxa\hbox{\small #1.~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\small #1.~ }
+ %\setlength\captionindent{\wd\@tempboxa} \divide\captionindent by 2
+ %\parbox[t]{\hsize}{\small \hangindent \captionindent \hangafter=1%
+ \parbox[t]{\hsize}{\small
+ \unhbox\@tempboxa#2}
+ \else \hbox
+ to\hsize{\small\ifc@ptionleft\else\hfil\fi\box\@tempboxa\hfil}
+ \fi
+\else
+ \begin{center}
+ \ifx\captionwidth\undefined {\small #1}\\{\small\scshape #2}
+ \else
+ \begin{minipage}{\captionwidth}
+ \begin{center}{\small #1}\\{\small\scshape #2}\end{center}
+ \end{minipage}
+ \fi
+ \end{center}\vskip 4pt
+\fi}
+
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\ \thefigure}
+%\def\figure{\@float{figure}} % GLP
+%\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% **************************************************************************
+% ***** Header/Footer Definition ***************************************
+% **************************************************************************
+% compute the time in hours and minutes; make new vars \timehh and \timemm
+\newcount\timehh\newcount\timemm\timehh=\time\divide\timehh by 60
+\timemm=\time\count255=\timehh\multiply\count255 by-60
+\advance\timemm by \count255
+\ifnum\timehh=12\def\apm{pm}\else
+\ifnum\timehh>12\def\apm{pm}\advance\timehh by-12\else
+\def\apm{am}\fi\fi
+\def\t@me{\number\timehh\,:\,\ifnum\timemm<10 0\fi\number\timemm\,\apm}
+
+% default definitions
+% -------------------
+\def\theevenhe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+\def\theoddhe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+\def\theevenf@@t{}
+\def\theoddf@@t{}
+
+\def\theeventphe@d{\footnotesize\thepage \hfil \hbox{}}
+\def\theoddtphe@d{\hbox{}\footnotesize \hfil \thepage}
+\def\theeventpf@@t{}
+\def\theoddtpf@@t{}
+
+\def\theevencphe@d{}
+\def\theoddcphe@d{}
+\def\theevencpf@@t{}
+\def\theoddcpf@@t{}
+
+\def\internalmsg{Preliminary version for evaluation: Please do not
+ circulate without the permission of the author(s)}
+\def\submittedmsg{SUBMITTED FOR PUBLICATION TO:}
+\def\acceptedmsg{ACCEPTED FOR PUBLICATION:}
+\def\inpressmsg{(IN PRESS)}
+\def\reprintmsg{REPRINTED FROM:}
+
+% default cover page style (optional cover page)
+% ----------------------------------------------
+\def\ps@coverpagestyle{
+ \def\@oddhead{\theoddcphe@d} \def\@evenhead{\theevencphe@d}
+ \def\@oddfoot{\theoddcpf@@t} \def\@evenfoot{\theevencpf@@t}
+}
+
+% default title page style (first page of paper)
+% ----------------------------------------------
+\def\ps@titlepagestyle{
+ \def\@oddhead{\theoddtphe@d} \def\@evenhead{\theeventphe@d}
+ \def\@oddfoot{\theoddtpf@@t} \def\@evenfoot{\theeventpf@@t}
+}
+
+% default regular page style
+% --------------------------
+\if@twoside
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@evenhead{\theevenhe@d}
+ \def\@oddfoot{\theoddf@@t} \def\@evenfoot{\theevenf@@t}
+ }
+\else
+ \def\ps@headings{
+ \def\@oddhead{\theoddhe@d}
+ \def\@oddfoot{\theoddf@@t}
+ \def\@evenhead{} \def\@evenfoot{}
+ }
+\fi
+
+% For draft mode (no sub-modes allowed)
+% -------------------------------------
+\ifdr@ft
+ \def\leftmark{\sh@rttitle}\let\rightmark\leftmark
+ \def\theoddf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theevenf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+ \def\theoddtpf@@t{\footnotesize\today---\t@me\hfil DRAFT}
+ \def\theeventpf@@t{\footnotesize DRAFT\hfil\today---\t@me}
+\fi
+
+% For submission mode (default plus internal sub-modes allowed)
+% -------------------------------------------------------------
+\ifsubm@t
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \else % put date on first page.
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+\fi
+
+% For compressed mode (default, internal, submitted and
+% inpress sub-modes allowed)
+% -----------------------------------------------------
+\ifc@mpress
+ \def\leftmark{\sh@rttitle}\def\rightmark{\titl@line}
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \edef\TODAY{\uppercase{\today}}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddtphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \thepage}
+ \def\theevencphe@d{\footnotesize\hbox{} \hfil \submittedmsg\
+ \@journal\@titletext, \TODAY}
+ \def\theoddcphe@d{\footnotesize\submittedmsg\
+ \@journal\@titletext, \TODAY\hfil \hbox{}}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \fi
+\fi
+
+% For final (evaluate) mode (default, techreport, internal,
+% submitted, inpress and reprint sub-modes allowed)
+% ---------------------------------------------------------
+\ifev@l
+ \edef\TODAY{\uppercase{\today}}
+ \def\leftmark{\@journal\@titletext}\def\rightmark{\titl@line}
+ \def\theeventphe@d{\footnotesize\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\leftmark \hfil \thepage}
+ \if@technote % make header a little bigger
+ \def\theevenhe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddhe@d{\hbox{}\small\rightmark \hfil \thepage}
+ \def\theeventphe@d{\small\thepage \hfil \leftmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\small\leftmark \hfil \thepage}
+ \fi
+ \ifintern@l
+ \def\theeventphe@d{\footnotesize\thepage \hfil \rightmark\hbox{}}
+ \def\theoddtphe@d{\hbox{}\footnotesize\rightmark \hfil \thepage}
+ \def\rightmark{\vbox to 0pt{\vss\hbox{\internalmsg} \hbox{\sh@rttitle}}}
+ \def\leftmark{\vbox to 0pt{\vss\hbox{\internalmsg}
+ \hbox{\phantom{\internalmsg}\llap{\sh@rttitle}}}}
+ \fi
+ \ifprepr@nt
+ \def\leftmark{\submittedmsg\ \@journal\@titletext, \TODAY}
+ \fi
+ \ifinpr@ss
+ \def\leftmark{\acceptedmsg\ \@journal\@titletext, \inpressmsg}
+ \fi
+ \ifrepr@nt
+ % reset page size on second and following pages b/c no copyright info
+ \let\oldshipout\shipout
+ \gdef\shipout{\global\textheight 243.5mm\oldshipout}
+ \def\theeventpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\theoddtpf@@t{\footnotesize\hfil\@ieeecopyright\hfil}
+ \def\leftmark{\reprintmsg\ \@journal\@titletext}
+ \fi
+\fi
+
+%% Defines the command for putting the header. footernote{TEXT} is the same
+%% as markboth{TEXT}{TEXT}. Here for compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+\def\footernote#1{\markboth{#1}{#1}}
+
+% **************************************************************************
+% ***** Citation/Bibliography Definitions ******************************
+% **************************************************************************
+%% separate citations with "], ["
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{],
+[}\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on
+page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{[{#1\if@tempswa, #2\fi}]}
+
+%% Allow short (name-less) citations, when used in conjunction with a
+%% bibliography style that creates labels like \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
+
+\def\thebibliography#1{\section*{\refname}\footnotesize\list
+ {\hss[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep \itemsep 0pt plus .5pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+ \ifev@l\else\normalsize\fi %added by GLP
+}
+\let\endthebibliography=\endlist
+
+% **************************************************************************
+% ***** Appendix/Appendices Definitions ********************************
+% **************************************************************************
+\newcounter{numappendices}\setcounter{numappendices}{0}
+\newif\ifappendix \appendixfalse
+%% appendix command for one single appendix
+\def\appendix{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}}
+ \ifnum \value{numappendices}>1
+ \section*{\appendicesname}
+ \else
+ \section*{\appendixname}
+ \fi
+ \setcounter{numappendices}{0}
+}
+%% appendices command for multiple appendicies
+\def\appendices{\par
+ \appendixtrue
+ \typeout{appendices: \arabic{numappendices}}
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \gdef\thesection{\Alph{section}} \section*{\appendicesname}
+ \setcounter{numappendices}{0}
+}
+\AtEndDocument{\if@filesw\immediate\write\@auxout{\string\setcounter{numappendices}{\arabic{numappendices}}}\fi}
+
+% **************************************************************************
+% ***** Title Definitions **********************************************
+% **************************************************************************
+\def\titl@line{\sh@rttitle} %for the header at the top of the page.
+
+\def\@title{\typeout{ieee: Warning! No \noexpand\title given!}}
+\def\title{\@ifnextchar [{\titlea}{\titleb}}%]
+
+\def\set@title#1{\gdef\@title{#1}\global\def\set@title##1{}}
+\def\setsh@rttitle#1{\gdef\sh@rttitle{#1}\global\def\setsh@rttitle##1{}}
+\def\titlea[#1]#2{\set@title{#2}\setsh@rttitle{\uppercase{#1}}}
+\def\titleb#1{\set@title{#1}\setsh@rttitle{\uppercase{#1}}}
+
+\def\authorinfo#1{\let\\\relax\thanks{#1}}
+
+\ifev@l
+ \if@technote
+ \def\member#1{}
+ \else
+ \def\member#1{, \emph{#1, IEEE}}
+ \fi
+\else
+ \def\member#1{}
+\fi
+
+\def\and{\unskip% % \begin{tabular}
+\end{tabular}%
+\hskip 0pt plus 0.1pt%
+\begin{tabular}[t]{@{}c@{}}\ }%
+
+\def\@author{\typeout{ieee: Warning! No \noexpand\author given!}}
+\def\author{\@ifnextchar [{\authora}{\authorb}}%]
+\def\set@author#1{\gdef\@author{#1}\global\def\set@author##1{}}
+\def\settitl@line#1{\gdef\titl@line{#1}\global\def\settitl@line##1{}}
+\def\authora[#1]#2{\set@author{#2}\if@non\else\settitl@line{#1: \sh@rttitle}\fi}
+\def\authorb#1{\set@author{#1}}
+
+\def\date#1{\def\today{#1}\edef\TODAY{\uppercase{\today}}}
+
+\long\def\maketitle{%
+ \begingroup
+ \let\@thanks\@empty
+ \renewcommand\thefootnote{} % the \thanks{} mark type is empty
+ \iftitlep@ge\begin{titlepage}\@maketitlepage\@thanks\end{titlepage}%
+ \let\@thanks\@empty\fi
+ \thispagestyle{titlepagestyle}
+ \if@twocolumn
+ \if@technote
+ %\if@twoside\newpage\cleardoublepage\else\newpage\fi%
+ \newpage\global\@topnum\z@
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else
+ \ifnum \col@number=\@ne
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi
+ \@maketitle
+ \else \twocolumn[%
+ \ifrepr@nt%
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo%
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi%
+ \fi%
+ \@maketitle]%
+ \fi
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \ifrepr@nt
+ \ifx\@loginfo\undefined\typeout{ieee: Warning! No \noexpand\loginfo
+ given!}\else\let\\\relax\thanks{\@loginfo}\fi
+ \fi
+ \@maketitle
+ \fi
+ \thispagestyle{titlepagestyle}%
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax \global\let\maketitle\relax
+ \global\let\@maketitle\relax \global\let\@thanks\@empty
+ \global\let\@author\@empty \global\let\@date\@empty
+ \global\let\@title\@empty \global\let\title\relax
+ \global\let\author\relax \global\let\date\relax
+ \global\let\and\relax
+}
+
+\long\def\@maketitle{\unskip\newpage%
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\if@non\else\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}\fi\par
+ \else\unskip
+ \noindent{\Huge\@title\par}%
+ \if@non\else\vskip1.0em%
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}}%
+ \fi\par%
+ \if@nvited\vskip1.0em\noindent\emph{\large(Invited Paper)}\par\fi
+ \fi
+ \ifrepr@nt
+ \ifx\@lognumber\undefined\typeout{ieee: Warning! No
+ \noexpand\pubitemident or \noexpand\lognumber
+ given!}\else\thanks{\@lognumber}\fi%
+ \fi
+ \end{center}\par\vskip 0.5em}%
+
+\long\def\@maketitlepage{\newpage%
+ \mbox{}\vfil
+ \begin{center}\blsone
+ \let \footnote \thanks
+ \if@technote
+ {\bfseries\@title\par}\vskip 1.3em{\lineskip .5em
+ \noindent\begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}
+ \else
+ \vskip0.2em{\Huge\@title\par}\vskip1.0em%
+ \iftitlep@ge\vfil\fi
+ \noindent{\large\lineskip .5em%
+ \begin{tabular}[t]{@{}c@{}}\@author\end{tabular}\par}%
+ \fi
+ \end{center}\par\vfil\mbox{}}
+
+\def\@journal{\typeout{ieee: Warning! No \noexpand\journal given!}}
+\def\journal#1{\def\@journal{\uppercase{#1}}}
+
+\def\@ieeecopyright{\typeout{ieee: Warning! No \noexpand\ieeecopyright given!}}
+\def\ieeecopyright#1{\def\@ieeecopyright{#1}}
+
+\def\lognumber#1{\def\@lognumber{IEEE Log Number #1.}}
+\def\pubitemident#1{\def\@lognumber{Publisher Item Identifier #1.}}
+\long\def\loginfo#1{\long\def\@loginfo{\hbox{\vrule height 3ex width \z@}#1}}
+
+\def\sh@rttitle{}
+\def\@titletext{}
+\def\titletext#1{\def\@titletext{#1}}
+
+\def\firstpage#1{\setcounter{page}{#1}}
+
+% **************************************************************************
+% ***** Abstract Definition ********************************************
+% **************************************************************************
+\def\abstract{%
+ \if@twocolumn
+ \small\bfseries{\itshape\abstractname\/---}%
+ \else
+ \begin{center}\vspace{-0.8em}\small\bf\abstractname\end{center}
+ \quotation\small
+ \fi\ignorespaces}
+\def\endabstract{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Keywords Definition ********************************************
+% **************************************************************************
+\def\keywords{\vspace{-.3em}
+ \if@twocolumn
+ \small\bfseries{\itshape\keywordsname\/---}%
+ \else
+ \begin{center}\small\bf\keywordsname\end{center}\quotation\small
+ \fi\ignorespaces}
+\def\endkeywords{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\normalstyle}
+
+% **************************************************************************
+% ***** Fix Section Numbering ******************************************
+% **************************************************************************
+\gdef\@punct{.\ \ } % Punctuation after run-in section heading
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{%
+ %\ifnum #2=1\Roman{#1}.\fi\ifnum #2=2\Alph{#1}.\fi
+ \ifnum #2=1\thesection.\fi
+ \ifnum #2=2\thesubsection.\fi
+ \ifnum #2>2{\csname the#1dis\endcsname}\if@technote.\fi\fi \hskip .5em}
+ \ifnum #2=1\ifappendix\stepcounter{numappendices}\fi\fi
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}
+ \fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5\@punct}\fi
+ \@xsect{#3}}
+
+% **************************************************************************
+% ***** Section Definitions ********************************************
+% **************************************************************************
+\def\section{\@startsection{section}{1}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\centering\scshape}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\itshape}}
+\if@technote
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .1ex}{0pt}{\itshape}}
+\else
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\normalstyle}}
+ \def\paragraph{\@startsection{paragraph}{4}{\z@}{1.0ex plus .5ex
+ minus .2ex}{0ex}{\normalstyle}}
+\fi
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\def\QED{\mbox{\rule[0pt]{1.5ex}{1.5ex}}}
+\def\proof{\noindent\hspace{1em}{\it Proof: }}
+\def\endproof{\hspace*{\fill}~\QED\par\endtrivlist\unskip}
+\def\@begintheorem#1#2{\tmpitemindent\itemindent\topsep 0pt\normalstyle\trivlist
+ \item[\hskip \labelsep{\indent\it #1\ #2:}]\itemindent\tmpitemindent}
+\def\@opargbegintheorem#1#2#3{\tmpitemindent\itemindent\topsep 0pt\normalstyle \trivlist
+ \item[\hskip\labelsep{\indent\it #1\ #2\ \normalstyle(#3)}]\itemindent\tmpitemindent}
+\def\@endtheorem{\endtrivlist\unskip}
+
+% **************************************************************************
+% ***** Special Environment Definitions ********************************
+% **************************************************************************
+\if@twoside\else\raggedbottom\fi
+
+%% Definition for Big letter at the beginning of a paragraph
+%%
+\def\PARstart#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartCal#1#2 {\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmsy10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1\/}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\def\PARstartLyX#1{\PARstart #1}
+\def\PARstartCalLyX#1{\PARstartCal #1}
+
+\if@technote\def\PARstart#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartCal#1#2{#1#2}\fi % if technical note, disable it
+\if@technote\def\PARstartLyX#1{#1}\fi % if technical note, disable it
+\if@technote\def\PARstartCalLyx#1{#1}\fi % if technical note, disable it
+
+% **************************************************************************
+% ***** Misc. Definitions **********************************************
+% **************************************************************************
+%Restore single spacing
+\newcommand{\blsone}{\renewcommand\baselinestretch{1}%
+ \renewcommand\arraystretch{1.2}\setlength{\parindent}{\parindentsave}%
+ \normalsize}
+\newcommand{\capitem}[1]{{\hspace{0.2ex}(#1)}~}
+\newcommand{\insdate}{}
+
+% **************************************************************************
+% ***** MATH Definitions ***********************************************
+% **************************************************************************
+\def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \eqnarr@ysep\hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \eqnarr@ysep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\def\endeqnarray{%
+ \@@eqncr
+ \egroup
+ \global\advance\c@equation\m@ne
+ $$\@ignoretrue
+}
+
+% **************************************************************************
+% ***** Biography Definitions ******************************************
+% **************************************************************************
+% This is the main code for the biography environment of the IEEE
+% transactions class. The previous biography code had some known
+% problems which were difficult to fix. The crux of the issue was that
+% the photo frame was overlaid by text when \baselinestretch>1 or when
+% the biography consisted of multiple short paragraphs.
+%
+% The fix was done by extracting code from the excellent package:
+% 'picinpar.sty' version 1.2a as of july 13, 1993
+% by Friedhelm Sowa
+%
+% (At least most of) The bugs you find in this code were introduced
+% unwittingly by myself.
+%
+%----------------
+% Known problems:
+%
+% - Don't use multiple blank lines to separate paragraphs. A single
+% blank line works well, but multiple blank lines will confuse
+% the code. This has something to do with the \def\par{\\\indent}
+% line, but I can't think of an appropriate fix. Similarly, make
+% sure the environment doesn't end with an extra blank line.
+% - Don't use \samepage
+% - Use \footnotemark within and \footnotetext outside the
+% window-environment instead of \footnote
+% - When using the epic-package load picinpar before epic
+% like \documentstyle[...,picinpar,epic]{...}
+%
+% Counts
+\newcount\br \newcount\nb \newcount\tcdsav \newcount\tcl \newcount\tcd
+\newcount\tcn \newcount\cumtcl
+% Dimens
+\newdimen\rtside \newdimen\hpic \newdimen\vpic \newdimen\strutilg
+\newdimen\picwd \newdimen\topheight \newdimen\ilg \newdimen\lpic
+\newdimen\lwindowsep \newdimen\rwindowsep % VK 10 Feb 93
+\lwindowsep0.5\baselineskip % "
+\rwindowsep0.5\baselineskip % "
+\newdimen\cumpar
+% Tokens
+\newtoks\twa \newtoks\la \newtoks\ra \newtoks\ha \newtoks\pictoc
+% Boxes
+\newbox\rawtext \newbox\holder \newbox\windowbox \newbox\wartext
+\newbox\finaltext \newbox\aslice \newbox\bslice \newbox\wbox
+\newbox\wstrutbox \newbox\picbox \newbox\waslice \newbox\wbslice
+\newbox\fslice
+ % Another strut
+\def\wstrut{\relax\ifmmode\copy\wstrutbox\else\unhcopy\wstrutbox\fi}
+%
+
+\def\getpic#1{\sbox{\@tempboxa}{\includegraphics{#1}}%
+\newcount\tmpcta \tmpcta=\ht\@tempboxa%
+\newcount\tmpctb \tmpctb=\wd\@tempboxa%
+\divide\tmpctb by 100%
+\divide\tmpcta by\tmpctb%
+\ifnum\tmpcta>133%
+\typeout{ieee: Biography picture `#1' too tall.}%
+\frame{\hbox to 25mm{\hfil\resizebox{!}{32mm}{\usebox{\@tempboxa}}\hfil}}%
+\else \ifnum\tmpcta<123%
+\typeout{ieee: Biography picture `#1' too wide.}%
+\frame{\vbox to 32mm{\vss\hbox{\resizebox{25mm}{!}{\usebox{\@tempboxa}}}\vss}}%
+\else%
+\resizebox{25mm}{32mm}{\usebox{\@tempboxa}}
+\fi\fi}
+
+\long\def\biographyLyX#1{\if@non\else\begin{biography} #1\end{biography}\fi}
+
+\if@non
+ \long\def\biography{}
+\else
+ \long\def\biography{\@ifnextchar [{\@biographyb}{\@biographya[{\unitlength
+ 1mm\hbox{\framebox(25,32){}}}]}}
+\fi
+
+\long\def\@biographyb[#1]{\@biographya[\getpic{#1}]}
+
+\long\def\@biographya[#1]#2{\bgroup
+\footnotesize\bigskip\bigskip\bigskip\parskip=0pt\par%
+\rule{0pt}{35mm}\vspace*{-35mm}\par% garantees correct page breaking
+\begin{main@bio}[{#1}]%
+\noindent{\bf #2}%
+}
+\def\endbiography{\if@non\else\end{main@bio}\egroup\fi}
+
+\long\def\main@bio[#1]{% #1 is the material for setting a graphic box
+\vskip\parskip\everypar{}
+\global\cumpar=0pt
+\global\cumtcl=0
+ \tcd=0
+ \rtside=0pt
+% \hpic=\linewidth
+ \twa={} \la={} \ra={} \ha={}
+\setbox\wbox=\hbox{(}
+\computeilg
+\pictoc={#1}
+\setbox\windowbox=\vbox{\hbox{#1}}
+\picwd=\wd\windowbox
+\hpic=\picwd
+\vpic=\ht\windowbox\advance\vpic\dp\windowbox
+\rtside=\linewidth\advance\rtside-\picwd
+\setbox\picbox=\vbox{\hsize=\hpic\vbox to\vpic{\box\windowbox}}% \vfill}}%
+
+\vpic=\ht\picbox\advance\vpic\dp\picbox
+\ifdim\rtside>0pt\advance\rtside-\rwindowsep\fi % "
+\global\br=\rtside
+\ifnum\picwd=0
+\ifdim\vpic>0pt\picwd=\hpic
+\else\vpic=\ht\picbox\advance\vpic\dp\picbox
+\fi
+\fi
+ \global\tcl=0 \lpic=0pt
+ \loop\global\advance\tcl by 1 \lpic=\tcl\baselineskip
+ \ifdim\lpic<\vpic\repeat
+ \vpic=\lpic
+ \global\cumtcl=\tcl
+%
+% Here we know exactly the number of indented lines and
+% are able to generate the tokens for the \parshape list
+%
+ \ifnum\br>0\ra={ 0pt \rtside}\fi
+ \ifnum\tcd>0\ha={ 0pt \linewidth}\fi
+ \ifnum\tcl<1\global\tcl=1\fi
+ \createparshapespec
+ \tcd=0 % restore the lintel
+ \global\tcdsav=0
+%
+% This is a very tricky part of the package. Some day there
+% will exist a detailed documentation.
+%
+\def\par{\\\indent}
+%
+% This is where we start to pick up the paragraph(s)
+%
+ \setbox\rawtext=\vbox\bgroup\unvbox\rawtext\unskip
+ \clubpenalty=0\widowpenalty=0
+ \ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+ \tolerance=1000
+ \parshape=\tcn \the\twa }
+%
+\def\endmain@bio{%
+ %\par
+ \global\tcd=\tcdsav
+ \egroup\vskip\parskip\parshape=0 % reset parshape; end \box\rawtext
+ \vbadness=10000
+ \splittopskip=0pt
+%
+% Now we build the boxes beside the window
+%
+\global\topheight=\tcl\baselineskip
+\ifnum\br>0\setbox\holder=\vsplit\rawtext to\topheight\fi
+\tcn=\tcl \nb=0
+\ifnum\br>0\nb=\tcn\fi
+%
+% text on the right side
+%
+\ifnum\nb>0
+ \loop\advance\nb -1
+ \setbox\bslice=\vsplit\holder to\baselineskip
+ \prune\bslice\rtside
+ \setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+ to\rtside{\box\bslice\hfil}}
+ \ifdim\ht\holder>0pt\repeat
+\fi
+%GLP add fix to make sure bio starts at top of picture
+\setbox\wbslice=\vbox to\topheight{\unvbox\wbslice\vfill\vss}
+%
+% fixing the dimensions of the window part
+%
+\topheight=\ht\wbslice
+%
+% ship out the window material to the main vertical list
+%
+\setbox\windowbox=\vbox{\hbox to\linewidth{%
+\vbox to\topheight{\hrule width\picwd height0pt depth0pt\vskip0pt%
+\vfill\unvbox\picbox%
+\ifnum\picwd>0\vfill\fi%
+\vss}\ifnum\br>0\hfill\vbox{\box\wbslice}\fi}}%
+%
+\unvbox\windowbox%
+\loop% lines below picture....
+ \setbox\bslice=\vsplit\rawtext to\baselineskip
+ \prune\bslice\linewidth
+ \setbox\wbslice=\vbox{\hbox to\linewidth{\box\bslice\hfil}}
+ \unvbox\wbslice
+ \ifdim\ht\rawtext>0pt
+\repeat
+%GLP
+%\ifnum\nb>0\topheight=\nb\baselineskip %\advance\topheight by\ilg
+%\vspace*{\topheight}
+%\fi
+}% FINITO
+%
+% What else do we need?
+%
+\def\prune#1#2{
+% take a \vbox containing a single \hbox,
+% \unvbox it, and cancel the \lastskip
+% put in a \hbox of width #2
+ \unvbox#1 \setbox#1=\lastbox % \box#1 now is an \hbox
+ \ifdim\ht#1=\parskip
+ \setbox#1=\hbox to#2{\vrule height\parskip depth0pt width0pt\hfill}
+ \else\ifdim\ht#1=0pt\relax
+ \else\setbox#1=\hbox to#2{\wstrut\unhbox#1\unskip}\fi\fi}
+%
+% Here the token \twa is generated.
+% It's not so difficult as it looks like.
+%
+\def\createparshapespec{%
+\global\tcn=0
+\ifnum\br>0\global\tcn=\tcl\fi
+\nb=0
+\ifnum\br>0\nb=\tcn\fi
+\global\advance\tcn by\tcd \global\advance\tcn by1
+\ifnum\tcd>0
+\loop\twa=\expandafter{\the\twa\the\ha}\advance\tcd -1
+\ifnum\tcd>0\repeat
+\fi
+\ifnum\nb>0
+\loop\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\nb>0\repeat
+\fi
+\global\twa=\expandafter{\the\twa 0pt \the\linewidth}}
+%
+\def\computeilg{% compute the interline glue
+ \tcl=0\ilg=0pt\strutilg=0pt
+ \loop\setbox\wbox=\hbox{\char\tcl}
+ \ifdim\ht\wbox>\ilg\ilg=\ht\wbox\fi
+ \ifdim\dp\wbox>\strutilg\strutilg=\dp\wbox\fi
+ \advance\tcl by 1
+ \ifnum\tcl<128\repeat
+ \ht\wbox=\ilg
+ \dp\wbox=\strutilg
+ \strutilg=\ht\wbox %\advance\strutilg by\ilg
+ \ifdim\strutilg>\baselineskip
+ \typeout{character with height greater baselineskip found in font}
+ \typeout{baselineskip changed to 1.5 of that height!}
+ \baselineskip=1.5\strutilg
+ \fi
+ \global\ilg=\baselineskip
+ \global\advance\ilg-\ht\wbox \global\advance\ilg-\dp\wbox
+ \strutilg=\ht\wbox \advance\strutilg by\ilg
+ \setbox\wstrutbox=\hbox{\vrule height\strutilg depth\dp\wbox width0pt}}
+
+
+% the following code from version.sty by Stephen Bellantoni 1990, loosely
+% based on "annotation.sty" by Tom Hofmann. Used to exclude "biography" from
+% anonymous mode.
+\begingroup
+\catcode`@=11\relax%
+\catcode`{=12\relax\catcode`}=12\relax%
+\catcode`(=1\relax \catcode`)=2\relax%
+\gdef\glpinclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ ()%
+ \expandafter\gdef\csname end#1\endcsname%
+ ()%
+)%
+\gdef\glpexclude#1(%
+ \expandafter\gdef\csname #1\endcsname%
+ (\@bsphack\catcode`{=12\relax\catcode`}=12\relax\csname #1@NOTE\endcsname)%
+ \long\expandafter\gdef\csname #1@NOTE\endcsname ##1\end{#1}%
+ (\csname #1END@NOTE\endcsname)%
+ \expandafter\gdef\csname #1END@NOTE\endcsname%
+ (\@esphack\end(#1))%
+)%
+\endgroup
+
+%-------
+\def\@confplacedate{\typeout{ieee: Warning! No \noexpand\confplacedate set!}
+\bfseries `confplacedate' needs to be set. For example, to: Stanford, CA, USA,
+September 29--30, 1991}
+\def\confplacedate#1{\def\@confplacedate{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% End of ieee.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/sigproc.bib b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/sigproc.bib
new file mode 100644
index 000000000..27e27cf10
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/sigproc.bib
@@ -0,0 +1,2681 @@
+@BOOK{salas:calculus,
+ AUTHOR = "S.L. Salas and Einar Hille",
+ TITLE = "Calculus: One and Several Variable",
+ PUBLISHER = "John Wiley and Sons",
+ ADDRESS = "New York",
+ YEAR = "1978" }
+
+@inproceedings{804350,
+ author = {Thomas J. Schaefer},
+ title = {The complexity of satisfiability problems},
+ booktitle = {{STOC}'78},
+ year = {1978},
+ pages = {216--226},
+ location = {San Diego, California, United States},
+ doi = {http://doi.acm.org/10.1145/800133.804350},
+}
+
+@InProceedings{learning-based-maple,
+author="Liang, Jia Hui
+and Ganesh, Vijay
+and Poupart, Pascal
+and Czarnecki, Krzysztof",
+editor="Creignou, Nadia
+and Le Berre, Daniel",
+title="{Learning Rate Based Branching Heuristic for SAT Solvers}",
+booktitle="{Theory and Applications of Satisfiability Testing -- SAT 2016}",
+year="2016",
+publisher="Springer International Publishing",
+address="Cham",
+pages="123--140",
+isbn="978-3-319-40970-2"
+}
+
+@Article{Salzberg1994,
+author="Salzberg, Steven L.",
+title="{C4.5: Programs for Machine Learning by J. Ross Quinlan. Morgan Kaufmann Publishers, Inc., 1993}",
+journal="Machine Learning",
+year="1994",
+month="Sep",
+day="01",
+volume="16",
+number="3",
+pages="235--240",
+issn="1573-0565",
+doi="10.1007/BF00993309",
+url="https://doi.org/10.1007/BF00993309"
+}
+
+
+
+@inproceedings{HeuleJB13,
+ author = {Marijn Heule and
+ Matti J{\"{a}}rvisalo and
+ Armin Biere},
+ title = {Revisiting {H}yper-{B}inary {R}esolution},
+ booktitle = {Integration of {AI} and {OR} Techniques in Constraint Programming
+ for Combinatorial Optimization Problems, 10th International Conference,
+ {CPAIOR} 2013, Yorktown Heights, NY, USA, May 18-22, 2013. Proceedings},
+ pages = {77--93},
+ year = {2013},
+ crossref = {DBLP:conf/cpaior/2013},
+ url = {https://doi.org/10.1007/978-3-642-38171-3_6},
+ doi = {10.1007/978-3-642-38171-3_6},
+ timestamp = {Thu, 15 Jun 2017 21:38:39 +0200},
+ biburl = {https://dblp.org/rec/bib/conf/cpaior/HeuleJB13},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
+
+@proceedings{DBLP:conf/cpaior/2013,
+ editor = {Carla P. Gomes and
+ Meinolf Sellmann},
+ title = {Integration of {AI} and {OR} Techniques in Constraint Programming
+ for Combinatorial Optimization Problems, 10th International Conference,
+ {CPAIOR} 2013, Yorktown Heights, NY, USA, May 18-22, 2013. Proceedings},
+ series = {Lecture Notes in Computer Science},
+ volume = {7874},
+ publisher = {Springer},
+ year = {2013},
+ url = {https://doi.org/10.1007/978-3-642-38171-3},
+ doi = {10.1007/978-3-642-38171-3},
+ isbn = {978-3-642-38170-6},
+ timestamp = {Wed, 17 May 2017 14:24:38 +0200},
+ biburl = {https://dblp.org/rec/bib/conf/cpaior/2013},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
+
+Proceedings of the tenth annual ACM symposium on Theory of computing --
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings{smith94phase,
+ author = "Barbara Smith",
+ title = "The Phase Transition in Constraint Satisfaction Problems: {A} {CL}oser Look at the Mushy Region",
+ booktitle = {{ECAI}'94},
+ year = "1994"
+}
+
+@inproceedings{swdia,
+ author = "Chanseok Oh",
+ title = "{MiniSat HACK 999ED, MiniSat HACK 1430ED and SWDiA5BY}",
+ booktitle = "SAT Competition 2014 Booklet",
+ year = "201",
+}
+
+@inproceedings{lingeling,
+ author = "Armin Biere",
+ title = "Yet another Local Search Solver and Lingeling and Friends Entering the SAT Competition 2014",
+ booktitle = "SAT Competition 2014 Booklet",
+ year = "2014",
+}
+
+@inproceedings{maple,
+ author="Tomas Balyo and Marijn J. H. Heule and Matti Jarvisalo",
+ title="{MapleLRB\_LCM, Maple\_LCM, Maple\_LCM\_Dist, MapleLRB\_LCMoccRestart and Glucose-3.0+width in SAT Competition 2017}",
+ booktitle = "Proceedings of SAT Competition 2017",
+ year="2018"
+}
+
+@misc {nscc,
+ author="ASTAR and NTU and NUS and SUTD",
+ title="{National Supercomputing Centre (NSCC)} {S}ingapore",
+ url="https://www.nscc.sg/about-nscc/overview/",
+ year="2018"
+}
+
+@misc {CMS,
+ author="Mate Soos",
+ title="{CryptoMiniSat SAT solver GitHub page}",
+ url="https://github.com/msoos/cryptominisat",
+ year="2018"
+}
+
+ \url{https://github.com/msoos/cryptominisat}
+
+@inproceedings{cheeseman91where,
+ author = "Peter Cheeseman and Bob Kanefsky and William M. Taylor",
+ title = "Where the Really Hard Problems Are",
+ booktitle = "IJCAI-91",
+ pages = "331--337",
+ year = "1991",
+}
+Proceedings of the Twelfth International Joint Conference on Artificial Intelligence, Sidney, Australia
+
+@INPROCEEDINGS{Juels-2004-scn,
+ author = {Juels, Ari},
+ title = {Minimalist Cryptography for Low-Cost {RFID} Tags},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2004},
+ year = {2004},
+ editor = {Blundo, Carlo and Cimato, Stelvio},
+ volume = {3352},
+ series = {LNCS},
+ pages = {149--164},
+ month = {September},
+ publisher = {Springer-Verlag},
+ address = {Amalfi, Italia},
+}
+
+
+@inproceedings{achlioptas-threshold,
+ author = {Dimitris Achlioptas and Yuval Peres},
+ title = {The Threshold for Random k-{SAT} is 2\^\ k(ln 2 - O(k))},
+ booktitle = {{STOC}'03},
+ year = {2003},
+ isbn = {1-58113-674-9},
+ pages = {223--231},
+ location = {San Diego, CA, USA},
+ doi = {http://doi.acm.org/10.1145/780542.780577},
+}
+Proceedings of the thirty-fifth annual ACM symposium on Theory of computing --
+publisher = {ACM Press}
+address = {New York, NY, USA}
+
+@article{DPLL,
+ author = {Martin Davis and Hilary Putnam},
+ title = {A Computing Procedure for Quantification Theory},
+ journal = {J. ACM},
+ volume = {7},
+ number = {3},
+ year = {1960},
+ issn = {0004-5411},
+ pages = {201--215},
+ doi = {http://doi.acm.org/10.1145/321033.321034},
+}
+publisher = {ACM Press},
+address = {New York, NY, USA},
+
+@inproceedings {Minisat+,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Translating {P}seudo-{B}oolean constraints into {SAT}},
+ booktitle= {Journal on Satisfiability, Boolean Modeling and Computation},
+ year = {2006},
+ pages = {1-26},
+ volume = {2},
+}
+
+@inproceedings {EenS03MiniSat,
+ title = {An Extensible {SAT}-solver},
+ author = {Niklas E\'en and Niklas S\"{o}rensson},
+ booktitle = {SAT},
+ editor = {Enrico Giunchiglia and Armando Tacchella},
+ pages = {502--518},
+ publisher = {Springer},
+ series = {LNCS},
+ url = {http://dblp.uni-trier.de/db/conf/sat/sat2003.html#EenS03},
+ volume = {2919},
+ year = {2003},
+ ee = {http://www.cs.chalmers.se/Cs/Research/FormalMethods/MiniSat/cgi/MiniSat.ps.gz.cgi},
+ keywords = {2003 2004 SAT-solver ais-07w efficiency implementation },
+}
+
+@misc { toolbar,
+ author="S. Bouveret and F. Heras and S. de Givry and J. Larrosa and M. Sanchez and T. Schiex",
+ title="Toolbar: a state-of-the-art platform for wcsp",
+ url="http://www.inra.fr/mia/T/degivry/ToolBar.pdf",
+ year="2004"
+}
+
+@inproceedings{1267340,
+ author = {Kirschenbaum, Ilan and Wool, Avishai},
+ title = {How to build a low-cost, extended-range {RFID} skimmer},
+ booktitle = {USENIX-SS'06: Proceedings of the 15th conference on {USENIX} Security Symposium},
+ year = {2006},
+ location = {Vancouver, B.C., Canada},
+ publisher = {{USENIX} Association},
+ address = {Berkeley, CA, USA},
+}
+
+@misc{Benetton-boycott,
+ author = {{CASPIAN - Consumers Against Supermarket Privacy Invasion and Numbering}},
+ howpublished={Press release},
+ note= {\url{http://www.boycottbenetton.com}},
+ title = {Boycott {B}enetton},
+ year = {2003},
+ month = {March},
+}
+
+@article{ improved-deterministic,
+ author="Michael H. Schulz and Elisabeth Auth",
+ title="Improved Deterministic Test Pattern Generation with Applications to Redundancy Identification",
+ year="1989",
+ month="July",
+ journal="IEEE Transactions on computer-aided design",
+ volume="8",
+ number="7",
+ pages={811--816},
+ issn="0278-0070"
+}
+publisher = " IEEE Circuits and Systems Society",
+address="Piscataway, NJ 08854, USA",
+
+@inproceedings{244560,
+ author = {Jo\&\#227;o P. Marques Silva and Karem A. Sakallah},
+ title = {{GRASP}-a new search algorithm for satisfiability},
+ booktitle = {ICCAD'96},
+ year = {1996},
+ isbn = {0-8186-7597-7},
+ pages = {220--227},
+ location = {San Jose, California, United States},
+ publisher = {IEEE Computer Society},
+}
+Proceedings of the 1996 IEEE/ACM international conference on Computer-aided design ---
+address = {Washington, DC, USA},
+
+ @inproceedings{ chai03fast,
+ author = "D. Chai and A. Kuehlmann",
+ title = "A fast pseudo-boolean constraint solver",
+ pages = {305--317},
+ booktitle = "IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 2003",
+ year = {2003},
+ month =" mar",
+ volume = "24",
+ issue = "3",
+ issn = "0278-0070"
+}
+publisher = "IEEE Circuits and Systems Society",
+
+@TechReport{EPC-standard,
+ author = "EPCglobal",
+ url="http://www.epcglobalinc.org/standards/specs/13.56_MHz_ISM_Band_Class_1_RFID_Tag_Interface_Specification.pdf",
+ title="13.56 {MHz} {ISM} Band Class 1 Radio Frequency Identification Tag Interface Specification (2003)",
+ institution = "Auto-ID cetner, MIT",
+ year ="2003",
+ month = "February",
+ version = "1.0.0"
+}
+address = "77 massachusetts avenue, bldg 3-449, cambridge, ma 02139-4307, USA",
+
+@INPROCEEDINGS{LuLHHN-2007-percom,
+ author = {Lu, Li and Liu, Yunhao and Hu, Lei and Han, Jinsong and Ni, Lionel},
+ title = {A Dynamic Key-Updating Private Authentication Protocol for {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {13--22},
+ month = {March},
+ organization = {IEEE}
+}
+International Conference on Pervasive Computing and Communications
+publisher = {IEEE Computer Society Press}
+address = {New York, USA},
+
+@INPROCEEDINGS{Ohkubo04Efficient,
+ author = {Ohkubo, Miyako and Suzuki, Koutarou and Kinoshita, Shingo},
+ title = {Efficient Hash-Chain Based {RFID} Privacy Protection Scheme},
+ booktitle = {International Conference on Ubiquitous Computing --- Ubicomp 2004, Workshop Privacy: Current Status and Future Directions},
+ month = {September},
+ year = {2004},
+ address = {Nottingham, England},
+}
+
+@INPROCEEDINGS{MolnarSW-2005-sac,
+ author = {Molnar, David and Soppera, Andrea and Wagner, David},
+ title = {A Scalable, Delegatable Pseudonym Protocol Enabling Ownership Transfer of {RFID} Tags},
+ booktitle = {Selected Areas in Cryptography --- SAC 2005},
+ editor = {Preneel, Bart and Tavares, Stafford},
+ volume = {3897},
+ series = {LNCS},
+ pages = {276--290},
+ month = {August},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+ year = {2005},
+ address = {Kingston, Canada},
+}
+
+@inproceedings{DBLP:conf/otm/FeldhoferR06,
+ author = {Martin Feldhofer and Christian Rechberger},
+ title = {A Case Against Currently Used Hash Functions in {RFID} Protocols},
+ booktitle = {OTM Workshops (1)},
+ year = {2006},
+ pages = {372-381},
+ ee = {http://dx.doi.org/10.1007/11915034_61},
+ crossref = {DBLP:conf/otm/2006-w1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/otm/2006-w1,
+ editor = {Robert Meersman and Zahir Tari and Pilar Herrero},
+ title = {On the Move to Meaningful Internet Systems 2006: OTM 2006 Workshops, OTM Confederated International Workshops and Posters, AWeSOMe, CAMS, COMINF, IS, KSinBIT, MIOS-CIAO, MONET, OnToContent, ORM, PerSys, OTM Academy Doctoral Consortium, RDDS, SWWS, and SeBGIS 2006, Montpellier, France, October 29 - November 3, 2006. Proceedings, Part I},
+ booktitle = {OTM Workshops (1)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4277},
+ year = {2006},
+ isbn = {3-540-48269-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@INPROCEEDINGS{VajdaB-2003-ubicom,
+ author = {Vajda, Istv\'an and Butty\'an, Levente},
+ title = {Lightweight Authentication Protocols for Low-Cost {RFID} Tags},
+ booktitle = {Ubicomp 2003 Second Workshop on Security in Ubiquitous Computing},
+ month = {October},
+ year = {2003}
+}
+address = {Seattle, WA, USA},
+
+@INPROCEEDINGS{LiW-2007-sec,
+ author = {Li, Tieyan and Wang, Guilin},
+ title = {Security Analysis of Two Ultra-Lightweight {RFID} Authentication Protocols},
+ booktitle = {IFIP SEC 2007},
+ month = {May},
+ organization = {IFIP},
+}
+year = {2007},
+address = {Sandton, Gauteng, South Africa},
+
+@MISC{BatinaGKMTV-2006-eprint,
+ author = {Batina, Lejla and Guajardo, Jorge and Kerins, Tim and Mentens, Nele and Tuyls, Pim and Verbauwhede, Ingrid},
+ title = {An Elliptic Curve Processor Suitable For {RFID}-Tags},
+ howpublished = {Cryptology ePrint Archive, Report 2006/227},
+ year = {2006},
+ organization = {IACR},
+}
+
+@inproceedings {AES-grain-sand,
+ title = {{AES} implementation on a grain of sand},
+ issue = "1",
+ ISSN="1747-0722",
+ pages = {13--20},
+ author="Feldhofer, M. and Wolkerstorfer, J. and Rijmen, V.",
+ year = "2005",
+ voulme="152",
+ booktitle = "Information Security",
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press},
+
+@MISC{Juels-2005-manuscript-2,
+ author = {Juels, Ari},
+ title = {{RFID} Security and Privacy: A research Survey},
+ howpublished = {Manuscript},
+ year = {2005},
+ month = {September},
+ organization = {RSA Laboratories},
+}
+
+@INPROCEEDINGS{JuelsW-2007-percom,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {{Defining Strong Privacy for RFID}},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2007},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {342--347},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Vaudenay-2007-asiacrypt,
+ author = {Vaudenay, Serge},
+ title = {On Privacy Models for {RFID}},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2007},
+ year = {2007},
+ editor = {},
+ volume = {4833},
+ series = {LNCS},
+ pages = {68--87},
+ address = {Kuching, Malaysia},
+ month = {December},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{BolotnyyR-2007-percom,
+ author = {Bolotnyy, Leonid and Robins, Gabriel},
+ title = {Physically Unclonable Function-Based Security and Privacy in {RFID} Systems},
+ booktitle = {PerCom 2007},
+ year = {2007},
+ pages = {211--220},
+ month = {March},
+ organization = {IEEE},
+}
+publisher = {IEEE Computer Society Press}
+International Conference on Pervasive Computing and Communications --
+address = {New York, USA},
+
+@INPROCEEDINGS{JuelsRS-2003-ccs,
+ author = {Juels, Ari and Rivest, Ronald and Szydlo, Michael},
+ title = {The Blocker Tag: Selective Blocking of {RFID} Tags for Consumer Privacy},
+ booktitle = {ACM CCS 2003},
+ year = {2003},
+ editor = {Atluri, Vijay},
+ pages = {103--111},
+ month = {October},
+ publisher = "ACM Press"
+}
+address = {Washington, DC, USA},
+Conference on Computer and Communications Security
+organization = "ACM",
+
+@INPROCEEDINGS{JuelsW-2005-crypto,
+ author = {Juels, Ari and Weis, Stephen},
+ title = {Authenticating Pervasive Devices with Human Protocols},
+ booktitle = {Advances in Cryptology --- CRYPTO'05},
+ year = {2005},
+ editor = {Shoup, Victor},
+ volume = {3126},
+ series = {LNCS},
+ pages = {293--308},
+ month = {August},
+ organization = {IACR},
+ address = {Santa Barbara, California, USA},
+ publisher = {Springer-Verlag},
+ series = {LNCS},
+}
+
+@inproceedings{ zhang01efficient,
+ author = "Lintao Zhang and Conor F. Madigan and Matthew W. Moskewicz and Sharad Malik",
+ title = "Efficient Conflict Driven Learning in Boolean Satisfiability Solver",
+ booktitle = "{ICCAD}",
+ pages = "279-285",
+ year = "2001",
+ url = "citeseer.ist.psu.edu/article/zhang01efficient.html" }
+
+
+@INPROCEEDINGS{ButtyanHV-2006-pet,
+ author = {Butty\'an, Levente and Holczer, Tam\'as and Vajda, Istv\'an},
+ title = {Optimal Key-Trees for Tree-Based Private Authentication},
+ booktitle = {Workshop on Privacy Enhancing Technologies --- PET 2006},
+ pages = {332-350},
+ month = {June},
+ year = {2007},
+ address = {Cambridge, United Kingdom},
+}
+
+
+@INPROCEEDINGS{Castelluccia07Secret,
+ author = {Castelluccia, Claude and Soos, Mate},
+ title = {Secret Shuffling: A Novel Approach to {RFID} Private Identification},
+ booktitle = {{RFIDSec}'07},
+ pages = {169-180},
+ year = {2007},
+ month = {July}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@INPROCEEDINGS{breaking-lmap,
+ author = {Mihaly B\'arasz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel Nagy},
+ title = {Breaking {LMAP}},
+ pages = {69-78},
+ month = {July},
+ year = {2007},
+ booktitle = {Conference on RFID Security --- {RFIDSec}'07},
+ address = {Malaga, Spain},
+}
+
+@INPROCEEDINGS{Initial-SRAM,
+ author = {Daniel Holcom and Wayne Burleson and Kevin Fu.},
+ title = {Initial {SRAM} state as a Fingerprint and Source of True Random Numbers for {RFID} Tags},
+ booktitle = {{RFIDSec}'07},
+ pages = {29-40},
+ month = {July},
+ year = {2007}
+}
+Proceedings of the International Conference on RFID Security 2007
+
+@inproceedings{HBattack,
+ author = {Gilbert, Henri and Robshaw, Matt and Sibert, Herve},
+ title = {An Active Attack Against {HB}$^+$ - A Provably Secure Lightweight Authentication Protocol},
+ booktitle = {IEE Electronic Letters 41, 21},
+ year = {2005},
+ pages = {1169--1170}
+}
+
+@INPROCEEDINGS{KatzS-2006-eurocrypt,
+ author = {Katz, Jonathan and Sun Shin, Ji},
+ title = {Parallel and Concurrent Security of the {HB} and {HB}$^{+}$ Protocols},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '06},
+ organization = {IACR},
+ year = {2006}
+}
+Advances in Cryptology
+publisher = {Springer-Verlag},
+
+@MISC{KatzS-2006-eprint,
+ author = {Katz, Jonathan and Smith, Adam},
+ title = {Analyzing the {HB} and {HB}+ Protocols in the ``Large Error'' Case},
+ howpublished = {Cryptology ePrint Archive, Report 2006/326},
+ organization = {IACR},
+}
+
+@inproceedings{1229319,
+ author = {Tri Van Le and Mike Burmester and Breno de Medeiros},
+ title = {Universally composable and forward-secure {RFID} authentication and authenticated key exchange},
+ booktitle = {Proceedings of the 2nd ACM symposium on Information, Computer and Communications Security --- {ASIACCS}'07},
+ year = {2007},
+ isbn = {1-59593-574-6},
+ pages = {242--252},
+ location = {Singapore},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ doi = {http://doi.acm.org/10.1145/1229285.1229319},
+}
+
+
+
+@INPROCEEDINGS{PUF-based-RNG,
+ author = {Charles W. O'Donnell and G. Edward Suh and Srinivas Devadas},
+ title = {{PUF}-Based Random Number Generation},
+ booktitle = {MIT CSAIL CSG Technical Memo 481},
+ url = {http://csg.csail.mit.edu/pubs/memos/Memo-481/Memo-481.pdf},
+ year = {2004},
+ month = {November}
+}
+
+@book{Ipatov05Spread,
+ author = {Valeri P. Ipatov},
+ year = {2005},
+ month = {May},
+ title = {Spread Spectrum and {CDMA}: {P}rinciples and Applications},
+ publisher = {John Wiley \& Sons, Ltd.},
+ ISBN = {978-0470091784},
+}
+
+@article{DBLP:journals/ijwmc/HellJM07,
+ author = {Martin Hell and
+ Thomas Johansson and
+ Willi Meier},
+ title = {Grain: a stream cipher for constrained environments},
+ journal = {IJWMC},
+ volume = {2},
+ number = {1},
+ year = {2007},
+ pages = {86-93},
+ ee = {http://dx.doi.org/10.1504/IJWMC.2007.013798},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{applied-crypto,
+ year= {1996},
+ ISBN ={0-8493-8523-7},
+ author={Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone},
+ title ={Handbook of applied cryptography},
+ publisher={CRC Press},
+ address={Boca Raton, Florida},
+}
+url={http://cacr.math.uwaterloo.ca/hac}
+
+@inproceedings{DiPietro07Information,
+ author={Roberto Di Pietro and Refik Molva},
+ title={Information confinement, privacy, and security in {RFID} systems},
+ month={September},
+ booktitle={Proceedings of the 12th European Symposium On Research In Computer Security},
+ year={2007},
+ pages={187-202},
+}
+
+@inproceedings{PerisHER-2006-rfidsec,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{LMAP}: A Real Lightweight Mutual Authentication Protocol for Low-cost {RFID} tags},
+ booktitle = {Proceedings of {RFIDSec}'06},
+ year = {2006},
+ month = {July},
+ address = {Graz, Austria},
+ organization = {Ecrypt},
+}
+
+@INPROCEEDINGS{BringerCD-2006-secperu,
+ author = {Bringer, Julien and Chabanne, Herv\'e and Dottax Emmanuelle},
+ title = {{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+ booktitle = {{IEEE} SecPerU 2006},
+ year = {2006},
+ month = {June},
+ organization = {IEEE},
+}
+International Conference on Pervasive Services, Workshop on Security, Privacy and Trust in Pervasive and Ubiquitous Computing
+address = {Lyon, France},
+publisher = {IEEE Computer Society Press},
+
+@INPROCEEDINGS{PerisHER-2006-uic,
+ author = {Peris-Lopez, Pedro and Hernandez-Castro, Julio Cesar and Estevez-Tapiador, Juan and Ribagorda, Arturo},
+ title = {{M2AP}: A Minimalist Mutual-Authentication Protocol for Low-cost {RFID} Tags},
+ booktitle = {International Conference on Ubiquitous Intelligence and Computing --- {UIC}’06},
+ year = {2006},
+ editor = {},
+ volume = {4159},
+ pages = {912--923},
+ month = {September},
+ series = {LNCS},
+ publisher = {Springer-Verlag},
+}
+
+
+@INPROCEEDINGS{M2AP-break,
+ author={Mih\'aly B\'ar\'asz and Bal\'azs Boros and P\'eter Ligeti and Krisztina L\'oja and D\'aniel A. Nagy},
+ title={Passive Attack Against the {M2AP} Mutual Authentication Protocol for {RFID} Tags},
+ year = {2007},
+ month= {September},
+ date = {24-25},
+ booktitle={{RFID} 2007 --- The First International {EURASIP} Workshop on {RFID} Technology},
+ country = {Austria},
+ city={Vienna}
+}
+
+@INPROCEEDINGS{HBppbreak,
+ author= {Henri Gilbert and Matthew J.B. Robshaw and Yannick Seurin},
+ title={Good Variants of {HB}+ are Hard to Find},
+ year={2008},
+ month={January},
+ booktitle={Financial Cryptography},
+ publisher={Springer},
+ country={Mexico}
+}
+
+@inproceedings{MAGMA,
+ author = {Wieb Bosma and John Cannon and Graham Matthews},
+ title = {Programming with algebraic structures: design of the {MAGMA} language},
+ booktitle = {Proceedings of the international symposium on Symbolic and algebraic computation --- ISSAC '94},
+ year = {1994},
+ isbn = {0-89791-638-7},
+ pages = {52--57},
+ location = {Oxford, United Kingdom},
+ doi = {http://doi.acm.org/10.1145/190347.190362},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+@inproceedings{Singular,
+ author = {Gert-Martin Greuel and Gerhard Pfister and Hans Sch\"{o}nemann},
+ title = {{SINGULAR} --- A computer algebra system for polynomial computations},
+ booktitle = {Symbolic computation and automated reasoning},
+ year = {2001},
+ isbn = {1-56881-145-4},
+ pages = {227--233},
+ publisher = {A. K. Peters, Ltd.},
+ address = {Natick, MA, USA},
+}
+
+@misc{SAGE,
+ author = {{The SAGE Group}},
+ year = {2008},
+ title = {{SAGE} Mathematics Software},
+ note = {\url{http://www.sagemath.org}},
+}
+
+@misc{new-sparse-technique,
+ author={H{\aa}vard Raddum and Igor Semae},
+ title={New Technique for Solving Sparse Equation Systems},
+ month={January},
+ year={2006},
+ note={\url{eprint.iacr.org/2006/475/}},
+}
+
+@TechReport{algebraic-DES,
+ author={Nicolas T. Courtois and Gregory V. Bard},
+ title={Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ year={2006},
+ institution = {IACR E-print},
+ number = {2006/402},
+ month={November},
+ booktitle={IACR E-print, \url{http://eprint.iacr.org/2006/402}},
+}
+
+
+
+@inproceedings{early-DES-algebraic,
+ author={Chaum, David and Evertse, Jan-Hendrik},
+ title={Cryptanalysis of {DES} with a Reduced Number of Rounds},
+ booktitle = {Advances in Cryptology --- {CRYPTO}'85},
+ year = {1986},
+ pages = {192--211},
+ publisher = {Springer-Verlag}
+}
+
+@InProceedings{Bofilletal2008CAV,
+ author = {M. Bofill and R. Nieuwenhuis and A. Oliveras and E. Rodr\'\i guez-Carbonell and A. Rubio},
+ title = {The {B}arcelogic {SMT} Solver},
+ pages = {294-298},
+ booktitle = {{CAV}'08},
+ year = {2008},
+ series = {LNCS},
+ volume = {5123},
+ publisher = {Springer},
+ editor = {A. Gupta and S. Malik},
+}
+
+@techreport{RSAT,
+ author = {Knot Pipatsrisawat and Adnan Darwiche},
+ institution = {Automated Reasoning Group, Computer Science},
+ title = {{RS}at 2.0: {SAT} Solver Description},
+ year = {2007},
+}
+
+@inproceedings{DBLP:conf/fse/CourtoisBW08,
+ author = {Nicolas Courtois and Gregory V. Bard and David Wagner},
+ title = {Algebraic and Slide Attacks on {K}ee{L}oq},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {97-115},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_6},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{cryptoeprint:2008:166,
+ author = {Nicolas T. Courtois and Karsten Nohl and Sean O'Neil},
+ title = {Algebraic Attacks on the {C}rypto-1 Stream Cipher in {Mifare} {C}lassic and {O}yster Cards},
+ number = {2008/166},
+ institution = {Cryptology ePrint Archive},
+ year = {2008},
+}
+howpublished = {Cryptology ePrint Archive, Report 2008/166},
+note = {\url{http://eprint.iacr.org/}},
+
+@INPROCEEDINGS{Biere99symbolicmodel,
+ author = {Armin Biere and A. Cimatti and E. M. Clarke and M. Fujita and Y. Zhu},
+ title = {Symbolic Model Checking Using {SAT} Procedures instead of {BDDs}},
+ booktitle = {Proc. of Design Automation Conference ({DAC}'99)},
+ year = {1999},
+ pages = {317--320}
+}
+
+@INPROCEEDINGS{temporalinduction,
+ author = {E\'en, Niklas and S\"orensson, Niklas},
+ title = {Temporal Induction by Incremental {SAT} Solving},
+ booktitle={Proc. of First Intrenational Workshop on Bounded Model Checking},
+ year={2003},
+ volume={89},
+ issue={4},
+ series={ENTCS},
+ publisher={Elsevier}
+}
+
+@inproceedings{ARMS02,
+ author = {Fadi A. Aloul and Arathi Ramani and Igor Markov and Karem Sakallah},
+ title = {Generic {ILP} versus Specialized 0-1 {ILP}: an Update},
+ booktitle = {Proc. ACM/IEEE Intl. Conf. Comp.-Aided Design},
+ pages = {450 - 457},
+ month = {November},
+ year = {2002},
+ URL = {http://www.gigascale.org/pubs/190.html}
+}
+
+@inproceedings{knowledge-compiling,
+ author={Adnan Dawiche},
+ title={New advances in compiling {CNF} to decomposable negation normal form},
+ booktitle={Proc. of European Conference on Artificial Intelligence},
+ year={2004},
+ pages={328 - 332},
+}
+
+@InProceedings{S-Match,
+ author = {Fausto Giunchiglia and Pavel Shvaiko and Mikalai Yatskevich},
+ title = {S-{M}atch: an algorithm and an implementation of semantic matching},
+ booktitle = {Semantic Interoperability and Integration},
+ year = {2005},
+ number = {04391},
+ series = {Dagstuhl Seminar Proceedings},
+ ISSN = {1862-4405},
+ publisher = {IBFI},
+ note = {\url{http://drops.dagstuhl.de/opus/volltexte/2005/37}},
+ editor = {Y. Kalfoglou and M. Schorlemmer and A. Sheth and S. Staab and M. Uschold},
+}
+publisher = {Internationales Begegnungs- und Forschungszentrum fuer Informatik (IBFI)},
+
+
+
+@techreport{bard-thesis,
+ author = {Gregory V. Bard},
+ title = {Algorithms for the Solution of Polynomial and Linear Systems of Equations over Finite Fields, with an Application to the Cryptanalysis of {K}ee{L}oq},
+ institution={University of Maryland Dissertation},
+ month={April},
+ year={2008},
+ note = {Ph.D. Thesis},
+}
+
+@inproceedings{Toyocrypt-nicolas-attack,
+ author={Nicolas T. Courtois},
+ title={Higher Order Correlation Attacks, {XL} algorithm and Cryptanalysis of {T}oyocrypt ({A}n updated version)},
+ booktitle={ICISC 2002},
+ series={LNCS},
+ volume={2587},
+ publisher={Springer},
+ year={2002},
+}
+
+@inproceedings{General-LFSR-attacks,
+ author={Nicolas T. Courtois and Willi Meier},
+ title={Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- EUROCRYPT '03},
+ series={LNCS},
+ volume={2656},
+ pages={345–359},
+ publisher={Springer},
+ address = {Warsaw, Poland}
+}
+
+@inproceedings{Canniere06Trivium,
+ author = {Christophe De Canni{\`e}re},
+ title = {Trivium: A Stream Cipher Construction Inspired by Block Cipher Design Principles},
+ booktitle = {ISC},
+ year = {2006},
+ pages = {171-186},
+ ee = {http://dx.doi.org/10.1007/11836810_13},
+ crossref = {DBLP:conf/isw/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/isw/2006,
+ editor = {Sokratis K. Katsikas and et al},
+ title = {Information Security, 9th International Conference, ISC 2006, Samos Island, Greece, August 30 - September 2, 2006, Proceedings},
+ booktitle = {ISC},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4176},
+ year = {2006},
+ isbn = {3-540-38341-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Javier Lopez and
+Michael Backes and
+Stefanos Gritzalis and
+Bart Preneel
+
+@inproceedings{BiviumWithSATsolvers,
+ author = {Tobias Eibach and Enrico Pilz and Gunnar V{\"o}lkel},
+ title = {Attacking {B}ivium Using {SAT} Solvers},
+ booktitle = {SAT},
+ year = {2008},
+ pages = {63-76},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79719-7_7},
+ crossref = {DBLP:conf/sat/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2008,
+ editor = {Hans Kleine B{\"u}ning and Xishun Zhao},
+ title = {Theory and Applications of Satisfiability Testing - SAT 2008, 11th International Conference, SAT 2008, Guangzhou, China, May 12-15, 2008. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4996},
+ year = {2008},
+ isbn = {978-3-540-79718-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@TechReport{Bivium,
+ author={Havard Raddum},
+ title={Cryptanalytic results on {T}rivium},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2006},
+ number={2006/039},
+ note = {\url{www.ecrypt.eu.org/stream/papersdir/2006/039.ps}},
+}
+
+@misc{using-equation-solvers,
+ author = {Havard Raddum and Igor Semaev},
+ title = {New Technique for Solving Sparse Equation Systems},
+ howpublished = {Cryptology ePrint Archive, Report 2006/475},
+ year = {2006},
+ note = {\url{http://eprint.iacr.org/}},
+}
+
+
+@TechReport{BiviumWithMiniSat,
+ author={Cameron McDonald and Chris Charnes and Josef Pieprzyk},
+ title={Attacking {B}ivium with {M}ini{S}at},
+ institution = {ECRYPT Stream Cipher Project},
+ year={2007},
+ number={2007/040}
+}
+
+@inproceedings{FaugereF5,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases without reduction to zero ({F}5)},
+ booktitle = {ISSAC '02},
+ year = {2002},
+ isbn = {1-58113-484-3},
+ pages = {75--83},
+ location = {Lille, France},
+ doi = {http://doi.acm.org/10.1145/780506.780516},
+ publisher = {ACM},
+ }
+ISSAC '02: Proceedings of the 2002 international symposium on Symbolic and algebraic computation
+address = {New York, NY, USA},
+
+
+@article{FaugereF4,
+ author = {Jean-Charles Faug\`{e}re},
+ title = {A new efficient algorithm for computing {G}r\"{o}bner bases ({F}4)},
+ journal = {Journal of Pure and Applied Algebra},
+ year = {1999},
+ month = {June},
+ pages = {61--88},
+ volume = {1},
+ number = {139},
+}
+
+@inproceedings{DismantlingMifare,
+ author = {Flavio D. Garcia and et al.},
+ title = {Dismantling {MIFARE} {C}lassic},
+ booktitle = {ESORICS},
+ year = {2008},
+ pages = {97-114},
+ ee = {http://dx.doi.org/10.1007/978-3-540-88313-5_7},
+ crossref = {DBLP:conf/esorics/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+and
+Gerhard de Koning Gans and
+Ruben Muijrers and
+Peter van Rossum and
+Roel Verdult and
+Ronny Wichers Schreur and
+Bart Jacobs
+
+@proceedings{DBLP:conf/esorics/2008,
+ editor = {Sushil Jajodia and Javier L{\'o}pez},
+ title = {Computer Security - ESORICS 2008, 13th European Symposium on Research in Computer Security, M{\'a}laga, Spain, October 6-8, 2008. Proceedings},
+ booktitle = {ESORICS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5283},
+ year = {2008},
+ isbn = {978-3-540-88312-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Karsten-webpage-HiTag2,
+ author={Karsten Nohl},
+ title={Description of {H}i{T}ag2},
+ howpublished={Press release},
+ note= {\url{http://cryptolib.com/ciphers/hitag2/}},
+ month={March},
+ day = {12},
+ year={2008},
+}
+
+@InProceedings{Ouafi08Privacy,
+ address = {Berlin},
+ affiliation = {EPFL},
+ author = {Ouafi, Khaled and Phan, Raphael C.-W.},
+ booktitle = {Information {S}ecurity {P}ractice and {E}xperience, 4th {I}nternational {C}onference, {ISPEC} 2008},
+ location = {Sydney, Australia},
+ oai-id = {oai:infoscience.epfl.ch:126418},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {263--277},
+ publisher = {Springer},
+ review = {REVIEWED},
+ series = {LNCS},
+ status = {PUBLISHED},
+ title = {Privacy of {R}ecent {RFID} {A}uthentication {P}rotocols},
+ unit = {LASEC},
+ year = {2008},
+ keywords = {RFID; authentication protocols, ; privacy; untraceability; provably secure},
+ details = {http://infoscience.epfl.ch/record/126418},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=126418&mode=best},
+}
+
+@INPROCEEDINGS{Ohkubo04Cryptographic,
+ author = {Miyako Ohkubo Koutarou and Koutarou Suzuki and Shingo Kinoshita},
+ title = {Cryptographic Approach to "Privacy-Friendly" Tags},
+ booktitle = {RFID Privacy Workshop},
+ year = {2003},
+ address = {MIT, Massachusetts, USA},
+ month = {November},
+}
+
+@article{Lamport81Password,
+ author = {Lamport,, Leslie},
+ title = {Password authentication with insecure communication},
+ journal = {Commun. ACM},
+ volume = {24},
+ number = {11},
+ year = {1981},
+ issn = {0001-0782},
+ pages = {770--772},
+ doi = {http://doi.acm.org/10.1145/358790.358797},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+@InProceedings{OSK_Avoine,
+ affiliation = {EPFL},
+ author = {Avoine, Gildas and Oechslin, Philippe},
+ booktitle = {The 2nd {IEEE} {I}nternational {W}orkshop on {P}ervasive {C}omputing and {C}ommunication {S}ecurity - {P}er{S}ec 2005},
+ details = {http://infoscience.epfl.ch/record/99461},
+ documenturl = {http://infoscience.epfl.ch/getfile.py?recid=99461&mode=best},
+ keywords = {NCCR-MICS; NCCR-MICS/CL3},
+ location = {Kauai island, Hawaii, USA},
+ oai-id = {oai:infoscience.epfl.ch:99461},
+ oai-set = {conf; fulltext; fulltext-public},
+ pages = {110--114},
+ review = {REVIEWED},
+ status = {PUBLISHED},
+ title = {A {S}calable and {P}rovably {S}ecure {H}ash-{B}ased {RFID} {P}rotocol},
+ unit = {LASEC},
+ year = 2005
+}
+
+@inproceedings{Trade-off-Hellman,
+ author = {Hellman, Martin E.},
+ title = {A cryptanalytic time-memory trade off},
+ booktitle = {{IEEE} Transactions on Information Theory},
+ volume = {IT-26/4},
+ pages = {401--406},
+ year = {1980},
+}
+
+@inproceedings{Faster-crypto-time-memory,
+ author = {Oechslin, Philippe },
+ booktitle = {Advances in Cryptology --- CRYPTO 2003},
+ series = {LNCS},
+ volume = {2729},
+ publisher = {Springer},
+ pages = {617--630},
+ posted-at = {2008-07-07 15:11:06},
+ priority = {2},
+ title = {Making a Faster Cryptanalytic Time-Memory Trade-Off},
+ url = {http://www.springerlink.com/content/u9gxwd29p2tnx3wl},
+ year = {2003}
+}
+
+@inproceedings{Molnar04Keytrees,
+ address = {New York, NY, USA},
+ author = {Molnar, David and Wagner, David },
+ booktitle = {CCS '04: Proceedings of the 11th ACM conference on Computer and communications security},
+ citeulike-article-id = {202290},
+ doi = {10.1145/1030083.1030112},
+ isbn = {1581139616},
+ keywords = {libraries, privacy},
+ pages = {210--219},
+ posted-at = {2007-12-25 21:42:23},
+ priority = {5},
+ publisher = {ACM Press},
+ title = {Privacy and security in library {RFID}: issues, practices, and architectures},
+ url = {http://dx.doi.org/10.1145/1030083.1030112},
+ year = {2004}
+}
+
+@INPROCEEDINGS{NohlE-2008-sec,
+ author = {Nohl, Karsten and Evans, David},
+ title = {{Hiding in Groups: On the Expressiveness of Privacy Distributions}},
+ booktitle = {Proceedings of The Ifip Tc 11 23rd International Information Security Conference --- SEC 2008},
+ year = {2008},
+ editor = {},
+ volume = {278},
+ series = {LNCS},
+ pages = {1--15},
+ address = {Milan, Italia},
+ month = {September},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GIS), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/fse/Shamir08,
+ author = {Adi Shamir},
+ title = {{SQUASH} --- A New {MAC} with Provable Security Properties for Highly Constrained Devices Such as {RFID} Tags},
+ booktitle = {FSE},
+ year = {2008},
+ pages = {144-157},
+ ee = {http://dx.doi.org/10.1007/978-3-540-71039-4_9},
+ crossref = {DBLP:conf/fse/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2008,
+ editor = {Kaisa Nyberg},
+ title = {Fast Software Encryption, 15th International Workshop, {FSE} 2008, Lausanne, Switzerland, February 10-13, 2008, Revised Selected Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5086},
+ year = {2008},
+ isbn = {978-3-540-71038-7},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Oren2008WIPRPublic,
+author = {Yossef Oren and Martin Feldhofer},
+title = {{WIPR} --- a Public Key Implementation on Two Grains of Sand},
+booktitle = {Workshop on RFID Security 2008},
+year = {2008},
+editor = {Sandra Dominikus},
+pages = {15 - 27},
+}
+
+@incollection{drat,
+year={2014},
+isbn={978-3-319-09283-6},
+booktitle={Theory and Applications of Satisfiability Testing – SAT 2014},
+volume={8561},
+series={Lecture Notes in Computer Science},
+editor={Sinz, Carsten and Egly, Uwe},
+doi={10.1007/978-3-319-09284-3_31},
+title={DRAT-trim: Efficient Checking and Trimming Using Expressive Clausal Proofs},
+url={http://dx.doi.org/10.1007/978-3-319-09284-3_31},
+publisher={Springer International Publishing},
+author={Wetzler, Nathan and Heule, MarijnJ.H. and Hunt, WarrenA., Jr.},
+pages={422-429},
+language={English}
+}
+
+
+@inproceedings{DBLP:conf/ctrsa/McLooneR07,
+ author = {M{\'a}ire McLoone and Matthew J. B. Robshaw},
+ title = {Public Key Cryptography and {RFID} Tags},
+ booktitle = {CT-RSA},
+ year = {2007},
+ pages = {372-384},
+ ee = {http://dx.doi.org/10.1007/11967668_24},
+ crossref = {DBLP:conf/ctrsa/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ctrsa/2007,
+ editor = {Masayuki Abe},
+ title = {Topics in Cryptology - CT-RSA 2007, The Cryptographers' Track at the RSA Conference 2007, San Francisco, CA, USA, February 5-9, 2007, Proceedings},
+ booktitle = {CT-RSA},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4377},
+ year = {2006},
+ isbn = {3-540-69327-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+
+@proceedings{DBLP:conf/eurocrypt/91,
+ editor = {Donald W. Davies},
+ title = {Advances in Cryptology --- EUROCRYPT '91, Workshop on the Theory and Application of of Cryptographic Techniques, Brighton, UK, April 8-11, 1991, Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {547},
+ year = {1991},
+ isbn = {3-540-54620-0},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/Girault91,
+ author = {Marc Girault},
+ title = {Self-Certified Public Keys},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '91},
+ year = {1991},
+ pages = {490-497},
+ ee = {http://link.springer.de/link/service/series/0558/bibs/0547/05470490.htm},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cardis/Girault00,
+ author = {Marc Girault},
+ title = {Low-Size Coupons for Low-Cost {IC} Cards},
+ booktitle = {CARDIS},
+ year = {2000},
+ pages = {39-50},
+ crossref = {DBLP:conf/cardis/2000},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2000,
+ editor = {Josep Domingo-Ferrer and David Chan and Anthony Watson},
+ title = {Smart Card Research and Advanced Applications, Proceedings of the Fourth Working Conference on Smart Card Research and Advanced Applications, CARDIS 2000, September 20-22, 2000, Bristol, UK},
+ booktitle = {CARDIS},
+ publisher = {Kluwer},
+ series = {IFIP Conference Proceedings},
+ volume = {180},
+ year = {2000},
+ isbn = {0-7923-7953-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Secure-human-ID,
+ author = {Hopper,, Nicholas J. and Blum,, Manuel},
+ title = {Secure Human Identification Protocols},
+ booktitle = {ASIACRYPT '01: Proceedings of the 7th International Conference on the Theory and Application of Cryptology and Information Security},
+ year = {2001},
+ isbn = {3-540-42987-5},
+ pages = {52--66},
+ publisher = {Springer-Verlag},
+ address = {London, UK},
+}
+
+@ARTICLE{Inherent-intracability,
+title={On the inherent intractability of certain coding problems (Corresp.)},
+author={ Berlekamp, E. and McEliece, R. and van Tilborg, H.},
+journal={Information Theory, IEEE Transactions on},
+year={1978},
+month={May},
+volume={24},
+number={3},
+pages={ 384-386},
+keywords={null Decoding, Linear codes},
+doi={},
+ISSN={0018-9448},
+}
+
+@article{Noise-tolerant-learning,
+ author = {Blum,, Avrim and Kalai,, Adam and Wasserman,, Hal},
+ title = {Noise-tolerant learning, the parity problem, and the statistical query model},
+ journal = {J. ACM},
+ volume = {50},
+ number = {4},
+ year = {2003},
+ issn = {0004-5411},
+ pages = {506--519},
+ doi = {http://doi.acm.org/10.1145/792538.792543},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+
+@INPROCEEDINGS{To06anovel,
+ author = {Marc P. C. Fossorier and Miodrag J. Mihaljević and Hideki Imai and Yang Cui and Kanta Matsuura},
+ title = {A Novel Algorithm for Solving the {LPN} Problem and Its Applicatio to Security Evaluation of the {HB} Protocol for {RFID} Authentication},
+ booktitle = {INDOCRYPT},
+ editor = {Rana Barua and Tanja Lange},
+ volume = {4329},
+ series = {LNCS},
+ year = {2006},
+ pages = {48--62},
+ publisher = {Springer}
+}
+
+@INPROCEEDINGS{Levieil_animproved,
+ author = {Éric Levieil and Pierre-Alain Fouque},
+ title = {An improved {LPN} algorithm},
+ editor = {Roberto De Prisco and Moti Yung},
+ booktitle = {Security and Cryptography for Networks --- SCN},
+ volume = {4116},
+ series = {LNCS},
+ year = {2006},
+ pages = {348--359},
+ Publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+}
+
+@INPROCEEDINGS{HBpp,
+title={{HB}$^{++}$: a Lightweight Authentication Protocol Secure against Some Attacks},
+author={Bringer, J. and Chabanne, H. and Dottax, E.},
+booktitle={Security, Privacy and Trust in Pervasive and Ubiquitous Computing, 2006 --- SecPerU 2006},
+year={2006},
+month={June},
+volume={},
+number={},
+pages={28--33},
+doi={10.1109/SECPERU.2006.10},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/GilbertRS08,
+ author = {Henri Gilbert and Matthew J. B. Robshaw and Yannick Seurin},
+ title = {{HB}$^{\mbox{\#}}$: Increasing the Security and Efficiency of {HB}$^{\mbox{+}}$},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ year = {2008},
+ pages = {361-378},
+ ee = {http://dx.doi.org/10.1007/978-3-540-78967-3_21},
+ crossref = {DBLP:conf/eurocrypt/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2008,
+ editor = {Nigel P. Smart},
+ title = {Advances in Cryptology --- EUROCRYPT 2008, 27th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Istanbul, Turkey, April 13-17, 2008. Proceedings},
+ booktitle = {Advances in Cryptology --- EUROCRYPT '08},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4965},
+ year = {2008},
+ isbn = {978-3-540-78966-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/fse/2001,
+ editor = {Mitsuru Matsui},
+ title = {Fast Software Encryption, 8th International Workshop, FSE 2001 Yokohama, Japan, April 2-4, 2001, Revised Papers},
+ booktitle = {FSE},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2355},
+ year = {2002},
+ isbn = {3-540-43869-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Rabin79Digitalized,
+ author = {Rabin, M. O.},
+ title = {Digitalized Signatures and Public-Key Functions as Intractable as Factorization},
+ year = {1979},
+ institution = {Massachusetts Institute of Technology},
+ address = {Cambridge, MA, USA},
+ }
+
+@article{HBmp,
+ author = {Munilla,, J. and Peinado,, A.},
+ title = {{HB}-{MP}: A further step in the HB-family of lightweight authentication protocols},
+ journal = {Comput. Netw.},
+ volume = {51},
+ number = {9},
+ year = {2007},
+ issn = {1389-1286},
+ pages = {2262--2267},
+ doi = {http://dx.doi.org/10.1016/j.comnet.2007.01.011},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {New York, NY, USA},
+ }
+
+@article{HBstar,
+ author={D.N. Duc and K. Kim},
+ title={Securing {HB}$^+$ Against {GRS} Man-in-the-Middle Attack},
+ journal={Institute of Electronics, Information and Communication Engineers, Symposium on Cryptography and Information, Security},
+ date = {January 23--26},
+ year = {2007},
+}
+
+@INPROCEEDINGS{OuafiOV-2008-asiacrypt,
+ author = {Ouafi, Khaled and Overbeck, Raphael and Vaudenay, Serge},
+ title = {On the Security of {HB\#} against a Man-in-the-Middle Attack},
+ booktitle = {Advances in Cryptology --- Asiacrypt 2008},
+ year = {2008},
+ editor = {},
+ volume = {5350},
+ series = {LNCS},
+ pages = {108--124},
+ address = {Melbourne, Australia},
+ month = {December},
+ organization = {},
+ publisher = {Springer},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{PRESENT,
+ author = {Bogdanov, Andrey and Knudsen, Lars Ramkilde and Leander, Gregor and Paar, Christof and Poschmann, Axel and Robshaw, Matthew J.B. and Seurin, Yannick and Vikkelsoe, C.},
+ title = {{PRESENT}: An Ultra-Lightweight Block Cipher},
+ booktitle = {Workshop on Cryptographic Hardware and Embedded Systems --- CHES 2007},
+ year = {2007},
+ editor = {Paillier, Pascal and Verbauwhede, Ingrid},
+ volume = {4727},
+ series = {LNCS},
+ pages = {450--466},
+ address = {Vienna, Austria},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{ChoiKKK-2006-isce,
+ author = {Choi, Yongje and Kim, Mooseop and Kim, Taesung and Kim, Howon},
+ title = {Low power implementation of {SHA}-1 algorithm for {RFID} system},
+ booktitle = {IEEE Tenth International Symposium on Consumer Electronics --- ISCE '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {1--5},
+ address = {St.Petersburg, Russia},
+ month = {September},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{DES-RFID-implement,
+ author = {Axel Poschmann and Gregor Le and Kai Schramm and Christof Paar},
+ title = {A Family of Light-Weight Block Ciphers Based on {DES} Suited for {RFID} Applications},
+ booktitle = {Proceedings of FSE 2007, LNCS},
+ year = {2006},
+ publisher = {Springer-Verlag}
+}
+
+@article{4253019,
+title={Strong Crypto for {RFID} Tags - A Comparison of Low-Power Hardware Implementations},
+author={Feldhofer, M. and Wolkerstorfer, J.},
+journal={Circuits and Systems, 2007. ISCAS 2007. IEEE International Symposium on},
+year={2007},
+month={May},
+volume={},
+number={},
+pages={1839-1842},
+keywords={cryptographic protocols, radiofrequency identificationAES-128, ECC-192, MD5, SHA-1, SHA-256, implementation efficiency, passive RFID tags, security protocols, standardized cryptographic algorithms, strong cryptography},
+doi={10.1109/ISCAS.2007.378272},
+ISSN={},
+}
+
+@techreport{PUF-optical,
+ author= {P. Ravinkanth},
+ title= {Physical One-Way Functions},
+ note = {Ph.D. Thesis},
+ institution = {MIT},
+ year={2001}
+}
+
+@inproceedings{PUF-silicon,
+ author={B. Gassend and D. Clarke and M. van Dijk and S. Devadas},
+ title = {Controlled Physical Random Functions},
+ booktitle = {Proceedings of the 18th Annual Computer Security Applications Conference --- ACSAC '02},
+ year = {2002},
+ ISBN = {0-7695-1828-1},
+ page = {149},
+ publisher = {IEEE},
+}
+
+@article{PUF-circ-secret-key,
+ author = {D. Lim and J. W. Lee and B. Gassend and G. E. Suh and M. van Dijk and S. Devadas},
+ title = {Extracting Secret Keys From Integrated Circuits},
+ journal = {IEEE Transactions on Very Large Scale Integration (VLSI) Systems},
+ pages = {1200--1205},
+ year = {2005},
+ issue = {13 (10)},
+}
+
+
+@INPROCEEDINGS{Li99equivalencyreasoning,
+ author = {Chu Min Li},
+ title = {Equivalency reasoning to solve a class of hard {SAT} problems},
+ booktitle = {Information Processing Letters},
+ year = {1999},
+ pages = {76--1}
+}
+
+@INPROCEEDINGS{Silva96conflictanalysis,
+ author = {Joo P. Marques and Silva Karem and A. Sakallah},
+ title = {Conflict analysis in search algorithms for propositional satisfiability},
+ booktitle = {Proc. of the IEEE Intl. Conf. on Tools with Artificial Intelligence},
+ year = {1996}
+}
+
+@article{Chaff01,
+ author = {Sharad Malik and Ying Zhao and Conor F. Madigan and Lintao Zhang and Matthew W. Moskewicz},
+ title = {Chaff: Engineering an Efficient {SAT} Solver},
+ journal ={Design Automation Conference},
+ year = {2001},
+ pages = {530-535},
+ doi = {http://doi.ieeecomputersociety.org/10.1109/DAC.2001.935565},
+ publisher = {IEEE Computer Society},
+ address = {Los Alamitos, CA, USA},
+}
+volume = {0},
+isbn = {},
+
+@article{visualizingDPLL,
+ author = {Sinz, Carsten},
+ title = {Visualizing {SAT} Instances and Runs of the {DPLL} Algorithm},
+ journal = {J. Autom. Reason.},
+ volume = {39},
+ number = {2},
+ year = {2007},
+ issn = {0168-7433},
+ pages = {219--243},
+ doi = {http://dx.doi.org/10.1007/s10817-007-9074-1},
+ publisher = {Kluwer Academic Publishers},
+ address = {Hingham, MA, USA},
+ }
+
+@inproceedings{nicolas.linear_feedback,
+ author={Nicolas T. Courtois},
+ title={Fast Algebraic Attacks on Stream Ciphers with Linear Feedback},
+ booktitle={Advances in Cryptology --- {CRYPTO} 2003},
+ year={2003},
+ pages={176-194},
+ volume={2729/2003},
+ series={LNCS},
+ publisher={Springer},
+}
+
+@misc{Karsten-webpage-Cyrpto-1,
+ author={Karsten Nohl},
+ title={Cryptanalysis of {C}rypto-1},
+ howpublished={Press release},
+ month={March},
+ day = {12},
+ year={2008},
+ note= {\url{http://www.cs.virginia.edu/~kn5f/Mifare.Cryptanalysis.htm}}
+}
+
+@Misc{Radboud-Mifare-press,
+ author = {{Digital {S}ecurity group, {R}adboud {U}niversity {N}ijmegen}},
+ title = {Security Flaw in {M}ifare {C}lassic},
+ howpublished = {Press release},
+ month = {March},
+ day = {12},
+ year = {2008},
+ note = {\url{http://www.ru.nl/english/general/radboud_university/vm/security_flaw_in/}},
+}
+
+@ARTICLE{Massacci00logicalcryptanalysis,
+ author = {Fabio Massacci and Laura Marraro},
+ title = {Logical cryptanalysis as a {SAT}-problem: Encoding and analysis},
+ journal = {Journal of Automated Reasoning},
+ year = {2000},
+ volume = {24},
+ pages = {165--203}
+}
+
+@article{Monte-Carlo-method,
+ abstract = {We shall present here the motivation and a general description of a method dealing with a class of problems in mathematical physics. The method is, essentially, a statistical approach to the study of differential equations, or more generally, of integro-differential equations that occur in various branches of the natural sciences.},
+ author = {Metropolis, Nicholas and Ulam, S. },
+ citeulike-article-id = {1886002},
+ doi = {10.2307/2280232},
+ journal = {Journal of the American Statistical Association},
+ keywords = {random, sampling},
+ number = {247},
+ pages = {335--341},
+ posted-at = {2009-04-12 22:32:37},
+ priority = {2},
+ title = {The {M}onte {C}arlo Method},
+ url = {http://dx.doi.org/10.2307/2280232},
+ volume = {44},
+ year = {1949}
+}
+
+@article{Rabin-primality-test,
+ author = {Rabin, Michael O. },
+ citeulike-article-id = {1505894},
+ doi = {10.1016/0022-314X(80)90084-0},
+ journal = {J. Number Theory},
+ mrnumber = {MR566880},
+ number = {1},
+ pages = {128--138},
+ posted-at = {2007-07-27 00:11:40},
+ priority = {2},
+ title = {Probabilistic algorithm for testing primality},
+ url = {http://dx.doi.org/10.1016/0022-314X(80)90084-0},
+ volume = {12},
+ year = {1980}
+}
+
+@article{Mersenne-Twister,
+ address = {New York, NY, USA},
+ author = {Matsumoto, Makoto and Nishimura, Takuji },
+ citeulike-article-id = {611171},
+ doi = {10.1145/272991.272995},
+ issn = {1049-3301},
+ journal = {ACM Trans. Model. Comput. Simul.},
+ keywords = {algorithm},
+ month = {January},
+ number = {1},
+ pages = {3--30},
+ posted-at = {2008-10-26 00:03:42},
+ priority = {0},
+ publisher = {ACM Press},
+ title = {Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator},
+ url = {http://dx.doi.org/10.1145/272991.272995},
+ volume = {8},
+ year = {1998}
+}
+
+@inproceedings{L'Ecuyer98randomnumber,
+ author = {Pierre L'Ecuyer and Peter Hellekalek},
+ title = {Random Number Generators: Selection Criteria and Testing},
+ booktitle = {Random and Quasi-Random Point Sets},
+ series = {Lecture Notes in Statistics},
+ volume = {138},
+ publisher = {Springer-Verlag},
+ address = {New York},
+ pages = {223--266},
+ year = {1998},
+}
+
+@inproceedings{DBLP:conf/sat/SinzD05,
+ author = {Carsten Sinz and Edda-Maria Dieringer},
+ title = {{DP}vis --- {A} Tool to Visualize the Structure of {SAT} Instances},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {257-268},
+ ee = {http://dx.doi.org/10.1007/11499107_19},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@article{gomes00heavytailed,
+ author = {Carla P. Gomes and Bart Selman and Nuno Crato and Henry A. Kautz},
+ title = {Heavy-Tailed Phenomena in Satisfiability and Constraint Satisfaction Problems},
+ journal = {Journal of Automated Reasoning},
+ volume = {24},
+ number = {1/2},
+ pages = {67--100},
+ year = {2000},
+ url = {citeseer.ist.psu.edu/article/gomes99heavytailed.html}
+}
+
+@article{Mandelbrot60Pareto,
+ author = {Benoît B. Mandelbrot},
+ title = {The Pareto-Lévy law and the distribution of income},
+ journal = {Internat. Econom. Rev.},
+ volume = {1},
+ year = {1960},
+ pages = {79--106}
+}
+
+@inproceedings{Moura07tutorial,
+ author = {Leonardo de Moura, Bruno Dutertre and Natarajan Shankar},
+ title = {A Tutorial on Satisfiability Modulo Theories},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {4590/2007},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ pages = {20--36},
+ booktitle = {Computer Aided Verification},
+}
+ doi = {10.1007/978-3-540-73368-3},
+
+@article{Karnaugh53Logic,
+ author = {Karnaugh, Maurice},
+ year = {1953},
+ month = {November},
+ title = {The Map Method for Synthesis of Combinational Logic Circuits},
+ journal = {Transactions of American Institute of Electrical Engineers part I},
+ volume = {72},
+ number = {9},
+ pages = {593--599},
+}
+
+@inproceedings{Li00Integrating,
+ author = {Li, Chu Min},
+ title = {Integrating Equivalency Reasoning into Davis-Putnam Procedure},
+ booktitle = {Proceedings of the Seventeenth National Conference on Artificial Intelligence and Twelfth Conference on Innovative Applications of Artificial Intelligence},
+ year = {2000},
+ isbn = {0-262-51112-6},
+ pages = {291--296},
+ publisher = {AAAI Press / The MIT Press},
+}
+
+@article{Warners99TwoPhase,
+ author = {Joost P. Warners and Hans Van Maaren},
+ title = {A Two Phase Algorithm for Solving a Class of Hard Satisfiability Problems},
+ journal = {Operations Research Letters},
+ year = {1999},
+ volume = {23},
+ number = {3--5},
+ pages = {81--88}
+}
+
+@inproceedings{Massacci00Taming,
+ author = {Peter Baumgartner and Fabio Massacci},
+ title = {The Taming of the {(X)OR}},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ ISSN = {0302-9743},
+ volume = {1861/2000},
+ booktitle = {Computational Logic — CL 2000},
+ doi = {10.1007/3-540-44957-4},
+ year = {2000},
+ isbn = {978-3-540-67797-0},
+ pages = {508--522},
+}
+
+@inproceedings{Massacci99Using,
+ author = {Fabio Massacci},
+ title = {Using {W}alk-{SAT} and {R}el-sat for cryptographic key search},
+ booktitle = {Proc. of IJCAI-99},
+ year = {1999},
+ editor = {Morgan Kaufmann},
+ pages = {290--295},
+}
+
+@inproceedings{Girault04Public,
+author = {Marc Girault and David Lefranc},
+title = {Public Key Authentication with One (Online) Single Addition},
+series = {LNCS},
+bublisher = {Springer Berlin / Heidelberg},
+ISSN = {0302-9743},
+volume = {3156/2004},
+booktitle = {Cryptographic Hardware and Embedded Systems - CHES 2004},
+doi ={10.1007/b99451},
+year = {2004},
+isbn = {978-3-540-22666-6},
+pages = {967--984}
+}
+
+@article{Hsieh72OnOptimal,
+ author = {Hsieh, H. Y. and Ghausi, M. S.},
+ title = {On optimal-pivoting algorithms in sparse matrices},
+ journal = {IEEE Trans. Circuit Theory},
+ volume = {CT-19},
+ pages = {93--96},
+ month = {January},
+ year = {1972}
+}
+
+@article{HerasetalJAIR2008,
+ author = {Federico Heras and Javier Larrosa and Albert Oliveras},
+ title = {{MiniMaxSAT: An efficient Weighted Max-SAT Solver}},
+ journal = {Journal of Artificial Intelligence Research},
+ volume = {31},
+ year = {2008},
+ pages = {1--32}
+ }
+
+@techreport{Wieringa07MiniMarch,
+ title = {{M}ini{M}arch --- {E}mbedding lookahead direction heuristics in a conflict driven solver},
+ author = {Siert Wieringa},
+ institution = {Technische Universiteit Delft},
+ note = {Research Report},
+ year = {2007},
+ url = {http://www.st.ewi.tudelft.nl/sat/theses/minimarch.pdf},
+}
+
+techreport{OSI-MIT-Licence,
+url = {http://www.opensource.org/licenses/mit-license.php}
+
+
+@techreport{eStream,
+ title = {The e{STREAM} Portfolio},
+ author = {Steve Babbage and Christophe De Canniere and Anne Canteaut and Carlos Cid and Henri Gilbert and Thomas Johansson and Christof Paar and Matthew Parker and Bart Preneel and Vincent Rijmen and Matt Robshaw and Hongjun Wu},
+ url = {http://www.ecrypt.eu.org/stream/portfolio.pdf},
+ institution = {eStream Project},
+ year = {2008},
+ month = {September},
+ day = {8},
+}
+
+@techreport{Kibria08MiniSat,
+ author = {Raihan Kibria},
+ title = {Midi{S}AT - {A}n extension of {M}ini{SAT}},
+ institution = {Department of Electrical and Computer Engineering, Darmstadt University of Technology},
+ year = {2005},
+ month = {April},
+ day = {26},
+ url = {www.lri.fr/~simon/contest/results/descriptions/solvers/midisat_static.pdf},
+}
+
+@incollection{DaemenR05Rijndael,
+ author = {Joan Daemen and Vincent Rijmen},
+ title = {Rijndael/AES},
+ booktitle = {Encyclopedia of Cryptography and Security},
+ year = {2005},
+ ee = {http://dx.doi.org/10.1007/0-387-23483-7_358},
+ crossref = {DBLP:reference/crypt/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{DBLP:reference/crypt/2005,
+ editor = {Henk C. A. van Tilborg},
+ title = {Encyclopedia of Cryptography and Security},
+ publisher = {Springer},
+ year = {2005},
+ isbn = {978-0-387-23473-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Strassen69Gaussian,
+ author = {Volker Strassen},
+ title = {Gaussian Elimination is Not Optimal},
+ journal = {Numerische Mathematik},
+ volume = {13},
+ pages = {354--356},
+ year = {1969}
+}
+
+@techreport{Crawford94TheMinimal,
+ author = {Crawford, J. M. and Kearns, M. J. and Shapire, R. E.},
+ title = {The Minimal Disagreement Parity Problem as a Hard Satisfiability Problem},
+ institution = {Computational Intelligence Research Laboratory and {AT\&T} {B}ell {L}abs},
+ month = {February},
+ year = {1994},
+}
+
+@inproceedings{OuafiV09Smashing,
+ author = {Khaled Ouafi and Serge Vaudenay},
+ title = {Smashing {SQUASH}-0},
+ volume = {5479},
+ crossref = {DBLP:conf/eurocrypt/2009},
+}
+
+@inproceedings{ShamirRFIDSecLecture,
+author = {Adi Shamir},
+title = {{SQUASH}: {A} new one-way hash function with provable security properties for higley contrained devices such as {RFID} tags},
+booktitle = {Invited lecture to the RFID Securty 2007 Workshop},
+year = {2007},
+}
+
+@misc{DES77,
+ author = {{National Bureau of Standards}},
+ year = {1977},
+ title = {Data {E}ncryption {S}tandard},
+ institution = {U. S. Department of Commerce, National Bureau of Standards, Standards Publication (FIPS PUB) 46},
+ address = {Washington, DC},
+}s
+
+@INPROCEEDINGS{Tsudik06Yet,
+ author = {Tsudik, Gene},
+ title = {{YA-TRAP}: Yet Another Trivial {RFID} Authentication Protocol},
+ booktitle = {International Conference on Pervasive Computing and Communications --- PerCom 2006},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {640--643},
+ address = {Pisa, Italy},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+
+@INPROCEEDINGS{Conti07RIPP,
+ author = {Conti, Mauro and Pietro, Roberto~Di and Mancini, Luigi~Vincenzo and Spognardi, Angelo},
+ title = {{RIPP-FS}: an {RFID} Identification, Privacy Preserving Protocol with Forward Secrecy},
+ booktitle = {International Workshop on Pervasive Computing and Communication Security --- PerSec '07},
+ year = {2007},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {229--234},
+ address = {New York City, New York, USA},
+ month = {March},
+ organization = {IEEE},
+ publisher = {IEEE Computer Society Press},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Burmester06Provably,
+ author = {Burmester, Mike and Le, Tri van and Medeiros, Breno de},
+ title = {Provably Secure Ubiquitous Systems: Universally Composable {RFID} Authentication Protocols},
+ booktitle = {Conference on Security and Privacy for Emerging Areas in Communication Networks --- SecureComm '06},
+ year = {2006},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Baltimore, Maryland, USA},
+ month = {August-September},
+ organization = {IEEE},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@misc{ISO14443-standard,
+ author = {ISO/IEC},
+ title = {14443-3 --- {I}dentification cards -- {C}ontactless integrated circuit(s) cards -- {P}roximity cards -- {P}art 3: {I}nitialization and anticollision},
+ year = {2001, Stage: 90.92 --- 2007-12-11},
+ institution = {International Organization for Standardization},
+ address = {Geneva, Switzerland},
+ url = {http://www.isotopicmaps.org/sam/sam-model/YYYY-MM-DD/},
+}
+
+@INPROCEEDINGS{Bailey05Shoehorning,
+ author = {Bailey, Daniel and Juels, Ari},
+ title = {{Shoehorning Security into the EPC Standard}},
+ booktitle = {International Conference on Security in Communication Networks --- SCN 2006},
+ year = {2006},
+ editor = {De~Prisco, Roberto and Yung, Moti},
+ volume = {4116},
+ series = {LNCS},
+ pages = {303--320},
+ address = {Maiori, Italy},
+ month = {September},
+ organization = {},
+ publisher = {Springer-Verlag},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@INPROCEEDINGS{Soos08Analysing,
+ author = {Soos, Mate},
+ title = {{Analysing the {M}olva and {D}i {P}ietro Private {RFID} Authentication Scheme}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'08},
+ year = {2008},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Budapest, Hungary},
+ month = {July},
+ organization = {},
+ publisher = {},
+}
+
+@inproceedings{DBLP:conf/ccs/BurmesterMM08,
+ author = {Mike Burmester and Breno de Medeiros and Rossana Motta},
+ title = {Robust, anonymous {RFID} authentication with constant key-lookup},
+ booktitle = {ASIACCS},
+ year = {2008},
+ pages = {283-291},
+ ee = {http://doi.acm.org/10.1145/1368310.1368351},
+ crossref = {DBLP:conf/ccs/2008asia},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ccs/2008asia,
+ editor = {Masayuki Abe and Virgil D. Gligor},
+ title = {Proceedings of the 2008 ACM Symposium on Information, Computer and Communications Security, ASIACCS 2008, Tokyo, Japan, March 18-20, 2008},
+ booktitle = {ASIACCS},
+ publisher = {ACM},
+ year = {2008},
+ isbn = {978-1-59593-979-1},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@INPROCEEDINGS{Blass09Ff,
+ author = {Blass, Erik-Oliver and Kurmus, Anil and Molva, Refik and Noubir, Guevara and Shikfa, Abdullatif},
+ title = {{The {F}f-Family of Protocols for {RFID}-Privacy and Authentication}},
+ booktitle = {Workshop on RFID Security --- RFIDSec'09},
+ year = {2009},
+ editor = {},
+ volume = {},
+ series = {},
+ pages = {},
+ address = {Leuven, Belgium},
+ month = {July},
+ organization = {},
+ publisher = {},
+ bibsource = {Information Security Group (GSI), UCL, Louvain-la-Neuve, Belgium},
+}
+
+@inproceedings{DBLP:conf/cardis/CastellucciaA06,
+ author = {Claude Castelluccia and Gildas Avoine},
+ title = {Noisy Tags: {A} Pretty Good Key Exchange Protocol for {RFID} Tags},
+ booktitle = {CARDIS},
+ year = {2006},
+ pages = {289-299},
+ ee = {http://dx.doi.org/10.1007/11733447_21},
+ crossref = {DBLP:conf/cardis/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2006,
+ editor = {Josep Domingo-Ferrer and
+ Joachim Posegga and
+ Daniel Schreckling},
+ title = {Smart Card Research and Advanced Applications, 7th IFIP
+ WG 8.8/11.2 International Conference, CARDIS 2006, Tarragona,
+ Spain, April 19-21, 2006, Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3928},
+ year = {2006},
+ isbn = {3-540-33311-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ches/SavryPDRR07,
+ author = {O. Savry and F. Pebay-Peyroula and F. Dehmas and G. Robert and J. Reverdy},
+ title = {{RFID} Noisy Reader --- {H}ow to Prevent from Eavesdropping on the Communication?},
+ booktitle = {CHES},
+ year = {2007},
+ pages = {334-345},
+ ee = {http://dx.doi.org/10.1007/978-3-540-74735-2_23},
+ crossref = {DBLP:conf/ches/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ches/2007,
+ editor = {Pascal Paillier and Ingrid Verbauwhede},
+ title = {Cryptographic Hardware and Embedded Systems --- {CHES} 2007,
+ 9th International Workshop, Vienna, Austria, September 10-13,
+ 2007, Proceedings},
+ booktitle = {CHES},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4727},
+ year = {2007},
+ isbn = {978-3-540-74734-5},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{Hancke07Modulating,
+ author = {G. Hancke},
+ title = {Modulating a noisy carrier signal for eavesdropping-resistant {HF RFID}},
+ journal = {e\&i --- Elektrotechnik und Informationstechnik},
+ year = {2007},
+ volume = {124},
+ number = {11},
+ month = {November},
+ pages = {404--408},
+ publisher = {Springer Wien},
+ ISSN = {0932-383X},
+ DOI = {10.1007/s00502-007-0479-7}
+}
+
+@inproceedings{1423361,
+ author = {Babbage, Steve and Dodd, Matthew},
+ title = {The {MICKEY} Stream Ciphers},
+ booktitle = {New Stream Cipher Designs: The e{STREAM} Finalists},
+ year = {2008},
+ isbn = {978-3-540-68350-6},
+ pages = {191--209},
+ doi = {http://dx.doi.org/10.1007/978-3-540-68351-3_15},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+ }
+
+@inproceedings{DBLP:conf/wistp/DeursenMR08,
+ author = {Ton van Deursen and Sjouke Mauw and Sasa Radomirovic},
+ title = {Untraceability of {RFID} Protocols},
+ booktitle = {WISTP},
+ year = {2008},
+ pages = {1-15},
+ ee = {http://dx.doi.org/10.1007/978-3-540-79966-5_1},
+ crossref = {DBLP:conf/wistp/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/wistp/2008,
+ editor = {Jose Antonio Onieva and Damien Sauveron and Serge Chaumette and Dieter Gollmann and Constantinos Markantonakis},
+ title = {Information Security Theory and Practices. Smart Devices, Convergence and Next Generation Networks, Second {IFIP WG} 11.2 International Workshop, {WISTP} 2008, Seville, Spain, May 13-16, 2008. Proceedings},
+ booktitle = {WISTP},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5019},
+ year = {2008},
+ isbn = {978-3-540-79965-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{A51,
+ author = {Ross Anderson},
+ title = {A5 (was: Hacking digital phones)},
+ howpublished = {Newsgroup Communication},
+ year = {1994},
+}
+
+@inproceedings{DBLP:conf/cardis/GansHG08,
+ author = {Gerhard de Koning Gans and Jaap-Henk Hoepman and Flavio D. Garcia},
+ title = {A Practical Attack on the {MIFARE} {C}lassic},
+ booktitle = {CARDIS},
+ year = {2008},
+ pages = {267-282},
+ ee = {http://dx.doi.org/10.1007/978-3-540-85893-5_20},
+ crossref = {DBLP:conf/cardis/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cardis/2008,
+ editor = {Gilles Grimaud and Fran\c{c}ois-Xavier Standaert},
+ title = {Smart Card Research and Advanced Applications, 8th IFIP WG 8.8/11.2 International Conference, CARDIS 2008, London, UK, September 8-11, 2008. Proceedings},
+ booktitle = {CARDIS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5189},
+ year = {2008},
+ isbn = {978-3-540-85892-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ima/CourtoisB07,
+ author = {Nicolas T. Courtois and Gregory V. Bard},
+ title = {Algebraic Cryptanalysis of the {D}ata {E}ncryption {S}tandard},
+ booktitle = {{IMA} Int. Conf.},
+ year = {2007},
+ pages = {152-169},
+ ee = {http://dx.doi.org/10.1007/978-3-540-77272-9_10},
+ crossref = {DBLP:conf/ima/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ima/2007,
+ editor = {Steven D. Galbraith},
+ title = {Cryptography and Coding, 11th IMA International Conference, Cirencester, UK, December 18-20, 2007, Proceedings},
+ booktitle = {IMA Int. Conf.},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4887},
+ year = {2007},
+ isbn = {978-3-540-77271-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Bard-algebraic,
+ title = {Algebraic Cryptanalysis},
+ author = {Gregory V. Bard},
+ year = {2009},
+ pages = {392},
+ volume = {XXXIV},
+ series = {Security and Cryptology},
+ ISBN = {978-0-387-88756-2},
+ publisher = {Springer},
+}
+
+@inproceedings{Graphviz,
+ author = {John Ellson and Emden R. Gansner and Eleftherios Koutsofios and Stephen C. North and Gordon Woodhull},
+ year = {2001},
+ title = {Graphviz --- open source graph drawing tools},
+ pages = {483--484},
+ crossref = {DBLP:conf/gd/2001},
+}
+
+@proceedings{DBLP:conf/gd/2001,
+ editor = {Petra Mutzel and Michael J{\"u}nger and Sebastian Leipert},
+ title = {Graph Drawing, 9th International Symposium, GD 2001 Vienna, Austria, September 23--26, 2001, Revised Papers},
+ booktitle = {Graph Drawing},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2265},
+ year = {2002},
+ isbn = {3-540-43309-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{Borghoff09Mixed,
+ booktitle = {WEWoRC --- Western European Workshop on Research in Cryptology},
+ title = {Bivium as a Mixed-0-1 Linear Programming Problem},
+ author = {Julia Borghoff and Lars R. Knudsen and Mathias Stolpe},
+ month = {July},
+ year = {2009},
+ address = {Graz, Austria},
+}
+
+@inproceedings{DBLP:conf/eurocrypt/DinurS09,
+ author = {Itai Dinur and Adi Shamir},
+ title = {Cube Attacks on Tweakable Black Box Polynomials},
+ booktitle = {EUROCRYPT},
+ year = {2009},
+ pages = {278--299},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9_16},
+ crossref = {DBLP:conf/eurocrypt/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/eurocrypt/2009,
+ editor = {Antoine Joux},
+ title = {Advances in Cryptology --- EUROCRYPT 2009, 28th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Cologne, Germany, April 26--30, 2009. Proceedings},
+ booktitle = {EUROCRYPT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {5479},
+ year = {2009},
+ isbn = {978-3-642-01000-2},
+ ee = {http://dx.doi.org/10.1007/978-3-642-01001-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{eStreamFinalists,
+ title = {The e{STREAM} Finalists},
+ editor = {Matthew Robshaw and Olivier Billet},
+ series = {LNCS},
+ subseries = {Security and Cryptology},
+ volume = {4986},
+ year = {2008},
+ pages = {295},
+ isbn = {978-3-540-68350-6},
+ publisher = {Springer},
+}
+
+@article{diffie76new,
+ author = "Whitfield Diffie and Martin E. Hellman",
+ title = "New Directions in Cryptography",
+ journal = "IEEE Transactions on Information Theory",
+ volume = "IT-22",
+ number = "6",
+ pages = "644--654",
+ date = "November 1976",
+ year = "1976",
+ url = "citeseer.ist.psu.edu/diffie76new.html"
+}
+
+@ARTICLE{Rivest78amethod,
+ author = {Ron L. Rivest and Adi Shamir and Leonard Max Adleman},
+ title = {A Method for Obtaining Digital Signatures and Public-Key Cryptosystems},
+ journal = {Communications of the ACM},
+ year = {1978},
+ volume = {21},
+ pages = {120--126}
+}
+
+@inproceedings{Pfizmann01Anonimity,
+ author = {Andreas Pfitzmann and Marit Köhntopp},
+ title = {Anonymity, Unobservability, and Pseudonymity --- {A} Proposal for Terminology},
+ series = {LNCS},
+ publisher = {Springer Berlin / Heidelberg},
+ issn = {0302-9743},
+ volume = {2009},
+ year = {2001},
+ booktitle = {Designing Privacy Enhancing Technologies},
+ doi = {10.1007/3-540-44702-4},
+ isbn = {978-3-540-41724-8},
+ pages = {1--9},
+}
+
+@misc{Bard07efficientmethods,
+ author = {Gregory V. Bard and Nicolas T. Courtois and Chris Jefferson},
+ title = {Efficient Methods for Conversion and Solution of Sparse Systems of Low-Degree Multivariate Polynomials over {GF}(2) via {SAT}-Solvers},
+ howpublished = {Cryptology ePrint Archive, Report 2007/024, \url{http://eprint.iacr.org/2007/024}},
+ year = {2007},
+ organization = {IACR},
+}
+
+@inproceedings{DBLP:conf/sat/SoosNC09,
+ author = {Mate Soos and
+ Karsten Nohl and
+ Claude Castelluccia},
+ title = {Extending {SAT} Solvers to Cryptographic Problems},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {244--257},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_24},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/cav/GaneshD07,
+ author = {Vijay Ganesh and
+ David L. Dill},
+ title = {A Decision Procedure for Bit-Vectors and Arrays},
+ booktitle = {CAV},
+ year = {2007},
+ pages = {519-531},
+ ee = {http://dx.doi.org/10.1007/978-3-540-73368-3_52},
+ crossref = {DBLP:conf/cav/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/cav/2007,
+ editor = {Werner Damm and
+ Holger Hermanns},
+ title = {Computer Aided Verification, 19th International Conference,
+ CAV 2007, Berlin, Germany, July 3-7, 2007, Proceedings},
+ booktitle = {CAV},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4590},
+ year = {2007},
+ isbn = {978-3-540-73367-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Logic2CNF,
+ author = {Edd Barrett},
+ title = {Logic2{CNF} Logic Solver and Converter},
+ note = {\url{http://projects.cs.kent.ac.uk/projects/logic2cnf/trac/wiki/WikiStart}},
+ year = {2010},
+ month = {March},
+}
+
+@misc{CryptoMiniSat,
+ author = {Mate Soos},
+ title = {Crypto{M}ini{S}at --- a {SAT} solver for cryptographic problems},
+ note = {\url{http://planete.inrialpes.fr/~soos/CryptoMiniSat/index.html}},
+ year = {2009},
+}
+
+@inproceedings{DBLP:conf/sat/EenB05,
+ author = {Niklas E{\'e}n and
+ Armin Biere},
+ title = {Effective Preprocessing in {SAT} Through Variable and Clause
+ Elimination},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {61-75},
+ ee = {http://dx.doi.org/10.1007/11499107_5},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{glucose,
+ author = {Gilles Audemard and Laurent Simon},
+ title = {{GLUCOSE}: a solver that predicts learnt clauses quality},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {7--8},
+}
+
+@inproceedings{precosat,
+ author = {Armin Biere},
+ title = {P\{re,i\}coSAT@SC’09},
+ booktitle = {SAT 2009 competitive events booklet},
+ year = {2009},
+ pages = {41--42},
+}
+
+@inproceedings{DBLP:conf/sat/HeuleM04a,
+ author = {Marijn Heule and
+ Hans van Maaren},
+ title = {Aligning {CNF}- and Equivalence-Reasoning},
+ booktitle = {SAT (Selected Papers},
+ year = {2004},
+ pages = {145--156},
+ ee = {http://dx.doi.org/10.1007/11527695_12},
+ crossref = {DBLP:conf/sat/2004lncs},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2004lncs,
+ editor = {Holger H. Hoos and
+ David G. Mitchell},
+ title = {Theory and Applications of Satisfiability Testing, 7th International
+ Conference, SAT 2004, Vancouver, BC, Canada, May 10-13,
+ 2004, Revised Selected Papers},
+ booktitle = {SAT (Selected Papers)},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3542},
+ year = {2005},
+ isbn = {3-540-27829-X},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@techreport{Heule-thesis,
+ author = {Marijn Heule},
+ title = {{m}arch: Towards a lookahead Sat solver for general purposes},
+ institution={Technische Universiteit Delft},
+ month={February},
+ year={2004},
+}
+
+@techreport{Heule-phd,
+ author = {Marijn J.H. Heule},
+ title = {Smart solving: Tool and techniques for satisfiability solvers},
+ institution={Technische Universiteit Delft},
+ year={2008},
+}
+
+@article{DBLP:journals/amai/JeroslowW90,
+ author = {Robert G. Jeroslow and
+ Jinchang Wang},
+ title = {Solving Propositional Satisfiability Problems},
+ journal = {Ann. Math. Artif. Intell.},
+ volume = {1},
+ year = {1990},
+ pages = {167-187},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/PipatsrisawatD07,
+ author = {Knot Pipatsrisawat and
+ Adnan Darwiche},
+ title = {A Lightweight Component Caching Scheme for Satisfiability
+ Solvers},
+ booktitle = {SAT},
+ year = {2007},
+ pages = {294-299},
+ ee = {http://dx.doi.org/10.1007/978-3-540-72788-0_28},
+ crossref = {DBLP:conf/sat/2007},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2007,
+ editor = {Jo{\~a}o Marques-Silva and
+ Karem A. Sakallah},
+ title = {Theory and Applications of Satisfiability Testing --- SAT
+ 2007, 10th International Conference, Lisbon, Portugal, May
+ 28-31, 2007, Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {4501},
+ year = {2007},
+ isbn = {978-3-540-72787-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/ijcai/AudemardS09,
+ author = {Gilles Audemard and
+ Laurent Simon},
+ title = {Predicting Learnt Clauses Quality in Modern {SAT} Solvers},
+ booktitle = {IJCAI},
+ year = {2009},
+ pages = {399-404},
+ ee = {http://ijcai.org/papers09/Papers/IJCAI09-074.pdf},
+ crossref = {DBLP:conf/ijcai/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/ijcai/2009,
+ editor = {Craig Boutilier},
+ title = {IJCAI 2009, Proceedings of the 21st International Joint
+ Conference on Artificial Intelligence, Pasadena, California,
+ USA, July 11-17, 2009},
+ booktitle = {IJCAI},
+ year = {2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/tacas/JarvisaloBH10,
+ author = {Matti J{\"a}rvisalo and
+ Armin Biere and
+ Marijn Heule},
+ title = {Blocked Clause Elimination},
+ booktitle = {TACAS},
+ year = {2010},
+ pages = {129-144},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2_10},
+ crossref = {DBLP:conf/tacas/2010},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/tacas/2010,
+ editor = {Javier Esparza and
+ Rupak Majumdar},
+ title = {Tools and Algorithms for the Construction and Analysis of
+ Systems, 16th International Conference, TACAS 2010, Held
+ as Part of the Joint European Conferences on Theory and
+ Practice of Software, ETAPS 2010, Paphos, Cyprus, March
+ 20-28, 2010. Proceedings},
+ booktitle = {TACAS},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6015},
+ year = {2010},
+ isbn = {978-3-642-12001-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-12002-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{DBLP:journals/dam/Li03,
+ author = {Chu Min Li},
+ title = {Equivalent literal propagation in the {DLL} procedure},
+ journal = {Discrete Applied Mathematics},
+ volume = {130},
+ number = {2},
+ year = {2003},
+ pages = {251-276},
+ ee = {http://dx.doi.org/10.1016/S0166-218X(02)00407-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@misc{Grid5000,
+ author = {{The Grid'5000 team}},
+ title = {The {G}rid'5000 project},
+ note = {\url{https://www.grid5000.fr}},
+}
+ year = {2008},
+
+@article{DBLP:journals/endm/Berre01,
+ author = {Daniel Le Berre},
+ title = {Exploiting the real power of unit propagation lookahead},
+ journal = {Electronic Notes in Discrete Mathematics},
+ volume = {9},
+ year = {2001},
+ pages = {59-80},
+ ee = {http://dx.doi.org/10.1016/S1571-0653(04)00314-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/GershmanS05,
+ author = {Roman Gershman and Ofer Strichman},
+ title = {Cost-Effective Hyper-Resolution for Preprocessing {CNF} Formulas},
+ booktitle = {SAT},
+ year = {2005},
+ pages = {423-429},
+ ee = {http://dx.doi.org/10.1007/11499107_34},
+ crossref = {DBLP:conf/sat/2005},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/HeuleJB11,
+ author = {Marijn Heule and
+ Matti J{\"a}rvisalo and
+ Armin Biere},
+ title = {Efficient {CNF} Simplification Based on Binary Implication
+ Graphs},
+ booktitle = {SAT},
+ year = {2011},
+ pages = {201-215},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0_17},
+ crossref = {DBLP:conf/sat/2011},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2011,
+ editor = {Karem A. Sakallah and
+ Laurent Simon},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2011 - 14th International Conference, SAT 2011, Ann Arbor,
+ MI, USA, June 19-22, 2011. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {6695},
+ year = {2011},
+ isbn = {978-3-642-21580-3},
+ ee = {http://dx.doi.org/10.1007/978-3-642-21581-0},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/ecai/PietteHS08,
+ author = {C{\'e}dric Piette and
+ Youssef Hamadi and
+ Lakhdar Sais},
+ title = {Vivifying Propositional Clausal Formulae},
+ booktitle = {ECAI},
+ year = {2008},
+ pages = {525-529},
+ ee = {http://dx.doi.org/10.3233/978-1-58603-891-5-525},
+ crossref = {DBLP:conf/ecai/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/ecai/2008,
+ editor = {Malik Ghallab and
+ Constantine D. Spyropoulos and
+ Nikos Fakotakis and
+ Nikolaos M. Avouris},
+ title = {ECAI 2008 - 18th European Conference on Artificial Intelligence,
+ Patras, Greece, July 21-25, 2008, Proceedings},
+ booktitle = {ECAI},
+ publisher = {IOS Press},
+ series = {Frontiers in Artificial Intelligence and Applications},
+ volume = {178},
+ year = {2008},
+ isbn = {978-1-58603-891-5},
+ ee = {http://www.booksonline.iospress.nl/Content/View.aspx?piid=9905},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/HanS09,
+ author = {HyoJung Han and
+ Fabio Somenzi},
+ title = {On-the-Fly Clause Improvement},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {209-222},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_21},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{DBLP:conf/sat/SorenssonB09,
+ author = {Niklas S{\"o}rensson and
+ Armin Biere},
+ title = {Minimizing Learned Clauses},
+ booktitle = {SAT},
+ year = {2009},
+ pages = {237-243},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2_23},
+ crossref = {DBLP:conf/sat/2009},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/sat/BacchusW03,
+ author = {Fahiem Bacchus and
+ Jonathan Winter},
+ title = {Effective Preprocessing with Hyper-Resolution and Equality
+ Reduction},
+ booktitle = {SAT},
+ year = {2003},
+ pages = {341-355},
+ ee = {http://dx.doi.org/10.1007/978-3-540-24605-3_26},
+ crossref = {DBLP:conf/sat/2003},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+@proceedings{DBLP:conf/sat/2003,
+ editor = {Enrico Giunchiglia and
+ Armando Tacchella},
+ title = {Theory and Applications of Satisfiability Testing, 6th International
+ Conference, SAT 2003. Santa Margherita Ligure, Italy, May
+ 5-8, 2003 Selected Revised Papers},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {2919},
+ year = {2004},
+ isbn = {3-540-20851-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2005,
+ editor = {Fahiem Bacchus and
+ Toby Walsh},
+ title = {Theory and Applications of Satisfiability Testing, 8th International
+ Conference, SAT 2005, St. Andrews, UK, June 19-23, 2005,
+ Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = {3569},
+ year = {2005},
+ isbn = {3-540-26276-8},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/sat/2009,
+ editor = {Oliver Kullmann},
+ title = {Theory and Applications of Satisfiability Testing - SAT
+ 2009, 12th International Conference, SAT 2009, Swansea,
+ UK, June 30 - July 3, 2009. Proceedings},
+ booktitle = {SAT},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {5584},
+ year = {2009},
+ isbn = {978-3-642-02776-5},
+ ee = {http://dx.doi.org/10.1007/978-3-642-02777-2},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{DBLP:conf/hvc/MantheyHB12,
+ author = {Norbert Manthey and
+ Marijn Heule and
+ Armin Biere},
+ title = {Automated Reencoding of Boolean Formulas},
+ booktitle = {Haifa Verification Conference},
+ year = {2012},
+ pages = {102-117},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3_14},
+ crossref = {DBLP:conf/hvc/2012},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/hvc/2012,
+ editor = {Armin Biere and
+ Amir Nahir and
+ Tanja E. J. Vos},
+ title = {Hardware and Software: Verification and Testing - 8th International
+ Haifa Verification Conference, HVC 2012, Haifa, Israel,
+ November 6-8, 2012. Revised Selected Papers},
+ booktitle = {Haifa Verification Conference},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {7857},
+ year = {2013},
+ isbn = {978-3-642-39610-6},
+ ee = {http://dx.doi.org/10.1007/978-3-642-39611-3},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@book{Quinlan:1993:CPM:152181,
+ author = {Quinlan, J. Ross},
+ title = {C4.5: Programs for Machine Learning},
+ year = {1993},
+ isbn = {1-55860-238-0},
+ publisher = {Morgan Kaufmann Publishers Inc.},
+ address = {San Francisco, CA, USA},
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/splncs03.bst b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/splncs03.bst
new file mode 100644
index 000000000..327916917
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/docs/satcomp18-pdf/splncs03.bst
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'
+%%
+%% BibTeX bibliography style for use with numbered references in
+%% Springer Verlag's "Lecture Notes in Computer Science" series.
+%% (See Springer's documentation for llncs.cls for
+%% more details of the suggested reference format.) Note that this
+%% file will not work for author-year style citations.
+%%
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
+%%
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre
+%%
+%% ================================================================================================
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
+%%
+%% CHANGES (with respect to titto-lncs-01.bst):
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
+%% ================================================================================================
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
+%% Edited by hand by titto based on `titto.bst' (see below)
+%%
+%% CHANGES (with respect to titto.bst):
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
+%% ================================================================================================
+%% This was file `titto.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
+%% ----------------------------------------
+%% *** Tentative .bst file for Springer LNCS ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ % \bibitem{key}...
+ % Usage of \cite is as follows:
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is alphabetical by authors.
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+% newline$
+% "\newblock " write$ % removed for titto-lncs-01
+ " " write$ % to avoid long spaces between title and "In: ..."
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+
+FUNCTION {add.colon}
+{ duplicate$ empty$
+ 'skip$
+ { ":" * add.blank }
+ if$
+}
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+STRINGS {z}
+FUNCTION {remove.dots}
+{ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+}
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ skip$ }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+FUNCTION {titto.space.prefix} % always introduce a space
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {titto.bbl.volume} % for handling journals
+{ "" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {titto.bbl.pages} % for journals
+{ "" }
+
+FUNCTION {titto.bbl.page} % for journals
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+% { "\urlprefix\url{" url * "}" * }
+ { "\url{" url * "}" * } % changed in titto-lncs-02.bst
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}{, f{.}.}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f{.}.~}{vv~}{ll}{ jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{
+ month "month" bibinfo.check
+ duplicate$ empty$
+ year "year" bibinfo.check duplicate$ empty$
+ { swap$ 'skip$
+ { "there's a month but no year in " cite$ * warning$ }
+ if$
+ *
+ }
+ { swap$ 'skip$
+ {
+ swap$
+ " " * swap$
+ }
+ if$
+ *
+ remove.dots
+ }
+ if$
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { emphasize ", " * swap$ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'titto.bbl.pages
+ 'titto.bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+% bbl.volume swap$ tie.or.space.prefix
+ titto.bbl.volume swap$ titto.space.prefix
+% rationale for the change above: for journals you don't want "vol." label
+% hence it does not make sense to attach the journal number to the label when
+% it is short
+ "volume" bibinfo.check
+ * *
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+% editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
+ editor "editor" format.names duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ key duplicate$ empty$
+ { pop$
+ journal duplicate$ empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+ { "journal" bibinfo.check emphasize word.in swap$ * }
+ if$
+ }
+ { word.in swap$ * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ {
+ bbl.and space.word
+ * editor #2 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { format.booktitle duplicate$ empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ }
+ { word.in swap$ * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.chapter.pages output
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ new.sentence % added by titto
+ format.bvolume output
+ format.pages output
+ new.sentence
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization "organization" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { output
+ address "address" bibinfo.check output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ {
+ address new.block.checka
+ address "address" bibinfo.check output
+ }
+ 'skip$
+ if$
+ }
+ {
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ }
+ if$
+ format.edition output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ add.colon
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished "howpublished" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+ empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization "organization" bibinfo.check output
+ }
+ { format.editors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ editor empty$
+ { publisher empty$
+ { format.number.series output }
+ {
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+ new.sentence
+ format.number.series output
+ format.organization.address output }
+ {
+ new.sentence
+ format.number.series output
+ organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {presort}
+SORT
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `titto.bst'.
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/python/CMakeLists.txt
new file mode 100644
index 000000000..15515ebf3
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/CMakeLists.txt
@@ -0,0 +1,83 @@
+# Original work Copyright (c) 2017, Mate Soos
+# Modified work Copyright (c) 2017, Pierre Vignet
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
+from __future__ import print_function;
+import sysconfig;
+print(sysconfig.get_config_var('CFLAGS'), end = '')"
+ OUTPUT_VARIABLE PY_C_CONFIG)
+
+execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
+from __future__ import print_function;
+import sysconfig;
+print(sysconfig.get_config_var('SHLIBS'), end = '')"
+ OUTPUT_VARIABLE PY_LD_CONFIG)
+
+
+string(REPLACE "\n" " " PY_C_CONFIG ${PY_C_CONFIG})
+string(REPLACE "\n" " " PY_LD_CONFIG ${PY_LD_CONFIG})
+
+message(STATUS "Python CFLAGS: '${PY_C_CONFIG}'")
+message(STATUS "Python LDFLAGS: '${PY_LD_CONFIG}'")
+message(STATUS "Python module will be installed to : '${CMAKE_INSTALL_PREFIX}'")
+
+
+set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
+set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build")
+
+# Copy environment for distutils
+file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/README.rst" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/")
+file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/")
+file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/")
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST.in" "${CMAKE_CURRENT_BINARY_DIR}/MANIFEST.in")
+
+
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in" ${SETUP_PY})
+
+add_custom_command(OUTPUT ${OUTPUT}/timestamp
+ COMMAND ${PYTHON_EXECUTABLE}
+ ARGS setup.py build_ext --inplace --rpath ../lib
+ DEPENDS libcryptominisat5)
+
+add_custom_target(python_interface
+ ALL DEPENDS ${OUTPUT}/timestamp)
+
+install(CODE "execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} install --prefix=${CMAKE_INSTALL_PREFIX} --record files.txt
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
+)
+
+#todo uninstall
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+ add_custom_target(uninstall_pycyrptosat
+ COMMAND Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}
+ )
+else()
+ add_custom_target(uninstall_pycyrptosat
+ COMMAND cat files.txt | xargs rm -f
+ )
+endif()
+
+if (ENABLE_TESTING AND NOT APPLE)
+ add_test(NAME python_interface_test
+ COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/LICENSE b/cryptominisat5/cryptominisat-5.6.3/python/LICENSE
new file mode 100644
index 000000000..0323ff516
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/LICENSE
@@ -0,0 +1,26 @@
+pycryptominisat (all of the python bindings, including makefile, test, etc)
+License: MIT
+===========================
+Copyright (c) 2013, Ilan Schnell, Continuum Analytics, Inc.
+ 2014, Mate Soos
+ 2017, Pierre Vignet
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+CryptoMiniSat is under an MIT license. Please see LICENSE.txt file
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/MANIFEST.in b/cryptominisat5/cryptominisat-5.6.3/python/MANIFEST.in
new file mode 100644
index 000000000..2072bb9ae
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/MANIFEST.in
@@ -0,0 +1,5 @@
+include LICENSE
+include README.rst
+recursive-include tests *.py
+recursive-include cryptominisat5 *.h
+recursive-include src *.cpp *.h
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/Makefile b/cryptominisat5/cryptominisat-5.6.3/python/Makefile
new file mode 100644
index 000000000..cf4265f11
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/Makefile
@@ -0,0 +1,35 @@
+all: clean compile sdist
+
+clean:
+ @echo Clean Python build dir...
+ python setup.py clean --all
+ @echo Clean Python distribution dir...
+ @-rm -rf dist
+
+compile:
+ @echo Building the library...
+ python setup.py build
+
+test:
+ @echo Test the solver...
+ python setup.py test
+
+sdist:
+ @echo Building the distribution package...
+ python setup.py sdist
+
+install:
+ @echo Install the package...
+ python setup.py install --record files.txt
+
+uninstall: files.txt
+ @echo Uninstalling the package...
+ cat files.txt | xargs rm -rf
+ rm files.txt
+
+test_register:
+ python setup.py register -r https://testpypi.python.org/pypi
+
+test_install:
+ python setup.py sdist upload -r https://testpypi.python.org/pypi
+ pip install -U -i https://testpypi.python.org/pypi pycryptosat
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/README.rst b/cryptominisat5/cryptominisat-5.6.3/python/README.rst
new file mode 100644
index 000000000..dde1395b2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/README.rst
@@ -0,0 +1,116 @@
+===========================================
+pycryptosat: bindings to the CryptoMiniSat SAT solver
+===========================================
+
+This directory provides Python bindings to CryptoMiniSat on the C++ level,
+i.e. when importing pycryptosat, the CryptoMiniSat solver becomes part of the
+Python process itself.
+
+Compiling
+-----
+The pycryptosat python package compiles while compiling CryptoMiniSat. It
+cannotbe compiled on its own, it must be compiled at the same time as
+CryptoMiniSat. You will need the python development libraries in order to
+compile:
+
+```
+apt-get install python-dev
+```
+
+After this, cmake then indicate that pycryptosat will be compiled:
+
+```
+cd cryptominisat
+mkdir build
+cd build
+cmake ..
+[...]
+-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.9", minimum required is "2.7")
+-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython2.7.so (found suitable version "2.7.9", minimum required is "2.7")
+-- PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python2.7
+-- PYTHON_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython2.7.so
+-- PYTHON_INCLUDE_DIR:FILEPATH=/usr/include/python2.7
+-- PYTHONLIBS_VERSION_STRING=2.7.9
+-- OK, found python interpreter, libs and header files
+-- Building python interface
+[...]
+```
+
+It will then generate the pycryptosat library and install it when calling
+`make install`.
+
+Usage
+-----
+
+The ``pycryptosat`` module has one object, ``Solver`` that has two functions
+``solve`` and ``add_clause``.
+
+The funcion ``add_clause()`` takes an iterable list of literals such as
+``[1, 2]`` which represents the truth ``1 or 2 = True``. For example,
+``add_clause([1])`` sets variable ``1`` to ``True``.
+
+The function ``solve()`` solves the system of equations that have been added
+with ``add_clause()``:
+
+ >>> from pycryptosat import Solver
+ >>> s = Solver()
+ >>> s.add_clause([1, 2])
+ >>> sat, solution = s.solve()
+ >>> print sat
+ True
+ >>> print solution
+ (None, True, True)
+
+The return value is a tuple. First part of the tuple indicates whether the
+problem is satisfiable. In this case, it's ``True``, i.e. satisfiable. The second
+part is a tuple contains the solution, preceded by None, so you can index into
+it with the variable number. E.g. ``solution[1]`` returns the value for
+variabe ``1``.
+
+The ``solve()`` method optionally takes an argument ``assumptions`` that
+allows the user to set values to specific variables in the solver in a temporary
+fashion. This means that in case the problem is satisfiable but e.g it's
+unsatisfiable if variable 2 is FALSE, then ``solve([-2])`` will return
+UNSAT. However, a subsequent call to ``solve()`` will still return a solution.
+If instead of an assumption ``add_clause()`` would have been used, subsequent
+``solve()`` calls would have returned unsatisfiable.
+
+``Solver`` takes the following keyword arguments:
+ * ``time_limit``: the time limit (integer)
+ * ``confl_limit``: the propagation limit (integer)
+ * ``verbose``: the verbosity level (integer)
+
+Both ``time_limit`` and ``confl_limit`` set a budget to the solver. The former is based on time elapsed while the former is based on number of conflicts met during search. If the solver runs out of budget, it returns with ``(None, None)``. If both limits are used, the solver will terminate whenever one of the limits are hit (whichever first). Warning: Results from ``time_limit`` may differ from run to run, depending on compute load, etc. Use ``confl_limit`` for more reproducible runs.
+
+Example
+-------
+
+Let us consider the following clauses, represented using
+the DIMACS `cnf <http://en.wikipedia.org/wiki/Conjunctive_normal_form>`_
+format::
+
+ p cnf 5 3
+ 1 -5 4 0
+ -1 5 3 4 0
+ -3 -4 0
+
+Here, we have 5 variables and 3 clauses, the first clause being
+(x\ :sub:`1` or not x\ :sub:`5` or x\ :sub:`4`).
+Note that the variable x\ :sub:`2` is not used in any of the clauses,
+which means that for each solution with x\ :sub:`2` = True, we must
+also have a solution with x\ :sub:`2` = False. In Python, each clause is
+most conveniently represented as a list of integers. Naturally, it makes
+sense to represent each solution also as a list of integers, where the sign
+corresponds to the Boolean value (+ for True and - for False) and the
+absolute value corresponds to i\ :sup:`th` variable::
+
+ >>> import pycryptosat
+ >>> solver = pycryptosat.Solver()
+ >>> solver.add_clause([1, -5, 4])
+ >>> solver.add_clause([-1, 5, 3, 4])
+ >>> solver.add_clause([-3, -4])
+ >>> solver.solve()
+ (True, (None, True, False, False, True, True))
+
+This solution translates to: x\ :sub:`1` = x\ :sub:`4` = x\ :sub:`5` = True,
+x\ :sub:`2` = x\ :sub:`3` = False
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/setup.py.in b/cryptominisat5/cryptominisat-5.6.3/python/setup.py.in
new file mode 100644
index 000000000..f15663b08
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/setup.py.in
@@ -0,0 +1,158 @@
+#
+# CryptoMiniSat
+#
+# Copyright (c) 2009-2017, Mate Soos. All rights reserved.
+# Copyright (c) 2017, Pierre Vignet
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+
+import sys
+import os
+import platform
+from distutils.core import setup, Extension
+from distutils import sysconfig
+from distutils.cmd import Command
+
+__PACKAGE_VERSION__ = "0.2.0"
+__LIBRARY_VERSION__ = "${CMS_FULL_VERSION}"
+os.environ["CC"] = "${CMAKE_C_COMPILER}"
+os.environ["CXX"] = "${CMAKE_CXX_COMPILER}"
+
+cconf = """${PY_C_CONFIG}""".split(" ")
+ldconf = """${PY_LD_CONFIG}""".split(" ")
+is_apple = """${APPLE}"""
+
+def cleanup(dat):
+ ret = []
+ for elem in dat:
+ elem = elem.strip()
+ if elem != "" and not "flto" in elem:
+ ret.append(elem)
+
+# if is_apple != "":
+# for x in ret:
+# if x == "-lpython" or x == "-lframework":
+# x = "-undefined dynamic_lookup"
+
+ return ret
+ # return []
+
+cconf = cleanup(cconf)
+ldconf = cleanup(ldconf)
+# print "Extra C flags from python-config:", cconf
+# print "Extra libraries from python-config:", ldconf
+
+
+def _init_posix(init):
+ """
+ Forces g++ instead of gcc on most systems
+ credits to eric jones (eric@enthought.com) (found at Google Groups)
+ """
+ def wrapper():
+ init()
+
+ config_vars = sysconfig.get_config_vars() # by reference
+ if config_vars["MACHDEP"].startswith("sun"):
+ # Sun needs forced gcc/g++ compilation
+ config_vars['CC'] = 'gcc'
+ config_vars['CXX'] = 'g++'
+
+ config_vars['CFLAGS'] = '-g -W -Wall -Wno-deprecated -std=c++11'
+ config_vars['OPT'] = '-g -W -Wall -Wno-deprecated -std=c++11'
+
+ return wrapper
+
+sysconfig._init_posix = _init_posix(sysconfig._init_posix)
+
+
+class TestCommand(Command):
+ """Call tests with the custom 'python setup.py test' command."""
+
+ user_options = []
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+
+ import os
+ import glob
+ print("our CWD is:", os.getcwd(), "files here: ", glob.glob("*"))
+ sys.path.append(os.getcwd())
+ path2 = os.path.join(os.getcwd(), "..")
+ path2 = os.path.join(path2, "lib")
+ path2 = os.path.normpath(path2)
+ print("path2 is:", path2)
+ sys.path.append(path2)
+ print("our sys.path is", sys.path)
+
+ import tests as tp
+ tp.run()
+
+
+__version__ = '@PROJECT_VERSION@'
+
+# needed because Mac doesn't make use of runtime_library_dirs
+extra_link_args = list(ldconf)
+if platform.system() == 'Darwin':
+ extra_link_args.append('-Wl,-rpath,'+"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+
+modules = dict(
+ name = "pycryptosat",
+ sources = ["${CMAKE_CURRENT_SOURCE_DIR}/src/pycryptosat.cpp"],
+ define_macros = [('LIBRARY_VERSION', '"' + __LIBRARY_VERSION__ + '"')],
+ extra_compile_args = cconf + ['-I${PROJECT_SOURCE_DIR}', '-I${PROJECT_BINARY_DIR}/cmsat5-src'],
+ extra_link_args = extra_link_args,
+ language = "c++",
+ library_dirs=['.', '${PROJECT_BINARY_DIR}/lib'],
+ runtime_library_dirs=['${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}'],
+ libraries = ['cryptominisat5']
+)
+
+setup(
+ name = "pycryptosat",
+ version = __PACKAGE_VERSION__,
+ author = "Mate Soos",
+ author_email = "soos.mate@gmail.com",
+ url = "https://github.com/msoos/cryptominisat",
+ license = "MIT",
+ classifiers = [
+ "Development Status :: 4 - Beta",
+ "Intended Audience :: Developers",
+ "Operating System :: OS Independent",
+ "Programming Language :: C++",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.5",
+ "License :: OSI Approved :: MIT License",
+ "Topic :: Utilities",
+ ],
+ ext_modules = [Extension(**modules)],
+ description = "Bindings to CryptoMiniSat {} (a SAT solver)".\
+ format(__LIBRARY_VERSION__),
+# py_modules = ['pycryptosat'],
+ long_description = open('${CMAKE_CURRENT_SOURCE_DIR}/README.rst').read(),
+ cmdclass={
+ 'test': TestCommand
+ }
+
+)
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/src/pycryptosat.cpp b/cryptominisat5/cryptominisat-5.6.3/python/src/pycryptosat.cpp
new file mode 100644
index 000000000..a88020065
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/src/pycryptosat.cpp
@@ -0,0 +1,985 @@
+/*************
+Python bindings to CryptoMiniSat (http://msoos.org)
+
+Copyright (c) 2013, Ilan Schnell, Continuum Analytics, Inc.
+ 2014, Mate Soos
+ 2017, Pierre Vignet
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+**********************************/
+
+#include <Python.h>
+#include <structmember.h>
+#include <limits>
+#include <cassert>
+#include <cryptominisat5/cryptominisat.h>
+using namespace CMSat;
+
+#define MODULE_NAME "pycryptosat"
+#define MODULE_DOC "CryptoMiniSAT satisfiability solver."
+
+// Compatibility between Python 2 and 3
+#if PY_MAJOR_VERSION >= 3
+#define IS_PY3K
+#endif
+
+#ifdef IS_PY3K
+ #define IS_INT(x) PyLong_Check(x)
+
+ #define MODULE_INIT_FUNC(name) \
+ PyMODINIT_FUNC PyInit_ ## name(void); \
+ PyMODINIT_FUNC PyInit_ ## name(void)
+#else
+ #define IS_INT(x) (PyInt_Check(x) || PyLong_Check(x))
+
+ #define MODULE_INIT_FUNC(name) \
+ static PyObject *PyInit_ ## name(void); \
+ PyMODINIT_FUNC init ## name(void); \
+ PyMODINIT_FUNC init ## name(void) { PyInit_ ## name(); } \
+ static PyObject *PyInit_ ## name(void)
+#endif
+
+// Mask "missing initializer for member" warnings in PyTypeObject
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+// Mask "deprecated conversion from string constant to ‘char*’" warnings in kwlist arrays
+#pragma GCC diagnostic ignored "-Wwrite-strings"
+
+// Support for old and end-of-life Python versions
+#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 5
+ #define PyUnicode_FromString PyString_FromString
+
+ #define PyVarObject_HEAD_INIT(type, size) \
+ PyObject_HEAD_INIT(type) size,
+#endif
+#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 6
+ #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
+#endif
+
+
+typedef struct {
+ PyObject_HEAD
+ /* Type-specific fields go here. */
+ SATSolver* cmsat;
+} Solver;
+
+static const char solver_create_docstring[] = \
+"Solver(verbose=0, time_limit=max_numeric_limits, confl_limit=max_numeric_limits, threads=1)\n\
+Create Solver object.\n\
+\n\
+:param verbose: Verbosity level: 0: nothing printed; 15: very verbose.\n\
+:param time_limit: Propagation limit: abort after this many seconds has elapsed.\n\
+:param confl_limit: Propagation limit: abort after this many conflicts.\n\
+ Default: never abort.\n\
+:param threads: Number of threads to use.\n\
+:type verbose: <int>\n\
+:type time_limit: <double>\n\
+:type confl_limit: <long>\n\
+:type threads: <int>";
+
+static SATSolver* setup_solver(PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {"verbose", "time_limit", "confl_limit", "threads", NULL};
+
+ int verbose = 0;
+ int num_threads = 1;
+ double time_limit = std::numeric_limits<double>::max();
+ long confl_limit = std::numeric_limits<long>::max();
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|idli", kwlist, &verbose, &time_limit, &confl_limit, &num_threads)) {
+ return NULL;
+ }
+ if (verbose < 0) {
+ PyErr_SetString(PyExc_ValueError, "verbosity must be at least 0");
+ return NULL;
+ }
+ if (time_limit < 0) {
+ PyErr_SetString(PyExc_ValueError, "time_limit must be at least 0");
+ return NULL;
+ }
+ if (confl_limit < 0) {
+ PyErr_SetString(PyExc_ValueError, "conflict limit must be at least 0");
+ return NULL;
+ }
+ if (num_threads <= 0) {
+ PyErr_SetString(PyExc_ValueError, "number of threads must be at least 1");
+ return NULL;
+ }
+
+ SATSolver *cmsat = new SATSolver;
+ cmsat->set_max_time(time_limit);
+ cmsat->set_max_confl(confl_limit);
+ cmsat->set_verbosity(verbose);
+ cmsat->set_num_threads(num_threads);
+
+ return cmsat;
+}
+
+static int convert_lit_to_sign_and_var(PyObject* lit, long& var, bool& sign)
+{
+ if (!IS_INT(lit)) {
+ PyErr_SetString(PyExc_TypeError, "integer expected !");
+ return 0;
+ }
+
+ long val = PyLong_AsLong(lit);
+ if (val == 0) {
+ PyErr_SetString(PyExc_ValueError, "non-zero integer expected");
+ return 0;
+ }
+ if (val > std::numeric_limits<int>::max()/2
+ || val < std::numeric_limits<int>::min()/2
+ ) {
+ PyErr_Format(PyExc_ValueError, "integer %ld is too small or too large", val);
+ return 0;
+ }
+
+ sign = (val < 0);
+ var = std::abs(val) - 1;
+
+ return 1;
+}
+
+static int parse_clause(
+ Solver *self
+ , PyObject *clause
+ , std::vector<Lit>& lits
+) {
+ PyObject *iterator = PyObject_GetIter(clause);
+ if (iterator == NULL) {
+ PyErr_SetString(PyExc_TypeError, "iterable object expected");
+ return 0;
+ }
+
+ PyObject *lit;
+ while ((lit = PyIter_Next(iterator)) != NULL) {
+ long var;
+ bool sign;
+ int ret = convert_lit_to_sign_and_var(lit, var, sign);
+ Py_DECREF(lit);
+ if (!ret) {
+ Py_DECREF(iterator);
+ return 0;
+ }
+
+ if (var >= self->cmsat->nVars()) {
+ for(long i = (long)self->cmsat->nVars(); i <= var ; i++) {
+ self->cmsat->new_var();
+ }
+ }
+
+ lits.push_back(Lit(var, sign));
+ }
+ Py_DECREF(iterator);
+ if (PyErr_Occurred()) {
+ return 0;
+ }
+
+ return 1;
+}
+
+static int parse_xor_clause(
+ Solver *self
+ , PyObject *clause
+ , std::vector<uint32_t>& vars
+) {
+ PyObject *iterator = PyObject_GetIter(clause);
+ if (iterator == NULL) {
+ PyErr_SetString(PyExc_TypeError, "iterable object expected");
+ return 0;
+ }
+
+ PyObject *lit;
+ while ((lit = PyIter_Next(iterator)) != NULL) {
+ long var;
+ bool sign;
+ int ret = convert_lit_to_sign_and_var(lit, var, sign);
+ Py_DECREF(lit);
+ if (!ret) {
+ Py_DECREF(iterator);
+ return 0;
+ }
+ if (sign) {
+ PyErr_SetString(PyExc_ValueError, "XOR clause must contiain only positive variables (not inverted literals)");
+ Py_DECREF(iterator);
+ return 0;
+ }
+
+ if (var >= self->cmsat->nVars()) {
+ for(long i = (long)self->cmsat->nVars(); i <= var ; i++) {
+ self->cmsat->new_var();
+ }
+ }
+
+ vars.push_back(var);
+ }
+ Py_DECREF(iterator);
+ if (PyErr_Occurred()) {
+ return 0;
+ }
+
+ return 1;
+}
+
+PyDoc_STRVAR(start_getting_small_clauses_doc,
+"EXPERIMENTAL\n\
+Start getting clauses."
+);
+static PyObject* start_getting_small_clauses(Solver *self, PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {"max_len", "max_glue", NULL};
+
+ unsigned max_len;
+ unsigned max_glue;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "II", kwlist, &max_len, &max_glue)) {
+ return NULL;
+ }
+
+ self->cmsat->start_getting_small_clauses(max_len, max_glue);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyDoc_STRVAR(get_next_small_clause_doc,
+"EXPERIMENTAL\n\
+Start getting clauses."
+);
+static PyObject* get_next_small_clause(Solver *self, PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {NULL};
+ PyObject *max_len;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "", kwlist)) {
+ return NULL;
+ }
+
+ std::vector<Lit> lits;
+ bool ret = self->cmsat->get_next_small_clause(lits);
+ if (!ret) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+
+ PyObject* list = PyList_New(lits.size());
+ for(size_t i = 0; i < lits.size(); i++) {
+ Lit l = lits[i];
+ long ll = l.var()+1;
+ if (l.sign()) {
+ ll *= -1;
+ }
+
+ PyList_SetItem(list, i, PyLong_FromLong(ll));
+ }
+ return list;
+}
+
+
+PyDoc_STRVAR(end_getting_small_clauses_doc,
+"EXPERIMENTAL\n\
+End getting clauses."
+);
+static PyObject* end_getting_small_clauses(Solver *self, PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {NULL};
+ PyObject *max_len;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "", kwlist)) {
+ return NULL;
+ }
+ self->cmsat->end_getting_small_clauses();
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyDoc_STRVAR(add_clause_doc,
+"add_clause(clause)\n\
+Add a clause to the solver.\n\
+\n\
+:param arg1: A clause contains literals (ints)\n\
+:return: None\n\
+:type arg1: <list>\n\
+:rtype: <None>"
+);
+
+static PyObject* add_clause(Solver *self, PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {"clause", NULL};
+ PyObject *clause;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, &clause)) {
+ return NULL;
+ }
+
+ std::vector<Lit> lits;
+ if (!parse_clause(self, clause, lits)) {
+ return 0;
+ }
+ self->cmsat->add_clause(lits);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyDoc_STRVAR(add_clauses_doc,
+"add_clauses(clauses)\n\
+Add iterable of clauses to the solver.\n\
+\n\
+:param arg1: List of clauses. Each clause contains literals (ints)\n\
+:return: None\n\
+:type arg1: <list>\n\
+:rtype: <None>"
+);
+
+static PyObject* add_clauses(Solver *self, PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {"clauses", NULL};
+ PyObject *clauses;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, &clauses)) {
+ return NULL;
+ }
+
+ PyObject *iterator = PyObject_GetIter(clauses);
+ if (iterator == NULL) {
+ PyErr_SetString(PyExc_TypeError, "iterable object expected");
+ return NULL;
+ }
+
+ PyObject *clause;
+ while ((clause = PyIter_Next(iterator)) != NULL) {
+ PyObject *arglist = Py_BuildValue("(O)", clause);
+ PyObject *ret = add_clause(self, arglist, NULL);
+ Py_DECREF(ret);
+
+ /* release reference when done */
+ Py_DECREF(arglist);
+ Py_DECREF(clause);
+ }
+
+ /* release reference when done */
+ Py_DECREF(iterator);
+ if (PyErr_Occurred()) {
+ return NULL;
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject* add_xor_clause(Solver *self, PyObject *args, PyObject *kwds)
+{
+ static char* kwlist[] = {"xor_clause", "rhs", NULL};
+ PyObject *rhs;
+ PyObject *clause;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO", kwlist, &clause, &rhs)) {
+ return NULL;
+ }
+ if (!PyBool_Check(rhs)) {
+ PyErr_SetString(PyExc_TypeError, "rhs must be boolean");
+ return NULL;
+ }
+ bool real_rhs = PyObject_IsTrue(rhs);
+
+ std::vector<uint32_t> vars;
+ if (!parse_xor_clause(self, clause, vars)) {
+ return 0;
+ }
+
+ self->cmsat->add_xor_clause(vars, real_rhs);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject* get_solution(SATSolver *cmsat)
+{
+ // Create tuple with the size of number of variables in model
+ unsigned max_idx = cmsat->nVars();
+ PyObject *tuple = PyTuple_New((Py_ssize_t) max_idx+1);
+ if (tuple == NULL) {
+ PyErr_SetString(PyExc_SystemError, "failed to create a tuple");
+ return NULL;
+ }
+
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(tuple, (Py_ssize_t)0, Py_None);
+
+ PyObject *py_value = NULL;
+ lbool v;
+ for (unsigned i = 0; i < max_idx; i++) {
+ v = cmsat->get_model()[i];
+
+ if (v == l_True) {
+ py_value = Py_True;
+ } else if (v == l_False) {
+ py_value = Py_False;
+ } else if (v == l_Undef) {
+ py_value = Py_None;
+ } else {
+ // v can only be l_False, l_True, l_Undef
+ assert((v == l_False) || (v == l_True) || (v == l_Undef));
+ }
+ Py_INCREF(py_value);
+ PyTuple_SET_ITEM(tuple, (Py_ssize_t)i+1, py_value);
+ }
+ return tuple;
+}
+
+static PyObject* get_raw_solution(SATSolver *cmsat) {
+
+ // Create tuple with the size of number of variables in model
+ unsigned max_idx = cmsat->nVars();
+ PyObject *tuple = PyTuple_New((Py_ssize_t) max_idx);
+ if (tuple == NULL) {
+ PyErr_SetString(PyExc_SystemError, "failed to create a tuple");
+ return NULL;
+ }
+
+ // Add each variable in model to the tuple
+ PyObject *py_value = NULL;
+ int sign;
+ for (long var = 0; var != (long)max_idx; var++) {
+
+ if (cmsat->get_model()[var] != l_Undef) {
+
+ sign = (cmsat->get_model()[var] == l_True) ? 1 : -1;
+
+ #ifdef IS_PY3K
+ py_value = PyLong_FromLong((var + 1) * sign);
+ #else
+ py_value = PyInt_FromLong((var + 1) * sign);
+ #endif
+
+ PyTuple_SET_ITEM(tuple, (Py_ssize_t)var, py_value);
+ }
+ }
+ return tuple;
+}
+
+PyDoc_STRVAR(nb_vars_doc,
+"nb_vars()\n\
+Return the number of literals in the solver.\n\
+\n\
+:return: Number of literals\n\
+:rtype: <int>"
+);
+
+static PyObject* nb_vars(Solver *self)
+{
+ #ifdef IS_PY3K
+ return PyLong_FromLong(self->cmsat->nVars());
+ #else
+ return PyInt_FromLong(self->cmsat->nVars());
+ #endif
+}
+
+/*
+static PyObject* nb_clauses(Solver *self)
+{
+ // Private attribute => need to make a public method
+ return PyInt_FromLong(self->cmsat->data->solvers.size());
+}*/
+
+static int parse_assumption_lits(PyObject* assumptions, SATSolver* cmsat, std::vector<Lit>& assumption_lits)
+{
+ PyObject *iterator = PyObject_GetIter(assumptions);
+ if (iterator == NULL) {
+ PyErr_SetString(PyExc_TypeError, "interable object expected");
+ return 0;
+ }
+
+ PyObject *lit;
+ while ((lit = PyIter_Next(iterator)) != NULL) {
+ long var;
+ bool sign;
+ int ret = convert_lit_to_sign_and_var(lit, var, sign);
+ Py_DECREF(lit);
+ if (!ret) {
+ Py_DECREF(iterator);
+ return 0;
+ }
+
+ if (var >= cmsat->nVars()) {
+ Py_DECREF(iterator);
+ PyErr_Format(PyExc_ValueError, "Variable %ld not used in clauses", var+1);
+ return 0;
+ }
+
+ assumption_lits.push_back(Lit(var, sign));
+ }
+ Py_DECREF(iterator);
+ if (PyErr_Occurred()) {
+ return 0;
+ }
+
+ return 1;
+}
+
+PyDoc_STRVAR(solve_doc,
+"solve(assumptions=None)\n\
+Solve the system of equations that have been added with add_clause();\n\
+\n\
+.. example:: \n\
+ from pycryptosat import Solver\n\
+ >>> s = Solver()\n\
+ >>> s.add_clause([1])\n\
+ >>> s.add_clause([-2])\n\
+ >>> s.add_clause([3])\n\
+ >>> s.add_clause([-1, 2, 3])\n\
+ >>> sat, solution = s.solve()\n\
+ >>> print sat\n\
+ True\n\
+ >>> print solution\n\
+ (None, True, False, True)\n\
+ \n\
+ We can also try to assume any variable values for a single solver run:\n\
+ \n\
+ sat, solution = s.solve([-3])\n\
+ >>> print sat\n\
+ False\n\
+ >>> print solution\n\
+ None\n\
+\n\
+:param arg1: (Optional) Allows the user to set values to specific variables\n\
+ in the solver in a temporary fashion. This means that in case the problem\n\
+ is satisfiable but e.g it's unsatisfiable if variable 2 is FALSE, then\n\
+ solve([-2]) will return UNSAT. However, a subsequent call to solve() will\n\
+ still return a solution.\n\
+:type arg1: <list>\n\
+:return: A tuple. First part of the tuple indicates whether the problem\n\
+ is satisfiable. The second part is a tuple contains the solution,\n\
+ preceded by None, so you can index into it with the variable number.\n\
+ E.g. solution[1] returns the value for variabe 1.\n\
+:rtype: <tuple <tuple>>"
+);
+
+static PyObject* solve(Solver *self, PyObject *args, PyObject *kwds)
+{
+ PyObject* assumptions = NULL;
+ static char* kwlist[] = {"assumptions", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &assumptions)) {
+ return NULL;
+ }
+
+ std::vector<Lit> assumption_lits;
+ if (assumptions) {
+ if (!parse_assumption_lits(assumptions, self->cmsat, assumption_lits)) {
+ return 0;
+ }
+ }
+
+ PyObject *result = PyTuple_New((Py_ssize_t) 2);
+ if (result == NULL) {
+ PyErr_SetString(PyExc_SystemError, "failed to create a tuple");
+ return NULL;
+ }
+
+ lbool res;
+ Py_BEGIN_ALLOW_THREADS /* release GIL */
+ res = self->cmsat->solve(&assumption_lits);
+ Py_END_ALLOW_THREADS
+
+ if (res == l_True) {
+ PyObject* solution = get_solution(self->cmsat);
+ if (!solution) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ Py_INCREF(Py_True);
+
+ PyTuple_SET_ITEM(result, 0, Py_True);
+ PyTuple_SET_ITEM(result, 1, solution);
+
+ } else if (res == l_False) {
+ Py_INCREF(Py_False);
+ Py_INCREF(Py_None);
+
+ PyTuple_SET_ITEM(result, 0, Py_False);
+ PyTuple_SET_ITEM(result, 1, Py_None);
+
+ } else if (res == l_Undef) {
+ Py_INCREF(Py_None);
+ Py_INCREF(Py_None);
+
+ PyTuple_SET_ITEM(result, 0, Py_None);
+ PyTuple_SET_ITEM(result, 1, Py_None);
+ } else {
+ // res can only be l_False, l_True, l_Undef
+ assert((res == l_False) || (res == l_True) || (res == l_Undef));
+ Py_DECREF(result);
+ return PyErr_NewExceptionWithDoc("pycyrptosat.IllegalState", "Error Occured in CyrptoMiniSat", NULL, NULL);
+ }
+
+ return result;
+}
+
+PyDoc_STRVAR(is_satisfiable_doc,
+"is_satisfiable()\n\
+Return satisfiability of the system.\n\
+\n\
+:return: True or False\n\
+:rtype: <boolean>"
+);
+
+static PyObject* is_satisfiable(Solver *self)
+{
+ lbool res;
+ Py_BEGIN_ALLOW_THREADS /* release GIL */
+ res = self->cmsat->solve();
+ Py_END_ALLOW_THREADS
+
+ if (res == l_True) {
+ Py_INCREF(Py_True);
+ return Py_True;
+ } else if (res == l_False) {
+ Py_INCREF(Py_False);
+ return Py_False;
+ } else if (res == l_Undef) {
+ return Py_None;
+ } else {
+ // res can only be l_False, l_True, l_Undef
+ assert((res == l_False) || (res == l_True) || (res == l_Undef));
+ return NULL;
+ }
+}
+
+PyDoc_STRVAR(msolve_selected_doc,
+"msolve_selected(max_nr_of_solutions, var_selected, raw=True)\n\
+Find multiple solutions to your problem, the solver is ran in a loop and each\n\
+previous solution found will be banned.\n\
+\n\
+.. warning:: The loop will run as long as there are solutions.\n\
+ a maximum of loops must be set with 'max_nr_of_solutions' parameter\n\
+\n\
+.. note:: As it is highly suggested in the documentation of cryptominisat,\n\
+ the new clause (banned solutions) contains the variables that are \n\
+ \"important\" or \"main\" to your problem (i.e. \"var_selected\" argument).\n\
+ Variables that were only used to translate the original problem into CNF \n\
+ should not be added.\n\
+ This way, you will not get spurious solutions that don't differ in \n\
+ the main, important variables.\n\
+\n\
+:param arg1: Maximum number of solutions before stop the search\n\
+:param arg2: Variables for which the solver must find different solutions\n\
+:param arg3: (Optional) Format of literals for each solution returned. \n\
+ If set to True, lists of literals will be returned;\n\
+ .. example:: [(1, -2, -3, -4, -5, -6, -7, -8, -9, 10,),]\n\
+ if set to False, tuples of booleans will be returned,\n\
+ with None at the first position.\n\
+ .. example:: [(None, True, False, True,),]\n\
+:type arg1: <int>\n\
+:type arg2: <list>\n\
+:type arg3: <boolean>\n\
+:return: List of solutions (list of tuples of literals)\n\
+:rtype: <list <tuple>>"
+);
+
+static PyObject* msolve_selected(Solver *self, PyObject *args, PyObject *kwds)
+{
+ int max_nr_of_solutions;
+ int raw_solutions_activated = true;
+ PyObject *var_selected;
+
+ static char* kwlist[] = {"max_nr_of_solutions", "var_selected", "raw", NULL};
+
+ #ifdef IS_PY3K
+ // Use 'p' wildcard for the boolean on version 3.3+ of Python
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "iO|p", kwlist,
+ &max_nr_of_solutions,
+ &var_selected,
+ &raw_solutions_activated)) {
+ return NULL;
+ }
+ #else
+ // Use 'i' wildcard for the boolean on version 2.x of Python
+ // O (object) [PyObject *] : Store a Python object (without any conversion) in a C object pointer.
+ // https://docs.python.org/2/c-api/arg.html
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "iO|i", kwlist,
+ &max_nr_of_solutions,
+ &var_selected,
+ &raw_solutions_activated)) {
+ return NULL;
+ }
+ #endif
+
+ std::vector<Lit> var_lits;
+ if (!parse_clause(self, var_selected, var_lits)) {
+ return 0;
+ }
+
+ // Debug
+ // std::cout << "DEBUG :: Solver: Nb max solutions: " << max_nr_of_solutions << std::endl;
+ // std::cout << "DEBUG :: Solver: Raw sols activated: " << ((raw_solutions_activated) ? "True" : "False") << std::endl;
+ // std::cout << "DEBUG :: Solver: Nb literals: " << var_lits.size() << std::endl;
+
+// for (unsigned long i = 0; i < var_lits.size(); i++) {
+// std::cout << "real value: " << var_lits[i]
+// << "; x: " << var_lits[i].toInt()
+// << "; sign: " << var_lits[i].sign()
+// << "; var: " << var_lits[i].var()
+// //<< "; toInt as long " << PyLong_AsLong(var_lits[i])
+// << '\n';
+// }
+
+ PyObject *solutions = PyList_New(0);
+ if (solutions == NULL) {
+ PyErr_SetString(PyExc_SystemError, "failed to create a list");
+ return NULL;
+ }
+
+ int current_nr_of_solutions = 0;
+ lbool res = l_True;
+ std::vector<Lit>::iterator it;
+ PyObject* solution = NULL;
+ while((current_nr_of_solutions < max_nr_of_solutions) && (res == l_True)) {
+
+ Py_BEGIN_ALLOW_THREADS /* release GIL */
+ res = self->cmsat->solve();
+ Py_END_ALLOW_THREADS
+
+ current_nr_of_solutions++;
+
+ // std::cout << "DEBUG :: Solver: Solution number: " << current_nr_of_solutions
+ // << "; Satisfiable: " << ((res == l_True) ? "True" : "False") << std::endl;
+
+ if(res == l_True) {
+
+ // Memorize the solution
+ if (!raw_solutions_activated) {
+ // Solution in v5 format
+ solution = get_solution(self->cmsat);
+ } else {
+ // Solution in v2.9 format
+ solution = get_raw_solution(self->cmsat);
+ }
+
+ if (!solution) {
+ PyErr_SetString(PyExc_SystemError, "no solution");
+ Py_DECREF(solutions);
+ return NULL;
+ }
+ // Add solution
+ PyList_Append(solutions, solution);
+ Py_DECREF(solution);
+
+ // Prepare next statement
+ // Ban previous solution
+ if (current_nr_of_solutions < max_nr_of_solutions) {
+
+ std::vector<Lit> ban_solution;
+ const std::vector<lbool> model = self->cmsat->get_model();
+
+ // Iterate on var_selected (instead of iterate on all vars in solver)
+ for (unsigned long i = 0; i < var_lits.size(); i++) {
+
+ // If the current variable is > 0 (false)
+ // PS: internal value of any literal is equal to i;
+ // human readable value is i+1 (begins with 1 instead of 0)
+ if (var_lits[i].sign() == false) {
+
+ // The current value of the variable must belong to the solver variables
+ assert(var_lits[i].var() <= (uint32_t)self->cmsat->nVars());
+
+ // std::cout << "human readable lit: " << var_lits[i] << "; lit sign: " << ((var_lits[i].sign() == 0) ? "false" : "true") << std::endl;
+ // std::cout << "lit value: " << var_lits[i].var() << "; model status: " << model[var_lits[i].var()] << std::endl;
+
+ // Get the corresponding variable in the model, whatever its sign
+ // Add it to the futur banned clause
+ ban_solution.push_back(
+ Lit(var_lits[i].var(), (model[var_lits[i].var()] == l_True) ? true : false)
+ );
+ }
+ }
+
+ // Ban current solution for the next run
+ self->cmsat->add_clause(ban_solution);
+
+ //for (unsigned long i = 0; i < ban_solution.size(); i++) {
+ // std::cout << ban_solution[i] << ';';
+ //}
+ //std::cout << std::endl;
+ }
+ } else if (res == l_False) {
+ // std::cout << "DEBUG :: Solver: No more solution" << std::endl;
+ } else if (res == l_Undef) {
+ Py_DECREF(solutions);
+ PyErr_SetString(PyExc_SystemError, "Nothing to do => sol undef");
+ return NULL;
+ } else {
+ // res can only be l_False, l_True, l_Undef
+ assert((res == l_False) || (res == l_True) || (res == l_Undef));
+ Py_DECREF(solutions);
+ return NULL;
+ }
+ }
+ // Return list of all solutions
+ return solutions;
+}
+
+/*************************** Method definitions *************************/
+
+static PyMethodDef module_methods[] = {
+ {NULL, NULL, 0, NULL} /* Sentinel - marks the end of this structure */
+};
+
+static PyMethodDef Solver_methods[] = {
+ {"solve", (PyCFunction) solve, METH_VARARGS | METH_KEYWORDS, solve_doc},
+ {"add_clause",(PyCFunction) add_clause, METH_VARARGS | METH_KEYWORDS, add_clause_doc},
+ {"add_clauses", (PyCFunction) add_clauses, METH_VARARGS | METH_KEYWORDS, add_clauses_doc},
+ {"add_xor_clause",(PyCFunction) add_xor_clause, METH_VARARGS | METH_KEYWORDS, "adds an XOR clause to the system"},
+ {"nb_vars", (PyCFunction) nb_vars, METH_VARARGS | METH_KEYWORDS, nb_vars_doc},
+ //{"nb_clauses", (PyCFunction) nb_clauses, METH_VARARGS | METH_KEYWORDS, "returns number of clauses"},
+ {"msolve_selected", (PyCFunction) msolve_selected, METH_VARARGS | METH_KEYWORDS, msolve_selected_doc},
+ {"is_satisfiable", (PyCFunction) is_satisfiable, METH_VARARGS | METH_KEYWORDS, is_satisfiable_doc},
+
+ {"start_getting_small_clauses", (PyCFunction) start_getting_small_clauses, METH_VARARGS | METH_KEYWORDS, start_getting_small_clauses_doc},
+ {"get_next_small_clause", (PyCFunction) get_next_small_clause, METH_VARARGS | METH_KEYWORDS, get_next_small_clause_doc},
+ {"end_getting_small_clauses", (PyCFunction) end_getting_small_clauses, METH_VARARGS | METH_KEYWORDS, end_getting_small_clauses_doc},
+ {NULL, NULL} /* sentinel - marks the end of this structure */
+};
+
+static void
+Solver_dealloc(Solver* self)
+{
+ delete self->cmsat;
+ Py_TYPE(self)->tp_free ((PyObject*) self);
+}
+
+static PyObject *
+Solver_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ Solver *self;
+
+ self = (Solver *)type->tp_alloc(type, 0);
+ if (self != NULL) {
+ self->cmsat = setup_solver(args, kwds);
+ if (self->cmsat == NULL) {
+ Py_DECREF(self);
+ return NULL;
+ }
+ }
+ return (PyObject *)self;
+}
+
+static int
+Solver_init(Solver *self, PyObject *args, PyObject *kwds)
+{
+ self->cmsat = setup_solver(args, kwds);
+ if (!self->cmsat) {
+ return -1;
+ }
+ return 0;
+}
+
+static PyMemberDef Solver_members[] = {
+ /*{"first", T_OBJECT_EX, offsetof(Noddy, first), 0,
+ "first name"},
+ {"last", T_OBJECT_EX, offsetof(Noddy, last), 0,
+ "last name"},
+ {"number", T_INT, offsetof(Noddy, number), 0,
+ "noddy number"},*/
+ {NULL} /* Sentinel */
+};
+
+static PyTypeObject pycryptosat_SolverType = {
+ PyVarObject_HEAD_INIT(NULL, 0) /*ob_size*/
+ "pycryptosat.Solver", /*tp_name*/
+ sizeof(Solver), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ (destructor)Solver_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_compare*/
+ 0, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash */
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
+ solver_create_docstring, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Solver_methods, /* tp_methods */
+ Solver_members, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)Solver_init, /* tp_init */
+ 0, /* tp_alloc */
+ Solver_new, /* tp_new */
+};
+
+MODULE_INIT_FUNC(pycryptosat)
+{
+ PyObject* m;
+
+ pycryptosat_SolverType.tp_new = PyType_GenericNew;
+ if (PyType_Ready(&pycryptosat_SolverType) < 0) {
+ // Return NULL on Python3 and on Python2 with MODULE_INIT_FUNC macro
+ // In pure Python2: return nothing.
+ return NULL;
+ }
+
+ #ifdef IS_PY3K
+ static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT, /* m_base */
+ MODULE_NAME, /* m_name */
+ MODULE_DOC, /* m_doc */
+ -1, /* m_size */
+ module_methods, /* m_methods */
+ NULL, /* m_reload */
+ NULL, /* m_traverse */
+ NULL, /* m_clear */
+ NULL, /* m_free */
+ };
+
+ m = PyModule_Create(&moduledef);
+ #else
+ m = Py_InitModule3(MODULE_NAME, module_methods, MODULE_DOC);
+ #endif
+
+ // Return NULL on Python3 and on Python2 with MODULE_INIT_FUNC macro
+ // In pure Python2: return nothing.
+ if (!m) {
+ Py_XDECREF(m);
+ return NULL;
+ }
+
+ Py_INCREF(&pycryptosat_SolverType);
+ PyModule_AddObject(m, "Solver", (PyObject *)&pycryptosat_SolverType);
+ PyModule_AddObject(m, "__version__", PyUnicode_FromString(LIBRARY_VERSION));
+
+ if (PyErr_Occurred())
+ {
+ PyErr_SetString(PyExc_ImportError, "pycryptosat: initialisation failed");
+ Py_DECREF(m);
+ m = NULL;
+ }
+ return m;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/tests/__init__.py b/cryptominisat5/cryptominisat-5.6.3/python/tests/__init__.py
new file mode 100644
index 000000000..a46f08c73
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/tests/__init__.py
@@ -0,0 +1 @@
+from .test_pycryptosat import *
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/tests/test.cnf b/cryptominisat5/cryptominisat-5.6.3/python/tests/test.cnf
new file mode 100644
index 000000000..a15ad9087
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/tests/test.cnf
@@ -0,0 +1,928 @@
+c generated by FuzzSAT
+p cnf 281 926
+2 -3 -4 0
+-2 3 -4 0
+2 3 4 0
+-2 -3 4 0
+5 -1 0
+5 4 0
+1 -4 -5 0
+9 7 0
+9 -8 0
+-7 8 -9 0
+10 -6 0
+10 -9 0
+6 9 -10 0
+5 -10 -11 0
+-5 10 -11 0
+5 10 11 0
+-5 -10 11 0
+13 10 0
+13 -12 0
+-10 12 -13 0
+15 -16 -17 0
+-15 16 -17 0
+15 16 17 0
+-15 -16 17 0
+-14 -17 -18 0
+14 17 -18 0
+-14 17 18 0
+14 -17 18 0
+-18 -1 -19 0
+18 1 -19 0
+-18 1 19 0
+18 -1 19 0
+21 19 0
+21 -20 0
+-19 20 -21 0
+24 -22 0
+24 23 0
+22 -23 -24 0
+25 21 0
+25 24 0
+-21 -24 -25 0
+26 -3 -27 0
+-26 3 -27 0
+26 3 27 0
+-26 -3 27 0
+28 25 0
+28 -27 0
+-25 27 -28 0
+29 3 0
+29 -27 0
+-3 27 -29 0
+-30 12 0
+-30 -15 0
+-12 15 30 0
+-32 -30 0
+-32 -31 0
+30 31 32 0
+-29 -32 -33 0
+29 32 -33 0
+-29 32 33 0
+29 -32 33 0
+35 34 0
+35 9 0
+-34 -9 -35 0
+-23 -1 -36 0
+23 1 -36 0
+-23 1 36 0
+23 -1 36 0
+-35 -36 -37 0
+35 36 -37 0
+-35 36 37 0
+35 -36 37 0
+38 -33 0
+38 -37 0
+33 37 -38 0
+39 -28 0
+39 38 0
+28 -38 -39 0
+40 41 -42 0
+-40 -41 -42 0
+40 -41 42 0
+-40 41 42 0
+42 24 -43 0
+-42 -24 -43 0
+42 -24 43 0
+-42 24 43 0
+-39 -43 -44 0
+39 43 -44 0
+-39 43 44 0
+39 -43 44 0
+-13 -44 -45 0
+13 44 -45 0
+-13 44 45 0
+13 -44 45 0
+46 -6 -47 0
+-46 6 -47 0
+46 6 47 0
+-46 -6 47 0
+48 34 0
+48 47 0
+-34 -47 -48 0
+-50 41 0
+-50 -2 0
+-41 2 50 0
+26 -50 -51 0
+-26 50 -51 0
+26 50 51 0
+-26 -50 51 0
+-52 15 0
+-52 7 0
+-15 -7 52 0
+-53 -51 0
+-53 52 0
+51 -52 53 0
+49 -53 -54 0
+-49 53 -54 0
+49 53 54 0
+-49 -53 54 0
+55 -50 0
+55 -20 0
+50 20 -55 0
+-56 -14 0
+-56 55 0
+14 -55 56 0
+54 56 -57 0
+-54 -56 -57 0
+54 -56 57 0
+-54 56 57 0
+58 48 0
+58 57 0
+-48 -57 -58 0
+59 45 0
+59 58 0
+-45 -58 -59 0
+11 59 -60 0
+-11 -59 -60 0
+11 -59 60 0
+-11 59 60 0
+61 25 0
+61 53 0
+-25 -53 -61 0
+-63 -35 0
+-63 3 0
+35 -3 63 0
+-62 63 -64 0
+62 -63 -64 0
+-62 -63 64 0
+62 63 64 0
+64 -52 -65 0
+-64 52 -65 0
+64 52 65 0
+-64 -52 65 0
+67 -66 0
+67 -7 0
+66 7 -67 0
+68 26 0
+68 -23 0
+-26 23 -68 0
+70 68 0
+70 -69 0
+-68 69 -70 0
+-71 70 0
+-71 19 0
+-70 -19 71 0
+-46 62 -72 0
+46 -62 -72 0
+-46 -62 72 0
+46 62 72 0
+72 -12 -73 0
+-72 12 -73 0
+72 12 73 0
+-72 -12 73 0
+74 -71 0
+74 -73 0
+71 73 -74 0
+67 -74 -75 0
+-67 74 -75 0
+67 74 75 0
+-67 -74 75 0
+76 66 0
+76 -69 0
+-66 69 -76 0
+78 41 0
+78 -77 0
+-41 77 -78 0
+79 76 0
+79 78 0
+-76 -78 -79 0
+-80 75 0
+-80 -79 0
+-75 79 80 0
+-65 80 -81 0
+65 -80 -81 0
+-65 -80 81 0
+65 80 81 0
+82 -73 0
+82 -41 0
+73 41 -82 0
+83 -81 0
+83 82 0
+81 -82 -83 0
+61 83 -84 0
+-61 -83 -84 0
+61 -83 84 0
+-61 83 84 0
+-60 84 -85 0
+60 -84 -85 0
+-60 -84 85 0
+60 84 85 0
+86 46 0
+86 3 0
+-46 -3 -86 0
+-87 -26 0
+-87 -86 0
+26 86 87 0
+77 -87 -88 0
+-77 87 -88 0
+77 87 88 0
+-77 -87 88 0
+-90 20 0
+-90 -89 0
+-20 89 90 0
+1 -90 -91 0
+-1 90 -91 0
+1 90 91 0
+-1 -90 91 0
+-91 34 -92 0
+91 -34 -92 0
+-91 -34 92 0
+91 34 92 0
+93 -88 0
+93 92 0
+88 -92 -93 0
+-4 93 -94 0
+4 -93 -94 0
+-4 -93 94 0
+4 93 94 0
+95 -49 0
+95 -62 0
+49 62 -95 0
+-97 -49 0
+-97 -96 0
+49 96 97 0
+98 -95 0
+98 97 0
+95 -97 -98 0
+94 98 -99 0
+-94 -98 -99 0
+94 -98 99 0
+-94 98 99 0
+-100 -2 0
+-100 9 0
+2 -9 100 0
+-101 17 0
+-101 -15 0
+-17 15 101 0
+102 -101 0
+102 26 0
+101 -26 -102 0
+-100 102 -103 0
+100 -102 -103 0
+-100 -102 103 0
+100 102 103 0
+104 16 0
+104 1 0
+-16 -1 -104 0
+15 -14 -105 0
+-15 14 -105 0
+15 14 105 0
+-15 -14 105 0
+-104 105 -106 0
+104 -105 -106 0
+-104 -105 106 0
+104 105 106 0
+-107 -106 0
+-107 20 0
+106 -20 107 0
+108 -103 0
+108 -107 0
+103 107 -108 0
+-99 108 -109 0
+99 -108 -109 0
+-99 -108 109 0
+99 108 109 0
+-8 -46 -110 0
+8 46 -110 0
+-8 46 110 0
+8 -46 110 0
+111 31 0
+111 -110 0
+-31 110 -111 0
+-112 52 0
+-112 -111 0
+-52 111 112 0
+-112 71 -113 0
+112 -71 -113 0
+-112 -71 113 0
+112 71 113 0
+114 106 0
+114 -34 0
+-106 34 -114 0
+114 -105 -115 0
+-114 105 -115 0
+114 105 115 0
+-114 -105 115 0
+-116 113 0
+-116 115 0
+-113 -115 116 0
+-117 69 0
+-117 -20 0
+-69 20 117 0
+-118 -117 0
+-118 104 0
+117 -104 118 0
+116 118 -119 0
+-116 -118 -119 0
+116 -118 119 0
+-116 118 119 0
+120 89 0
+120 -24 0
+-89 24 -120 0
+-69 -102 -121 0
+69 102 -121 0
+-69 102 121 0
+69 -102 121 0
+-122 120 0
+-122 -121 0
+-120 121 122 0
+123 -55 0
+123 10 0
+55 -10 -123 0
+-124 -122 0
+-124 123 0
+122 -123 124 0
+-125 -119 0
+-125 124 0
+119 -124 125 0
+-26 63 -126 0
+26 -63 -126 0
+-26 -63 126 0
+26 63 126 0
+126 19 -127 0
+-126 -19 -127 0
+126 -19 127 0
+-126 19 127 0
+127 4 -128 0
+-127 -4 -128 0
+127 -4 128 0
+-127 4 128 0
+-29 129 -130 0
+29 -129 -130 0
+-29 -129 130 0
+29 129 130 0
+131 -128 0
+131 -130 0
+128 130 -131 0
+131 -20 -132 0
+-131 20 -132 0
+131 20 132 0
+-131 -20 132 0
+-133 125 0
+-133 132 0
+-125 -132 133 0
+134 -15 0
+134 -62 0
+15 62 -134 0
+-62 -134 -135 0
+62 134 -135 0
+-62 134 135 0
+62 -134 135 0
+42 112 -136 0
+-42 -112 -136 0
+42 -112 136 0
+-42 112 136 0
+137 135 0
+137 136 0
+-135 -136 -137 0
+-138 133 0
+-138 137 0
+-133 -137 138 0
+-139 -109 0
+-139 -138 0
+109 138 139 0
+-140 -85 0
+-140 139 0
+85 -139 140 0
+-42 -35 -141 0
+42 35 -141 0
+-42 35 141 0
+42 -35 141 0
+-63 -129 -142 0
+63 129 -142 0
+-63 129 142 0
+63 -129 142 0
+-143 142 0
+-143 -20 0
+-142 20 143 0
+144 68 0
+144 6 0
+-68 -6 -144 0
+-143 144 -145 0
+143 -144 -145 0
+-143 -144 145 0
+143 144 145 0
+146 141 0
+146 -145 0
+-141 145 -146 0
+-147 -9 0
+-147 -96 0
+9 96 147 0
+-148 147 0
+-148 -40 0
+-147 40 148 0
+-149 -34 0
+-149 -50 0
+34 50 149 0
+-150 -22 0
+-150 -34 0
+22 34 150 0
+-151 -46 0
+-151 50 0
+46 -50 151 0
+-152 150 0
+-152 151 0
+-150 -151 152 0
+153 149 0
+153 -152 0
+-149 152 -153 0
+-148 153 -154 0
+148 -153 -154 0
+-148 -153 154 0
+148 153 154 0
+155 -18 0
+155 37 0
+18 -37 -155 0
+27 96 -156 0
+-27 -96 -156 0
+27 -96 156 0
+-27 96 156 0
+-157 156 0
+-157 63 0
+-156 -63 157 0
+158 -155 0
+158 157 0
+155 -157 -158 0
+-154 158 -159 0
+154 -158 -159 0
+-154 -158 159 0
+154 158 159 0
+130 -160 0
+-130 -160 0
+-161 160 0
+-161 -8 0
+-160 8 161 0
+-162 4 0
+-162 129 0
+-4 -129 162 0
+-163 162 0
+-163 -93 0
+-162 93 163 0
+-163 104 -164 0
+163 -104 -164 0
+-163 -104 164 0
+163 104 164 0
+-161 -164 -165 0
+161 164 -165 0
+-161 164 165 0
+161 -164 165 0
+-166 -36 0
+-166 53 0
+36 -53 166 0
+167 -166 0
+167 -104 0
+166 104 -167 0
+168 69 0
+168 36 0
+-69 -36 -168 0
+169 167 0
+169 -168 0
+-167 168 -169 0
+170 -165 0
+170 -169 0
+165 169 -170 0
+-159 -170 -171 0
+159 170 -171 0
+-159 170 171 0
+159 -170 171 0
+-172 146 0
+-172 171 0
+-146 -171 172 0
+-26 1 -173 0
+26 -1 -173 0
+-26 -1 173 0
+26 1 173 0
+-63 -26 -174 0
+63 26 -174 0
+-63 26 174 0
+63 -26 174 0
+-175 -173 0
+-175 174 0
+173 -174 175 0
+-176 -113 0
+-176 -34 0
+113 34 176 0
+-177 175 0
+-177 -176 0
+-175 176 177 0
+178 -106 0
+178 77 0
+106 -77 -178 0
+179 -88 0
+179 178 0
+88 -178 -179 0
+-180 88 0
+-180 -179 0
+-88 179 180 0
+-181 -180 0
+-181 53 0
+180 -53 181 0
+-96 37 -182 0
+96 -37 -182 0
+-96 -37 182 0
+96 37 182 0
+2 182 -183 0
+-2 -182 -183 0
+2 -182 183 0
+-2 182 183 0
+-183 87 -184 0
+183 -87 -184 0
+-183 -87 184 0
+183 87 184 0
+-185 184 0
+-185 41 0
+-184 -41 185 0
+181 185 -186 0
+-181 -185 -186 0
+181 -185 186 0
+-181 185 186 0
+188 -52 0
+188 -187 0
+52 187 -188 0
+-189 -64 0
+-189 -188 0
+64 188 189 0
+-190 186 0
+-190 -189 0
+-186 189 190 0
+-92 168 -191 0
+92 -168 -191 0
+-92 -168 191 0
+92 168 191 0
+-192 -89 0
+-192 62 0
+89 -62 192 0
+193 -191 0
+193 -192 0
+191 192 -193 0
+-190 -193 -194 0
+190 193 -194 0
+-190 193 194 0
+190 -193 194 0
+-177 194 -195 0
+177 -194 -195 0
+-177 -194 195 0
+177 194 195 0
+-196 -172 0
+-196 195 0
+172 -195 196 0
+-197 52 0
+-197 168 0
+-52 -168 197 0
+198 -105 0
+198 -46 0
+105 46 -198 0
+-199 -77 0
+-199 76 0
+77 -76 199 0
+-200 -198 0
+-200 -199 0
+198 199 200 0
+-201 27 0
+-201 -62 0
+-27 62 201 0
+-202 201 0
+-202 -68 0
+-201 68 202 0
+-3 8 -203 0
+3 -8 -203 0
+-3 -8 203 0
+3 8 203 0
+-203 91 -204 0
+203 -91 -204 0
+-203 -91 204 0
+203 91 204 0
+205 -204 0
+205 110 0
+204 -110 -205 0
+202 205 -206 0
+-202 -205 -206 0
+202 -205 206 0
+-202 205 206 0
+2 46 -207 0
+-2 -46 -207 0
+2 -46 207 0
+-2 46 207 0
+208 -180 0
+208 207 0
+180 -207 -208 0
+-209 -206 0
+-209 208 0
+206 -208 209 0
+-210 66 0
+-210 -127 0
+-66 127 210 0
+-18 88 -211 0
+18 -88 -211 0
+-18 -88 211 0
+18 88 211 0
+-212 211 0
+-212 -55 0
+-211 55 212 0
+210 -212 -213 0
+-210 212 -213 0
+210 212 213 0
+-210 -212 213 0
+-214 -209 0
+-214 -213 0
+209 213 214 0
+-215 -200 0
+-215 214 0
+200 -214 215 0
+-197 -215 -216 0
+197 215 -216 0
+-197 215 216 0
+197 -215 216 0
+-217 -64 0
+-217 -162 0
+64 162 217 0
+-218 217 0
+-218 -10 0
+-217 10 218 0
+96 -179 -219 0
+-96 179 -219 0
+96 179 219 0
+-96 -179 219 0
+220 16 0
+220 -15 0
+-16 15 -220 0
+-221 -178 0
+-221 -4 0
+178 4 221 0
+222 -220 0
+222 -221 0
+220 221 -222 0
+-223 -219 0
+-223 222 0
+219 -222 223 0
+224 218 0
+224 223 0
+-218 -223 -224 0
+225 -183 0
+225 -22 0
+183 22 -225 0
+147 -225 -226 0
+-147 225 -226 0
+147 225 226 0
+-147 -225 226 0
+-227 226 0
+-227 130 0
+-226 -130 227 0
+-187 180 -228 0
+187 -180 -228 0
+-187 -180 228 0
+187 180 228 0
+112 63 -229 0
+-112 -63 -229 0
+112 -63 229 0
+-112 63 229 0
+-228 229 -230 0
+228 -229 -230 0
+-228 -229 230 0
+228 229 230 0
+-231 227 0
+-231 230 0
+-227 -230 231 0
+-232 224 0
+-232 231 0
+-224 -231 232 0
+-233 216 0
+-233 232 0
+-216 -232 233 0
+234 -142 0
+234 -27 0
+142 27 -234 0
+235 -33 0
+235 25 0
+33 -25 -235 0
+-234 -235 -236 0
+234 235 -236 0
+-234 235 236 0
+234 -235 236 0
+236 -62 -237 0
+-236 62 -237 0
+236 62 237 0
+-236 -62 237 0
+238 -147 0
+238 -78 0
+147 78 -238 0
+239 -237 0
+239 -238 0
+237 238 -239 0
+241 -33 0
+241 240 0
+33 -240 -241 0
+242 22 0
+242 126 0
+-22 -126 -242 0
+-243 241 0
+-243 242 0
+-241 -242 243 0
+-244 29 0
+-244 42 0
+-29 -42 244 0
+-245 -90 0
+-245 244 0
+90 -244 245 0
+-246 -22 0
+-246 -86 0
+22 86 246 0
+247 246 0
+247 -23 0
+-246 23 -247 0
+-248 -245 0
+-248 247 0
+245 -247 248 0
+-249 -188 0
+-249 106 0
+188 -106 249 0
+182 183 -250 0
+-182 -183 -250 0
+182 -183 250 0
+-182 183 250 0
+251 -86 0
+251 178 0
+86 -178 -251 0
+250 -251 -252 0
+-250 251 -252 0
+250 251 252 0
+-250 -251 252 0
+-249 -252 -253 0
+249 252 -253 0
+-249 252 253 0
+249 -252 253 0
+254 -51 0
+254 55 0
+51 -55 -254 0
+255 254 0
+255 -102 0
+-254 102 -255 0
+256 -253 0
+256 255 0
+253 -255 -256 0
+257 -248 0
+257 -256 0
+248 256 -257 0
+-258 2 0
+-258 4 0
+-2 -4 258 0
+-259 -258 0
+-259 -6 0
+258 6 259 0
+261 -73 0
+261 260 0
+73 -260 -261 0
+-262 259 0
+-262 -261 0
+-259 261 262 0
+-263 -2 0
+-263 142 0
+2 -142 263 0
+263 191 -264 0
+-263 -191 -264 0
+263 -191 264 0
+-263 191 264 0
+265 31 0
+265 -263 0
+-31 263 -265 0
+113 -265 -266 0
+-113 265 -266 0
+113 265 266 0
+-113 -265 266 0
+263 -266 -267 0
+-263 266 -267 0
+263 266 267 0
+-263 -266 267 0
+264 267 -268 0
+-264 -267 -268 0
+264 -267 268 0
+-264 267 268 0
+-269 20 0
+-269 -26 0
+-20 26 269 0
+-102 269 -270 0
+102 -269 -270 0
+-102 -269 270 0
+102 269 270 0
+-271 -30 0
+-271 -270 0
+30 270 271 0
+272 -89 0
+272 160 0
+89 -160 -272 0
+-273 271 0
+-273 -272 0
+-271 272 273 0
+274 -268 0
+274 -273 0
+268 273 -274 0
+275 -262 0
+275 274 0
+262 -274 -275 0
+-257 275 -276 0
+257 -275 -276 0
+-257 -275 276 0
+257 275 276 0
+277 -243 0
+277 -276 0
+243 276 -277 0
+278 -239 0
+278 277 0
+239 -277 -278 0
+279 233 0
+279 278 0
+-233 -278 -279 0
+280 -196 0
+280 279 0
+196 -279 -280 0
+-140 -280 -281 0
+140 280 -281 0
+-140 280 281 0
+140 -280 281 0
+184 177 -155 192 0
+34 -53 280 0
+234 114 0
+248 -114 82 140 0
+16 221 -52 -253 0
+-122 83 0
+171 51 -229 189 0
+186 -5 -104 0
+-243 -50 252 0
+-39 -236 -80 0
+-257 42 -96 0
+109 -77 141 0
+-250 117 -131 -207 57 0
+-12 160 -113 -137 -76 234 0
+98 -217 -110 -254 58 281 0
+64 -243 18 -90 161 0
+215 85 -45 0
+65 261 -53 0
+-166 -183 0
+-168 90 -277 151 121 -144 0
+-51 170 -185 -252 -180 0
+-149 184 27 -228 0
+-70 264 226 -169 0
+179 -3 0
+-254 59 -156 255 0
+69 -86 270 -42 0
+-91 140 0
+-3 184 -85 192 0
+155 46 -11 -115 0
+153 -147 0
+-195 -281 -127 -191 197 141 0
+180 32 251 -21 0
+111 85 149 -105 0
+-2 -224 -14 159 84 0
+-53 -192 0
+-162 128 -188 -27 136 0
+-128 -104 -87 2 -109 0
+46 181 188 249 105 0
+-97 269 -103 0
+-243 197 0
+232 244 -28 265 102 0
+-79 195 -117 190 0
+276 -6 -100 -237 98 29 0
+65 3 0
+249 140 63 -181 4 197 0
+-64 -55 -244 0
+99 -165 -100 142 -84 0
+-92 112 278 -71 0
+197 -111 26 -216 215 -110 0
+-54 273 243 0
+104 -260 -269 0
+232 -111 -21 0
+26 -181 51 -56 -3 0
+-221 241 142 -184 0
+-9 241 256 -243 0
+42 -246 -164 0
+-169 -23 0
+64 -21 -107 -9 112 245 0
+109 -191 -33 0
+94 -66 137 119 0
+184 -153 -167 -118 214 0
+-47 -144 25 218 0
+-160 191 247 0
+-13 165 -79 -248 -86 0
+-92 244 0
+102 -142 -122 0
+123 -138 0
+244 -110 -171 178 -21 0
+-140 53 0
+-168 -254 0
+166 -56 181 280 177 0
+103 152 0
+243 92 214 158 164 122 0
+65 -187 208 0
+-81 38 176 0
+204 -246 -233 90 273 0
+-70 -177 -10 0
+141 -140 241 -34 0
+195 -52 233 30 10 -185 0
+-120 13 -248 80 117 -232 0
+33 -152 -133 140 0
+209 -88 -221 148 -147 197 0
+-105 87 0
+211 -242 -17 -25 -238 127 0
+281 0
diff --git a/cryptominisat5/cryptominisat-5.6.3/python/tests/test_pycryptosat.py b/cryptominisat5/cryptominisat-5.6.3/python/tests/test_pycryptosat.py
new file mode 100644
index 000000000..703d46ec6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/python/tests/test_pycryptosat.py
@@ -0,0 +1,256 @@
+# -*- coding: utf-8 -*-
+#
+# CryptoMiniSat
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+from __future__ import unicode_literals
+from __future__ import print_function
+import sys
+import unittest
+
+
+import pycryptosat
+from pycryptosat import Solver
+
+
+def check_clause(clause, solution):
+ for lit in clause:
+ var = abs(lit)
+ if lit < 0:
+ inverted = True
+ else:
+ inverted = False
+
+ if solution[var] != inverted:
+ return True
+
+
+def check_solution(clauses, solution):
+ for clause in clauses:
+ if check_clause(clause, solution) is False:
+ return False
+
+ return True
+
+# -------------------------- test clauses --------------------------------
+
+# p cnf 5 3
+# 1 -5 4 0
+# -1 5 3 4 0
+# -3 -4 0
+clauses1 = [[1, -5, 4], [-1, 5, 3, 4], [-3, -4]]
+
+# p cnf 2 2
+# -1 0
+# 1 0
+clauses2 = [[-1], [1]]
+
+# p cnf 2 3
+# -1 2 0
+# -1 -2 0
+# 1 -2 0
+clauses3 = [[-1, 2], [-1, -2], [1, -2]]
+
+# -------------------------- actual unit tests ---------------------------
+
+
+class TestXor(unittest.TestCase):
+
+ def setUp(self):
+ self.solver = Solver(threads=2)
+
+ def test_wrong_args(self):
+ self.assertRaises(TypeError, self.solver.add_xor_clause, [1, 2])
+ self.assertRaises(ValueError, self.solver.add_xor_clause, [1, 0], True)
+ self.assertRaises(
+ ValueError, self.solver.add_xor_clause, [-1, 2], True)
+
+ def test_binary(self):
+ self.solver.add_xor_clause([1, 2], False)
+ res, solution = self.solver.solve([1])
+ self.assertEqual(res, True)
+ self.assertEqual(solution, (None, True, True))
+
+ def test_unit(self):
+ self.solver.add_xor_clause([1], False)
+ res, solution = self.solver.solve()
+ self.assertEqual(res, True)
+ self.assertEqual(solution, (None, False))
+
+ def test_unit2(self):
+ self.solver.add_xor_clause([1], True)
+ res, solution = self.solver.solve()
+ self.assertEqual(res, True)
+ self.assertEqual(solution, (None, True))
+
+ def test_3_long(self):
+ self.solver.add_xor_clause([1, 2, 3], False)
+ res, solution = self.solver.solve([1, 2])
+ self.assertEqual(res, True)
+ # self.assertEqual(solution, (None, True, True, False))
+
+ def test_3_long2(self):
+ self.solver.add_xor_clause([1, 2, 3], True)
+ res, solution = self.solver.solve([1, -2])
+ self.assertEqual(res, True)
+ self.assertEqual(solution, (None, True, False, False))
+
+ def test_long(self):
+ for l in range(10, 30):
+ self.setUp()
+ toadd = []
+ toassume = []
+ solution_expected = [None]
+ for i in range(1, l):
+ toadd.append(i)
+ solution_expected.append(False)
+ if i != l - 1:
+ toassume.append(i * -1)
+
+ self.solver.add_xor_clause(toadd, False)
+ res, solution = self.solver.solve(toassume)
+ self.assertEqual(res, True)
+ self.assertEqual(solution, tuple(solution_expected))
+
+
+class InitTester(unittest.TestCase):
+
+ def test_wrong_args_to_solver(self):
+ self.assertRaises(ValueError, Solver, threads=-1)
+ self.assertRaises(ValueError, Solver, threads=0)
+ self.assertRaises(ValueError, Solver, verbose=-1)
+ self.assertRaises(ValueError, Solver, time_limit=-1)
+ self.assertRaises(ValueError, Solver, confl_limit=-1)
+ self.assertRaises(TypeError, Solver, threads="fail")
+ self.assertRaises(TypeError, Solver, verbose="fail")
+ self.assertRaises(TypeError, Solver, time_limit="fail")
+ self.assertRaises(TypeError, Solver, confl_limit="fail")
+
+
+class TestDump(unittest.TestCase):
+
+ def setUp(self):
+ self.solver = Solver()
+
+ def test_one_dump(self):
+ with open("tests/test.cnf", "r") as x:
+ for line in x:
+ line = line.strip()
+ if "p" in line or "c" in line:
+ continue
+
+ out = [int(x) for x in line.split()[:-1]]
+ self.solver.add_clause(out)
+
+ res, _ = self.solver.solve()
+ self.assertEqual(res, True)
+
+ self.solver.start_getting_small_clauses(4)
+ x = self.solver.get_next_small_clause()
+ self.assertNotEquals(x, None)
+ self.solver.end_getting_small_clauses()
+
+
+class TestSolve(unittest.TestCase):
+
+ def setUp(self):
+ self.solver = Solver(threads=2)
+
+ def test_wrong_args(self):
+ self.assertRaises(TypeError, self.solver.add_clause, 'A')
+ self.assertRaises(TypeError, self.solver.add_clause, 1)
+ self.assertRaises(TypeError, self.solver.add_clause, 1.0)
+ self.assertRaises(TypeError, self.solver.add_clause, object())
+ self.assertRaises(TypeError, self.solver.add_clause, ['a'])
+ self.assertRaises(
+ TypeError, self.solver.add_clause, [[1, 2], [3, None]])
+ self.assertRaises(ValueError, self.solver.add_clause, [1, 0])
+
+ def test_no_clauses(self):
+ for _ in range(7):
+ self.assertEqual(self.solver.solve([]), (True, (None,)))
+
+ def test_cnf1(self):
+ for cl in clauses1:
+ self.solver.add_clause(cl)
+ res, solution = self.solver.solve()
+ self.assertEqual(res, True)
+ self.assertTrue(check_solution(clauses1, solution))
+
+ def test_bad_iter(self):
+ class Liar:
+
+ def __iter__(self):
+ return None
+ self.assertRaises(TypeError, self.solver.add_clause, Liar())
+
+ def test_cnf2(self):
+ for cl in clauses2:
+ self.solver.add_clause(cl)
+ self.assertEqual(self.solver.solve(), (False, None))
+
+ def test_cnf3(self):
+ for cl in clauses3:
+ self.solver.add_clause(cl)
+ res, solution = self.solver.solve()
+ self.assertEqual(res, True)
+ self.assertTrue(check_solution(clauses3, solution))
+
+ def test_cnf1_confl_limit(self):
+ for _ in range(1, 20):
+ self.setUp()
+ for cl in clauses1:
+ self.solver.add_clause(cl)
+
+ res, solution = self.solver.solve()
+ self.assertTrue(res is None or check_solution(clauses1, solution))
+
+ def test_by_re_curse(self):
+ self.solver.add_clause([-1, -2, 3])
+ res, _ = self.solver.solve()
+ self.assertEqual(res, True)
+
+ self.solver.add_clause([-5, 1])
+ self.solver.add_clause([4, -3])
+ self.solver.add_clause([2, 3, 5])
+ res, _ = self.solver.solve()
+ self.assertEqual(res, True)
+
+# ------------------------------------------------------------------------
+
+
+def run():
+ print("sys.prefix: %s" % sys.prefix)
+ print("sys.version: %s" % sys.version)
+ try:
+ print("pycryptosat version: %r" % pycryptosat.__version__)
+ except AttributeError:
+ pass
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestXor))
+ suite.addTest(unittest.makeSuite(InitTester))
+ suite.addTest(unittest.makeSuite(TestSolve))
+ suite.addTest(unittest.makeSuite(TestDump))
+
+ runner = unittest.TextTestRunner(verbosity=2)
+ return runner.run(suite)
+
+if __name__ == '__main__':
+ run()
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/appveyor.ps1 b/cryptominisat5/cryptominisat-5.6.3/scripts/appveyor.ps1
new file mode 100644
index 000000000..0be04c24d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/appveyor.ps1
@@ -0,0 +1,13 @@
+Add-Type -AssemblyName System.IO.Compression.FileSystem
+
+function Unzip
+{
+ param([string]$zipfile, [string]$outpath)
+
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
+}
+
+$wc = New-Object System.Net.WebClient
+$wc.DownloadFile("http://bit.ly/1JPHkL3", "C:\projects\cryptominisat\boost_1_59_0.zip")
+
+Unzip "C:\projects\cryptominisat\boost_1_59_0.zip" "C:\projects\cryptominisat"
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/README.markdown b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/README.markdown
new file mode 100644
index 000000000..a46aa0852
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/README.markdown
@@ -0,0 +1,14 @@
+Testing in AWS
+===========================================
+
+Only use
+
+```
+./launch_server.py --help
+```
+
+The other scripts are all used by this script. Lists of files to be solved are in files:
+
+* satcomp14
+* satcomp091113
+* satcomp16
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/RequestSpotClient.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/RequestSpotClient.py
new file mode 100644
index 000000000..01b30ea6f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/RequestSpotClient.py
@@ -0,0 +1,172 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import sys
+import configparser
+from boto.ec2.connection import EC2Connection
+from common_aws import *
+import logging
+
+
+class RequestSpotClient:
+ def __init__(self, revision, test, noshutdown=False, count=1):
+ self.conf = configparser.ConfigParser()
+ self.count = count
+ if test:
+ self.conf.read('ec2-spot-instance-test.cfg')
+ self.limit_create = 1
+ else:
+ self.conf.read('ec2-spot-instance.cfg')
+ self.limit_create = 8
+
+ if self.count is None:
+ self.count = int(self.conf.get('ec2', 'count'))
+
+ self.ec2conn = self.__create_ec2conn()
+ if self.ec2conn is None:
+ print('Unable to create EC2 ec2conn')
+ sys.exit(0)
+
+ self.user_data = self.__get_user_data(revision, noshutdown)
+ self.our_ids = []
+
+ def __get_user_data(self, revision, noshutdown):
+ extra_args = ""
+ if noshutdown:
+ extra_args = " --noshutdown"
+ user_data = """#!/bin/bash
+set -e
+
+apt-get update -y
+apt-get install -y python
+apt-get -y install git python-pip
+pip install --force-reinstall --upgrade awscli
+pip install --force-reinstall --upgrade boto
+pip install configparser
+apt-get -y install cmake make g++ libboost-all-dev
+apt-get -y install libsqlite3-dev awscli unzip
+apt-get install zlib1g-dev
+# apt-get -y install linux-cloud-tools-generic linux-tools-generic
+# apt-get -y install linux-cloud-tools-3.13.0-53-generic linux-tools-3.13.0-53-generic
+
+# Get AWS log agent
+cd /home/ubuntu/
+
+cat > "aws-logs-client.conf" << EOF
+[general]
+state_file = /home/ubuntu/cloudwatch.state
+
+[logstream1]
+log_group_name = cyrptominisat-perftest
+log_stream_name = client
+file = /home/ubuntu/*.log
+
+[messages]
+log_group_name = cyrptominisat-perftest
+log_stream_name = client
+file = /var/log/messages
+EOF
+
+curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
+python ./awslogs-agent-setup.py --region {region} -c aws-logs-client.conf -n
+
+# Get CMS
+sudo -H -u ubuntu bash -c 'ssh-keyscan github.com >> ~/.ssh/known_hosts'
+sudo -H -u ubuntu bash -c 'git clone --no-single-branch --depth 50 https://github.com/msoos/cryptominisat.git'
+cd /home/ubuntu/cryptominisat
+sudo -H -u ubuntu bash -c 'git checkout {revision}'
+sudo -H -u ubuntu bash -c 'git submodule init'
+sudo -H -u ubuntu bash -c 'git submodule update'
+cd /home/ubuntu/
+# sudo -H -u ubuntu bash -c 'aws s3 cp s3://msoos-solve-data/solvers/features_to_reconf.cpp /home/ubuntu/cryptominisat/src/ --region={region}'
+
+# Get credentials
+cd /home/ubuntu/
+sudo -H -u ubuntu bash -c 'aws s3 cp s3://msoos-solve-data/solvers/email.conf . --region={region}'
+
+# build solvers
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_maplecomsps_drup.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_swdia5by.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_swdia5by_old.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_lingeling_ayv.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_drat-trim2.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_glucose2016.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_cmsat_satcomp16.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_lingeling_bbc.sh >> /home/ubuntu/build.log'
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/build_Maple_LCM_Dist.sh >> /home/ubuntu/build.log'
+
+# Start client
+cd /home/ubuntu/cryptominisat
+sudo -H -u ubuntu bash -c 'nohup /home/ubuntu/cryptominisat/scripts/aws/client.py {extra_args} > /home/ubuntu/python_log.log 2>&1' &
+
+DATA="{ip}"
+""".format(revision=revision, extra_args=extra_args, ip=get_ip_address("eth0"), region=self.conf.get("ec2", "region"))
+
+ return user_data
+
+ def __create_ec2conn(self):
+ ec2conn = EC2Connection()
+ regions = ec2conn.get_all_regions()
+ for r in regions:
+ if r.name == self.conf.get('ec2', 'region'):
+ ec2conn = EC2Connection(region=r)
+ return ec2conn
+ return None
+
+ def __provision_instances(self):
+ reqs = self.ec2conn.request_spot_instances(
+ price=self.conf.get('ec2', 'max_bid'),
+ count=self.count,
+ image_id=self.conf.get('ec2', 'ami_id'),
+ subnet_id=self.conf.get('ec2', 'subnet_id'),
+ instance_type=self.conf.get('ec2', 'type'),
+ instance_profile_arn=self.conf.get('ec2', 'instance_profile_arn'),
+ user_data=self.user_data,
+ key_name=self.conf.get('ec2', 'key_name'),
+ security_group_ids=[self.conf.get('ec2', 'security_group_client')])
+
+ logging.info("Request created, got back IDs %s" % [r.id for r in reqs])
+ return reqs
+
+ def create_spots_if_needed(self):
+ # Valid values: open | active | closed | cancelled | failed
+ run_wait_spots = self.ec2conn.get_all_spot_instance_requests(filters={'state': 'open'})
+ run_wait_spots.extend(self.ec2conn.get_all_spot_instance_requests(filters={'state': 'active'}))
+
+ for spot in run_wait_spots:
+ if spot.id in self.our_ids:
+ logging.info("ID %s is either waiting or running, not requesting a new one" % spot.id)
+ return
+
+ if len(self.our_ids) >= self.limit_create:
+ logging.error("Something really wrong has happened, we have reqested 4 spots aready! Not requesting more.")
+ return
+
+ self.create_spots()
+
+ def create_spots(self):
+ reqs = self.__provision_instances()
+
+ for req in reqs:
+ logging.info('New req state: %s ID: %s' % (req.state, req.id))
+ self.our_ids.append(req.id)
+
+ return self.our_ids
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_Maple_LCM_Dist.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_Maple_LCM_Dist.sh
new file mode 100755
index 000000000..7d22ad4d9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_Maple_LCM_Dist.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu
+git clone https://github.com/msoos/Maple_LCM_Dist
+cd Maple_LCM_Dist
+./starexec_build.sh
+
+#binary is now at:
+# Maple_LCM_Dist/Maple_LCM_Dist
+
+cd /home/ubuntu
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cmsat_satcomp16.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cmsat_satcomp16.sh
new file mode 100755
index 000000000..b3227e1d7
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cmsat_satcomp16.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu/
+aws s3 cp s3://msoos-solve-data/solvers/cmsat-satcomp16.tar.gz . --region=us-west-2
+tar xzvf cmsat-satcomp16.tar.gz
+cd cmsat-satcomp16
+./starexec_build
+
+# binary is now at:
+# --solver cmsat-satcomp16/bin/cryptominisat4_simple
+
+cd /home/ubuntu/
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cryptominisat.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cryptominisat.sh
new file mode 100755
index 000000000..43e241f60
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_cryptominisat.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu/
+rm -rf m4ri-20140914*
+aws s3 cp s3://msoos-solve-data/solvers/m4ri-20140914.tar.gz . --region us-west-2
+tar xzvf m4ri-20140914.tar.gz
+cd m4ri-20140914/
+./configure
+make "-j$2"
+sudo make install
+echo "built and installed M4RI"
+
+cd /home/ubuntu/cryptominisat
+rm -rf build
+mkdir -p build
+cd build
+rm -rf C* c*
+cmake ${3} ..
+make "-j${2}" VERBOSE=1
+echo "built CMS"
+
+# solver is now in cryptominisat/build/cryptominisat5
+
+exit 0
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_drat-trim2.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_drat-trim2.sh
new file mode 100755
index 000000000..1b1b524b1
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_drat-trim2.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu
+git clone https://github.com/msoos/drat-trim.git
+cd drat-trim
+cmake .
+make
+
+#binary is now at:
+# drat-trim/drat-trim
+
+cd /home/ubuntu
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_glucose2016.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_glucose2016.sh
new file mode 100755
index 000000000..2ff499b5e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_glucose2016.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu
+git clone https://github.com/msoos/glucose2016.git
+cd glucose2016
+cd simp
+make rs
+
+mv /home/ubuntu/glucose2016/simp/glucose_static /home/ubuntu/glucose2016/simp/glucose_static_2016
+#binary is now at:
+# --solver glucose2016/simp/glucose_static_2016
+
+cd /home/ubuntu
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_ayv.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_ayv.sh
new file mode 100755
index 000000000..92f8015e6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_ayv.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu
+mkdir -p lingeling_ayv
+cd lingeling_ayv
+aws s3 cp s3://msoos-solve-data/solvers/lingeling-ayv-86bf266-140429.zip . --region=us-west-2
+unzip lingeling-ayv-86bf266-140429.zip
+./build.sh
+
+mv /home/ubuntu/lingeling_ayv/binary/lingeling /home/ubuntu/lingeling_ayv/binary/lingeling_ayv
+#binary is now at:
+# --solver lingeling_ayv/binary/lingeling_ayv
+
+cd /home/ubuntu
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_bbc.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_bbc.sh
new file mode 100755
index 000000000..240cb75af
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_lingeling_bbc.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu/
+
+aws s3 cp s3://msoos-solve-data/solvers/lingeling-bbc.tar.gz . --region=us-west-2
+tar xzvf lingeling-bbc.tar.gz
+cd lingeling-bbc/build
+sh build.sh
+mv lingeling/lingeling lingeling/lingeling_bbc
+
+# lingeling is now in
+# --solver lingeling-bbc/build/lingeling/lingeling_bbc
+
+cd /home/ubuntu/
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_maplecomsps_drup.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_maplecomsps_drup.sh
new file mode 100755
index 000000000..128f3472b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_maplecomsps_drup.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu/
+mkdir -p MapleCOMSPS
+cd MapleCOMSPS/
+aws s3 cp s3://msoos-solve-data/solvers/MapleCOMSPS.tar.gz . --region=us-west-2
+tar xzvf MapleCOMSPS.tar.gz
+cd simp
+MROOT=.. make clean rs
+mv minisat_static maplecomsps_static
+
+# binary is now at:
+# --solver MapleCOMSPS/simp/maplecomsps_static
+
+cd /home/ubuntu/
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by.sh
new file mode 100755
index 000000000..6138997e2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu/
+aws s3 cp s3://msoos-solve-data/solvers/SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5.tar.gz . --region=us-west-2
+tar xzvf SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5.tar.gz
+cd SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5
+./build.sh
+
+mv /home/ubuntu/SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5/binary/SWDiA5BY_static /home/ubuntu/SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5/binary/SWDiA5BY_static.alt.vd
+# binary is now at:
+# --solver SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5/binary/SWDiA5BY_static.alt.vd
+
+cd /home/ubuntu/
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by_old.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by_old.sh
new file mode 100755
index 000000000..f9de76fc5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/build_swdia5by_old.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+set -e
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+cd /home/ubuntu/
+mkdir -p SWDiA5BY_A26
+cd SWDiA5BY_A26
+aws s3 cp s3://msoos-solve-data/solvers/SWDiA5BY_A26.zip . --region=us-west-2
+unzip SWDiA5BY_A26.zip
+./build.sh
+
+mv /home/ubuntu/SWDiA5BY_A26/binary/SWDiA5BY_static /home/ubuntu/SWDiA5BY_A26/binary/SWDiA5BY_static_A26
+# binary is now at:
+# --solver SWDiA5BY_A26/binary/SWDiA5BY_static_A26
+
+cd /home/ubuntu/
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/client.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/client.py
new file mode 100755
index 000000000..fcdc632ab
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/client.py
@@ -0,0 +1,821 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import os
+import socket
+import sys
+import optparse
+import struct
+import pickle
+import threading
+import random
+import time
+import subprocess
+import resource
+import pprint
+import traceback
+import boto
+import boto.utils
+import boto.ec2
+import logging
+import functools
+import string
+
+# for importing in systems where "." is not in the PATH
+sys.path.append(os.getcwd()+"/scripts/learn/")
+from common_aws import *
+import add_lemma_ind as addlemm
+
+pp = pprint.PrettyPrinter(depth=6)
+
+
+class PlainHelpFormatter(optparse.IndentedHelpFormatter):
+
+ def format_description(self, description):
+ if description:
+ return description + "\n"
+ else:
+ return ""
+
+
+def uptime():
+ with open('/proc/uptime', 'r') as f:
+ return float(f.readline().split()[0])
+
+ return None
+
+
+def get_n_bytes_from_connection(sock, MSGLEN):
+ chunks = []
+ bytes_recd = 0
+ while bytes_recd < MSGLEN:
+ chunk = sock.recv(min(MSGLEN - bytes_recd, 2048))
+ if chunk == '':
+ raise RuntimeError("socket connection broken")
+ chunks.append(chunk)
+ bytes_recd = bytes_recd + len(chunk)
+
+ return ''.join(chunks)
+
+
+def connect_client(threadID):
+ # Create a socket object
+ sock = socket.socket()
+
+ # Get local machine name
+ if options.host is None:
+ print("You must supply the host to connect to as a client")
+ exit(-1)
+
+ logging.info("Getting host by name %s", options.host,
+ extra={"threadid": threadID})
+ host = socket.gethostbyname_ex(options.host)
+ logging.info("Connecting to host %s", host,
+ extra={"threadid": threadID})
+ sock.connect((host[2][0], options.port))
+
+ return sock
+
+
+def send_command(sock, command, tosend=None):
+ # can't set tosend={} because of Python weirdness
+ tosend = tosend or {}
+
+ tosend["command"] = command
+ tosend = pickle.dumps(tosend)
+ tosend = struct.pack('!q', len(tosend)) + tosend
+ sock.sendall(tosend)
+
+
+def ask_for_data(sock, command, threadID):
+ logging.info("Asking for %s", command, extra={"threadid": threadID})
+ tosend = {}
+ tosend["uptime"] = uptime()
+ send_command(sock, command, tosend)
+
+ # get stuff to solve
+ data = get_n_bytes_from_connection(sock, 8)
+ length = struct.unpack('!q', data)[0]
+ data = get_n_bytes_from_connection(sock, length)
+ indata = pickle.loads(data)
+ return indata
+
+
+def signal_error_to_master():
+ sock = connect_client(100)
+ send_command(sock, "error")
+ sock.close()
+
+
+def setlimits(time_limit, mem_limit):
+ #logging.info(
+ #"Setting resource limit in child (pid %d). Time %d s"
+ #"Mem %d MB\n", os.getpid(), time_limit,
+ #mem_limit,
+ #extra=self.logextra)
+
+ resource.setrlimit(resource.RLIMIT_CPU, (
+ time_limit,
+ time_limit))
+
+ resource.setrlimit(resource.RLIMIT_DATA, (
+ mem_limit * 1024 * 1024,
+ mem_limit * 1024 * 1024))
+
+
+class solverThread (threading.Thread):
+
+ def __init__(self, threadID):
+ threading.Thread.__init__(self)
+ self.threadID = threadID
+ self.logextra = {'threadid': self.threadID}
+ self.temp_space = self.create_temp_space()
+ logging.info("Initializing thread", extra=self.logextra)
+
+ def create_temp_space(self):
+ newdir = options.temp_space + "/thread-%s" % self.threadID
+ try:
+ os.system("sudo mkdir %s" % newdir)
+ os.system("sudo chown ubuntu:ubuntu %s" % newdir)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.warning("Error creating directory: %s",
+ the_trace, extra={"threadid": -1})
+
+ return newdir
+
+ def get_fname_no_dir(self):
+ fname = self.indata["cnf_filename"]
+ slash_at = fname.find("/")
+ return fname[slash_at+1:]
+
+ def get_tmp_cnf_fname(self):
+ return "%s/%s" % (
+ self.temp_space,
+ self.get_fname_no_dir()
+ )
+
+ def get_stdout_fname(self):
+ return self.get_tmp_cnf_fname() + "-" + self.indata["uniq_cnt"] + ".stdout"
+
+ def get_stderr_fname(self):
+ return self.get_tmp_cnf_fname() + "-" + self.indata["uniq_cnt"] + ".stderr"
+
+ def get_sqlite_fname(self):
+ return self.get_tmp_cnf_fname() + "-" + self.indata["uniq_cnt"] + ".sqlite"
+
+ def get_lemmas_fname(self):
+ return "%s/lemmas" % self.temp_space
+
+ def get_drat_fname(self):
+ return "%s/drat" % self.temp_space
+
+ def get_toexec(self):
+ logging.info("Getting file to solve {cnf}".format(cnf=self.indata["cnf_filename"]),
+ extra=self.logextra)
+
+ key = boto.connect_s3().get_bucket("msoos-solve-data").get_key(self.indata["cnf_filename"])
+ key.get_contents_to_filename(self.get_tmp_cnf_fname())
+
+ toexec = []
+ toexec.append("%s/%s" % (options.base_dir, self.indata["solver"]))
+ toexec.append(self.indata["extra_opts"].replace(",", " "))
+ if "cryptominisat5" in self.indata["solver"]:
+ toexec.append("--printsol 0")
+ if self.indata["stats"]:
+ toexec.append("--sql 2")
+ toexec.append("--sqlitedb %s" % self.get_sqlite_fname())
+
+ toexec.append(self.get_tmp_cnf_fname())
+ if self.indata["drat"]:
+ if "Maple" in self.indata["solver"]:
+ toexec.extend(["-drup-file=%s" % self.get_drat_fname()])
+ if "cryptominisat5" in self.indata["solver"]:
+ toexec.extend(["--drat", self.get_drat_fname()])
+ # never stop search() to simplify anything
+ # toexec.append("-n 1")
+ # toexec.append("--ml 0")
+ # toexec.append("--gluecut0 100")
+ # toexec.append("--otfsubsume 0")
+ if self.indata["stats"]:
+ toexec.append("--clid")
+ else:
+ if "cryptominisat5" in self.indata["solver"] and self.indata["stats"]:
+ toexec.append("--sqlfull 0")
+
+ return " ".join(toexec)
+
+ def execute_solver(self):
+ toexec = self.get_toexec()
+ stdout_file = open(self.get_stdout_fname(), "w")
+ stderr_file = open(self.get_stderr_fname(), "w")
+
+ # limit time
+ limits_printed = "Thread %d executing '%s' with timeout %d s and memout %d MB" % (
+ self.threadID,
+ toexec,
+ self.indata["timeout_in_secs"],
+ self.indata["mem_limit_in_mb"]
+ )
+ logging.info(limits_printed, extra=self.logextra)
+ stderr_file.write(limits_printed + "\n")
+ stderr_file.flush()
+ stdout_file.write(limits_printed + "\n")
+ stdout_file.flush()
+
+ tstart = time.time()
+ p = subprocess.Popen(
+ toexec.rsplit(), stderr=stderr_file, stdout=stdout_file,
+ preexec_fn=functools.partial(
+ setlimits,
+ self.indata["timeout_in_secs"],
+ self.indata["mem_limit_in_mb"]))
+ p.wait()
+ tend = time.time()
+
+ towrite = "Finished in %f seconds by thread %s return code: %d\n" % (
+ tend - tstart, self.threadID, p.returncode)
+ stderr_file.write(towrite)
+ stdout_file.write(towrite)
+ stderr_file.close()
+ stdout_file.close()
+ logging.info(towrite.strip(), extra=self.logextra)
+
+ return p.returncode, toexec
+
+ def run_drat_trim(self):
+ toexec = "%s/drat-trim/drat-trim %s %s -x %s" % (
+ options.base_dir,
+ self.get_tmp_cnf_fname(),
+ self.get_drat_fname(),
+ self.get_lemmas_fname())
+ logging.info("Current working dir: %s", os.getcwd(), extra=self.logextra)
+ logging.info("Executing %s", toexec, extra=self.logextra)
+
+ stdout_file = open(self.get_stdout_fname(), "a")
+ stderr_file = open(self.get_stderr_fname(), "a")
+ tstart = time.time()
+ p = subprocess.Popen(
+ toexec.rsplit(), stderr=stderr_file, stdout=stdout_file,
+ preexec_fn=functools.partial(
+ setlimits,
+ 10*self.indata["timeout_in_secs"],
+ 2*self.indata["mem_limit_in_mb"]))
+ p.wait()
+ tend = time.time()
+
+ towrite = "Finished DRAT-TRIM2 in %f seconds by thread %s return code: %d\n" % (
+ tend - tstart, self.threadID, p.returncode)
+ stderr_file.write(towrite)
+ stdout_file.write(towrite)
+ stderr_file.close()
+ stdout_file.close()
+
+ return p.returncode
+
+ def add_lemma_idx_to_sqlite(self, lemmafname, dbfname):
+ logging.info("Updating sqlite with DRAT info."
+ "Using sqlite3db file %s. Using lemma file %s",
+ dbfname, lemmafname, extra=self.logextra)
+
+ useful_lemma_ids = []
+ with addlemm.Query(dbfname) as q:
+ useful_lemma_ids = addlemm.parse_lemmas(lemmafname, q.runID)
+ q.add_goods(useful_lemma_ids)
+
+ logging.info("Num good IDs: %d",
+ len(useful_lemma_ids), extra=self.logextra)
+
+ os.unlink(self.get_lemmas_fname())
+
+ def create_url(self, bucket, folder, key):
+ return 'https://%s.s3.amazonaws.com/%s/%s' % (bucket, folder, key)
+
+ def rnd_id(self):
+ return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5))
+
+ def copy_solution_to_s3(self):
+ exists = boto_conn.lookup(self.indata["s3_bucket"])
+ if not exists:
+ boto_conn.create_bucket(self.indata["s3_bucket"])
+ boto_bucket = boto_conn.get_bucket(self.indata["s3_bucket"])
+ k = boto.s3.key.Key(boto_bucket)
+
+ s3_folder = get_s3_folder(self.indata["given_folder"],
+ self.indata["git_rev"],
+ self.indata["solver"],
+ self.indata["timeout_in_secs"],
+ self.indata["mem_limit_in_mb"])
+
+ s3_folder_and_fname = s3_folder + "/" + self.get_fname_no_dir() + "-" + self.indata["uniq_cnt"]
+ s3_folder_and_fname_clean = s3_folder + "/" + self.get_fname_no_dir()
+
+ toreturn = []
+
+ # stdout
+ ret = os.system("gzip -f %s" % self.get_stdout_fname())
+ logging.info("Return from gzip '%s': %s", self.get_stdout_fname(),
+ ret, extra=self.logextra)
+ fname = s3_folder_and_fname + ".stdout.gz-tmp" + self.rnd_id()
+ fname_clean = s3_folder_and_fname_clean + ".stdout.gz"
+ k.key = fname
+ boto_bucket.delete_key(k)
+ ret = k.set_contents_from_filename(self.get_stdout_fname() + ".gz")
+ logging.info("Return from S3 writing file '%s': %s",
+ fname, ret, extra=self.logextra)
+ toreturn.append([fname, fname_clean])
+
+ # stderr
+ ret = os.system("gzip -f %s" % self.get_stderr_fname())
+ logging.info("Return from gzip '%s': %s", self.get_stderr_fname(),
+ ret, extra=self.logextra)
+ fname = s3_folder_and_fname + ".stderr.gz-tmp" + self.rnd_id()
+ fname_clean = s3_folder_and_fname_clean + ".stderr.gz"
+ k.key = fname
+ boto_bucket.delete_key(k)
+ ret = k.set_contents_from_filename(self.get_stderr_fname() + ".gz")
+ logging.info("Return from S3 writing file '%s': %s",
+ fname, ret, extra=self.logextra)
+ toreturn.append([fname, fname_clean])
+
+ # sqlite
+ if "cryptominisat5" in self.indata["solver"] and self.indata["stats"]:
+ ret = os.system("gzip -f %s" % self.get_sqlite_fname())
+ logging.info("Return from gzip '%s': %s", self.get_sqlite_fname(),
+ ret, extra=self.logextra)
+ fname = s3_folder_and_fname + ".sqlite.gz-tmp" + self.rnd_id()
+ fname_clean = s3_folder_and_fname_clean + ".sqlite.gz"
+ k.key = fname
+ boto_bucket.delete_key(k)
+ ret = k.set_contents_from_filename(self.get_sqlite_fname() + ".gz")
+ logging.info("Return from S3 writing file '%s': %s",
+ fname, ret, extra=self.logextra)
+ toreturn.append([fname, fname_clean])
+
+ logging.info("Uploaded stdout+stderr+sqlite files: %s",
+ toreturn, extra=self.logextra)
+
+ os.unlink(self.get_stdout_fname() + ".gz")
+ os.unlink(self.get_stderr_fname() + ".gz")
+ if "cryptominisat5" in self.indata["solver"] and self.indata["stats"]:
+ os.unlink(self.get_sqlite_fname() + ".gz")
+
+ return toreturn
+
+ def run_loop(self):
+ global exitapp
+ num_connect_problems = 0
+ while not exitapp:
+ if (num_connect_problems >= 20):
+ logging.error("Too many connection problems, exiting.",
+ extra=self.logextra)
+ exitapp = True
+ return
+
+ time.sleep(random.randint(0, 100) / 20.0)
+ try:
+ sock = connect_client(self.threadID)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.warn("Problem trying to connect"
+ "waiting and re-connecting."
+ " Trace: %s", the_trace,
+ extra=self.logextra)
+ time.sleep(3)
+ num_connect_problems += 1
+ continue
+
+ self.indata = ask_for_data(sock, "need", self.threadID)
+ sock.close()
+
+ logging.info("Got data from server %s",
+ pprint.pformat(self.indata, indent=4).replace("\n", " || "),
+ extra=self.logextra)
+ options.noshutdown |= self.indata["noshutdown"]
+
+ # handle 'finish'
+ if self.indata["command"] == "finish":
+ logging.warn("Client received that there is nothing more"
+ " to solve, exiting this thread",
+ extra=self.logextra)
+ return
+
+ # handle 'wait'
+ if self.indata["command"] == "wait":
+ time.sleep(20)
+ continue
+
+ # handle 'solve'
+ if self.indata["command"] == "solve":
+ returncode, executed = self.execute_solver()
+ if returncode == 20 and self.indata["drat"] and self.indata["stats"]:
+ if self.run_drat_trim() == 0:
+ self.add_lemma_idx_to_sqlite(
+ self.get_lemmas_fname(),
+ self.get_sqlite_fname())
+ os.unlink(self.get_tmp_cnf_fname())
+ if self.indata["drat"]:
+ os.unlink(self.get_drat_fname())
+ files = self.copy_solution_to_s3()
+ self.send_back_that_we_solved(returncode, files)
+ continue
+
+ logging.error("Data unrecognised by client: %s, exiting",
+ self.logextra)
+ return
+
+ logging.info("Exit asked for by another thread. Exiting",
+ extra=self.logextra)
+
+ def send_back_that_we_solved(self, returncode, files):
+ logging.info("Trying to send to server that we are done",
+ extra=self.logextra)
+ fail_connect = 0
+ while True:
+ if fail_connect > 5:
+ logging.error("Too many errors connecting to server to"
+ " send results. Shutting down",
+ extra=self.logextra)
+ shutdown(-1)
+ try:
+ sock = connect_client(self.threadID)
+ break
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+
+ logging.warn("Problem, waiting and re-connecting."
+ " Trace: %s", the_trace,
+ extra=self.logextra)
+ time.sleep(random.randint(0, 5) / 10.0)
+ fail_connect += 1
+
+ tosend = {}
+ tosend["file_num"] = self.indata["file_num"]
+ tosend["returncode"] = returncode
+ tosend["files"] = files
+ send_command(sock, "done", tosend)
+ logging.info("Sent that we finished %s with retcode %d",
+ self.indata["file_num"], returncode, extra=self.logextra)
+
+ sock.close()
+
+ def run(self):
+ logging.info("Starting thread", extra=self.logextra)
+ global exitapp
+
+ try:
+ self.run_loop()
+ except KeyboardInterrupt:
+ exitapp = True
+ raise
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+
+ exitapp = True
+ logging.error("Unexpected error in thread: %s", the_trace,
+ extra=self.logextra)
+ shutdown(-1)
+ raise
+
+
+def build_cryptominisat(indata):
+ opts = []
+ opts.append(indata["git_rev"])
+ opts.append(str(options.num_threads))
+ if indata["stats"]:
+ opts.append("-DSTATS=ON")
+
+ if indata["gauss"]:
+ opts.append("-DUSE_GAUSS=ON")
+
+ ret = os.system('%s/cryptominisat/scripts/aws/build_cryptominisat.sh %s >> %s/build.log 2>&1' %
+ (options.base_dir,
+ " ".join(opts),
+ options.base_dir))
+ global s3_folder
+ s3_folder = get_s3_folder(indata["given_folder"],
+ indata["git_rev"],
+ indata["solver"],
+ indata["timeout_in_secs"],
+ indata["mem_limit_in_mb"]
+ )
+ global s3_bucket
+ s3_bucket = indata["s3_bucket"]
+ logging.info("s3 bucket: %, s3 folder: %", s3_bucket, s3_folder, extra={"threadid": "-1"})
+ if ret != 0:
+ logging.error("Error building cryptominisat, shutting down!",
+ extra={"threadid": -1}
+ )
+ shutdown(-1)
+
+
+def build_system():
+ built_system = False
+ logging.info("Building system", extra={"threadid": -1})
+ tries = 0
+ while not built_system and tries < 10:
+ try:
+ tries += 1
+ sock = connect_client(-1)
+ except Exception:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.warning("Problem, waiting and re-connecting. Error: %s",
+ the_trace,
+ extra={"threadid": -1})
+ time.sleep(3)
+ continue
+
+ indata = ask_for_data(sock, "build", -1)
+ options.noshutdown |= indata["noshutdown"]
+ sock.close()
+
+ if "cryptominisat5" in indata["solver"]:
+ build_cryptominisat(indata)
+
+ built_system = True
+
+ if not built_system:
+ shutdown(-1)
+
+
+def num_cpus():
+ num_cpu = 0
+ cpuinfo = open("/proc/cpuinfo", "r")
+ for line in cpuinfo:
+ if "processor" in line:
+ num_cpu += 1
+
+ cpuinfo.close()
+ return num_cpu
+
+
+def shutdown(exitval=0):
+ toexec = "sudo shutdown -h now"
+ logging.info("SHUTTING DOWN", extra={"threadid": -1})
+
+ # signal error to master
+ if exitval != 0:
+ try:
+ signal_error_to_master()
+ except:
+ pass
+
+ # send email
+ if exitval == 0:
+ reason = "OK"
+ else:
+ reason = "FAIL"
+
+ try:
+ send_email("Client shutting down %s" % reason,
+ "Client finished.", options.logfile_name)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.error("Cannot send email! Traceback: %s", the_trace,
+ extra={"threadid": -1})
+
+ if not options.noshutdown:
+ os.system(toexec)
+
+ exit(exitval)
+
+
+def set_up_logging():
+ form = '[ %(asctime)-15s thread %(threadid)s '
+ form += get_ip_address(options.network_device)
+ form += " %(levelname)s %(message)s ]"
+
+ logformatter = logging.Formatter(form)
+
+ consoleHandler = logging.StreamHandler()
+ consoleHandler.setFormatter(logformatter)
+ logging.getLogger().addHandler(consoleHandler)
+
+ try:
+ os.unlink(options.logfile_name)
+ except:
+ pass
+ fileHandler = logging.FileHandler(options.logfile_name)
+ fileHandler.setFormatter(logformatter)
+ logging.getLogger().addHandler(fileHandler)
+
+ logging.getLogger().setLevel(logging.INFO)
+
+
+def update_num_threads():
+ if options.num_threads is None:
+ options.num_threads = num_cpus()/2
+ options.num_threads = max(options.num_threads, 1)
+
+ logging.info("Running with %d threads", options.num_threads,
+ extra={"threadid": -1})
+
+
+def build_system_full():
+ try:
+ build_system()
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.error("Error getting data for building system: %s",
+ the_trace, extra={"threadid": -1})
+ shutdown(-1)
+
+
+def start_threads():
+ threads = []
+ # we should test at least 2 threads, it's only used during testing anyway
+ options.num_threads = max(options.num_threads, 2)
+ for i in range(options.num_threads):
+ threads.append(solverThread(i))
+
+ for t in threads:
+ t.setDaemon(True)
+ t.start()
+
+
+def print_to_log_local_setup():
+ data = boto.utils.get_instance_metadata()
+ for a, b in data.items():
+ logging.info("%s -- %s", a, b, extra={"threadid": -1})
+
+
+class VolumeAdderMount():
+ def __init__(self):
+ pass
+
+ def add_volume(self):
+ os.system("sudo mkfs.ext3 /dev/xvdb")
+ os.system("sudo mkdir %s" % options.temp_space)
+ os.system("sudo mount /dev/xvdb %s" % options.temp_space)
+
+ def delete_volume(self):
+ pass
+
+
+class VolumeAdder():
+ def __init__(self):
+ self.conn = boto.ec2.connect_to_region(self._get_region())
+
+ def _get_instance_id(self):
+ instance_id = boto.utils.get_instance_metadata()
+ return instance_id['instance-id']
+
+ def _get_availability_zone(self):
+ dat = boto.utils.get_instance_metadata()
+ return dat["placement"]["availability-zone"]
+
+ def _get_region(self):
+ region = boto.utils.get_instance_metadata()
+ return region['local-hostname'].split('.')[1]
+
+ def add_volume(self):
+ self.vol = self.conn.create_volume(50, self._get_availability_zone())
+ while self.vol.status != 'available':
+ print('Vol state: ', self.vol.status)
+ time.sleep(5)
+ self.vol.update()
+
+ dev = "xvdc"
+ logging.info("Created volume, attaching... %s", self.vol,
+ extra={"threadid": -1})
+ self.conn.attach_volume(self.vol.id, self._get_instance_id(), dev)
+ logging.info("Waiting for volume to show up...", extra={"threadid": -1})
+ time.sleep(10)
+
+ logging.info("Trying to mkfs, mkdir and mount", extra={"threadid": -1})
+ os.system("sudo mkfs.ext3 /dev/%s" % dev)
+ os.system("sudo mkdir %s" % options.temp_space)
+ os.system("sudo chown ubuntu:ubuntu %s" % options.temp_space)
+ os.system("sudo mount /dev/%s %s" % (dev, options.temp_space))
+
+ return self.vol.id
+
+ def delete_volume(self):
+ try:
+ os.system("sudo umount /mnt2")
+ time.sleep(2)
+ except:
+ logging.error("Issue with unmounting, but ignored",
+ extra={"threadid": -1})
+
+ self.conn.detach_volume(self.vol.id, force=True)
+ time.sleep(1)
+ self.conn.delete_volume(self.vol.id)
+
+
+def parse_command_line():
+ usage = "usage: %prog"
+ parser = optparse.OptionParser(usage=usage, formatter=PlainHelpFormatter())
+ parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Be more verbose"
+ )
+
+ parser.add_option("--host", dest="host",
+ help="Host to connect to as a client")
+ parser.add_option("--port", "-p", default=10000, dest="port",
+ type="int", help="Port to use"
+ " [default: %default]",
+ )
+
+ parser.add_option("--temp", default="/mnt2", dest="temp_space", type=str,
+ help="Temporary space to use"
+ " [default: %default]",
+ )
+
+ parser.add_option("--noshutdown", "-n", default=False, dest="noshutdown",
+ action="store_true", help="Do not shut down"
+ )
+
+ parser.add_option("--dir", default="/home/ubuntu/", dest="base_dir", type=str,
+ help="The home dir of cryptominisat"
+ " [default: %default]",
+ )
+ parser.add_option("--net", default="ens3", dest="network_device", type=str,
+ help="The network device we will be using"
+ " [default: %default]",
+ )
+
+ parser.add_option("--threads", dest="num_threads", type=int,
+ help="Force using this many threads")
+
+ parser.add_option("--dev", dest="dev", type=str, default="xvdc",
+ help="Device name")
+
+ parser.add_option("--logfile", dest="logfile_name", type=str,
+ default="python_log.log", help="Name of LOG file")
+
+ (options, args) = parser.parse_args()
+
+ return options, args
+
+
+if __name__ == "__main__":
+ global s3_bucket
+ global s3_folder
+ s3_bucket = "msoos-no-bucket"
+ s3_folder = "no_s3_folder"
+ options, args = parse_command_line()
+
+ exitapp = False
+ options.logfile_name = options.base_dir + options.logfile_name
+
+ # get host
+ if options.host is None:
+ for line in boto.utils.get_instance_userdata().split("\n"):
+ if "DATA" in line:
+ options.host = line.split("=")[1].strip().strip('"')
+
+ print("HOST has beeen set to %s" % options.host)
+
+ try:
+ set_up_logging()
+ logging.info("Client called with parameters: %s",
+ pprint.pformat(options, indent=4).replace("\n", " || "),
+ extra={"threadid": -1})
+ print_to_log_local_setup()
+ v = VolumeAdderMount()
+ v.add_volume()
+
+ boto_conn = boto.connect_s3()
+ update_num_threads()
+ build_system_full()
+ start_threads()
+ while threading.active_count() > 1:
+ time.sleep(0.1)
+
+ # finish up
+ logging.info("Exiting Main Thread, shutting down", extra={"threadid": -1})
+ v.delete_volume()
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.error("Problem in __main__"
+ "Trace: %s", the_trace, extra={"threadid": -1})
+ shutdown(-1)
+
+ shutdown()
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/common_aws.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/common_aws.py
new file mode 100644
index 000000000..4af1cfb0b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/common_aws.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import boto
+import traceback
+import sys
+import subprocess
+import socket
+import fcntl
+import struct
+from email.mime.text import MIMEText
+from email.mime.application import MIMEApplication
+from email.mime.multipart import MIMEMultipart
+import smtplib
+import ConfigParser
+config = ConfigParser.ConfigParser()
+config.read("/home/ubuntu/email.conf")
+
+
+def send_email(subject, text, fname=None):
+ msg = MIMEMultipart()
+ msg['Subject'] = 'Email from solver: %s' % subject
+ msg['From'] = 'msoos@msoos.org'
+ msg['To'] = 'soos.mate@gmail.com'
+
+ # That is what you see if you have no email client:
+ msg.preamble = 'Multipart massage.\n'
+
+ # Text part
+ part = MIMEText(text)
+ msg.attach(part)
+
+ # Attachment(s)
+ if fname:
+ part = MIMEApplication(open(fname, "rb").read())
+ part.add_header('Content-Disposition', 'attachment', filename="attachment.txt")
+ msg.attach(part)
+
+ # Connect to STMP server
+ email_login = config.get("email", "login")
+ email_pass = config.get("email", "pass")
+
+ smtp = smtplib.SMTP_SSL("email-smtp.us-west-2.amazonaws.com")
+ smtp.login(email_login, email_pass)
+
+ # Send email
+ smtp.sendmail(msg['From'], msg['To'], msg.as_string())
+
+
+def get_ip_address(ifname):
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ return socket.inet_ntoa(fcntl.ioctl(
+ s.fileno(),
+ 0x8915, # SIOCGIFADDR
+ struct.pack('256s', ifname[:15])
+ )[20:24])
+
+
+def get_revision(full_solver_path, base_dir):
+ revision = subprocess.check_output(['git', 'rev-parse', 'HEAD'])
+ return revision.strip()
+
+
+def get_s3_folder(folder, rev, solver, timeout, memout):
+ print("folder: %s rev: %s tout: %s memout %s" % (folder, rev, timeout, memout))
+ solver_exe = solver[solver.rfind("/")+1:]
+ return folder + "-{rev}-{solver}-tout-{tout}-mout-{mout}".format(
+ rev=rev[:9], solver=solver_exe, tout=timeout, mout=memout)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp11_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp11_updated
new file mode 100644
index 000000000..2854d28ac
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp11_updated
@@ -0,0 +1,300 @@
+satcomp11/11pipe_11_ooo.cnf.gz
+satcomp11/11pipe_k.cnf.gz
+satcomp11/12pipe_bug4_q0.used-as.sat04-723.cnf.gz
+satcomp11/12pipe_bug6_q0.used-as.sat04-725.cnf.gz
+satcomp11/1dlx_c_iq57_a.cnf.gz
+satcomp11/1dlx_c_iq60_a.cnf.gz
+satcomp11/2dlx_ca_bp_f_liveness.cnf.gz
+satcomp11/6pipe_6_ooo.shuffled-as.sat03-413.cnf.gz
+satcomp11/9dlx_vliw_at_b_iq6.used-as.sat04-347.cnf.gz
+satcomp11/9dlx_vliw_at_b_iq7.cnf.gz
+satcomp11/9dlx_vliw_at_b_iq8.used-as.sat04-718.cnf.gz
+satcomp11/9dlx_vliw_at_b_iq9.used-as.sat04-719.cnf.gz
+satcomp11/9vliw_m_9stages_iq3_C1_bug5.cnf.gz
+satcomp11/9vliw_m_9stages_iq3_C1_bug6.cnf.gz
+satcomp11/ACG-10-10p0.cnf.gz
+satcomp11/ACG-15-5p1.cnf.gz
+satcomp11/AProVE07-01.cnf.gz
+satcomp11/AProVE07-03.cnf.gz
+satcomp11/AProVE07-21.cnf.gz
+satcomp11/AProVE11-02.cnf.gz
+satcomp11/AProVE11-06.cnf.gz
+satcomp11/AProVE11-07.cnf.gz
+satcomp11/AProVE11-09.cnf.gz
+satcomp11/AProVE11-10.cnf.gz
+satcomp11/AProVE11-11.cnf.gz
+satcomp11/AProVE11-12.cnf.gz
+satcomp11/AProVE11-13.cnf.gz
+satcomp11/AProVE11-15.cnf.gz
+satcomp11/AProVE11-16.cnf.gz
+satcomp11/E00N23.cnf.gz
+satcomp11/E00X23.cnf.gz
+satcomp11/E02F17.cnf.gz
+satcomp11/E02F20.cnf.gz
+satcomp11/E02F22.cnf.gz
+satcomp11/E03N17.cnf.gz
+satcomp11/E04F19.cnf.gz
+satcomp11/E04F20.cnf.gz
+satcomp11/E04N18.cnf.gz
+satcomp11/E05F18.cnf.gz
+satcomp11/E05F20.cnf.gz
+satcomp11/E05X15.cnf.gz
+satcomp11/E07N15.cnf.gz
+satcomp11/E15N15.cnf.gz
+satcomp11/IBM_FV_2004_rule_batch_30_SAT_dat.k55.cnf.gz
+satcomp11/IBM_FV_2004_rule_batch_30_SAT_dat.k80.cnf.gz
+satcomp11/SAT_dat.k100.cnf.gz
+satcomp11/SAT_dat.k20.cnf.gz
+satcomp11/SAT_dat.k45.cnf.gz
+satcomp11/SAT_dat.k80.cnf.gz
+satcomp11/SAT_dat.k80_04.cnf.gz
+satcomp11/SAT_dat.k85.cnf.gz
+satcomp11/UCG-15-10p0.cnf.gz
+satcomp11/UCG-15-10p1.cnf.gz
+satcomp11/UCG-15-5p0.cnf.gz
+satcomp11/UCG-20-5p1.cnf.gz
+satcomp11/UR-10-10p1.cnf.gz
+satcomp11/UR-20-10p0.cnf.gz
+satcomp11/UR-20-10p1.cnf.gz
+satcomp11/UTI-10-5t1.cnf.gz
+satcomp11/UTI-20-10p0.cnf.gz
+satcomp11/UTI-20-10p1.cnf.gz
+satcomp11/UTI-20-10t0.cnf.gz
+satcomp11/UTI-20-10t1.cnf.gz
+satcomp11/aaai10-planning-ipc5-TPP-21-step11.cnf.gz
+satcomp11/aaai10-planning-ipc5-TPP-30-step11.cnf.gz
+satcomp11/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp11/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp11/aaai10-planning-ipc5-pathways-17-step21.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-12-step15.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-12-step16.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-18-step15.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-18-step16.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-27-step13.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-27-step14.cnf.gz
+satcomp11/aaai10-planning-ipc5-rovers-18-step11.cnf.gz
+satcomp11/aaai10-planning-ipc5-rovers-18-step12.cnf.gz
+satcomp11/abb313GPIA-9-c.used-as.sat04-317.cnf.gz
+satcomp11/abb313GPIA-9-tr.used-as.sat04-321.cnf.gz
+satcomp11/aes_128_10_keyfind_1.cnf.gz
+satcomp11/aes_128_1_keyfind_1.cnf.gz
+satcomp11/aes_128_2_keyfind_1.cnf.gz
+satcomp11/aes_128_3_keyfind_1.cnf.gz
+satcomp11/aes_32_1_keyfind_1.cnf.gz
+satcomp11/aes_32_2_keyfind_1.cnf.gz
+satcomp11/aes_32_3_keyfind_1.cnf.gz
+satcomp11/aes_32_4_keyfind_1.cnf.gz
+satcomp11/aes_32_5_keyfind_1.cnf.gz
+satcomp11/aes_64_1_keyfind_1.cnf.gz
+satcomp11/aes_64_2_keyfind_1.cnf.gz
+satcomp11/aes_64_3_keyfind_1.cnf.gz
+satcomp11/aes_64_4_keyfind_1.cnf.gz
+satcomp11/all.used-as.sat04-986.cnf.gz
+satcomp11/am_7_7.shuffled-as.sat03-363.cnf.gz
+satcomp11/bart17.shuffled.cnf.gz
+satcomp11/bc57-sensors-1-k303-unsat.shuffled-as.sat03-406.cnf.gz
+satcomp11/blocks-4-ipc5-h21-unknown.cnf.gz
+satcomp11/blocks-blocks-36-0.120-NOTKNOWN.cnf.gz
+satcomp11/blocks-blocks-36-0.160-NOTKNOWN.cnf.gz
+satcomp11/blocks-blocks-36-0.170-NOTKNOWN.cnf.gz
+satcomp11/blocks-blocks-36-0.180-SAT.cnf.gz
+satcomp11/blocks-blocks-37-1.120-NOTKNOWN.cnf.gz
+satcomp11/blocks-blocks-37-1.130-NOTKNOWN.cnf.gz
+satcomp11/blocks-blocks-37-1.150-SAT.cnf.gz
+satcomp11/c10idw_i.cnf.gz
+satcomp11/c6288mul.miter.shuffled-as.sat03-346.cnf.gz
+satcomp11/clauses-8.renamed-as.sat05-1964.cnf.gz
+satcomp11/comb1.shuffled.cnf.gz
+satcomp11/countbitsarray04_32.cnf.gz
+satcomp11/countbitsrotate032.cnf.gz
+satcomp11/countbitssrl064.cnf.gz
+satcomp11/countbitswegner128.cnf.gz
+satcomp11/cube-11-h14-sat.cnf.gz
+satcomp11/dated-10-17-u.cnf.gz
+satcomp11/dated-5-11-u.cnf.gz
+satcomp11/dated-5-13-u.cnf.gz
+satcomp11/dekker.used-as.sat04-989.cnf.gz
+satcomp11/dme-03-1-k247-unsat.shuffled-as.sat03-407.cnf.gz
+satcomp11/dp04s04.shuffled.cnf.gz
+satcomp11/dp04u03.shuffled.cnf.gz
+satcomp11/dp10s10.shuffled.cnf.gz
+satcomp11/driverlog1_ks99i.renamed-as.sat05-3951.cnf.gz
+satcomp11/driverlog3_v01a.renamed-as.sat05-3963.cnf.gz
+satcomp11/dspam_dump_vc949.cnf.gz
+satcomp11/eq.atree.braun.11.unsat.cnf.gz
+satcomp11/eq.atree.braun.12.unsat.cnf.gz
+satcomp11/ferry5_ks99i.renamed-as.sat05-3994.cnf.gz
+satcomp11/grid-strips-grid-y-3.035-NOTKNOWN.cnf.gz
+satcomp11/grid-strips-grid-y-4.025-NOTKNOWN.cnf.gz
+satcomp11/gripper13u.shuffled-as.sat03-395.cnf.gz
+satcomp11/gss-14-s100.cnf.gz
+satcomp11/gss-16-s100.cnf.gz
+satcomp11/gss-19-s100.cnf.gz
+satcomp11/gss-21-s100.cnf.gz
+satcomp11/gss-22-s100.cnf.gz
+satcomp11/gss-27-s100.cnf.gz
+satcomp11/gus-md5-11.cnf.gz
+satcomp11/gus-md5-12.cnf.gz
+satcomp11/hard-18-U-10652.cnf.gz
+satcomp11/hard-25-U-7061.cnf.gz
+satcomp11/hard-6-U-7061.cnf.gz
+satcomp11/homer14.shuffled.cnf.gz
+satcomp11/homer16.shuffled.cnf.gz
+satcomp11/homer17.shuffled.cnf.gz
+satcomp11/hsat_vc12062.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-bc57sensorsp1-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-bobsm5378d2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-bobsmhdlc2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtpmspalu-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtswvqis8x8p2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtswvrod6x8p1-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtswvtms14x8p1-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtviseisenberg1-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtvisns3p02-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtvissoap1-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-bc57sensorsp2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-bc57sensorsp3-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-bjrb07amba2andenv-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-eijkbs6669-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-nusmvreactorp4-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtswvsam6x8p3-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtviseisenberg2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtvisns2p3-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtvisns3p00-tseitin.cnf.gz
+satcomp11/ibm-2002-21r-k95.cnf.gz
+satcomp11/ibm-2002-30r-k85.cnf.gz
+satcomp11/ibm-2004-01-k90.cnf.gz
+satcomp11/ibm-2004-23-k100.cnf.gz
+satcomp11/k2fix_gr_rcs_w8.shuffled.cnf.gz
+satcomp11/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satcomp11/k2mul.miter.shuffled-as.sat03-355.cnf.gz
+satcomp11/korf-15.cnf.gz
+satcomp11/korf-17.cnf.gz
+satcomp11/korf-18.cnf.gz
+satcomp11/li-exam-61.shuffled-as.sat03-366.cnf.gz
+satcomp11/li-test4-100.shuffled-as.sat03-370.cnf.gz
+satcomp11/manol-pipe-c10nidw.cnf.gz
+satcomp11/manol-pipe-c6bidw_i.cnf.gz
+satcomp11/manol-pipe-f7idw.cnf.gz
+satcomp11/manol-pipe-f7nidw.cnf.gz
+satcomp11/maxor128.cnf.gz
+satcomp11/maxxor032.cnf.gz
+satcomp11/maxxor064.cnf.gz
+satcomp11/maxxor128.cnf.gz
+satcomp11/maxxororand064.cnf.gz
+satcomp11/md5_48_3.cnf.gz
+satcomp11/minandmaxor016.cnf.gz
+satcomp11/minandmaxor128.cnf.gz
+satcomp11/minxorminand128.cnf.gz
+satcomp11/mizh-sha0-36-2.cnf.gz
+satcomp11/mizh-sha0-36-4.cnf.gz
+satcomp11/mulhs016.cnf.gz
+satcomp11/myciel6-tr.used-as.sat04-320.cnf.gz
+satcomp11/ndhf_xits_19_UNKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.025-NOTKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.035-NOTKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.045-NOTKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.025-NOTKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.035-NOTKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.045-NOTKNOWN.cnf.gz
+satcomp11/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.085-SAT.cnf.gz
+satcomp11/partial-10-13-s.cnf.gz
+satcomp11/partial-10-15-s.cnf.gz
+satcomp11/partial-10-17-s.cnf.gz
+satcomp11/partial-5-11-u.cnf.gz
+satcomp11/post-c32s-gcdm16-23.cnf.gz
+satcomp11/post-cbmc-zfcp-2.8-u2-noholes.cnf.gz
+satcomp11/q_query_3_L150_coli.sat.cnf.gz
+satcomp11/q_query_3_L70_coli.sat.cnf.gz
+satcomp11/q_query_3_l46_lambda.cnf.gz
+satcomp11/rand_net60-25-10.shuffled.cnf.gz
+satcomp11/rand_net60-30-1.shuffled.cnf.gz
+satcomp11/rand_net60-40-10.shuffled.cnf.gz
+satcomp11/rand_net70-60-10.shuffled.cnf.gz
+satcomp11/rbcl_xits_08_UNSAT.cnf.gz
+satcomp11/rbcl_xits_09_UNKNOWN.cnf.gz
+satcomp11/rbcl_xits_15_SAT.cnf.gz
+satcomp11/rbcl_xits_18_SAT.cnf.gz
+satcomp11/rovers1_ks99i.renamed-as.sat05-3971.cnf.gz
+satcomp11/rpoc_xits_09_UNSAT.cnf.gz
+satcomp11/sha0_36_5.cnf.gz
+satcomp11/slp-synthesis-aes-bottom12.cnf.gz
+satcomp11/slp-synthesis-aes-bottom13.cnf.gz
+satcomp11/slp-synthesis-aes-bottom14.cnf.gz
+satcomp11/slp-synthesis-aes-bottom15.cnf.gz
+satcomp11/slp-synthesis-aes-bottom16.cnf.gz
+satcomp11/slp-synthesis-aes-bottom17.cnf.gz
+satcomp11/slp-synthesis-aes-bottom18.cnf.gz
+satcomp11/slp-synthesis-aes-bottom19.cnf.gz
+satcomp11/slp-synthesis-aes-bottom20.cnf.gz
+satcomp11/slp-synthesis-aes-bottom21.cnf.gz
+satcomp11/slp-synthesis-aes-bottom22.cnf.gz
+satcomp11/slp-synthesis-aes-bottom23.cnf.gz
+satcomp11/slp-synthesis-aes-bottom24.cnf.gz
+satcomp11/slp-synthesis-aes-bottom25.cnf.gz
+satcomp11/slp-synthesis-aes-bottom26.cnf.gz
+satcomp11/slp-synthesis-aes-top21.cnf.gz
+satcomp11/slp-synthesis-aes-top22.cnf.gz
+satcomp11/slp-synthesis-aes-top23.cnf.gz
+satcomp11/slp-synthesis-aes-top24.cnf.gz
+satcomp11/slp-synthesis-aes-top25.cnf.gz
+satcomp11/slp-synthesis-aes-top26.cnf.gz
+satcomp11/slp-synthesis-aes-top28.cnf.gz
+satcomp11/slp-synthesis-aes-top29.cnf.gz
+satcomp11/slp-synthesis-aes-top30.cnf.gz
+satcomp11/smtlib-qfbv-aigs-VS3-benchmark-S2-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-bin_libmsrpc_vc1225336-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-bin_libsmbclient_vc1228502-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-bin_libsmbsharemodes_vc5759-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-countbits128-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-lfsr_008_063_080-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-lfsr_008_079_112-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-nlzbe256-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-rfunit_flat-64-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-servers_slapd_a_vc149789-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-src_wget_vc18517-tseitin.cnf.gz
+satcomp11/smulo064.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.030-NOTKNOWN.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.040-NOTKNOWN.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.050-NOTKNOWN.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.060-NOTKNOWN.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.070-NOTKNOWN.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.080-SAT.cnf.gz
+satcomp11/sortnet-7-ipc5-h15-unsat.cnf.gz
+satcomp11/sortnet-8-ipc5-h19-sat.cnf.gz
+satcomp11/total-10-17-u.cnf.gz
+satcomp11/traffic_3_uc_sat.cnf.gz
+satcomp11/traffic_3b_unknown.cnf.gz
+satcomp11/traffic_b_unsat.cnf.gz
+satcomp11/traffic_f_unknown.cnf.gz
+satcomp11/traffic_fb_unknown.cnf.gz
+satcomp11/traffic_kkb_unknown.cnf.gz
+satcomp11/traffic_pcb_unknown.cnf.gz
+satcomp11/traffic_r_sat.cnf.gz
+satcomp11/traffic_r_uc_sat.cnf.gz
+satcomp11/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.060-SAT.cnf.gz
+satcomp11/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp11/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp11/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.050-SAT.cnf.gz
+satcomp11/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp11/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp11/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp11/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-SAT.cnf.gz
+satcomp11/valves-gates-1-k617-unsat.shuffled-as.sat03-412.cnf.gz
+satcomp11/vda_gr_rcs_w9.shuffled.cnf.gz
+satcomp11/velev-npe-1.0-9dlx-b71.cnf.gz
+satcomp11/velev-pipe-o-uns-1.0-7.cnf.gz
+satcomp11/velev-pipe-o-uns-1.1-6.cnf.gz
+satcomp11/velev-pipe-sat-1.0-b9.cnf.gz
+satcomp11/velev-vliw-uns-4.0-9-i1.cnf.gz
+satcomp11/vmpc_25.renamed-as.sat05-1913.cnf.gz
+satcomp11/vmpc_29.renamed-as.sat05-1916.cnf.gz
+satcomp11/vmpc_32.renamed-as.sat05-1919.cnf.gz
+satcomp11/vmpc_34.renamed-as.sat05-1926.cnf.gz
+satcomp11/vmpc_35.renamed-as.sat05-1921.cnf.gz
+satcomp11/vmpc_36.renamed-as.sat05-1922.cnf.gz
+satcomp11/x1mul.miter.shuffled-as.sat03-359.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp13_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp13_updated
new file mode 100644
index 000000000..07c46e919
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp13_updated
@@ -0,0 +1,300 @@
+satcomp13/11pipe_11_ooo.cnf.gz
+satcomp13/11pipe_k.cnf.gz
+satcomp13/12pipe_bug4_q0.used-as.sat04-723.cnf.gz
+satcomp13/12pipe_bug6_q0.used-as.sat04-725.cnf.gz
+satcomp13/1dlx_c_iq57_a.cnf.gz
+satcomp13/1dlx_c_iq60_a.cnf.gz
+satcomp13/2dlx_ca_bp_f_liveness.cnf.gz
+satcomp13/6pipe_6_ooo.shuffled-as.sat03-413.cnf.gz
+satcomp13/9dlx_vliw_at_b_iq6.used-as.sat04-347.cnf.gz
+satcomp13/9dlx_vliw_at_b_iq7.cnf.gz
+satcomp13/9dlx_vliw_at_b_iq8.used-as.sat04-718.cnf.gz
+satcomp13/9dlx_vliw_at_b_iq9.used-as.sat04-719.cnf.gz
+satcomp13/9vliw_m_9stages_iq3_C1_bug5.cnf.gz
+satcomp13/9vliw_m_9stages_iq3_C1_bug6.cnf.gz
+satcomp13/ACG-10-10p0.cnf.gz
+satcomp13/ACG-15-5p1.cnf.gz
+satcomp13/AProVE07-01.cnf.gz
+satcomp13/AProVE07-03.cnf.gz
+satcomp13/AProVE07-21.cnf.gz
+satcomp13/AProVE11-02.cnf.gz
+satcomp13/AProVE11-06.cnf.gz
+satcomp13/AProVE11-07.cnf.gz
+satcomp13/AProVE11-09.cnf.gz
+satcomp13/AProVE11-10.cnf.gz
+satcomp13/AProVE11-11.cnf.gz
+satcomp13/AProVE11-12.cnf.gz
+satcomp13/AProVE11-13.cnf.gz
+satcomp13/AProVE11-15.cnf.gz
+satcomp13/AProVE11-16.cnf.gz
+satcomp13/E00N23.cnf.gz
+satcomp13/E00X23.cnf.gz
+satcomp13/E02F17.cnf.gz
+satcomp13/E02F20.cnf.gz
+satcomp13/E02F22.cnf.gz
+satcomp13/E03N17.cnf.gz
+satcomp13/E04F19.cnf.gz
+satcomp13/E04F20.cnf.gz
+satcomp13/E04N18.cnf.gz
+satcomp13/E05F18.cnf.gz
+satcomp13/E05F20.cnf.gz
+satcomp13/E05X15.cnf.gz
+satcomp13/E07N15.cnf.gz
+satcomp13/E15N15.cnf.gz
+satcomp13/IBM_FV_2004_rule_batch_30_SAT_dat.k55.cnf.gz
+satcomp13/IBM_FV_2004_rule_batch_30_SAT_dat.k80.cnf.gz
+satcomp13/SAT_dat.k100.cnf.gz
+satcomp13/SAT_dat.k20.cnf.gz
+satcomp13/SAT_dat.k45.cnf.gz
+satcomp13/SAT_dat.k80.cnf.gz
+satcomp13/SAT_dat.k80_04.cnf.gz
+satcomp13/SAT_dat.k85.cnf.gz
+satcomp13/UCG-15-10p0.cnf.gz
+satcomp13/UCG-15-10p1.cnf.gz
+satcomp13/UCG-15-5p0.cnf.gz
+satcomp13/UCG-20-5p1.cnf.gz
+satcomp13/UR-10-10p1.cnf.gz
+satcomp13/UR-20-10p0.cnf.gz
+satcomp13/UR-20-10p1.cnf.gz
+satcomp13/UTI-10-5t1.cnf.gz
+satcomp13/UTI-20-10p0.cnf.gz
+satcomp13/UTI-20-10p1.cnf.gz
+satcomp13/UTI-20-10t0.cnf.gz
+satcomp13/UTI-20-10t1.cnf.gz
+satcomp13/aaai10-planning-ipc5-TPP-21-step11.cnf.gz
+satcomp13/aaai10-planning-ipc5-TPP-30-step11.cnf.gz
+satcomp13/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp13/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp13/aaai10-planning-ipc5-pathways-17-step21.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-12-step15.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-12-step16.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-18-step15.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-18-step16.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-27-step13.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-27-step14.cnf.gz
+satcomp13/aaai10-planning-ipc5-rovers-18-step11.cnf.gz
+satcomp13/aaai10-planning-ipc5-rovers-18-step12.cnf.gz
+satcomp13/abb313GPIA-9-c.used-as.sat04-317.cnf.gz
+satcomp13/abb313GPIA-9-tr.used-as.sat04-321.cnf.gz
+satcomp13/aes_128_10_keyfind_1.cnf.gz
+satcomp13/aes_128_1_keyfind_1.cnf.gz
+satcomp13/aes_128_2_keyfind_1.cnf.gz
+satcomp13/aes_128_3_keyfind_1.cnf.gz
+satcomp13/aes_32_1_keyfind_1.cnf.gz
+satcomp13/aes_32_2_keyfind_1.cnf.gz
+satcomp13/aes_32_3_keyfind_1.cnf.gz
+satcomp13/aes_32_4_keyfind_1.cnf.gz
+satcomp13/aes_32_5_keyfind_1.cnf.gz
+satcomp13/aes_64_1_keyfind_1.cnf.gz
+satcomp13/aes_64_2_keyfind_1.cnf.gz
+satcomp13/aes_64_3_keyfind_1.cnf.gz
+satcomp13/aes_64_4_keyfind_1.cnf.gz
+satcomp13/all.used-as.sat04-986.cnf.gz
+satcomp13/am_7_7.shuffled-as.sat03-363.cnf.gz
+satcomp13/bart17.shuffled.cnf.gz
+satcomp13/bc57-sensors-1-k303-unsat.shuffled-as.sat03-406.cnf.gz
+satcomp13/blocks-4-ipc5-h21-unknown.cnf.gz
+satcomp13/blocks-blocks-36-0.120-NOTKNOWN.cnf.gz
+satcomp13/blocks-blocks-36-0.160-NOTKNOWN.cnf.gz
+satcomp13/blocks-blocks-36-0.170-NOTKNOWN.cnf.gz
+satcomp13/blocks-blocks-36-0.180-SAT.cnf.gz
+satcomp13/blocks-blocks-37-1.120-NOTKNOWN.cnf.gz
+satcomp13/blocks-blocks-37-1.130-NOTKNOWN.cnf.gz
+satcomp13/blocks-blocks-37-1.150-SAT.cnf.gz
+satcomp13/c10idw_i.cnf.gz
+satcomp13/c6288mul.miter.shuffled-as.sat03-346.cnf.gz
+satcomp13/clauses-8.renamed-as.sat05-1964.cnf.gz
+satcomp13/comb1.shuffled.cnf.gz
+satcomp13/countbitsarray04_32.cnf.gz
+satcomp13/countbitsrotate032.cnf.gz
+satcomp13/countbitssrl064.cnf.gz
+satcomp13/countbitswegner128.cnf.gz
+satcomp13/cube-11-h14-sat.cnf.gz
+satcomp13/dated-10-17-u.cnf.gz
+satcomp13/dated-5-11-u.cnf.gz
+satcomp13/dated-5-13-u.cnf.gz
+satcomp13/dekker.used-as.sat04-989.cnf.gz
+satcomp13/dme-03-1-k247-unsat.shuffled-as.sat03-407.cnf.gz
+satcomp13/dp04s04.shuffled.cnf.gz
+satcomp13/dp04u03.shuffled.cnf.gz
+satcomp13/dp10s10.shuffled.cnf.gz
+satcomp13/driverlog1_ks99i.renamed-as.sat05-3951.cnf.gz
+satcomp13/driverlog3_v01a.renamed-as.sat05-3963.cnf.gz
+satcomp13/dspam_dump_vc949.cnf.gz
+satcomp13/eq.atree.braun.11.unsat.cnf.gz
+satcomp13/eq.atree.braun.12.unsat.cnf.gz
+satcomp13/ferry5_ks99i.renamed-as.sat05-3994.cnf.gz
+satcomp13/grid-strips-grid-y-3.035-NOTKNOWN.cnf.gz
+satcomp13/grid-strips-grid-y-4.025-NOTKNOWN.cnf.gz
+satcomp13/gripper13u.shuffled-as.sat03-395.cnf.gz
+satcomp13/gss-14-s100.cnf.gz
+satcomp13/gss-16-s100.cnf.gz
+satcomp13/gss-19-s100.cnf.gz
+satcomp13/gss-21-s100.cnf.gz
+satcomp13/gss-22-s100.cnf.gz
+satcomp13/gss-27-s100.cnf.gz
+satcomp13/gus-md5-11.cnf.gz
+satcomp13/gus-md5-12.cnf.gz
+satcomp13/hard-18-U-10652.cnf.gz
+satcomp13/hard-25-U-7061.cnf.gz
+satcomp13/hard-6-U-7061.cnf.gz
+satcomp13/homer14.shuffled.cnf.gz
+satcomp13/homer16.shuffled.cnf.gz
+satcomp13/homer17.shuffled.cnf.gz
+satcomp13/hsat_vc12062.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-bc57sensorsp1-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-bobsm5378d2-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-bobsmhdlc2-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtpmspalu-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtswvqis8x8p2-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtswvrod6x8p1-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtswvtms14x8p1-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtviseisenberg1-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtvisns3p02-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtvissoap1-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-bc57sensorsp2-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-bc57sensorsp3-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-bjrb07amba2andenv-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-eijkbs6669-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-nusmvreactorp4-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-pdtswvsam6x8p3-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-pdtviseisenberg2-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-pdtvisns2p3-tseitin.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-pdtvisns3p00-tseitin.cnf.gz
+satcomp13/ibm-2002-21r-k95.cnf.gz
+satcomp13/ibm-2002-30r-k85.cnf.gz
+satcomp13/ibm-2004-01-k90.cnf.gz
+satcomp13/ibm-2004-23-k100.cnf.gz
+satcomp13/k2fix_gr_rcs_w8.shuffled.cnf.gz
+satcomp13/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satcomp13/k2mul.miter.shuffled-as.sat03-355.cnf.gz
+satcomp13/korf-15.cnf.gz
+satcomp13/korf-17.cnf.gz
+satcomp13/korf-18.cnf.gz
+satcomp13/li-exam-61.shuffled-as.sat03-366.cnf.gz
+satcomp13/li-test4-100.shuffled-as.sat03-370.cnf.gz
+satcomp13/manol-pipe-c10nidw.cnf.gz
+satcomp13/manol-pipe-c6bidw_i.cnf.gz
+satcomp13/manol-pipe-f7idw.cnf.gz
+satcomp13/manol-pipe-f7nidw.cnf.gz
+satcomp13/maxor128.cnf.gz
+satcomp13/maxxor032.cnf.gz
+satcomp13/maxxor064.cnf.gz
+satcomp13/maxxor128.cnf.gz
+satcomp13/maxxororand064.cnf.gz
+satcomp13/md5_48_3.cnf.gz
+satcomp13/minandmaxor016.cnf.gz
+satcomp13/minandmaxor128.cnf.gz
+satcomp13/minxorminand128.cnf.gz
+satcomp13/mizh-sha0-36-2.cnf.gz
+satcomp13/mizh-sha0-36-4.cnf.gz
+satcomp13/mulhs016.cnf.gz
+satcomp13/myciel6-tr.used-as.sat04-320.cnf.gz
+satcomp13/ndhf_xits_19_UNKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.025-NOTKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.035-NOTKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.045-NOTKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.025-NOTKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.035-NOTKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.045-NOTKNOWN.cnf.gz
+satcomp13/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.085-SAT.cnf.gz
+satcomp13/partial-10-13-s.cnf.gz
+satcomp13/partial-10-15-s.cnf.gz
+satcomp13/partial-10-17-s.cnf.gz
+satcomp13/partial-5-11-u.cnf.gz
+satcomp13/post-c32s-gcdm16-23.cnf.gz
+satcomp13/post-cbmc-zfcp-2.8-u2-noholes.cnf.gz
+satcomp13/q_query_3_L150_coli.sat.cnf.gz
+satcomp13/q_query_3_L70_coli.sat.cnf.gz
+satcomp13/q_query_3_l46_lambda.cnf.gz
+satcomp13/rand_net60-25-10.shuffled.cnf.gz
+satcomp13/rand_net60-30-1.shuffled.cnf.gz
+satcomp13/rand_net60-40-10.shuffled.cnf.gz
+satcomp13/rand_net70-60-10.shuffled.cnf.gz
+satcomp13/rbcl_xits_08_UNSAT.cnf.gz
+satcomp13/rbcl_xits_09_UNKNOWN.cnf.gz
+satcomp13/rbcl_xits_15_SAT.cnf.gz
+satcomp13/rbcl_xits_18_SAT.cnf.gz
+satcomp13/rovers1_ks99i.renamed-as.sat05-3971.cnf.gz
+satcomp13/rpoc_xits_09_UNSAT.cnf.gz
+satcomp13/sha0_36_5.cnf.gz
+satcomp13/slp-synthesis-aes-bottom12.cnf.gz
+satcomp13/slp-synthesis-aes-bottom13.cnf.gz
+satcomp13/slp-synthesis-aes-bottom14.cnf.gz
+satcomp13/slp-synthesis-aes-bottom15.cnf.gz
+satcomp13/slp-synthesis-aes-bottom16.cnf.gz
+satcomp13/slp-synthesis-aes-bottom17.cnf.gz
+satcomp13/slp-synthesis-aes-bottom18.cnf.gz
+satcomp13/slp-synthesis-aes-bottom19.cnf.gz
+satcomp13/slp-synthesis-aes-bottom20.cnf.gz
+satcomp13/slp-synthesis-aes-bottom21.cnf.gz
+satcomp13/slp-synthesis-aes-bottom22.cnf.gz
+satcomp13/slp-synthesis-aes-bottom23.cnf.gz
+satcomp13/slp-synthesis-aes-bottom24.cnf.gz
+satcomp13/slp-synthesis-aes-bottom25.cnf.gz
+satcomp13/slp-synthesis-aes-bottom26.cnf.gz
+satcomp13/slp-synthesis-aes-top21.cnf.gz
+satcomp13/slp-synthesis-aes-top22.cnf.gz
+satcomp13/slp-synthesis-aes-top23.cnf.gz
+satcomp13/slp-synthesis-aes-top24.cnf.gz
+satcomp13/slp-synthesis-aes-top25.cnf.gz
+satcomp13/slp-synthesis-aes-top26.cnf.gz
+satcomp13/slp-synthesis-aes-top28.cnf.gz
+satcomp13/slp-synthesis-aes-top29.cnf.gz
+satcomp13/slp-synthesis-aes-top30.cnf.gz
+satcomp13/smtlib-qfbv-aigs-VS3-benchmark-S2-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-bin_libmsrpc_vc1225336-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-bin_libsmbclient_vc1228502-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-bin_libsmbsharemodes_vc5759-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-countbits128-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-lfsr_008_063_080-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-lfsr_008_079_112-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-nlzbe256-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-rfunit_flat-64-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-servers_slapd_a_vc149789-tseitin.cnf.gz
+satcomp13/smtlib-qfbv-aigs-src_wget_vc18517-tseitin.cnf.gz
+satcomp13/smulo064.cnf.gz
+satcomp13/sokoban-sequential-p145-microban-sequential.030-NOTKNOWN.cnf.gz
+satcomp13/sokoban-sequential-p145-microban-sequential.040-NOTKNOWN.cnf.gz
+satcomp13/sokoban-sequential-p145-microban-sequential.050-NOTKNOWN.cnf.gz
+satcomp13/sokoban-sequential-p145-microban-sequential.060-NOTKNOWN.cnf.gz
+satcomp13/sokoban-sequential-p145-microban-sequential.070-NOTKNOWN.cnf.gz
+satcomp13/sokoban-sequential-p145-microban-sequential.080-SAT.cnf.gz
+satcomp13/sortnet-7-ipc5-h15-unsat.cnf.gz
+satcomp13/sortnet-8-ipc5-h19-sat.cnf.gz
+satcomp13/total-10-17-u.cnf.gz
+satcomp13/traffic_3_uc_sat.cnf.gz
+satcomp13/traffic_3b_unknown.cnf.gz
+satcomp13/traffic_b_unsat.cnf.gz
+satcomp13/traffic_f_unknown.cnf.gz
+satcomp13/traffic_fb_unknown.cnf.gz
+satcomp13/traffic_kkb_unknown.cnf.gz
+satcomp13/traffic_pcb_unknown.cnf.gz
+satcomp13/traffic_r_sat.cnf.gz
+satcomp13/traffic_r_uc_sat.cnf.gz
+satcomp13/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.060-SAT.cnf.gz
+satcomp13/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp13/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp13/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.050-SAT.cnf.gz
+satcomp13/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp13/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp13/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp13/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-SAT.cnf.gz
+satcomp13/valves-gates-1-k617-unsat.shuffled-as.sat03-412.cnf.gz
+satcomp13/vda_gr_rcs_w9.shuffled.cnf.gz
+satcomp13/velev-npe-1.0-9dlx-b71.cnf.gz
+satcomp13/velev-pipe-o-uns-1.0-7.cnf.gz
+satcomp13/velev-pipe-o-uns-1.1-6.cnf.gz
+satcomp13/velev-pipe-sat-1.0-b9.cnf.gz
+satcomp13/velev-vliw-uns-4.0-9-i1.cnf.gz
+satcomp13/vmpc_25.renamed-as.sat05-1913.cnf.gz
+satcomp13/vmpc_29.renamed-as.sat05-1916.cnf.gz
+satcomp13/vmpc_32.renamed-as.sat05-1919.cnf.gz
+satcomp13/vmpc_34.renamed-as.sat05-1926.cnf.gz
+satcomp13/vmpc_35.renamed-as.sat05-1921.cnf.gz
+satcomp13/vmpc_36.renamed-as.sat05-1922.cnf.gz
+satcomp13/x1mul.miter.shuffled-as.sat03-359.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp14_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp14_updated
new file mode 100644
index 000000000..8e0553b8e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp14_updated
@@ -0,0 +1,300 @@
+satcomp14/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.025-NOTKNOWN.cnf.gz
+satcomp14/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.025-NOTKNOWN.cnf.gz
+satcomp14/slp-synthesis-aes-top29.cnf.gz
+satcomp14/gss-25-s100.cnf.gz
+satcomp14/aes_32_2_keyfind_1.cnf.gz
+satcomp14/aes_24_4_keyfind_4.cnf.gz
+satcomp14/korf-18.cnf.gz
+satcomp14/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp14/slp-synthesis-aes-top28.cnf.gz
+satcomp14/gss-22-s100.cnf.gz
+satcomp14/partial-10-17-s.cnf.gz
+satcomp14/gss-24-s100.cnf.gz
+satcomp14/gss-23-s100.cnf.gz
+satcomp14/hitag2-7-60-0-0xe8fa35372ed37e2-80.cnf.gz
+satcomp14/hitag2-8-60-0-0xfba1a41b5dfd7f7-52.cnf.gz
+satcomp14/hitag2-8-60-0-0xdcdbc8bf368ee73-37.cnf.gz
+satcomp14/hitag2-8-60-0-0x1eb82244d7f1c3c-47.cnf.gz
+satcomp14/hitag2-10-60-0-0xfee9637399d85a2-78.cnf.gz
+satcomp14/hitag2-10-60-0-0xe6754daf48162bf-46.cnf.gz
+satcomp14/hitag2-10-60-0-0xe14721bd199894a-99.cnf.gz
+satcomp14/hitag2-10-60-0-0x8edc44db7837bbf-65.cnf.gz
+satcomp14/hitag2-10-60-0-0x0ffdbe60727f161-57.cnf.gz
+satcomp14/ctl_4291_567_5_unsat_pre.cnf.gz
+satcomp14/6s151.cnf.gz
+satcomp14/6s137.cnf.gz
+satcomp14/6s123.cnf.gz
+satcomp14/SAT_dat.k95-24_1_rule_3.cnf.gz
+satcomp14/SAT_dat.k95-24_1_rule_2.cnf.gz
+satcomp14/SAT_dat.k95-24_1_rule_1.cnf.gz
+satcomp14/SAT_dat.k90.debugged.cnf.gz
+satcomp14/SAT_dat.k85-24_1_rule_1.cnf.gz
+satcomp14/SAT_dat.k100-24_1_rule_3.cnf.gz
+satcomp14/SAT_dat.k100-24_1_rule_2.cnf.gz
+satcomp14/SAT_dat.k100-24_1_rule_1.cnf.gz
+satcomp14/6s126-opt.cnf.gz
+satcomp14/15pipe_q0_k.cnf.gz
+satcomp14/010-23-80.cnf.gz
+satcomp14/010-22-160.cnf.gz
+satcomp14/010-22-144.cnf.gz
+satcomp14/009-23-64.cnf.gz
+satcomp14/006-23-96.cnf.gz
+satcomp14/006-23-80.cnf.gz
+satcomp14/006-22-160.cnf.gz
+satcomp14/006-22-144.cnf.gz
+satcomp14/005-22-160.cnf.gz
+satcomp14/004-22-160.cnf.gz
+satcomp14/004-22-144.cnf.gz
+satcomp14/003-23-80.cnf.gz
+satcomp14/002-23-96.cnf.gz
+satcomp14/stable-400-0.1-5-9876543214005.cnf.gz
+satcomp14/stable-400-0.1-4-9876543214004.cnf.gz
+satcomp14/stable-400-0.1-2-9876543214002.cnf.gz
+satcomp14/stable-400-0.1-11-98765432140011.cnf.gz
+satcomp14/atco_enc1_opt2_10_16.cnf.gz
+satcomp14/MD5-32-5.cnf.gz
+satcomp14/MD5-32-4.cnf.gz
+satcomp14/MD5-32-3.cnf.gz
+satcomp14/MD5-32-2.cnf.gz
+satcomp14/MD5-32-1.cnf.gz
+satcomp14/MD5-31-5.cnf.gz
+satcomp14/MD5-31-4.cnf.gz
+satcomp14/MD5-30-5.cnf.gz
+satcomp14/MD5-30-4.cnf.gz
+satcomp14/MD5-30-2.cnf.gz
+satcomp14/MD5-30-1.cnf.gz
+satcomp14/MD5-29-5.cnf.gz
+satcomp14/MD5-29-4.cnf.gz
+satcomp14/MD5-29-3.cnf.gz
+satcomp14/MD5-29-2.cnf.gz
+satcomp14/MD5-28-5.cnf.gz
+satcomp14/MD5-28-4.cnf.gz
+satcomp14/MD5-28-3.cnf.gz
+satcomp14/MD5-28-2.cnf.gz
+satcomp14/MD5-28-1.cnf.gz
+satcomp14/dimacs.cnf.gz
+satcomp14/SAT_dat.k35-31_2_rule_2.cnf.gz
+satcomp14/aes_32_2_keyfind_3.cnf.gz
+satcomp14/SAT_dat.k85-24_1_rule_2.cnf.gz
+satcomp14/SAT_dat.k85-24_1_rule_3.cnf.gz
+satcomp14/rbcl_xits_08_UNSAT.cnf.gz
+satcomp14/ctl_3791_556_unsat_pre.cnf.gz
+satcomp14/UR-20-10p1.cnf.gz
+satcomp14/SAT_dat.k80-24_1_rule_2.cnf.gz
+satcomp14/11pipe_11_ooo.cnf.gz
+satcomp14/dated-5-13-u.cnf.gz
+satcomp14/AProVE07-01.cnf.gz
+satcomp14/SAT_dat.k80-24_1_rule_1.cnf.gz
+satcomp14/hwmcc10-timeframe-expansion-k45-pdtvisns3p02-tseitin.cnf.gz
+satcomp14/ACG-20-10p1.cnf.gz
+satcomp14/minandmaxor128.cnf.gz
+satcomp14/UR-20-10p0.cnf.gz
+satcomp14/IBM_FV_2004_rule_batch_1_31_1_SAT_dat.k40.debugged.cnf.gz
+satcomp14/SAT_dat.k75-24_1_rule_3.cnf.gz
+satcomp14/SAT_dat.k70-24_1_rule_1.cnf.gz
+satcomp14/SAT_dat.k30-30_rule.cnf.gz
+satcomp14/aaai10-planning-ipc5-pathways-17-step21.cnf.gz
+satcomp14/vmpc_33.cnf.gz
+satcomp14/SAT_dat.k70-24_1_rule_3.cnf.gz
+satcomp14/aes_24_4_keyfind_5.cnf.gz
+satcomp14/atco_enc3_opt2_18_44.cnf.gz
+satcomp14/dated-10-17-u.cnf.gz
+satcomp14/aes_32_3_keyfind_1.cnf.gz
+satcomp14/atco_enc1_opt2_20_12.cnf.gz
+satcomp14/reg_s_2_unknown.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq9.cnf.gz
+satcomp14/hwmcc10-timeframe-expansion-k50-pdtvisns3p00-tseitin.cnf.gz
+satcomp14/UCG-20-10p1.cnf.gz
+satcomp14/UCG-20-10p0.cnf.gz
+satcomp14/atco_enc3_opt2_10_12.cnf.gz
+satcomp14/atco_enc3_opt2_05_21.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq8.used-as.sat04-718.cnf.gz
+satcomp14/11pipe_k.cnf.gz
+satcomp14/gss-20-s100.cnf.gz
+satcomp14/002-80-12.cnf.gz
+satcomp14/atco_enc2_opt2_10_21.cnf.gz
+satcomp14/atco_enc3_opt2_10_14.cnf.gz
+satcomp14/UTI-20-10p1.cnf.gz
+satcomp14/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp14/velev-vliw-uns-4.0-9-i1.cnf.gz
+satcomp14/010-80-12.cnf.gz
+satcomp14/001-80-12.cnf.gz
+satcomp14/007-80-12.cnf.gz
+satcomp14/008-80-12.cnf.gz
+satcomp14/009-80-8.cnf.gz
+satcomp14/ACG-20-5p1.cnf.gz
+satcomp14/atco_enc3_opt1_13_48.cnf.gz
+satcomp14/stable-400-0.1-12-98765432140012.cnf.gz
+satcomp14/004-80-8.cnf.gz
+satcomp14/14pipe_q0_k.cnf.gz
+satcomp14/ACG-20-5p0.cnf.gz
+satcomp14/002-80-8.cnf.gz
+satcomp14/003-80-8.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq7.cnf.gz
+satcomp14/aaai10-planning-ipc5-TPP-21-step11.cnf.gz
+satcomp14/atco_enc1_opt1_10_15.cnf.gz
+satcomp14/AProVE09-06.cnf.gz
+satcomp14/008-80-8.cnf.gz
+satcomp14/ACG-15-10p1.cnf.gz
+satcomp14/atco_enc2_opt2_05_9.cnf.gz
+satcomp14/bob12m02-opt.cnf.gz
+satcomp14/007-80-8.cnf.gz
+satcomp14/blocks-blocks-36-0.120-NOTKNOWN.cnf.gz
+satcomp14/atco_enc3_opt1_04_50.cnf.gz
+satcomp14/13pipe_q0_k.cnf.gz
+satcomp14/UR-15-10p0.cnf.gz
+satcomp14/gss-19-s100.cnf.gz
+satcomp14/AProVE07-27.cnf.gz
+satcomp14/bjrb07amba10andenv.cnf.gz
+satcomp14/partial-10-11-s.cnf.gz
+satcomp14/korf-17.cnf.gz
+satcomp14/vmpc_32.renamed-as.sat05-1919.cnf.gz
+satcomp14/atco_enc2_opt1_20_11.cnf.gz
+satcomp14/ACG-15-10p0.cnf.gz
+satcomp14/UR-15-10p1.cnf.gz
+satcomp14/atco_enc1_opt1_10_21.cnf.gz
+satcomp14/UCG-15-10p0.cnf.gz
+satcomp14/atco_enc2_opt1_10_21.cnf.gz
+satcomp14/UCG-20-5p0.cnf.gz
+satcomp14/blocks-blocks-37-1.130-NOTKNOWN.cnf.gz
+satcomp14/UCG-15-10p1.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq6.used-as.sat04-347.cnf.gz
+satcomp14/005-80-12.cnf.gz
+satcomp14/atco_enc1_opt2_10_14.cnf.gz
+satcomp14/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp14/UTI-20-10p0.cnf.gz
+satcomp14/atco_enc1_opt2_10_15.cnf.gz
+satcomp14/atco_enc2_opt2_20_11.cnf.gz
+satcomp14/006-80-4.cnf.gz
+satcomp14/bob12m02.cnf.gz
+satcomp14/009-80-4.cnf.gz
+satcomp14/6s16-opt.cnf.gz
+satcomp14/countbitssrl032.cnf.gz
+satcomp14/stable-400-0.1-7-9876543214007.cnf.gz
+satcomp14/E02F22.cnf.gz
+satcomp14/12pipe_q0_k.cnf.gz
+satcomp14/008-80-4.cnf.gz
+satcomp14/atco_enc3_opt1_03_53.cnf.gz
+satcomp14/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp14/6s12.cnf.gz
+satcomp14/bob12s02.cnf.gz
+satcomp14/6s16.cnf.gz
+satcomp14/dated-10-13-u.cnf.gz
+satcomp14/6s184.cnf.gz
+satcomp14/UR-20-5p0.cnf.gz
+satcomp14/6s131-opt.cnf.gz
+satcomp14/6s17-opt.cnf.gz
+satcomp14/6s9.cnf.gz
+satcomp14/6s10.cnf.gz
+satcomp14/6s11-opt.cnf.gz
+satcomp14/6s13-opt.cnf.gz
+satcomp14/UTI-20-5p1.cnf.gz
+satcomp14/bob12m09-opt.cnf.gz
+satcomp14/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp14/velev-vliw-uns-2.0-uq5.cnf.gz
+satcomp14/6s130-opt.cnf.gz
+satcomp14/stable-300-0.1-20-98765432130020.cnf.gz
+satcomp14/atco_enc1_opt2_10_12.cnf.gz
+satcomp14/dated-10-11-u.cnf.gz
+satcomp14/grieu-vmpc-31.cnf.gz
+satcomp14/11pipe_q0_k.cnf.gz
+satcomp14/6s133.cnf.gz
+satcomp14/AProVE07-08.cnf.gz
+satcomp14/UCG-20-5p1.cnf.gz
+satcomp14/10pipe_q0_k.cnf.gz
+satcomp14/esawn_uw3.debugged.cnf.gz
+satcomp14/grid-strips-grid-y-3.055-NOTKNOWN.cnf.gz
+satcomp14/atco_enc2_opt2_05_4.cnf.gz
+satcomp14/minxor128.cnf.gz
+satcomp14/vmpc_29.cnf.gz
+satcomp14/002-80-4.cnf.gz
+satcomp14/bob12s09-opt.cnf.gz
+satcomp14/manol-pipe-c10nidw.cnf.gz
+satcomp14/partial-5-17-s.cnf.gz
+satcomp14/total-10-13-u.cnf.gz
+satcomp14/atco_enc1_opt1_18_18.cnf.gz
+satcomp14/minxorminand064.cnf.gz
+satcomp14/manol-pipe-g10bid_i.cnf.gz
+satcomp14/grid-strips-grid-y-3.065-SAT.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug1.cnf.gz
+satcomp14/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.050-NOTKNOWN.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq4.cnf.gz
+satcomp14/atco_enc1_opt1_04_32.cnf.gz
+satcomp14/blocks-blocks-36-0.130-NOTKNOWN.cnf.gz
+satcomp14/q_query_3_l48_lambda.cnf.gz
+satcomp14/manol-pipe-c10nid_i.cnf.gz
+satcomp14/grid-strips-grid-y-3.035-NOTKNOWN.cnf.gz
+satcomp14/atco_enc1_opt2_05_4.cnf.gz
+satcomp14/q_query_3_l46_lambda.cnf.gz
+satcomp14/q_query_3_l45_lambda.cnf.gz
+satcomp14/gss-18-s100.cnf.gz
+satcomp14/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp14/6s169-opt.cnf.gz
+satcomp14/pb_300_10_lb_08.cnf.gz
+satcomp14/8pipe_k.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug9.cnf.gz
+satcomp14/q_query_3_L200_coli.sat.cnf.gz
+satcomp14/AProVE07-03.cnf.gz
+satcomp14/velev-vliw-uns-4.0-9.cnf.gz
+satcomp14/beempgsol5b1.cnf.gz
+satcomp14/beempgsol2b1.cnf.gz
+satcomp14/post-cbmc-aes-ee-r2-noholes.cnf.gz
+satcomp14/E02F20.cnf.gz
+satcomp14/post-c32s-ss-8.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug8.cnf.gz
+satcomp14/manol-pipe-c8nidw.cnf.gz
+satcomp14/atco_enc1_opt1_03_56.cnf.gz
+satcomp14/post-cbmc-aes-d-r2.cnf.gz
+satcomp14/post-cbmc-aes-d-r2-noholes.cnf.gz
+satcomp14/c10bi_i.cnf.gz
+satcomp14/q_query_3_L150_coli.sat.cnf.gz
+satcomp14/bob12m04.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq3.cnf.gz
+satcomp14/atco_enc2_opt1_15_100.cnf.gz
+satcomp14/partial-5-15-s.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug7.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug10.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug4.cnf.gz
+satcomp14/9vliw_m_9stages_iq3_C1_bug3.cnf.gz
+satcomp14/6s167-opt.cnf.gz
+satcomp14/zfcp-2.8-u2-nh.cnf.gz
+satcomp14/6s153.cnf.gz
+satcomp14/post-cbmc-zfcp-2.8-u2.cnf.gz
+satcomp14/7pipe_k.cnf.gz
+satcomp14/pb_300_10_lb_07.cnf.gz
+satcomp14/atco_enc1_opt1_15_240.cnf.gz
+satcomp14/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.085-SAT.cnf.gz
+satcomp14/openstacks-p30_3.085-SAT.cnf.gz
+satcomp14/atco_enc1_opt1_05_21.cnf.gz
+satcomp14/q_query_3_L100_coli.sat.cnf.gz
+satcomp14/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp14/6s168-opt.cnf.gz
+satcomp14/MD5-27-4.cnf.gz
+satcomp14/maxxor032.cnf.gz
+satcomp14/q_query_3_L80_coli.sat.cnf.gz
+satcomp14/aaai10-planning-ipc5-TPP-30-step11.cnf.gz
+satcomp14/q_query_3_L90_coli.sat.cnf.gz
+satcomp14/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satcomp14/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp14/atco_enc2_opt1_05_21.cnf.gz
+satcomp14/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp14/manol-pipe-c10nidw_s.cnf.gz
+satcomp14/complete-500-0.1-17-98765432150017.cnf.gz
+satcomp14/complete-500-0.1-8-9876543215008.cnf.gz
+satcomp14/complete-500-0.1-7-9876543215007.cnf.gz
+satcomp14/complete-500-0.1-15-98765432150015.cnf.gz
+satcomp14/complete-500-0.1-1-9876543215001.cnf.gz
+satcomp14/6s165-nonopt.cnf.gz
+satcomp14/rbcl_xits_14_SAT.cnf.gz
+satcomp14/aes_64_1_keyfind_1.cnf.gz
+satcomp14/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp14/complete-400-0.1-3-9876543214003.cnf.gz
+satcomp14/complete-400-0.1-12-98765432140012.cnf.gz
+satcomp14/complete-400-0.1-16-98765432140016.cnf.gz
+satcomp14/rpoc_xits_15_SAT.cnf.gz
+satcomp14/complete-400-0.1-7-9876543214007.cnf.gz
+satcomp14/itox_vc1130.cnf.gz
+satcomp14/complete-300-0.1-4-9876543213004.cnf.gz
+satcomp14/complete-300-0.1-8-9876543213008.cnf.gz
+satcomp14/complete-300-0.1-18-98765432130018.cnf.gz
+satcomp14/complete-300-0.1-7-9876543213007.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp16_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp16_updated
new file mode 100644
index 000000000..21425bd38
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp16_updated
@@ -0,0 +1,300 @@
+satcomp16/10pipe_k.cnf.gz
+satcomp16/14pipe_q0_k.cnf.gz
+satcomp16/16pipe_16_ooo.cnf.gz
+satcomp16/1dlx_c_iq57_a.cnf.gz
+satcomp16/26_stack_cas_longest_true-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/9dlx_vliw_at_b_iq4.used-as.sat04-345.cnf.gz
+satcomp16/9dlx_vliw_at_b_iq8.used-as.sat04-718.cnf.gz
+satcomp16/9dlx_vliw_at_b_iq9.used-as.sat04-719.cnf.gz
+satcomp16/ACG-20-10p0.cnf.gz
+satcomp16/ACG-20-5p1.cnf.gz
+satcomp16/AProVE07-25.cnf.gz
+satcomp16/AProVE11-06.cnf.gz
+satcomp16/C168_FW_UT_518.cnf.gz
+satcomp16/E00N23.cnf.gz
+satcomp16/E02F22.cnf.gz
+satcomp16/Sz1024_34824.smt2-stp212.cnf.gz
+satcomp16/Sz512_15127_1.smt2-stp212.cnf.gz
+satcomp16/Sz512_15127_3.smt2-cvc4.cnf.gz
+satcomp16/Sz512_15127_4.smt2-cvc4.cnf.gz
+satcomp16/Sz512_15127_5.smt2-stp212.cnf.gz
+satcomp16/Sz512_15127_6.smt2-stp212.cnf.gz
+satcomp16/Sz512_15128_0.smt2-stp212.cnf.gz
+satcomp16/Sz512_15128_1.smt2-cvc4.cnf.gz
+satcomp16/UCG-20-5p1.cnf.gz
+satcomp16/UR-15-10p0.cnf.gz
+satcomp16/UTI-20-10p1.cnf.gz
+satcomp16/UTI-20-5p1.cnf.gz
+satcomp16/abb313GPIA-9-c.used-as.sat04-317.cnf.gz
+satcomp16/ablmulub16x4o.cnf.gz
+satcomp16/ablmulub2x32o.cnf.gz
+satcomp16/ablmulub8x16o.cnf.gz
+satcomp16/add_01_1000_4.smt2-cvc4.cnf.gz
+satcomp16/aes_32_3_keyfind_2.cnf.gz
+satcomp16/aes_32_5_keyfind_1.cnf.gz
+satcomp16/aes_64_2_keyfind_1.cnf.gz
+satcomp16/aes_64_3_keyfind_1.cnf.gz
+satcomp16/ak016modbtsimpbisc.cnf.gz
+satcomp16/ak032diagodiagoisc.cnf.gz
+satcomp16/ak032modbtmodbtisc.cnf.gz
+satcomp16/ak032modbtsimpbisc.cnf.gz
+satcomp16/ak064boothboothisc.cnf.gz
+satcomp16/ak064diagodiagoisc.cnf.gz
+satcomp16/ak064modasbg2asisc.cnf.gz
+satcomp16/ak064modbtmodbtisc.cnf.gz
+satcomp16/ak064paralbg2btaig.cnf.gz
+satcomp16/ak064paralparalisc.cnf.gz
+satcomp16/ak064simpbbg2btaig.cnf.gz
+satcomp16/ak128astepbg2msaig.cnf.gz
+satcomp16/ak128boothbg2btisc.cnf.gz
+satcomp16/ak128boothboothisc.cnf.gz
+satcomp16/ak128diagobg2asaig.cnf.gz
+satcomp16/ak128modasbg2asisc.cnf.gz
+satcomp16/ak128modbtbg2msisc.cnf.gz
+satcomp16/ak128paralbg2msisc.cnf.gz
+satcomp16/ak128paralparalisc.cnf.gz
+satcomp16/ak128simpbbg2msisc.cnf.gz
+satcomp16/am_7_7.shuffled-as.sat03-363.cnf.gz
+satcomp16/am_9_9.cnf.gz
+satcomp16/arcfour_initialPermutation_5_32.cnf.gz
+satcomp16/arcfour_initialPermutation_6_14.cnf.gz
+satcomp16/barman-pfile06-022.sas.ex.7.cnf.gz
+satcomp16/barman-pfile07-027.sas.cr.37.cnf.gz
+satcomp16/barman-pfile07-028.sas.ex.15.cnf.gz
+satcomp16/barman-pfile08-030.sas.cr.27.cnf.gz
+satcomp16/barman-pfile08-032.sas.ex.15.cnf.gz
+satcomp16/barman-pfile08-032.sas.ex.7.cnf.gz
+satcomp16/barman-pfile09-036.sas.cr.33.cnf.gz
+satcomp16/barman-pfile10-037.sas.ex.7.cnf.gz
+satcomp16/barman-pfile10-038.sas.cr.25.cnf.gz
+satcomp16/barman-pfile10-038.sas.ex.15.cnf.gz
+satcomp16/barman-pfile10-039.sas.ex.15.cnf.gz
+satcomp16/barman-pfile10-040.sas.cr.17.cnf.gz
+satcomp16/barman-pfile10-040.sas.cr.21.cnf.gz
+satcomp16/barman-pfile10-040.sas.ex.15.cnf.gz
+satcomp16/countbitsarray04_32.cnf.gz
+satcomp16/countbitssrl128.cnf.gz
+satcomp16/ctl_3791_556_unsat.cnf.gz
+satcomp16/ctl_4291_567_8_unsat.cnf.gz
+satcomp16/cube-11-h13-unsat.cnf.gz
+satcomp16/custmulsb2x32o.cnf.gz
+satcomp16/custmulun16x16o.cnf.gz
+satcomp16/dated-10-19-u.cnf.gz
+satcomp16/div2.c.20.smt2-stp212.cnf.gz
+satcomp16/e2_1.c.smt2-stp212.cnf.gz
+satcomp16/e2_2.c.smt2-cvc4.cnf.gz
+satcomp16/e2a_2.c.smt2-cvc4.cnf.gz
+satcomp16/eq.atree.braun.11.unsat.cnf.gz
+satcomp16/eq.atree.braun.12.unsat.cnf.gz
+satcomp16/eq.atree.braun.13.unsat.cnf.gz
+satcomp16/esawn_uw3.debugged.cnf.gz
+satcomp16/f1000.cnf.gz
+satcomp16/f600.cnf.gz
+satcomp16/g250.29.cnf.gz
+satcomp16/gaussian.c.75.smt2-cvc4.cnf.gz
+satcomp16/gripper14u.cnf.gz
+satcomp16/gss-20-s100.cnf.gz
+satcomp16/gss-24-s100.cnf.gz
+satcomp16/gss-26-s100.cnf.gz
+satcomp16/gss-27-s100.cnf.gz
+satcomp16/gss-28-s100.cnf.gz
+satcomp16/gss-29-s100.cnf.gz
+satcomp16/gus-md5-10.cnf.gz
+satcomp16/gus-md5-12.cnf.gz
+satcomp16/hitag2-8-60-0-0xb2021557d918860-94.cnf.gz
+satcomp16/homer17.cnf.gz
+satcomp16/ibm-2002-23r-k90.cnf.gz
+satcomp16/k2mul.miter.cnf.gz
+satcomp16/k_unsat.cnf.gz
+satcomp16/korf-18.cnf.gz
+satcomp16/li-exam-61.cnf.gz
+satcomp16/li-exam-61.shuffled-as.sat03-366.cnf.gz
+satcomp16/li-exam-62.cnf.gz
+satcomp16/li-exam-63.cnf.gz
+satcomp16/li-test4-100.cnf.gz
+satcomp16/li-test4-95.cnf.gz
+satcomp16/li-test4-96.cnf.gz
+satcomp16/li-test4-98.cnf.gz
+satcomp16/li-test4-99.cnf.gz
+satcomp16/maxor128.cnf.gz
+satcomp16/maxxororand032.cnf.gz
+satcomp16/minxorminand128.cnf.gz
+satcomp16/mix034_rmo.opt_false-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/miza-sr06-md5-48-01.cnf.gz
+satcomp16/mizh-md5-47-3.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-1006.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-11953.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-12992.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-13845.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-1434.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-14424.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-14808.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-15163.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-15606.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-1585.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-16597.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-1876.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-18788.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-18972.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-19419.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-2087.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-21438.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-22556.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-25297.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-28046.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-29020.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-3230.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-3866.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-4208.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-5377.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-6295.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-6336.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-6967.cnf.gz
+satcomp16/modgen-n200-m90860q08c40-9056.cnf.gz
+satcomp16/mul_03_3000_1.smt2-cvc4.cnf.gz
+satcomp16/mulhs016.cnf.gz
+satcomp16/mulhs032.cnf.gz
+satcomp16/mulhs064.cnf.gz
+satcomp16/ndhf_xits_09_UNSAT.cnf.gz
+satcomp16/ndhf_xits_17_UNKNOWN.cnf.gz
+satcomp16/newton.2.2.i.smt2-cvc4.cnf.gz
+satcomp16/newton.2.3.i.smt2-cvc4.cnf.gz
+satcomp16/newton.2.3.i.smt2-stp212.cnf.gz
+satcomp16/newton.3.3.i.smt2-stp212.cnf.gz
+satcomp16/newton.4.3.i.smt2-stp212.cnf.gz
+satcomp16/newton.5.1.i.smt2-cvc4.cnf.gz
+satcomp16/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.035-NOTKNOWN.cnf.gz
+satcomp16/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.045-NOTKNOWN.cnf.gz
+satcomp16/par32-1-c.cnf.gz
+satcomp16/par32-3-c.cnf.gz
+satcomp16/partial-10-13-u.cnf.gz
+satcomp16/partial-10-15-s.cnf.gz
+satcomp16/partial-10-19-s.cnf.gz
+satcomp16/partial-10-19-u.cnf.gz
+satcomp16/partial-5-11-u.cnf.gz
+satcomp16/partial-5-15-u.cnf.gz
+satcomp16/partial-5-17-u.cnf.gz
+satcomp16/partial-5-19-u.cnf.gz
+satcomp16/pb_400_02_lb_15.cnf.gz
+satcomp16/podwr001_power.opt_false-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/q_query_3_L200_coli.sat.cnf.gz
+satcomp16/qurt.c.20.smt2-cvc4.cnf.gz
+satcomp16/rbcl_xits_09_UNKNOWN.cnf.gz
+satcomp16/rbcl_xits_11_UNKNOWN.cnf.gz
+satcomp16/rbcl_xits_13_UNKNOWN.cnf.gz
+satcomp16/rpoc_xits_08_UNSAT.cnf.gz
+satcomp16/rpoc_xits_09_UNSAT.cnf.gz
+satcomp16/rpoc_xits_10_UNKNOWN.cnf.gz
+satcomp16/rpoc_xits_11_UNKNOWN.cnf.gz
+satcomp16/rpoc_xits_14_UNKNOWN.cnf.gz
+satcomp16/safe-30-h29-unsat.cnf.gz
+satcomp16/safe009_pso.oepc_true-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/safe027_pso.opt_true-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/safe028_tso.oepc_true-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/safe029_power.opt_false-unreach-call.i-cbmc-u2.cnf.gz
+satcomp16/sat_prob_143.cnf.gz
+satcomp16/sat_prob_23.cnf.gz
+satcomp16/sat_prob_3.cnf.gz
+satcomp16/sat_prob_63.cnf.gz
+satcomp16/sat_prob_83.cnf.gz
+satcomp16/schup-l2s-bc56s-1-k391.cnf.gz
+satcomp16/servers_slapd_a_vc149923.cnf.gz
+satcomp16/sin.c.75.smt2-cvc4.cnf.gz
+satcomp16/sin2.c.2.smt2-cvc4.cnf.gz
+satcomp16/sin2.c.20.smt2-cvc4.cnf.gz
+satcomp16/slp-synthesis-aes-top21.cnf.gz
+satcomp16/slp-synthesis-aes-top23.cnf.gz
+satcomp16/slp-synthesis-aes-top26.cnf.gz
+satcomp16/smtlib-qfbv-aigs-VS3-benchmark-S2-tseitin.cnf.gz
+satcomp16/smulo128.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_07.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_08.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_09.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_10.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_11.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_12.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_13.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_14.cnf.gz
+satcomp16/sncf_model_ixl_bmc_depth_15.cnf.gz
+satcomp16/snw_13_8_CCSEncnopre.cnf.gz
+satcomp16/snw_13_8_CCSpreOptEncpre.cnf.gz
+satcomp16/snw_13_8_CCSpreOptnopre.cnf.gz
+satcomp16/snw_13_8_CCSpreOptpre.cnf.gz
+satcomp16/snw_13_8_pre.cnf.gz
+satcomp16/snw_13_9_CCSEncpre.cnf.gz
+satcomp16/snw_13_9_CCSpre.cnf.gz
+satcomp16/snw_13_9_Encpre.cnf.gz
+satcomp16/snw_13_9_pre.cnf.gz
+satcomp16/snw_13_9_preOptEncpre.cnf.gz
+satcomp16/snw_13_9_preOpt_pre.cnf.gz
+satcomp16/snw_16_8_nopre.cnf.gz
+satcomp16/snw_16_8_pre.cnf.gz
+satcomp16/snw_16_8_preOpt_pre.cnf.gz
+satcomp16/snw_16_9_CCSpre.cnf.gz
+satcomp16/snw_16_9_CCSpreOptpre.cnf.gz
+satcomp16/snw_16_9_Encpre.cnf.gz
+satcomp16/snw_16_9_pre.cnf.gz
+satcomp16/snw_16_9_preOptEncpre.cnf.gz
+satcomp16/snw_16_9_preOpt_pre.cnf.gz
+satcomp16/snw_17_9_CCSpreOptEncpre.cnf.gz
+satcomp16/sokoban-p01.sas.ex.17.cnf.gz
+satcomp16/sokoban-p04.sas.ex.13.cnf.gz
+satcomp16/sokoban-p09.sas.cr.25.cnf.gz
+satcomp16/sokoban-p10.sas.cr.35.cnf.gz
+satcomp16/sokoban-p16.sas.cr.37.cnf.gz
+satcomp16/sokoban-p16.sas.cr.39.cnf.gz
+satcomp16/sokoban-p16.sas.ex.15.cnf.gz
+satcomp16/sokoban-p16.sas.ex.17.cnf.gz
+satcomp16/sokoban-p16.sas.ex.19.cnf.gz
+satcomp16/sokoban-p16.sas.ex.21.cnf.gz
+satcomp16/sokoban-p16.sas.ex.23.cnf.gz
+satcomp16/sokoban-p17.sas.ex.11.cnf.gz
+satcomp16/sokoban-p18.sas.cr.29.cnf.gz
+satcomp16/sokoban-p19.sas.cr.23.cnf.gz
+satcomp16/sokoban-p20.sas.cr.21.cnf.gz
+satcomp16/sokoban-p20.sas.cr.23.cnf.gz
+satcomp16/sokoban-p20.sas.cr.25.cnf.gz
+satcomp16/sokoban-p20.sas.cr.27.cnf.gz
+satcomp16/sokoban-p20.sas.cr.29.cnf.gz
+satcomp16/sokoban-p20.sas.cr.31.cnf.gz
+satcomp16/sokoban-p20.sas.cr.33.cnf.gz
+satcomp16/sokoban-p20.sas.cr.35.cnf.gz
+satcomp16/sokoban-p20.sas.cr.37.cnf.gz
+satcomp16/sokoban-p20.sas.cr.39.cnf.gz
+satcomp16/sokoban-p20.sas.ex.11.cnf.gz
+satcomp16/sokoban-p20.sas.ex.13.cnf.gz
+satcomp16/sokoban-p20.sas.ex.15.cnf.gz
+satcomp16/sokoban-p20.sas.ex.17.cnf.gz
+satcomp16/sokoban-p20.sas.ex.19.cnf.gz
+satcomp16/sokoban-p20.sas.ex.21.cnf.gz
+satcomp16/sokoban-p20.sas.ex.23.cnf.gz
+satcomp16/sokoban-sequential-p145-microban-sequential.050-NOTKNOWN.cnf.gz
+satcomp16/sokoban-sequential-p145-microban-sequential.070-NOTKNOWN.cnf.gz
+satcomp16/sortnet-7-ipc5-h15-unsat.cnf.gz
+satcomp16/sortnet-8-ipc5-h18-unsat.cnf.gz
+satcomp16/square.2.0.i.smt2-cvc4.cnf.gz
+satcomp16/test_v3_r3_vr10_c1_s24300.smt2-stp212.cnf.gz
+satcomp16/test_v3_r8_vr5_c1_s8257.smt2-stp212.cnf.gz
+satcomp16/test_v5_r5_vr1_c1_s15604.smt2-stp212.cnf.gz
+satcomp16/test_v7_r12_vr10_c1_s18160.smt2-cvc4.cnf.gz
+satcomp16/test_v7_r12_vr10_c1_s18160.smt2-stp212.cnf.gz
+satcomp16/test_v7_r12_vr1_c1_s22787.smt2-cvc4.cnf.gz
+satcomp16/test_v7_r17_vr10_c1_s3680.smt2-stp212.cnf.gz
+satcomp16/test_v7_r17_vr1_c1_s30331.smt2-stp212.cnf.gz
+satcomp16/test_v7_r17_vr5_c1_s25451.smt2-cvc4.cnf.gz
+satcomp16/test_v7_r17_vr5_c1_s2807.smt2-stp212.cnf.gz
+satcomp16/test_v7_r7_vr10_c1_s32506.smt2-cvc4.cnf.gz
+satcomp16/total-10-13-u.cnf.gz
+satcomp16/total-10-19-u.cnf.gz
+satcomp16/total-5-17-u.cnf.gz
+satcomp16/traffic_3_uc_sat.cnf.gz
+satcomp16/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp16/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.050-SAT.cnf.gz
+satcomp16/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp16/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp16/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-SAT.cnf.gz
+satcomp16/uum16.smt2-cvc4.cnf.gz
+satcomp16/uum8.smt2-stp212.cnf.gz
+satcomp16/valves-gates-1-k617-unsat.cnf.gz
+satcomp16/velev-pipe-oun-1.1-05.cnf.gz
+satcomp16/velev-vliw-uns-2.0-uq5.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp17_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp17_updated
new file mode 100644
index 000000000..29894b0b4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satcomp17_updated
@@ -0,0 +1,350 @@
+satcomp17/g2-ACG-15-10p1.cnf.gz
+satcomp17/g2-ACG-20-10p1.cnf.gz
+satcomp17/g2-ACG-20-5p1.cnf.gz
+satcomp17/g2-Sz512_15128_1.smt2-cvc4.cnf.gz
+satcomp17/g2-T1.2.1.cnf.gz
+satcomp17/g2-T100.2.0.cnf.gz
+satcomp17/g2-T101.2.0.cnf.gz
+satcomp17/g2-T102.2.1.cnf.gz
+satcomp17/g2-T103.2.1.cnf.gz
+satcomp17/g2-T104.1.0.cnf.gz
+satcomp17/g2-T105.2.1.cnf.gz
+satcomp17/g2-T106.2.0.cnf.gz
+satcomp17/g2-T108.2.1.cnf.gz
+satcomp17/g2-T109.2.0.cnf.gz
+satcomp17/g2-T110.2.1.cnf.gz
+satcomp17/g2-T112.1.0.cnf.gz
+satcomp17/g2-T118.2.1.cnf.gz
+satcomp17/g2-T122.1.0.cnf.gz
+satcomp17/g2-T124.2.0.cnf.gz
+satcomp17/g2-T124.2.1.cnf.gz
+satcomp17/g2-T133.2.1.cnf.gz
+satcomp17/g2-T135.1.1.cnf.gz
+satcomp17/g2-T141.1.0.cnf.gz
+satcomp17/g2-T154.1.0.cnf.gz
+satcomp17/g2-T155.1.0.cnf.gz
+satcomp17/g2-T169.1.0.cnf.gz
+satcomp17/g2-T169.2.0.cnf.gz
+satcomp17/g2-T49.2.0.cnf.gz
+satcomp17/g2-T50.2.0.cnf.gz
+satcomp17/g2-T55.2.0.cnf.gz
+satcomp17/g2-T58.2.0.cnf.gz
+satcomp17/g2-T65.2.0.cnf.gz
+satcomp17/g2-T65.2.1.cnf.gz
+satcomp17/g2-T75.2.0.cnf.gz
+satcomp17/g2-T81.2.1.cnf.gz
+satcomp17/g2-T83.2.1.cnf.gz
+satcomp17/g2-T85.2.1.cnf.gz
+satcomp17/g2-T88.2.1.cnf.gz
+satcomp17/g2-T89.2.1.cnf.gz
+satcomp17/g2-T93.2.1.cnf.gz
+satcomp17/g2-T96.1.1.cnf.gz
+satcomp17/g2-T97.2.1.cnf.gz
+satcomp17/g2-T99.2.0.cnf.gz
+satcomp17/g2-T99.2.1.cnf.gz
+satcomp17/g2-UCG-15-10p1.cnf.gz
+satcomp17/g2-UCG-20-10p1.cnf.gz
+satcomp17/g2-UCG-20-5p1.cnf.gz
+satcomp17/g2-UR-20-10p1.cnf.gz
+satcomp17/g2-UR-20-5p1.cnf.gz
+satcomp17/g2-UTI-20-10p1.cnf.gz
+satcomp17/g2-UTI-20-5p1.cnf.gz
+satcomp17/g2-ak128astepbg1btisc.cnf.gz
+satcomp17/g2-ak128astepbg2asisc.cnf.gz
+satcomp17/g2-ak128astepbg2msaig.cnf.gz
+satcomp17/g2-ak128astepbg2msisc.cnf.gz
+satcomp17/g2-ak128astepmodasaig.cnf.gz
+satcomp17/g2-ak128astepmodbtisc.cnf.gz
+satcomp17/g2-ak128boothbg1btisc.cnf.gz
+satcomp17/g2-ak128boothbg2asisc.cnf.gz
+satcomp17/g2-ak128boothbg2msaig.cnf.gz
+satcomp17/g2-ak128boothbg2msisc.cnf.gz
+satcomp17/g2-ak128boothboothisc.cnf.gz
+satcomp17/g2-ak128boothdiagoaig.cnf.gz
+satcomp17/g2-ak128boothmodasaig.cnf.gz
+satcomp17/g2-ak128diagobg1btaig.cnf.gz
+satcomp17/g2-ak128diagobg2asaig.cnf.gz
+satcomp17/g2-ak128diagodiagoisc.cnf.gz
+satcomp17/g2-ak128modasbg1msisc.cnf.gz
+satcomp17/g2-ak128modasbg1sbisc.cnf.gz
+satcomp17/g2-ak128modasmodasisc.cnf.gz
+satcomp17/g2-ak128modbtbg1asaig.cnf.gz
+satcomp17/g2-ak128modbtbg1asisc.cnf.gz
+satcomp17/g2-ak128modbtbg1btaig.cnf.gz
+satcomp17/g2-ak128modbtbg2msisc.cnf.gz
+satcomp17/g2-ak128modbtsimpbaig.cnf.gz
+satcomp17/g2-ak128paralbg1sbisc.cnf.gz
+satcomp17/g2-ak128paralbg2asaig.cnf.gz
+satcomp17/g2-ak128paralparalisc.cnf.gz
+satcomp17/g2-ak128paralsimpbaig.cnf.gz
+satcomp17/g2-ak128simpbbg1sbisc.cnf.gz
+satcomp17/g2-ak128simpbbg2asaig.cnf.gz
+satcomp17/g2-gss-22-s100.cnf.gz
+satcomp17/g2-gss-24-s100.cnf.gz
+satcomp17/g2-gss-26-s100.cnf.gz
+satcomp17/g2-gss-28-s100.cnf.gz
+satcomp17/g2-gss-30-s100.cnf.gz
+satcomp17/g2-gss-32-s100.cnf.gz
+satcomp17/g2-gss-34-s100.cnf.gz
+satcomp17/g2-gss-36-s100.cnf.gz
+satcomp17/g2-gss-38-s100.cnf.gz
+satcomp17/g2-gss-40-s100.cnf.gz
+satcomp17/g2-hwmcc15deep-6s105-k35.cnf.gz
+satcomp17/g2-hwmcc15deep-6s161-k17.cnf.gz
+satcomp17/g2-hwmcc15deep-6s161-k18.cnf.gz
+satcomp17/g2-hwmcc15deep-6s179-k17.cnf.gz
+satcomp17/g2-hwmcc15deep-6s188-k44.cnf.gz
+satcomp17/g2-hwmcc15deep-6s188-k46.cnf.gz
+satcomp17/g2-hwmcc15deep-6s33-k33.cnf.gz
+satcomp17/g2-hwmcc15deep-6s33-k34.cnf.gz
+satcomp17/g2-hwmcc15deep-6s340rb63-k16.cnf.gz
+satcomp17/g2-hwmcc15deep-6s340rb63-k22.cnf.gz
+satcomp17/g2-hwmcc15deep-6s341r-k16.cnf.gz
+satcomp17/g2-hwmcc15deep-6s341r-k19.cnf.gz
+satcomp17/g2-hwmcc15deep-6s366r-k72.cnf.gz
+satcomp17/g2-hwmcc15deep-6s399b02-k02.cnf.gz
+satcomp17/g2-hwmcc15deep-6s399b03-k02.cnf.gz
+satcomp17/g2-hwmcc15deep-6s44-k38.cnf.gz
+satcomp17/g2-hwmcc15deep-6s44-k40.cnf.gz
+satcomp17/g2-hwmcc15deep-6s516r-k17.cnf.gz
+satcomp17/g2-hwmcc15deep-6s516r-k18.cnf.gz
+satcomp17/g2-hwmcc15deep-beembkry8b1-k45.cnf.gz
+satcomp17/g2-hwmcc15deep-beemcmbrdg7f2-k32.cnf.gz
+satcomp17/g2-hwmcc15deep-beemfwt4b1-k48.cnf.gz
+satcomp17/g2-hwmcc15deep-beemhanoi4b1-k32.cnf.gz
+satcomp17/g2-hwmcc15deep-beemhanoi4b1-k37.cnf.gz
+satcomp17/g2-hwmcc15deep-beemlifts3b1-k29.cnf.gz
+satcomp17/g2-hwmcc15deep-beemloyd3b1-k31.cnf.gz
+satcomp17/g2-hwmcc15deep-bob12s02-k16.cnf.gz
+satcomp17/g2-hwmcc15deep-bob12s02-k17.cnf.gz
+satcomp17/g2-hwmcc15deep-bobpcihm-k30.cnf.gz
+satcomp17/g2-hwmcc15deep-bobpcihm-k31.cnf.gz
+satcomp17/g2-hwmcc15deep-bobpcihm-k32.cnf.gz
+satcomp17/g2-hwmcc15deep-bobpcihm-k33.cnf.gz
+satcomp17/g2-hwmcc15deep-intel032-k84.cnf.gz
+satcomp17/g2-hwmcc15deep-intel065-k11.cnf.gz
+satcomp17/g2-hwmcc15deep-intel066-k10.cnf.gz
+satcomp17/g2-hwmcc15deep-oski15a10b06s-k24.cnf.gz
+satcomp17/g2-hwmcc15deep-oski15a10b08s-k23.cnf.gz
+satcomp17/g2-hwmcc15deep-oski15a10b10s-k20.cnf.gz
+satcomp17/g2-hwmcc15deep-oski15a10b10s-k22.cnf.gz
+satcomp17/g2-hwmcc15deep-oski15a14b04s-k16.cnf.gz
+satcomp17/g2-hwmcc15deep-oski15a14b30s-k24.cnf.gz
+satcomp17/g2-mizh-md5-47-3.cnf.gz
+satcomp17/g2-mizh-md5-47-5.cnf.gz
+satcomp17/g2-mizh-md5-48-2.cnf.gz
+satcomp17/g2-mizh-md5-48-5.cnf.gz
+satcomp17/g2-modgen-n200-m90860q08c40-13698.cnf.gz
+satcomp17/g2-modgen-n200-m90860q08c40-16823.cnf.gz
+satcomp17/g2-modgen-n200-m90860q08c40-29667.cnf.gz
+satcomp17/g2-modgen-n200-m90860q08c40-3230.cnf.gz
+satcomp17/g2-modgen-n200-m90860q08c40-6967.cnf.gz
+satcomp17/g2-mult1.c.50.smt2-cvc4.cnf.gz
+satcomp17/g2-newton.8.3.i.smt2-cvc4.cnf.gz
+satcomp17/g2-slp-synthesis-aes-top24.cnf.gz
+satcomp17/g2-slp-synthesis-aes-top25.cnf.gz
+satcomp17/g2-slp-synthesis-aes-top26.cnf.gz
+satcomp17/g2-slp-synthesis-aes-top28.cnf.gz
+satcomp17/g2-slp-synthesis-aes-top29.cnf.gz
+satcomp17/g2-slp-synthesis-aes-top30.cnf.gz
+satcomp17/g2-test_v5_r10_vr10_c1_s21502.smt2-cvc4.cnf.gz
+satcomp17/g2-test_v7_r7_vr5_c1_s14675.smt2-cvc4.cnf.gz
+satcomp17/mp1-21.0.cnf.gz
+satcomp17/mp1-21.1.cnf.gz
+satcomp17/mp1-21.2.cnf.gz
+satcomp17/mp1-21.3.cnf.gz
+satcomp17/mp1-21.4.cnf.gz
+satcomp17/mp1-21.5.cnf.gz
+satcomp17/mp1-21.6.cnf.gz
+satcomp17/mp1-21.7.cnf.gz
+satcomp17/mp1-21.8.cnf.gz
+satcomp17/mp1-21.9.cnf.gz
+satcomp17/mp1-22.0.cnf.gz
+satcomp17/mp1-22.1.cnf.gz
+satcomp17/mp1-22.2.cnf.gz
+satcomp17/mp1-22.3.cnf.gz
+satcomp17/mp1-22.4.cnf.gz
+satcomp17/mp1-22.5.cnf.gz
+satcomp17/mp1-22.6.cnf.gz
+satcomp17/mp1-22.7.cnf.gz
+satcomp17/mp1-22.8.cnf.gz
+satcomp17/mp1-22.9.cnf.gz
+satcomp17/mp1-23.0.cnf.gz
+satcomp17/mp1-23.1.cnf.gz
+satcomp17/mp1-23.2.cnf.gz
+satcomp17/mp1-23.3.cnf.gz
+satcomp17/mp1-23.4.cnf.gz
+satcomp17/mp1-23.5.cnf.gz
+satcomp17/mp1-23.6.cnf.gz
+satcomp17/mp1-23.7.cnf.gz
+satcomp17/mp1-23.8.cnf.gz
+satcomp17/mp1-24.0.cnf.gz
+satcomp17/mp1-24.1.cnf.gz
+satcomp17/mp1-24.2.cnf.gz
+satcomp17/mp1-24.3.cnf.gz
+satcomp17/mp1-24.4.cnf.gz
+satcomp17/mp1-24.5.cnf.gz
+satcomp17/mp1-24.6.cnf.gz
+satcomp17/mp1-24.7.cnf.gz
+satcomp17/mp1-24.8.cnf.gz
+satcomp17/mp1-24.9.cnf.gz
+satcomp17/mp1-9_1.cnf.gz
+satcomp17/mp1-9_11.cnf.gz
+satcomp17/mp1-9_12.cnf.gz
+satcomp17/mp1-9_14.cnf.gz
+satcomp17/mp1-9_19.cnf.gz
+satcomp17/mp1-9_21.cnf.gz
+satcomp17/mp1-9_22.cnf.gz
+satcomp17/mp1-9_24.cnf.gz
+satcomp17/mp1-9_25.cnf.gz
+satcomp17/mp1-9_27.cnf.gz
+satcomp17/mp1-9_29.cnf.gz
+satcomp17/mp1-9_3.cnf.gz
+satcomp17/mp1-9_31.cnf.gz
+satcomp17/mp1-9_34.cnf.gz
+satcomp17/mp1-9_38.cnf.gz
+satcomp17/mp1-9_4.cnf.gz
+satcomp17/mp1-9_44.cnf.gz
+satcomp17/mp1-9_49.cnf.gz
+satcomp17/mp1-9_50.cnf.gz
+satcomp17/mp1-9_9.cnf.gz
+satcomp17/mp1-Nb5T06.cnf.gz
+satcomp17/mp1-Nb5T07.cnf.gz
+satcomp17/mp1-Nb5T14.cnf.gz
+satcomp17/mp1-Nb5T15.cnf.gz
+satcomp17/mp1-Nb5T16.cnf.gz
+satcomp17/mp1-Nb6T06.cnf.gz
+satcomp17/mp1-Nb6T07.cnf.gz
+satcomp17/mp1-Nb6T25.cnf.gz
+satcomp17/mp1-Nb6T27.cnf.gz
+satcomp17/mp1-Nb6T28.cnf.gz
+satcomp17/mp1-Nb6T29.cnf.gz
+satcomp17/mp1-Nb6T30.cnf.gz
+satcomp17/mp1-Nb7T07.cnf.gz
+satcomp17/mp1-Nb7T08.cnf.gz
+satcomp17/mp1-Nb7T42.cnf.gz
+satcomp17/mp1-Nb7T43.cnf.gz
+satcomp17/mp1-Nb7T44.cnf.gz
+satcomp17/mp1-Nb7T45.cnf.gz
+satcomp17/mp1-Nb7T46.cnf.gz
+satcomp17/mp1-blockpuzzle_5x10_s2_free5.cnf.gz
+satcomp17/mp1-blockpuzzle_5x10_s3_free4.cnf.gz
+satcomp17/mp1-blockpuzzle_5x10_s5_free3.cnf.gz
+satcomp17/mp1-blockpuzzle_5x10_s7_free4.cnf.gz
+satcomp17/mp1-blockpuzzle_5x10_s8_free3.cnf.gz
+satcomp17/mp1-blockpuzzle_5x12_s6_free3.cnf.gz
+satcomp17/mp1-blockpuzzle_7x10_s10_free4.cnf.gz
+satcomp17/mp1-blockpuzzle_7x10_s7_free8.cnf.gz
+satcomp17/mp1-blockpuzzle_7x10_s9_free6.cnf.gz
+satcomp17/mp1-blockpuzzle_8x8_s1_free4.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s1_free10.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s1_free7.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s1_free8.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s1_free9.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s4_free3.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s5_free3.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s7_free8.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s7_free9.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s8_free3.cnf.gz
+satcomp17/mp1-blockpuzzle_9x9_s8_free7.cnf.gz
+satcomp17/mp1-bsat180-648.cnf.gz
+satcomp17/mp1-bsat192-689.cnf.gz
+satcomp17/mp1-bsat201-707.cnf.gz
+satcomp17/mp1-bsat210-739.cnf.gz
+satcomp17/mp1-klieber2017s-0300-032-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0300-033-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0300-034-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0300-035-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0490-022-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0490-023-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0490-024-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0500-022-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0500-023-t12.cnf.gz
+satcomp17/mp1-klieber2017s-0500-024-t12.cnf.gz
+satcomp17/mp1-klieber2017s-1000-023-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1000-024-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1200-022-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1200-023-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1200-024-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1600-022-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1600-023-eq.cnf.gz
+satcomp17/mp1-klieber2017s-1600-024-eq.cnf.gz
+satcomp17/mp1-klieber2017s-2000-022-eq.cnf.gz
+satcomp17/mp1-klieber2017s-2000-023-eq.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.45_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.45_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.45_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.45_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.45_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.50_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.50_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.50_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.50_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.6_0_1.50_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.45_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.45_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.45_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.45_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.45_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.50_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.50_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.50_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.50_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.7_0_1.50_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.50_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.50_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.50_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.50_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.50_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.55_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.55_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.55_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.55_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.55_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.60_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.60_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.60_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.60_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.60_8.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.70_0.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.70_2.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.70_4.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.70_6.cnf.gz
+satcomp17/mp1-ps_5000_21250_3_0_0.8_0_1.70_8.cnf.gz
+satcomp17/mp1-qpr-bmp280-driver-14.cnf.gz
+satcomp17/mp1-qpr-bmp280-driver-5.cnf.gz
+satcomp17/mp1-rubikcube012.cnf.gz
+satcomp17/mp1-rubikcube031.cnf.gz
+satcomp17/mp1-rubikcube101.cnf.gz
+satcomp17/mp1-rubikcube120.cnf.gz
+satcomp17/mp1-rubikcube212.cnf.gz
+satcomp17/mp1-rubikcube220.cnf.gz
+satcomp17/mp1-rubikcube301.cnf.gz
+satcomp17/mp1-rubikcube312.cnf.gz
+satcomp17/mp1-rubikcube401.cnf.gz
+satcomp17/mp1-rubikcube420.cnf.gz
+satcomp17/mp1-rubikcube512.cnf.gz
+satcomp17/mp1-rubikcube520.cnf.gz
+satcomp17/mp1-rubikcube601.cnf.gz
+satcomp17/mp1-rubikcube612.cnf.gz
+satcomp17/mp1-rubikcube701.cnf.gz
+satcomp17/mp1-rubikcube720.cnf.gz
+satcomp17/mp1-rubikcube812.cnf.gz
+satcomp17/mp1-rubikcube820.cnf.gz
+satcomp17/mp1-rubikcube901.cnf.gz
+satcomp17/mp1-rubikcube912.cnf.gz
+satcomp17/mp1-squ_ali_s10x10_c39_abio_SAT.cnf.gz
+satcomp17/mp1-squ_ali_s10x10_c39_abix_SAT.cnf.gz
+satcomp17/mp1-squ_ali_s10x10_c39_bail_SAT.cnf.gz
+satcomp17/mp1-squ_ali_s10x10_c39_sinx_SAT.cnf.gz
+satcomp17/mp1-squ_ali_s10x10_c39_sinz_SAT.cnf.gz
+satcomp17/mp1-squ_any_s09x07_c27_abio_UNS.cnf.gz
+satcomp17/mp1-squ_any_s09x07_c27_abix_UNS.cnf.gz
+satcomp17/mp1-squ_any_s09x07_c27_bail_UNS.cnf.gz
+satcomp17/mp1-squ_any_s09x07_c27_sinx_UNS.cnf.gz
+satcomp17/mp1-squ_any_s09x07_c27_sinz_UNS.cnf.gz
+satcomp17/mp1-tri_ali_s11_c35_abio_UNS.cnf.gz
+satcomp17/mp1-tri_ali_s11_c35_abix_UNS.cnf.gz
+satcomp17/mp1-tri_ali_s11_c35_bail_UNS.cnf.gz
+satcomp17/mp1-tri_ali_s11_c35_sinx_UNS.cnf.gz
+satcomp17/mp1-tri_ali_s11_c35_sinz_UNS.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satrace15_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satrace15_updated
new file mode 100644
index 000000000..b256c5a09
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/satrace15_updated
@@ -0,0 +1,300 @@
+satrace15/002-80-12.cnf.gz
+satrace15/002-80-4.cnf.gz
+satrace15/002-80-8.cnf.gz
+satrace15/003-80-8.cnf.gz
+satrace15/004-80-8.cnf.gz
+satrace15/005-80-12.cnf.gz
+satrace15/007-80-12.cnf.gz
+satrace15/007-80-8.cnf.gz
+satrace15/008-80-12.cnf.gz
+satrace15/008-80-4.cnf.gz
+satrace15/008-80-8.cnf.gz
+satrace15/009-23-64.cnf.gz
+satrace15/009-80-4.cnf.gz
+satrace15/009-80-8.cnf.gz
+satrace15/010-22-144.cnf.gz
+satrace15/010-23-80.cnf.gz
+satrace15/010-80-12.cnf.gz
+satrace15/10pipe_q0_k.cnf.gz
+satrace15/11pipe_k.cnf.gz
+satrace15/13pipe_q0_k.cnf.gz
+satrace15/38bits_10.dimacs.cnf.gz
+satrace15/40bits_10.dimacs.cnf.gz
+satrace15/42bits_12.dimacs.cnf.gz
+satrace15/44bits_11.dimacs.cnf.gz
+satrace15/46bits_11.dimacs.cnf.gz
+satrace15/46bits_12.dimacs.cnf.gz
+satrace15/46bits_14.dimacs.cnf.gz
+satrace15/48bits_11.dimacs.cnf.gz
+satrace15/48bits_12.dimacs.cnf.gz
+satrace15/48bits_13.dimacs.cnf.gz
+satrace15/48bits_14.dimacs.cnf.gz
+satrace15/50bit.dimacs.cnf.gz
+satrace15/50bits_10.dimacs.cnf.gz
+satrace15/50bits_11.dimacs.cnf.gz
+satrace15/50bits_13.dimacs.cnf.gz
+satrace15/50bits_14.dimacs.cnf.gz
+satrace15/52bits_12.dimacs.cnf.gz
+satrace15/54bits_13.dimacs.cnf.gz
+satrace15/56bits_12.dimacs.cnf.gz
+satrace15/58bits_10.dimacs.cnf.gz
+satrace15/58bits_11.dimacs.cnf.gz
+satrace15/58bits_13.dimacs.cnf.gz
+satrace15/62bits_10.dimacs.cnf.gz
+satrace15/62bits_11.dimacs.cnf.gz
+satrace15/62bits_14.dimacs.cnf.gz
+satrace15/64bits_11.dimacs.cnf.gz
+satrace15/64bits_13.dimacs.cnf.gz
+satrace15/66bit.dimacs.cnf.gz
+satrace15/6s11-opt.cnf.gz
+satrace15/6s13-opt.cnf.gz
+satrace15/6s130-opt.cnf.gz
+satrace15/6s131-opt.cnf.gz
+satrace15/6s133.cnf.gz
+satrace15/6s151.cnf.gz
+satrace15/6s16-opt.cnf.gz
+satrace15/6s16.cnf.gz
+satrace15/6s165-nonopt.cnf.gz
+satrace15/6s167-opt.cnf.gz
+satrace15/6s168-opt.cnf.gz
+satrace15/6s169-opt.cnf.gz
+satrace15/6s17-opt.cnf.gz
+satrace15/6s9.cnf.gz
+satrace15/7pipe_k.cnf.gz
+satrace15/9dlx_vliw_at_b_iq8.used-as.sat04-718.cnf.gz
+satrace15/ACG-15-10p0.cnf.gz
+satrace15/ACG-20-10p1.cnf.gz
+satrace15/ACG-20-5p0.cnf.gz
+satrace15/AProVE07-03.cnf.gz
+satrace15/AProVE07-27.cnf.gz
+satrace15/AProVE09-06.cnf.gz
+satrace15/E02F20.cnf.gz
+satrace15/E02F22.cnf.gz
+satrace15/MD5-28-1.cnf.gz
+satrace15/MD5-29-2.cnf.gz
+satrace15/MD5-29-4.cnf.gz
+satrace15/MD5-29-5.cnf.gz
+satrace15/MD5-30-1.cnf.gz
+satrace15/MD5-30-5.cnf.gz
+satrace15/SAT_dat.k70-24_1_rule_3.cnf.gz
+satrace15/SAT_dat.k80-24_1_rule_1.cnf.gz
+satrace15/SAT_dat.k85-24_1_rule_3.cnf.gz
+satrace15/SAT_dat.k90.debugged.cnf.gz
+satrace15/SAT_dat.k95-24_1_rule_3.cnf.gz
+satrace15/UCG-15-10p1.cnf.gz
+satrace15/UCG-20-10p0.cnf.gz
+satrace15/UCG-20-10p1.cnf.gz
+satrace15/UCG-20-5p0.cnf.gz
+satrace15/UCG-20-5p1.cnf.gz
+satrace15/UR-15-10p1.cnf.gz
+satrace15/UR-20-10p0.cnf.gz
+satrace15/UTI-20-10p1.cnf.gz
+satrace15/UTI-20-5p1.cnf.gz
+satrace15/aaai10-planning-ipc5-TPP-21-step11.cnf.gz
+satrace15/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satrace15/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satrace15/aes_24_4_keyfind_5.cnf.gz
+satrace15/aes_32_2_keyfind_1.cnf.gz
+satrace15/aes_32_3_keyfind_1.cnf.gz
+satrace15/aes_64_1_keyfind_1.cnf.gz
+satrace15/aes_id.cnf.gz
+satrace15/atco_enc1_opt1_04_32.cnf.gz
+satrace15/atco_enc1_opt1_10_15.cnf.gz
+satrace15/atco_enc1_opt1_10_21.cnf.gz
+satrace15/atco_enc1_opt2_10_14.cnf.gz
+satrace15/atco_enc1_opt2_10_16.cnf.gz
+satrace15/atco_enc1_opt2_20_12.cnf.gz
+satrace15/atco_enc2_opt2_05_9.cnf.gz
+satrace15/atco_enc2_opt2_10_21.cnf.gz
+satrace15/atco_enc2_opt2_20_11.cnf.gz
+satrace15/atco_enc3_opt1_13_48.cnf.gz
+satrace15/atco_enc3_opt2_10_12.cnf.gz
+satrace15/atco_enc3_opt2_10_14.cnf.gz
+satrace15/atco_enc3_opt2_18_44.cnf.gz
+satrace15/beempgsol2b1.cnf.gz
+satrace15/beempgsol5b1.cnf.gz
+satrace15/bjrb07amba10andenv.cnf.gz
+satrace15/bob12m02-opt.cnf.gz
+satrace15/bob12m09-opt.cnf.gz
+satrace15/bob12s02.cnf.gz
+satrace15/complete-400-0.1-16-98765432140016.cnf.gz
+satrace15/complete-400-0.1-3-9876543214003.cnf.gz
+satrace15/complete-500-0.1-1-9876543215001.cnf.gz
+satrace15/complete-500-0.1-15-98765432150015.cnf.gz
+satrace15/complete-500-0.1-17-98765432150017.cnf.gz
+satrace15/complete-500-0.1-8-9876543215008.cnf.gz
+satrace15/countbitssrl032.cnf.gz
+satrace15/dated-10-13-u.cnf.gz
+satrace15/dated-10-17-u.cnf.gz
+satrace15/dated-5-13-u.cnf.gz
+satrace15/dimacs.cnf.gz
+satrace15/grieu-vmpc-31.cnf.gz
+satrace15/group_mulr.cnf.gz
+satrace15/gss-18-s100.cnf.gz
+satrace15/gss-19-s100.cnf.gz
+satrace15/gss-22-s100.cnf.gz
+satrace15/hitag2-10-60-0-0x8edc44db7837bbf-65.cnf.gz
+satrace15/hitag2-10-60-0-0xe14721bd199894a-99.cnf.gz
+satrace15/hitag2-8-60-0-0x1eb82244d7f1c3c-47.cnf.gz
+satrace15/hwmcc10-timeframe-expansion-k45-pdtvisns3p02-tseitin.cnf.gz
+satrace15/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satrace15/hwmcc10-timeframe-expansion-k50-pdtvisns3p00-tseitin.cnf.gz
+satrace15/itox_vc1130.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.108.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.109.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.117.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.135.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.136.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.149.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.158.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.167.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.180.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.188.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.194.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.2.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.20.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.22.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.28.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.33.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.35.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.41.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.46.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.62.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.79.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.8.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.81.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.83.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.85.cnf.gz
+satrace15/jgiraldezlevy.2200.9086.08.40.93.cnf.gz
+satrace15/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satrace15/manol-pipe-c10nid_i.cnf.gz
+satrace15/manthey_DimacsSorterHalf_28_4.cnf.gz
+satrace15/manthey_DimacsSorterHalf_29_2.cnf.gz
+satrace15/manthey_DimacsSorterHalf_29_8.cnf.gz
+satrace15/manthey_DimacsSorterHalf_30_0.cnf.gz
+satrace15/manthey_DimacsSorterHalf_30_3.cnf.gz
+satrace15/manthey_DimacsSorterHalf_30_7.cnf.gz
+satrace15/manthey_DimacsSorterHalf_31_2.cnf.gz
+satrace15/manthey_DimacsSorterHalf_31_8.cnf.gz
+satrace15/manthey_DimacsSorterHalf_32_1.cnf.gz
+satrace15/manthey_DimacsSorterHalf_33_1.cnf.gz
+satrace15/manthey_DimacsSorterHalf_35_8.cnf.gz
+satrace15/manthey_DimacsSorterHalf_35_9.cnf.gz
+satrace15/manthey_DimacsSorterHalf_36_0.cnf.gz
+satrace15/manthey_DimacsSorterHalf_36_7.cnf.gz
+satrace15/manthey_DimacsSorterHalf_37_3.cnf.gz
+satrace15/manthey_DimacsSorterHalf_37_6.cnf.gz
+satrace15/manthey_DimacsSorterHalf_37_8.cnf.gz
+satrace15/manthey_DimacsSorterHalf_37_9.cnf.gz
+satrace15/manthey_DimacsSorter_28_0.cnf.gz
+satrace15/manthey_DimacsSorter_28_3.cnf.gz
+satrace15/manthey_DimacsSorter_28_4.cnf.gz
+satrace15/manthey_DimacsSorter_28_7.cnf.gz
+satrace15/manthey_DimacsSorter_29_8.cnf.gz
+satrace15/manthey_DimacsSorter_30_1.cnf.gz
+satrace15/manthey_DimacsSorter_30_4.cnf.gz
+satrace15/manthey_DimacsSorter_30_5.cnf.gz
+satrace15/manthey_DimacsSorter_30_6.cnf.gz
+satrace15/manthey_DimacsSorter_31_0.cnf.gz
+satrace15/manthey_DimacsSorter_31_4.cnf.gz
+satrace15/manthey_DimacsSorter_31_6.cnf.gz
+satrace15/manthey_DimacsSorter_31_8.cnf.gz
+satrace15/manthey_DimacsSorter_32_1.cnf.gz
+satrace15/manthey_DimacsSorter_35_1.cnf.gz
+satrace15/manthey_DimacsSorter_35_7.cnf.gz
+satrace15/manthey_DimacsSorter_35_8.cnf.gz
+satrace15/manthey_DimacsSorter_36_4.cnf.gz
+satrace15/manthey_DimacsSorter_36_7.cnf.gz
+satrace15/manthey_DimacsSorter_37_3.cnf.gz
+satrace15/manthey_DimacsSorter_37_6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w12-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w14-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w18-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w18-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w20-b10.cnf.gz
+satrace15/manthey_single-ordered-initialized-w20-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w20-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w22-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w22-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w24-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w24-b9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w26-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w26-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w28-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w32-b9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w40-b10.cnf.gz
+satrace15/manthey_single-ordered-initialized-w40-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w42-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w42-b9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w46-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w46-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w46-b9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w48-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w48-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w48-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w48-b9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w50-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w50-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w52-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w54-b9.cnf.gz
+satrace15/minandmaxor128.cnf.gz
+satrace15/minxorminand064.cnf.gz
+satrace15/mrpp_4x4#10_20.cnf.gz
+satrace15/mrpp_4x4#10_9.cnf.gz
+satrace15/mrpp_4x4#12_12.cnf.gz
+satrace15/mrpp_4x4#4_24.cnf.gz
+satrace15/mrpp_4x4#4_4.cnf.gz
+satrace15/mrpp_4x4#4_5.cnf.gz
+satrace15/mrpp_4x4#6_16.cnf.gz
+satrace15/mrpp_4x4#6_20.cnf.gz
+satrace15/mrpp_4x4#6_5.cnf.gz
+satrace15/mrpp_4x4#8_8.cnf.gz
+satrace15/mrpp_6x6#10_10.cnf.gz
+satrace15/mrpp_6x6#10_8.cnf.gz
+satrace15/mrpp_6x6#12_16.cnf.gz
+satrace15/mrpp_6x6#12_8.cnf.gz
+satrace15/mrpp_6x6#14_24.cnf.gz
+satrace15/mrpp_6x6#16_12.cnf.gz
+satrace15/mrpp_6x6#16_24.cnf.gz
+satrace15/mrpp_6x6#16_9.cnf.gz
+satrace15/mrpp_6x6#18_12.cnf.gz
+satrace15/mrpp_6x6#18_9.cnf.gz
+satrace15/mrpp_6x6#20_10.cnf.gz
+satrace15/mrpp_8x8#12_9.cnf.gz
+satrace15/mrpp_8x8#16_12.cnf.gz
+satrace15/mrpp_8x8#18_12.cnf.gz
+satrace15/mrpp_8x8#18_13.cnf.gz
+satrace15/mrpp_8x8#18_20.cnf.gz
+satrace15/mrpp_8x8#20_16.cnf.gz
+satrace15/mrpp_8x8#20_20.cnf.gz
+satrace15/mrpp_8x8#22_10.cnf.gz
+satrace15/mrpp_8x8#22_11.cnf.gz
+satrace15/mrpp_8x8#22_20.cnf.gz
+satrace15/mrpp_8x8#22_24.cnf.gz
+satrace15/mrpp_8x8#24_11.cnf.gz
+satrace15/mrpp_8x8#24_14.cnf.gz
+satrace15/mrpp_8x8#24_16.cnf.gz
+satrace15/mrpp_8x8#24_20.cnf.gz
+satrace15/mrpp_8x8#24_24.cnf.gz
+satrace15/mrpp_8x8#8_9.cnf.gz
+satrace15/openstacks-p30_3.085-SAT.cnf.gz
+satrace15/partial-10-11-s.cnf.gz
+satrace15/partial-5-15-s.cnf.gz
+satrace15/partial-5-17-s.cnf.gz
+satrace15/post-c32s-ss-8.cnf.gz
+satrace15/post-cbmc-aes-d-r2-noholes.cnf.gz
+satrace15/post-cbmc-aes-d-r2.cnf.gz
+satrace15/post-cbmc-aes-ee-r2-noholes.cnf.gz
+satrace15/q_query_3_L150_coli.sat.cnf.gz
+satrace15/q_query_3_L200_coli.sat.cnf.gz
+satrace15/q_query_3_L80_coli.sat.cnf.gz
+satrace15/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-NOTKNOWN.cnf.gz
+satrace15/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satrace15/velev-vliw-uns-2.0-uq5.cnf.gz
+satrace15/velev-vliw-uns-4.0-9-i1.cnf.gz
+satrace15/vmpc_29.cnf.gz
+satrace15/vmpc_33.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/test_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/test_updated
new file mode 100644
index 000000000..f3df488e9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/test_updated
@@ -0,0 +1,8 @@
+test/6s165-nonopt.cnf.gz
+test/a.cnf.gz
+test/complete-400-0.1-16-98765432140016.cnf.gz
+test/d.cnf.gz
+test/f.cnf.gz
+test/k2fix_gr_rcs_w9.shuffled.cnf.gz
+test/manol-pipe-c10nidw_s.cnf.gz
+test/z.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/unsat_small_candidates_fullpath b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/unsat_small_candidates_fullpath
new file mode 100644
index 000000000..568331ddb
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/config/unsat_small_candidates_fullpath
@@ -0,0 +1,425 @@
+satcomp13/slp-synthesis-aes-bottom13.cnf.gz
+satcomp13/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp13/ctl_4291_567_12_unsat_pre.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtvissoap1-tseitin.cnf.gz
+satcomp13/dated-10-13-u.cnf.gz
+satcomp13/biere6s153.cnf.gz
+satcomp13/maxxor032.cnf.gz
+satcomp13/ctl_4291_567_7_unsat_pre.cnf.gz
+satcomp13/pb_200_10_lb_15.cnf.gz
+satcomp13/minxorminand064.cnf.gz
+satcomp13/pb_200_05_lb_00.cnf.gz
+satcomp13/pb_300_10_lb_06.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp13/6s133.cnf.gz
+satcomp13/b_unsat_pre.cnf.gz
+satcomp13/pb_200_03_lb_02.cnf.gz
+satcomp13/UR-20-5p0.cnf.gz
+satcomp13/ctl_4291_567_7_unsat.cnf.gz
+satcomp13/SAT_dat.k80.cnf.gz
+satcomp13/p01_lb_05.cnf.gz
+satcomp13/maxor064.cnf.gz
+satcomp13/UR-15-10p0.cnf.gz
+satcomp13/pb_400_03_lb_05.cnf.gz
+satcomp13/beempgsol2b1.cnf.gz
+satcomp13/ctl_4291_567_9_unsat_pre.cnf.gz
+satcomp13/aaai10-planning-ipc5-pipesworld-12-step15.cnf.gz
+satcomp13/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp13/pb_400_09_lb_02.cnf.gz
+satcomp13/biere6s165.cnf.gz
+satcomp13/velev-vliw-uns-4.0-9.cnf.gz
+satcomp13/AProVE07-27.cnf.gz
+satcomp13/AProVE07-03.cnf.gz
+satcomp13/9dlx_vliw_at_b_iq4.cnf.gz
+satcomp13/pb_300_04_lb_05.cnf.gz
+satcomp13/gus-md5-08.cnf.gz
+satcomp13/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp13/minxorminand128.cnf.gz
+satcomp13/countbitssrl032.cnf.gz
+satcomp13/biere6s9.cnf.gz
+satcomp13/arcfour_initialPermutation_6_14.cnf.gz
+satcomp13/7pipe_k.cnf.gz
+satcomp13/ctl_4291_567_9_unsat.cnf.gz
+satcomp13/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp13/pb_200_03_lb_01.cnf.gz
+satcomp13/SAT_dat.k100.cnf.gz
+satcomp13/biere6s19.cnf.gz
+satcomp13/AProVE07-02.cnf.gz
+satcomp13/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp13/pb_300_04_lb_06.cnf.gz
+satcomp13/8pipe_q0_k.cnf.gz
+satcomp13/bierebob12s02.cnf.gz
+satcomp13/pb_400_09_lb_03.cnf.gz
+satcomp13/beempgsol5b1.cnf.gz
+satcomp13/arcfour_initialPermutation_6_15.cnf.gz
+satcomp13/ctl_4291_567_12_unsat.cnf.gz
+satcomp13/minxor128.cnf.gz
+satcomp13/biere6s166.cnf.gz
+satcomp13/dated-10-11-u.cnf.gz
+satcomp09/ACG-10-5p0.cnf.gz
+satcomp09/uts-l05-ipc5-h26-unsat.cnf.gz
+satcomp09/blocks-4-ipc5-h22-unknown.cnf.gz
+satcomp09/q_query_3_L150_coli.sat.cnf.gz
+satcomp09/velev-vliw-uns-4.0-9C1.cnf.gz
+satcomp09/post-c32s-ss-8.cnf.gz
+satcomp09/q_query_3_L80_coli.sat.cnf.gz
+satcomp09/manol-pipe-c10nid_i.cnf.gz
+satcomp09/q_query_3_L100_coli.sat.cnf.gz
+satcomp09/9dlx_vliw_at_b_iq5.cnf.gz
+satcomp09/q_query_3_l46_lambda.cnf.gz
+satcomp09/dated-5-17-u.cnf.gz
+satcomp09/maxand064.cnf.gz
+satcomp09/q_query_3_l45_lambda.cnf.gz
+satcomp09/manol-pipe-f9n.cnf.gz
+satcomp09/UTI-15-5p0.cnf.gz
+satcomp09/hoons-vbmc-lucky7.cnf.gz
+satcomp09/9dlx_vliw_at_b_iq2.cnf.gz
+satcomp09/manol-pipe-c10nidw_s.cnf.gz
+satcomp09/UTI-15-10p0.cnf.gz
+satcomp09/manol-pipe-c9.cnf.gz
+satcomp09/minxorminand064.cnf.gz
+satcomp09/AProVE07-16.cnf.gz
+satcomp09/smulo016.cnf.gz
+satcomp09/goldb-heqc-dalumul.cnf.gz
+satcomp09/q_query_3_l48_lambda.cnf.gz
+satcomp09/post-c32s-gcdm16-23.cnf.gz
+satcomp09/schup-l2s-abp4-1-k31.cnf.gz
+satcomp09/simon-s02b-dp11u10.cnf.gz
+satcomp09/UR-20-5p0.cnf.gz
+satcomp09/countbitssrl016.cnf.gz
+satcomp09/gus-md5-07.cnf.gz
+satcomp09/rpoc_xits_07_UNSAT.cnf.gz
+satcomp09/q_query_3_L200_coli.sat.cnf.gz
+satcomp09/dated-5-15-u.cnf.gz
+satcomp09/eq.atree.braun.10.unsat.cnf.gz
+satcomp09/cmu-bmc-longmult15.cnf.gz
+satcomp09/UR-15-10p0.cnf.gz
+satcomp09/q_query_2_L324_coli.cnf.gz
+satcomp09/AProVE07-09.cnf.gz
+satcomp09/countbitsrotate016.cnf.gz
+satcomp09/post-cbmc-aes-d-r2-noholes.cnf.gz
+satcomp09/UCG-15-10p0.cnf.gz
+satcomp09/maxxororand032.cnf.gz
+satcomp09/goldb-heqc-alu4mul.cnf.gz
+satcomp09/q_query_3_l47_lambda.cnf.gz
+satcomp09/schup-l2s-bc56s-1-k391.cnf.gz
+satcomp09/minor032.cnf.gz
+satcomp09/q_query_3_L90_coli.sat.cnf.gz
+satcomp09/eq.atree.braun.8.unsat.cnf.gz
+satcomp09/UTI-10-10p0.cnf.gz
+satcomp09/AProVE07-08.cnf.gz
+satcomp09/minxorminand032.cnf.gz
+satcomp09/aloul-chnl11-13.cnf.gz
+satcomp09/total-10-13-u.cnf.gz
+satcomp09/goldb-heqc-i10mul.cnf.gz
+satcomp09/manol-pipe-c6bidw_i.cnf.gz
+satcomp09/9dlx_vliw_at_b_iq3.cnf.gz
+satcomp09/post-cbmc-aes-ee-r3-noholes.cnf.gz
+satcomp09/icbrt1_32.cnf.gz
+satcomp09/post-c32s-col400-16.cnf.gz
+satcomp09/eq.atree.braun.9.unsat.cnf.gz
+satcomp09/AProVE07-27.cnf.gz
+satcomp09/post-cbmc-aes-ee-r2-noholes.cnf.gz
+satcomp09/hsat_vc11813.cnf.gz
+satcomp09/manol-pipe-c10nidw.cnf.gz
+satcomp09/gus-md5-06.cnf.gz
+satcomp09/manol-pipe-c7nidw.cnf.gz
+satcomp09/velev-engi-uns-1.0-4nd.cnf.gz
+satcomp09/9dlx_vliw_at_b_iq4.cnf.gz
+satcomp09/post-cbmc-aes-ele-noholes.cnf.gz
+satcomp09/countbitswegner064.cnf.gz
+satcomp09/total-5-13-u.cnf.gz
+satcomp09/minor064.cnf.gz
+satcomp09/manol-pipe-g6bi.cnf.gz
+satcomp09/UR-15-5p0.cnf.gz
+satcomp09/velev-pipe-o-uns-1.0-7.cnf.gz
+satcomp09/emptyroom-4-h21-unsat.cnf.gz
+satcomp09/minxorminand128.cnf.gz
+satcomp09/countbitssrl032.cnf.gz
+satcomp09/manol-pipe-g10nid.cnf.gz
+satcomp09/total-5-11-u.cnf.gz
+satcomp09/velev-pipe-o-uns-1.1-6.cnf.gz
+satcomp09/uts-l06-ipc5-h33-unknown.cnf.gz
+satcomp09/UR-10-5p0.cnf.gz
+satcomp09/een-tip-uns-nusmv-t5.B.cnf.gz
+satcomp09/velev-live-uns-2.0-ebuf.cnf.gz
+satcomp09/gus-md5-05.cnf.gz
+satcomp09/manol-pipe-g10id.cnf.gz
+satcomp09/manol-pipe-g7nidw.cnf.gz
+satcomp09/goldb-heqc-term1mul.cnf.gz
+satcomp09/manol-pipe-c7bidw_i.cnf.gz
+satcomp09/rbcl_xits_06_UNSAT.cnf.gz
+satcomp09/uts-l05-ipc5-h27-unknown.cnf.gz
+satcomp09/manol-pipe-c6nidw_i.cnf.gz
+satcomp09/xinetd_vc56703.cnf.gz
+satcomp09/schup-l2s-guid-1-k56.cnf.gz
+satcomp09/uts-l06-ipc5-h31-unknown.cnf.gz
+satcomp09/rpoc_xits_08_UNSAT.cnf.gz
+satcomp09/manol-pipe-f9b.cnf.gz
+satcomp09/gus-md5-04.cnf.gz
+satcomp09/uts-l06-ipc5-h28-unknown.cnf.gz
+satcomp09/9dlx_vliw_at_b_iq1.cnf.gz
+satcomp09/cmu-bmc-barrel6.cnf.gz
+satcomp09/manol-pipe-f10ni.cnf.gz
+satcomp09/UCG-10-5p0.cnf.gz
+satcomp09/minand128.cnf.gz
+satcomp09/simon-s03-fifo8-300.cnf.gz
+satcomp09/manol-pipe-g10bidw.cnf.gz
+satcomp09/goldb-heqc-frg1mul.cnf.gz
+satcomp09/UCG-15-5p0.cnf.gz
+satcomp09/goldb-heqc-x1mul.cnf.gz
+satcomp09/minandmaxor032.cnf.gz
+satcomp09/countbitsarray02_32.cnf.gz
+satcomp09/minxor128.cnf.gz
+satcomp09/UTI-20-5p0.cnf.gz
+satcomp09/rbcl_xits_07_UNSAT.cnf.gz
+satcomp09/hsat_vc11803.cnf.gz
+satcomp09/q_query_3_l44_lambda.cnf.gz
+satcomp14/velev-vliw-uns-2.0-uq5.cnf.gz
+satcomp14/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp14/atco_enc1_opt2_05_4.cnf.gz
+satcomp14/q_query_3_L150_coli.sat.cnf.gz
+satcomp14/post-c32s-ss-8.cnf.gz
+satcomp14/q_query_3_L80_coli.sat.cnf.gz
+satcomp14/manol-pipe-c10nid_i.cnf.gz
+satcomp14/q_query_3_L100_coli.sat.cnf.gz
+satcomp14/6s131-opt.cnf.gz
+satcomp14/dated-10-13-u.cnf.gz
+satcomp14/q_query_3_l46_lambda.cnf.gz
+satcomp14/maxxor032.cnf.gz
+satcomp14/q_query_3_l45_lambda.cnf.gz
+satcomp14/manol-pipe-c10nidw_s.cnf.gz
+satcomp14/minxorminand064.cnf.gz
+satcomp14/6s153.cnf.gz
+satcomp14/manol-pipe-c8nidw.cnf.gz
+satcomp14/6s184.cnf.gz
+satcomp14/6s10.cnf.gz
+satcomp14/6s167-opt.cnf.gz
+satcomp14/q_query_3_l48_lambda.cnf.gz
+satcomp14/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp14/6s133.cnf.gz
+satcomp14/pb_300_10_lb_08.cnf.gz
+satcomp14/bob12s02.cnf.gz
+satcomp14/post-cbmc-aes-d-r2.cnf.gz
+satcomp14/UR-20-5p0.cnf.gz
+satcomp14/atco_enc1_opt2_10_12.cnf.gz
+satcomp14/q_query_3_L200_coli.sat.cnf.gz
+satcomp14/atco_enc1_opt2_10_14.cnf.gz
+satcomp14/UR-15-10p0.cnf.gz
+satcomp14/beempgsol2b1.cnf.gz
+satcomp14/post-cbmc-aes-d-r2-noholes.cnf.gz
+satcomp14/UCG-15-10p0.cnf.gz
+satcomp14/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp14/q_query_3_L90_coli.sat.cnf.gz
+satcomp14/6s17-opt.cnf.gz
+satcomp14/6s11-opt.cnf.gz
+satcomp14/manol-pipe-g10bid_i.cnf.gz
+satcomp14/AProVE07-08.cnf.gz
+satcomp14/total-10-13-u.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq3.cnf.gz
+satcomp14/6s13-opt.cnf.gz
+satcomp14/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satcomp14/velev-vliw-uns-4.0-9.cnf.gz
+satcomp14/AProVE07-27.cnf.gz
+satcomp14/post-cbmc-aes-ee-r2-noholes.cnf.gz
+satcomp14/manol-pipe-c10nidw.cnf.gz
+satcomp14/AProVE07-03.cnf.gz
+satcomp14/UCG-20-5p0.cnf.gz
+satcomp14/9dlx_vliw_at_b_iq4.cnf.gz
+satcomp14/6s165-nonopt.cnf.gz
+satcomp14/bob12s09-opt.cnf.gz
+satcomp14/c10bi_i.cnf.gz
+satcomp14/grid-strips-grid-y-3.035-NOTKNOWN.cnf.gz
+satcomp14/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp14/6s9.cnf.gz
+satcomp14/countbitssrl032.cnf.gz
+satcomp14/6s16.cnf.gz
+satcomp14/7pipe_k.cnf.gz
+satcomp14/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp14/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp14/6s16-opt.cnf.gz
+satcomp14/6s130-opt.cnf.gz
+satcomp14/6s168-opt.cnf.gz
+satcomp14/6s12.cnf.gz
+satcomp14/atco_enc1_opt2_10_15.cnf.gz
+satcomp14/beempgsol5b1.cnf.gz
+satcomp14/6s169-opt.cnf.gz
+satcomp14/bob12m09-opt.cnf.gz
+satcomp14/minxor128.cnf.gz
+satcomp14/dated-10-11-u.cnf.gz
+satcomp14/pb_300_10_lb_07.cnf.gz
+satcomp16/velev-vliw-uns-2.0-uq5.cnf.gz
+satcomp16/q_query_3_L200_coli.sat.cnf.gz
+satcomp16/UR-15-10p0.cnf.gz
+satcomp16/maxxororand032.cnf.gz
+satcomp16/schup-l2s-bc56s-1-k391.cnf.gz
+satcomp16/total-10-13-u.cnf.gz
+satcomp16/minxorminand128.cnf.gz
+satcomp16/arcfour_initialPermutation_6_14.cnf.gz
+satcomp16/rpoc_xits_08_UNSAT.cnf.gz
+satcomp11/slp-synthesis-aes-bottom13.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtswvrod6x8p1-tseitin.cnf.gz
+satcomp11/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp11/q_query_3_L150_coli.sat.cnf.gz
+satcomp11/hard-25-U-7061.cnf.gz
+satcomp11/smtlib-qfbv-aigs-lfsr_008_063_080-tseitin.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-27-step13.cnf.gz
+satcomp11/grid-strips-grid-y-4.025-NOTKNOWN.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtvissoap1-tseitin.cnf.gz
+satcomp11/q_query_3_l46_lambda.cnf.gz
+satcomp11/AProVE07-21.cnf.gz
+satcomp11/hard-18-U-10652.cnf.gz
+satcomp11/maxxor032.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-bc57sensorsp3-tseitin.cnf.gz
+satcomp11/traffic_pcb_unknown.cnf.gz
+satcomp11/traffic_fb_unknown.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-bc57sensorsp1-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtviseisenberg1-tseitin.cnf.gz
+satcomp11/E02F17.cnf.gz
+satcomp11/comb1.shuffled.cnf.gz
+satcomp11/ACG-10-10p0.cnf.gz
+satcomp11/post-c32s-gcdm16-23.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp11/manol-pipe-f7nidw.cnf.gz
+satcomp11/slp-synthesis-aes-bottom12.cnf.gz
+satcomp11/korf-15.cnf.gz
+satcomp11/SAT_dat.k80.cnf.gz
+satcomp11/dspam_dump_vc949.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-12-step15.cnf.gz
+satcomp11/rand_net60-30-1.shuffled.cnf.gz
+satcomp11/UCG-15-10p0.cnf.gz
+satcomp11/smtlib-qfbv-aigs-lfsr_008_079_112-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtswvsam6x8p3-tseitin.cnf.gz
+satcomp11/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtswvqis8x8p2-tseitin.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-bobsm5378d2-tseitin.cnf.gz
+satcomp11/6pipe_6_ooo.shuffled-as.sat03-413.cnf.gz
+satcomp11/traffic_f_unknown.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-bjrb07amba2andenv-tseitin.cnf.gz
+satcomp11/SAT_dat.k45.cnf.gz
+satcomp11/manol-pipe-c6bidw_i.cnf.gz
+satcomp11/minandmaxor016.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtviseisenberg2-tseitin.cnf.gz
+satcomp11/AProVE11-11.cnf.gz
+satcomp11/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satcomp11/traffic_kkb_unknown.cnf.gz
+satcomp11/dp04u03.shuffled.cnf.gz
+satcomp11/aaai10-planning-ipc5-pipesworld-18-step15.cnf.gz
+satcomp11/k2mul.miter.shuffled-as.sat03-355.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-bc57sensorsp2-tseitin.cnf.gz
+satcomp11/E07N15.cnf.gz
+satcomp11/x1mul.miter.shuffled-as.sat03-359.cnf.gz
+satcomp11/UTI-20-10t0.cnf.gz
+satcomp11/homer14.shuffled.cnf.gz
+satcomp11/all.used-as.sat04-986.cnf.gz
+satcomp11/manol-pipe-c10nidw.cnf.gz
+satcomp11/AProVE07-03.cnf.gz
+satcomp11/E03N17.cnf.gz
+satcomp11/hard-6-U-7061.cnf.gz
+satcomp11/grid-strips-grid-y-3.035-NOTKNOWN.cnf.gz
+satcomp11/velev-pipe-o-uns-1.0-7.cnf.gz
+satcomp11/dated-5-11-u.cnf.gz
+satcomp11/IBM_FV_2004_rule_batch_30_SAT_dat.k80.cnf.gz
+satcomp11/hsat_vc12062.cnf.gz
+satcomp11/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp11/minxorminand128.cnf.gz
+satcomp11/blocks-4-ipc5-h21-unknown.cnf.gz
+satcomp11/traffic_b_unsat.cnf.gz
+satcomp11/velev-pipe-o-uns-1.1-6.cnf.gz
+satcomp11/SAT_dat.k20.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp11/SAT_dat.k100.cnf.gz
+satcomp11/c10idw_i.cnf.gz
+satcomp11/c6288mul.miter.shuffled-as.sat03-346.cnf.gz
+satcomp11/blocks-blocks-37-1.120-NOTKNOWN.cnf.gz
+satcomp11/sokoban-sequential-p145-microban-sequential.030-NOTKNOWN.cnf.gz
+satcomp11/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-nusmvreactorp4-tseitin.cnf.gz
+satcomp11/traffic_3b_unknown.cnf.gz
+satcomp11/E04N18.cnf.gz
+satcomp11/E05X15.cnf.gz
+satcomp11/rand_net60-40-10.shuffled.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k50-pdtvisns2p3-tseitin.cnf.gz
+satcomp11/manol-pipe-f7idw.cnf.gz
+satcomp11/smtlib-qfbv-aigs-nlzbe256-tseitin.cnf.gz
+satcomp11/rand_net60-25-10.shuffled.cnf.gz
+satcomp11/E15N15.cnf.gz
+satcomp11/dekker.used-as.sat04-989.cnf.gz
+satcomp11/UCG-15-5p0.cnf.gz
+satcomp11/hwmcc10-timeframe-expansion-k45-pdtswvtms14x8p1-tseitin.cnf.gz
+satcomp11/rand_net70-60-10.shuffled.cnf.gz
+satcomp11/aaai10-planning-ipc5-rovers-18-step11.cnf.gz
+satrace15/velev-vliw-uns-2.0-uq5.cnf.gz
+satrace15/q_query_3_L150_coli.sat.cnf.gz
+satrace15/manthey_single-ordered-initialized-w42-b8.cnf.gz
+satrace15/post-c32s-ss-8.cnf.gz
+satrace15/q_query_3_L80_coli.sat.cnf.gz
+satrace15/manthey_single-ordered-initialized-w40-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b9.cnf.gz
+satrace15/mrpp_8x8#8_9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w28-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w40-b10.cnf.gz
+satrace15/manol-pipe-c10nid_i.cnf.gz
+satrace15/6s131-opt.cnf.gz
+satrace15/manthey_single-ordered-initialized-w22-b8.cnf.gz
+satrace15/dated-10-13-u.cnf.gz
+satrace15/mrpp_8x8#24_11.cnf.gz
+satrace15/minxorminand064.cnf.gz
+satrace15/mrpp_4x4#6_5.cnf.gz
+satrace15/6s167-opt.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b6.cnf.gz
+satrace15/6s133.cnf.gz
+satrace15/manthey_single-ordered-initialized-w42-b9.cnf.gz
+satrace15/mrpp_8x8#18_12.cnf.gz
+satrace15/bob12s02.cnf.gz
+satrace15/post-cbmc-aes-d-r2.cnf.gz
+satrace15/manthey_single-ordered-initialized-w44-b8.cnf.gz
+satrace15/manthey_single-ordered-initialized-w20-b8.cnf.gz
+satrace15/group_mulr.cnf.gz
+satrace15/q_query_3_L200_coli.sat.cnf.gz
+satrace15/mrpp_6x6#16_9.cnf.gz
+satrace15/atco_enc1_opt2_10_14.cnf.gz
+satrace15/beempgsol2b1.cnf.gz
+satrace15/post-cbmc-aes-d-r2-noholes.cnf.gz
+satrace15/mrpp_6x6#12_8.cnf.gz
+satrace15/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satrace15/6s17-opt.cnf.gz
+satrace15/6s11-opt.cnf.gz
+satrace15/6s13-opt.cnf.gz
+satrace15/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satrace15/mrpp_6x6#20_10.cnf.gz
+satrace15/AProVE07-27.cnf.gz
+satrace15/manthey_single-ordered-initialized-w18-b8.cnf.gz
+satrace15/post-cbmc-aes-ee-r2-noholes.cnf.gz
+satrace15/manthey_single-ordered-initialized-w50-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w26-b8.cnf.gz
+satrace15/AProVE07-03.cnf.gz
+satrace15/UCG-20-5p0.cnf.gz
+satrace15/manthey_single-ordered-initialized-w24-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w24-b9.cnf.gz
+satrace15/6s165-nonopt.cnf.gz
+satrace15/mrpp_6x6#18_9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w26-b7.cnf.gz
+satrace15/mrpp_8x8#22_10.cnf.gz
+satrace15/mrpp_4x4#4_4.cnf.gz
+satrace15/manthey_single-ordered-initialized-w22-b6.cnf.gz
+satrace15/6s9.cnf.gz
+satrace15/mrpp_4x4#12_12.cnf.gz
+satrace15/countbitssrl032.cnf.gz
+satrace15/6s16.cnf.gz
+satrace15/7pipe_k.cnf.gz
+satrace15/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satrace15/manthey_single-ordered-initialized-w46-b7.cnf.gz
+satrace15/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satrace15/6s16-opt.cnf.gz
+satrace15/6s130-opt.cnf.gz
+satrace15/6s168-opt.cnf.gz
+satrace15/mrpp_8x8#12_9.cnf.gz
+satrace15/manthey_single-ordered-initialized-w48-b6.cnf.gz
+satrace15/manthey_single-ordered-initialized-w18-b7.cnf.gz
+satrace15/manthey_single-ordered-initialized-w32-b9.cnf.gz
+satrace15/beempgsol5b1.cnf.gz
+satrace15/6s169-opt.cnf.gz
+satrace15/bob12m09-opt.cnf.gz
+satrace15/manthey_single-ordered-initialized-w20-b7.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance-test.cfg b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance-test.cfg
new file mode 100644
index 000000000..3411ff88c
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance-test.cfg
@@ -0,0 +1,47 @@
+[ec2]
+count=1
+
+#####################
+# Oregon -- us-west-2
+#####################
+# region=us-west-2
+# subnet_id =subnet-88ab16ed
+# security_group_client=sg-bc7b3fd9
+# security_group_server=sg-507b3f35
+# key_name=controlkey
+# result_bucket=msoos-solve-results-oregon
+## us-west-2 Ubuntu 14.04 LTS
+## ami_id = ami-3ede3d5e
+## us-west-2 hvm:ebs-ssd 16.04 LTS
+# ami_id=ami-5dca1925
+
+#####################
+# London -- eu-west-2
+#####################
+# region=eu-west-2
+# subnet_id =subnet-eb12cf90
+# security_group_client=sg-d97fd8b1
+# security_group_server=sg-797dda11
+# key_name=controlkey-lon
+# result_bucket=msoos-solve-results-ireland
+# # eu-west-2 hvm:ebs-ssd 16.04 LTS
+# ami_id=ami-4c0b1428
+
+#####################
+# Ireland -- eu-west-1
+#####################
+region=eu-west-1
+subnet_id =subnet-05c8e843
+security_group_client=sg-715c360a
+security_group_server=sg-b05e34cb
+key_name=controlkey-ireland
+result_bucket=msoos-solve-results-ireland
+# eu-west-2 hvm:ebs-ssd 16.04 LTS
+ami_id=ami-8fd760f6
+
+max_bid=0.09
+instance_profile_name=client
+instance_profile_arn=arn:aws:iam::907572138573:instance-profile/client
+
+# has instance storage
+type=r3.large
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance.cfg b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance.cfg
new file mode 100644
index 000000000..0e0111ea8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/ec2-spot-instance.cfg
@@ -0,0 +1,51 @@
+[ec2]
+count=2
+max_bid=0.85
+
+#####################
+# Oregon -- us-west-2
+#####################
+# region=us-west-2
+# subnet_id =subnet-88ab16ed
+# security_group_client=sg-bc7b3fd9
+# security_group_server=sg-507b3f35
+# key_name=controlkey
+# result_bucket=msoos-solve-results-oregon
+## us-west-2 Ubuntu 14.04 LTS
+## ami_id = ami-3ede3d5e
+## us-west-2 hvm:ebs-ssd 16.04 LTS
+# ami_id=ami-5dca1925
+
+#####################
+# London -- eu-west-2
+#####################
+# region=eu-west-2
+# subnet_id =subnet-eb12cf90
+# security_group_client=sg-d97fd8b1
+# security_group_server=sg-797dda11
+# key_name=controlkey-lon
+# result_bucket=msoos-solve-results-ireland
+# # eu-west-2 hvm:ebs-ssd 16.04 LTS
+# ami_id=ami-4c0b1428
+
+#####################
+# Ireland -- eu-west-1
+#####################
+region=eu-west-1
+subnet_id =subnet-05c8e843
+security_group_client=sg-715c360a
+security_group_server=sg-b05e34cb
+key_name=controlkey-ireland
+result_bucket=msoos-solve-results-ireland
+# eu-west-2 hvm:ebs-ssd 16.04 LTS
+ami_id=ami-8fd760f6
+
+
+instance_profile_name=client
+instance_profile_arn=arn:aws:iam::907572138573:instance-profile/client
+
+#preference would be:
+# c4.8xlarge for speed (but no DRAT)
+# r3.8xlarge for DRAT -- due to memory need AND instance store!! r4 does not have instance store...
+# but c3.8xlarge is _cheap_ and only 0.8x speed of c4.8xlarge
+type=r3.8xlarge
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/launch_server.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/launch_server.py
new file mode 100755
index 000000000..3fd36fed1
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/launch_server.py
@@ -0,0 +1,153 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import sys
+import boto.ec2
+import os
+import subprocess
+import server_option_parser
+
+
+def get_answer():
+ yes = set(['yes', 'y', 'ye'])
+ no = set(['no', 'n'])
+
+ choice = input().lower()
+ if choice in yes:
+ return True
+ elif choice in no:
+ return False
+ else:
+ sys.stdout.write("Please respond with 'yes' or 'no'\n")
+ exit(0)
+
+
+def push():
+ print("First we push, oherwise we'll forget...")
+ ret = os.system("git push")
+ if ret != 0:
+ print("Oops, couldn't push, exiting before executing")
+ exit(-1)
+
+ print("")
+
+
+if __name__ == "__main__":
+ options, args = server_option_parser.parse_arguments()
+ print("Options are:")
+ for a, b in options.__dict__.items():
+ print("-- %-30s : %s" % (a, b))
+ assert args == []
+
+ if options.mem_limit_in_mb < 10000 and options.drat:
+ print("******* WARNING ********")
+ print("Beware: your memory is WAY too low for DRAT and learning stuff")
+
+ push()
+ data = ""
+ opt_is_on = False
+ for x in sys.argv[1:]:
+ if opt_is_on:
+ data += " ".join(x.split(","))
+ data += "\" "
+ opt_is_on = False
+ continue
+ if x != "--opt":
+ data += x + " "
+ continue
+
+ opt_is_on = True
+ data += "--opt \""
+
+ if ("--git" not in data):
+ revision = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode("utf-8")
+ data += " --git '{revision}'".format(revision=revision)
+
+ if len(sys.argv) > 1:
+ print("Launching with data: %s" % data)
+ else:
+ print("you must give at least one parameter, probably --s3folder")
+ exit(-1)
+
+ sys.stdout.write("Is this OK? [y/n]? ")
+ if not get_answer():
+ print("Aborting")
+ exit(0)
+
+ print("Executing!")
+
+ cloud_init = """#!/bin/bash
+set -e
+
+apt-get update
+apt-get install -y python
+apt-get -y install git python-pip
+pip install --force-reinstall --upgrade awscli
+pip install --force-reinstall --upgrade boto
+pip install configparser
+
+# Get AWS log agent
+cd /home/ubuntu/
+
+cat > aws-logs-server.conf << EOF
+[general]
+state_file = /home/ubuntu/cloudwatch.state
+
+[logstream1]
+log_group_name = cyrptominisat-perftest
+log_stream_name = server
+file = /home/ubuntu/*.log
+
+[messages]
+log_group_name = cyrptominisat-perftest
+log_stream_name = server
+file = /var/log/messages
+EOF
+
+curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
+python ./awslogs-agent-setup.py --region {region} -c aws-logs-server.conf -n
+
+sudo -H -u ubuntu bash -c 'ssh-keyscan github.com >> ~/.ssh/known_hosts'
+sudo -H -u ubuntu bash -c 'git clone --depth 50 https://github.com/msoos/cryptominisat.git'
+
+# Get credentials
+cd /home/ubuntu
+sudo -H -u ubuntu bash -c 'aws s3 cp s3://msoos-solve-data/solvers/email.conf . --region={region}'
+
+# Start server
+cd /home/ubuntu/cryptominisat
+sudo -H -u ubuntu bash -c '/home/ubuntu/cryptominisat/scripts/aws/pre-server.py > /home/ubuntu/pre_server_log.log 2>&1 &'
+
+DATA="{data}"
+ """.format(region=options.region, data=data)
+
+ conn = boto.ec2.connect_to_region(options.region)
+ conn.run_instances(
+ min_count=1,
+ max_count=1,
+ image_id=options.ami_id,
+ subnet_id=options.subnet_id,
+ instance_type='t2.micro',
+ instance_profile_arn='arn:aws:iam::907572138573:instance-profile/server',
+ user_data=cloud_init,
+ key_name=options.key_name,
+ security_group_ids=[options.security_group_server],
+ instance_initiated_shutdown_behavior='terminate')
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/pack_cnf_lists.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/pack_cnf_lists.py
new file mode 100755
index 000000000..d085b56f8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/pack_cnf_lists.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import sys
+
+if len(sys.argv) == 1:
+ print("""Usage example:
+./{name} satcomp14_updated satcomp16_updated > satcomp1416_updated
+""".format(name=sys.argv[0]))
+ exit(-1)
+
+files = {}
+for a in range(len(sys.argv)-1):
+ with open(sys.argv[a+1], "r") as f:
+ for l in f:
+ l = l.strip()
+ fname = l[l.find("/")+1:]
+ files[fname] = l
+
+for a,b in files.items():
+ print(b)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/pre-server.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/pre-server.py
new file mode 100755
index 000000000..01702484f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/pre-server.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+import boto.utils
+import os
+
+user_data = boto.utils.get_instance_userdata()
+
+todo = ""
+for line in user_data.split("\n"):
+ if "DATA" in line:
+ todo = line[5:].strip().strip('"')
+
+if todo == "":
+ exit(0)
+
+os.chdir("/home/ubuntu/cryptominisat/scripts/aws/")
+command = "nohup /home/ubuntu/cryptominisat/scripts/aws/server.py %s &" % todo
+os.system(command)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/satcomp091113_updated b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/satcomp091113_updated
new file mode 100644
index 000000000..c94033705
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/satcomp091113_updated
@@ -0,0 +1,751 @@
+satcomp091113/gss-20-s100.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom15.cnf.gz
+satcomp091113/bivium-40-200-0s0-0x66b619d7b8e447710bf43b794ded6cfaf1e75bb8a947e14c78-50.cnf.gz
+satcomp091113/bivium-40-200-0s0-0x92fc13b11169afbb2ef11a684d9fe9a19e743cd6aa5ce23fb5-19.cnf.gz
+satcomp091113/countbitsarray02_32.cnf.gz
+satcomp091113/ibm-2002-21r-k95.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-countbits128-tseitin.cnf.gz
+satcomp091113/smulo128.cnf.gz
+satcomp091113/gss-33-s100.cnf.gz
+satcomp091113/rbcl_xits_08_UNSAT.cnf.gz
+satcomp091113/rbcl_xits_09_UNKNOWN.cnf.gz
+satcomp091113/minandmaxor032.cnf.gz
+satcomp091113/icbrt1_32.cnf.gz
+satcomp091113/sokoban-sequential-p145-microban-sequential.070-NOTKNOWN.cnf.gz
+satcomp091113/hitag2-8-60-0-0x880693399044612-25-SAT.cnf.gz
+satcomp091113/traffic_pcb_unknown.cnf.gz
+satcomp091113/k2fix_gr_rcs_w8.shuffled.cnf.gz
+satcomp091113/pb_300_01_lb_00.cnf.gz
+satcomp091113/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-SAT.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtpmspalu-tseitin.cnf.gz
+satcomp091113/bierebob12s02.cnf.gz
+satcomp091113/mizh-md5-48-5.cnf.gz
+satcomp091113/b04_s_unknown.cnf.gz
+satcomp091113/rbcl_xits_14_SAT.cnf.gz
+satcomp091113/rpoc_xits_12_UNKNOWN.cnf.gz
+satcomp091113/6s20.cnf.gz
+satcomp091113/manol-pipe-c10nid_i.cnf.gz
+satcomp091113/22-160-nossum003.cnf.gz
+satcomp091113/md5_48_2.cnf.gz
+satcomp091113/AProVE07-25.cnf.gz
+satcomp091113/q_query_3_l45_lambda.cnf.gz
+satcomp091113/UR-15-5p0.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq3.cnf.gz
+satcomp091113/manol-pipe-g6bi.cnf.gz
+satcomp091113/aaai10-planning-ipc5-rovers-18-step11.cnf.gz
+satcomp091113/total-5-11-u.cnf.gz
+satcomp091113/aes_64_2_keyfind_1.cnf.gz
+satcomp091113/grid-strips-grid-y-3.035-NOTKNOWN.cnf.gz
+satcomp091113/blocks-blocks-37-1.120-NOTKNOWN.cnf.gz
+satcomp091113/ACG-10-10p0.cnf.gz
+satcomp091113/traffic_f_unknown.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug8.cnf.gz
+satcomp091113/traffic_fb_unknown.cnf.gz
+satcomp091113/partial-10-11-s.cnf.gz
+satcomp091113/AProVE09-20.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pathways-17-step20.cnf.gz
+satcomp091113/li-exam-61.shuffled-as.sat03-366.cnf.gz
+satcomp091113/manol-pipe-f7idw.cnf.gz
+satcomp091113/b04_s_2_unknown_pre.cnf.gz
+satcomp091113/partial-5-13-u.cnf.gz
+satcomp091113/q_query_3_l40_lambda.cnf.gz
+satcomp091113/AProVE07-16.cnf.gz
+satcomp091113/goldb-heqc-dalumul.cnf.gz
+satcomp091113/vmpc_29.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug9.cnf.gz
+satcomp091113/biere6s139.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pathways-13-step17.cnf.gz
+satcomp091113/E05X15.cnf.gz
+satcomp091113/minandmaxor128.cnf.gz
+satcomp091113/ACG-15-5p1.cnf.gz
+satcomp091113/vmpc_36.renamed-as.sat05-1922.cnf.gz
+satcomp091113/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp091113/maxxororand032.cnf.gz
+satcomp091113/manol-pipe-c6nidw_i.cnf.gz
+satcomp091113/q_query_3_l48_lambda.cnf.gz
+satcomp091113/aaai10-planning-ipc5-TPP-21-step11.cnf.gz
+satcomp091113/countbitsarray04_32.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom14.cnf.gz
+satcomp091113/q_query_3_l41_lambda.cnf.gz
+satcomp091113/AProVE09-22.cnf.gz
+satcomp091113/23-80-nossum001.cnf.gz
+satcomp091113/blocks-blocks-36-0.170-NOTKNOWN.cnf.gz
+satcomp091113/22-128-nossum010.cnf.gz
+satcomp091113/biere6s9.cnf.gz
+satcomp091113/velev-vliw-uns-4.0-9.cnf.gz
+satcomp091113/ctl_4291_567_9_unsat_pre.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-bin_libsmbsharemodes_vc5759-tseitin.cnf.gz
+satcomp091113/biere6s166.cnf.gz
+satcomp091113/22-160-nossum009.cnf.gz
+satcomp091113/maxxororand064.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtviseisenberg1-tseitin.cnf.gz
+satcomp091113/manol-pipe-g10nid.cnf.gz
+satcomp091113/hitag2-7-60-0-0xe8fa35372ed37e2-80.cnf.gz
+satcomp091113/AProVE09-03.cnf.gz
+satcomp091113/ctl_4291_567_11_unsat.cnf.gz
+satcomp091113/E04F19.cnf.gz
+satcomp091113/pb_400_09_lb_02.cnf.gz
+satcomp091113/6s137.cnf.gz
+satcomp091113/gss-28-s100.cnf.gz
+satcomp091113/li-test4-100.shuffled-as.sat03-370.cnf.gz
+satcomp091113/22-144-nossum005.cnf.gz
+satcomp091113/sokoban-sequential-p145-microban-sequential.040-NOTKNOWN.cnf.gz
+satcomp091113/manol-pipe-f7nidw.cnf.gz
+satcomp091113/dated-10-13-u.cnf.gz
+satcomp091113/manol-pipe-g10bidw.cnf.gz
+satcomp091113/vda_gr_rcs_w9.shuffled.cnf.gz
+satcomp091113/80-8-nossum006.cnf.gz
+satcomp091113/hitag2-10-60-0-0xe14721bd199894a-99.cnf.gz
+satcomp091113/UR-20-5p0.cnf.gz
+satcomp091113/rbcl_xits_11_UNKNOWN.cnf.gz
+satcomp091113/hitag2-10-60-0-0xa04d664a73eac4d-66.cnf.gz
+satcomp091113/E00X23.cnf.gz
+satcomp091113/biere6s19.cnf.gz
+satcomp091113/22-144-nossum003.cnf.gz
+satcomp091113/aes_64_3_keyfind_1.cnf.gz
+satcomp091113/minxorminand064.cnf.gz
+satcomp091113/schup-l2s-guid-1-k56.cnf.gz
+satcomp091113/rpoc_xits_09_UNSAT.cnf.gz
+satcomp091113/uts-l05-ipc5-h26-unsat.cnf.gz
+satcomp091113/ctl_4291_567_8_unsat_pre.cnf.gz
+satcomp091113/6pipe_6_ooo.shuffled-as.sat03-413.cnf.gz
+satcomp091113/zfcp-2.8-u2-nh.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtvisns3p02-tseitin.cnf.gz
+satcomp091113/q_query_3_L90_coli.sat.cnf.gz
+satcomp091113/ndhf_xits_21_SAT.cnf.gz
+satcomp091113/q_query_3_L150_coli.sat.cnf.gz
+satcomp091113/22-160-nossum007.cnf.gz
+satcomp091113/q_query_3_l47_lambda.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-rfunit_flat-64-tseitin.cnf.gz
+satcomp091113/gss-25-s100.cnf.gz
+satcomp091113/pb_300_05_lb_17.cnf.gz
+satcomp091113/bierebob12s04.cnf.gz
+satcomp091113/vmpc_24.cnf.gz
+satcomp091113/manol-pipe-c7nidw.cnf.gz
+satcomp091113/goldb-heqc-i10mul.cnf.gz
+satcomp091113/velev-pipe-sat-1.0-b7.cnf.gz
+satcomp091113/gss-15-s100.cnf.gz
+satcomp091113/vmpc_28.cnf.gz
+satcomp091113/countbitswegner064.cnf.gz
+satcomp091113/smulo016.cnf.gz
+satcomp091113/gus-md5-14.cnf.gz
+satcomp091113/cmu-bmc-barrel6.cnf.gz
+satcomp091113/gripper13u.shuffled-as.sat03-395.cnf.gz
+satcomp091113/blocks-blocks-36-0.160-NOTKNOWN.cnf.gz
+satcomp091113/minor032.cnf.gz
+satcomp091113/E02F20.cnf.gz
+satcomp091113/gss-17-s100.cnf.gz
+satcomp091113/ndhf_xits_15_UNKNOWN.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug6.cnf.gz
+satcomp091113/22-160-nossum001.cnf.gz
+satcomp091113/gss-21-s100.cnf.gz
+satcomp091113/aes_128_2_keyfind_1.cnf.gz
+satcomp091113/mizh-sha0-36-4.cnf.gz
+satcomp091113/md5_47_1.cnf.gz
+satcomp091113/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp091113/p01_lb_05.cnf.gz
+satcomp091113/22-128-nossum007.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom20.cnf.gz
+satcomp091113/gss-16-s100.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-bjrb07amba2andenv-tseitin.cnf.gz
+satcomp091113/AProVE09-07.cnf.gz
+satcomp091113/23-96-nossum003.cnf.gz
+satcomp091113/mizh-sha0-36-2.cnf.gz
+satcomp091113/gss-31-s100.cnf.gz
+satcomp091113/eq.atree.braun.9.unsat.cnf.gz
+satcomp091113/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.060-SAT.cnf.gz
+satcomp091113/11pipe_k.cnf.gz
+satcomp091113/pb_300_05_lb_16.cnf.gz
+satcomp091113/rpoc_xits_10_UNKNOWN.cnf.gz
+satcomp091113/hitag2-10-60-0-0x2201a94920a2d2e-8.cnf.gz
+satcomp091113/AProVE07-11.cnf.gz
+satcomp091113/dated-10-11-u.cnf.gz
+satcomp091113/grid-strips-grid-y-4.025-NOTKNOWN.cnf.gz
+satcomp091113/23-64-nossum003.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-nlzbe256-tseitin.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-bc57sensorsp3-tseitin.cnf.gz
+satcomp091113/22-160-nossum002.cnf.gz
+satcomp091113/driverlog1_ks99i.renamed-as.sat05-3951.cnf.gz
+satcomp091113/slp-synthesis-aes-top28.cnf.gz
+satcomp091113/E04N18.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug7.cnf.gz
+satcomp091113/AProVE09-24.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom21.cnf.gz
+satcomp091113/grieu-vmpc-31.cnf.gz
+satcomp091113/rand_net60-30-1.shuffled.cnf.gz
+satcomp091113/aes_64_4_keyfind_1.cnf.gz
+satcomp091113/maxor128.cnf.gz
+satcomp091113/maxxor032.cnf.gz
+satcomp091113/total-10-15-s.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-bobsm5378d2-tseitin.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pipesworld-18-step15.cnf.gz
+satcomp091113/gus-md5-10.cnf.gz
+satcomp091113/velev-pipe-o-uns-1.0-7.cnf.gz
+satcomp091113/AProVE11-02.cnf.gz
+satcomp091113/goldb-heqc-alu4mul.cnf.gz
+satcomp091113/comb1.shuffled.cnf.gz
+satcomp091113/q_query_3_l37_lambda.cnf.gz
+satcomp091113/aes_24_4_keyfind_4.cnf.gz
+satcomp091113/minor064.cnf.gz
+satcomp091113/minxor128.cnf.gz
+satcomp091113/80-8-nossum005.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom19.cnf.gz
+satcomp091113/abb313GPIA-9-tr.used-as.sat04-321.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq7.cnf.gz
+satcomp091113/hard-25-U-7061.cnf.gz
+satcomp091113/bivium-39-200-0s0-0x5fa955de2b4f64d00226837d226c955de4566ce95f660180d7-30.cnf.gz
+satcomp091113/UCG-15-10p1.cnf.gz
+satcomp091113/22-160-nossum008.cnf.gz
+satcomp091113/manol-pipe-c10nidw.cnf.gz
+satcomp091113/eq.atree.braun.8.unsat.cnf.gz
+satcomp091113/UCG-15-10p0.cnf.gz
+satcomp091113/E05F20.cnf.gz
+satcomp091113/countbitsrotate128.cnf.gz
+satcomp091113/slp-synthesis-aes-top24.cnf.gz
+satcomp091113/partial-10-13-s.cnf.gz
+satcomp091113/partial-10-17-s.cnf.gz
+satcomp091113/22-144-nossum002.cnf.gz
+satcomp091113/ctl_3791_556_unsat.cnf.gz
+satcomp091113/gss-23-s100.cnf.gz
+satcomp091113/blocks-4-ipc5-h22-unknown.cnf.gz
+satcomp091113/sortnet-8-ipc5-h18-unsat.cnf.gz
+satcomp091113/hitag2-10-60-0-0xe6754daf48162bf-46.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq5.cnf.gz
+satcomp091113/velev-npe-1.0-9dlx-b71.cnf.gz
+satcomp091113/blocks-blocks-37-1.130-NOTKNOWN.cnf.gz
+satcomp091113/pb_400_09_lb_04.cnf.gz
+satcomp091113/schup-l2s-abp4-1-k31.cnf.gz
+satcomp091113/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp091113/AProVE11-10.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom16.cnf.gz
+satcomp091113/ctl_4201_555_unsat.cnf.gz
+satcomp091113/ctl_3082_415_unsat_pre.cnf.gz
+satcomp091113/simon-s03-w08-15.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq8.cnf.gz
+satcomp091113/ibm-2004-23-k100.cnf.gz
+satcomp091113/22-128-nossum003.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-nusmvreactorp4-tseitin.cnf.gz
+satcomp091113/23-96-nossum007.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug10.cnf.gz
+satcomp091113/gus-md5-08.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_15.cnf.gz
+satcomp091113/gss-22-s100.cnf.gz
+satcomp091113/aes_24_4_keyfind_2.cnf.gz
+satcomp091113/bivium-39-200-0s0-0x28df9231b320bd56dfb68bfc7c3f0ca20dbae6b0eba535ad91-98.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.025-NOTKNOWN.cnf.gz
+satcomp091113/bc57-sensors-1-k303-unsat.shuffled-as.sat03-406.cnf.gz
+satcomp091113/gus-md5-04.cnf.gz
+satcomp091113/q_query_3_L200_coli.sat.cnf.gz
+satcomp091113/gss-14-s100.cnf.gz
+satcomp091113/vmpc_33.cnf.gz
+satcomp091113/vmpc_34.cnf.gz
+satcomp091113/AProVE11-12.cnf.gz
+satcomp091113/E15N15.cnf.gz
+satcomp091113/22-128-nossum006.cnf.gz
+satcomp091113/all.used-as.sat04-986.cnf.gz
+satcomp091113/countbitssrl032.cnf.gz
+satcomp091113/mizh-sha0-35-3.cnf.gz
+satcomp091113/partial-5-17-u.cnf.gz
+satcomp091113/aes_64_1_keyfind_1.cnf.gz
+satcomp091113/bob12m04.cnf.gz
+satcomp091113/grid-strips-grid-y-3.045-NOTKNOWN.cnf.gz
+satcomp091113/ibm-2004-01-k90.cnf.gz
+satcomp091113/rpoc_xits_14_UNKNOWN.cnf.gz
+satcomp091113/ACG-20-5p1.cnf.gz
+satcomp091113/simon-s02b-dp11u10.cnf.gz
+satcomp091113/rand_net60-25-10.shuffled.cnf.gz
+satcomp091113/simon-s03-fifo8-300.cnf.gz
+satcomp091113/manol-pipe-c6bidw_i.cnf.gz
+satcomp091113/hard-6-U-7061.cnf.gz
+satcomp091113/hitag2-10-60-0-0xac23f1205f76343-96.cnf.gz
+satcomp091113/mulhs032.cnf.gz
+satcomp091113/slp-synthesis-aes-top22.cnf.gz
+satcomp091113/AProVE11-13.cnf.gz
+satcomp091113/bivium-39-200-0s0-0xdcfb6ab71951500b8e460045bd45afee15c87e08b0072eb174-43.cnf.gz
+satcomp091113/md5_48_3.cnf.gz
+satcomp091113/countbitssrl128.cnf.gz
+satcomp091113/b_unsat_pre.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom18.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq1.cnf.gz
+satcomp091113/hitag2-10-60-0-0xdf7fa6426edec07-17.cnf.gz
+satcomp091113/gus-md5-07.cnf.gz
+satcomp091113/minxorminand128.cnf.gz
+satcomp091113/b04_s_unknown_pre.cnf.gz
+satcomp091113/ctl_4291_567_12_unsat.cnf.gz
+satcomp091113/UTI-20-10p0.cnf.gz
+satcomp091113/ndhf_xits_14_UNSAT.cnf.gz
+satcomp091113/total-5-15-u.cnf.gz
+satcomp091113/vmpc_25.renamed-as.sat05-1913.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq6.used-as.sat04-347.cnf.gz
+satcomp091113/q_query_3_L70_coli.sat.cnf.gz
+satcomp091113/ACG-15-10p1.cnf.gz
+satcomp091113/ndhf_xits_11_UNSAT.cnf.gz
+satcomp091113/aes_32_3_keyfind_1.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-src_wget_vc18517-tseitin.cnf.gz
+satcomp091113/eq.atree.braun.13.unsat.cnf.gz
+satcomp091113/AProVE11-15.cnf.gz
+satcomp091113/rbcl_xits_10_UNKNOWN.cnf.gz
+satcomp091113/manol-pipe-g10id.cnf.gz
+satcomp091113/SAT_dat.k80_04.cnf.gz
+satcomp091113/22-144-nossum007.cnf.gz
+satcomp091113/partial-5-11-u.cnf.gz
+satcomp091113/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp091113/sha0_36_5.cnf.gz
+satcomp091113/9pipe_k.cnf.gz
+satcomp091113/pb_400_03_lb_07.cnf.gz
+satcomp091113/blocks-4-ipc5-h21-unknown.cnf.gz
+satcomp091113/hitag2-10-60-0-0xa360966c6eb75c4-62.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom17.cnf.gz
+satcomp091113/partial-5-17-s.cnf.gz
+satcomp091113/mizh-sha0-36-3.cnf.gz
+satcomp091113/korf-18.cnf.gz
+satcomp091113/total-10-13-u.cnf.gz
+satcomp091113/k2mul.miter.shuffled-as.sat03-355.cnf.gz
+satcomp091113/rbcl_xits_13_UNKNOWN.cnf.gz
+satcomp091113/ibm-2002-30r-k85.cnf.gz
+satcomp091113/pb_200_05_lb_00.cnf.gz
+satcomp091113/UTI-15-5p1.cnf.gz
+satcomp091113/rbcl_xits_07_UNSAT.cnf.gz
+satcomp091113/hitag2-8-60-0-0xdcdbc8bf368ee73-37.cnf.gz
+satcomp091113/manol-pipe-g7nidw.cnf.gz
+satcomp091113/partial-10-13-u.cnf.gz
+satcomp091113/dme-03-1-k247-unsat.shuffled-as.sat03-407.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pathways-17-step21.cnf.gz
+satcomp091113/8pipe_k.cnf.gz
+satcomp091113/1dlx_c_iq57_a.cnf.gz
+satcomp091113/23-64-nossum004.cnf.gz
+satcomp091113/uts-l06-ipc5-h31-unknown.cnf.gz
+satcomp091113/ctl_4291_567_2_unsat_pre.cnf.gz
+satcomp091113/blocks-blocks-36-0.180-SAT.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pipesworld-12-step16.cnf.gz
+satcomp091113/gss-13-s100.cnf.gz
+satcomp091113/countbitsarray32_32.cnf.gz
+satcomp091113/pb_400_03_lb_05.cnf.gz
+satcomp091113/hard-18-U-10652.cnf.gz
+satcomp091113/ctl_4291_567_10_unsat_pre.cnf.gz
+satcomp091113/velev-pipe-sat-1.0-b10.cnf.gz
+satcomp091113/pb_300_05_lb_11.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-bin_libsmbclient_vc1228502-tseitin.cnf.gz
+satcomp091113/AProVE07-03.cnf.gz
+satcomp091113/hitag2-8-60-0-0xb2021557d918860-94.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq9.used-as.sat04-719.cnf.gz
+satcomp091113/gss-18-s100.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom25.cnf.gz
+satcomp091113/traffic_3b_unknown.cnf.gz
+satcomp091113/uts-l06-ipc5-h35-unknown.cnf.gz
+satcomp091113/AProVE07-02.cnf.gz
+satcomp091113/aes_32_1_keyfind_1.cnf.gz
+satcomp091113/partial-10-19-s.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_56.cnf.gz
+satcomp091113/22-144-nossum001.cnf.gz
+satcomp091113/pb_300_02_lb_06.cnf.gz
+satcomp091113/post-c32s-gcdm16-23.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-pdtvisns3p00-tseitin.cnf.gz
+satcomp091113/UR-10-10p1.cnf.gz
+satcomp091113/velev-engi-uns-1.0-4nd.cnf.gz
+satcomp091113/velev-pipe-uns-1.0-8.cnf.gz
+satcomp091113/hoons-vbmc-lucky7.cnf.gz
+satcomp091113/md5_47_3.cnf.gz
+satcomp091113/12pipe_bug4_q0.used-as.sat04-723.cnf.gz
+satcomp091113/hitag2-10-60-0-0xbc15b17d0353413-10.cnf.gz
+satcomp091113/hsat_vc11803.cnf.gz
+satcomp091113/22-144-nossum009.cnf.gz
+satcomp091113/UCG-15-5p0.cnf.gz
+satcomp091113/goldb-heqc-x1mul.cnf.gz
+satcomp091113/safe-30-h29-unsat.cnf.gz
+satcomp091113/maxxor128.cnf.gz
+satcomp091113/cube-11-h13-unsat.cnf.gz
+satcomp091113/md5_47_2.cnf.gz
+satcomp091113/driverlog3_v01a.renamed-as.sat05-3963.cnf.gz
+satcomp091113/pb_200_10_lb_15.cnf.gz
+satcomp091113/q_query_3_l46_lambda.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-bin_libmsrpc_vc1225336-tseitin.cnf.gz
+satcomp091113/AProVE11-09.cnf.gz
+satcomp091113/ndhf_xits_13_UNSAT.cnf.gz
+satcomp091113/q_query_3_l43_lambda.cnf.gz
+satcomp091113/sokoban-sequential-p145-microban-sequential.060-NOTKNOWN.cnf.gz
+satcomp091113/aaai10-planning-ipc5-TPP-30-step11.cnf.gz
+satcomp091113/slp-synthesis-aes-top26.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_14.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_16.cnf.gz
+satcomp091113/E05F18.cnf.gz
+satcomp091113/UTI-10-5t1.cnf.gz
+satcomp091113/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom24.cnf.gz
+satcomp091113/7pipe_k.cnf.gz
+satcomp091113/rbcl_xits_15_SAT.cnf.gz
+satcomp091113/vmpc_26.cnf.gz
+satcomp091113/dspam_dump_vc949.cnf.gz
+satcomp091113/gus-md5-16.cnf.gz
+satcomp091113/xinetd_vc56703.cnf.gz
+satcomp091113/ctl_4291_567_7_unsat.cnf.gz
+satcomp091113/valves-gates-1-k617-unsat.shuffled-as.sat03-412.cnf.gz
+satcomp091113/dp04s04.shuffled.cnf.gz
+satcomp091113/vmpc_29.renamed-as.sat05-1916.cnf.gz
+satcomp091113/aaai10-planning-ipc5-rovers-18-step12.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-bobsmhdlc2-tseitin.cnf.gz
+satcomp091113/ACG-15-10p0.cnf.gz
+satcomp091113/UCG-20-10p1.cnf.gz
+satcomp091113/een-tip-sat-texas-tp-5e.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom13.cnf.gz
+satcomp091113/rbcl_xits_06_UNSAT.cnf.gz
+satcomp091113/velev-vliw-uns-4.0-9-i1.cnf.gz
+satcomp091113/pb_300_02_lb_07.cnf.gz
+satcomp091113/biere6s20.cnf.gz
+satcomp091113/ndhf_xits_16_UNKNOWN.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pipesworld-27-step14.cnf.gz
+satcomp091113/aes_32_3_keyfind_2.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-servers_slapd_a_vc149789-tseitin.cnf.gz
+satcomp091113/sortnet-8-ipc5-h19-sat.cnf.gz
+satcomp091113/gus-md5-11.cnf.gz
+satcomp091113/ACG-20-10p0.cnf.gz
+satcomp091113/minxorminand032.cnf.gz
+satcomp091113/dated-5-13-u.cnf.gz
+satcomp091113/AProVE09-21.cnf.gz
+satcomp091113/AProVE09-11.cnf.gz
+satcomp091113/slp-synthesis-aes-top27.cnf.gz
+satcomp091113/uts-l06-ipc5-h28-unknown.cnf.gz
+satcomp091113/hitag2-10-60-0-0xb7b72dfef34c17b-39.cnf.gz
+satcomp091113/maxand064.cnf.gz
+satcomp091113/bivium-39-200-0s0-0x1b770901581bbb2863c83835583d7ce4e1fafd907076320542-34.cnf.gz
+satcomp091113/transport-transport-city-sequential-35nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.050-SAT.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-bc57sensorsp1-tseitin.cnf.gz
+satcomp091113/22-128-nossum005.cnf.gz
+satcomp091113/6s139.cnf.gz
+satcomp091113/pb_300_09_lb_07.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-lfsr_008_063_080-tseitin.cnf.gz
+satcomp091113/post-c32s-gcdm16-22.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq4.cnf.gz
+satcomp091113/rpoc_xits_07_UNSAT.cnf.gz
+satcomp091113/SAT_dat.k100.cnf.gz
+satcomp091113/AProVE11-07.cnf.gz
+satcomp091113/IBM_FV_2004_rule_batch_30_SAT_dat.k55.cnf.gz
+satcomp091113/UTI-20-5p0.cnf.gz
+satcomp091113/pb_200_03_lb_03.cnf.gz
+satcomp091113/blocks-blocks-36-0.130-NOTKNOWN.cnf.gz
+satcomp091113/ACG-10-5p0.cnf.gz
+satcomp091113/post-cbmc-aes-ee-r2-noholes.cnf.gz
+satcomp091113/UTI-20-10t0.cnf.gz
+satcomp091113/AProVE11-16.cnf.gz
+satcomp091113/post-cbmc-aes-d-r2-noholes.cnf.gz
+satcomp091113/blocks-blocks-37-1.150-SAT.cnf.gz
+satcomp091113/hitag2-8-60-0-0xa3b8497b8aad6d7-42.cnf.gz
+satcomp091113/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.050-NOTKNOWN.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug1.cnf.gz
+satcomp091113/mulhs016.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtswvtms14x8p1-tseitin.cnf.gz
+satcomp091113/md5_47_4.cnf.gz
+satcomp091113/E07N15.cnf.gz
+satcomp091113/22-144-nossum008.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-eijkbs6669-tseitin.cnf.gz
+satcomp091113/rbcl_xits_12_UNKNOWN.cnf.gz
+satcomp091113/hitag2-7-60-0-0xe97b5f1bee04d70-47.cnf.gz
+satcomp091113/UR-20-5p1.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_24.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-lfsr_004_127_112-tseitin.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom23.cnf.gz
+satcomp091113/dated-10-17-u.cnf.gz
+satcomp091113/22-128-nossum001.cnf.gz
+satcomp091113/vmpc_32.renamed-as.sat05-1919.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug4.cnf.gz
+satcomp091113/UTI-20-5p1.cnf.gz
+satcomp091113/E04F20.cnf.gz
+satcomp091113/SAT_dat.k20.cnf.gz
+satcomp091113/clauses-8.cnf.gz
+satcomp091113/22-128-nossum002.cnf.gz
+satcomp091113/slp-synthesis-aes-top23.cnf.gz
+satcomp091113/UTI-15-10p0.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.085-SAT.cnf.gz
+satcomp091113/AProVE07-26.cnf.gz
+satcomp091113/ctl_4291_567_2_unsat.cnf.gz
+satcomp091113/hitag2-7-60-0-0x39ff85d4ef127de-52.cnf.gz
+satcomp091113/cmu-bmc-longmult15.cnf.gz
+satcomp091113/pb_300_10_lb_13.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-lfsr_008_079_112-tseitin.cnf.gz
+satcomp091113/E02F22.cnf.gz
+satcomp091113/AProVE09-13.cnf.gz
+satcomp091113/beempgsol5b1.cnf.gz
+satcomp091113/vange-col-abb313GPIA-9-c.cnf.gz
+satcomp091113/dp10s10.shuffled.cnf.gz
+satcomp091113/bivium-40-200-0s0-0xd447c33176b6b675fd5f8dc3a5deda46569dc34eedf37da020-6.cnf.gz
+satcomp091113/partial-5-15-s.cnf.gz
+satcomp091113/SAT_dat.k80.cnf.gz
+satcomp091113/smulo064.cnf.gz
+satcomp091113/k_unsat.cnf.gz
+satcomp091113/traffic_r_uc_sat.cnf.gz
+satcomp091113/velev-live-uns-2.0-ebuf.cnf.gz
+satcomp091113/ndhf_xits_12_UNSAT.cnf.gz
+satcomp091113/sokoban-sequential-p145-microban-sequential.080-SAT.cnf.gz
+satcomp091113/manol-pipe-c9.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq9.cnf.gz
+satcomp091113/slp-synthesis-aes-top30.cnf.gz
+satcomp091113/gss-26-s100.cnf.gz
+satcomp091113/AProVE09-01.cnf.gz
+satcomp091113/homer16.shuffled.cnf.gz
+satcomp091113/gss-27-s100.cnf.gz
+satcomp091113/sokoban-sequential-p145-microban-sequential.050-NOTKNOWN.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq2.cnf.gz
+satcomp091113/vmpc_30.cnf.gz
+satcomp091113/partial-10-19-u.cnf.gz
+satcomp091113/AProVE11-06.cnf.gz
+satcomp091113/bivium-39-200-0s0-0x163b785faa4bfb1b3b894a9206768a6c3d5d6f038b3797c4c2-99.cnf.gz
+satcomp091113/countbitssrl064.cnf.gz
+satcomp091113/eq.atree.braun.10.unsat.cnf.gz
+satcomp091113/pb_400_09_lb_05.cnf.gz
+satcomp091113/post-cbmc-aes-ele-noholes.cnf.gz
+satcomp091113/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp091113/gus-md5-09.cnf.gz
+satcomp091113/AProVE09-19.cnf.gz
+satcomp091113/gss-32-s100.cnf.gz
+satcomp091113/aes_128_3_keyfind_1.cnf.gz
+satcomp091113/dated-5-15-u.cnf.gz
+satcomp091113/een-tip-uns-nusmv-t5.B.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtvissoap1-tseitin.cnf.gz
+satcomp091113/AProVE07-27.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-pdtvisns2p3-tseitin.cnf.gz
+satcomp091113/simon-s02b-k2f-gr-rcs-w8.cnf.gz
+satcomp091113/rovers1_ks99i.renamed-as.sat05-3971.cnf.gz
+satcomp091113/gus-md5-12.cnf.gz
+satcomp091113/ctl_4291_567_7_unsat_pre.cnf.gz
+satcomp091113/pb_300_06_lb_02.cnf.gz
+satcomp091113/k2fix_gr_rcs_w9.shuffled.cnf.gz
+satcomp091113/post-cbmc-aes-ee-r3-noholes.cnf.gz
+satcomp091113/AProVE09-25.cnf.gz
+satcomp091113/10pipe_q0_k.cnf.gz
+satcomp091113/SAT_dat.k45.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom26.cnf.gz
+satcomp091113/8pipe_q0_k.cnf.gz
+satcomp091113/AProVE07-01.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq8.used-as.sat04-718.cnf.gz
+satcomp091113/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.040-NOTKNOWN.cnf.gz
+satcomp091113/countbitsrotate016.cnf.gz
+satcomp091113/dp04u03.shuffled.cnf.gz
+satcomp091113/blocks-blocks-36-0.150-NOTKNOWN.cnf.gz
+satcomp091113/6s126.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom22.cnf.gz
+satcomp091113/q_query_3_l44_lambda.cnf.gz
+satcomp091113/dated-5-17-u.cnf.gz
+satcomp091113/pb_200_03_lb_02.cnf.gz
+satcomp091113/maxor064.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.045-NOTKNOWN.cnf.gz
+satcomp091113/10pipe_k.cnf.gz
+satcomp091113/pb_400_09_lb_03.cnf.gz
+satcomp091113/homer17.shuffled.cnf.gz
+satcomp091113/UTI-20-10p1.cnf.gz
+satcomp091113/vmpc_35.renamed-as.sat05-1921.cnf.gz
+satcomp091113/pb_400_05_lb_00.cnf.gz
+satcomp091113/minand128.cnf.gz
+satcomp091113/pb_300_03_lb_13.cnf.gz
+satcomp091113/gus-md5-05.cnf.gz
+satcomp091113/aes_32_4_keyfind_1.cnf.gz
+satcomp091113/IBM_FV_2004_rule_batch_30_SAT_dat.k80.cnf.gz
+satcomp091113/ctl_4291_567_1_unsat.cnf.gz
+satcomp091113/UCG-20-5p1.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-pdtswvsam6x8p3-tseitin.cnf.gz
+satcomp091113/total-5-13-u.cnf.gz
+satcomp091113/goldb-heqc-term1mul.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_64.cnf.gz
+satcomp091113/manol-pipe-c10nidw_s.cnf.gz
+satcomp091113/ndhf_xits_22_SAT.cnf.gz
+satcomp091113/ndhf_xits_20_SAT.cnf.gz
+satcomp091113/goldb-heqc-frg1mul.cnf.gz
+satcomp091113/ctl_3082_415_unsat.cnf.gz
+satcomp091113/countbitsarray08_32.cnf.gz
+satcomp091113/c10idw_i.cnf.gz
+satcomp091113/slp-synthesis-aes-bottom12.cnf.gz
+satcomp091113/q_query_3_l39_lambda.cnf.gz
+satcomp091113/ctl_4291_567_6_unsat_pre.cnf.gz
+satcomp091113/gus-md5-06.cnf.gz
+satcomp091113/pb_300_10_lb_12.cnf.gz
+satcomp091113/bivium-39-200-0s0-0x53e7622aad02b083b53dcd6a4a76f54a150ceb996ea1dfa300-63.cnf.gz
+satcomp091113/bierebob12s06.cnf.gz
+satcomp091113/velev-pipe-o-uns-1.1-6.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pipesworld-27-step13.cnf.gz
+satcomp091113/rpoc_xits_17_SAT.cnf.gz
+satcomp091113/traffic_3_uc_sat.cnf.gz
+satcomp091113/q_query_3_l38_lambda.cnf.gz
+satcomp091113/UR-15-10p0.cnf.gz
+satcomp091113/blocks-blocks-36-0.120-NOTKNOWN.cnf.gz
+satcomp091113/beempgsol2b1.cnf.gz
+satcomp091113/pb_300_10_lb_06.cnf.gz
+satcomp091113/slp-synthesis-aes-top29.cnf.gz
+satcomp091113/uts-l06-ipc5-h33-unknown.cnf.gz
+satcomp091113/rpoc_xits_08_UNSAT.cnf.gz
+satcomp091113/AProVE09-17.cnf.gz
+satcomp091113/AProVE09-05.cnf.gz
+satcomp091113/manol-pipe-f10ni.cnf.gz
+satcomp091113/UR-10-5p0.cnf.gz
+satcomp091113/md5_48_4.cnf.gz
+satcomp091113/9dlx_vliw_at_b_iq6.cnf.gz
+satcomp091113/hitag2-7-60-0-0x5f8ec0ffa4b15c6-25.cnf.gz
+satcomp091113/traffic_r_sat.cnf.gz
+satcomp091113/mizh-md5-47-4.cnf.gz
+satcomp091113/hitag2-7-60-0-0xc048b9ebae66e9d-32-SAT.cnf.gz
+satcomp091113/UR-15-10p1.cnf.gz
+satcomp091113/11pipe_11_ooo.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-pdtpmsns2-tseitin.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtswvqis8x8p2-tseitin.cnf.gz
+satcomp091113/velev-vliw-uns-4.0-9C1.cnf.gz
+satcomp091113/myciel6-tr.used-as.sat04-320.cnf.gz
+satcomp091113/korf-15.cnf.gz
+satcomp091113/post-c32s-col400-16.cnf.gz
+satcomp091113/UR-20-10p0.cnf.gz
+satcomp091113/rpoc_xits_11_UNKNOWN.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtpmsgoodbakery-tseitin.cnf.gz
+satcomp091113/post-cbmc-zfcp-2.8-u2-noholes.cnf.gz
+satcomp091113/ctl_4291_567_9_unsat.cnf.gz
+satcomp091113/esawn_uw3.debugged.cnf.gz
+satcomp091113/q_query_2_L324_coli.cnf.gz
+satcomp091113/slp-synthesis-aes-top21.cnf.gz
+satcomp091113/gus-md5-15.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.025-NOTKNOWN.cnf.gz
+satcomp091113/pb_300_04_lb_05.cnf.gz
+satcomp091113/emptyroom-4-h21-unsat.cnf.gz
+satcomp091113/pb_300_04_lb_06.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_3.035-NOTKNOWN.cnf.gz
+satcomp091113/ndhf_xits_17_UNKNOWN.cnf.gz
+satcomp091113/am_7_7.shuffled-as.sat03-363.cnf.gz
+satcomp091113/sortnet-7-ipc5-h15-unsat.cnf.gz
+satcomp091113/gss-19-s100.cnf.gz
+satcomp091113/manol-pipe-f9b.cnf.gz
+satcomp091113/q_query_3_L100_coli.sat.cnf.gz
+satcomp091113/mizh-md5-47-3.cnf.gz
+satcomp091113/AProVE07-21.cnf.gz
+satcomp091113/partial-10-15-s.cnf.gz
+satcomp091113/abb313GPIA-9-c.used-as.sat04-317.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pipesworld-12-step15.cnf.gz
+satcomp091113/hitag2-8-60-0-0xfba1a41b5dfd7f7-52.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-VS3-benchmark-S2-tseitin.cnf.gz
+satcomp091113/post-c32s-ss-8.cnf.gz
+satcomp091113/AProVE07-08.cnf.gz
+satcomp091113/partial-5-13-s.cnf.gz
+satcomp091113/hitag2-10-60-0-0x8edc44db7837bbf-65.cnf.gz
+satcomp091113/pb_400_02_lb_15.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k45-pdtswvrod6x8p1-tseitin.cnf.gz
+satcomp091113/ndhf_xits_19_UNKNOWN.cnf.gz
+satcomp091113/dated-5-11-u.cnf.gz
+satcomp091113/9vliw_m_9stages_iq3_C1_bug5.cnf.gz
+satcomp091113/hsat_vc12062.cnf.gz
+satcomp091113/schup-l2s-bc56s-1-k391.cnf.gz
+satcomp091113/E03N17.cnf.gz
+satcomp091113/rand_net70-60-10.shuffled.cnf.gz
+satcomp091113/smtlib-qfbv-aigs-ext_con_032_008_0256-tseitin.cnf.gz
+satcomp091113/uts-l05-ipc5-h27-unknown.cnf.gz
+satcomp091113/rand_net60-40-10.shuffled.cnf.gz
+satcomp091113/vmpc_34.renamed-as.sat05-1926.cnf.gz
+satcomp091113/countbitsrotate032.cnf.gz
+satcomp091113/E00N23.cnf.gz
+satcomp091113/aloul-chnl11-13.cnf.gz
+satcomp091113/UCG-10-5p0.cnf.gz
+satcomp091113/transport-transport-three-cities-sequential-14nodes-1000size-4degree-100mindistance-4trucks-14packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp091113/ctl_4201_555_unsat_pre.cnf.gz
+satcomp091113/UTI-15-5p0.cnf.gz
+satcomp091113/slp-synthesis-aes-top25.cnf.gz
+satcomp091113/AProVE09-12.cnf.gz
+satcomp091113/SAT_dat.k85.cnf.gz
+satcomp091113/manol-pipe-c7bidw_i.cnf.gz
+satcomp091113/c6288mul.miter.shuffled-as.sat03-346.cnf.gz
+satcomp091113/bierebob12m06.cnf.gz
+satcomp091113/dated-10-19-u.cnf.gz
+satcomp091113/safe-50-h49-unsat.cnf.gz
+satcomp091113/md5_48_1.cnf.gz
+satcomp091113/countbitssrl016.cnf.gz
+satcomp091113/ctl_4291_567_11_unsat_pre.cnf.gz
+satcomp091113/ctl_4291_567_12_unsat_pre.cnf.gz
+satcomp091113/22-128-nossum009.cnf.gz
+satcomp091113/UTI-20-10t1.cnf.gz
+satcomp091113/sokoban-sequential-p145-microban-sequential.030-NOTKNOWN.cnf.gz
+satcomp091113/11pipe_q0_k.cnf.gz
+satcomp091113/x1mul.miter.shuffled-as.sat03-359.cnf.gz
+satcomp091113/dated-5-19-u.cnf.gz
+satcomp091113/ctl_4291_567_10_unsat.cnf.gz
+satcomp091113/6s133.cnf.gz
+satcomp091113/eq.atree.braun.11.unsat.cnf.gz
+satcomp091113/AProVE11-11.cnf.gz
+satcomp091113/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.030-NOTKNOWN.cnf.gz
+satcomp091113/aes_16_10_keyfind_3.cnf.gz
+satcomp091113/aes_128_1_keyfind_1.cnf.gz
+satcomp091113/hsat_vc11813.cnf.gz
+satcomp091113/hitag2-10-60-0-0xfee9637399d85a2-78.cnf.gz
+satcomp091113/22-128-nossum008.cnf.gz
+satcomp091113/aes_128_10_keyfind_1.cnf.gz
+satcomp091113/ACG-20-5p0.cnf.gz
+satcomp091113/transport-transport-city-sequential-25nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp091113/12pipe_bug6_q0.used-as.sat04-725.cnf.gz
+satcomp091113/UR-20-10p1.cnf.gz
+satcomp091113/dekker.used-as.sat04-989.cnf.gz
+satcomp091113/AProVE09-08.cnf.gz
+satcomp091113/total-5-17-u.cnf.gz
+satcomp091113/rpoc_xits_15_SAT.cnf.gz
+satcomp091113/bart17.shuffled.cnf.gz
+satcomp091113/total-10-17-u.cnf.gz
+satcomp091113/maxxororand128.cnf.gz
+satcomp091113/itox_vc1033.cnf.gz
+satcomp091113/AProVE09-15.cnf.gz
+satcomp091113/manol-pipe-f9n.cnf.gz
+satcomp091113/ndhf_xits_09_UNSAT.cnf.gz
+satcomp091113/maxxor064.cnf.gz
+satcomp091113/pb_400_04_lb_19.cnf.gz
+satcomp091113/homer14.shuffled.cnf.gz
+satcomp091113/grid-strips-grid-y-3.055-NOTKNOWN.cnf.gz
+satcomp091113/vmpc_25.cnf.gz
+satcomp091113/md5_48_5.cnf.gz
+satcomp091113/schup-l2s-motst-2-k315.cnf.gz
+satcomp091113/total-10-19-u.cnf.gz
+satcomp091113/gss-34-s100.cnf.gz
+satcomp091113/grid-strips-grid-y-3.065-SAT.cnf.gz
+satcomp091113/UR-10-5p1.cnf.gz
+satcomp091113/bob12m06.cnf.gz
+satcomp091113/UTI-15-10p1.cnf.gz
+satcomp091113/eq.atree.braun.12.unsat.cnf.gz
+satcomp091113/1dlx_c_iq60_a.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-pdtviseisenberg2-tseitin.cnf.gz
+satcomp091113/post-cbmc-zfcp-2.8-u2.cnf.gz
+satcomp091113/partial-5-15-u.cnf.gz
+satcomp091113/b_unsat.cnf.gz
+satcomp091113/ferry5_ks99i.renamed-as.sat05-3994.cnf.gz
+satcomp091113/ctl_4291_567_6_unsat.cnf.gz
+satcomp091113/q_query_3_L80_coli.sat.cnf.gz
+satcomp091113/cube-11-h14-sat.cnf.gz
+satcomp091113/pb_200_03_lb_01.cnf.gz
+satcomp091113/partial-5-19-s.cnf.gz
+satcomp091113/q_query_3_L60_coli.sat.cnf.gz
+satcomp091113/22-128-nossum004.cnf.gz
+satcomp091113/hwmcc10-timeframe-expansion-k50-bc57sensorsp2-tseitin.cnf.gz
+satcomp091113/biere6s153.cnf.gz
+satcomp091113/AProVE07-09.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.035-NOTKNOWN.cnf.gz
+satcomp091113/aaai10-planning-ipc5-pipesworld-18-step16.cnf.gz
+satcomp091113/minandmaxor016.cnf.gz
+satcomp091113/q_query_3_l42_lambda.cnf.gz
+satcomp091113/biere6s165.cnf.gz
+satcomp091113/AProVE09-10.cnf.gz
+satcomp091113/ACG-20-10p1.cnf.gz
+satcomp091113/arcfour_initialPermutation_5_32.cnf.gz
+satcomp091113/E02F17.cnf.gz
+satcomp091113/ndhf_xits_10_UNSAT.cnf.gz
+satcomp091113/UTI-10-10p0.cnf.gz
+satcomp091113/gss-24-s100.cnf.gz
+satcomp091113/bob12s06.cnf.gz
+satcomp091113/arcfour_initialPermutation_6_40.cnf.gz
+satcomp091113/ctl_4291_567_1_unsat_pre.cnf.gz
+satcomp091113/SAT_dat.k65.cnf.gz
+satcomp091113/6s103.cnf.gz
+satcomp091113/korf-17.cnf.gz
+satcomp091113/rpoc_xits_13_UNKNOWN.cnf.gz
+satcomp091113/ctl_4291_567_8_unsat.cnf.gz
+satcomp091113/itox_vc1130.cnf.gz
+satcomp091113/aes_32_2_keyfind_1.cnf.gz
+satcomp091113/rbcl_xits_18_SAT.cnf.gz
+satcomp091113/traffic_kkb_unknown.cnf.gz
+satcomp091113/countbitswegner128.cnf.gz
+satcomp091113/transport-transport-two-cities-sequential-15nodes-1000size-3degree-100mindistance-3trucks-10packages-2008seed.020-NOTKNOWN.cnf.gz
+satcomp091113/AProVE09-06.cnf.gz
+satcomp091113/clauses-8.renamed-as.sat05-1964.cnf.gz
+satcomp091113/aes_32_5_keyfind_1.cnf.gz
+satcomp091113/openstacks-sequencedstrips-nonadl-nonnegated-os-sequencedstrips-p30_1.045-NOTKNOWN.cnf.gz
+satcomp091113/pb_400_10_lb_00.cnf.gz
+satcomp091113/velev-pipe-sat-1.0-b9.cnf.gz
+satcomp091113/2dlx_ca_bp_f_liveness.cnf.gz
+satcomp091113/traffic_b_unsat.cnf.gz
+satcomp091113/ctl_4291_567_5_unsat.cnf.gz
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/server.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/server.py
new file mode 100755
index 000000000..3c5c75be9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/server.py
@@ -0,0 +1,432 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import os
+import socket
+import sys
+import struct
+import pickle
+import time
+import pprint
+import traceback
+import Queue
+import threading
+import logging
+import server_option_parser
+
+# for importing in systems where "." is not in the PATH
+sys.path.append(os.getcwd())
+from common_aws import *
+import RequestSpotClient
+
+
+def get_n_bytes_from_connection(sock, MSGLEN):
+ chunks = []
+ bytes_recd = 0
+ while bytes_recd < MSGLEN:
+ chunk = sock.recv(min(MSGLEN - bytes_recd, 2048))
+ if chunk == '':
+ raise RuntimeError("socket connection broken")
+ chunks.append(chunk)
+ bytes_recd = bytes_recd + len(chunk)
+
+ return ''.join(chunks)
+
+
+def send_command(sock, command, tosend=None):
+ # note, this is a python issue, we can't set above tosend={}
+ # https://nedbatchelder.com/blog/200806/pylint.html
+ tosend = tosend or {}
+
+ tosend["command"] = command
+ tosend = pickle.dumps(tosend)
+ tosend = struct.pack('!q', len(tosend)) + tosend
+ sock.sendall(tosend)
+
+
+class ToSolve:
+
+ def __init__(self, num, name):
+ self.num = num
+ self.name = name
+
+ def __str__(self):
+ return "%s (num: %d)" % (self.name, self.num)
+
+
+class Server (threading.Thread):
+ def __init__(self):
+ threading.Thread.__init__(self)
+ self.files_available = []
+ self.files_finished = []
+ self.files = {}
+
+ logging.info("Getting list of files %s", options.cnf_list)
+ key = boto.connect_s3().get_bucket("msoos-solve-data").get_key("solvers/" + options.cnf_list)
+ key.get_contents_to_filename(options.cnf_list)
+
+ fnames = open(options.cnf_list, "r")
+ logging.info("CNF list is file %s", options.cnf_list)
+ num = 0
+ for fname in fnames:
+ fname = fname.strip()
+ self.files[num] = ToSolve(num, fname)
+ self.files_available.append(num)
+ logging.info("File added: %s", fname)
+ num = num+1
+ fnames.close()
+
+ self.files_running = {}
+ logging.info("Solving %d files", len(self.files_available))
+ self.uniq_cnt = 0
+
+ def ready_to_shutdown(self):
+ if len(self.files_available) > 0:
+ return False
+
+ if len(self.files_finished) < len(self.files):
+ return False
+
+ return True
+
+ def handle_done(self, connection, cli_addr, indata):
+ file_num = indata["file_num"]
+
+ logging.info("Finished with file %s (num %d), got files %s",
+ self.files[indata["file_num"]], indata["file_num"],
+ indata["files"])
+ self.files_finished.append(indata["file_num"])
+ if file_num in self.files_running:
+ del self.files_running[file_num]
+
+ logging.info("Num files_available: %d Num files_finished %d",
+ len(self.files_available), len(self.files_finished))
+
+ self.rename_files_to_final(indata["files"])
+ sys.stdout.flush()
+
+ def rename_files_to_final(self, files):
+ for fnames in files:
+ logging.info("Renaming file %s to %s", fnames[0], fnames[1])
+ ret = os.system("aws s3 mv s3://{bucket}/{origname} s3://{bucket}/{toname} --region {region}".format(
+ bucket=options.s3_bucket,
+ origname=fnames[0],
+ toname=fnames[1],
+ region=options.region))
+ if ret:
+ logging.warn("Renaming file to final name failed!")
+
+ def check_for_dead_files(self):
+ this_time = time.time()
+ files_to_remove_from_files_running = []
+ for file_num, starttime in self.files_running.items():
+ duration = this_time - starttime
+ # print("* death check. running:" , file_num, " duration: ",
+ # duration)
+ if duration > options.timeout_in_secs*options.tout_mult:
+ logging.warn("* dead file %s duration: %d re-inserting",
+ file_num, duration)
+ files_to_remove_from_files_running.append(file_num)
+ self.files_available.append(file_num)
+
+ for c in files_to_remove_from_files_running:
+ del self.files_running[c]
+
+ def find_something_to_solve(self):
+ self.check_for_dead_files()
+ logging.info("Num files_available pre-send: %d",
+ len(self.files_available))
+
+ if len(self.files_available) == 0:
+ return None
+
+ file_num = self.files_available[0]
+ del self.files_available[0]
+ logging.info("Num files_available post-send: %d",
+ len(self.files_available))
+ sys.stdout.flush()
+
+ return file_num
+
+ def handle_build(self, connection, cli_addr, indata):
+ tosend = self.default_tosend()
+ logging.info("Sending git revision %s to %s", options.git_rev,
+ cli_addr)
+ send_command(connection, "build_data", tosend)
+
+ def send_termination(self, connection, cli_addr):
+ tosend = {}
+ tosend["noshutdown"] = options.noshutdown
+ send_command(connection, "finish", tosend)
+
+ logging.info("No more to solve, terminating %s", cli_addr)
+ global last_termination_sent
+ last_termination_sent = time.time()
+
+ def send_wait(self, connection, cli_addr):
+ tosend = {}
+ tosend["noshutdown"] = options.noshutdown
+ logging.info("Everything is in sent queue, sending wait to %s", cli_addr)
+ send_command(connection, "wait", tosend)
+
+ def default_tosend(self):
+ tosend = {}
+ tosend["solver"] = options.solver
+ tosend["git_rev"] = options.git_rev
+ tosend["stats"] = options.stats
+ tosend["gauss"] = options.gauss
+ tosend["s3_bucket"] = options.s3_bucket
+ tosend["given_folder"] = options.given_folder
+ tosend["timeout_in_secs"] = options.timeout_in_secs
+ tosend["mem_limit_in_mb"] = options.mem_limit_in_mb
+ tosend["noshutdown"] = options.noshutdown
+ tosend["extra_opts"] = options.extra_opts
+ tosend["drat"] = options.drat
+ tosend["region"] = options.region
+
+ return tosend
+
+ def send_one_to_solve(self, connection, cli_addr, file_num):
+ # set timer that we have sent this to be solved
+ self.files_running[file_num] = time.time()
+ filename = self.files[file_num].name
+
+ tosend = self.default_tosend()
+ tosend["file_num"] = file_num
+ tosend["cnf_filename"] = filename
+ tosend["uniq_cnt"] = str(self.uniq_cnt)
+ logging.info("Sending file %s (num %d) to %s",
+ filename, file_num, cli_addr)
+ send_command(connection, "solve", tosend)
+ self.uniq_cnt += 1
+
+ def handle_need(self, connection, cli_addr, indata):
+ # TODO don't ignore 'indata' for solving CNF instances, use it to
+ # opitimize for uptime
+ file_num = self.find_something_to_solve()
+
+ if file_num is None:
+ if len(self.files_running) == 0:
+ self.send_termination(connection, cli_addr)
+ else:
+ self.send_wait(connection, cli_addr)
+ else:
+ self.send_one_to_solve(connection, cli_addr, file_num)
+
+ def handle_one_client(self, conn, cli_addr):
+ try:
+ logging.info("connection from %s", cli_addr)
+
+ data = get_n_bytes_from_connection(conn, 8)
+ length = struct.unpack('!q', data)[0]
+ data = get_n_bytes_from_connection(conn, length)
+ data = pickle.loads(data)
+
+ if data["command"] == "done":
+ self.handle_done(conn, cli_addr, data)
+
+ if data["command"] == "error":
+ shutdown(-1)
+ raise
+
+ elif data["command"] == "need":
+ self.handle_need(conn, cli_addr, data)
+
+ elif data["command"] == "build":
+ self.handle_build(conn, cli_addr, data)
+
+ sys.stdout.flush()
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ traceback.print_exc()
+ the_trace = traceback.format_exc()
+
+ logging.error("Exception from %s, Trace: %s", cli_addr,
+ the_trace)
+
+ finally:
+ # Clean up the connection
+ logging.info("Finished with client %s", cli_addr)
+ conn.close()
+
+ def run(self):
+ global acc_queue
+ while True:
+ conn, cli_addr = acc_queue.get()
+ self.handle_one_client(conn, cli_addr)
+
+
+class Listener (threading.Thread):
+
+ def __init__(self):
+ threading.Thread.__init__(self)
+
+ def listen_to_connection(self):
+ # Create a TCP/IP socket
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+ # Bind the socket to the port
+ server_address = ('0.0.0.0', options.port)
+ logging.info('starting up on %s port %s', server_address, options.port)
+ sock.bind(server_address)
+
+ # Listen for incoming connections
+ sock.listen(128)
+ return sock
+
+ def handle_one_connection(self):
+ global acc_queue
+
+ # Wait for a connection
+ conn, client_addr = self.sock.accept()
+ acc_queue.put_nowait((conn, client_addr))
+
+ def run(self):
+ try:
+ self.sock = self.listen_to_connection()
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.error("Cannot listen on stocket! Traceback: %s", the_trace)
+ shutdown(-1)
+ raise
+ while True:
+ self.handle_one_connection()
+
+
+class SpotManager (threading.Thread):
+
+ def __init__(self):
+ threading.Thread.__init__(self)
+ self.spot_creator = RequestSpotClient.RequestSpotClient(
+ options.git_rev,
+ ("test" in options.cnf_list), noshutdown=options.noshutdown,
+ count=options.client_count)
+
+ def run(self):
+ while True:
+ try:
+ if not server.ready_to_shutdown():
+ self.spot_creator.create_spots_if_needed()
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.error("Cannot create spots! Traceback: %s", the_trace)
+
+ time.sleep(60)
+
+
+def shutdown(exitval=0):
+ toexec = "sudo shutdown -h now"
+ logging.info("SHUTTING DOWN")
+
+ # send email
+ try:
+ email_subject = "Server shutting down "
+ if exitval == 0:
+ email_subject += "OK"
+ else:
+ email_subject += "FAIL"
+
+ full_s3_folder = get_s3_folder(
+ options.given_folder,
+ options.git_rev,
+ options.solver,
+ options.timeout_in_secs,
+ options.mem_limit_in_mb)
+ text = """Server finished. Please download the final data:
+
+mkdir {0}
+cd {0}
+aws s3 cp --recursive s3://{1}/{0}/ .
+
+Don't forget to:
+
+* check volume
+* check EC2 still running
+
+So long and thanks for all the fish!
+""".format(full_s3_folder, options.s3_bucket)
+ send_email(email_subject, text, options.logfile_name)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ the_trace = traceback.format_exc().rstrip().replace("\n", " || ")
+ logging.error("Cannot send email! Traceback: %s", the_trace)
+
+ if not options.noshutdown:
+ os.system(toexec)
+
+ exit(exitval)
+
+
+def set_up_logging():
+ form = '[ %(asctime)-15s %(levelname)s %(message)s ]'
+ logformatter = logging.Formatter(form)
+
+ try:
+ os.unlink(options.logfile_name)
+ except:
+ pass
+ fileHandler = logging.FileHandler(options.logfile_name)
+ fileHandler.setFormatter(logformatter)
+ logging.getLogger().addHandler(fileHandler)
+ logging.getLogger().setLevel(logging.INFO)
+
+if __name__ == "__main__":
+ global options
+ global args
+ options, args = server_option_parser.parse_arguments()
+ if options.drat:
+ assert "cryptominisat" in options.solver
+
+ global acc_queue
+ acc_queue = Queue.Queue()
+ last_termination_sent = None
+
+ set_up_logging()
+ logging.info("Server called with parameters: %s",
+ pprint.pformat(options, indent=4).replace("\n", " || "))
+
+ if not options.git_rev:
+ options.git_rev = get_revision(options.base_dir + options.solver, options.base_dir)
+ logging.info("Revision not given, taking HEAD: %s", options.git_rev)
+
+ server = Server()
+ listener = Listener()
+ spotmanager = SpotManager()
+ listener.setDaemon(True)
+ server.setDaemon(True)
+ spotmanager.setDaemon(True)
+
+ listener.start()
+ server.start()
+ time.sleep(20)
+ spotmanager.start()
+
+ while threading.active_count() > 0:
+ time.sleep(0.5)
+ if last_termination_sent is not None and server.ready_to_shutdown():
+ diff = time.time() - last_termination_sent
+ limit = 100
+ if diff > limit:
+ break
+
+ shutdown()
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/aws/server_option_parser.py b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/server_option_parser.py
new file mode 100755
index 000000000..c31cb0bde
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/aws/server_option_parser.py
@@ -0,0 +1,194 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+import optparse
+import random
+import time
+import string
+import configparser
+
+
+def parse_arguments():
+ class PlainHelpFormatter(optparse.IndentedHelpFormatter):
+
+ def format_description(self, description):
+ if description:
+ return description + "\n"
+ else:
+ return ""
+
+ usage = """usage: %prog
+
+To use other solvers, give:
+--solver SWDiA5BY.alt.vd.res.va2.15000.looseres.3tierC5/binary/SWDiA5BY_static.alt.vd
+--solver SWDiA5BY_A26/binary/SWDiA5BY_static_A26
+--solver lingeling_ayv/binary/lingeling_ayv
+--solver glucose2016/simp/glucose_static_2016
+--solver MapleCOMSPS/simp/maplecomsps_static
+--solver cmsat-satcomp16/bin/cryptominisat4_simple
+--solver lingeling-bbc/build/lingeling/lingeling_bbc
+--solver Maple_LCM_Dist/Maple_LCM_Dist # may work with --drat, but needs updated DRAT checker
+
+
+Use-cases:
+# normal run
+./launch_server.py --cnflist satcomp17_updated
+
+# stats run
+./launch_server.py --cnf test_updated --stats --drat --tout 600 --memlimit 10000
+./launch_server.py --cnf unsat_small_candidates_fullpath --stats --drat --tout 600 --memlimit 10000
+
+
+# testing, using small instance to check (cheaper & faster)
+./launch_server.py --cnflist test_updated
+
+# 2 clients, no preprocessing
+./launch_server.py --cnflist satcomp14 -c 2 --opt "--preproc 0" --folder no_preproc
+
+# gaussian elimination -- automatic detection, built with GAUSS
+./launch_server.py --cnflist satcomp14 --folder gauss
+
+# clause IDs so learning can be performed -- gzipped SQL output with clause IDs will be produced
+./launch_server.py --stats --drat --folder learning
+
+# to give options to the solver
+./launch_server.py --folder with_opts --opt \"--ml=1,--keepglue=4\""
+
+ # to upload features_to_reconf.cpp
+aws s3 cp ../../src/features_to_reconf.cpp s3://msoos-solve-data/solvers/
+
+"""
+ parser = optparse.OptionParser(usage=usage, formatter=PlainHelpFormatter())
+ parser.add_option("--verbose", "-v", action="store_true",
+ default=False, dest="verbose", help="Be more verbose"
+ )
+
+ parser.add_option("--numclients", "-c", default=None, type=int,
+ dest="client_count", help="Number of clients to launch"
+ )
+
+ parser.add_option("--port", "-p", default=10000, dest="port",
+ help="Port to listen on. [default: %default]", type="int"
+ )
+
+ parser.add_option("--tout", "-t", default=3000, dest="timeout_in_secs",
+ help="Timeout for the file in seconds"
+ "[default: %default]",
+ type=int
+ )
+
+ parser.add_option("--toutmult", default=12.1, dest="tout_mult",
+ help="Approx: 1x is solving, 10x time is DRAT time wait, 1x is parsing, 0.1x that is sending us the result."
+ "[default: %default]",
+ type=float
+ )
+
+ parser.add_option("--memlimit", "-m", default=1600, dest="mem_limit_in_mb",
+ help="Memory limit in MB"
+ "[default: %default]",
+ type=int
+ )
+
+ parser.add_option("--cnflist", default="satcomp14_updated", dest="cnf_list",
+ type=str,
+ help="The list of CNF files to solve, first line the dir"
+ "[default: %default]",
+ )
+
+ parser.add_option("--dir", default="/home/ubuntu/", dest="base_dir", type=str,
+ help="The home dir of cryptominisat [default: %default]"
+ )
+
+ parser.add_option("--solver",
+ default="cryptominisat/build/cryptominisat5",
+ dest="solver",
+ help="Solver executable"
+ "[default: %default]",
+ type=str
+ )
+
+ parser.add_option("--folder", default="results", dest="given_folder",
+ help="S3 folder name to upload data"
+ "[default: %default]",
+ type=str
+ )
+
+ parser.add_option("--git", dest="git_rev", type=str,
+ help="The GIT revision to use. Default: HEAD"
+ )
+
+ parser.add_option("--opt", dest="extra_opts", type=str, default="",
+ help="Extra options to give to solver"
+ "[default: %default]",
+ )
+
+ parser.add_option("--noshutdown", "-n", default=False, dest="noshutdown",
+ action="store_true", help="Do not shut down clients"
+ )
+
+ parser.add_option("--drat", default=False, dest="drat",
+ action="store_true", help="Use DRAT"
+ )
+
+ parser.add_option("--stats", default=False, dest="stats",
+ action="store_true", help="Use STATS and get SQLITE data"
+ )
+
+ parser.add_option("--gauss", default=False, dest="gauss",
+ action="store_true", help="Use GAUSS"
+ )
+
+ parser.add_option("--logfile", dest="logfile_name", type=str,
+ default="python_server_log.log", help="Name of LOG file")
+
+ # parse options
+ options, args = parser.parse_args()
+ conf = configparser.ConfigParser()
+ if options.cnf_list == "test":
+ conf.read('ec2-spot-instance-test.cfg')
+ else:
+ conf.read('ec2-spot-instance.cfg')
+
+ options.s3_bucket = conf.get("ec2", "result_bucket")
+ options.key_name = conf.get("ec2", "key_name")
+ options.security_group_server = conf.get("ec2", "security_group_server")
+ options.subnet_id = conf.get("ec2", "subnet_id")
+ options.ami_id = conf.get("ec2", "ami_id")
+ options.region = conf.get("ec2", "region")
+
+ def rnd_id():
+ return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5))
+
+ options.logfile_name = options.base_dir + options.logfile_name
+ options.given_folder += "-" + time.strftime("%d-%B-%Y")
+ options.given_folder += "-%s" % rnd_id()
+ options.given_folder += "-%s" % options.cnf_list
+
+ if options.drat and not options.stats:
+ print("ERROR: You must have --stats when you use --drat")
+ exit(-1)
+
+ return options, args
+
+
+if __name__ == "__main__":
+ options, args = parse_arguments()
+ print("Options are:", options)
+ print("args are:", args)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/check_all_licenses.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/check_all_licenses.sh
new file mode 100755
index 000000000..ee2c025cd
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/check_all_licenses.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/bash
+set -e
+set -x
+
+check_license_fnames() {
+ #license check -- first print and then fail in case of problems
+ find $1 -type f -name $2 -exec ../utils/licensecheck/licensecheck.pl -m {} \;
+ NUM=$(find $1 -type f -name $2 -exec ../utils/licensecheck/licensecheck.pl -m {} \; | grep UNK | wc -l)
+ shopt -s extglob
+ NUM="${NUM##*( )}"
+ NUM="${NUM%%*( )}"
+ shopt -u extglob
+ if [ "$NUM" -ne 0 ]; then
+ echo "There are some files without license information!"
+ exit -1
+ fi
+}
+
+check_license_fnames ../tests/ CMakeLists.txt
+check_license_fnames ../src/ CMakeLists.txt
+check_license_fnames ../scripts/ CMakeLists.txt
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/docker/Dockerfile b/cryptominisat5/cryptominisat-5.6.3/scripts/docker/Dockerfile
new file mode 100644
index 000000000..c76597c8b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/docker/Dockerfile
@@ -0,0 +1,9 @@
+FROM ubuntu:14.04
+MAINTAINER Mate Soos
+# RUN apt-get update && apt-get install -y libboost-program-options1.54.0 libstdc++6 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+RUN apt-get install libboost-program-options1.54.0
+ADD cryptominisat4 /home/cryptominisat4
+ADD libcryptominisat4* /home/
+ADD libm4ri-* /home/
+WORKDIR /home
+CMD ["./cryptominisat4"]
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/CMakeLists.txt
new file mode 100644
index 000000000..31d801c70
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright (c) 2017, Mate Soos
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+
+# resource limiting is not available on Windows, so skip
+if (ENABLE_TESTING AND NOT MSVC AND NOT ONLY_SIMPLE)
+ add_test (
+ NAME verifier_test
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/verifier_test.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+endif()
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/debuglib.py b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/debuglib.py
new file mode 100644
index 000000000..639899b9f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/debuglib.py
@@ -0,0 +1,148 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import with_statement # Required in 2.5
+from __future__ import print_function
+import random
+
+
+def get_max_var_from_clause(line):
+ maxvar = 0
+ # strip leading 'x'
+ line2 = line.strip()
+ if len(line2) > 0 and line2[0] == 'x':
+ line2 = line2[1:]
+
+ for lit in line2.split():
+ num = 0
+ try:
+ num = int(lit)
+ except ValueError:
+ print("line '%s' contains a non-integer variable" % line2)
+
+ maxvar = max(maxvar, abs(num))
+
+ return maxvar
+
+
+class debuglib:
+ @staticmethod
+ def generate_random_assumps(maxvar):
+ assumps = ""
+ num = 0
+ varsInside = set()
+
+ # Half of the time, no assumptions at all
+ if random.randint(0, 1) == 1:
+ return assumps
+
+ # use a distribution so that few will be in assumps
+ while (num < maxvar and random.randint(0, 4) > 0):
+
+ # get a var that is not already inside the assumps
+ thisVar = random.randint(1, maxvar)
+ tries = 0
+ while (thisVar in varsInside):
+ thisVar = random.randint(1, maxvar)
+ tries += 1
+
+ # too many tries, don't waste time
+ if tries > 100:
+ return assumps
+
+ varsInside.add(thisVar)
+
+ # random sign
+ num += 1
+ if random.randint(0, 1):
+ thisVar *= -1
+
+ assumps += "%d " % thisVar
+
+ return assumps
+
+ @staticmethod
+ def file_len_no_comment(fname):
+ i = 0
+ with open(fname) as f:
+ for l in f:
+ # ignore comments and empty lines and header
+ if not l or l[0] == "c" or l[0] == "p":
+ continue
+ i += 1
+
+ return i
+
+ @staticmethod
+ def main(fname1, fname2):
+
+ # approx number of solve()-s to add
+ if random.randint(0, 1) == 1:
+ num_to_add = random.randint(0, 10)
+ else:
+ num_to_add = 0
+
+ # based on length and number of solve()-s to add, intersperse
+ # file with ::solve()
+ file_len = debuglib.file_len_no_comment(fname1)
+ if num_to_add > 0:
+ nextToAdd = random.randint(1, int(file_len / num_to_add) + 1)
+ else:
+ nextToAdd = file_len + 1
+
+ fin = open(fname1, "r")
+ fout = open(fname2, "w")
+ at = 0
+ maxvar = 0
+ for line in fin:
+ line = line.strip()
+
+ # ignore comments (but write them out)
+ if not line or line[0] == "c" or line[0] == 'p':
+ fout.write(line + '\n')
+ continue
+
+ at += 1
+ if at >= nextToAdd:
+ assumps = debuglib.generate_random_assumps(maxvar)
+ if random.choice([True, False]):
+ fout.write("c Solver::solve( %s )\n" % assumps)
+ elif random.choice([True, False]):
+ fout.write("c Solver::simplify( %s )\n" % assumps)
+ else:
+ fout.write("c Solver::simplify( %s )\n" % assumps)
+ fout.write("c Solver::solve( %s )\n" % assumps)
+
+ nextToAdd = at + \
+ random.randint(1, int(file_len / num_to_add) + 1)
+
+ # calculate max variable
+ maxvar = max(maxvar, get_max_var_from_clause(line))
+
+ # copy line over
+ fout.write(line + '\n')
+ fout.close()
+ fin.close()
+
+
+def intersperse(fname1, fname2, seed):
+ random.seed(int(seed))
+ debuglib.main(fname1, fname2)
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/fuzz_test.py b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/fuzz_test.py
new file mode 100755
index 000000000..1b741ef1a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/fuzz_test.py
@@ -0,0 +1,871 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import with_statement # Required in 2.5
+from __future__ import print_function
+import subprocess
+import os
+import sys
+import time
+import random
+from random import choice
+import optparse
+import glob
+import resource
+from verifier import *
+from functools import partial
+
+print("our CWD is: %s files here: %s" % (os.getcwd(), glob.glob("*")))
+sys.path.append(os.getcwd())
+print("our sys.path is", sys.path)
+
+from debuglib import *
+
+
+class PlainHelpFormatter(optparse.IndentedHelpFormatter):
+
+ def format_description(self, description):
+ if description:
+ return description + "\n"
+ else:
+ return ""
+
+
+usage = "usage: %prog [options] --fuzz/--regtest/--checkdir/filetocheck"
+desc = """Fuzz the solver with fuzz-generator: ./fuzz_test.py
+"""
+
+
+def set_up_parser():
+ parser = optparse.OptionParser(usage=usage, description=desc,
+ formatter=PlainHelpFormatter())
+ parser.add_option("--exec", metavar="SOLVER", dest="solver",
+ default="../../build/cryptominisat5",
+ help="SAT solver executable. Default: %default")
+
+ parser.add_option("--extraopts", "-e", metavar="OPTS",
+ dest="extra_options", default="",
+ help="Extra options to give to SAT solver")
+
+ parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Print more output")
+
+ # for fuzz-testing
+ parser.add_option("--seed", dest="fuzz_seed_start",
+ help="Fuzz test start seed. Otherwise, random seed is picked"
+ " (printed to console)", type=int)
+
+ parser.add_option("--fuzzlim", dest="fuzz_test_lim", type=int,
+ help="Number of fuzz tests to run"
+ )
+ parser.add_option("--novalgrind", dest="novalgrind", default=False,
+ action="store_true", help="No valgrind installed")
+ parser.add_option("--valgrindfreq", dest="valgrind_freq", type=int,
+ default=10, help="1 out of X times valgrind will be used. Default: %default in 1")
+
+ parser.add_option("--small", dest="small", default=False,
+ action="store_true",
+ help="Don't run 'large' fuzzer"
+ " (may mem-out on smaller systems)")
+ parser.add_option("--gauss", dest="gauss", default=False,
+ action="store_true",
+ help="Concentrate fuzzing gauss")
+ parser.add_option("--indep", dest="only_indep", default=False,
+ action="store_true",
+ help="Concentrate fuzzing independent variables")
+ parser.add_option("--dump", dest="only_dump", default=False,
+ action="store_true",
+ help="Concentrate fuzzing dumped clauses")
+
+ parser.add_option("--maxth", "-m", dest="max_threads", default=100,
+ type=int, help="Max number of threads")
+
+ parser.add_option("--tout", "-t", dest="maxtime", type=int, default=35,
+ help="Max time to run. Default: %default")
+
+ parser.add_option("--textra", dest="maxtimediff", type=int, default=10,
+ help="Extra time on top of timeout for processing."
+ " Default: %default")
+ return parser
+
+
+def fuzzer_call_failed(fname):
+ print("OOps, fuzzer executable call failed!")
+ print("Did you build with cmake -DENABLE_TESTING=ON? Did you do git submodules init & update?")
+ print("Here is the output:")
+
+ print("**** ----- ****")
+ with open(fname, "r") as a:
+ for x in a:
+ print(x.strip())
+ print("**** ----- ****")
+ exit(-1)
+
+
+class create_fuzz:
+
+ def call_from_fuzzer(self, fuzzer, fname):
+ seed = random.randint(0, 1000000)
+ if len(fuzzer) == 1:
+ call = "{0} {1} > {2}".format(fuzzer[0], seed, fname)
+ elif len(fuzzer) == 2:
+ call = "{0} {1} {2} > {3}".format(
+ fuzzer[0], fuzzer[1], seed, fname)
+ elif len(fuzzer) == 3:
+ hashbits = (random.getrandbits(20) % 80) + 1
+ call = "%s %s %d %s %d > %s" % (
+ fuzzer[0], fuzzer[1], hashbits, fuzzer[2], seed, fname)
+ else:
+ assert False, "Fuzzer must have at most 2 arguments"
+
+ return call
+
+ def create_fuzz_file(self, fuzzer, fuzzers, fname):
+ # handle special fuzzer
+ fnames_multi = []
+ if len(fuzzer) == 2 and fuzzer[1] == "special":
+
+ # sometimes just fuzz with all SAT problems
+ fixed = random.getrandbits(1) == 1
+
+ for _ in range(random.randrange(2, 4)):
+ fname2 = unique_file("fuzzTest")
+ fnames_multi.append(fname2)
+
+ # chose a ranom fuzzer, not multipart
+ fuzzer2 = ["multipart.py", "special"]
+ while os.path.basename(fuzzer2[0]) == "multipart.py":
+ fuzzer2 = choice(fuzzers)
+
+ # sometimes fuzz with SAT problems only
+ if (fixed):
+ fuzzer2 = fuzzers[0]
+
+ print("fuzzer2 used: %s" % fuzzer2)
+ call = self.call_from_fuzzer(fuzzer2, fname2)
+ print("calling sub-fuzzer: %s" % call)
+ status = subprocess.call(call, shell=True)
+ if status != 0:
+ fuzzer_call_failed(fname2)
+
+ # construct multi-fuzzer call
+ call = ""
+ call += fuzzer[0]
+ call += " "
+ for name in fnames_multi:
+ call += " " + name
+ call += " > " + fname
+
+ return call, fnames_multi
+
+ # handle normal fuzzer
+ else:
+ return self.call_from_fuzzer(fuzzer, fname), []
+
+
+def file_exists(fname):
+ try:
+ with open(fname):
+ return True
+ except IOError:
+ return False
+
+
+def print_version():
+ command = options.solver + " --version"
+ if options.verbose:
+ print("Executing: %s" % command)
+ p = subprocess.Popen(command.rsplit(), stderr=subprocess.STDOUT,
+ stdout=subprocess.PIPE, universal_newlines=True)
+
+ consoleOutput, err = p.communicate()
+ print("Version values: %s" % consoleOutput.strip())
+
+
+class Tester:
+
+ def __init__(self):
+ self.ignoreNoSolution = False
+ self.extra_opts_supported = self.list_options_if_supported(
+ ["xor", "autodisablegauss", "sql", "clid"])
+ self.sol_parser = solution_parser(options)
+ self.sqlitedbfname = None
+ self.clid_added = False
+ self.only_indep = False
+ self.indep_vars = []
+ self.dump_red = None
+
+ def list_options_if_supported(self, tocheck):
+ ret = []
+ for elem in tocheck:
+ if self.option_supported(elem):
+ ret.append(elem)
+
+ return ret
+
+ def option_supported(self, option_name):
+ command = options.solver
+ command += " --hhelp"
+ p = subprocess.Popen(
+ command.rsplit(), stderr=subprocess.STDOUT,
+ stdout=subprocess.PIPE,
+ universal_newlines=True)
+
+ consoleOutput, err = p.communicate()
+
+ for l in consoleOutput.split("\n"):
+ tmp_option_name = "--" + option_name
+ if tmp_option_name in l:
+ return True
+
+ return False
+
+ def create_rnd_sched(self, string_list):
+ opts = string_list.split(",")
+ opts = [a.strip(" ") for a in opts]
+ opts = sorted(list(set(opts)))
+ if options.verbose:
+ print("available schedule options: %s" % opts)
+
+ sched = []
+ for _ in range(int(random.gammavariate(12, 0.7))):
+ sched.append(random.choice(opts))
+
+ # just so that XOR is really found and used, so we can fuzz it
+ if "autodisablegauss" in self.extra_opts_supported:
+ if random.choice([False, True, True, True]) and self.this_gauss_on:
+ sched.append("occ-xor")
+
+ return sched
+
+ def rnd_schedule_all(self, preproc):
+ sched_opts = "handle-comps,"
+ sched_opts += "scc-vrepl, cache-clean, cache-tryboth,"
+ sched_opts += "sub-impl, intree-probe, probe,"
+ sched_opts += "sub-str-cls-with-bin, distill-cls, scc-vrepl, sub-impl,"
+ sched_opts += "sub-cls-with-bin,"
+ sched_opts += "str-impl, cache-clean, sub-str-cls-with-bin, distill-cls, scc-vrepl,"
+ sched_opts += "occ-backw-sub-str, occ-xor, occ-clean-implicit, occ-bve, occ-bva,"
+ sched_opts += "check-cache-size, renumber"
+
+ # type of schedule
+ cmd = ""
+ sched = ",".join(self.create_rnd_sched(sched_opts))
+ if sched != "" and not preproc:
+ cmd += "--schedule %s " % sched
+
+ sched = ",".join(self.create_rnd_sched(sched_opts))
+ if sched != "":
+ cmd += "--preschedule %s " % sched
+
+ return cmd
+
+ def random_options(self, preproc=False):
+ self.sqlitedbfname = None
+ self.clid_added = False
+ cmd = " --zero-exit-status "
+
+ # disable gauss when gauss is compiled in but asked not to be used
+ if not self.this_gauss_on and "autodisablegauss" in self.extra_opts_supported:
+ cmd += "--maxgaussdepth 0 "
+
+ # note, presimp=0 is braindead for preproc but it's mostly 1 so OK
+ cmd += "--presimp %d " % random.choice([1, 1, 1, 1, 1, 1, 1, 0])
+ cmd += "--confbtwsimp %d " % random.choice([100, 1000])
+
+ if self.dump_red is not None:
+ cmd += "--dumpred %s " % self.dump_red
+ cmd += "--dumpredmaxlen %d " % random.choice([2, 10, 100, 100000])
+ cmd += "--dumpredmaxglue %d " % random.choice([2, 10, 100, 100000])
+
+ if self.only_indep:
+ cmd += "--onlyindep "
+ cmd += "--indep "
+ cmd += ",".join(["%s" % x for x in self.indep_vars]) + " "
+
+ if random.choice([True, False]) and "clid" in self.extra_opts_supported:
+ cmd += "--varsperxorcut %d " % random.randint(4, 6)
+ cmd += "--xorcache %d " % random.choice([0, 1])
+ if random.choice([True, True, True, False]):
+ self.clid_added = True
+ cmd += "--clid "
+ cmd += "--locgmult %.12f " % random.gammavariate(0.5, 0.7)
+ cmd += "--varelimover %d " % random.gammavariate(1, 20)
+ cmd += "--memoutmult %0.12f " % random.gammavariate(0.03, 50)
+ cmd += "--verb %d " % random.choice([0, 0, 0, 0, 1, 2])
+ cmd += "--maple %d " % random.choice([0, 1])
+ if random.randint(0, 2) == 1:
+ cmd += "--reconf %d " % random.choice([3, 4, 6, 7, 12, 13, 14, 15, 16])
+ # cmd += "--undef %d " % random.choice([0, 1])
+ cmd += " --reconfat %d " % random.randint(0, 2)
+ cmd += "--ml %s " % random.randint(0, 10)
+ cmd += "--restart %s " % random.choice(
+ ["geom", "glue", "luby"])
+ cmd += "--adjustglue %f " % random.choice([0, 0.5, 0.7, 1.0])
+ cmd += "--gluehist %s " % random.randint(1, 500)
+ cmd += "--updateglueonanalysis %s " % random.randint(0, 1)
+ cmd += "--otfhyper %s " % random.randint(0, 1)
+ # cmd += "--clean %s " % random.choice(["size", "glue", "activity",
+ # "prconf"])
+ cmd += "--bothprop %s " % random.randint(0, 1)
+ cmd += "--probemaxm %s " % random.choice([0, 10, 100, 1000])
+ cmd += "--cachesize %s " % random.randint(10, 100)
+ cmd += "--cachecutoff %s " % random.randint(0, 2000)
+ cmd += "--occredmax %s " % random.randint(0, 100)
+ cmd += "--extscc %s " % random.randint(0, 1)
+ cmd += "--distill %s " % random.randint(0, 1)
+ cmd += "--recur %s " % random.randint(0, 1)
+ cmd += "--compsfrom %d " % random.randint(0, 2)
+ cmd += "--compsvar %d " % random.randint(20000, 500000)
+ cmd += "--compslimit %d " % random.randint(0, 3000)
+ cmd += "--implicitmanip %s " % random.randint(0, 1)
+ cmd += "--occsimp %s " % random.randint(0, 1)
+ cmd += "--occirredmaxmb %s " % random.gammavariate(0.2, 5)
+ cmd += "--occredmaxmb %s " % random.gammavariate(0.2, 5)
+ cmd += "--skipresol %d " % random.choice([1, 1, 1, 0])
+ cmd += "--implsubsto %s " % random.choice([0, 10, 1000])
+ cmd += "--sync %d " % random.choice([100, 1000, 6000, 100000])
+ cmd += "-m %0.12f " % random.gammavariate(0.1, 5.0)
+ cmd += "--maxsccdepth %d " % random.choice([0, 1, 100, 100000])
+
+ # more more minim
+ cmd += "--moremoreminim %d " % random.choice([1, 1, 1, 0])
+ cmd += "--moremorecachelimit %d " % int(random.gammavariate(1, 6))
+ cmd += "--moremorestamp %d " % random.choice([1, 1, 1, 0])
+ cmd += "--moremorealways %d " % random.choice([1, 1, 1, 0])
+
+ if self.this_gauss_on:
+ # Reduce iteratively the matrix that is updated
+ cmd += "--iterreduce %s " % random.choice([0, 1])
+
+ # Only run Gaussian Elimination until this depth
+ cmd += "--maxgaussdepth %s " % int(random.gammavariate(1, 20.0))
+
+ # Set maximum no. of rows for gaussian matrix."
+ cmd += "--maxmatrixrows %s " % int(random.gammavariate(5, 15.0))
+
+ # "Automatically disable gauss when performing badly")
+ cmd += "--autodisablegauss %s " % random.choice([0, 1])
+
+ # "Set minimum no. of rows for gaussian matrix.
+ cmd += "--minmatrixrows %s " % int(random.gammavariate(3, 15.0))
+
+ # Save matrix every Nth decision level."
+ cmd += "--savematrix %s " % (int(random.gammavariate(1, 15.0))+1)
+
+ # "Maximum number of matrixes to treat.")
+ cmd += "--maxnummatrixes %s " % int(random.gammavariate(1, 10.0))
+
+ if "sql" in self.extra_opts_supported and random.randint(0, 3) > 0 and self.num_threads == 1 and not self.preproc:
+ cmd += "--sql 2 "
+ self.sqlitedbfname = unique_file("fuzz", ".sqlitedb")
+ cmd += "--sqlitedb %s " % self.sqlitedbfname
+ cmd += "--sqlresttime %d " % random.randint(0, 1)
+ cmd += "--cldatadumpratio %0.3f " % random.choice([0.9, 0.1, 0.7])
+
+ # the most buggy ones, don't turn them off much, please
+ if random.choice([True, False]):
+ opts = ["scc", "varelim", "comps", "strengthen", "probe", "intree",
+ "stamp", "cache", "otfsubsume",
+ "renumber", "savemem", "moreminim", "gates", "bva",
+ "gorshort", "gandrem", "gateeqlit", "schedsimp"]
+
+ if "xor" in self.extra_opts_supported:
+ opts.append("xor")
+
+ for opt in opts:
+ cmd += "--%s %d " % (opt, random.randint(0, 1))
+
+ cmd += self.rnd_schedule_all(preproc)
+
+ return cmd
+
+ def execute(self, fname, fname2=None, fixed_opts="", rnd_opts=None):
+ if os.path.isfile(options.solver) is not True:
+ print("Error: Cannot find CryptoMiniSat executable.Searched in: '%s'" %
+ options.solver)
+ print("Error code 300")
+ exit(300)
+
+ for f in glob.glob("%s-debugLibPart*.output" % fname):
+ os.unlink(f)
+
+ # construct command
+ command = ""
+ if not options.novalgrind and random.randint(1, options.valgrind_freq) == 1:
+ command += "valgrind -q --leak-check=full --error-exitcode=9 "
+ command += options.solver
+ if rnd_opts is None:
+ rnd_opts = self.random_options()
+ command += rnd_opts
+ if self.needDebugLib:
+ command += "--debuglib %s " % fname
+ command += "--threads %d " % self.num_threads
+ command += options.extra_options + " "
+ command += fixed_opts + " "
+ if fname is not None:
+ command += fname
+ if fname2:
+ if self.drat:
+ command += " %s " % fname2
+ else:
+ command += " %s --savedstate %s-savedstate.dat " % (fname2, fname2)
+
+ print("Executing: %s " % command)
+
+ # print time limit
+ if options.verbose:
+ print("CPU limit of parent (pid %d)" % os.getpid(), resource.getrlimit(resource.RLIMIT_CPU))
+
+ # if need time limit, then limit
+ err_fname = unique_file("err", ".out")
+ err_file = open(err_fname, "w")
+ p = subprocess.Popen(
+ command.rsplit(), stderr=err_file, stdout=subprocess.PIPE,
+ preexec_fn=partial(setlimits, options.maxtime),
+ universal_newlines=True)
+
+ # print time limit after child startup
+ if options.verbose:
+ print("CPU limit of parent (pid %d) after startup of child: %s secs" %
+ (os.getpid(), resource.getrlimit(resource.RLIMIT_CPU)))
+
+ # Get solver output
+ consoleOutput, err = p.communicate()
+ retcode = p.returncode
+ err_file.close()
+ with open(err_fname, "r") as err_file:
+ found_something = False
+ for line in err_file:
+ print("Error line while executing: %s" % line.strip())
+ # don't error out on issues related to UBSAN/ASAN
+ # of clang of other projects
+ if "std::_Ios_Fmtflags" in line or "mzd.h" in line or "lexical_cast.hpp" in line or "MersenneTwister.h" in line:
+ pass
+ else:
+ found_something = True
+
+ if found_something:
+ exit(-1)
+
+ os.unlink(err_fname)
+ if self.sqlitedbfname is not None:
+ os.unlink(self.sqlitedbfname)
+
+ if options.verbose:
+ print("CPU limit of parent (pid %d) after child finished executing: %s" %
+ (os.getpid(), resource.getrlimit(resource.RLIMIT_CPU)))
+
+ return consoleOutput, retcode
+
+ def check(self, fname, fname2=None,
+ checkAgainst=None,
+ fixed_opts="", dump_output_fname=None,
+ rnd_opts=None):
+
+ consoleOutput = ""
+ if checkAgainst is None:
+ checkAgainst = fname
+ curr_time = time.time()
+
+ # Do we need to solve the problem, or is it already solved?
+ consoleOutput, retcode = self.execute(
+ fname, fname2=fname2,
+ fixed_opts=fixed_opts, rnd_opts=rnd_opts)
+
+ # if time was limited, we need to know if we were over the time limit
+ # and that is why there is no solution
+ diff_time = time.time() - curr_time
+ if diff_time > (options.maxtime - options.maxtimediff) / self.num_threads:
+ print("Too much time to solve, aborted!")
+ return None
+
+ print("Within time limit: %.2f s" % diff_time)
+ print("filename: %s" % fname)
+
+ if options.verbose:
+ print(consoleOutput)
+
+ # if library debug is set, check it
+ if (self.needDebugLib):
+ self.sol_parser.check_debug_lib(checkAgainst)
+
+ if retcode != 0:
+ print("Return code is not 0, error!")
+ exit(-1)
+
+ print("Checking console output...")
+ unsat, solution, _ = self.sol_parser.parse_solution_from_output(
+ consoleOutput.split("\n"), self.ignoreNoSolution)
+
+ # preprocessing
+ if dump_output_fname is not None:
+ f = open(dump_output_fname, "w")
+ f.write(consoleOutput)
+ f.close()
+ return True
+
+ if not unsat:
+ if len(self.indep_vars) != 0:
+ self.sol_parser.indep_vars_solution_check(fname, self.indep_vars, solution)
+ else:
+ self.sol_parser.test_found_solution(solution, checkAgainst)
+
+ if self.dump_red:
+ self.check_dumped_clauses(fname)
+
+ return
+
+ # it's UNSAT, let's check with DRAT
+ if fname2:
+ toexec = "../../build/tests/drat-trim/drat-trim {cnf} {dratf} {opt}"
+ opt = ""
+ if self.clid_added:
+ opt = "-i "
+ toexec = toexec.format(cnf=fname, dratf=fname2, opt=opt)
+ print("Checking DRAT...: ", toexec)
+ p = subprocess.Popen(toexec.rsplit(),
+ stdout=subprocess.PIPE,
+ universal_newlines=True)
+
+ consoleOutput2 = p.communicate()[0]
+ diff_time = time.time() - curr_time
+
+ # find verification code
+ foundVerif = False
+ dratLine = ""
+ for line in consoleOutput2.split('\n'):
+ if len(line) > 1 and line[:2] == "s ":
+ # print("verif: " , line)
+ foundVerif = True
+ if line[2:10] != "VERIFIED" and line[2:] != "TRIVIAL UNSAT":
+ print("DRAT verification error, it says: %s" % consoleOutput2)
+ assert line[2:10] == "VERIFIED" or line[
+ 2:] == "TRIVIAL UNSAT", "DRAT didn't verify problem!"
+ dratLine = line
+
+ # Check whether we have found a verification code
+ if foundVerif is False:
+ print("verifier error! It says: %s" % consoleOutput2)
+ assert foundVerif, "Cannot find DRAT verification code!"
+ else:
+ print("OK, DRAT says: %s" % dratLine)
+
+ # check with other solver
+ ret = self.sol_parser.check_unsat(checkAgainst)
+ if ret is None:
+ print("Other solver time-outed, cannot check")
+ elif ret is True:
+ print("UNSAT verified by other solver")
+ else:
+ print("Grave bug: SAT-> UNSAT : Other solver found solution!!")
+ exit()
+
+ def check_dumped_clauses(self, fname):
+ assert self.dump_red is not None
+
+ tmpfname = unique_file("fuzzTest-dump-test")
+ with open(tmpfname, "w") as tmpf:
+ with open(fname, "r") as x:
+ for line in x:
+ line = line.strip()
+ if "c" in line or "p" in line:
+ continue
+ tmpf.write(line+"\n")
+
+ with open(self.dump_red, "r") as x:
+ for line in x:
+ line = line.strip()
+ tmpf.write(line+"\n")
+
+ print("[dump-check] dump-combined file is: ", tmpfname)
+ if options.verbose:
+ print("dump file is: ", self.dump_red)
+ print("orig file is: ", fname)
+
+ self.old_dump_red = str(self.dump_red)
+ self.dump_red = None
+ self.indep_vars = []
+ self.only_indep = False
+ self.check(tmpfname, checkAgainst=fname)
+
+ os.unlink(tmpfname)
+ os.unlink(self.old_dump_red)
+ print("[dump-check] OK, solution after DUMP has been injected is still OK")
+
+ def fuzz_test_one(self):
+ print("--- NORMAL TESTING ---")
+ self.num_threads = random.choice([1, 1, 1, 1, 1, 1, 4])
+ self.num_threads = min(options.max_threads, self.num_threads)
+ self.this_gauss_on = "autodisablegauss" in self.extra_opts_supported and random.choice([True, False, False])
+ if options.gauss:
+ self.this_gauss_on = True
+ assert "autodisablegauss" in self.extra_opts_supported
+
+ self.drat = self.num_threads == 1 and random.randint(0, 10) < 5 and (not self.this_gauss_on)
+ self.sqlitedbfname = None
+ self.preproc = False
+ self.dump_red = random.choice([None, None, None, None, None, True])
+ if self.dump_red is not None:
+ self.dump_red = unique_file("fuzzTest-dump")
+ self.only_indep = random.choice([True, False, False, False, False]) and not self.drat
+
+ if options.only_indep:
+ self.drat = False
+ self.only_indep = True
+
+ if options.only_dump:
+ self.drat = False
+ self.only_indep = False
+ if self.dump_red is None:
+ self.dump_red = unique_file("fuzzTest-dump")
+
+ if self.drat:
+ fuzzers = fuzzers_drat
+ elif options.gauss:
+ fuzzers = fuzzers_xor
+ else:
+ fuzzers = fuzzers_nodrat
+ fuzzer = random.choice(fuzzers)
+
+ fname = unique_file("fuzzTest")
+ fname_drat = None
+ if self.drat:
+ fname_drat = unique_file("fuzzTest-drat")
+
+ # create the fuzz file
+ cf = create_fuzz()
+ call, todel = cf.create_fuzz_file(fuzzer, fuzzers, fname)
+ print("calling %s" % call)
+ status = subprocess.call(call, shell=True)
+ if status != 0:
+ fuzzer_call_failed(fname)
+
+ if not self.drat and not self.only_indep and not self.dump_red:
+ self.needDebugLib = True
+ interspersed_fname = unique_file("fuzzTest")
+ seed_for_inters = random.randint(0, 1000000)
+ intersperse(fname, interspersed_fname, seed_for_inters)
+ print("Interspersed: ./intersperse.py %s %s %d" % (fname,
+ interspersed_fname,
+ seed_for_inters))
+ os.unlink(fname)
+ else:
+ self.needDebugLib = False
+ interspersed_fname = fname
+
+ # calculate indep vars
+ self.indep_vars = []
+ if self.only_indep:
+ max_vars = self.sol_parser.max_vars_in_file(fname)
+ assert max_vars > 0
+
+ self.indep_vars = []
+ myset = {}
+ for _ in range(random.randint(1, 50)):
+ x = random.randint(1, max_vars)
+ if x not in myset:
+ self.indep_vars.append(x)
+ myset[x] = 1
+
+ # don't do it for 0-length indep vars
+ if len(self.indep_vars) == 0:
+ self.only_indep = False
+
+ self.check(fname=interspersed_fname, fname2=fname_drat)
+
+ # remove temporary filenames
+ os.unlink(interspersed_fname)
+ if fname_drat:
+ os.unlink(fname_drat)
+ for name in todel:
+ os.unlink(name)
+
+ if self.dump_red is not None:
+ os.unlink(self.dump_red)
+ self.dump_red = None
+
+ def delete_file_no_matter_what(self, fname):
+ try:
+ os.unlink(fname)
+ except:
+ pass
+
+ def fuzz_test_preproc(self):
+ print("--- PREPROC TESTING ---")
+ self.this_gauss_on = False # don't do gauss on preproc
+ tester.needDebugLib = False
+ fuzzer = random.choice(fuzzers_drat)
+ self.num_threads = 1
+ fname = unique_file("fuzzTest")
+ self.drat = False
+ self.preproc = True
+ self.only_indep = False
+ self.indep_vars = []
+ assert self.dump_red is None
+ self.dump_red = None
+
+ # create the fuzz file
+ cf = create_fuzz()
+ call, todel = cf.create_fuzz_file(fuzzer, fuzzers_nodrat, fname)
+ print("calling %s : %s" % (fuzzer, call))
+ status = subprocess.call(call, shell=True)
+ if status != 0:
+ fuzzer_call_failed(fname)
+
+ rnd_opts = self.random_options(preproc=True)
+
+ # preprocess
+ simp = "%s-simplified.cnf" % fname
+ self.delete_file_no_matter_what(simp)
+ curr_time = time.time()
+ console, retcode = self.execute(fname, fname2=simp,
+ rnd_opts=rnd_opts,
+ fixed_opts="--preproc 1")
+
+ diff_time = time.time() - curr_time
+ if diff_time > (options.maxtime - options.maxtimediff) / self.num_threads:
+ print("Too much time to solve, aborted!")
+ else:
+ print("Within time limit: %.2f s" % diff_time)
+ if retcode != 0:
+ print("Return code is not 0, error!")
+ exit(-1)
+
+ solution = "%s-solution.sol" % fname
+ ret = self.check(fname=simp, dump_output_fname=solution)
+ if ret is not None:
+ # didn't time out, so let's reconstruct the solution
+ savedstate = "%s-savedstate.dat" % simp
+ self.check(fname=solution, checkAgainst=fname,
+ fixed_opts="--preproc 2 --savedstate %s" % savedstate,
+ rnd_opts=rnd_opts)
+ os.unlink(savedstate)
+ os.unlink(solution)
+
+ # remove temporary filenames
+ os.unlink(fname)
+ for name in todel:
+ os.unlink(name)
+ assert self.dump_red is None
+
+
+def filter_large_fuzzer(dat):
+ f = []
+ for x in dat:
+ okay = True
+ for y in x:
+ if "large" in y:
+ okay = False
+
+ if okay:
+ f.append(x)
+
+ return f
+
+
+fuzzers_noxor = [
+ ["../../build/tests/sha1-sat/sha1-gen --nocomment --attack preimage --rounds 20",
+ "--hash-bits", "--seed"],
+ ["../../build/tests/sha1-sat/sha1-gen --nocomment --attack preimage --zero "
+ "--message-bits 400 --rounds 8 --hash-bits 60",
+ "--seed"],
+ # ["build/cnf-fuzz-nossum"],
+ ["../../build/tests/cnf-utils/largefuzzer"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/cnf-fuzz-biere"],
+ ["../../build/tests/cnf-utils/sgen4 -unsat -n 50", "-s"],
+ ["../../build/tests/cnf-utils//sgen4 -sat -n 50", "-s"],
+ ["../../utils/cnf-utils/cnf-fuzz-brummayer.py", "-s"],
+ ["../../utils/cnf-utils/cnf-fuzz-xor.py", "--seed"],
+ ["../../utils/cnf-utils/multipart.py", "special"]
+]
+fuzzers_xor = [
+ ["../../utils/cnf-utils/xortester.py", "--seed"],
+ ["../../build/tests/sha1-sat/sha1-gen --xor --attack preimage --rounds 21",
+ "--hash-bits", "--seed"],
+]
+
+
+if __name__ == "__main__":
+ global options
+ global fuzzers_drat
+ global fuzzers_nodrat
+ if not os.path.isdir("out"):
+ print("Directory for outputs, 'out' not present, creating it.")
+ os.mkdir("out")
+
+ # parse options
+ parser = set_up_parser()
+ (options, args) = parser.parse_args()
+ if options.valgrind_freq <= 0:
+ print("Valgrind Frequency must be at least 1")
+ exit(-1)
+
+ fuzzers_drat = fuzzers_noxor
+ fuzzers_nodrat = fuzzers_noxor + fuzzers_xor
+ if options.small:
+ fuzzers_drat = filter_large_fuzzer(fuzzers_drat)
+ fuzzers_nodrat = filter_large_fuzzer(fuzzers_nodrat)
+
+ print_version()
+ tester = Tester()
+ tester.needDebugLib = False
+ num = 0
+ rnd_seed = options.fuzz_seed_start
+ if rnd_seed is None:
+ rnd_seed = random.randint(0, 1000*1000*100)
+
+ while True:
+ toexec = "./fuzz_test.py --fuzzlim 1 --seed %d " % rnd_seed
+ if options.novalgrind:
+ toexec += "--novalgrind "
+ if options.valgrind_freq:
+ toexec += "--valgrindfreq %d " % options.valgrind_freq
+ if options.small:
+ toexec += "--small "
+ if options.gauss:
+ toexec += "--gauss "
+ if options.only_indep:
+ toexec += "--indep "
+ if options.only_dump:
+ toexec += "--dump "
+ toexec += "-m %d " % options.max_threads
+
+ print("")
+ print("")
+ print("--> To re-create fuzz-test below: %s" % toexec)
+
+ random.seed(rnd_seed)
+ if random.randint(0, 10) == 0:
+ tester.fuzz_test_preproc()
+ else:
+ tester.fuzz_test_one()
+ rnd_seed += 1
+ num += 1
+ if options.fuzz_test_lim is not None and num >= options.fuzz_test_lim:
+ exit(0)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/intersperse.py b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/intersperse.py
new file mode 100755
index 000000000..6eb91615b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/intersperse.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import with_statement # Required in 2.5
+from __future__ import print_function
+import debuglib
+import sys
+
+if len(sys.argv) != 4:
+ print("You must give 3 arguments: input file, output file, seed")
+
+
+debuglib.intersperse(sys.argv[1], sys.argv[2], sys.argv[3])
+print("OK, output in %s" % sys.argv[2])
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier.py b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier.py
new file mode 100755
index 000000000..b3389d5d6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier.py
@@ -0,0 +1,589 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2016 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+
+from __future__ import with_statement # Required in 2.5
+from __future__ import print_function
+import optparse
+import gzip
+import re
+import fnmatch
+from xor_to_cnf_class import *
+from debuglib import *
+import subprocess
+import os
+import stat
+import time
+import resource
+import locale
+from functools import partial
+
+
+def unique_file(fname_begin, fname_end=".cnf"):
+ counter = 1
+ while 1:
+ fname = "out/" + fname_begin + '_' + str(counter) + fname_end
+ try:
+ fd = os.open(
+ fname, os.O_CREAT | os.O_EXCL, stat.S_IREAD | stat.S_IWRITE)
+ os.fdopen(fd).close()
+ return fname
+ except OSError:
+ pass
+
+ counter += 1
+ if counter > 300:
+ print("Cannot create unique_file, last try was: %s", fname)
+ exit(-1)
+
+
+def setlimits(maxtime):
+ # sys.stdout.write("Setting resource limit in child (pid %d): %d s\n" %
+ # (os.getpid(), maxtime))
+ resource.setrlimit(resource.RLIMIT_CPU, (maxtime, maxtime))
+
+
+class solution_parser:
+ def __init__(self, options):
+ self.options = options
+
+ @staticmethod
+ def test_found_solution(solution, fname, debugLibPart=None):
+ if debugLibPart is None:
+ print("Verifying solution for CNF file %s" % fname)
+ else:
+ print("Verifying solution for CNF file %s, part %d" %
+ (fname, debugLibPart))
+
+ if fnmatch.fnmatch(fname, '*.gz'):
+ f = gzip.open(fname, "r")
+ else:
+ f = open(fname, "r")
+ clauses = 0
+ thisDebugLibPart = 0
+
+ for line in f:
+ line = line.rstrip()
+
+ # skip empty lines
+ if len(line) == 0:
+ continue
+
+ # count debug lib parts
+ if line[0] == 'c' and "Solver::solve" in line:
+ thisDebugLibPart += 1
+
+ # if we are over debugLibPart, exit
+ if debugLibPart is not None and thisDebugLibPart >= debugLibPart:
+ f.close()
+ return
+
+ # check solution against clause
+ try:
+ if line[0] != 'c' and line[0] != 'p':
+ if line[0] != 'x':
+ solution_parser._check_regular_clause(line, solution)
+ else:
+ assert line[0] == 'x', "Line must start with p, c, v or x"
+ solution_parser._check_xor_clause(line, solution)
+
+ clauses += 1
+ except:
+ if debugLibPart is not None:
+ print("--> Error in part: %s. We are reading up to and including part: %s"
+ % (thisDebugLibPart, debugLibPart-1))
+ raise
+
+ f.close()
+ print("Verified %d original xor&regular clauses" % clauses)
+
+ def indep_vars_solution_check(self, fname, indep_vars, solution):
+ assert len(indep_vars) > 0
+ a = XorToCNF()
+ tmpfname = unique_file("tmp_for_xor_to_cnf_convert")
+ a.convert(fname, tmpfname)
+
+ with open(tmpfname, "a") as f:
+ # NOTE: the "p cnf..." header will be wrong
+ for i in indep_vars:
+ if i not in solution:
+ print("ERROR: solution does not contain independent var %d" % i)
+ print("Independent vars were: %s" % indep_vars)
+ exit(-1)
+
+ if solution[i]:
+ f.write("%d 0\n" % i)
+ else:
+ f.write("-%d 0\n" % i)
+
+ print("-> added partial solution to temporary CNF file %s" % tmpfname)
+
+ # execute with the other solver
+ toexec = "../../build/tests/minisat/minisat -verb=0 %s" % tmpfname
+ print("Solving with other solver: %s" % toexec)
+ curr_time = time.time()
+ try:
+ p = subprocess.Popen(toexec.rsplit(),
+ stdout=subprocess.PIPE,
+ preexec_fn=partial(setlimits, self.options.maxtime),
+ universal_newlines=True)
+ except OSError:
+ print("ERROR: Minisat didn't run... weird, it's included as a submodule")
+ raise
+
+ consoleOutput2 = p.communicate()[0]
+ os.unlink(tmpfname)
+
+ # if other solver was out of time, then we can't say anything
+ diff_time = time.time() - curr_time
+ if diff_time > self.options.maxtime - self.options.maxtimediff:
+ print("Other solver: too much time to solve, aborted!")
+ return None
+
+ # extract output from the other solver
+ print("Checking other solver output...")
+ otherSolverUNSAT, _, _ = self.parse_solution_from_output(
+ consoleOutput2.split("\n"))
+
+ # check if the other solver finds a solution with the independent vars
+ # set as per partial solution returned
+ if otherSolverUNSAT is True:
+ print("ERROR; The other solver did NOT find a solution with the partial solution given")
+ exit(-1)
+ return False
+
+ print("OK, other solver found a solution using the partial solution")
+
+ return True
+
+ def check_unsat(self, fname):
+ a = XorToCNF()
+ tmpfname = unique_file("tmp_for_xor_to_cnf_convert")
+ a.convert(fname, tmpfname)
+
+ # execute with the other solver
+ toexec = "../../build/tests/minisat/minisat -verb=0 %s" % tmpfname
+ print("Solving with other solver: %s" % toexec)
+ curr_time = time.time()
+ try:
+ p = subprocess.Popen(toexec.rsplit(),
+ stdout=subprocess.PIPE,
+ preexec_fn=partial(setlimits, self.options.maxtime),
+ universal_newlines=True)
+ except OSError:
+ print("ERROR: Minisat didn't run... weird, it's included as a submodule")
+ raise
+
+ consoleOutput2 = p.communicate()[0]
+ os.unlink(tmpfname)
+
+ # if other solver was out of time, then we can't say anything
+ diff_time = time.time() - curr_time
+ if diff_time > self.options.maxtime - self.options.maxtimediff:
+ print("Other solver: too much time to solve, aborted!")
+ return None
+
+ # extract output from the other solver
+ print("Checking other solver output...")
+ otherSolverUNSAT, otherSolverSolution, _ = self.parse_solution_from_output(
+ consoleOutput2.split("\n"))
+
+ # check if the other solver agrees with us
+ return otherSolverUNSAT
+
+ def check_debug_lib(self, fname):
+ largestPart = self._find_largest_debuglib_part(fname)
+ for debugLibPart in range(1, largestPart + 1):
+ fname_debug = "%s-debugLibPart%d.output" % (fname, debugLibPart)
+ print("Checking debug lib part %s -- %s " % (debugLibPart, fname_debug))
+
+ if (os.path.isfile(fname_debug) is False):
+ print("Error: Filename to be read '%s' is not a file!" % fname_debug)
+ exit(-1)
+
+ # take file into mem
+ f = open(fname_debug, "r")
+ text = f.read()
+ output_lines = text.splitlines()
+ f.close()
+
+ unsat, solution, conflict = self.parse_solution_from_output(output_lines)
+ assumps = self._get_assumps(fname, debugLibPart)
+ if unsat is False:
+ print("debugLib is SAT")
+ self._check_assumps_inside_solution(assumps, solution)
+ self.test_found_solution(solution, fname, debugLibPart)
+ else:
+ print("debugLib is UNSAT")
+ assert conflict is not None, "debugLibPart must create a conflict in case of UNSAT"
+ self._check_assumps_inside_conflict(assumps, conflict)
+ tmpfname = unique_file("tmp_for_extract_libpart")
+ self._extract_lib_part(fname, debugLibPart, assumps, tmpfname)
+
+ # check with other solver
+ ret = self.check_unsat(tmpfname)
+ if ret is None:
+ print("Cannot check, other solver took too much time")
+ elif ret is True:
+ print("UNSAT verified by other solver")
+ else:
+ print("Grave bug: SAT-> UNSAT : Other solver found solution!!")
+ exit(-1)
+ os.unlink(tmpfname)
+
+ self.remove_debuglib_files(fname)
+
+ def remove_debuglib_files(self, fname):
+ #removing debuglib files
+ largestPart = self._find_largest_debuglib_part(fname)
+ for debugLibPart in range(1, largestPart + 1):
+ fname_debug = "%s-debugLibPart%d.output" % (fname, debugLibPart)
+ os.unlink(fname_debug)
+
+ @staticmethod
+ def parse_solution_from_output(output_lines, ignoreNoSolution=False):
+ if len(output_lines) == 0:
+ print("Error! SAT solver output is empty!")
+ print("output lines: %s" % output_lines)
+ exit(-1)
+
+ # solution will be put here
+ satunsatfound = False
+ vlinefound = False
+ solution = {}
+ conflict = None
+
+ # parse in solution
+ for line in output_lines:
+ # skip comment
+ if re.match('^conflict ', line):
+ line = line.strip().split()[1:]
+ conflict = [int(elem) for elem in line]
+ continue
+
+ if (re.match('^c ', line)):
+ continue
+
+ # solution
+ if (re.match('^s ', line)):
+ if (satunsatfound):
+ print("ERROR: solution twice in solver output!")
+ exit(400)
+
+ if 'UNSAT' in line:
+ unsat = True
+ satunsatfound = True
+ continue
+
+ if 'SAT' in line:
+ unsat = False
+ satunsatfound = True
+ continue
+
+ print("ERROR: line starts with 's' but no SAT/UNSAT on line")
+ exit(400)
+
+ # parse in solution
+ if (re.match('^v ', line)):
+ vlinefound = True
+ myvars = line.split(' ')
+ for var in myvars:
+ var = var.strip()
+ if var == "" or var == 'v':
+ continue
+ if (int(var) == 0):
+ break
+ intvar = int(var)
+ solution[abs(intvar)] = (intvar >= 0)
+ continue
+
+ if (line.strip() == ""):
+ continue
+
+ print("Error! SAT solver output contains a line that is neither 'v' nor 'c' nor 's'!")
+ print("Line is:", line.strip())
+ exit(-1)
+
+ # print("Parsed values:", solution)
+
+ if (ignoreNoSolution is False and
+ (satunsatfound is False or (
+ unsat is False and vlinefound is False))):
+ print("Error: Cannot find line starting with 's' or 'v' in output!")
+ print(output_lines)
+ print("Error code 500")
+ exit(-1)
+
+ if (ignoreNoSolution is True and
+ (satunsatfound is False or (
+ unsat is False and vlinefound is False))):
+ print("Probably timeout, since no solution printed. Could, of course, be segfault/assert fault, etc.")
+ print("Making it look like an UNSAT, so no checks!")
+ return (True, [])
+
+ if (satunsatfound is False):
+ print("Error: Cannot find if SAT or UNSAT. Maybe didn't finish running?")
+ print(output_lines)
+ print("Error code 500")
+ exit(-1)
+
+ if (unsat is False and vlinefound is False):
+ print("Error: Solution is SAT, but no 'v' line")
+ print (output_lines)
+ print("Error code 500")
+ exit(-1)
+
+ return unsat, solution, conflict
+
+ def _extract_lib_part(self, fname, debug_num, assumps, tofile):
+ fromf = open(fname, "r")
+ thisDebugLibPart = 0
+ maxvar = 0
+ numcls = 0
+ for line in fromf:
+ line = line.strip()
+
+ # ignore empty strings and headers
+ if not line or line[0] == "p":
+ continue
+
+ # process (potentially special) comments
+ if line[0] == "c":
+ if "Solver::solve" in line:
+ thisDebugLibPart += 1
+
+ continue
+
+ # break out if we reached the debug lib part
+ if thisDebugLibPart >= debug_num:
+ break
+
+ # count clauses and get max var number
+ numcls += 1
+ maxvar = max(maxvar, get_max_var_from_clause(line))
+
+ fromf.close()
+
+ # now we can create the new CNF file
+ fromf = open(fname, "r")
+ tof = open(tofile, "w")
+ tof.write("p cnf %d %d\n" % (maxvar, numcls + len(assumps)))
+
+ thisDebugLibPart = 0
+ for line in fromf:
+ line = line.strip()
+ # skip empty lines and headers
+ if not line or line[0] == "p":
+ continue
+
+ # parse up special header
+ if line[0] == "c":
+ if "Solver::solve" in line:
+ thisDebugLibPart += 1
+
+ continue
+
+ # break out if we reached the debug lib part
+ if thisDebugLibPart >= debug_num:
+ break
+
+ tof.write(line + '\n')
+
+ # add assumptions
+ for lit in assumps:
+ tof.write("%d 0\n" % lit)
+
+ fromf.close()
+ tof.close()
+
+ def _get_assumps(self, fname, debugLibPart):
+ f = open(fname, "r")
+
+ thispart = 0
+ solveline = None
+ for line in f:
+ if "Solver::solve" in line:
+ thispart += 1
+ if thispart == debugLibPart:
+ solveline = line
+ break
+ f.close()
+
+ assert solveline is not None
+ ret = re.match("c.*Solver::solve\((.*)\)", solveline)
+ assert ret is not None
+ assumps = ret.group(1).strip().split()
+ assumps = [int(x) for x in assumps]
+
+ print("Assumptions: ", assumps)
+ return assumps
+
+ def _check_assumps_inside_conflict(self, assumps, conflict):
+ for lit in conflict:
+ if -1 * lit not in assumps:
+ print("ERROR: Final conflict contains %s but assumps is %s" %(conflict, assumps))
+ print("ERROR: lit ", lit, " is in conflict but its inverse is not is assumps!")
+ exit(-100)
+
+ print("OK, final conflict only contains elements from assumptions")
+
+ def _check_assumps_inside_solution(self, assumps, solution):
+ for lit in assumps:
+ var = abs(lit)
+ val = lit > 0
+ if var in solution:
+ if solution[var] != val:
+ print("Solution pinted has literal %s but assumptions contained the inverse: '%s'" % (-1 * lit, assumps))
+ exit(-100)
+
+ print("OK, all assumptions inside solution")
+
+ def _find_largest_debuglib_part(self, fname):
+ largestPart = 0
+ dirList2 = os.listdir(".")
+ for fname_debug in dirList2:
+ if fnmatch.fnmatch(fname_debug, "%s-debugLibPart*.output" % fname):
+ largestPart += 1
+
+ return largestPart
+
+ @staticmethod
+ def max_vars_in_file(fname):
+ maxvar = 0
+ with open(fname, "r") as f:
+ for line in f:
+ line = line.strip()
+
+ # ignore comments
+ if not line or line[0] == "c" or line[0] == 'p':
+ continue
+
+ # calculate max variable
+ maxvar = max(maxvar, get_max_var_from_clause(line))
+
+ return maxvar
+
+ @staticmethod
+ def _check_regular_clause(line, solution):
+ lits = line.split()
+ for lit in lits:
+ numlit = int(lit)
+ if numlit == 0:
+ break
+
+ if abs(numlit) not in solution:
+ continue
+
+ if solution[abs(numlit)] ^ (numlit < 0):
+ return True
+
+ # print not set vars
+ print("Unset vars:")
+ for lit in lits:
+ numlit = int(lit)
+ if numlit == 0:
+ break
+
+ if abs(numlit) not in solution:
+ print("var %d not set" % abs(numlit))
+
+ print("Every other var set to FALSE")
+ raise NameError("Error: clause '%s' not satisfied." % line)
+
+ @staticmethod
+ def _check_xor_clause(line, solution):
+ line = line.lstrip('x')
+ lits = line.split()
+ final = False
+ for lit in lits:
+ numlit = int(lit)
+ if numlit != 0:
+ if abs(numlit) not in solution:
+ raise NameError("Error: var %d not solved, but referred to in a xor-clause of the CNF" % abs(numlit))
+ final ^= solution[abs(numlit)]
+ final ^= numlit < 0
+ if final is False:
+ raise NameError("Error: xor-clause '%s' not satisfied." % line)
+
+ return final
+
+
+def parse_arguments():
+ class PlainHelpFormatter(optparse.IndentedHelpFormatter):
+
+ def format_description(self, description):
+ if description:
+ return description + "\n"
+ else:
+ return ""
+
+ usage = """usage: %prog solution cnf
+
+For example:
+%prog my_solution_file.out my_problem.cnf.gz"""
+ parser = optparse.OptionParser(usage=usage, formatter=PlainHelpFormatter())
+ parser.add_option("--verbose", "-v", action="store_true",
+ default=False, dest="verbose", help="Be more verbose")
+ parser.add_option("--tout", "-t", dest="maxtime", type=int, default=100,
+ help="Max time to run. Default: %default")
+ parser.add_option("--textra", dest="maxtimediff", type=int, default=10,
+ help="Extra time on top of timeout for processing."
+ " Default: %default")
+ # parse options
+ options, args = parser.parse_args()
+ return options, args
+
+if __name__ == "__main__":
+ options, args = parse_arguments()
+ print("Options are:", options)
+ print("args are:", args)
+ if len(args) != 2:
+ print("ERROR: You must give exactly two parameters, "
+ "one SOLUTION and one CNF")
+ print("You gave {n} parameters".format(**{"n": len(args)}))
+ exit(-1)
+
+ sol_file = args[0]
+ cnf_file = args[1]
+ print("Verifying CNF file '{cnf}' against solution in file '{sol}'".format(
+ **{"cnf": cnf_file, "sol": sol_file}))
+
+ print("Checking debug libs...")
+ sol_parser = solution_parser(options)
+ sol_parser.check_debug_lib(cnf_file)
+
+ print("Checking console output...")
+ sol = {}
+ with open(sol_file) as f:
+ dat = f.read()
+
+ dat = dat.split("\n")
+ unsat, solution, _ = sol_parser.parse_solution_from_output(dat)
+ if not unsat:
+ sol_parser.test_found_solution(solution, cnf_file)
+ exit(0)
+
+ # check with other solver
+ ret = sol_parser.check_unsat(cnf_file)
+ if ret is None:
+ print("Other solver time-outed, cannot check")
+ elif ret is True:
+ print("UNSAT verified by other solver")
+ else:
+ print("Grave bug: SAT-> UNSAT : Other solver found solution!!")
+ exit(-1)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier_test.py b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier_test.py
new file mode 100755
index 000000000..ca0786d69
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/verifier_test.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2016 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+
+from __future__ import with_statement # Required in 2.5
+from __future__ import print_function
+
+from verifier import *
+import unittest
+
+
+class Map(dict):
+ """
+ Example:
+ m = Map({'first_name': 'Eduardo'}, last_name='Pool', age=24, sports=['Soccer'])
+ """
+ def __init__(self, *args, **kwargs):
+ super(Map, self).__init__(*args, **kwargs)
+ for arg in args:
+ if isinstance(arg, dict):
+ for k, v in arg.items():
+ self[k] = v
+
+ if kwargs:
+ for k, v in kwargs.iteritems():
+ self[k] = v
+
+ def __getattr__(self, attr):
+ return self.get(attr)
+
+
+class TestVerifier(unittest.TestCase):
+ def setUp(self):
+ options = Map({"verbose": False, "maxtime": 60, "maxtimediff": 160})
+ self.s = solution_parser(options)
+
+ def test_sat_cl(self):
+ self.assertTrue(self.s._check_regular_clause("1 2 3", {1: True}))
+ self.assertTrue(self.s._check_regular_clause("1 2 3", {2: True}))
+ self.assertTrue(self.s._check_regular_clause("1 2 -3", {3: False}))
+
+ def test_unsat_cl(self):
+ self.assertRaises(NameError, self.s._check_regular_clause, "-1 2 3", {1: True})
+ self.assertRaises(NameError, self.s._check_regular_clause, "-1 2 3", {})
+ self.assertRaises(NameError, self.s._check_regular_clause, "-1 2 3 0", {})
+ self.assertRaises(NameError, self.s._check_regular_clause, "1 2 -3 0", {0: True})
+ self.assertRaises(NameError, self.s._check_regular_clause, "1 2 3", {1: False, 2: False, 3: False})
+ self.assertRaises(NameError, self.s._check_regular_clause, "-1 -2 -3", {1: True, 2: True, 3: True})
+
+ def test_sat_xcl(self):
+ self.assertTrue(NameError, self.s._check_xor_clause("x1 2 3", {1: True, 2: False, 3: False}))
+ self.assertTrue(NameError, self.s._check_xor_clause("x1 2 3 0", {1: True, 2: False, 3: False}))
+
+ def test_unsat_xcl(self):
+ self.assertRaises(NameError, self.s._check_xor_clause, "x1 2 3", {1: True})
+ self.assertRaises(NameError, self.s._check_xor_clause, "x1 2 3", {1: False, 2: False, 3: False})
+
+ def test_sol_parse_sat(self):
+ unsat, s, _ = self.s.parse_solution_from_output(["s SAT", "v 1 2 3 0"])
+ self.assertEqual(s, {1: True, 2: True, 3: True})
+
+ def test_sol_parse_unsat(self):
+ unsat, _, _ = self.s.parse_solution_from_output(["s UNSAT\n"])
+ self.assertTrue(unsat)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/xor_to_cnf_class.py b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/xor_to_cnf_class.py
new file mode 100644
index 000000000..38b96f008
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/fuzz/xor_to_cnf_class.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+from __future__ import print_function
+import re
+
+
+class XorToCNF:
+ def __init__(self):
+ self.cutsize = 4
+
+ def get_max_var(self, clause):
+ maxvar = 0
+
+ tmp = clause.strip()
+ if len(tmp) == 0:
+ return 0
+
+ assert re.search(r'^x? *-?\d+', tmp)
+
+ if tmp[0] == 'x':
+ tmp = tmp[1:]
+
+ for lit in tmp.split():
+ var = abs(int(lit))
+ maxvar = max(var, maxvar)
+
+ return maxvar
+
+ def convert(self, infilename, outfilename):
+ assert isinstance(self.cutsize, int)
+ if self.cutsize <= 2:
+ print("ERROR: The cut size MUST be larger or equal to 3")
+ exit(-1)
+
+ maxvar, numcls, extravars_needed, extracls_needed = self.get_stats(infilename)
+ fout = open(outfilename, "w")
+ fout.write("p cnf %d %d\n" % (maxvar + extravars_needed, numcls + extracls_needed))
+ fin = open(infilename, "r")
+ atvar = maxvar
+ for line in fin:
+ line = line.strip()
+
+ # skip empty line
+ if len(line) == 0:
+ continue
+
+ # skip header and comments
+ if line[0] == 'c' or line[0] == 'p':
+ continue
+
+ if line[0] == 'x':
+ # convert XOR to normal(s)
+ xorclauses, atvar = self.cut_up_xor_to_n(line, atvar)
+ for xorcl in xorclauses:
+ cls = self.xor_to_cnf_simple(xorcl)
+ for cl in cls:
+ fout.write(cl + "\n")
+ else:
+ # simply print normal clause
+ fout.write(line + "\n")
+
+ assert atvar == maxvar + extravars_needed
+ fout.close()
+ fin.close()
+
+ def popcount(self, x):
+ return bin(x).count('1')
+
+ def parse_xor(self, xorclause):
+ assert re.search(r'^x( *-?\d+ )*0$', xorclause)
+
+ tmp = xorclause[1:]
+ lits = [int(elem) for elem in tmp.split()]
+ assert lits[len(lits)-1] == 0
+
+ # remove last element, the 0
+ lits = lits[:len(lits)-1]
+
+ return lits
+
+ def xor_to_cnf_simple(self, xorclause, equals=True):
+ assert equals is True or equals is False
+ if equals is True:
+ equals = 1
+ else:
+ equals = 0
+
+ lits = self.parse_xor(xorclause)
+
+ # empty XOR clause is TRUE, so is NOT an empty clause (i.e. UNSAT)
+ if len(lits) == 0:
+ return []
+
+ ret = []
+ for i in range(2**(len(lits))):
+ # only the ones we need
+ cls = ""
+ if self.popcount(i) % 2 == equals:
+ continue
+
+ for at in range(len(lits)):
+ if ((i >> at) & 1) == 0:
+ cls += "%d " % lits[at]
+ else:
+ cls += "%d " % (-1*lits[at])
+
+ cls += "0"
+ ret.append(cls)
+
+ return ret
+
+ def cut_up_xor_to_n(self, xorclause, oldmaxvar):
+ assert self.cutsize > 2
+
+ lits = self.parse_xor(xorclause)
+ xors = []
+
+ # xor clause that doesn't need to be cut up
+ if len(lits) <= self.cutsize:
+ retcl = "x"
+ for lit in lits:
+ retcl += "%d " % lit
+ retcl += "0"
+ return [[retcl], oldmaxvar]
+
+ at = 0
+ newmaxvar = oldmaxvar
+ while(at < len(lits)):
+
+ # until when should we cut?
+ until = min(at + self.cutsize-1, len(lits))
+
+ # if in the middle, don't add so much
+ if at > 0 and until < len(lits):
+ until -= 1
+
+ thisxor = "x"
+ for i2 in range(at, until):
+ thisxor += "%d " % lits[i2]
+
+ # add the extra variables
+ if at == 0:
+ # beginning, add only one
+ thisxor += "%d 0" % (newmaxvar+1)
+ newmaxvar += 1
+ elif until == len(lits):
+ # end, only add the one we already made
+ thisxor += "-%d 0" % (newmaxvar)
+ else:
+ thisxor += "-%d %d 0" % (newmaxvar, newmaxvar+1)
+ newmaxvar += 1
+
+ xors.append(thisxor)
+
+ # move along where we are at
+ at = until
+
+ return [xors, newmaxvar]
+
+ def num_extra_vars_cls_needed(self, numlits):
+ def cls_for_plain_xor(numlits):
+ return 2**(numlits-1)
+
+ varsneeded = 0
+ clsneeded = 0
+
+ at = 0
+ while(at < numlits):
+ # at the beginning
+ if at == 0:
+ if numlits > self.cutsize:
+ at += self.cutsize-1
+ varsneeded += 1
+ clsneeded += cls_for_plain_xor(self.cutsize)
+ else:
+ at = numlits
+ clsneeded += cls_for_plain_xor(numlits)
+
+ # in the middle
+ elif at + (self.cutsize-1) < numlits:
+ at += self.cutsize-2
+ varsneeded += 1
+ clsneeded += cls_for_plain_xor(self.cutsize)
+ # at the end
+ else:
+ clsneeded += cls_for_plain_xor(numlits-at+1)
+ at = numlits
+
+ return [varsneeded, clsneeded]
+
+ def get_stats(self, infilename):
+ infile = open(infilename, "r")
+
+ maxvar = 0
+ numcls = 0
+ extravars_needed = 0
+ extracls_needed = 0
+ for line in infile:
+ line = line.strip()
+
+ # empty line, skip
+ if len(line) == 0:
+ continue
+
+ # header or comment
+ if line[0] == 'p' or line[0] == 'c':
+ continue
+
+ # get max var
+ maxvar = max(self.get_max_var(line), maxvar)
+
+ if line[0] == 'x':
+ e_var, e_clause = self.num_extra_vars_cls_needed(len(self.parse_xor(line)))
+ extravars_needed += e_var
+ extracls_needed += e_clause
+ else:
+ numcls += 1
+
+ infile.close()
+
+ return [maxvar, numcls, extravars_needed, extracls_needed]
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/learn/add_lemma_ind.py b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/add_lemma_ind.py
new file mode 100755
index 000000000..ccdb1f46f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/add_lemma_ind.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2017 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import sqlite3
+import optparse
+
+
+class Query:
+ def __init__(self, dbfname):
+ self.conn = sqlite3.connect(dbfname)
+ self.c = self.conn.cursor()
+ self.runID = self.find_runID()
+ # zero out goodClauses
+ self.c.execute('delete from goodClauses;')
+ self.cur_good_ids_num = 0
+ self.num_goods_total = 0
+ self.cur_good_ids = []
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.conn.commit()
+ self.conn.close()
+
+ def parse_and_add_lemmas(self, lemmafname):
+ with open(lemmafname, "r") as f:
+ for line in f:
+ line = line.strip().split(" ")
+ self.parse_one_line(line)
+
+ # final dump
+ self.dump_ids()
+
+ print("Parsed %d number of good lemmas" % self.num_goods_total)
+
+ def parse_one_line(self, line):
+ self.cur_good_ids_num += 1
+ self.num_goods_total += 1
+
+ # get ID
+ myid = int(line[0])
+ assert myid >= 0, "ID is always at least 0"
+ assert myid != 0, "ID with 0 should not even be printed"
+
+ num_used = int(line[1])
+ last_used = int(line[2])
+
+ # append to cur_good_ids
+ self.cur_good_ids.append((self.runID, myid, num_used, last_used))
+
+ # don't run out of memory, dump early
+ if self.cur_good_ids_num > 10000:
+ self.dump_ids()
+
+ def dump_ids(self):
+ self.c.executemany("""
+ INSERT INTO goodClauses (`runID`, `clauseID`, `num_used`, `last_confl_used`)
+ VALUES (?, ?, ?, ?);""", self.cur_good_ids)
+ self.cur_good_ids = []
+ self.cur_good_ids_num = 0
+
+ def find_runID(self):
+ q = """
+ SELECT runID
+ FROM startUp
+ order by startTime desc
+ """
+
+ runID = None
+ for row in self.c.execute(q):
+ if runID is not None:
+ print("ERROR: More than one RUN in the SQL, can't add lemmas!")
+ exit(-1)
+ runID = int(row[0])
+
+ print("runID: %d" % runID)
+ return runID
+
+
+if __name__ == "__main__":
+ usage = """usage: %prog [options] sqlite_db lemmas
+
+It adds lemma indices from "lemmas" to the SQLite database, indicating whether
+it was good or not."""
+
+ parser = optparse.OptionParser(usage=usage)
+
+ parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Print more output")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) != 2:
+ print("Error. Please follow usage")
+ print(usage)
+ exit(-1)
+
+ dbfname = args[0]
+ lemmafname = args[1]
+ print("Using sqlite3db file %s" % dbfname)
+ print("Using lemma file %s" % lemmafname)
+
+ with Query(dbfname) as q:
+ q.parse_and_add_lemmas(lemmafname)
+
+ print("Finished adding good lemma indicators to db %s" % dbfname)
+ exit(0)
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/learn/gen_pandas.py b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/gen_pandas.py
new file mode 100755
index 000000000..c79f660a5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/gen_pandas.py
@@ -0,0 +1,771 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2017 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import sqlite3
+import optparse
+import time
+import pickle
+import re
+import pandas as pd
+import numpy as np
+import os.path
+
+from sklearn.model_selection import train_test_split
+import sklearn.tree
+import sklearn.svm
+import sklearn.ensemble
+import sklearn.metrics
+from sklearn.preprocessing import LabelEncoder
+
+
+##############
+# HOW TO GET A NICE LIST
+##############
+# go into .stdout.gz outputs:
+# zgrep "s UNSAT" * | cut -d ":" -f 1 > ../candidate_files_large_fixed_adjust_guess-12-April
+#
+# --> edit file to have the format:
+# zgrep -H "Total" large_hybr-12-April-2016-VAGTY-e4119a1b0-tout-1500-mout-1600/1dlx_c_iq57_a.cnf.gz.stdout.gz
+#
+# run:
+# ./candidate_files_large_hybr-12-April-2016-VAGTY.sh | awk '{if ($5 < 600 && $5 > 200) print $1 " -- " $5}' | cut -d "/" -f 2 | cut -d ":" -f 1 | sed "s/.stdout.*//" > ../unsat_small_candidates2.txt
+
+
+################
+# EXAMPLE TO RUN THIS AGAINST
+################
+# 6s153.cnf.gz
+
+class QueryHelper:
+ def __init__(self, dbfname):
+ if not os.path.isfile(dbfname):
+ print("ERROR: Database file '%s' does not exist" % dbfname)
+ exit(-1)
+
+ self.conn = sqlite3.connect(dbfname)
+ self.c = self.conn.cursor()
+ self.runID = self.find_runID()
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.conn.commit()
+ self.conn.close()
+
+ def find_runID(self):
+ q = """
+ SELECT runID
+ FROM startUp
+ order by startTime desc
+ limit 1
+ """
+
+ runID = None
+ for row in self.c.execute(q):
+ if runID is not None:
+ print("ERROR: More than one RUN IDs in file!")
+ exit(-1)
+ runID = int(row[0])
+
+ print("runID: %d" % runID)
+ return runID
+
+
+class Query2 (QueryHelper):
+ def create_indexes(self):
+ print("Recreating indexes...")
+ t = time.time()
+ q = """
+ drop index if exists `idxclid`;
+ drop index if exists `idxclid2`;
+ drop index if exists `idxclid3`;
+ drop index if exists `idxclid4`;
+ drop index if exists `idxclid5`;
+ drop index if exists `idxclid6`;
+
+ create index `idxclid` on `clauseStats` (`runID`,`clauseID`);
+ create index `idxclid2` on `clauseStats` (`runID`,`prev_restart`);
+ create index `idxclid3` on `goodClauses` (`runID`,`clauseID`);
+ create index `idxclid4` on `restart` (`runID`, `restarts`);
+ create index `idxclid5` on `tags` (`runID`, `tagname`);
+ create index `idxclid6` on `reduceDB` (`runID`,`clauseID`, `dump_no`);
+ """
+ for l in q.split('\n'):
+ self.c.execute(l)
+
+ print("indexes created T: %-3.2f s" % (time.time() - t))
+
+ def get_clstats(self):
+
+ # partially done with tablestruct_sql and SED: sed -e 's/`\(.*\)`.*/rst.`\1` as `rst.\1`/' ../tmp.txt
+ restart_dat = """
+ -- , rst.`runID` as `rst.runID`
+ -- , rst.`simplifications` as `rst.simplifications`
+ -- , rst.`restarts` as `rst.restarts`
+ -- , rst.`conflicts` as `rst.conflicts`
+ -- , rst.`latest_feature_calc` as `rst.latest_feature_calc`
+ -- rst.`runtime` as `rst.runtime`
+ , rst.`numIrredBins` as `rst.numIrredBins`
+ , rst.`numIrredLongs` as `rst.numIrredLongs`
+ , rst.`numRedBins` as `rst.numRedBins`
+ , rst.`numRedLongs` as `rst.numRedLongs`
+ , rst.`numIrredLits` as `rst.numIrredLits`
+ , rst.`numredLits` as `rst.numredLits`
+ , rst.`glue` as `rst.glue`
+ , rst.`glueSD` as `rst.glueSD`
+ , rst.`glueMin` as `rst.glueMin`
+ , rst.`glueMax` as `rst.glueMax`
+ , rst.`size` as `rst.size`
+ , rst.`sizeSD` as `rst.sizeSD`
+ , rst.`sizeMin` as `rst.sizeMin`
+ , rst.`sizeMax` as `rst.sizeMax`
+ , rst.`resolutions` as `rst.resolutions`
+ , rst.`resolutionsSD` as `rst.resolutionsSD`
+ , rst.`resolutionsMin` as `rst.resolutionsMin`
+ , rst.`resolutionsMax` as `rst.resolutionsMax`
+ , rst.`branchDepth` as `rst.branchDepth`
+ , rst.`branchDepthSD` as `rst.branchDepthSD`
+ , rst.`branchDepthMin` as `rst.branchDepthMin`
+ , rst.`branchDepthMax` as `rst.branchDepthMax`
+ , rst.`branchDepthDelta` as `rst.branchDepthDelta`
+ , rst.`branchDepthDeltaSD` as `rst.branchDepthDeltaSD`
+ , rst.`branchDepthDeltaMin` as `rst.branchDepthDeltaMin`
+ , rst.`branchDepthDeltaMax` as `rst.branchDepthDeltaMax`
+ , rst.`trailDepth` as `rst.trailDepth`
+ , rst.`trailDepthSD` as `rst.trailDepthSD`
+ , rst.`trailDepthMin` as `rst.trailDepthMin`
+ , rst.`trailDepthMax` as `rst.trailDepthMax`
+ , rst.`trailDepthDelta` as `rst.trailDepthDelta`
+ , rst.`trailDepthDeltaSD` as `rst.trailDepthDeltaSD`
+ , rst.`trailDepthDeltaMin` as `rst.trailDepthDeltaMin`
+ , rst.`trailDepthDeltaMax` as `rst.trailDepthDeltaMax`
+ , rst.`propBinIrred` as `rst.propBinIrred`
+ , rst.`propBinRed` as `rst.propBinRed`
+ , rst.`propLongIrred` as `rst.propLongIrred`
+ , rst.`propLongRed` as `rst.propLongRed`
+ , rst.`conflBinIrred` as `rst.conflBinIrred`
+ , rst.`conflBinRed` as `rst.conflBinRed`
+ , rst.`conflLongIrred` as `rst.conflLongIrred`
+ , rst.`conflLongRed` as `rst.conflLongRed`
+ , rst.`learntUnits` as `rst.learntUnits`
+ , rst.`learntBins` as `rst.learntBins`
+ , rst.`learntLongs` as `rst.learntLongs`
+ , rst.`resolBinIrred` as `rst.resolBinIrred`
+ , rst.`resolBinRed` as `rst.resolBinRed`
+ , rst.`resolLIrred` as `rst.resolLIrred`
+ , rst.`resolLRed` as `rst.resolLRed`
+ -- , rst.`propagations` as `rst.propagations`
+ -- , rst.`decisions` as `rst.decisions`
+ -- , rst.`flipped` as `rst.flipped`
+ , rst.`varSetPos` as `rst.varSetPos`
+ , rst.`varSetNeg` as `rst.varSetNeg`
+ , rst.`free` as `rst.free`
+ -- , rst.`replaced` as `rst.replaced`
+ -- , rst.`eliminated` as `rst.eliminated`
+ -- , rst.`set` as `rst.set`
+ -- , rst.`clauseIDstartInclusive` as `rst.clauseIDstartInclusive`
+ -- , rst.`clauseIDendExclusive` as `rst.clauseIDendExclusive`
+ """
+
+ rdb0_dat = """
+ -- , rdb0.`runID` as `rdb0.runID`
+ -- , rdb0.`simplifications` as `rdb0.simplifications`
+ -- , rdb0.`restarts` as `rdb0.restarts`
+ , rdb0.`conflicts` as `rdb0.conflicts`
+ -- , rdb0.`runtime` as `rdb0.runtime`
+
+ -- , rdb0.`clauseID` as `rdb0.clauseID`
+ , rdb0.`dump_no` as `rdb0.dump_no`
+ , rdb0.`conflicts_made` as `rdb0.conflicts_made`
+ , rdb0.`sum_of_branch_depth_conflict` as `rdb0.sum_of_branch_depth_conflict`
+ , rdb0.`propagations_made` as `rdb0.propagations_made`
+ , rdb0.`clause_looked_at` as `rdb0.clause_looked_at`
+ , rdb0.`used_for_uip_creation` as `rdb0.used_for_uip_creation`
+ , rdb0.`last_touched_diff` as `rdb0.last_touched_diff`
+ , rdb0.`activity_rel` as `rdb0.activity_rel`
+ , rdb0.`locked` as `rdb0.locked`
+ , rdb0.`in_xor` as `rdb0.in_xor`
+ -- , rdb0.`glue` as `rdb0.glue`
+ -- , rdb0.`size` as `rdb0.size`
+ , rdb0.`ttl` as `rdb0.ttl`
+ """
+
+ clause_dat = """
+ -- , cl.`runID` as `cl.runID`
+ -- , cl.`simplifications` as `cl.simplifications`
+ -- , cl.`restarts` as `cl.restarts`
+ -- , cl.`prev_restart` as `cl.prev_restart`
+ -- , cl.`conflicts` as `cl.conflicts`
+ -- , cl.`latest_feature_calc` as `cl.latest_feature_calc`
+ -- , cl.`clauseID` as `cl.clauseID`
+ , cl.`glue` as `cl.glue`
+ , cl.`size` as `cl.size`
+ , cl.`conflicts_this_restart` as `cl.conflicts_this_restart`
+ , cl.`num_overlap_literals` as `cl.num_overlap_literals`
+ , cl.`num_antecedents` as `cl.num_antecedents`
+ , cl.`num_total_lits_antecedents` as `cl.num_total_lits_antecedents`
+ , cl.`antecedents_avg_size` as `cl.antecedents_avg_size`
+ , cl.`backtrack_level` as `cl.backtrack_level`
+ , cl.`decision_level` as `cl.decision_level`
+ , cl.`decision_level_pre1` as `cl.decision_level_pre1`
+ , cl.`decision_level_pre2` as `cl.decision_level_pre2`
+ , cl.`trail_depth_level` as `cl.trail_depth_level`
+ , cl.`cur_restart_type` as `cl.cur_restart_type`
+ , cl.`atedecents_binIrred` as `cl.atedecents_binIrred`
+ , cl.`atedecents_binRed` as `cl.atedecents_binRed`
+ , cl.`atedecents_longIrred` as `cl.atedecents_longIrred`
+ , cl.`atedecents_longRed` as `cl.atedecents_longRed`
+ -- , cl.`vsids_vars_avg` as `cl.vsids_vars_avg`
+ -- , cl.`vsids_vars_var` as `cl.vsids_vars_var`
+ -- , cl.`vsids_vars_min` as `cl.vsids_vars_min`
+ -- , cl.`vsids_vars_max` as `cl.vsids_vars_max`
+ , cl.`antecedents_glue_long_reds_avg` as `cl.antecedents_glue_long_reds_avg`
+ , cl.`antecedents_glue_long_reds_var` as `cl.antecedents_glue_long_reds_var`
+ , cl.`antecedents_glue_long_reds_min` as `cl.antecedents_glue_long_reds_min`
+ , cl.`antecedents_glue_long_reds_max` as `cl.antecedents_glue_long_reds_max`
+ , cl.`antecedents_long_red_age_avg` as `cl.antecedents_long_red_age_avg`
+ , cl.`antecedents_long_red_age_var` as `cl.antecedents_long_red_age_var`
+ , cl.`antecedents_long_red_age_min` as `cl.antecedents_long_red_age_min`
+ , cl.`antecedents_long_red_age_max` as `cl.antecedents_long_red_age_max`
+ -- , cl.`vsids_of_resolving_literals_avg` as `cl.vsids_of_resolving_literals_avg`
+ -- , cl.`vsids_of_resolving_literals_var` as `cl.vsids_of_resolving_literals_var`
+ -- , cl.`vsids_of_resolving_literals_min` as `cl.vsids_of_resolving_literals_min`
+ -- , cl.`vsids_of_resolving_literals_max` as `cl.vsids_of_resolving_literals_max`
+ -- , cl.`vsids_of_all_incoming_lits_avg` as `cl.vsids_of_all_incoming_lits_avg`
+ -- , cl.`vsids_of_all_incoming_lits_var` as `cl.vsids_of_all_incoming_lits_var`
+ -- , cl.`vsids_of_all_incoming_lits_min` as `cl.vsids_of_all_incoming_lits_min`
+ -- , cl.`vsids_of_all_incoming_lits_max` as `cl.vsids_of_all_incoming_lits_max`
+ -- , cl.`antecedents_antecedents_vsids_avg` as `cl.antecedents_antecedents_vsids_avg`
+ , cl.`decision_level_hist` as `cl.decision_level_hist`
+ , cl.`backtrack_level_hist_lt` as `cl.backtrack_level_hist_lt`
+ , cl.`trail_depth_level_hist` as `cl.trail_depth_level_hist`
+ -- , cl.`vsids_vars_hist` as `cl.vsids_vars_hist`
+ , cl.`size_hist` as `cl.size_hist`
+ , cl.`glue_hist` as `cl.glue_hist`
+ , cl.`num_antecedents_hist` as `cl.num_antecedents_hist`
+ , cl.`antec_sum_size_hist` as `cl.antec_sum_size_hist`
+ , cl.`antec_overlap_hist` as `cl.antec_overlap_hist`
+
+ , cl.`branch_depth_hist_queue` as `cl.branch_depth_hist_queue`
+ , cl.`trail_depth_hist` as `cl.trail_depth_hist`
+ , cl.`trail_depth_hist_longer` as `cl.trail_depth_hist_longer`
+ , cl.`num_resolutions_hist` as `cl.num_resolutions_hist`
+ , cl.`confl_size_hist` as `cl.confl_size_hist`
+ , cl.`trail_depth_delta_hist` as `cl.trail_depth_delta_hist`
+ , cl.`backtrack_level_hist` as `cl.backtrack_level_hist`
+ , cl.`glue_hist_queue` as `cl.glue_hist_queue`
+ , cl.`glue_hist_long` as `cl.glue_hist_long`
+ """
+
+ feat_dat = """
+ -- , feat.`simplifications` as `feat.simplifications`
+ -- , feat.`restarts` as `feat.restarts`
+ , feat.`conflicts` as `feat.conflicts`
+ -- , feat.`latest_feature_calc` as `feat.latest_feature_calc`
+ , feat.`numVars` as `feat.numVars`
+ , feat.`numClauses` as `feat.numClauses`
+ , feat.`var_cl_ratio` as `feat.var_cl_ratio`
+ , feat.`binary` as `feat.binary`
+ , feat.`horn` as `feat.horn`
+ , feat.`horn_mean` as `feat.horn_mean`
+ , feat.`horn_std` as `feat.horn_std`
+ , feat.`horn_min` as `feat.horn_min`
+ , feat.`horn_max` as `feat.horn_max`
+ , feat.`horn_spread` as `feat.horn_spread`
+ , feat.`vcg_var_mean` as `feat.vcg_var_mean`
+ , feat.`vcg_var_std` as `feat.vcg_var_std`
+ , feat.`vcg_var_min` as `feat.vcg_var_min`
+ , feat.`vcg_var_max` as `feat.vcg_var_max`
+ , feat.`vcg_var_spread` as `feat.vcg_var_spread`
+ , feat.`vcg_cls_mean` as `feat.vcg_cls_mean`
+ , feat.`vcg_cls_std` as `feat.vcg_cls_std`
+ , feat.`vcg_cls_min` as `feat.vcg_cls_min`
+ , feat.`vcg_cls_max` as `feat.vcg_cls_max`
+ , feat.`vcg_cls_spread` as `feat.vcg_cls_spread`
+ , feat.`pnr_var_mean` as `feat.pnr_var_mean`
+ , feat.`pnr_var_std` as `feat.pnr_var_std`
+ , feat.`pnr_var_min` as `feat.pnr_var_min`
+ , feat.`pnr_var_max` as `feat.pnr_var_max`
+ , feat.`pnr_var_spread` as `feat.pnr_var_spread`
+ , feat.`pnr_cls_mean` as `feat.pnr_cls_mean`
+ , feat.`pnr_cls_std` as `feat.pnr_cls_std`
+ , feat.`pnr_cls_min` as `feat.pnr_cls_min`
+ , feat.`pnr_cls_max` as `feat.pnr_cls_max`
+ , feat.`pnr_cls_spread` as `feat.pnr_cls_spread`
+ , feat.`avg_confl_size` as `feat.avg_confl_size`
+ , feat.`confl_size_min` as `feat.confl_size_min`
+ , feat.`confl_size_max` as `feat.confl_size_max`
+ , feat.`avg_confl_glue` as `feat.avg_confl_glue`
+ , feat.`confl_glue_min` as `feat.confl_glue_min`
+ , feat.`confl_glue_max` as `feat.confl_glue_max`
+ , feat.`avg_num_resolutions` as `feat.avg_num_resolutions`
+ , feat.`num_resolutions_min` as `feat.num_resolutions_min`
+ , feat.`num_resolutions_max` as `feat.num_resolutions_max`
+ , feat.`learnt_bins_per_confl` as `feat.learnt_bins_per_confl`
+ , feat.`avg_branch_depth` as `feat.avg_branch_depth`
+ , feat.`branch_depth_min` as `feat.branch_depth_min`
+ , feat.`branch_depth_max` as `feat.branch_depth_max`
+ , feat.`avg_trail_depth_delta` as `feat.avg_trail_depth_delta`
+ , feat.`trail_depth_delta_min` as `feat.trail_depth_delta_min`
+ , feat.`trail_depth_delta_max` as `feat.trail_depth_delta_max`
+ , feat.`avg_branch_depth_delta` as `feat.avg_branch_depth_delta`
+ , feat.`props_per_confl` as `feat.props_per_confl`
+ , feat.`confl_per_restart` as `feat.confl_per_restart`
+ , feat.`decisions_per_conflict` as `feat.decisions_per_conflict`
+ , feat.`red_glue_distr_mean` as `feat.red_glue_distr_mean`
+ , feat.`red_glue_distr_var` as `feat.red_glue_distr_var`
+ , feat.`red_size_distr_mean` as `feat.red_size_distr_mean`
+ , feat.`red_size_distr_var` as `feat.red_size_distr_var`
+ -- , feat.`red_activity_distr_mean` as `feat.red_activity_distr_mean`
+ -- , feat.`red_activity_distr_var` as `feat.red_activity_distr_var`
+ -- , feat.`irred_glue_distr_mean` as `feat.irred_glue_distr_mean`
+ -- , feat.`irred_glue_distr_var` as `feat.irred_glue_distr_var`
+ , feat.`irred_size_distr_mean` as `feat.irred_size_distr_mean`
+ , feat.`irred_size_distr_var` as `feat.irred_size_distr_var`
+ -- , feat.`irred_activity_distr_mean` as `feat.irred_activity_distr_mean`
+ -- , feat.`irred_activity_distr_var` as `feat.irred_activity_distr_var`
+ """
+
+ common_restrictions = """
+ and cl.restarts > 1 -- to avoid history being invalid
+ and cl.runID = {runid}
+ and feat.runID = {runid}
+ and feat.latest_feature_calc = cl.latest_feature_calc
+ and rst.restarts = cl.prev_restart
+ and rst.runID = {runid}
+ and tags.tagname = "filename"
+ and tags.runID = {runid}
+ and cl.conflicts > {start_confl}
+ """
+
+ common_limits = """
+ order by random()
+ limit {limit}
+ """
+
+ q_count = "SELECT count(*)"
+ q_ok_select = """
+ SELECT
+ tags.tag as "fname"
+ {clause_dat}
+ {clause2_dat}
+ {clause3_dat}
+ {restart_dat}
+ {feat_dat}
+ {rdb0_dat}
+ {rdb1_dat}
+ {rdb2_dat}
+ {rdb3_dat}
+ {rdb4_dat}
+ , goodcl.num_used as `x.num_used`
+ , goodcl.last_confl_used-cl.`conflicts` as `x.lifetime`
+ , "OK" as `x.class`
+ """
+
+ q_ok = """
+ FROM
+ clauseStats as cl
+ , clauseStats as cl2
+ , clauseStats as cl3
+ , goodClauses as goodcl
+ , restart as rst
+ , features as feat
+ , reduceDB as rdb0
+ , reduceDB as rdb1
+ , reduceDB as rdb2
+ , reduceDB as rdb3
+ , reduceDB as rdb4
+ , tags
+ WHERE
+
+ cl.clauseID = goodcl.clauseID
+ and cl.clauseID != 0
+ and cl.runID = goodcl.runID
+ and rdb0.runID = cl.runID
+ and rdb0.clauseID = cl.clauseID
+ and rdb0.dump_no = 0
+ and rdb1.runID = cl.runID
+ and rdb1.clauseID = cl.clauseID
+ and rdb1.dump_no = 1
+ and rdb2.runID = cl.runID
+ and rdb2.clauseID = cl.clauseID
+ and rdb2.dump_no = 2
+ and rdb3.runID = cl.runID
+ and rdb3.clauseID = cl.clauseID
+ and rdb3.dump_no = 3
+ and rdb4.runID = cl.runID
+ and rdb4.clauseID = cl.clauseID
+ and rdb4.dump_no = 4
+ and cl2.runID = cl.runID
+ and cl2.clauseID = cl.clauseID
+ and cl3.runID = cl.runID
+ and cl3.clauseID = cl.clauseID
+ """
+ q_ok += common_restrictions
+
+ # BAD caluses
+ q_bad_select = """
+ SELECT
+ tags.tag as "fname"
+ {clause_dat}
+ {clause2_dat}
+ {clause3_dat}
+ {restart_dat}
+ {feat_dat}
+ {rdb0_dat}
+ {rdb1_dat}
+ {rdb2_dat}
+ {rdb3_dat}
+ {rdb4_dat}
+ , 0 as `x.num_used`
+ , 0 as `x.lifetime`
+ , "BAD" as `x.class`
+ """
+
+ q_bad = """
+ FROM clauseStats as cl left join goodClauses as goodcl
+ on cl.clauseID = goodcl.clauseID
+ and cl.runID = goodcl.runID
+ , clauseStats as cl2
+ , clauseStats as cl3
+ , restart as rst
+ , features as feat
+ , reduceDB as rdb0
+ , reduceDB as rdb1
+ , reduceDB as rdb2
+ , reduceDB as rdb3
+ , reduceDB as rdb4
+ , tags
+ WHERE
+
+ goodcl.clauseID is NULL
+ and goodcl.runID is NULL
+ and cl.clauseID != 0
+ and rdb0.runID = cl.runID
+ and rdb0.clauseID = cl.clauseID
+ and rdb0.dump_no = 0
+ and rdb1.runID = cl.runID
+ and rdb1.clauseID = cl.clauseID
+ and rdb1.dump_no = 1
+ and rdb2.runID = cl.runID
+ and rdb2.clauseID = cl.clauseID
+ and rdb2.dump_no = 2
+ and rdb3.runID = cl.runID
+ and rdb3.clauseID = cl.clauseID
+ and rdb3.dump_no = 3
+ and rdb4.runID = cl.runID
+ and rdb4.clauseID = cl.clauseID
+ and rdb4.dump_no = 4
+ and cl2.runID = cl.runID
+ and cl2.clauseID = cl.clauseID
+ and cl3.runID = cl.runID
+ and cl3.clauseID = cl.clauseID
+ """
+ q_bad += common_restrictions
+
+ myformat = {"runid": self.runID,
+ "limit": 1000*1000*1000,
+ "restart_dat": restart_dat,
+ "clause_dat": clause_dat,
+ "clause2_dat": clause_dat.replace("cl.", "cl2."),
+ "clause3_dat": clause_dat.replace("cl.", "cl3."),
+ "feat_dat": feat_dat,
+ "rdb0_dat": rdb0_dat,
+ "rdb1_dat": rdb0_dat.replace("rdb0.", "rdb1."),
+ "rdb2_dat": rdb0_dat.replace("rdb0.", "rdb2."),
+ "rdb3_dat": rdb0_dat.replace("rdb0.", "rdb3."),
+ "rdb4_dat": rdb0_dat.replace("rdb0.", "rdb4."),
+ "start_confl": options.start_conflicts}
+
+ t = time.time()
+
+ q = q_count + q_ok
+ q = q.format(**myformat)
+ if options.verbose:
+ print("query:", q)
+ cur = self.conn.execute(q.format(**myformat))
+ num_lines_ok = int(cur.fetchone()[0])
+ print("Num datapoints OK (K): %-3.5f" % (num_lines_ok/1000.0))
+
+ q = q_count + q_bad
+ q = q.format(**myformat)
+ if options.verbose:
+ print("query:", q)
+ cur = self.conn.execute(q.format(**myformat))
+ num_lines_bad = int(cur.fetchone()[0])
+ print("Num datpoints BAD (K): %-3.5f" % (num_lines_bad/1000.0))
+
+ total_lines = num_lines_ok + num_lines_bad
+ print("Total number of datapoints (K): %-3.2f" % (total_lines/1000.0))
+ if options.fixed_num_datapoints != -1:
+ if options.fixed_num_datapoints > total_lines:
+ print("WARNING -- Your fixed num datapoints is too high:", options.fixed_num_datapoints)
+ print("WARNING -- We only have:", total_lines)
+ print("WARNING --> Not returning data.")
+ return False, None
+
+ if total_lines == 0:
+ print("WARNING: Total number of datapoints is 0. Potential issues:")
+ print(" --> Minimum no. conflicts set too high")
+ print(" --> Less than 1 restarts were made")
+ print(" --> No conflicts in SQL")
+ print(" --> Something went wrong")
+ return False, None
+
+ print("Percentage of OK: %-3.2f" % (num_lines_ok/float(total_lines)*100.0))
+ q = q_ok_select + q_ok
+ if options.fixed_num_datapoints != -1:
+ myformat["limit"] = int(options.fixed_num_datapoints * num_lines_ok/float(total_lines))
+ q += common_limits
+
+ print("limit for OK:", myformat["limit"])
+ q = q.format(**myformat)
+ print("Running query for OK...")
+ if options.verbose:
+ print("query:", q)
+ df = pd.read_sql_query(q, self.conn)
+
+ q = q_bad_select + q_bad
+ if options.fixed_num_datapoints != -1:
+ myformat["limit"] = int(options.fixed_num_datapoints * num_lines_bad/float(total_lines))
+ q += common_limits
+
+ print("limit for bad:", myformat["limit"])
+ q = q.format(**myformat)
+ print("Running query for BAD...")
+ if options.verbose:
+ print("query:", q)
+ df2 = pd.read_sql_query(q, self.conn)
+ print("Queries finished. T: %-3.2f" % (time.time() - t))
+
+ if options.dump_sql:
+ print("-- query starts --")
+ print(q)
+ print("-- query ends --")
+
+ return True, pd.concat([df, df2])
+
+
+def get_one_file(dbfname):
+ print("Using sqlite3db file %s" % dbfname)
+
+ df = None
+ with Query2(dbfname) as q:
+ if not options.no_recreate_indexes:
+ q.create_indexes()
+ ok, df = q.get_clstats()
+ if not ok:
+ return False, None
+
+ if options.verbose:
+ print("Printing head:")
+ print(df.head())
+ print("Print head done.")
+
+ return True, df
+
+
+def transform(df):
+ def check_clstat_row(self, row):
+ if row[self.ntoc["cl.decision_level_hist"]] == 0 or \
+ row[self.ntoc["cl.backtrack_level_hist"]] == 0 or \
+ row[self.ntoc["cl.trail_depth_level_hist"]] == 0 or \
+ row[self.ntoc["cl.vsids_vars_hist"]] == 0 or \
+ row[self.ntoc["cl.size_hist"]] == 0 or \
+ row[self.ntoc["cl.glue_hist"]] == 0 or \
+ row[self.ntoc["cl.num_antecedents_hist"]] == 0:
+ print("ERROR: Data is in error:", row)
+ assert(False)
+ exit(-1)
+
+ return row
+
+ # relative overlaps
+ df["cl.overlap"] = df["cl.num_total_lits_antecedents"]-df["cl.size"]-2*df["cl.num_antecedents"]
+ df["cl.overlap_rel"] = df["cl.overlap"]/df["cl.antec_overlap_hist"]
+ df["cl.num_antecedents_rel"] = df["cl.num_antecedents"]/df["cl.num_antecedents_hist"]
+ df["rst.varset_neg_polar_ratio"] = df["rst.varSetNeg"]/(df["rst.varSetPos"]+df["rst.varSetNeg"])
+
+ # ************
+ # TODO decision level and branch depth are the same, right???
+ # ************
+ df["cl.size_rel"] = df["cl.size"] / df["cl.size_hist"]
+ df["cl.glue_rel_queue"] = df["cl.glue"] / df["cl.glue_hist_queue"]
+ df["cl.glue_rel_long"] = df["cl.glue"] / df["cl.glue_hist_long"]
+ df["cl.glue_rel"] = df["cl.glue"] / df["cl.glue_hist"]
+ df["cl.trail_depth_level_rel"] = df["cl.trail_depth_level"]/df["cl.trail_depth_level_hist"]
+ df["cl.branch_depth_rel_queue"] = df["cl.decision_level"]/df["cl.branch_depth_hist_queue"]
+
+ # smaller-than larger-than for glue and size
+ df["cl.size_smaller_than_hist"] = (df["cl.size"] < df["cl.size_hist"]).astype(int)
+ df["cl.glue_smaller_than_hist"] = (df["cl.glue"] < df["cl.glue_hist"]).astype(int)
+ df["cl.glue_smaller_than_hist_lt"] = (df["cl.glue"] < df["cl.glue_hist_long"]).astype(int)
+ df["cl.glue_smaller_than_hist_queue"] = (df["cl.glue"] < df["cl.glue_hist_queue"]).astype(int)
+
+ # relative decisions
+ df["cl.decision_level_rel"] = df["cl.decision_level"]/df["cl.decision_level_hist"]
+ df["cl.decision_level_pre1_rel"] = df["cl.decision_level_pre1"]/df["cl.decision_level_hist"]
+ df["cl.decision_level_pre2_rel"] = df["cl.decision_level_pre2"]/df["cl.decision_level_hist"]
+ df["cl.decision_level_pre2_rel"] = df["cl.decision_level_pre2"]/df["cl.decision_level_hist"]
+ df["cl.decision_level_pre2_rel"] = df["cl.decision_level_pre2"]/df["cl.decision_level_hist"]
+ df["cl.backtrack_level_rel"] = df["cl.backtrack_level"]/df["cl.decision_level_hist"]
+
+ # relative props
+ df["rst.all_props"] = df["rst.propBinRed"] + df["rst.propBinIrred"] + df["rst.propLongRed"] + df["rst.propLongIrred"]
+ df["rst.propBinRed_ratio"] = df["rst.propBinRed"]/df["rst.all_props"]
+ df["rst.propBinIrred_ratio"] = df["rst.propBinIrred"]/df["rst.all_props"]
+ df["rst.propLongRed_ratio"] = df["rst.propLongRed"]/df["rst.all_props"]
+ df["rst.propLongIrred_ratio"] = df["rst.propLongIrred"]/df["rst.all_props"]
+
+ df["cl.trail_depth_level_rel"] = df["cl.trail_depth_level"]/df["rst.free"]
+
+ # relative resolutions
+ df["rst.resolBinIrred_ratio"] = df["rst.resolBinIrred"]/df["rst.resolutions"]
+ df["rst.resolBinRed_ratio"] = df["rst.resolBinRed"]/df["rst.resolutions"]
+ df["rst.resolLRed_ratio"] = df["rst.resolLRed"]/df["rst.resolutions"]
+ df["rst.resolLIrred_ratio"] = df["rst.resolLIrred"]/df["rst.resolutions"]
+
+ df["cl.num_antecedents_rel"] = df["cl.num_antecedents"] / df["cl.num_antecedents_hist"]
+ df["cl.decision_level_rel"] = df["cl.decision_level"] / df["cl.decision_level_hist"]
+ df["cl.trail_depth_level_rel"] = df["cl.trail_depth_level"] / df["cl.trail_depth_level_hist"]
+ df["cl.backtrack_level_rel"] = df["cl.backtrack_level"] / df["cl.backtrack_level_hist"]
+
+ # smaller-or-greater comparisons
+ df["cl.decision_level_smaller_than_hist"] = (df["cl.decision_level"] < df["cl.decision_level_hist"]).astype(int)
+ df["cl.backtrack_level_smaller_than_hist"] = (df["cl.backtrack_level"] < df["cl.backtrack_level_hist"]).astype(int)
+ df["cl.trail_depth_level_smaller_than_hist"] = (df["cl.trail_depth_level"] < df["cl.trail_depth_level_hist"]).astype(int)
+ df["cl.num_antecedents_smaller_than_hist"] = (df["cl.num_antecedents"] < df["cl.num_antecedents_hist"]).astype(int)
+ df["cl.antec_sum_size_smaller_than_hist"] = (df["cl.antec_sum_size_hist"] < df["cl.num_total_lits_antecedents"]).astype(int)
+ df["cl.antec_overlap_smaller_than_hist"] = (df["cl.antec_overlap_hist"] < df["cl.overlap"]).astype(int)
+ df["cl.overlap_smaller_than_hist"] = (df["cl.overlap"]<df["cl.antec_overlap_hist"]).astype(int)
+ df["cl.branch_smaller_than_hist_queue"] = (df["cl.decision_level"]<df["cl.branch_depth_hist_queue"]).astype(int)
+
+
+
+ # df["cl.vsids_vars_rel"] = df["cl.vsids_vars_avg"] / df["cl.vsids_vars_hist"]
+
+ old = set(df.columns.values.flatten().tolist())
+ df = df.dropna(how="all")
+ new = set(df.columns.values.flatten().tolist())
+ if len(old - new) > 0:
+ print("ERROR: a NaN number turned up")
+ print("columns: ", (old - new))
+ assert(False)
+ exit(-1)
+
+ # making sure "x.class" is the last one
+ new_no_class = list(new)
+ new_no_class.remove("x.class")
+ df = df[new_no_class + ["x.class"]]
+
+ return df
+
+
+def dump_dataframe(df, name):
+ if options.dump_csv:
+ fname = "%s.csv" % name
+ print("Dumping CSV data to:", fname)
+ df.to_csv(fname, index=False, columns=sorted(list(df)))
+
+ fname = "%s-pandasdata.dat" % name
+ print("Dumping pandas data to:", fname)
+ with open(fname, "wb") as f:
+ pickle.dump(df, f)
+
+
+def one_predictor(dbfname):
+ ok, df = get_one_file(dbfname)
+ if not ok:
+ return False, None
+
+ cleanname = re.sub('\.cnf.gz.sqlite$', '', dbfname)
+
+ if options.verbose:
+ print("Describing----")
+ dat = df.describe()
+ print(dat)
+ print("Describe done.---")
+ print("Features: ", df.columns.values.flatten().tolist())
+
+ df = transform(df)
+
+ if options.verbose:
+ print("Describing post-transform ----")
+ print(df.describe())
+ print("Describe done.---")
+
+ dump_dataframe(df, cleanname)
+
+ return True, df
+
+
+if __name__ == "__main__":
+ usage = "usage: %prog [options] file1.sqlite [file2.sqlite ...]"
+ parser = optparse.OptionParser(usage=usage)
+
+ parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Print more output")
+
+ parser.add_option("--csv", action="store_true", default=False,
+ dest="dump_csv", help="Dump CSV (for weka)")
+
+ parser.add_option("--sql", action="store_true", default=False,
+ dest="dump_sql", help="Dump SQL query")
+
+ parser.add_option("--fixed", default=-1, type=int,
+ dest="fixed_num_datapoints", help="Exact number of examples to take. -1 is to take all. Default: %default")
+
+ parser.add_option("--start", default=-1, type=int,
+ dest="start_conflicts", help="Only consider clauses from conflicts that are at least this high")
+
+ parser.add_option("--noind", action="store_true", default=False,
+ dest="no_recreate_indexes", help="Don't recreate indexes")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) < 1:
+ print("ERROR: You must give at least one file")
+ exit(-1)
+
+ np.random.seed(2097483)
+ dfs = []
+ for dbfname in args:
+ print("----- INTERMEDIATE predictor -------")
+ ok, df = one_predictor(dbfname)
+ if ok:
+ dfs.append(df)
+
+ if len(dfs) == 0:
+ print("Error, nothing got ingested, something is off")
+ exit(-1)
+
+ # intermediate predictor is final
+ if len(args) == 1:
+ exit(0)
+
+ print("----- FINAL predictor -------")
+ if len(dfs) == 0:
+ print("Ooops, final predictor is None, probably no meaningful data. Exiting.")
+ exit(0)
+
+ final_df = pd.concat(dfs)
+ dump_dataframe(final_df, "final")
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/learn/predict.py b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/predict.py
new file mode 100755
index 000000000..68fc3bfba
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/predict.py
@@ -0,0 +1,372 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2018 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+import pandas as pd
+import pickle
+import sklearn
+import sklearn.svm
+import sklearn.tree
+import sklearn.ensemble
+import optparse
+import numpy as np
+import sklearn.metrics
+import time
+import itertools
+import matplotlib.pyplot as plt
+from sklearn.model_selection import train_test_split
+
+class_names = ["throw", "longer"]
+cuts = [-1, 10000, 1000000000000]
+class_names2 = ["middle", "forever"]
+cuts2 = [-1, 30000, 1000000000000]
+#class_names3 = ["middle2", "forever"]
+#cuts3 = [-1, 60000, 1000000000000]
+
+
+def output_to_dot(clf, features, nameextra):
+ fname = options.dot+nameextra
+ sklearn.tree.export_graphviz(clf, out_file=fname,
+ feature_names=features,
+ class_names=class_names,
+ filled=True, rounded=True,
+ special_characters=True,
+ proportion=True)
+ print("Run dot:")
+ print("dot -Tpng {fname} -o {fname}.png".format(fname=fname))
+ print("gwenview {fname}.png".format(fname=fname))
+
+
+def calc_cross_val():
+ # calculate accuracy/prec/recall for cross-validation
+ accuracy = sklearn.model_selection.cross_val_score(self.clf, X_train, y_train, cv=10)
+ precision = sklearn.model_selection.cross_val_score(self.clf, X_train, y_train, cv=10, scoring='precision')
+ recall = sklearn.model_selection.cross_val_score(self.clf, X_train, y_train, cv=10, scoring='recall')
+ print("cv-accuracy:", accuracy)
+ print("cv-precision:", precision)
+ print("cv-recall:", recall)
+ accuracy = np.mean(accuracy)
+ precision = np.mean(precision)
+ recall = np.mean(recall)
+ print("cv-prec: %-3.4f cv-recall: %-3.4f cv-accuracy: %-3.4f T: %-3.2f" %
+ (precision, recall, accuracy, (time.time() - t)))
+
+
+def plot_confusion_matrix(cm, classes,
+ normalize=False,
+ title='Confusion matrix',
+ cmap=plt.cm.Blues):
+ """
+ This function prints and plots the confusion matrix.
+ Normalization can be applied by setting `normalize=True`.
+ """
+ if normalize:
+ cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
+ print("Normalized confusion matrix")
+ else:
+ print('Confusion matrix, without normalization')
+
+ print(cm)
+
+ plt.imshow(cm, interpolation='nearest', cmap=cmap)
+ plt.title(title)
+ plt.colorbar()
+ tick_marks = np.arange(len(classes))
+ plt.xticks(tick_marks, classes, rotation=45)
+ plt.yticks(tick_marks, classes)
+
+ fmt = '.2f' if normalize else 'd'
+ thresh = cm.max() / 2.
+ for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
+ plt.text(j, i, format(cm[i, j], fmt),
+ horizontalalignment="center",
+ color="white" if cm[i, j] > thresh else "black")
+
+ plt.tight_layout()
+ plt.ylabel('True label')
+ plt.xlabel('Predicted label')
+
+
+# to check for too large or NaN values:
+def check_too_large_or_nan_values(df):
+ features = df.columns.values.flatten().tolist()
+ index = 0
+ for index, row in df.iterrows():
+ for x, name in zip(row, features):
+ if not np.isfinite(x) or x > np.finfo(np.float32).max:
+ print("issue with data for features: ", name, x)
+ index += 1
+
+
+def get_code(tree, feature_names):
+ left = tree.tree_.children_left
+ right = tree.tree_.children_right
+ threshold = tree.tree_.threshold
+ features = [feature_names[i] for i in tree.tree_.feature]
+ value = tree.tree_.value
+
+ def recurse(left, right, threshold, features, node):
+ if (threshold[node] != -2):
+ print("if ( " + features[node] + " <= " + str(threshold[node]) + " ) {")
+ if left[node] != -1:
+ recurse(left, right, threshold, features, left[node])
+ print("} else {")
+ if right[node] != -1:
+ recurse(left, right, threshold, features, right[node])
+ print("}")
+ else:
+ print("return " + str(value[node]))
+
+ recurse(left, right, threshold, features, 0)
+
+
+def one_classifier(df, features, to_predict, names, w_name, w_number, final):
+ print("================ predicting %s ================" % to_predict)
+ print("-> Number of features :", len(features))
+ print("-> Number of datapoints:", df.shape)
+ print("-> Predicting :", to_predict)
+
+ train, test = train_test_split(df, test_size=0.33)
+ X_train = train[features]
+ y_train = train[to_predict]
+ X_test = test[features]
+ y_test = test[to_predict]
+
+ t = time.time()
+ clf = None
+ # clf = sklearn.linear_model.LogisticRegression()
+ # clf = sklearn.svm.SVC()
+ if final:
+ clf = sklearn.tree.DecisionTreeClassifier(max_depth=options.tree_depth)
+ else:
+ clf = sklearn.ensemble.RandomForestClassifier(n_estimators=80)
+ #clf = sklearn.ensemble.ExtraTreesClassifier(n_estimators=80)
+
+ sample_weight = [w_number if i == w_name else 1 for i in y_train]
+ clf.fit(X_train, y_train, sample_weight=sample_weight)
+
+ print("Training finished. T: %-3.2f" % (time.time() - t))
+
+ best_features = []
+ if not final:
+ importances = clf.feature_importances_
+ std = np.std([tree.feature_importances_ for tree in clf.estimators_], axis=0)
+ indices = np.argsort(importances)[::-1]
+ indices = indices[:options.top_num_features]
+ myrange = min(X_train.shape[1], options.top_num_features)
+
+ # Print the feature ranking
+ print("Feature ranking:")
+
+ for f in range(myrange):
+ print("%-3d %-35s -- %8.4f" %
+ (f + 1, features[indices[f]], importances[indices[f]]))
+ best_features.append(features[indices[f]])
+
+ # Plot the feature importances of the clf
+ plt.figure()
+ plt.title("Feature importances")
+ plt.bar(range(myrange), importances[indices],
+ color="r", align="center"
+ , yerr=std[indices])
+ plt.xticks(range(myrange), [features[x] for x in indices], rotation=45)
+ plt.xlim([-1, myrange])
+ else:
+ get_code(clf, features)
+
+ print("Calculating scores....")
+ y_pred = clf.predict(X_test)
+ accuracy = sklearn.metrics.accuracy_score(y_test, y_pred)
+ precision = sklearn.metrics.precision_score(y_test, y_pred, average="macro")
+ recall = sklearn.metrics.recall_score(y_test, y_pred, average="macro")
+ print("prec: %-3.4f recall: %-3.4f accuracy: %-3.4f T: %-3.2f" % (
+ precision, recall, accuracy, (time.time() - t)))
+
+ if options.confusion:
+ sample_weight = [w_number if i == w_name else 1 for i in y_pred]
+ cnf_matrix = sklearn.metrics.confusion_matrix(
+ y_test, y_pred, labels=names, sample_weight=sample_weight)
+
+ np.set_printoptions(precision=2)
+
+ # Plot non-normalized confusion matrix
+ plt.figure()
+ plot_confusion_matrix(
+ cnf_matrix, classes=names,
+ title='Confusion matrix, without normalization')
+
+ # Plot normalized confusion matrix
+ plt.figure()
+ plot_confusion_matrix(
+ cnf_matrix, classes=names, normalize=True,
+ title='Normalized confusion matrix')
+
+ # TODO do L1 regularization
+
+ if False:
+ calc_cross_val()
+
+ if options.dot is not None and final:
+ output_to_dot(clf, features, names[0])
+
+ return best_features
+
+
+def remove_old_clause_features(features):
+ todel = []
+ for name in features:
+ if "cl2" in name or "cl3" in name or "cl4" in name:
+ todel.append(name)
+
+ for x in todel:
+ features.remove(x)
+ if options.verbose:
+ print("Removing old clause feature:", x)
+
+
+def rem_features(feat, to_remove):
+ feat_less = list(feat)
+ todel = []
+ for feature in feat:
+ for rem in to_remove:
+ if rem in feature:
+ feat_less.remove(feature)
+ if options.verbose:
+ print("Removing feature from feat_less:", feature)
+
+ return feat_less
+
+
+def learn(fname):
+ with open(fname, "rb") as f:
+ df = pickle.load(f)
+
+ if options.check_row_data:
+ check_too_large_or_nan_values(df)
+
+ print("total samples: %5d" % df.shape[0])
+
+ # lifetime to predict
+ df["x.lifetime_cut"] = pd.cut(
+ df["x.lifetime"],
+ cuts,
+ labels=class_names)
+
+ df["x.lifetime_cut2"] = pd.cut(
+ df["x.lifetime"],
+ cuts2,
+ labels=class_names2)
+
+ #df["x.lifetime_cut3"] = pd.cut(
+ #df["x.lifetime"],
+ #cuts3,
+ #labels=class_names3)
+
+ features = df.columns.values.flatten().tolist()
+ features = rem_features(features,
+ ["x.num_used", "x.class", "x.lifetime", "fname"])
+
+ # this needs binarization
+ features = rem_features(features, ["cl.cur_restart_type"])
+ # x = (df["cl.cur_restart_type"].values[:, np.newaxis] == df["cl.cur_restart_type"].unique()).astype(int)
+ # print(x)
+
+ if True:
+ remove_old_clause_features(features)
+
+ if options.raw_data_plots:
+ pd.options.display.mpl_style = "default"
+ df.hist()
+ df.boxplot()
+
+ if True:
+ feat_less = rem_features(features, ["rdb1", "rdb2", "rdb3", "rdb4"])
+ best_feats = one_classifier(df, feat_less, "x.lifetime_cut",
+ class_names, "longer", 17,
+ False)
+ if options.show:
+ plt.show()
+
+ one_classifier(df, best_feats, "x.lifetime_cut",
+ class_names, "longer", 3,
+ True)
+ if options.show:
+ plt.show()
+
+ if True:
+ feat_less = rem_features(features, ["rdb3", "rdb4"])
+ df2 = df[df["x.lifetime"] > cuts[1]]
+
+ best_feats = one_classifier(df2, feat_less, "x.lifetime_cut2",
+ class_names2, "middle", 30,
+ False)
+ if options.show:
+ plt.show()
+
+ one_classifier(df2, best_feats, "x.lifetime_cut2",
+ class_names2, "middle", 4,
+ True)
+
+ if options.show:
+ plt.show()
+
+ #if True:
+ #df3 = df[df["x.lifetime"] > cuts2[1]]
+
+ #best_feats = one_classifier(df3, features, "x.lifetime_cut3",
+ #class_names3, "middle2", 20,
+ #False)
+ #if options.show:
+ #plt.show()
+
+ #one_classifier(df3, best_feats, "x.lifetime_cut3",
+ #class_names3, "middle2", 8,
+ #True)
+
+
+if __name__ == "__main__":
+ usage = "usage: %prog [options] file.pandas"
+ parser = optparse.OptionParser(usage=usage)
+
+ parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Print more output")
+ parser.add_option("--cross", action="store_true", default=False,
+ dest="cross_validate", help="Cross-validate prec/recall/acc against training data")
+ parser.add_option("--depth", default=6, type=int,
+ dest="tree_depth", help="Depth of the tree to create")
+ parser.add_option("--dot", type=str, default=None,
+ dest="dot", help="Create DOT file")
+ parser.add_option("--conf", action="store_true", default=False,
+ dest="confusion", help="Create confusion matrix")
+ parser.add_option("--show", action="store_true", default=False,
+ dest="show", help="Show visual graphs")
+ parser.add_option("--check", action="store_true", default=False,
+ dest="check_row_data", help="Check row data for NaN or float overflow")
+ parser.add_option("--rawplots", action="store_true", default=False,
+ dest="raw_data_plots", help="Display raw data plots")
+ parser.add_option("--top", default=12, type=int,
+ dest="top_num_features", help="Number of top features to take to generate the final predictor")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) < 1:
+ print("ERROR: You must give the pandas file!")
+ exit(-1)
+
+ learn(args[0])
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/learn/predict_one.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/predict_one.sh
new file mode 100755
index 000000000..6bb746f11
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/learn/predict_one.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Copyright (C) 2017 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+if [[ $# -ne 3 ]]; then
+ echo "ERROR: wrong number of arguments"
+ echo "Use with ./predict_one.sh 6s153.cnf.gz DIR RATIO"
+ echo "for ex. ./predict_one.sh 6s153.cnf.gz mydir 0.5"
+ exit -1
+fi
+set -e
+set -x
+
+status=$(./cryptominisat5 --hhelp | grep sql)
+ret=$?
+if [ "$ret" -ne 0 ]; then
+ echo "You must compile SQL into cryptominisat"
+ exit -1
+fi
+
+FNAME=$1
+OUTDIR=$2
+RATIO=$3
+mkdir -p "${OUTDIR}"
+
+rm -if "${OUTDIR}/drat_out"
+rm -if "${OUTDIR}/clause_id_data"
+rm -if "${OUTDIR}/data.sqlite"
+rm -if "${OUTDIR}/data.sqlite.tree.dot"
+echo "Predicting file $1"
+
+# running CNF
+./cryptominisat5 ${FNAME} --cldatadumpratio "${RATIO}" --gluecut0 10000 --presimp 1 -n 1 --zero-exit-status --restart luby --clid --sql 2 --maple 0 --distill 0 --sqlitedb "${OUTDIR}/data.sqlite" "${OUTDIR}/drat_out" > "${OUTDIR}/cms_output.txt"
+
+# parse DRAT for UNSAT proof data
+./tests/drat-trim/drat-trim "${FNAME}" "${OUTDIR}/drat_out" -x "${OUTDIR}/clause_id_data" -i
+
+# add clause IDs and their age and performance data
+./add_lemma_ind.py "${OUTDIR}/data.sqlite" "${OUTDIR}/clause_id_data"
+
+# get pandas dataframe from SQLite database
+./gen_pandas.py --csv "${OUTDIR}/data.sqlite"
+
+# generate predictors
+./predict.py "${OUTDIR}/data.sqlite-pandasdata.dat" --dot "${OUTDIR}/dectree.dot"
+
+# generate DOT and display it
+dot -Tpng "${OUTDIR}/dectree.dot" -o tree.png
+display tree.png
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/convert_to_cactusplot.py b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/convert_to_cactusplot.py
new file mode 100755
index 000000000..a5e8db080
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/convert_to_cactusplot.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+import sys
+of = sys.argv[1]
+f = open(of, "r")
+text = f.read()
+mylines = text.splitlines()
+i = 0;
+time = []
+for line in mylines :
+ time.append(float(line))
+ #print "t:%f" %(time[i])
+ i += 1
+
+lastnum = -1
+for a in range(0, 60000, 1) :
+ num = 0
+ for t in time :
+ #print "t: %f a: %d" %(t, a)
+ if (t < a) :
+ num += 1
+
+ if (lastnum != num) :
+ print "%d \t%d" %(num, a)
+ lastnum = num
+
+f.close();
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/merge_sqlite.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/merge_sqlite.sh
new file mode 100755
index 000000000..2aa7fd656
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/merge_sqlite.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+set -e
+set -x
+
+rm -f mergeddata.sqlite
+FNAME=todo
+rm -f $FNAME
+echo ".read /home/soos/development/sat_solvers/cryptominisat/cmsat_tablestructure.sql" >> $FNAME
+for FILE in *sqlite*; do
+ echo "attach '${FILE}' as tomerge;" >> $FNAME
+ myarray=( tags timepassed memused reduceDB finishup )
+ for DAT in "${myarray[@]}"; do
+ echo "insert into ${DAT} select * from tomerge.${DAT};" >> $FNAME;
+ done
+ echo "detach tomerge;" >> $FNAME
+done
+sqlite3 mergeddata.sqlite < $FNAME
+
+# rm -f dump
+# rm -f schema
+# for FILE in *sqlite*; do
+# sqlite3 "$FILE" .sch > schema
+# sqlite3 "$FILE" .dump | grep INSERT | sed 's/\"//g' > dump
+# done
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/plotit b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/plotit
new file mode 100644
index 000000000..128bda491
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/plotit
@@ -0,0 +1,45 @@
+#set term epslatex color rounded size 4.9,2.2
+#set term postscript size 8,4
+set term png rounded size 800,600
+
+set pointsize 1
+set tics scale 2
+
+#set ytics 4e+8
+#set output "only-vs-congl.eps"
+set xlabel "No. solved instances from SAT Comp'09"
+set ylabel "Time (s)"
+#unset key
+set xtics 20
+#set key inside b
+#set logscale x
+#set xtics (10,40,160,640,2560,5000)
+set style line 1 lt 1 lw 1 pt 4 ps 0.3 linecolor rgbcolor "red"
+set style line 2 lt 2 lw 1 pt 8 ps 0.3 linecolor rgbcolor "orange"
+set style line 3 lt 3 lw 1 pt 12 ps 0.3 linecolor rgbcolor "blue"
+
+##########################################
+
+#set key lmargin
+set key left top
+#set output "CryptoMiniSat2.5.0_vs_CryptoMiniSat2.6.0.png"
+#plot "./solveTimes56Graph" w lp title "CryptoMiniSat 2.5.0 (SAT Race version)" ls 1, "solveTimes82-learntminimGraph" w lp title "CryptoMiniSat 2.6.0" ls 2
+
+#set output "Ligeling_vs_CryptoMiniSat2.6.1.png"
+#plot [80:] "./solveTimes97Graph" w lp title "CryptoMiniSat 2.6.1", "./solveTimesLingelingGraph" w lp title "Lingeling"
+
+#set output "CryptoMiniSat2.7.1-compare.png"
+#plot [80:] "./solveTimesMiniSatGraph" w lp title "MiniSat 2.2", "./solveTimesLingelingGraph" w lp title "lingeling", "./solveTimesPrecoSat465Graph" w lp title "PrecoSat465", "./solveTimes97Graph" w lp title "CryptoMiniSat2.7.1"
+
+#set output "With-without-tans-strong-minim.png"
+#plot [80:] "./solveTimes97Graph" w lp title "With transitive strong minimisation", "./solveTimes97-nolfminimGraph" w lp title "Without transitive strong minimisation"
+
+set output "CryptoMiniSat3Beta-compare.eps"
+plot [80:] "./solveTimesMiniSatGraph" w lp title "MiniSat 2.2", "./solveTimesLingelingGraph" w lp title "lingeling", "./solveTimesPrecoSat465Graph" w lp title "PrecoSat465", "./solveTimes129Graph" w lp title "CryptoMiniSat3Beta"
+
+
+#set term png rounded size 700,400
+set term postscript eps color lw 1.5 "Helvetica" 29 size 7,3
+set output "CryptoMiniSat-Competition.eps"
+plot [80:] "./solveTimesMiniSatGraph" w lp title "MiniSat 2.2", "./solveTimesLingelingGraph" w lp title "lingeling", "./solveTimesPrecoSat465Graph" w lp title "PrecoSat465", "./solveTimes129Graph" w lp title "CryptoMiniSat SAT Comp'11"
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output.sh
new file mode 100755
index 000000000..5e4c993cd
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+#set -x
+
+grep --color -i "assert.*fail" `ls *.out`
+grep --color -i signal `ls *.out`
+grep --color -i error `ls *.out`
+grep --color -i terminate `ls *.out`
+grep --color -i abort `ls *.out` | grep -v expensive
+grep --color -i failed `ls *.out` | grep -v probes
+
+ls -- *out | sed 's/gz.*/gz/' > allFiles
+
+# 1500 cutoff
+grep "Total" *out | awk '{print $5}' > solveTimes
+grep "Total" *out | awk '{if ($5 < 1500) {print $1}}' | sed 's/:c.*$//' | sort > solved_under_1500_full_list
+
+
+# for normal
+grep "s.*SATISFIABLE" *out | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solved
+grep "s UNSATISFIABLE" *out | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedUNSAT
+grep "s SATISFIABLE" *out | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedSAT
+
+# 1500 cutoff
+grep "s.*SATISFIABLE" $(cat solved_under_1500_full_list) | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solved1500
+grep "s UNSATISFIABLE" $(cat solved_under_1500_full_list) | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedUNSAT1500
+grep "s SATISFIABLE" $(cat solved_under_1500_full_list) | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedSAT1500
+rm solved_under_1500_full_list
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_glucose.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_glucose.sh
new file mode 100755
index 000000000..2d489d8d8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_glucose.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -x
+
+zgrep "CPU" *out.gz | awk '{if ($5 < 1500) {print $1}}' | sed 's/:c.*$//' | sort > solved_under_1500_full_list
+
+zgrep "CPU time" *out.gz | awk '{print $5}' > solveTimes
+zgrep "CPU time" *out.gz | awk '{print $1}' | sed 's/:c$//' | sed 's/gz.*/gz/' | sort > solved
+ls *.out.gz | sed 's/gz.*/gz/' | sort > allFiles
+zgrep "s UNSATISFIABLE" *out.gz | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedUNSAT
+zgrep "s SATISFIABLE" *out.gz | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedSAT
+
+
+zgrep "s.*SATISFIABLE" $(cat solved_under_1500_full_list) | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solved1500
+zgrep "s.* UNSATISFIABLE" $(cat solved_under_1500_full_list) | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedUNSAT1500
+zgrep "s.* SATISFIABLE" $(cat solved_under_1500_full_list) | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedSAT1500
+rm solved_under_1500_full_list
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_lingeling.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_lingeling.sh
new file mode 100755
index 000000000..ef017d409
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/solvetimes_from_output_lingeling.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+zgrep "\%.*all" -- *out.gz | awk '{print $2}' > solveTimes
+zgrep "\% *all" -- *out.gz | awk '{print $1}' | sed 's/:c$//' | sed 's/gz.*/gz/' | sort > solved
+ls -- *out.gz | sed 's/gz.*/gz/' | sort > allFiles
+zgrep "s UNSATISFIABLE" -- *out.gz | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedUNSAT
+zgrep "s SATISFIABLE" -- *out.gz | sed 's/:s.*$//' | sed 's/gz.*/gz/' | sort > solvedSAT
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/sqlite3_checks.py b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/sqlite3_checks.py
new file mode 100755
index 000000000..dd2b57762
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/output_parser/sqlite3_checks.py
@@ -0,0 +1,290 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from __future__ import print_function
+import sqlite3
+import optparse
+import operator
+
+
+class Query:
+ def __init__(self):
+ self.conn = sqlite3.connect(dbfname)
+ self.c = self.conn.cursor()
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.conn.close()
+
+ def find_time_outliers(self):
+ print("----------- TIME OUTLIERS --------------")
+ query = """
+ select tags.tag, name, elapsed
+ from timepassed,tags
+ where name != 'search' and elapsed > %d and
+ tags.tagname="filename" and tags.runID = timepassed.runID
+ order by elapsed desc;
+ """ % (options.maxtime)
+
+ for row in self.c.execute(query):
+ operation = row[1]
+ t = row[2]
+ fname = self.get_fname(row[0])
+ print("%-32s %-20s %.1fs" % (fname, operation, t))
+
+ def check_memory(self):
+ print("----------- MEMORY OUTLIERS --------------")
+
+ query = """
+ select tags.tag, memused.name, max(memused.MB)
+ from memused,tags
+ where tags.tagname="filename"
+ and tags.runID = memused.runID
+ and memused.MB > %d
+ and memused.name != 'vm'
+ and memused.name != 'rss'
+ and memused.name != 'longclauses'
+ group by tags.tag, memused.name
+ order by MB desc;
+ """ % (options.maxmemory)
+
+ for row in self.c.execute(query):
+ subsystem = row[1]
+ gigs = row[2]/1000.0
+ fname = self.get_fname(row[0])
+ print("%-32s %-20s %.1f GB" % (fname, subsystem, gigs))
+
+ def check_memory_rss(self):
+ print("----------- MEMORY OUTLIERS RSS --------------")
+
+ query = """
+ select tags.tag, memused.name, max(memused.MB)
+ from memused,tags
+ where tags.tagname="filename"
+ and tags.runID = memused.runID
+ and memused.MB > %d
+ and memused.name == 'rss'
+ group by tags.tag, memused.name
+ order by MB desc;
+ """ % (options.maxmemory*2)
+
+ for row in self.c.execute(query):
+ subsystem = row[1]
+ gigs = row[2]/1000.0
+ fname = self.get_fname(row[0])
+ print("%-32s %-20s %.1f GB" % (fname, subsystem, gigs))
+
+ def find_worst_unaccounted_memory(self):
+ print("----------- Largest RSS vs counted differences --------------")
+ query = """
+ select tags.tag, a.`runtime`, abs((b.rss-a.mysum)/b.rss) as differperc,
+ a.mysum as counted, b.rss as total
+ from tags,
+
+ (select runID, `runtime`, sum(MB) as mysum
+ from memused
+ where name != 'rss'
+ and name != 'vm'
+ group by `runtime`, runID) as a,
+
+ (select runID, name, `runtime`, MB as rss
+ from memused
+ where name = 'rss') as b
+
+ where tags.runID = a.runID
+ and tags.tagname="filename"
+ and a.runID = b.runID
+ and a.`runtime` = b.`runtime`
+ and total > %d
+
+ order by differperc desc
+ """ % (options.minmemory)
+
+ for row,_ in zip(self.c.execute(query), range(10)):
+ t = row[1]
+ diff_perc = row[2]
+ counted = row[3]
+ total = row[4]
+ fname = self.get_fname(row[0])
+ print("%-32s at: %-8.1fs counted: %3.2f GB rss: %3.2f GB" % (fname, t, counted/1000.0, total/1000.0))
+
+ def memory_distrib(self):
+ print("----------- MEMORY DISTRIBUTION --------------")
+ print("all divided by RSS -- resident size")
+
+ query = """
+ select sum(MB)
+ from memused
+ where name != 'vm'
+ and name != 'rss';
+ """
+ for row in self.c.execute(query):
+ recorded_mem = float(row[0])
+
+ query = """
+ select sum(MB)
+ from memused
+ where name = 'rss';
+ """
+ for row in self.c.execute(query):
+ rss_mem = float(row[0])
+
+ unaccounted = rss_mem - recorded_mem;
+ print("%-20s %.1f%%" % ("unaccounted", unaccounted/rss_mem*100.0))
+
+ query = """
+ select name, sum(MB) as memsum
+ from memused
+ where name != 'vm'
+ and name != 'rss'
+ group by name
+ order by memsum desc;
+ """
+
+ for row in self.c.execute(query):
+ subsystem = row[0]
+ mbs = float(row[1])
+ print("%-20s %.1f%%" % (subsystem, mbs/rss_mem*100.0))
+
+ def get_fname(self, val) :
+ fname = val.split("/")
+ fname = fname[len(fname)-1]
+ fname = fname.rstrip(".cnf.gz")
+ #if len(fname) > 40:
+ # fname = fname[:30] + "..." + fname[len(fname)-10:]
+
+ return fname
+
+ def calc_time_spent(self):
+ print("----------- TIME DISTRIBUTION --------------")
+
+ query = """
+ select sum(elapsed)
+ from timepassed
+ where name='search';
+ """
+ for row in self.c.execute(query):
+ search_time = float(row[0])
+
+ query = """
+ select sum(elapsed)
+ from timepassed
+ where name!='search';
+ """
+ for row in self.c.execute(query):
+ other_time = float(row[0])
+
+ total = search_time + other_time
+ print("Total: %10.1fh Search: %3.1f%%, Other: %3.1f%%" %
+ (total/3600, search_time/total*100, other_time/total*100))
+
+ query = """
+ select name, sum(elapsed)
+ from timepassed
+ group by name;
+ """
+ times = {}
+ for row in self.c.execute(query):
+ times[row[0]] = float(row[1])
+
+ # print("Names: %s" % times)
+ sorted_t = sorted(times.items(), key=operator.itemgetter(1), reverse=True)
+ for (name, t) in sorted_t:
+ name = name[:40]
+ print("%-40s %3.1f%%" % (name, t/total*100))
+
+ def find_intersting_problems(self):
+ print("----------- Interesting problems for learning --------------")
+
+ #Find CNFs that are interesting:
+ #* solved in under 500s
+ #* UNSAT
+ #* more conflicts than 60'000
+
+ #last conflict > 60000, UNSAT, solvetime under 500s
+ query = """
+ select a.runID, tags.tag, a.maxtime, a.maxconfl, mems.maxmem from
+
+ (select runID, max(conflicts) as maxconfl, max(`runtime`) as maxtime
+ from timepassed
+ group by runID
+ ) as a,
+ (select runID
+ from finishup
+ where status = "l_False"
+ ) as b,
+ (select runID, max(MB) as maxmem
+ from memused
+ group by runID
+ ) as mems, tags
+
+ where a.maxconfl > 20000
+ and a.maxconfl < 400000
+ and a.maxtime < 400
+ and a.maxtime > 10
+ and a.runID = b.runID
+ and tags.runID = a.runID
+ and tags.tagname = "filename"
+ and mems.runID = a.runID
+ order by maxtime desc
+ """
+
+ runIDs = []
+ for row in self.c.execute(query):
+ fname = row[1].split("/")
+ fname = fname[len(fname)-1]
+ runID = int(row[0])
+ t = row[2]
+ confl = row[3]
+ mb = row[4]
+ print("runID %-10d t(mins): %-6.1f confl(K): %-6.1f mem(GB): %-6.1f fname: %s" %
+ (runID, t/60.0, confl/(1000.0), mb/1024.0, fname))
+
+
+if __name__ == "__main__":
+ usage = "usage: %prog [options] sqlitedb"
+ parser = optparse.OptionParser(usage=usage)
+
+ parser.add_option("--maxtime", metavar="CUTOFF",
+ dest="maxtime", default=20, type=int,
+ help="Max time for an operation")
+
+ parser.add_option("--maxmemory", metavar="CUTOFF",
+ dest="maxmemory", default=500, type=int,
+ help="Max memory for a subsystem")
+
+ parser.add_option("--minmemory", metavar="MINMEM",
+ dest="minmemory", default=800, type=int,
+ help="Minimum memory to be checked for RSS vs counted check")
+
+ parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Print more output")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) != 1:
+ print("ERROR: You must give exactly one argument, the sqlite3 database file")
+ exit(-1)
+
+ dbfname = args[0]
+ print("Using sqlite3db file %s" % dbfname)
+
+ #peform queries
+ with Query() as q:
+ q.find_intersting_problems()
+ q.find_worst_unaccounted_memory()
+ q.check_memory_rss()
+ q.check_memory()
+ q.memory_distrib()
+ q.find_time_outliers()
+ q.calc_time_spent()
+
+
+
+#select timepassed.runID, tag,elapsed from timepassed,tags where name like 'shorten and str red%' and elapsed > 2 and tags.runID = timepassed.runID;
+
+#select * from timepassed where elapsed > 20 and name not like 'search';
+
+#select * from startup, solverRun, finishup where finishup.runID = solverRun.runID and (finishup.endTime - startup.startTime) < 30 and solverRun.version = "618b5e79fdd8a15918e19fb76ca08aa069f14b54" and solverRun.runID = startup.runID;
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/count_plus_minus.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/count_plus_minus.sh
new file mode 100755
index 000000000..495a006c3
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/count_plus_minus.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/bash
+
+#rm outfile*.data
+#rm outs/*.data
+#./reconf.py -n 18 -i 1,2,8,9,10,11,15,5,14,13,3 -f outs/out /home/soos/media/sat/out/new/out-reconf-6776906.wlm01-*/*.out
+
+
+for f in `ls outs/*.data`; do
+ echo "$f:"
+ grep ",+" $f | wc -l;
+ grep ",-" $f | wc -l;
+ echo "---"
+done
+
+
+echo "this is solved by everyone:"
+grep "total-10-13-u.cnf" outs/*.data
+
+echo "this is solved by nobody:"
+grep "partial-10-13-u.cnf" outs/*.data
+
+echo "this is solved by some only -8-==rec15 and -10-=rec17 and -9-=rec16), small diff:"
+grep "mp1-22.5.cnf.gz" outs/*.data
+
+echo "this is solved by everyone except 7, large diff:"
+grep "mp1-klieber2017s-1000-024-eq.cnf" outs/*.data
+
+echo "given neg : rec17, rec7, rec16"
+echo "which is eqiv: 10, 4, 9, (note: 8-drat = 15, which is ignored)"
+
+echo "to check:"
+echo 'grep -i "User time" */mp1-klieber2017s-1000-024-eq.cnf*.timeout | awk '{print $5 " -- " $1}' | sort -n'
+
+echo 'mapping:
+num -> reconf
+0 0
+1 3
+2 4
+3 6
+4 7
+5 12
+6 13
+7 14
+8 15
+9 16
+10 17'
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/generate_reconf.py b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/generate_reconf.py
new file mode 100755
index 000000000..1ab65a2a2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/generate_reconf.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import with_statement # Required in 2.5
+from __future__ import print_function
+import sys
+import subprocess
+
+
+def query_yes_no(question, default="no"):
+ """Ask a yes/no question via input() and return their answer.
+
+ "question" is a string that is presented to the user.
+ "default" is the presumed answer if the user just hits <Enter>.
+ It must be "yes" (the default), "no" or None (meaning
+ an answer is required of the user).
+
+ The "answer" return value is True for "yes" or False for "no".
+ """
+ valid = {"yes": True, "y": True, "ye": True,
+ "no": False, "n": False}
+ if default is None:
+ prompt = " [y/n] "
+ elif default == "yes":
+ prompt = " [Y/n] "
+ elif default == "no":
+ prompt = " [y/N] "
+ else:
+ raise ValueError("invalid default answer: '%s'" % default)
+
+ while True:
+ sys.stdout.write(question + prompt)
+ choice = input().lower()
+ if default is not None and choice == '':
+ return valid[default]
+ elif choice in valid:
+ return valid[choice]
+ else:
+ sys.stdout.write("Please respond with 'yes' or 'no' "
+ "(or 'y' or 'n').\n")
+
+
+num = 18
+ignore = "1,2,8,9,10,11,15,5,14,13,3"
+files = "/home/soos/media/sat/out/new/out-reconf-6776906.wlm01-*/*.out"
+
+# for testing
+#num = 8
+#ignore = "0,1,2,3,5,6"
+#files = "/home/soos/media/sat/out/new2/out-reconf-6776906.wlm01-*/*.out"
+
+ignore_elems = {}
+for x in ignore.split(","):
+ x = x.strip()
+ if x == "":
+ continue
+
+ x = int(x)
+ ignore_elems[x] = True
+
+subprocess.call("rm outs/*", shell=True)
+toexec = "./reconf.py -n %d -i %s -f outs/out %s" % (num, ignore, files)
+f = open("output", "w")
+ret = subprocess.call(toexec, shell=True, stdout=f)
+f.close()
+if ret != 0:
+ print("ERROR: reconf call exited non-zero: %s" % toexec)
+ exit(-1)
+
+for i in range(num):
+ if i in ignore_elems:
+ continue
+
+ print("reconf with %d" % i)
+ subprocess.call("cp outs/reconf.names outs/out%d.names" % i, shell=True)
+ subprocess.call("c5.0 -u 20 -f outs/out%d -r > outs/out%d.c50.out" % (i, i), shell=True)
+
+subprocess.call("./tocpp.py -i %s -n %d > ../../src/features_to_reconf.cpp" % (ignore, num),
+ shell=True)
+
+subprocess.call("sed -i 's/red-/red_cl_distrib./g' ../../src/features_to_reconf.cpp",
+ shell=True)
+
+upload = query_yes_no("Upload to AWS?")
+if upload:
+ subprocess.call("aws s3 cp ../../src/features_to_reconf.cpp s3://msoos-solve-data/solvers/", shell=True)
+ print("Uploded to AWS")
+else:
+ print("Not uploaded to AWS")
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/reconf.py b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/reconf.py
new file mode 100755
index 000000000..fbdd6e8ca
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/reconf.py
@@ -0,0 +1,334 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+import sys
+import re
+import ntpath
+import os
+
+from optparse import OptionParser
+usage = """
+./reconf.py -n 15 ~/media/sat/out/satcomp091113/reconf0-09113-23-July-2015-mark-XZGKC-78499d3f2-tout-5000-mout-1600/*.stdout* ~/media/sat/out/satcomp091113/reconf14-091113-28-August-2015-mark-O5T8F-169dfc802-tout-5000-mout-1600/*.stdout*
+
+NOTE: you *must* have reconf14 in there or a lot of data will be missing
+in particular avg_confl_size, which will make the system error out on you.
+"""
+parser = OptionParser(usage=usage)
+parser.add_option("-f", "--file",
+ dest="outfname", type=str, default="outfile",
+ help="print final values to this file")
+parser.add_option("-n", "--num",
+ dest="num", type=int,
+ help="Number of reconfs")
+parser.add_option("--dropdown",
+ dest="dropdown", type=float, default=0.02,
+ help="From traget 1.0 this is subtracted no matter what")
+parser.add_option("--cutoff",
+ dest="cutoff", type=float, default=0.50,
+ help="At least this much or higher is needed for +")
+parser.add_option("--divisor",
+ dest="divisor", type=float, default=1500.0,
+ help="Time difference is divided by this much and subtracted")
+parser.add_option("--ignorethresh",
+ dest="ignore_threshold", type=float, default=4000.0,
+ help="If all solved above this score, ignore")
+parser.add_option("--maxscore",
+ dest="maxscore", type=int, default=5000.0,
+ help="Scores go down from here")
+parser.add_option("--ignore", "-i",
+ dest="ignore", type=str,
+ help="Ignore these reconfs")
+parser.add_option("--verbose", "-r", dest="verbose", default=False,
+ action="store_true", help="More verbose")
+
+(options, args) = parser.parse_args()
+# print("files to parse are:", args)
+
+ignore = {}
+if options.ignore:
+ for r in options.ignore.split(","):
+ r = r.strip()
+ r = int(r)
+ ignore[r] = True
+
+feat_order = ["numClauses", "binary", "horn", "horn_mean", "horn_std", "horn_min", "horn_max", "horn_spread", "vcg_var_mean", "vcg_var_std", "vcg_var_min", "vcg_var_max", "vcg_var_spread", "vcg_cls_mean", "vcg_cls_std", "vcg_cls_min", "vcg_cls_max", "vcg_cls_spread", "pnr_var_mean", "pnr_var_std", "pnr_var_min", "pnr_var_max", "pnr_var_spread", "pnr_cls_mean", "pnr_cls_std", "pnr_cls_min", "pnr_cls_max", "pnr_cls_spread", "avg_confl_size", "confl_size_min", "confl_size_max", "avg_confl_glue", "confl_glue_min", "confl_glue_max", "avg_num_resolutions", "num_resolutions_min", "num_resolutions_max", "learnt_bins_per_confl", "avg_branch_depth", "branch_depth_min", "branch_depth_max", "avg_trail_depth_delta", "trail_depth_delta_min", "trail_depth_delta_max", "avg_branch_depth_delta", "props_per_confl", "confl_per_restart", "decisions_per_conflict", "irred_cl_distrib.glue_distr_mean", "irred_cl_distrib.glue_distr_var", "irred_cl_distrib.size_distr_mean", "irred_cl_distrib.size_distr_var", "irred_cl_distrib.uip_use_distr_mean", "irred_cl_distrib.uip_use_distr_var", "irred_cl_distrib.activity_distr_mean", "irred_cl_distrib.activity_distr_var", "red_cl_distrib.glue_distr_mean", "red_cl_distrib.glue_distr_var", "red_cl_distrib.size_distr_mean", "red_cl_distrib.size_distr_var", "red_cl_distrib.uip_use_distr_mean", "red_cl_distrib.uip_use_distr_var", "red_cl_distrib.activity_distr_mean", "red_cl_distrib.activity_distr_var"]
+
+f = open("outs/reconf.names", "w")
+f.write("reconf. | the target attribute\n\n")
+f.write("name: label.\n")
+for o in feat_order:
+ f.write("%s: continuous.\n" % o)
+f.write("\nreconf: +,-.\n")
+f.close()
+
+if options.num is None:
+ print("ERROR: You must give the number of reconfs")
+ exit(-1)
+
+
+def parse_features_line(line):
+ line = re.sub("c.*features. ", "", line)
+ line = line.strip().split(" ")
+ dat = {}
+
+ name = ""
+ for elem, i in zip(line, range(1000)):
+ elem = elem.strip(":").strip(",")
+ if i % 2 == 0:
+ name = elem
+ continue
+
+ dat[name] = elem
+ name = ""
+ return dat
+
+
+def nobody_could_solve_it(reconf_score):
+ for r_s_elem in reconf_score:
+ if r_s_elem[1] != 0:
+ return False
+
+ return True
+
+
+def all_above_fixed_score(reconf_score):
+ for x in reconf_score:
+ if x[0] in ignore:
+ continue
+
+ if x[1] < options.ignore_threshold:
+ print("-> not ignoring, reconf %d is below ignore threshold" % x[0])
+ return False
+
+ return True
+
+
+def print_features_and_scores(fname, features, reconfs_scores):
+ r_s = sorted(reconfs_scores, key=lambda x: x[1])[::-1]
+ best_reconf = r_s[0][0]
+ best_reconf_score = r_s[0][1]
+ print("r_s: ", r_s)
+
+ if nobody_could_solve_it(r_s):
+ print("Nobody could solve: %s" % fname)
+ return -1, False
+
+ if all_above_fixed_score(r_s):
+ print("All above score: %s" % (fname))
+ return -2, False
+
+ print("Calculating +/- for %s" % fname)
+
+ # calculate final array
+ final_array = [0.0]*options.num
+ val = 1.0
+ best_score = r_s[0][1]
+ for conf_score, i in zip(r_s, range(100)):
+ diff = abs(conf_score[1]-best_score)
+ best_score = conf_score[1]
+ val -= float(diff)/options.divisor
+ if diff > 0:
+ val -= options.dropdown
+
+ if val < 0.0 or conf_score[1] == 0:
+ val = 0.0
+
+ if conf_score[1] > 0:
+ final_array[conf_score[0]] = val
+
+ # assemble final string
+ string = ""
+ string += "%s," % fname
+ for name in feat_order:
+ string += "%s," % features[name]
+
+ # print to console
+ if True:
+ string2 = str(string)
+ string2 += "||"
+ for a in final_array:
+ string2 += "%.1f " % a
+
+ print(string2)
+
+ # print to files
+ origstring = str(string)
+ for i in range(options.num):
+ # skip files we don't need to write to
+ if i in ignore:
+ continue
+
+ string = str(origstring)
+ if final_array[i] >= options.cutoff:
+ string += "+"
+ else:
+ string += "-"
+
+ outf[i].write(string + "\n")
+
+ only_this_could_solve_it = r_s[1][1] == 0
+ return best_reconf, only_this_could_solve_it
+
+
+def parse_file(fname):
+ f = open(fname, 'r')
+ # print("fname orig:", fname)
+ fname_clean = re.sub("cnf.gz-.*", "cnf.gz", fname)
+ fname_clean = ntpath.split(fname_clean)[1]
+ reconf = 0
+
+ satisfiable = None
+ features = None
+ score = 0
+ for line in f:
+ line = line.strip()
+ #print("parsing line:", line)
+ if features is None and "features" in line and "numClauses" in line:
+ features = parse_features_line(line)
+
+ if "Total time" in line:
+ time_used = line.strip().split(":")[1].strip()
+ score = int(round(float(time_used)))
+ score = options.maxscore-score
+
+ if "reconfigured" in line:
+ reconf = line.split("to config")[1].strip()
+ reconf = int(reconf)
+
+ if "s SATIS" in line:
+ satisfiable = True
+
+ if "s UNSATIS" in line:
+ satisfiable = False
+
+ #if satisfiable == True:
+ # score = 0
+
+ if reconf in ignore:
+ score = 0
+
+ # print("features:", features)
+ return fname_clean, reconf, features, score
+
+
+all_files = set()
+all_files_scores = {}
+all_files_features = {}
+max_num_features = 0
+for x in args:
+ print("# parsing infile:", x)
+ fname, reconf, features, score = parse_file(x)
+ if fname in all_files:
+ if all_files_features[fname] != features:
+ print("different features extracted for fname", fname)
+ print("orig:", all_files_features[fname])
+ print("new: ", features)
+ print("Keeping the longer one!")
+
+ if all_files_features[fname] is None:
+ num_features = 0
+ else:
+ num_features = len(all_files_features[fname])
+
+ if features is not None and num_features < len(features):
+ all_files_features[fname] = features
+ else:
+ all_files.add(fname)
+ all_files_features[fname] = features
+ all_files_scores[fname] = []
+
+ #print("fname:", fname)
+ all_files_scores[fname].append([reconf, score])
+
+ sys.stdout.write(".")
+ sys.stdout.flush()
+
+print("END--------")
+print("all files:", all_files)
+print("")
+
+outf = []
+outfnames = []
+for i in range(options.num):
+ fname = options.outfname + str(i) + ".data"
+ outfnames.append(fname)
+ try:
+ os.unlink(fname)
+ except:
+ pass
+
+ if i not in ignore:
+ outf.append(open(fname, "w"))
+ else:
+ outf.append(None)
+
+best_reconf = {'all_above_fixed_score': 0, 'nobody_could_solve_it': 0}
+for x in range(options.num):
+ best_reconf[x] = 0
+only_this = dict(best_reconf)
+
+
+for fname in all_files:
+ print("")
+ print("calculating final DATs for CNF ", fname)
+ if all_files_features[fname] is None:
+ print("-> solved too early, no features, skipping")
+ continue
+
+ if options.verbose:
+ print("-> all_files_features[fname]:", all_files_features[fname])
+ if "avg_confl_size" not in all_files_features[fname]:
+ print("-> WARNING This is weird, probably not solved by one (different features than everything else), skipping")
+ continue
+
+ if all_files_features[fname] is None:
+ print("-> features for file is None: %s" % fname)
+
+ if all_files_features[fname] is not None:
+ best, only_this_could_solve_it = print_features_and_scores(fname, all_files_features[fname], all_files_scores[fname])
+
+ if best == -2:
+ best = "all_above_fixed_score"
+
+ if best == -1:
+ best = "nobody_could_solve_it"
+
+ print("-> best here:", best)
+ best_reconf[best] = best_reconf[best] + 1
+ if only_this_could_solve_it:
+ only_this[best] = only_this[best] + 1
+
+print("")
+print("Wrote data files: %s\n" % outfnames)
+print("\n-----------------------------")
+print("best reconfs: ")
+for a, b in best_reconf.items():
+ if a not in ignore:
+ print("%-20s : %-3d" % (a, b))
+
+print("\n-----------------------------")
+print("uniquely solved by: ")
+for a, b in only_this.items():
+ if a not in ignore:
+ print("%-20s : %-3d" % (a, b))
+
+for i in range(options.num):
+ if outf[i] is not None:
+ outf[i].close()
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/tocpp.py b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/tocpp.py
new file mode 100755
index 000000000..16f0a3396
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/reconf/tocpp.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+
+from __future__ import print_function
+import sys
+
+from optparse import OptionParser
+parser = OptionParser()
+parser.add_option("-n", "--num",
+ dest="num", type=int,
+ help="Number of reconfs")
+parser.add_option("--ignore", "-i",
+ dest="ignore", type=str,
+ help="Ignore these reconfs")
+
+(options, args) = parser.parse_args()
+
+ignore = {}
+if options.ignore:
+ for r in options.ignore.split(","):
+ r = r.strip()
+ r = int(r)
+ ignore[r] = True
+
+if options.num is None:
+ print("ERROR: You must give the number of reconfs")
+ exit(-1)
+
+print("""/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvefeatures.h"
+#include <iostream>
+using std::cout;
+using std::endl;
+
+namespace CMSat {
+""")
+
+for i in range(options.num):
+ if i not in ignore:
+ print("double get_score%d(const SolveFeatures& feat, const int verb);" % i)
+
+print("""
+int get_reconf_from_features(const SolveFeatures& feat, const int verb)
+{
+\tdouble best_score = 0.0;
+\tint best_val = 0;
+\tdouble score;
+""")
+
+for i in range(options.num):
+ if i in ignore:
+ continue
+
+ print("""
+\tscore = get_score%d(feat, verb);
+\tif (verb >= 2)
+\t\tcout << "c Score for reconf %d is " << score << endl;
+\tif (best_score < score) {
+\t\tbest_score = score;
+\t\tbest_val = %d;
+\t}
+""" % (i, i, i))
+
+print("""
+\tif (verb >= 2)
+\t\tcout << "c Winning reconf is " << best_val << endl;
+\treturn best_val;
+}
+
+""")
+
+
+def read_one_reconf(reconf_num):
+ sys.stderr.write("Parsing reconf num %d\n" % reconf_num)
+ f = open("outs/out%d.rules" % reconf_num)
+ num_conds = 0
+ cond_no = 0
+ num_rules = 0
+ rule_no = 0
+ string = ""
+
+ print("""
+double get_score%d(const SolveFeatures& feat, const int verb)
+{""" % reconf_num)
+ for line in f:
+ if "id=" in line:
+ continue
+
+ line = line.strip()
+ line = line.split(" ")
+ dat = {}
+ for elem in line:
+ elems = elem.split("=")
+ elems = [e.strip("\"") for e in elems]
+ dat[elems[0]] = elems[1]
+
+ if "conds" in dat:
+ assert num_conds == cond_no
+ num_conds = int(dat["conds"])
+ rule_class = dat["class"]
+ cond_no = 0
+ confidence = float(dat["confidence"])
+ continue
+
+ if "entries" in dat:
+ continue
+
+ if "rules" in dat:
+ num_rules = int(dat["rules"])
+
+ if "default" in dat:
+ default = dat["default"]
+ if default == "+":
+ print("\tdouble default_val = %.2f;\n" % (1.0))
+ else:
+ print("\tdouble default_val = %.2f;\n" % (0.0))
+
+ print("\tdouble total_plus = 0.0;")
+ print("\tdouble total_neg = 0.0;")
+ continue
+
+ # process rules
+ if cond_no == 0:
+ string = "\tif ("
+ else:
+ string += " &&\n\t\t"
+
+ string += "(feat.%s %s %.5f)" % (dat["att"], dat["result"],
+ float(dat["cut"]))
+ cond_no += 1
+
+ # end rules
+ if cond_no == num_conds:
+ string += ")\n\t{"
+ print(string)
+
+ string = ""
+ if rule_class == "+":
+ string += "\t\ttotal_plus += %.3f;" % confidence
+ else:
+ string += "\t\ttotal_neg += %.3f;" % confidence
+
+ print(string)
+ print("\t}")
+ rule_no += 1
+
+ print("\t// num_rules:", num_rules)
+ print("\t// rule_no:", rule_no)
+ sys.stderr.write("num rules: %s rule_no: %s\n" % (num_rules, rule_no))
+ assert num_rules == rule_no
+ print("\t// default is:", default)
+ print("""
+\tif (total_plus == 0.0 && total_neg == 0.0) {
+\t\treturn default_val;
+\t}
+\tif (verb >= 2) {
+\t\t//cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+\t}
+\treturn total_plus - total_neg;
+}
+""")
+
+
+for i in range(options.num):
+ if i not in ignore:
+ read_one_reconf(i)
+
+print("""
+} //end namespace""")
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/travis-cmake.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/travis-cmake.sh
new file mode 100755
index 000000000..623efe918
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/travis-cmake.sh
@@ -0,0 +1,471 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# This file wraps CMake invocation for TravisCI
+# so we can set different configurations via environment variables.
+
+set -e
+set -x
+
+# fix TravisCI issue --> https://github.com/travis-ci/travis-ci/issues/8920
+python -c "import fcntl; fcntl.fcntl(1, fcntl.F_SETFL, 0)"
+
+check_license() {
+ #license check -- first print and then fail in case of problems
+ ./utils/licensecheck/licensecheck.pl -m $1
+ NUM=$(./utils/licensecheck/licensecheck.pl -m $1 | grep UNK | wc -l)
+ shopt -s extglob
+ NUM="${NUM##*( )}"
+ NUM="${NUM%%*( )}"
+ shopt -u extglob
+ if [ "$NUM" -ne 0 ]; then
+ echo "There are some files without license information!"
+ exit -1
+ fi
+}
+
+check_license_fnames() {
+ #license check -- first print and then fail in case of problems
+ find $1 -type f -name $2 -exec utils/licensecheck/licensecheck.pl -m {} \;
+ NUM=$(find $1 -type f -name $2 -exec utils/licensecheck/licensecheck.pl -m {} \; | grep UNK | wc -l)
+ shopt -s extglob
+ NUM="${NUM##*( )}"
+ NUM="${NUM%%*( )}"
+ shopt -u extglob
+ if [ "$NUM" -ne 0 ]; then
+ echo "There are some files without license information!"
+ exit -1
+ fi
+}
+
+check_license CMakeLists.txt
+check_license ./src
+check_license ./tests/
+check_license ./scripts/fuzz/
+check_license ./scripts/learn/
+check_license ./scripts/aws/
+
+check_license_fnames tests/ CMakeLists.txt
+check_license_fnames src/ CMakeLists.txt
+check_license_fnames scripts/ CMakeLists.txt
+
+NUM=$(./utils/licensecheck/licensecheck.pl -m ./tests | grep UNK | wc -l)
+shopt -s extglob
+NUM="${NUM##*( )}"
+NUM="${NUM%%*( )}"
+shopt -u extglob
+if [ "$NUM" -ne 0 ]; then
+ echo "There are some files without license information!"
+ exit -1
+fi
+
+set -x
+
+SOURCE_DIR=$(pwd)
+cd build
+BUILD_DIR=$(pwd)
+
+# Note eval is needed so COMMON_CMAKE_ARGS is expanded properly
+
+
+# for OSX keep prefix
+PATH_PREFIX_ADD=""
+if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
+ PATH_PREFIX_ADD="-DCMAKE_INSTALL_PREFIX=/usr"
+fi
+
+case $CMS_CONFIG in
+ SLOW_DEBUG)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DSLOW_DEBUG:BOOL=ON \
+ ${PATH_PREFIX_ADD} \
+ "${SOURCE_DIR}"
+ ;;
+
+ NORMAL)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ ${PATH_PREFIX_ADD} \
+ "${SOURCE_DIR}"
+ ;;
+
+ NORMAL_PYTHON2)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DFORCE_PYTHON2=ON -DENABLE_TESTING:BOOL=ON \
+ ${PATH_PREFIX_ADD} \
+ "${SOURCE_DIR}"
+ ;;
+
+ LARGEMEM)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DLARGEMEM:BOOL=ON \
+ ${PATH_PREFIX_ADD} \
+ "${SOURCE_DIR}"
+ ;;
+
+ LARGEMEM_GAUSS)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DLARGEMEM:BOOL=ON \
+ -DUSE_GAUSS=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ COVERAGE)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DCOVERAGE:BOOL=ON \
+ -DUSE_GAUSS=ON \
+ -DSTATS:BOOL=ON \
+ -DSLOW_DEBUG:BOOL=ON \
+ -DSTATICCOMPILE:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ STATIC)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DSTATICCOMPILE:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ ONLY_SIMPLE)
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DONLY_SIMPLE:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ ONLY_SIMPLE_STATIC)
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DONLY_SIMPLE:BOOL=ON \
+ -DSTATICCOMPILE:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ STATS)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DSTATS:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ NOZLIB)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DNOZLIB:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ RELEASE)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DCMAKE_BUILD_TYPE:STRING=Release \
+ "${SOURCE_DIR}"
+ ;;
+
+ NOSQLITE)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get remove libsqlite3-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+
+ NOPYTHON)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get remove -y python3-dev python2.7-dev python-dev libpython-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ INTREE_BUILD)
+ cd ..
+ SOURCE_DIR=$(pwd)
+ BUILD_DIR=$(pwd)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ WEB)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+
+ cd "$SOURCE_DIR"
+ #./cmsat_mysql_setup.sh
+ cd "$BUILD_DIR"
+
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DSTATS:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ SQLITE)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libsqlite3-dev; fi
+
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DSTATS:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ NOTEST)
+ rm -rf ${SOURCE_DIR}/utils/gtest
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ eval cmake "${SOURCE_DIR}"
+ ;;
+
+ GAUSS)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libsqlite3-dev; fi
+
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ -DUSE_GAUSS=ON \
+ ${PATH_PREFIX_ADD} \
+ "${SOURCE_DIR}"
+ ;;
+
+ M4RI)
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libboost-program-options-dev; fi
+ wget https://bitbucket.org/malb/m4ri/downloads/m4ri-20140914.tar.gz
+ tar xzvf m4ri-20140914.tar.gz
+ cd m4ri-20140914/
+ ./configure
+ make
+ sudo make install
+ cd ..
+
+ eval cmake -DENABLE_TESTING:BOOL=ON \
+ "${SOURCE_DIR}"
+ ;;
+
+ *)
+ echo "\"${CMS_CONFIG}\" configuration not recognised"
+ exit 1
+ ;;
+esac
+
+make -j2 VERBOSE=1
+
+if [ "$CMS_CONFIG" == "NOTEST" ]; then
+ sudo make install VERBOSE=1
+ exit 0
+fi
+
+echo $(ls lib)
+echo $(ls pycryptosat)
+echo $(otool -L pycryptosat/pycryptosat.so)
+echo $(ldd pycryptosat/pycryptosat.so)
+echo $(otool -L lib/libcryptominisat5.so.5.0)
+echo $(ldd lib/libcryptominisat5.so.5.0)
+
+if [ "$CMS_CONFIG" = "ONLY_SIMPLE_STATIC" ] || [ "$CMS_CONFIG" = "STATIC" ] ; then
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
+ echo $(ldd ./cryptominisat5_simple)
+ ldd ./cryptominisat5_simple | grep "not a dynamic";
+ fi
+
+ if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
+ echo $(otool -L ./cryptominisat5_simple)
+ ! (otool -L ./cryptominisat5_simple | grep "libcryptominisat");
+ ! (otool -L ./cryptominisat5_simple | grep "libz");
+ ! (otool -L ./cryptominisat5_simple | grep "libboost");
+ fi
+fi
+
+if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo $(ldd ./cryptominisat5); fi
+if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then echo $(otool -L ./cryptominisat5); fi
+if [ "$CMS_CONFIG" = "STATIC" ] ; then
+ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
+ echo $(ldd ./cryptominisat5)
+ ldd ./cryptominisat5 | grep "not a dynamic";
+ fi
+
+ if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
+ echo $(otool -L ./cryptominisat5)
+ ! (otool -L ./cryptominisat5 | grep "libcryptominisat");
+ ! (otool -L ./cryptominisat5 | grep "libz");
+ ! (otool -L ./cryptominisat5 | grep "libboost");
+ fi
+fi
+
+ctest -V
+sudo make install VERBOSE=1
+if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
+ echo $(sudo ldconfig)
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
+fi
+
+
+##################
+# setting up python environment
+##################
+
+which python
+python --version
+echo $PYTHONPATH
+if [ "$CMS_CONFIG" == "NORMAL_PYTHON2" ]; then
+ export MYPYTHON=python2
+else
+ export MYPYTHON=python3
+fi
+echo "MYPYTHON is '${MYPYTHON}'"
+which ${MYPYTHON}
+
+if [[ "$CMS_CONFIG" == "NORMAL" ]] || [[ "$CMS_CONFIG" == "NORMAL_PYTHON2" ]] || [[ "$CMS_CONFIG" == "SLOW_DEBUG" ]] || [[ "$CMS_CONFIG" == "LARGEMEM" ]] || [[ "$CMS_CONFIG" == "GAUSS" ]] ; then
+ echo "from __future__ import print_function
+import sys
+print(sys.path)
+" > check_path.py
+ ${MYPYTHON} check_path.py
+ echo $PYTHONPATH
+ export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.4/site-packages
+ export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/site-packages
+ echo $PYTHONPATH
+ ${MYPYTHON} check_path.py
+
+ (
+ cd pycryptosat/tests/
+ ${MYPYTHON} test_pycryptosat.py
+ )
+fi
+
+case $CMS_CONFIG in
+ WEB)
+ echo "1 2 0" | ./cryptominisat5 --sql 1 --zero-exit-status
+ ;;
+
+ SQLITE)
+ echo "1 2 0" | ./cryptominisat5 --sql 2 --zero-exit-status
+ ;;
+
+ M4RI)
+ echo "1 2 0" | ./cryptominisat5 --xor 1 --zero-exit-status
+ ;;
+
+ *)
+ echo "\"${CMS_CONFIG}\" Binary no extra testing (sql, xor, etc), skipping this part"
+ ;;
+esac
+
+if [ "$CMS_CONFIG" == "NORMAL" ] ; then
+ (
+ cd
+ ${MYPYTHON} -c "
+import pycryptosat
+a = pycryptosat.Solver()
+a.add_clause([1,2,3])
+print(a.solve())"
+ )
+fi
+
+
+
+# elimination checks
+# NOTE: minisat doesn't build with clang
+if [ "$CMS_CONFIG" == "NORMAL" ] && [ "$CXX" != "clang++" ] ; then
+ CMS_PATH="${BUILD_DIR}/cryptominisat5"
+
+ # building STP
+ cd "${BUILD_DIR}"
+ # minisat
+ git clone --depth 1 https://github.com/niklasso/minisat.git
+ cd minisat
+ mkdir -p build
+ cd build
+ cmake ..
+ make -j2
+ sudo make install VERBOSE=1
+ cd "${BUILD_DIR}"
+
+ # STP
+ cd "${BUILD_DIR}"
+ git clone --depth 1 https://github.com/stp/stp.git
+ cd stp
+ mkdir -p build
+ cd build
+ cmake ..
+ make -j2
+ sudo make install VERBOSE=1
+ cd "${BUILD_DIR}"
+fi
+
+
+#do fuzz testing
+if [ "$CMS_CONFIG" != "ONLY_SIMPLE" ] && [ "$CMS_CONFIG" != "ONLY_SIMPLE_STATIC" ] && [ "$CMS_CONFIG" != "WEB" ] && [ "$CMS_CONFIG" != "NOPYTHON" ] && [ "$CMS_CONFIG" != "COVERAGE" ] && [ "$CMS_CONFIG" != "INTREE_BUILD" ] && [ "$CMS_CONFIG" != "STATS" ] && [ "$CMS_CONFIG" != "SQLITE" ] ; then
+ cd ../scripts/fuzz/
+ which ${MYPYTHON}
+ ${MYPYTHON} ./fuzz_test.py --novalgrind --small --fuzzlim 30
+fi
+
+if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
+ case $CMS_CONFIG in
+ WEB)
+ #we are now in the main dir, ./src dir is here
+ cd ..
+ pwd
+
+ cd web
+ sudo apt-get install python-software-properties
+ sudo add-apt-repository -y ppa:chris-lea/node.js
+ sudo apt-get update
+ sudo apt-get install -y nodejs
+ ./install_web.sh
+ ;;
+
+ STATS)
+ ln -s ../scripts/build_scripts/* .
+ ln -s ../scripts/learn/* .
+ # ./test_id.sh
+ sudo apt-get install -y --force-yes graphviz
+ # sudo apt-get install -y --force-yes blas
+ # sudo pip3 install numpy
+ # sudo pip3 install scipy
+ # sudo pip3 install sklearn
+ # sudo pip3 install pandas
+ # ./test_predict.sh
+ ;;
+
+ COVERAGE)
+ #we are now in the main dir, ./src dir is here
+ cd ..
+ pwd
+
+ # capture coverage info
+ lcov --directory build/cmsat5-src/CMakeFiles/libcryptominisat5.dir --capture --output-file coverage.info
+
+ # filter out system and test code
+ lcov --remove coverage.info 'tests/*' '/usr/*' 'scripts/*' 'utils/*'--output-file coverage.info
+
+ # debug before upload
+ lcov --list coverage.info
+
+ # only attempt upload if $COVERTOKEN is set
+ if [ -n "$COVERTOKEN" ]; then
+ coveralls-lcov --repo-token "$COVERTOKEN" coverage.info # uploads to coveralls
+ fi
+ ;;
+
+ *)
+ echo "\"${CMS_CONFIG}\" No further testing"
+ ;;
+ esac
+fi
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/travis-install-cmake.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/travis-install-cmake.sh
new file mode 100755
index 000000000..7f65d3373
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/travis-install-cmake.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# This file wraps CMake invocation for TravisCI
+# so we can set different configurations via environment variables.
+
+set -e
+set -x
+
+wget http://www.cmake.org/files/v3.4/cmake-3.4.1.tar.gz
+tar -xzf cmake-3.4.1.tar.gz
+cd cmake-3.4.1/
+./configure > cmake_config_out.txt
+make -j2 > cmake_build_out.txt
+sudo make install > cmake_install_out.txt
+sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
+cmake --version
+cd ..
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/travis-install-lcov.sh b/cryptominisat5/cryptominisat-5.6.3/scripts/travis-install-lcov.sh
new file mode 100755
index 000000000..04cc1aae7
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/travis-install-lcov.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# Copyright (C) 2017 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# This file wraps CMake invocation for TravisCI
+# so we can set different configurations via environment variables.
+
+sudo pip install cpp-coveralls
+wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz
+tar xf lcov_1.11.orig.tar.gz
+sudo make -C lcov-1.11/ install
+gem install coveralls-lcov
diff --git a/cryptominisat5/cryptominisat-5.6.3/scripts/xxd-alike.py b/cryptominisat5/cryptominisat-5.6.3/scripts/xxd-alike.py
new file mode 100755
index 000000000..3d2ce6c4d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/scripts/xxd-alike.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2017, Martin Horenovsky
+# Copyright (c) 2018, Mate Soos
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+import sys
+
+PY3 = sys.version_info.major == 3
+
+input_name = sys.argv[1]
+output_path = sys.argv[2]
+output_name = input_name.replace('.', '_')
+
+
+# In python 3, opening file as rb will return bytes and iteration is per byte
+# In python 2, opening file as rb will return string and iteration is per char
+# and char need to be converted to bytes.
+# This function papers over the differences
+def convert(c):
+ if PY3:
+ return c
+ return ord(c)
+
+
+with open(input_name, 'rb') as file:
+ contents = file.read()
+
+
+with open(output_path, 'w') as out:
+ out.write('unsigned char {}[] = {{'.format(output_name))
+ first = True
+ for i, byte in enumerate(contents):
+ if not first:
+ out.write(', ')
+ first = False
+ if i % 12 == 0:
+ out.write('\n ')
+ out.write('0x{:02x}'.format(convert(byte)))
+
+ out.write(', 0x00')
+ out.write('\n};\n')
+
+ out.write('unsigned int {}_len = {};\n'.format(output_name, len(contents)))
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/src/CMakeLists.txt
new file mode 100644
index 000000000..a162a2aa2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/CMakeLists.txt
@@ -0,0 +1,346 @@
+# Copyright (c) 2017, Mate Soos
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+include_directories(
+ ${PROJECT_SOURCE_DIR}
+)
+
+if (NOT WIN32)
+ add_cxx_flag_if_supported("-Wno-bitfield-constant-conversion")
+ #add_cxx_flag_if_supported("-Wduplicated-cond")
+ #add_cxx_flag_if_supported("-Wduplicated-branches")
+ add_cxx_flag_if_supported("-Wlogical-op")
+ add_cxx_flag_if_supported("-Wrestrict")
+ add_cxx_flag_if_supported("-Wnull-dereference")
+ add_cxx_flag_if_supported("-Wjump-misses-init")
+ add_cxx_flag_if_supported("-Wdouble-promotion")
+ add_cxx_flag_if_supported("-Wshadow")
+ add_cxx_flag_if_supported("-Wformat=2")
+ add_cxx_flag_if_supported("-Wextra-semi")
+ add_cxx_flag_if_supported("-pedantic")
+ add_cxx_flag_if_supported("-Wno-class-memaccess")
+ #add_cxx_flag_if_supported("-Wdeprecated")
+endif()
+add_sanitize_flags()
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+if(Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+endif()
+
+if (ENABLE_TESTING)
+ add_definitions( -DCMS_TESTING_ENABLED )
+ set(GTEST_PREFIX ${PROJECT_SOURCE_DIR}/utils/gtest)
+ include_directories(${GTEST_PREFIX}/include)
+endif()
+
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/GitSHA1.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/GitSHA1.cpp" @ONLY)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cryptominisat.h.in" "${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5/cryptominisat.h" @ONLY)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/solvertypesmini.h.in" "${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5/solvertypesmini.h" @ONLY)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cryptominisat_c.h.in" "${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5/cryptominisat_c.h" @ONLY)
+
+if (SQLITE3_FOUND AND STATS)
+ if (NOT PYTHON_EXECUTABLE)
+ MESSAGE(FATAL_ERROR "Unfortunately, the python interpreter is needed for statistics because of SQL text generation")
+ endif()
+
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_tablestructure.cpp
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND ${PYTHON_EXECUTABLE} ${CRYPTOMS_SCRIPTS_DIR}/xxd-alike.py cmsat_tablestructure.sql ${CMAKE_CURRENT_BINARY_DIR}/sql_tablestructure.cpp
+ DEPENDS ${CMAKE_SOURCE_DIR}/cmsat_tablestructure.sql
+ )
+ add_custom_target(tablestruct ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/sql_tablestructure.cpp)
+endif()
+
+set(cryptoms_lib_files
+ cnf.cpp
+ propengine.cpp
+ varreplacer.cpp
+ clausecleaner.cpp
+ clauseusagestats.cpp
+ prober.cpp
+ occsimplifier.cpp
+ subsumestrengthen.cpp
+ clauseallocator.cpp
+ sccfinder.cpp
+ solverconf.cpp
+ distillerlong.cpp
+ distillerlongwithimpl.cpp
+ str_impl_w_impl_stamp.cpp
+ solutionextender.cpp
+ completedetachreattacher.cpp
+ searcher.cpp
+ solver.cpp
+ sqlstats.cpp
+ implcache.cpp
+ stamp.cpp
+ compfinder.cpp
+ comphandler.cpp
+ hyperengine.cpp
+ subsumeimplicit.cpp
+ datasync.cpp
+ reducedb.cpp
+ clausedumper.cpp
+ bva.cpp
+ intree.cpp
+ features_calc.cpp
+ features_to_reconf.cpp
+ solvefeatures.cpp
+ searchstats.cpp
+ xorfinder.cpp
+ cryptominisat_c.cpp
+# watcharray.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/GitSHA1.cpp
+)
+
+set(cryptoms_lib_link_libs "")
+
+if (USE_GAUSS)
+ SET(cryptoms_lib_files ${cryptoms_lib_files}
+ EGaussian.cpp
+ packedrow.cpp
+ matrixfinder.cpp
+ )
+endif()
+
+if (M4RI_FOUND)
+ include_directories(${M4RI_INCLUDE_DIRS})
+
+ SET(cryptoms_lib_files ${cryptoms_lib_files} toplevelgauss.cpp)
+ SET(cryptoms_lib_link_libs ${cryptoms_lib_link_libs} ${M4RI_LIBRARIES})
+endif (M4RI_FOUND)
+
+if (SQLITE3_FOUND AND STATS)
+ SET(cryptoms_lib_files ${cryptoms_lib_files}
+ sqlitestats.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/sql_tablestructure.cpp
+ )
+ SET(cryptoms_lib_link_libs ${cryptoms_lib_link_libs} ${SQLITE3_LIBRARIES})
+endif ()
+
+if (NOT STATICCOMPILE)
+ add_library(libcryptominisat5 SHARED
+ ${cryptoms_lib_files}
+ cryptominisat.cpp
+ )
+else()
+ add_library(libcryptominisat5 STATIC
+ ${cryptoms_lib_files}
+ cryptominisat.cpp
+ )
+endif()
+GENERATE_EXPORT_HEADER(libcryptominisat5
+ BASE_NAME libcryptominisat5
+ #EXPORT_MACRO_NAME libcryptominisat5_EXPORT
+ #EXPORT_FILE_NAME MyLibrary_Export.h
+ #STATIC_DEFINE MyLibrary_BUILT_AS_STATIC
+)
+
+if (SQLITE3_FOUND AND STATS)
+ add_dependencies(libcryptominisat5
+ tablestruct
+ )
+endif()
+
+# indicate that we depend on pthread, and compile in the actual library
+target_link_libraries(libcryptominisat5
+ LINK_PUBLIC ${cryptoms_lib_link_libs}
+ LINK_PUBLIC ${CMAKE_THREAD_LIBS_INIT}
+)
+
+if (NOT WIN32)
+ set_target_properties(libcryptominisat5 PROPERTIES
+ OUTPUT_NAME cryptominisat5
+ PUBLIC_HEADER "${cryptominisat5_public_headers}"
+ VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ )
+else()
+ set_target_properties(libcryptominisat5 PROPERTIES
+ OUTPUT_NAME cryptominisat5win
+ PUBLIC_HEADER "${cryptominisat5_public_headers}"
+ VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ )
+endif()
+
+if (IPASIR)
+ if (NOT STATICCOMPILE)
+ add_library(ipasircryptominisat5 SHARED
+ ipasir.cpp
+ )
+ else()
+ add_library(ipasircryptominisat5 STATIC
+ ipasir.cpp
+ )
+ endif()
+ target_link_libraries(ipasircryptominisat5
+ LINK_PUBLIC ${cryptoms_lib_link_libs} libcryptominisat5
+ )
+ set_target_properties(ipasircryptominisat5 PROPERTIES
+ OUTPUT_NAME ipasircryptominisat5
+ PUBLIC_HEADER "${cryptominisat5_public_headers}"
+ VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ )
+ install(TARGETS ipasircryptominisat5
+ EXPORT ${CRYPTOMINISAT5_EXPORT_NAME}
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cryptominisat5"
+ )
+
+endif()
+
+cmsat_add_public_header(libcryptominisat5 ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5/cryptominisat_c.h )
+cmsat_add_public_header(libcryptominisat5 ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5/cryptominisat.h )
+cmsat_add_public_header(libcryptominisat5 ${CMAKE_CURRENT_BINARY_DIR}/cryptominisat5/solvertypesmini.h )
+cmsat_add_public_header(libcryptominisat5 ${CMAKE_CURRENT_SOURCE_DIR}/dimacsparser.h )
+cmsat_add_public_header(libcryptominisat5 ${CMAKE_CURRENT_SOURCE_DIR}/streambuffer.h )
+
+# -----------------------------------------------------------------------------
+# Copy public headers into build directory include directory.
+# The cryptominisat5Config.cmake we generate in the build directory depends on
+# this.
+# -----------------------------------------------------------------------------
+set(HEADER_DEST "${PROJECT_BINARY_DIR}/include/cryptominisat5")
+add_custom_target(CopyPublicHeaders ALL)
+get_target_property(cryptominisat5_public_headers libcryptominisat5 PUBLIC_HEADER)
+foreach(public_header ${cryptominisat5_public_headers})
+ get_filename_component(HEADER_NAME ${public_header} NAME)
+ add_custom_command(TARGET CopyPublicHeaders PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory
+ "${HEADER_DEST}"
+ COMMAND ${CMAKE_COMMAND} -E echo
+ "Copying ${HEADER_NAME} to ${HEADER_DEST}"
+ COMMAND ${CMAKE_COMMAND} -E
+ copy_if_different
+ ${public_header}
+ "${HEADER_DEST}"
+ )
+endforeach()
+
+install(TARGETS libcryptominisat5
+ EXPORT ${CRYPTOMINISAT5_EXPORT_NAME}
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cryptominisat5"
+)
+
+if (NOT ONLY_SIMPLE)
+ add_executable(cryptominisat5
+ main.cpp
+ main_exe.cpp
+ signalcode.cpp
+ )
+endif()
+
+if (EMSCIPTEN)
+add_executable(cryptominisat5_simple
+ main_emscripten.cpp
+)
+
+set_target_properties(
+ cryptominisat5_simple PROPERTIES LINK_FLAGS "-s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -s LINKABLE=1 -s EXPORT_ALL=1"
+)
+
+SET_SOURCE_FILES_PROPERTIES(main_emscripten.cpp
+ PROPERTIES COMPILE_FLAGS "-s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -s LINKABLE=1 -s EXPORT_ALL=1"
+)
+
+else()
+add_executable(cryptominisat5_simple
+ main_simple.cpp
+)
+endif()
+
+set(cryptoms_exec_link_libs
+ libcryptominisat5
+)
+
+IF (ZLIB_FOUND)
+ SET(cryptoms_exec_link_libs ${cryptoms_exec_link_libs} ${ZLIB_LIBRARY})
+ENDIF()
+
+if (STATICCOMPILE)
+ SET_TARGET_PROPERTIES(cryptominisat5_simple PROPERTIES LINK_SEARCH_START_STATIC 1)
+endif()
+set_target_properties(cryptominisat5_simple PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}
+ INSTALL_RPATH_USE_LINK_PATH TRUE)
+if (STATICCOMPILE)
+ SET_TARGET_PROPERTIES(cryptominisat5_simple PROPERTIES LINK_SEARCH_END_STATIC 1)
+endif()
+target_link_libraries(cryptominisat5_simple
+ ${cryptoms_exec_link_libs}
+)
+install(TARGETS cryptominisat5_simple
+ EXPORT ${CRYPTOMINISAT5_EXPORT_NAME}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+SET(CPACK_PACKAGE_EXECUTABLES "cryptominisat5_simple")
+
+if (NOT ONLY_SIMPLE)
+ if (STATICCOMPILE)
+ SET_TARGET_PROPERTIES(cryptominisat5 PROPERTIES LINK_SEARCH_START_STATIC 1)
+ endif()
+ set_target_properties(cryptominisat5 PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}
+ INSTALL_RPATH_USE_LINK_PATH TRUE)
+ if (STATICCOMPILE)
+ SET_TARGET_PROPERTIES(cryptominisat5 PROPERTIES LINK_SEARCH_END_STATIC 1)
+ endif()
+ target_link_libraries(cryptominisat5
+ ${cryptoms_exec_link_libs}
+ ${Boost_LIBRARIES}
+ )
+ install(TARGETS cryptominisat5
+ EXPORT ${CRYPTOMINISAT5_EXPORT_NAME}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+ SET(CPACK_PACKAGE_EXECUTABLES "cryptominisat5")
+endif()
+
+
+if (FEEDBACKFUZZ)
+ add_executable(cms_feedback_fuzz
+ fuzz.cpp
+ libfuzz/FuzzerCrossOver.cpp
+ libfuzz/FuzzerDriver.cpp
+ libfuzz/FuzzerInterface.cpp
+ libfuzz/FuzzerIO.cpp
+ libfuzz/FuzzerLoop.cpp
+ libfuzz/FuzzerMain.cpp
+ libfuzz/FuzzerMutate.cpp
+ libfuzz/FuzzerSanitizerOptions.cpp
+ libfuzz/FuzzerSHA1.cpp
+ libfuzz/FuzzerTraceState.cpp
+ libfuzz/FuzzerUtil.cpp
+ )
+ target_link_libraries(cms_feedback_fuzz
+ ${cryptoms_exec_link_libs}
+ )
+
+ set_target_properties(cms_feedback_fuzz PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+endif()
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.cpp b/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.cpp
new file mode 100644
index 000000000..dba644ad8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.cpp
@@ -0,0 +1,886 @@
+/******************************************
+Copyright (c) 2012 Cheng-Shen Han
+Copyright (c) 2012 Jie-Hong Roland Jiang
+Copyright (c) 2018 Mate Soos
+
+For more information, see " When Boolean Satisfiability Meets Gaussian
+Elimination in a Simplex Way." by Cheng-Shen Han and Jie-Hong Roland Jiang
+in CAV (Computer Aided Verification), 2012: 410-426
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "EGaussian.h"
+
+#include <algorithm>
+#include <iomanip>
+#include <iostream>
+#include <set>
+
+#include "EGaussian.h"
+#include "clause.h"
+#include "clausecleaner.h"
+#include "datasync.h"
+#include "propby.h"
+#include "solver.h"
+#include "time_mem.h"
+#include "varreplacer.h"
+#include "xorfinder.h"
+
+using std::cout;
+using std::endl;
+using std::ostream;
+using std::set;
+
+#ifdef VERBOSE_DEBUG
+#include <iterator>
+#endif
+
+using namespace CMSat;
+
+// if variable is not in Gaussian matrix , assiag unknown column
+static const uint32_t unassigned_col = std::numeric_limits<uint32_t>::max();
+
+EGaussian::EGaussian(Solver* _solver, const GaussConf& _config, const uint32_t _matrix_no,
+ const vector<Xor>& _xorclauses)
+ : solver(_solver), config(_config), matrix_no(_matrix_no), xorclauses(_xorclauses) {
+ uint64_t num_unfound = 0;
+ vector<Xor> xors;
+ for (Xor& x : xorclauses) {
+ xors.push_back(x);
+ }
+ for (Xor& x : xors) {
+ x.sort();
+ }
+ std::sort(xors.begin(), xors.end());
+
+ //Incorrect ones ones
+ for (Xor& x : xors) {
+ for (uint32_t v : x) {
+ if (v > 165) {
+ num_unfound++;
+ if (solver->conf.verbosity >= 2) {
+ cout << "c NOT OK: " << x << endl;
+ }
+ break;
+ }
+ }
+ }
+
+ if (solver->conf.verbosity >= 2) {
+ cout << "c num_unfound xor: " << num_unfound << endl;
+ }
+
+ //GOOD ones
+ for (Xor& x : xors) {
+ bool must_print = true;
+ for (uint32_t v : x) {
+ if (v > 165) {
+ must_print = false;
+ break;
+ }
+ }
+ if (must_print) {
+ if (solver->conf.verbosity >= 2) {
+ cout << "c --- OK: " << x << endl;
+ }
+ }
+ }
+}
+
+EGaussian::~EGaussian() {
+ for (uint32_t i = 0; i < clauses_toclear.size(); i++) {
+ solver->cl_alloc.clauseFree(clauses_toclear[i].first);
+ }
+}
+
+void EGaussian::canceling(const uint32_t sublevel) {
+ uint32_t a = 0;
+ for (int i = clauses_toclear.size() - 1; i >= 0 && clauses_toclear[i].second > sublevel; i--) {
+ solver->cl_alloc.clauseFree(clauses_toclear[i].first);
+ a++;
+ }
+ clauses_toclear.resize(clauses_toclear.size() - a);
+
+ PackedMatrix::iterator rowIt = clause_state.beginMatrix();
+ (*rowIt).setZero(); // reset this row all zero
+}
+
+struct HeapSorter {
+ explicit HeapSorter(vector<double>& _activities) : activities(_activities) {
+ }
+
+ // higher activity first
+ bool operator()(uint32_t a, uint32_t b) {
+ return activities[a] < activities[b];
+ }
+
+ const vector<double>& activities;
+};
+
+uint32_t EGaussian::select_columnorder(matrixset& origMat) {
+ var_to_col.clear();
+ var_to_col.resize(solver->nVars(), unassigned_col);
+ vector<uint32_t> vars_needed;
+ uint32_t largest_used_var = 0;
+
+ for (const Xor& x : xorclauses) {
+ for (const uint32_t v : x) {
+ assert(solver->value(v) == l_Undef);
+ if (var_to_col[v] == unassigned_col) {
+ vars_needed.push_back(v);
+ var_to_col[v] = unassigned_col - 1;
+ ;
+ largest_used_var = std::max(largest_used_var, v);
+ }
+ }
+ }
+
+ if (vars_needed.size() >= std::numeric_limits<uint32_t>::max() / 2 - 1) {
+ if (solver->conf.verbosity) {
+ cout << "c Matrix has too many columns, exiting select_columnorder" << endl;
+ }
+
+ return 0;
+ }
+ if (xorclauses.size() >= std::numeric_limits<uint32_t>::max() / 2 - 1) {
+ if (solver->conf.verbosity) {
+ cout << "c Matrix has too many rows, exiting select_columnorder" << endl;
+ }
+ return 0;
+ }
+ var_to_col.resize(largest_used_var + 1);
+
+ origMat.col_to_var.clear();
+ std::sort(vars_needed.begin(), vars_needed.end(), HeapSorter(solver->var_act_vsids));
+
+ for (uint32_t v : vars_needed) {
+ assert(var_to_col[v] == unassigned_col - 1);
+ origMat.col_to_var.push_back(v);
+ var_to_col[v] = origMat.col_to_var.size() - 1;
+ }
+
+ // for the ones that were not in the order_heap, but are marked in var_to_col
+ for (uint32_t v = 0; v != var_to_col.size(); v++) {
+ if (var_to_col[v] == unassigned_col - 1) {
+ // assert(false && "order_heap MUST be complete!");
+ origMat.col_to_var.push_back(v);
+ var_to_col[v] = origMat.col_to_var.size() - 1;
+ }
+ }
+
+#ifdef VERBOSE_DEBUG_MORE
+ cout << "(" << matrix_no << ") num_xorclauses: " << num_xorclauses << endl;
+ cout << "(" << matrix_no << ") col_to_var: ";
+ std::copy(origMat.col_to_var.begin(), origMat.col_to_var.end(),
+ std::ostream_iterator<uint32_t>(cout, ","));
+ cout << endl;
+ cout << "origMat.num_cols:" << origMat.num_cols << endl;
+ cout << "col is set:" << endl;
+ std::copy(origMat.col_is_set.begin(), origMat.col_is_set.end(),
+ std::ostream_iterator<char>(cout, ","));
+#endif
+
+ return xorclauses.size();
+}
+
+void EGaussian::fill_matrix(matrixset& origMat) {
+ var_to_col.clear();
+
+ // decide which variable in matrix column and the number of rows
+ origMat.num_rows = select_columnorder(origMat);
+ origMat.num_cols = origMat.col_to_var.size();
+ if (origMat.num_rows == 0 || origMat.num_cols == 0) {
+ return;
+ }
+ origMat.matrix.resize(origMat.num_rows, origMat.num_cols); // initial gaussian matrix
+
+ uint32_t matrix_row = 0;
+ for (uint32_t i = 0; i != xorclauses.size(); i++) {
+ const Xor& c = xorclauses[i];
+ origMat.matrix.getMatrixAt(matrix_row).set(c, var_to_col, origMat.num_cols);
+ matrix_row++;
+ }
+ assert(origMat.num_rows == matrix_row);
+
+ // reset gaussian matrixt condition
+ GasVar_state.clear(); // reset variable state
+ GasVar_state.growTo(solver->nVars(), non_basic_var); // init varaible state
+ origMat.nb_rows.clear(); // clear non-basic
+
+ // delete gauss watch list for this matrix
+ for (size_t ii = 0; ii < solver->gwatches.size(); ii++) {
+ clear_gwatches(ii);
+ }
+ clause_state.resize(1, origMat.num_rows);
+ PackedMatrix::iterator rowIt = clause_state.beginMatrix();
+ (*rowIt).setZero(); // reset this row all zero
+ // print_matrix(origMat);
+}
+
+void EGaussian::clear_gwatches(const uint32_t var) {
+ GaussWatched* i = solver->gwatches[var].begin();
+ GaussWatched* j = i;
+ for(GaussWatched* end = solver->gwatches[var].end(); i != end; i++) {
+ if (i->matrix_num != matrix_no) {
+ *j++ = *i;
+ }
+ }
+ solver->gwatches[var].shrink(i-j);
+}
+
+bool EGaussian::clean_xors()
+{
+ for(Xor& x: xorclauses) {
+ solver->clean_xor_vars_no_prop(x.get_vars(), x.rhs);
+ }
+ XorFinder f(NULL, solver);
+ if (!f.add_new_truths_from_xors(xorclauses))
+ return false;
+
+ return true;
+}
+
+bool EGaussian::full_init(bool& created) {
+ assert(solver->ok);
+ assert(solver->decisionLevel() == 0);
+ bool do_again_gauss = true;
+ created = true;
+ if (!clean_xors()) {
+ return false;
+ }
+
+ while (do_again_gauss) { // need to chekc
+ do_again_gauss = false;
+ solver->sum_initEnGauss++; // to gather statistics
+
+ if (!solver->clauseCleaner->clean_xor_clauses(xorclauses)) {
+ return false;
+ }
+
+ fill_matrix(matrix);
+ if (matrix.num_rows == 0 || matrix.num_cols == 0) {
+ created = false;
+ return solver->okay();
+ }
+
+ eliminate(matrix); // gauss eliminate algorithm
+
+ // find some row already true false, and insert watch list
+ gret ret = adjust_matrix(matrix);
+
+ switch (ret) {
+ case gret::confl:
+ solver->ok = false;
+ solver->sum_Enconflict++;
+ return false;
+ break;
+ case gret::prop:
+ case gret::unit_prop:
+ do_again_gauss = true;
+ solver->sum_Enpropagate++;
+
+ assert(solver->decisionLevel() == 0);
+ solver->ok = (solver->propagate<false>().isNULL());
+ if (!solver->ok) {
+ return false;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (solver->conf.verbosity >= 2) {
+ cout << "c [gauss] initialised matrix " << matrix_no << endl;
+ }
+
+ // std::cout << cpuTime() - GaussConstructTime << " t";
+ return true;
+}
+
+void EGaussian::eliminate(matrixset& m) {
+ uint32_t i = 0;
+ uint32_t j = 0;
+ PackedMatrix::iterator end = m.matrix.beginMatrix() + m.num_rows;
+ PackedMatrix::iterator rowIt = m.matrix.beginMatrix();
+
+ while (i != m.num_rows && j != m.num_cols) { // Gauss-Jordan Elimination
+ PackedMatrix::iterator row_with_1_in_col = rowIt;
+
+ //Find first "1" in column.
+ for (; row_with_1_in_col != end; ++row_with_1_in_col) {
+ if ((*row_with_1_in_col)[j]) {
+ break;
+ }
+ }
+
+ //We have found a "1" in this column
+ if (row_with_1_in_col != end) {
+ // swap row row_with_1_in_col and I
+ if (row_with_1_in_col != rowIt) {
+ (*rowIt).swapBoth(*row_with_1_in_col);
+ }
+
+ // XOR into *all* rows that have a "1" in col J
+ // Since we XOR into *all*, this is Gauss-Jordan
+ for (PackedMatrix::iterator k_row = m.matrix.beginMatrix()
+ ; k_row != end
+ ; ++k_row
+ ) {
+ // xor rows K and I
+ if (k_row != rowIt) {
+ if ((*k_row)[j]) {
+ (*k_row).xorBoth(*rowIt);
+ }
+ }
+ }
+ i++;
+ ++rowIt;
+ GasVar_state[m.col_to_var[j]] = basic_var; // this column is basic variable
+ // printf("basic var:%d n",m.col_to_var[j] + 1);
+ }
+ j++;
+ }
+ // print_matrix(m);
+}
+
+gret EGaussian::adjust_matrix(matrixset& m) {
+ assert(solver->decisionLevel() == 0);
+
+ PackedMatrix::iterator end = m.matrix.beginMatrix() + m.num_rows;
+ PackedMatrix::iterator rowIt = m.matrix.beginMatrix();
+ uint32_t row_id = 0; // row index
+ uint32_t nb_var = 0; // non-basic variable
+ bool xorEqualFalse; // xor =
+ uint32_t adjust_zero = 0; // elimination row
+
+ while (rowIt != end) {
+ const uint32_t popcnt = (*rowIt).find_watchVar(tmp_clause, matrix.col_to_var, GasVar_state, nb_var);
+ switch (popcnt) {
+
+ //Conflict potentially
+ case 0:
+ // printf("%d:Warring: this row is all zero in adjust matrix n",row_id);
+ adjust_zero++; // information
+ if ((*rowIt).rhs()) { // conflict
+ // printf("%d:Warring: this row is conflic in adjust matrix!!!",row_id);
+ return gret::confl;
+ }
+ break;
+
+ //Normal propagation
+ case 1:
+ {
+ // printf("%d:This row only one variable, need to propogation!!!! in adjust matrix
+ // n",row_id);
+
+ xorEqualFalse = !m.matrix.getMatrixAt(row_id).rhs();
+ tmp_clause[0] = Lit(tmp_clause[0].var(), xorEqualFalse);
+ assert(solver->value(tmp_clause[0].var()) == l_Undef);
+ solver->enqueue(tmp_clause[0]); // propagation
+
+ //adjusting
+ (*rowIt).setZero(); // reset this row all zero
+ m.nb_rows.push(std::numeric_limits<uint32_t>::max()); // delete non basic value in this row
+ GasVar_state[tmp_clause[0].var()] = non_basic_var; // delete basic value in this row
+
+ solver->sum_initUnit++;
+ return gret::unit_prop;
+ }
+
+ //Binary XOR
+ case 2: { // this row have to variable
+ // printf("%d:This row have two variable!!!! in adjust matrix n",row_id);
+ xorEqualFalse = !m.matrix.getMatrixAt(row_id).rhs();
+
+ tmp_clause[0] = tmp_clause[0].unsign();
+ tmp_clause[1] = tmp_clause[1].unsign();
+ solver->ok = solver->add_xor_clause_inter(tmp_clause, !xorEqualFalse, true);
+ release_assert(solver->ok);
+
+ (*rowIt).setZero(); // reset this row all zero
+ m.nb_rows.push(std::numeric_limits<uint32_t>::max()); // delete non basic value in this row
+ GasVar_state[tmp_clause[0].var()] = non_basic_var; // delete basic value in this row
+ solver->sum_initTwo++;
+ break;
+ }
+
+ default: // need to update watch list
+ // printf("%d:need to update watch list n",row_id);
+ assert(nb_var != std::numeric_limits<uint32_t>::max());
+
+ // insert watch list
+ solver->gwatches[tmp_clause[0].var()].push(
+ GaussWatched(row_id, matrix_no)); // insert basic variable
+ solver->gwatches[nb_var].push(
+ GaussWatched(row_id, matrix_no)); // insert non-basic variable
+ m.nb_rows.push(nb_var); // record in this row non_basic variable
+ break;
+ }
+ ++rowIt;
+ row_id++;
+ }
+ // printf("DD:nb_rows:%d %d %d n",m.nb_rows.size() , row_id - adjust_zero , adjust_zero);
+ assert(m.nb_rows.size() == row_id - adjust_zero);
+
+ m.matrix.resizeNumRows(row_id - adjust_zero);
+ m.num_rows = row_id - adjust_zero;
+
+ // printf("DD: adjust number of Row:%d n",num_row);
+ // printf("dd:matrix by EGaussian::adjust_matrix n");
+ // print_matrix(m);
+ // printf(" adjust_zero %d n",adjust_zero);
+ // printf("%d t%d t",m.num_rows , m.num_cols);
+ return gret::nothing;
+}
+
+inline void EGaussian::propagation_twoclause() {
+ // printf("DD:%d %d n", solver->qhead ,solver->trail.size());
+ // printf("CC %d. %d %d n", solver->qhead , solver->trail.size() , solver->decisionLevel());
+
+ Lit lit1 = tmp_clause[0];
+ Lit lit2 = tmp_clause[1];
+ solver->attach_bin_clause(lit1, lit2, true, false);
+ // solver->dataSync->signalNewBinClause(lit1, lit2);
+
+ lit1 = ~lit1;
+ lit2 = ~lit2;
+ solver->attach_bin_clause(lit1, lit2, true, false);
+ // solver->dataSync->signalNewBinClause(lit1, lit2);
+
+ lit1 = ~lit1;
+ lit2 = ~lit2;
+ solver->enqueue(lit1, PropBy(lit2, true));
+}
+
+inline void EGaussian::conflict_twoclause(PropBy& confl) {
+ // assert(tmp_clause.size() == 2);
+ // printf("dd %d:This row is conflict two n",row_n);
+ Lit lit1 = tmp_clause[0];
+ Lit lit2 = tmp_clause[1];
+
+ solver->attach_bin_clause(lit1, lit2, true, false);
+ // solver->dataSync->signalNewBinClause(lit1, lit2);
+
+ lit1 = ~lit1;
+ lit2 = ~lit2;
+ solver->attach_bin_clause(lit1, lit2, true, false);
+ // solver->dataSync->signalNewBinClause(lit1, lit2);
+
+ lit1 = ~lit1;
+ lit2 = ~lit2;
+ confl = PropBy(lit1, true);
+ solver->failBinLit = lit2;
+}
+
+// Delete this row because we have already add to xor clause, nothing to do anymore
+inline void EGaussian::delete_gausswatch(const bool orig_basic, const uint32_t row_n) {
+ if (orig_basic) {
+ // clear nonbasic value watch list
+ bool debug_find = false;
+ vec<GaussWatched>& ws_t = solver->gwatches[matrix.nb_rows[row_n]];
+ for (int32_t tmpi = ws_t.size() - 1; tmpi >= 0; tmpi--) {
+ if (ws_t[tmpi].row_id == row_n
+ && ws_t[tmpi].matrix_num == matrix_no
+ ) {
+ ws_t[tmpi] = ws_t.last();
+ ws_t.shrink(1);
+ debug_find = true;
+ break;
+ }
+ }
+ assert(debug_find);
+ } else {
+ clear_gwatches(tmp_clause[0].var());
+ }
+}
+
+bool EGaussian::find_truths2(const GaussWatched* i, GaussWatched*& j, uint32_t p,
+ const uint32_t row_n, GaussQData& gqd
+) {
+ // printf("dd Watch variable : %d , Wathch row num %d n", p , row_n);
+
+ uint32_t nb_var = 0; // new nobasic variable
+ bool orig_basic = false; // check invoked variable is basic or non-basic
+
+ gqd.e_var = std::numeric_limits<uint32_t>::max();
+ gqd.e_row_n = std::numeric_limits<uint32_t>::max();
+ gqd.do_eliminate = false;
+ PackedMatrix::iterator rowIt =
+ matrix.matrix.beginMatrix() + row_n; // gaussian watch invoke row
+ PackedMatrix::iterator clauseIt = clause_state.beginMatrix();
+
+ // if this clause is alreadt true
+ if ((*clauseIt)[row_n]) {
+ *j++ = *i; // store watch list
+ return true;
+ }
+
+ if (GasVar_state[p]) { // swap basic and non_basic variable
+ orig_basic = true;
+ GasVar_state[matrix.nb_rows[row_n]] = basic_var;
+ GasVar_state[p] = non_basic_var;
+ }
+
+ const gret ret = (*rowIt).propGause(tmp_clause, solver->assigns, matrix.col_to_var, GasVar_state, nb_var, var_to_col[p]);
+
+ switch (ret) {
+ case gret::confl: {
+ // printf("dd %d:This row is conflict %d n",row_n , solver->level[p] );
+ if (tmp_clause.size() >= gqd.conflict_size_gauss) { // choose perfect conflict clause
+ *j++ = *i; // we need to leave this
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+
+ return true;
+ }
+
+ // binary conflict
+ if (tmp_clause.size() == 2) {
+ // printf("%d:This row is conflict two n",row_n);
+ delete_gausswatch(orig_basic, row_n); // delete watch list
+ GasVar_state[tmp_clause[0].var()] = non_basic_var; // delete value state;
+ GasVar_state[tmp_clause[1].var()] = non_basic_var;
+ matrix.nb_rows[row_n] =
+ std::numeric_limits<uint32_t>::max(); // delete non basic value in this row
+ (*rowIt).setZero(); // reset this row all zero
+
+ conflict_twoclause(gqd.confl); // get two conflict clause
+ solver->qhead = solver->trail.size(); // quick break gaussian elimination
+ solver->gqhead = solver->trail.size();
+
+ // for tell outside solver
+ gqd.ret_gauss = 1; // gaussian matrix is unit_conflict
+ gqd.conflict_size_gauss = 2;
+ solver->sum_Enunit++;
+ return false;
+ } else {
+ // long conflict clause
+ *j++ = *i;
+ gqd.conflict_clause_gauss = tmp_clause; // choose better conflice clause
+ gqd.ret_gauss = 0; // gaussian matrix is conflict
+ gqd.conflict_size_gauss = tmp_clause.size();
+ gqd.xorEqualFalse_gauss = !matrix.matrix.getMatrixAt(row_n).rhs();
+
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+
+ return true;
+ }
+ }
+
+ // propagation
+ case gret::prop: {
+ // printf("%d:This row is propagation : level: %d n",row_n, solver->level[p]);
+
+ // Gaussian matrix is already conflict
+ if (gqd.ret_gauss == 0) {
+ *j++ = *i; // store watch list
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+ return true;
+ }
+
+ // propagation
+ *j++ = *i; // store watch list
+ if (solver->decisionLevel() == 0) {
+ if (tmp_clause.size() == 2) {
+ propagation_twoclause();
+ } else {
+ solver->enqueue(tmp_clause[0]);
+ }
+
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+
+ gqd.ret_gauss = 3; // gaussian matrix is unit_propagation
+ solver->gqhead = solver->qhead; // quick break gaussian elimination
+ (*clauseIt).setBit(row_n); // this clause arleady sat
+ return false;
+ } else {
+ if (tmp_clause.size() == 2) {
+ propagation_twoclause();
+ } else {
+ Clause* cla = solver->cl_alloc.Clause_new(
+ tmp_clause,
+ solver->sumConflicts
+ #ifdef STATS_NEEDED
+ , solver->clauseID++
+ #endif
+ );
+ cla->set_gauss_temp_cl();
+ const ClOffset offs = solver->cl_alloc.get_offset(cla);
+ clauses_toclear.push_back(std::make_pair(offs, solver->trail.size() - 1));
+ assert(!cla->freed());
+ assert(solver->value((*cla)[0].var()) == l_Undef);
+ solver->enqueue((*cla)[0], PropBy(offs));
+ }
+ gqd.ret_gauss = 2; // gaussian matrix is propagation
+ }
+
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+
+ (*clauseIt).setBit(row_n); // this clause arleady sat
+ return true;
+ }
+ case gret::nothing_fnewwatch: // find new watch list
+ // printf("%d:This row is find new watch:%d => orig %d p:%d n",row_n ,
+ // nb_var,orig_basic , p);
+
+ // Gaussian matrix is already conflict
+ if (gqd.ret_gauss == 0) {
+ *j++ = *i; // store watch list
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+ return true;
+ }
+ assert(nb_var != std::numeric_limits<uint32_t>::max());
+ if (orig_basic) {
+ /// clear watchlist, because only one basic value in watchlist
+ clear_gwatches(nb_var);
+ }
+ // update gausWatch list
+ solver->gwatches[nb_var].push(GaussWatched(row_n, matrix_no));
+
+ if (!orig_basic) {
+ matrix.nb_rows[row_n] = nb_var; // update in this row non_basic variable
+ return true;
+ }
+ GasVar_state[matrix.nb_rows[row_n]] =
+ non_basic_var; // recover non_basic variable
+ GasVar_state[nb_var] = basic_var; // set basic variable
+ gqd.e_var = nb_var; // store the eliminate valuable
+ gqd.e_row_n = row_n;
+ break;
+ case gret::nothing: // this row already treu
+ // printf("%d:This row is nothing( maybe already true) n",row_n);
+ *j++ = *i; // store watch list
+ if (orig_basic) { // recover
+ GasVar_state[matrix.nb_rows[row_n]] = non_basic_var;
+ GasVar_state[p] = basic_var;
+ }
+ (*clauseIt).setBit(row_n); // this clause arleady sat
+ return true;
+ default:
+ assert(false); // can not here
+ break;
+ }
+ /* assert(e_var != std::numeric_limits<uint32_t>::max());
+ assert(e_row_n != std::numeric_limits<uint32_t>::max());
+ assert(orig_basic);
+ assert(ret == 5 );
+ // assert(solver->gwatches[e_var].size() == 1); <-- definietely wrong, more than one matrix!
+ */
+ gqd.do_eliminate = true;
+ return true;
+}
+
+void EGaussian::eliminate_col2(uint32_t p, GaussQData& gqd) {
+ // cout << "eliminate this column :" << e_var << " " << p << " " << e_row_n << endl;
+ PackedMatrix::iterator this_row = matrix.matrix.beginMatrix() + gqd.e_row_n;
+ PackedMatrix::iterator rowI = matrix.matrix.beginMatrix();
+ PackedMatrix::iterator end = matrix.matrix.endMatrix();
+ uint32_t e_col = var_to_col[gqd.e_var];
+ uint32_t ori_nb = 0, ori_nb_col = 0;
+ uint32_t nb_var = 0;
+ uint32_t num_row = 0; // row inde
+ PackedMatrix::iterator clauseIt = clause_state.beginMatrix();
+
+ // assert(ret_gauss == 4); // check this matrix is nothing
+ // assert(solver->qhead == solver->trail.size() ) ;
+
+ while (rowI != end) {
+ if ((*rowI)[e_col] && this_row != rowI) {
+ // detect orignal non basic watch list change or not
+ ori_nb = matrix.nb_rows[num_row];
+ ori_nb_col = var_to_col[ori_nb];
+ assert((*rowI)[ori_nb_col]);
+
+ (*rowI).xorBoth(*this_row); // xor eliminate
+
+ if (!(*rowI)[ori_nb_col]) { // orignal non basic value is eliminate
+ if (ori_nb != gqd.e_var) { // delelte orignal non basic value in wathc list
+ delete_gausswatch(true, num_row);
+ }
+
+ const gret ret = (*rowI).propGause(tmp_clause,
+ solver->assigns, matrix.col_to_var,
+ GasVar_state, nb_var, ori_nb_col);
+
+ switch (ret) {
+ case gret::confl: {
+ // printf("%d:This row is conflict in eliminate col n",num_row);
+ if (tmp_clause.size() >= gqd.conflict_size_gauss || gqd.ret_gauss == 3) {
+ solver->gwatches[p].push(GaussWatched(num_row, matrix_no));
+
+ // update in this row non_basic variable
+ matrix.nb_rows[num_row] = p;
+ break;
+ }
+ gqd.conflict_size_gauss = tmp_clause.size();
+ if (gqd.conflict_size_gauss == 2) {
+ // printf("%d:This row is conflict two in eliminate col n",num_row);
+ delete_gausswatch(false, num_row); // delete gauss matrix
+ assert(GasVar_state[tmp_clause[0].var()] == basic_var);
+ assert(GasVar_state[tmp_clause[1].var()] == non_basic_var);
+
+ // delete value state;
+ GasVar_state[tmp_clause[0].var()] = non_basic_var;
+
+ // delete non basic value in this row
+ matrix.nb_rows[num_row] = std::numeric_limits<uint32_t>::max();
+ (*rowI).setZero();
+
+ conflict_twoclause(gqd.confl);
+
+ // quick break gaussian elimination
+ solver->qhead = solver->trail.size();
+ solver->gqhead = solver->trail.size();
+
+ // unit_conflict
+ gqd.ret_gauss = 1;
+ solver->sum_Enunit++;
+
+ } else {
+ solver->gwatches[p].push(
+ GaussWatched(num_row, matrix_no)); // update gausWatch list
+ matrix.nb_rows[num_row] =
+ p; // // update in this row non_basic variable
+
+ // for tell outside solver
+ gqd.conflict_clause_gauss = tmp_clause; // choose better conflice clause
+ gqd.ret_gauss = 0; // gaussian matrix is conflict
+ gqd.conflict_size_gauss = tmp_clause.size();
+ gqd.xorEqualFalse_gauss = !matrix.matrix.getMatrixAt(num_row).rhs();
+
+ // If conflict is happened in eliminaiton conflict, then we only return
+ // immediately
+ solver->qhead = solver->trail.size();
+ solver->gqhead = solver->trail.size();
+ }
+ break;
+ }
+ case gret::prop: {
+ // printf("%d:This row is propagation in eliminate col n",num_row);
+
+ // update no_basic_value?
+ if (gqd.ret_gauss == 1 || gqd.ret_gauss == 0 ||
+ gqd.ret_gauss == 3
+ ) {
+ solver->gwatches[p].push(GaussWatched(num_row, matrix_no));
+ matrix.nb_rows[num_row] = p;
+ break;
+ }
+ // update no_basic information
+ solver->gwatches[p].push(GaussWatched(num_row, matrix_no));
+ matrix.nb_rows[num_row] = p;
+
+ if (solver->decisionLevel() == 0) {
+ if (tmp_clause.size() == 2) {
+ propagation_twoclause();
+ } else {
+ solver->enqueue(tmp_clause[0]);
+ }
+ gqd.ret_gauss = 3; // unit_propagation
+ } else {
+ if (tmp_clause.size() == 2) {
+ propagation_twoclause();
+ } else {
+ Clause* cla = solver->cl_alloc.Clause_new(
+ tmp_clause,
+ solver->sumConflicts
+ #ifdef STATS_NEEDED
+ , solver->clauseID++
+ #endif
+ );
+ cla->set_gauss_temp_cl();
+ const ClOffset offs = solver->cl_alloc.get_offset(cla);
+ clauses_toclear.push_back(std::make_pair(offs, solver->trail.size() - 1));
+ assert(!cla->freed());
+ assert(solver->value((*cla)[0].var()) == l_Undef);
+ solver->enqueue((*cla)[0], PropBy(offs));
+ }
+ gqd.ret_gauss = 2;
+ (*clauseIt).setBit(num_row); // this clause arleady sat
+ }
+ break;
+ }
+ case gret::nothing_fnewwatch: // find new watch list
+ // printf("%d::This row find new watch list :%d in eliminate col
+ // n",num_row,nb_var);
+
+ solver->gwatches[nb_var].push(GaussWatched(num_row, matrix_no));
+ matrix.nb_rows[num_row] = nb_var;
+ break;
+ case gret::nothing: // this row already tre
+ // printf("%d:This row is nothing( maybe already true) in eliminate col
+ // n",num_row);
+
+ solver->gwatches[p].push(GaussWatched(num_row, matrix_no));
+ matrix.nb_rows[num_row] = p; // update in this row non_basic variable
+ (*clauseIt).setBit(num_row); // this clause arleady sat
+ break;
+ default:
+ // can not here
+ assert(false);
+ break;
+ }
+ }
+ }
+ ++rowI;
+ num_row++;
+ }
+
+ // Debug_funtion();
+}
+
+void EGaussian::print_matrix(matrixset& m) const {
+ uint32_t row = 0;
+ for (PackedMatrix::iterator it = m.matrix.beginMatrix(); it != m.matrix.endMatrix();
+ ++it, row++) {
+ cout << *it << " -- row:" << row;
+ if (row >= m.num_rows) {
+ cout << " (considered past the end)";
+ }
+ cout << endl;
+ }
+}
+
+void EGaussian::Debug_funtion() {
+ for (int i = clauses_toclear.size() - 1; i >= 0; i--) {
+ ClOffset offs = clauses_toclear[i].first;
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ assert(!cl->freed());
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h b/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
new file mode 100644
index 000000000..028b07ae0
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/EGaussian.h
@@ -0,0 +1,137 @@
+/******************************************
+Copyright (c) 2012 Cheng-Shen Han
+Copyright (c) 2012 Jie-Hong Roland Jiang
+Copyright (c) 2018 Mate Soos
+
+For more information, see " When Boolean Satisfiability Meets Gaussian
+Elimination in a Simplex Way." by Cheng-Shen Han and Jie-Hong Roland Jiang
+in CAV (Computer Aided Verification), 2012: 410-426
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef ENHANCEGAUSSIAN_H
+#define ENHANCEGAUSSIAN_H
+
+#include <vector>
+#include <limits>
+#include <string>
+#include <utility>
+
+#include "solvertypes.h"
+#include "packedmatrix.h"
+#include "bitarray.h"
+#include "propby.h"
+#include "xor.h"
+#include "gausswatched.h"
+#include "gqueuedata.h"
+
+//#define VERBOSE_DEBUG
+//#define DEBUG_GAUSS
+#define basic_var true
+#define non_basic_var false
+
+using std::string;
+using std::pair;
+using std::vector;
+
+namespace CMSat {
+
+class Solver;
+
+class EGaussian {
+ protected:
+ Solver* solver; // orignal sat solver
+ const GaussConf& config; // gauss some configure
+ const uint32_t matrix_no; // matrix index
+ vector<Lit> tmp_clause; // conflict&propagation handling
+
+ PackedMatrix clause_state; // clasue state
+
+ // variable state : basic=NONZERO IN COLUMN or non-basic
+ vec<bool> GasVar_state ;
+
+ vector<uint32_t> var_to_col; // variable to column
+ class matrixset { // matrix information
+ public:
+ // added by hankf4
+ vec<uint32_t> nb_rows; // the non_basic value in each row
+
+ // used in orignal matrix
+ PackedMatrix matrix; // The matrix, updated to reflect variable assignements
+ vector<uint32_t> col_to_var; // col_to_var[COL] tells which variable is at a given column in the matrix. Gives unassigned_var if the COL has been zeroed (i.e. the variable assigned)
+ uint32_t num_rows; // number of active rows in the matrix. Unactive rows are rows that contain only zeros (and if they are conflicting, then the conflict has been treated)
+ uint32_t num_cols; // number of active columns in the matrix. The columns at the end that have all be zeroed are no longer active
+ };
+ matrixset matrix; // The current matrixset, i.e. the one we are working on, or the last one we worked on
+
+
+ bool clean_xors();
+ void clear_gwatches(const uint32_t var);
+ void print_matrix(matrixset& m) const ; // print matrix
+ void eliminate(matrixset& m) ; //gaussian elimination
+ gret adjust_matrix(matrixset& matrix); // adjust matrix, include watch, check row is zero, etc.
+
+ inline void propagation_twoclause();
+ inline void conflict_twoclause(PropBy& confl);
+ inline void delete_gausswatch(const bool orig_basic, const uint32_t row_n);
+
+ public:
+ // variable
+ vector<Xor> xorclauses; // xorclauses
+ vector<pair<ClOffset, uint32_t> > clauses_toclear; // use to delete propagate clause
+
+
+ EGaussian(
+ Solver* solver,
+ const GaussConf& config,
+ const uint32_t matrix_no,
+ const vector<Xor>& xorclauses
+ );
+ ~EGaussian();
+
+ // functiion
+ void canceling(const uint32_t sublevel); //functions used throughout the Solver
+ bool full_init(bool& created); // initial arrary. return true is fine , return false means solver already false;
+ void fill_matrix(matrixset& origMat); // Fills the origMat matrix
+ uint32_t select_columnorder(matrixset& origMat); // Fills var_to_col and col_to_var of the origMat matrix.
+
+ //execute gaussian
+ bool find_truths2(
+ const GaussWatched* i,
+ GaussWatched*& j,
+ uint32_t p,
+ const uint32_t row_n,
+ GaussQData& gqd
+ );
+
+ // when basic variable is touch , eliminate one col
+ void eliminate_col2(
+ uint32_t p,
+ GaussQData& gqd
+ );
+
+ void Debug_funtion(); // used to debug
+};
+
+}
+
+
+#endif //ENHANCEGAUSSIAN_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.cpp.in b/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.cpp.in
new file mode 100644
index 000000000..483332e7f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.cpp.in
@@ -0,0 +1,64 @@
+/******************************************
+Copyright (c) 2017, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "src/GitSHA1.h"
+
+const char* CMSat::get_version_sha1()
+{
+ static const char myversion_sha1[] = "@GIT_SHA1@";
+ return myversion_sha1;
+}
+
+const char* CMSat::get_version_tag()
+{
+ static const char myversion_tag[] = "@PROJECT_VERSION@";
+ return myversion_tag;
+}
+
+const char* CMSat::get_compilation_env()
+{
+ static const char compilation_env[] =
+ "CMAKE_CXX_COMPILER = @CMAKE_CXX_COMPILER@ | "
+ "CMAKE_CXX_FLAGS = @CMAKE_CXX_FLAGS@ | "
+ "COMPILE_DEFINES = @COMPILE_DEFINES@ | "
+ "STATICCOMPILE = @STATICCOMPILE@ | "
+ "ONLY_SIMPLE = @ONLY_SIMPLE@ | "
+ "Boost_FOUND = @Boost_FOUND@ | "
+ "STATS = @STATS@ | "
+ "SQLITE3_FOUND = @SQLITE3_FOUND@ | "
+ "ZLIB_FOUND = @ZLIB_FOUND@ | "
+ "VALGRIND_FOUND = @VALGRIND_FOUND@ | "
+ "ENABLE_TESTING = @ENABLE_TESTING@ | "
+ "M4RI_FOUND = @M4RI_FOUND@ | "
+ "SLOW_DEBUG = @SLOW_DEBUG@ | "
+ "ENABLE_ASSERTIONS = @ENABLE_ASSERTIONS@ | "
+ "PYTHON_EXECUTABLE = @PYTHON_EXECUTABLE@ | "
+ "PYTHON_LIBRARY = @PYTHON_LIBRARY@ | "
+ "PYTHON_INCLUDE_DIRS = @PYTHON_INCLUDE_DIRS@ | "
+ "MY_TARGETS = @MY_TARGETS@ | "
+ "LARGEMEM = @LARGEMEM@ | "
+ "LIMITMEM = @LIMITMEM@ | "
+ "compilation date time = " __DATE__ " " __TIME__
+ ""
+ ;
+ return compilation_env;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h b/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
new file mode 100644
index 000000000..972e83be6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/GitSHA1.h
@@ -0,0 +1,29 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+namespace CMSat {
+
+const char* get_version_sha1();
+const char* get_version_tag();
+const char* get_compilation_env();
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h b/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
new file mode 100644
index 000000000..04592c0ab
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/MersenneTwister.h
@@ -0,0 +1,423 @@
+// MersenneTwister.h
+// Mersenne Twister random number generator -- a C++ class MTRand
+// Based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus
+// Richard J. Wagner v1.0 15 May 2003 rjwagner@writeme.com
+
+// The Mersenne Twister is an algorithm for generating random numbers. It
+// was designed with consideration of the flaws in various other generators.
+// The period, 2^19937-1, and the order of equidistribution, 623 dimensions,
+// are far greater. The generator is also fast; it avoids multiplication and
+// division, and it benefits from caches and pipelines. For more information
+// see the inventors' web page at http://www.math.keio.ac.jp/~matumoto/emt.html
+
+// Reference
+// M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-Dimensionally
+// Equidistributed Uniform Pseudo-Random Number Generator", ACM Transactions on
+// Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30.
+
+// Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+// Copyright (C) 2000 - 2003, Richard J. Wagner
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// 3. The names of its contributors may not be used to endorse or promote
+// products derived from this software without specific prior written
+// permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// The original code included the following notice:
+//
+// When you use this, send an email to: matumoto@math.keio.ac.jp
+// with an appropriate reference to your work.
+//
+// It would be nice to CC: rjwagner@writeme.com and Cokus@math.washington.edu
+// when you write.
+
+#ifndef MERSENNETWISTER_H
+#define MERSENNETWISTER_H
+
+// Not thread safe (unless auto-initialization is avoided and each thread has
+// its own MTRand object)
+
+#include <iostream>
+#include <limits.h>
+#include <stdio.h>
+#include <time.h>
+#include <math.h>
+
+class MTRand {
+// Data
+public:
+ typedef unsigned long uint32; // unsigned integer type, at least 32 bits
+
+ static const int N = 624; // length of state vector
+ static const int SAVE = N + 1; // length of array for save()
+
+protected:
+ enum { M = 397 }; // period parameter
+
+ uint32 state[N]; // internal state
+ uint32 *pNext; // next value to get from state
+ int left; // number of values left before reload needed
+
+
+//Methods
+public:
+ MTRand( const uint32& oneSeed ); // initialize with a simple uint32
+ MTRand( uint32 *const bigSeed, uint32 const seedLength = N ); // or an array
+ MTRand(); // auto-initialize with /dev/urandom or time() and clock()
+
+ // Do NOT use for CRYPTOGRAPHY without securely hashing several returned
+ // values together, otherwise the generator state can be learned after
+ // reading 624 consecutive values.
+
+ // Access to 32-bit random numbers
+ double rand(); // real number in [0,1]
+ double rand( const double& n ); // real number in [0,n]
+ double randExc(); // real number in [0,1)
+ double randExc( const double& n ); // real number in [0,n)
+ double randDblExc(); // real number in (0,1)
+ double randDblExc( const double& n ); // real number in (0,n)
+ uint32 randInt(); // integer in [0,2^32-1]
+ uint32 randInt( const uint32& n ); // integer in [0,n] for n < 2^32
+ double operator()() { return rand(); } // same as rand()
+
+ // Access to 53-bit random numbers (capacity of IEEE double precision)
+ double rand53(); // real number in [0,1)
+
+ // Access to nonuniform random number distributions
+ double randNorm( const double& mean = 0.0, const double& variance = 0.0 );
+
+ // Re-seeding functions with same behavior as initializers
+ void seed( const uint32 oneSeed );
+ void seed( uint32 *const bigSeed, const uint32 seedLength = N );
+ void seed();
+
+ // Saving and loading generator state
+ void save( uint32* saveArray ) const; // to array of size SAVE
+ void load( uint32 *const loadArray ); // from such array
+ friend std::ostream& operator<<( std::ostream& os, const MTRand& mtrand );
+ friend std::istream& operator>>( std::istream& is, MTRand& mtrand );
+
+protected:
+ void initialize( const uint32 oneSeed );
+ void reload();
+ uint32 hiBit( const uint32& u ) const { return u & 0x80000000UL; }
+ uint32 loBit( const uint32& u ) const { return u & 0x00000001UL; }
+ uint32 loBits( const uint32& u ) const { return u & 0x7fffffffUL; }
+ uint32 mixBits( const uint32& u, const uint32& v ) const
+ { return hiBit(u) | loBits(v); }
+ uint32 twist( const uint32& m, const uint32& s0, const uint32& s1 ) const
+ { return m ^ (mixBits(s0,s1)>>1) ^ (-loBit(s1) & 0x9908b0dfUL); }
+ static uint32 hash( time_t t, clock_t c );
+};
+
+
+inline MTRand::MTRand( const uint32& oneSeed )
+ { seed(oneSeed); }
+
+inline MTRand::MTRand( uint32 *const bigSeed, const uint32 seedLength )
+ { seed(bigSeed,seedLength); }
+
+inline MTRand::MTRand()
+ { seed(); }
+
+inline double MTRand::rand()
+ { return double(randInt()) * (1.0/4294967295.0); }
+
+inline double MTRand::rand( const double& n )
+ { return rand() * n; }
+
+inline double MTRand::randExc()
+ { return double(randInt()) * (1.0/4294967296.0); }
+
+inline double MTRand::randExc( const double& n )
+ { return randExc() * n; }
+
+inline double MTRand::randDblExc()
+ { return ( double(randInt()) + 0.5 ) * (1.0/4294967296.0); }
+
+inline double MTRand::randDblExc( const double& n )
+ { return randDblExc() * n; }
+
+inline double MTRand::rand53()
+{
+ uint32 a = randInt() >> 5, b = randInt() >> 6;
+ return ( a * 67108864.0 + b ) * (1.0/9007199254740992.0); // by Isaku Wada
+}
+
+inline double MTRand::randNorm( const double& mean, const double& variance )
+{
+ // Return a real number from a normal (Gaussian) distribution with given
+ // mean and variance by Box-Muller method
+ double r = sqrt( -2.0 * log( 1.0-randDblExc()) ) * variance;
+ double phi = 2.0 * 3.14159265358979323846264338328 * randExc();
+ return mean + r * cos(phi);
+}
+
+inline MTRand::uint32 MTRand::randInt()
+{
+ // Pull a 32-bit integer from the generator state
+ // Every other access function simply transforms the numbers extracted here
+
+ if( left == 0 ) reload();
+ --left;
+
+ register uint32 s1;
+ s1 = *pNext++;
+ s1 ^= (s1 >> 11);
+ s1 ^= (s1 << 7) & 0x9d2c5680UL;
+ s1 ^= (s1 << 15) & 0xefc60000UL;
+ return ( s1 ^ (s1 >> 18) );
+}
+
+inline MTRand::uint32 MTRand::randInt( const uint32& n )
+{
+ // Find which bits are used in n
+ // Optimized by Magnus Jonsson (magnus@smartelectronix.com)
+ uint32 used = n;
+ used |= used >> 1;
+ used |= used >> 2;
+ used |= used >> 4;
+ used |= used >> 8;
+ used |= used >> 16;
+
+ // Draw numbers until one is found in [0,n]
+ uint32 i;
+ do
+ i = randInt() & used; // toss unused bits to shorten search
+ while( i > n );
+ return i;
+}
+
+
+inline void MTRand::seed( const uint32 oneSeed )
+{
+ // Seed the generator with a simple uint32
+ initialize(oneSeed);
+ reload();
+}
+
+
+inline void MTRand::seed( uint32 *const bigSeed, const uint32 seedLength )
+{
+ // Seed the generator with an array of uint32's
+ // There are 2^19937-1 possible initial states. This function allows
+ // all of those to be accessed by providing at least 19937 bits (with a
+ // default seed length of N = 624 uint32's). Any bits above the lower 32
+ // in each element are discarded.
+ // Just call seed() if you want to get array from /dev/urandom
+ initialize(19650218UL);
+ register int i = 1;
+ register uint32 j = 0;
+ register int k = ( N > (int)seedLength ? N : (int)seedLength );
+ for( ; k; --k )
+ {
+ state[i] =
+ state[i] ^ ( (state[i-1] ^ (state[i-1] >> 30)) * 1664525UL );
+ state[i] += ( bigSeed[j] & 0xffffffffUL ) + j;
+ state[i] &= 0xffffffffUL;
+ ++i; ++j;
+ if( i >= N ) { state[0] = state[N-1]; i = 1; }
+ if( j >= seedLength ) j = 0;
+ }
+ for( k = N - 1; k; --k )
+ {
+ state[i] =
+ state[i] ^ ( (state[i-1] ^ (state[i-1] >> 30)) * 1566083941UL );
+ state[i] -= i;
+ state[i] &= 0xffffffffUL;
+ ++i;
+ if( i >= N ) { state[0] = state[N-1]; i = 1; }
+ }
+ state[0] = 0x80000000UL; // MSB is 1, assuring non-zero initial array
+ reload();
+}
+
+
+inline void MTRand::seed()
+{
+ // Seed the generator with an array from /dev/urandom if available
+ // Otherwise use a hash of time() and clock() values
+
+ // First try getting an array from /dev/urandom
+ FILE* urandom = fopen( "/dev/urandom", "rb" );
+ if( urandom )
+ {
+ uint32 bigSeed[N];
+ register uint32 *s = bigSeed;
+ register int i = N;
+ register bool success = true;
+ while( success && i-- )
+ success = fread( s++, sizeof(uint32), 1, urandom );
+ fclose(urandom);
+ if( success ) { seed( bigSeed, N ); return; }
+ }
+
+ // Was not successful, so use time() and clock() instead
+ seed( hash( time(NULL), clock() ) );
+}
+
+
+inline void MTRand::initialize( const uint32 seed )
+{
+ // Initialize generator state with seed
+ // See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
+ // In previous versions, most significant bits (MSBs) of the seed affect
+ // only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto.
+ register uint32 *s = state;
+ register uint32 *r = state;
+ register int i = 1;
+ *s++ = seed & 0xffffffffUL;
+ for( ; i < N; ++i )
+ {
+ *s++ = ( 1812433253UL * ( *r ^ (*r >> 30) ) + i ) & 0xffffffffUL;
+ r++;
+ }
+}
+
+
+inline void MTRand::reload()
+{
+ // Generate N new values in state
+ // Made clearer and faster by Matthew Bellew (matthew.bellew@home.com)
+ register uint32 *p = state;
+ register int i;
+ for( i = N - M; i--; ++p )
+ *p = twist( p[M], p[0], p[1] );
+ for( i = M; --i; ++p )
+ *p = twist( p[M-N], p[0], p[1] );
+ *p = twist( p[M-N], p[0], state[0] );
+
+ left = N, pNext = state;
+}
+
+
+inline MTRand::uint32 MTRand::hash( time_t t, clock_t c )
+{
+ // Get a uint32 from t and c
+ // Better than uint32(x) in case x is floating point in [0,1]
+ // Based on code by Lawrence Kirby (fred@genesis.demon.co.uk)
+
+ static uint32 differ = 0; // guarantee time-based seeds will change
+
+ uint32 h1 = 0;
+ unsigned char *p = (unsigned char *) &t;
+ for( size_t i = 0; i < sizeof(t); ++i )
+ {
+ h1 *= UCHAR_MAX + 2U;
+ h1 += p[i];
+ }
+ uint32 h2 = 0;
+ p = (unsigned char *) &c;
+ for( size_t j = 0; j < sizeof(c); ++j )
+ {
+ h2 *= UCHAR_MAX + 2U;
+ h2 += p[j];
+ }
+ return ( h1 + differ++ ) ^ h2;
+}
+
+
+inline void MTRand::save( uint32* saveArray ) const
+{
+ register uint32 *sa = saveArray;
+ register const uint32 *s = state;
+ register int i = N;
+ for( ; i--; *sa++ = *s++ ) {}
+ *sa = left;
+}
+
+
+inline void MTRand::load( uint32 *const loadArray )
+{
+ register uint32 *s = state;
+ register uint32 *la = loadArray;
+ register int i = N;
+ for( ; i--; *s++ = *la++ ) {}
+ left = *la;
+ pNext = &state[N-left];
+}
+
+
+inline std::ostream& operator<<( std::ostream& os, const MTRand& mtrand )
+{
+ register const MTRand::uint32 *s = mtrand.state;
+ register int i = mtrand.N;
+ for( ; i--; os << *s++ << "\t" ) {}
+ return os << mtrand.left;
+}
+
+
+inline std::istream& operator>>( std::istream& is, MTRand& mtrand )
+{
+ register MTRand::uint32 *s = mtrand.state;
+ register int i = mtrand.N;
+ for( ; i--; is >> *s++ ) {}
+ is >> mtrand.left;
+ mtrand.pNext = &mtrand.state[mtrand.N-mtrand.left];
+ return is;
+}
+
+#endif // MERSENNETWISTER_H
+
+// Change log:
+//
+// v0.1 - First release on 15 May 2000
+// - Based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus
+// - Translated from C to C++
+// - Made completely ANSI compliant
+// - Designed convenient interface for initialization, seeding, and
+// obtaining numbers in default or user-defined ranges
+// - Added automatic seeding from /dev/urandom or time() and clock()
+// - Provided functions for saving and loading generator state
+//
+// v0.2 - Fixed bug which reloaded generator one step too late
+//
+// v0.3 - Switched to clearer, faster reload() code from Matthew Bellew
+//
+// v0.4 - Removed trailing newline in saved generator format to be consistent
+// with output format of built-in types
+//
+// v0.5 - Improved portability by replacing static const int's with enum's and
+// clarifying return values in seed(); suggested by Eric Heimburg
+// - Removed MAXINT constant; use 0xffffffffUL instead
+//
+// v0.6 - Eliminated seed overflow when uint32 is larger than 32 bits
+// - Changed integer [0,n] generator to give better uniformity
+//
+// v0.7 - Fixed operator precedence ambiguity in reload()
+// - Added access for real numbers in (0,1) and (0,n)
+//
+// v0.8 - Included time.h header to properly support time_t and clock_t
+//
+// v1.0 - Revised seeding to match 26 Jan 2002 update of Nishimura and Matsumoto
+// - Allowed for seeding with arrays of any length
+// - Added access for real numbers in [0,1) with 53-bit resolution
+// - Added access for real numbers from normal (Gaussian) distributions
+// - Increased overall speed by optimizing twist()
+// - Doubled speed of integer [0,n] generation
+// - Fixed out-of-range number generation on 64-bit machines
+// - Improved portability by substituting literal constants for long enum's
+// - Changed license from GNU LGPL to BSD
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/Vec.h b/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
new file mode 100644
index 000000000..b254864b1
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/Vec.h
@@ -0,0 +1,301 @@
+/*******************************************************************************************[Vec.h]
+Copyright (c) 2003-2007, Niklas Een, Niklas Sorensson
+Copyright (c) 2007-2010, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**************************************************************************************************/
+
+#ifndef Vec_h
+#define Vec_h
+
+#include <cassert>
+#include <new>
+#include <cstdint>
+#include <limits>
+#include <utility>
+
+#include "XAlloc.h"
+
+namespace CMSat {
+
+//=================================================================================================
+// Automatically resizable arrays
+//
+// NOTE! Don't use this vector on datatypes that cannot be re-located in memory (with realloc)
+
+template<class T>
+class vec {
+public:
+ T* data;
+ T* begin()
+ {
+ return data;
+ }
+ T* end()
+ {
+ return data + sz;
+ }
+
+ const T* begin() const
+ {
+ return data;
+ }
+ const T* end() const
+ {
+ return data + sz;
+ }
+private:
+ uint32_t sz;
+ uint32_t cap;
+
+ // Don't allow copying (error prone):
+ vec<T>& operator = (vec<T>& /*other*/)
+ {
+ assert(0);
+ return *this;
+ }
+ vec (vec<T>& /*other*/)
+ {
+ assert(0);
+ }
+
+ // Helpers for calculating next capacity:
+ static inline uint32_t imax (int32_t x, int32_t y)
+ {
+ int32_t mask = (y - x) >> (sizeof(uint32_t) * 8 - 1);
+ return (x & mask) + (y & (~mask));
+ }
+
+public:
+ // Constructors:
+ vec() : data(NULL) , sz(0) , cap(0) { }
+ explicit vec(uint32_t size) : data(NULL) , sz(0) , cap(0)
+ {
+ growTo(size);
+ }
+ vec(uint32_t size, const T& pad) : data(NULL) , sz(0) , cap(0)
+ {
+ growTo(size, pad);
+ }
+ ~vec()
+ {
+ clear(true);
+ }
+
+ // Size operations:
+ uint32_t size() const
+ {
+ return sz;
+ }
+ void shrink (uint32_t nelems)
+ {
+ assert(nelems <= sz);
+ for (uint32_t i = 0; i < nelems; i++) {
+ sz--, data[sz].~T();
+ }
+ }
+ void shrink_ (uint32_t nelems)
+ {
+ assert(nelems <= sz);
+ sz -= nelems;
+ }
+ uint32_t capacity () const
+ {
+ return cap;
+ }
+ void capacity (int32_t min_cap);
+ void growTo (uint32_t size);
+ void growTo (uint32_t size, const T& pad);
+ void clear (bool dealloc = false);
+
+ // Stack interface:
+ void push ()
+ {
+ if (sz == cap) {
+ capacity(sz + 1);
+ }
+ new (&data[sz]) T();
+ sz++;
+ }
+ void push (const T& elem)
+ {
+ if (sz == cap) {
+ capacity(sz + 1);
+ }
+ data[sz++] = elem;
+ }
+ void push_ (const T& elem)
+ {
+ assert(sz < cap);
+ data[sz++] = elem;
+ }
+ void pop ()
+ {
+ assert(sz > 0);
+ sz--, data[sz].~T();
+ }
+ // NOTE: it seems possible that overflow can happen in the 'sz+1' expression of 'push()', but
+ // in fact it can not since it requires that 'cap' is equal to INT_MAX. This in turn can not
+ // happen given the way capacities are calculated (below). Essentially, all capacities are
+ // even, but INT_MAX is odd.
+
+ const T& last () const
+ {
+ return data[sz - 1];
+ }
+ T& last ()
+ {
+ return data[sz - 1];
+ }
+
+ // Vector interface:
+ const T& operator [] (uint32_t index) const
+ {
+ return data[index];
+ }
+ T& operator [] (uint32_t index)
+ {
+ return data[index];
+ }
+
+ // Duplicatation (preferred instead):
+ void copyTo(vec<T>& copy) const
+ {
+ copy.clear();
+ copy.growTo(sz);
+ for (uint32_t i = 0; i < sz; i++) {
+ copy[i] = data[i];
+ }
+ }
+ void moveTo(vec<T>& dest)
+ {
+ dest.clear(true);
+ dest.data = data;
+ dest.sz = sz;
+ dest.cap = cap;
+ data = NULL;
+ sz = 0;
+ cap = 0;
+ }
+ void swap(vec<T>& dest)
+ {
+ std::swap(dest.data, data);
+ std::swap(dest.sz, sz);
+ std::swap(dest.cap, cap);
+ }
+
+ void resize(uint32_t s) {
+ if (s < sz) {
+ shrink(sz - s);
+ } else {
+ growTo(s);
+ }
+ }
+
+ void insert(uint32_t num)
+ {
+ growTo(sz+num);
+ }
+
+ bool empty() const
+ {
+ return sz == 0;
+ }
+
+ void shrink_to_fit()
+ {
+ if (sz == 0) {
+ free(data);
+ cap = 0;
+ data = NULL;
+ return;
+ }
+
+ T* data2 = (T*)realloc(data, sz*sizeof(T));
+ if (data2 == 0) {
+ //We just keep the size then
+ return;
+ }
+ data = data2;
+ cap = sz;
+ }
+};
+
+
+template<class T>
+void vec<T>::capacity(int32_t min_cap)
+{
+ if ((int32_t)cap >= min_cap) {
+ return;
+ }
+
+ // NOTE: grow by approximately 3/2
+ uint32_t add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1);
+ if (add > std::numeric_limits<uint32_t>::max() - cap
+ || (((data = (T*)::realloc(data, (cap += (uint32_t)add) * sizeof(T))) == NULL)
+ && errno == ENOMEM)
+ ) {
+ throw std::bad_alloc();
+ }
+}
+
+
+template<class T>
+void vec<T>::growTo(uint32_t size, const T& pad)
+{
+ if (sz >= size) {
+ return;
+ }
+ capacity(size);
+ for (uint32_t i = sz; i < size; i++) {
+ data[i] = pad;
+ }
+ sz = size;
+}
+
+
+template<class T>
+void vec<T>::growTo(uint32_t size)
+{
+ if (sz >= size) {
+ return;
+ }
+ capacity(size);
+ for (uint32_t i = sz; i < size; i++) {
+ new (&data[i]) T();
+ }
+ sz = size;
+}
+
+
+template<class T>
+void vec<T>::clear(bool dealloc)
+{
+ if (data != NULL) {
+ for (uint32_t i = 0; i < sz; i++) {
+ data[i].~T();
+ }
+ sz = 0;
+ if (dealloc) {
+ free(data), data = NULL, cap = 0;
+ }
+ }
+}
+
+//=================================================================================================
+}
+
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h b/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
new file mode 100644
index 000000000..1d64f5d0c
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/XAlloc.h
@@ -0,0 +1,47 @@
+/****************************************************************************************[XAlloc.h]
+Copyright (c) 2009-2010, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**************************************************************************************************/
+
+
+#ifndef Glucose_XAlloc_h
+#define Glucose_XAlloc_h
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+namespace Glucose {
+
+//=================================================================================================
+// Simple layer on top of malloc/realloc to catch out-of-memory situtaions and provide some typing:
+
+class OutOfMemoryException {};
+static inline void* xrealloc(void* ptr, size_t size)
+{
+ void* mem = realloc(ptr, size);
+ if (mem == NULL && errno == ENOMEM) {
+ throw OutOfMemoryException();
+ } else {
+ return mem;
+ }
+}
+
+//=================================================================================================
+}
+
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/alg.h b/cryptominisat5/cryptominisat-5.6.3/src/alg.h
new file mode 100644
index 000000000..fc6101b58
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/alg.h
@@ -0,0 +1,42 @@
+/*******************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*******************************************************************************/
+
+#ifndef Alg_h
+#define Alg_h
+
+#include <iostream>
+#include "solvertypes.h"
+#include "watched.h"
+#include "constants.h"
+
+namespace CMSat {
+
+template<class V, class T>
+static inline void remove(V& ts, const T& t)
+{
+ uint32_t j = 0;
+ for (; j < ts.size() && ts[j] != t; j++);
+ assert(j < ts.size());
+ for (; j < (uint32_t)(ts.size()-1); j++) ts[j] = ts[j+1];
+ ts.resize(ts.size() -1);
+}
+
+} //end namespace
+
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h b/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
new file mode 100644
index 000000000..6e686b701
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/avgcalc.h
@@ -0,0 +1,201 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __AVGCALC_H__
+#define __AVGCALC_H__
+
+#include "constants.h"
+#include <limits>
+#include <cassert>
+#include <vector>
+#include <cstring>
+#include <sstream>
+#include <iomanip>
+
+namespace CMSat {
+using std::vector;
+
+#define AVGCALC_NEED_MIN_MAX
+
+template <class T, class T2 = uint64_t>
+class AvgCalc {
+ T2 sum;
+ size_t num;
+ #ifdef STATS_NEEDED
+ double sumSqare;
+ #endif
+ #ifdef AVGCALC_NEED_MIN_MAX
+ T min;
+ T max;
+ #endif
+
+public:
+ AvgCalc(void) :
+ sum(0)
+ , num(0)
+ #ifdef STATS_NEEDED
+ , sumSqare(0)
+ #endif
+ #ifdef AVGCALC_NEED_MIN_MAX
+ , min(std::numeric_limits<T>::max())
+ , max(std::numeric_limits<T>::min())
+ #endif
+ {}
+
+ AvgCalc<T, T2>& operator/=(const T2 val)
+ {
+ sum /= val;
+ min /= val;
+ max /= val;
+ #ifdef STATS_NEEDED
+ sumSqare /= val*val;
+ #endif
+
+ return *this;
+ }
+
+ AvgCalc<T, T2>& operator+=(const AvgCalc<T, T2>& other)
+ {
+ sum += other.sum;
+ num += other.num;
+ min = std::min(min, other.min);
+ max = std::min(min, other.max);
+ #ifdef STATS_NEEDED
+ sumSqare += other.sumSqare;
+ #endif
+
+ return *this;
+ }
+
+ AvgCalc<T, T2>& operator-=(const AvgCalc<T, T2>& other)
+ {
+ sum += other.sum;
+ num += other.num;
+ min = std::min(min, other.min);
+ max = std::min(min, other.max);
+ #ifdef STATS_NEEDED
+ sumSqare += other.sumSqare;
+ #endif
+
+ return *this;
+ }
+
+ T2 get_sum() const
+ {
+ return sum;
+ }
+
+ void push(const T x) {
+ sum += x;
+ num++;
+
+ #ifdef STATS_NEEDED
+ sumSqare += (double)x*(double)x;
+ #endif
+ #ifdef AVGCALC_NEED_MIN_MAX
+ max = std::max(max, x);
+ min = std::min(min, x);
+ #endif
+ }
+
+ #ifdef AVGCALC_NEED_MIN_MAX
+ T getMin() const
+ {
+ if (min == std::numeric_limits<T>::max())
+ return 0;
+
+ return min;
+ }
+
+ T getMax() const
+ {
+ if (max == std::numeric_limits<T>::min())
+ return 0;
+
+ return max;
+ }
+ #endif
+ #ifdef STATS_NEEDED
+ double var() const
+ {
+ if (num == 0)
+ return 0;
+
+ const double calcAvg = avg();
+ return
+ (((double)sumSqare
+ - 2.0*calcAvg*(double)sum
+ ))/(double)num
+ + calcAvg*calcAvg;
+ }
+ #endif
+
+ double avg() const
+ {
+ if (num == 0)
+ return 0;
+
+ return (double)sum/(double)num;
+ }
+
+ std::string avgPrint(size_t prec, size_t w) const
+ {
+ std::stringstream ss;
+ if (num > 0) {
+ ss << std::fixed << std::setprecision(prec) << std::setw(w) << std::left
+ << avg();
+ } else {
+ ss << std::setw(w) << "?";
+ }
+
+ return ss.str();
+ }
+
+ void clear()
+ {
+ AvgCalc<T, T2> tmp;
+ *this = tmp;
+ }
+
+ void addData(const AvgCalc& other)
+ {
+ sum += other.sum;
+ num += other.num;
+
+ #ifdef STATS_NEEDED
+ sumSqare += other.sumSqare;
+ #endif
+ #ifdef AVGCALC_NEED_MIN_MAX
+ min = std::min(min, other.min);
+ max = std::max(max, other.max);
+ #endif
+ }
+
+ size_t num_data_elements() const
+ {
+ return num;
+ }
+};
+
+} //end namespace
+
+#endif //__AVGCALC_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h b/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
new file mode 100644
index 000000000..459ba030a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/bitarray.h
@@ -0,0 +1,141 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef BITARRAY_H
+#define BITARRAY_H
+
+//#define DEBUG_BITARRAY
+
+#include <string.h>
+#include <cassert>
+#include "constants.h"
+#include <stdlib.h>
+
+
+namespace CMSat {
+
+class BitArray
+{
+public:
+ ~BitArray()
+ {
+ free(mp);
+ }
+
+ BitArray()
+ {}
+
+ BitArray(const BitArray& other)
+ {
+ *this = other;
+ }
+
+ BitArray& operator=(const BitArray& b)
+ {
+ if (size != b.size) {
+ mp = (uint64_t*)realloc(mp, b.size*sizeof(uint64_t));
+ assert(mp != NULL);
+ size = b.size;
+ }
+ memcpy(mp, b.mp, size*sizeof(uint64_t));
+
+ return *this;
+ }
+
+ void resize(uint32_t _size, const bool fill)
+ {
+ _size = _size/64 + (bool)(_size%64);
+ if (size != _size) {
+ mp = (uint64_t*)realloc(mp, _size*sizeof(uint64_t));
+ assert(mp != NULL);
+ size = _size;
+ }
+ if (fill) setOne();
+ else setZero();
+ }
+
+ inline bool isZero() const
+ {
+ const uint64_t* mp2 = (const uint64_t*)mp;
+
+ for (uint32_t i = 0; i < size; i++) {
+ if (mp2[i]) return false;
+ }
+ return true;
+ }
+
+ inline void setZero()
+ {
+ if (size != 0) {
+ memset(mp, 0, size*sizeof(uint64_t));
+ }
+ }
+
+ inline void setOne()
+ {
+ if (size != 0) {
+ memset(mp, 0xff, size*sizeof(uint64_t));
+ }
+ }
+
+ inline void clearBit(const uint32_t i)
+ {
+ #ifdef DEBUG_BITARRAY
+ assert(size*64 > i);
+ #endif
+
+ mp[i/64] &= ~((uint64_t)1 << (i%64));
+ }
+
+ inline void setBit(const uint32_t i)
+ {
+ #ifdef DEBUG_BITARRAY
+ assert(size*64 > i);
+ #endif
+
+ mp[i/64] |= ((uint64_t)1 << (i%64));
+ }
+
+ inline bool operator[](const uint32_t& i) const
+ {
+ #ifdef DEBUG_BITARRAY
+ assert(size*64 > i);
+ #endif
+
+ return (mp[i/64] >> (i%64)) & 1;
+ }
+
+ inline uint32_t getSize() const
+ {
+ return size*64;
+ }
+
+private:
+
+ uint32_t size = 0;
+ uint64_t* mp = NULL;
+};
+
+} //end namespace
+
+#endif //BITARRAY_H
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h b/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
new file mode 100644
index 000000000..041f42896
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/boundedqueue.h
@@ -0,0 +1,190 @@
+/***************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+2008 - Gilles Audemard, Laurent Simon
+CryptoMiniSat -- Copyright (c) 2009 Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+****************************************************************************/
+
+#ifndef BOUNDEDQUEUE_H
+#define BOUNDEDQUEUE_H
+
+#include "constants.h"
+#include "avgcalc.h"
+#include <cassert>
+#include <vector>
+#include <cstring>
+#include <sstream>
+#include <iomanip>
+
+namespace CMSat {
+using std::vector;
+
+template <class T, class T2 = uint64_t>
+class bqueue {
+ //Only stores info for N elements
+ vector<T> elems;
+ uint32_t first;
+ uint32_t last;
+ uint32_t maxsize; //max number of history elements
+ uint32_t queuesize; // Number of current elements (must be < maxsize !)
+ T2 sumofqueue;
+ #ifdef STATS_NEEDED
+ AvgCalc<T, T2> longTermAvg;
+ #endif
+
+public:
+ bqueue(void) :
+ first(0)
+ , last(0)
+ , maxsize(0)
+ , queuesize(0)
+ , sumofqueue(0)
+ {}
+
+ size_t usedMem() const
+ {
+ return sizeof(size_t)*4 + elems.capacity()*sizeof(T) + sizeof(T2) + sizeof(AvgCalc<T,T2>);
+ }
+
+ void push(const T x) {
+ if (queuesize == maxsize) {
+ // The queue is full, next value to enter will replace oldest one
+
+ assert(last == first);
+ sumofqueue -= elems[last];
+
+ last++;
+ if (last == maxsize)
+ last = 0;
+
+ } else {
+ queuesize++;
+ }
+
+ sumofqueue += x;
+
+ #ifdef STATS_NEEDED
+ longTermAvg.push(x);
+ #endif
+ elems[first] = x;
+
+ first++;
+ if (first == maxsize)
+ first = 0;
+ }
+
+ double avg() const
+ {
+ if (queuesize == 0)
+ return 0;
+
+ assert(isvalid());
+ return (double)sumofqueue/(double)queuesize;
+ }
+
+ double avg_nocheck() const
+ {
+ if (queuesize == 0)
+ return 0;
+
+ return (double)sumofqueue/(double)queuesize;
+ }
+
+ #ifdef STATS_NEEDED
+ const AvgCalc<T,T2>& getLongtTerm() const
+ {
+ return longTermAvg;
+ }
+
+ T prev(int32_t p) const
+ {
+ if (p > (int32_t)queuesize)
+ return 0;
+
+ uint32_t e;
+ if (first > 0) {
+ e = first-1;
+ } else {
+ e = maxsize-1;
+ }
+
+ while(p-- > 0) {
+ if (e == 0) {
+ e = maxsize-1;
+ } else {
+ e--;
+ }
+ }
+ return elems[e];
+ }
+ #endif
+
+ std::string getAvgPrint(size_t prec, size_t w) const
+ {
+ std::stringstream ss;
+ if (isvalid()) {
+ ss
+ << std::fixed << std::setprecision(prec) << std::setw(w) << std::right
+ << avg();
+ } else {
+ ss << std::setw(5) << "?";
+ }
+
+ return ss.str();
+ }
+
+ bool isvalid() const
+ {
+ return (queuesize == maxsize);
+ }
+
+ void clearAndResize(const size_t size)
+ {
+ clear();
+ elems.resize(size);
+ maxsize = size;
+ }
+
+ void clear()
+ {
+ first = 0;
+ last = 0;
+ queuesize = 0;
+ sumofqueue = 0;
+
+ #ifdef STATS_NEEDED
+ longTermAvg.clear();
+ #endif
+ }
+
+ size_t get_size() const
+ {
+ return queuesize;
+ }
+
+ size_t get_maxsize() const
+ {
+ return maxsize;
+ }
+};
+
+} //end namespace
+
+#endif //BOUNDEDQUEUE_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp b/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
new file mode 100644
index 000000000..29d967326
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/bva.cpp
@@ -0,0 +1,850 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "bva.h"
+#include "occsimplifier.h"
+#include "solver.h"
+#include "clausecleaner.h"
+#include "subsumeimplicit.h"
+#include "sqlstats.h"
+#include <cmath>
+#include <functional>
+
+//#define CHECK_N_OCCUR
+
+using namespace CMSat;
+
+BVA::BVA(Solver* _solver, OccSimplifier* _simplifier) :
+ solver(_solver)
+ , simplifier(_simplifier)
+ , seen(solver->seen)
+ , seen2(solver->seen2)
+ , var_bva_order(VarBVAOrder(watch_irred_sizes))
+{}
+
+bool BVA::bounded_var_addition()
+{
+ bounded_var_elim_time_limit =
+ solver->conf.bva_time_limitM*2ULL*400LL *1000LL
+ *solver->conf.global_timeout_multiplier;
+ bva_verbosity = false;
+
+ assert(solver->ok);
+ if (!solver->conf.do_bva)
+ return solver->okay();
+
+ if (solver->conf.verbosity >= 3 || bva_verbosity) {
+ cout << "c [occ-bva] Running BVA" << endl;
+ }
+
+ simplifier->limit_to_decrease = &bounded_var_elim_time_limit;
+ int64_t limit_orig = *simplifier->limit_to_decrease;
+ if (!simplifier->prop_and_clean_long_and_impl_clauses()) {
+ return solver->okay();
+ }
+
+ bva_worked = 0;
+ bva_simp_size = 0;
+ var_bva_order.clear();
+ calc_watch_irred_sizes();
+ for(size_t i = 0; i < solver->nVars()*2; i++) {
+ const Lit lit = Lit::toLit(i);
+ if (solver->value(lit) != l_Undef
+ || solver->varData[lit.var()].removed != Removed::none
+ ) {
+ continue;
+ }
+ var_bva_order.insert(lit.toInt());
+ }
+
+ double my_time = cpuTime();
+ while(!var_bva_order.empty()) {
+ if (*simplifier->limit_to_decrease < 0
+ || bva_worked >= solver->conf.bva_limit_per_call
+ || solver->must_interrupt_asap()
+ ) {
+ break;
+ }
+
+ const Lit lit = Lit::toLit(var_bva_order.removeMin());
+ if (solver->conf.verbosity >= 5 || bva_verbosity) {
+ cout << "c [occ-bva] trying lit " << lit << endl;
+ }
+ bool ok = try_bva_on_lit(lit);
+ if (!ok)
+ break;
+ }
+ solver->bva_changed();
+
+ bool time_out = *simplifier->limit_to_decrease <= 0;
+ const double time_used = cpuTime() - my_time;
+ double time_remain = float_div(*simplifier->limit_to_decrease ,limit_orig);
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ-bva] added: " << bva_worked
+ << " simp: " << bva_simp_size
+ << " 2lit: " << ((solver->conf.bva_also_twolit_diff
+ && (long)solver->sumConflicts >= solver->conf.bva_extra_lit_and_red_start) ? "Y" : "N")
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "bva"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ return solver->okay();
+}
+
+void BVA::remove_duplicates_from_m_cls()
+{
+ if (m_cls.size() <= 1)
+ return;
+
+ std::function<bool (const OccurClause&, const OccurClause&)> mysort
+ = [&] (const OccurClause& a, const OccurClause& b) {
+ WatchType atype = a.ws.getType();
+ WatchType btype = b.ws.getType();
+ if (atype == watch_binary_t && btype != CMSat::watch_binary_t) {
+ return true;
+ }
+ if (btype == watch_binary_t && atype != CMSat::watch_binary_t) {
+ return false;
+ }
+
+ assert(atype == btype);
+ switch(atype) {
+ case CMSat::watch_binary_t: {
+ //subsumption could have time-outed
+ //assert(a.ws.lit2() != b.ws.lit2() && "Implicit has been cleaned of duplicates!!");
+ return a.ws.lit2() < b.ws.lit2();
+ }
+ case CMSat::watch_clause_t: {
+ *simplifier->limit_to_decrease -= 20;
+ const Clause& cl_a = *solver->cl_alloc.ptr(a.ws.get_offset());
+ const Clause& cl_b = *solver->cl_alloc.ptr(b.ws.get_offset());
+ if (cl_a.size() != cl_b.size()) {
+ return cl_a.size() < cl_b.size();
+ }
+ //Clauses' lits are sorted, yay!
+ for(size_t i = 0; i < cl_a.size(); i++) {
+ *simplifier->limit_to_decrease -= 1;
+ if (cl_a[i] != cl_b[i]) {
+ return cl_a[i] < cl_b[i];
+ }
+ }
+ return false;
+ }
+ case CMSat::watch_idx_t: {
+ // This should never be here
+ assert(false);
+ exit(-1);
+ }
+ }
+
+ assert(false);
+ return false;
+ };
+
+ *simplifier->limit_to_decrease -= 2*(int64_t)m_cls.size()*(int64_t)std::sqrt(m_cls.size());
+ std::sort(m_cls.begin(), m_cls.end(), mysort);
+ size_t i = 0;
+ size_t j = 0;
+ for(; i+1 < m_cls.size(); i++) {
+ const Watched& prev = m_cls[j].ws;
+ const Watched& next = m_cls[i+1].ws;
+ if (prev.getType() != next.getType()) {
+ m_cls[j+1] = m_cls[i+1];
+ j++;
+ continue;
+ }
+
+ bool del = false;
+ switch(prev.getType()) {
+ case CMSat::watch_binary_t: {
+ if (prev.lit2() == next.lit2()) {
+ del = true;
+ }
+ break;
+ }
+
+ case CMSat::watch_clause_t: {
+ *simplifier->limit_to_decrease -= 10;
+ const Clause& cl1 = *solver->cl_alloc.ptr(prev.get_offset());
+ const Clause& cl2 = *solver->cl_alloc.ptr(next.get_offset());
+ del = true;
+ if (cl1.size() != cl2.size()) {
+ break;
+ }
+ for(size_t at = 0; at < cl1.size(); at++) {
+ *simplifier->limit_to_decrease -= 1;
+ if (cl1[at] != cl2[at]) {
+ del = false;
+ break;
+ }
+ }
+ break;
+ }
+
+ case CMSat::watch_idx_t: {
+ // This should never be here
+ assert(false);
+ exit(-1);
+ }
+ }
+
+ if (!del) {
+ m_cls[j+1] = m_cls[i+1];
+ //if (mark_irred) {
+ // m_cls[j+1].ws.setRed(false);
+ //}
+ j++;
+ }
+ }
+ m_cls.resize(m_cls.size()-(i-j));
+
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout << "m_cls after cleaning: " << endl;
+ for(const OccurClause& w: m_cls) {
+ cout << "-> " << solver->watched_to_string(w.lit, w.ws) << endl;
+ }
+ }
+}
+
+bool BVA::try_bva_on_lit(const Lit lit)
+{
+ assert(solver->value(lit) == l_Undef);
+ assert(solver->varData[lit.var()].removed == Removed::none);
+
+ m_cls.clear();
+ m_lits.clear();
+ m_lits.push_back(lit);
+ *simplifier->limit_to_decrease -= (int64_t)solver->watches[lit].size();
+ for(const Watched w: solver->watches[lit]) {
+ if (!solver->redundant(w)) {
+ m_cls.push_back(OccurClause(lit, w));
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout << "1st adding to m_cls "
+ << solver->watched_to_string(lit, w)
+ << endl;
+ }
+ }
+ }
+ remove_duplicates_from_m_cls();
+
+ while(true) {
+ potential.clear();
+ fill_potential(lit);
+ if (*simplifier->limit_to_decrease < 0) {
+ return solver->okay();
+ }
+
+ size_t num_occur;
+ const lit_pair l_max = most_occuring_lit_in_potential(num_occur);
+ if (simplifies_system(num_occur)) {
+ m_lits.push_back(l_max);
+ m_cls.clear();
+ *simplifier->limit_to_decrease -= (int64_t)potential.size()*3;
+ for(const PotentialClause pot: potential) {
+ if (pot.lits == l_max) {
+ m_cls.push_back(pot.occur_cl);
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout << "-- max is : (" << l_max.lit1 << ", " << l_max.lit2 << "), adding to m_cls "
+ << solver->watched_to_string(pot.occur_cl.lit, pot.occur_cl.ws)
+ << endl;
+ }
+ assert(pot.occur_cl.lit == lit);
+ }
+ }
+ } else {
+ break;
+ }
+ }
+
+ const int simp_size = simplification_size(m_lits.size(), m_cls.size());
+ if (simp_size <= solver->conf.min_bva_gain) {
+ return solver->okay();
+ }
+
+ const bool ok = bva_simplify_system();
+ return ok;
+}
+
+bool BVA::bva_simplify_system()
+{
+ touched.clear();
+ int simp_size = simplification_size(m_lits.size(), m_cls.size());
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout
+ << "c [occ-bva] YES Simplification by "
+ << simp_size
+ << " with matching lits: ";
+ for(const lit_pair l: m_lits) {
+ cout << "(" << l.lit1;
+ if (l.lit2 != lit_Undef) {
+ cout << ", " << l.lit2;
+ }
+ cout << "), ";
+ }
+ cout << endl;
+ cout << "c [occ-bva] cls: ";
+ for(OccurClause cl: m_cls) {
+ cout
+ << "(" << solver->watched_to_string(cl.lit, cl.ws) << ")"
+ << ", ";
+ }
+ cout << endl;
+ }
+ bva_worked++;
+ bva_simp_size += simp_size;
+
+ solver->new_var(true);
+ const uint32_t newvar = solver->nVars()-1;
+ const Lit new_lit(newvar, false);
+
+ //Binary clauses
+ for(const lit_pair m_lit: m_lits) {
+ bva_tmp_lits.clear();
+ bva_tmp_lits.push_back(m_lit.lit1);
+ if (m_lit.lit2 != lit_Undef) {
+ bva_tmp_lits.push_back(m_lit.lit2);
+ }
+ bva_tmp_lits.push_back(new_lit);
+ Clause* newCl = solver->add_clause_int(
+ bva_tmp_lits, //lits to add
+ false, //redundant?
+ ClauseStats(), //stats
+ false, //attach if long?
+ &bva_tmp_lits, //put final lits back here
+ true, //add DRAT
+ new_lit //the first literal in DRAT
+ );
+
+ if (newCl != NULL) {
+ simplifier->linkInClause(*newCl);
+ ClOffset offset = solver->cl_alloc.get_offset(newCl);
+ simplifier->clauses.push_back(offset);
+ } else {
+ for(Lit l: bva_tmp_lits) {
+ simplifier->n_occurs[l.toInt()]++;
+ }
+ }
+ touched.touch(bva_tmp_lits);
+ }
+
+ //Longer clauses
+ for(const OccurClause m_cl: m_cls) {
+ bool ok = add_longer_clause(~new_lit, m_cl);
+ if (!ok)
+ return false;
+ }
+
+ fill_m_cls_lits_and_red();
+ for(const lit_pair replace_lit: m_lits) {
+ //cout << "Doing lit " << replace_lit << " replacing lit " << lit << endl;
+ for(const m_cls_lits_and_red& cl_lits_and_red: m_cls_lits) {
+ remove_matching_clause(cl_lits_and_red, replace_lit);
+ }
+ }
+
+ update_touched_lits_in_bva();
+
+ return solver->okay();
+}
+
+void BVA::update_touched_lits_in_bva()
+{
+ const vector<uint32_t>& touched_list = touched.getTouchedList();
+ for(const uint32_t lit_uint: touched_list) {
+ const Lit lit = Lit::toLit(lit_uint);
+ if (var_bva_order.inHeap(lit.toInt())) {
+ watch_irred_sizes[lit.toInt()] = calc_watch_irred_size(lit);
+ var_bva_order.update(lit.toInt());
+ }
+
+ if (var_bva_order.inHeap((~lit).toInt())) {
+ watch_irred_sizes[(~lit).toInt()] = calc_watch_irred_size(~lit);
+ var_bva_order.update((~lit).toInt());
+ }
+ }
+ touched.clear();
+}
+
+void BVA::fill_m_cls_lits_and_red()
+{
+ m_cls_lits.clear();
+ vector<Lit> tmp;
+ for(OccurClause& cl: m_cls) {
+ tmp.clear();
+ bool red;
+ switch(cl.ws.getType()) {
+ case CMSat::watch_binary_t: {
+ tmp.push_back(cl.ws.lit2());
+ red = cl.ws.red();
+ break;
+ }
+ case CMSat::watch_clause_t: {
+ const Clause* cl_orig = solver->cl_alloc.ptr(cl.ws.get_offset());
+ for(const Lit lit: *cl_orig) {
+ if (cl.lit != lit) {
+ tmp.push_back(lit);
+ }
+ }
+ red = cl_orig->red();
+ break;
+ }
+ case CMSat::watch_idx_t:
+ default:
+ {
+ // This should never be here
+ assert(false);
+ exit(-1);
+ }
+ }
+ m_cls_lits.push_back(m_cls_lits_and_red(tmp, red));
+ }
+}
+
+void BVA::remove_matching_clause(
+ const m_cls_lits_and_red& cl_lits_and_red
+ , const lit_pair lit_replace
+) {
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout
+ << "c [occ-bva] Removing cl "
+ //<< solver->watched_to_string(lit_replace, cl.ws)
+ << endl;
+ }
+
+ to_remove.clear();
+ to_remove.push_back(lit_replace.lit1);
+ if (lit_replace.lit2 != lit_Undef) {
+ to_remove.push_back(lit_replace.lit2);
+ }
+ for(const Lit cl_lit: cl_lits_and_red.lits) {
+ to_remove.push_back(cl_lit);
+ }
+ touched.touch(to_remove);
+
+ switch(to_remove.size()) {
+ case 2: {
+ *simplifier->limit_to_decrease -= 2*(int64_t)solver->watches[to_remove[0]].size();
+ *(solver->drat) << del << to_remove << fin;
+ solver->detach_bin_clause(to_remove[0], to_remove[1], false);
+ simplifier->n_occurs[to_remove[0].toInt()]--;
+ simplifier->n_occurs[to_remove[1].toInt()]--;
+ break;
+ }
+
+ default:
+ Clause* cl_new = find_cl_for_bva(to_remove, cl_lits_and_red.red);
+ simplifier->unlink_clause(solver->cl_alloc.get_offset(cl_new));
+ break;
+ }
+}
+
+Clause* BVA::find_cl_for_bva(
+ const vector<Lit>& torem
+ , const bool red
+) const {
+ Clause* cl = NULL;
+ for(const Lit lit: torem) {
+ seen[lit.toInt()] = 1;
+ }
+ for(Watched w: solver->watches[torem[0]]) {
+ if (!w.isClause())
+ continue;
+
+ cl = solver->cl_alloc.ptr(w.get_offset());
+ if (cl->red() != red
+ || cl->size() != torem.size()
+ ) {
+ continue;
+ }
+ #ifdef SLOW_DEBUG
+ assert(!cl->freed());
+ assert(!cl->getRemoved());
+ #endif
+
+ bool OK = true;
+ for(const Lit lit: *cl) {
+ if (seen[lit.toInt()] == 0) {
+ OK = false;
+ break;
+ }
+ }
+
+ if (OK)
+ break;
+ }
+
+ for(const Lit lit: torem) {
+ seen[lit.toInt()] = 0;
+ }
+
+ assert(cl != NULL);
+ return cl;
+}
+
+bool BVA::add_longer_clause(const Lit new_lit, const OccurClause& cl)
+{
+ vector<Lit>& lits = bva_tmp_lits;
+ lits.clear();
+ switch(cl.ws.getType()) {
+ case CMSat::watch_binary_t: {
+ lits.resize(2);
+ lits[0] = new_lit;
+ lits[1] = cl.ws.lit2();
+ Clause* cl_check = solver->add_clause_int(
+ lits, //lits to attach
+ false, //redundant?
+ ClauseStats(),
+ false, //attach?
+ &lits, //put back cls here
+ true, //DRAT?
+ new_lit //first DRAT literal
+ );
+ for(Lit l: lits) {
+ simplifier->n_occurs[l.toInt()]++;
+ }
+ assert(cl_check == NULL);
+ break;
+ }
+
+ case CMSat::watch_clause_t: {
+ const Clause& orig_cl = *solver->cl_alloc.ptr(cl.ws.get_offset());
+ lits.resize(orig_cl.size());
+ for(size_t i = 0; i < orig_cl.size(); i++) {
+ if (orig_cl[i] == cl.lit) {
+ lits[i] = new_lit;
+ } else {
+ lits[i] = orig_cl[i];
+ }
+ }
+ Clause* newCl = solver->add_clause_int(
+ lits, //lits to add
+ false, //redundant?
+ orig_cl.stats,
+ false, //attach?
+ &lits, //put back final lits here
+ true, //DRAT
+ new_lit //first DRAT literal
+ );
+ if (newCl != NULL) {
+ simplifier->linkInClause(*newCl);
+ ClOffset offset = solver->cl_alloc.get_offset(newCl);
+ simplifier->clauses.push_back(offset);
+ } else {
+ for(Lit l: lits) {
+ simplifier->n_occurs[l.toInt()]++;
+ }
+ }
+ break;
+ }
+
+ case CMSat::watch_idx_t: {
+ // This should never be here
+ assert(false);
+ exit(-1);
+ }
+ }
+ touched.touch(lits);
+
+ return solver->okay();
+}
+
+string BVA::PotentialClause::to_string(const Solver* solver) const
+{
+ std::stringstream ss;
+ ss << solver->watched_to_string(occur_cl.lit, occur_cl.ws)
+ << " -- (diff) lit: " << lits.lit1 << ", " << lits.lit2;
+
+ return ss.str();
+}
+
+int BVA::simplification_size(
+ const int m_lits_size
+ , const int m_cls_size
+) const {
+ return m_lits_size*m_cls_size-m_lits_size-m_cls_size;
+}
+
+void BVA::fill_potential(const Lit lit)
+{
+ for(const OccurClause& c: m_cls) {
+ if (*simplifier->limit_to_decrease < 0)
+ break;
+
+ const Lit l_min = least_occurring_except(c);
+ if (l_min == lit_Undef)
+ continue;
+
+ solver->watches.prefetch(l_min.toInt());
+ m_lits_this_cl = m_lits;
+ *simplifier->limit_to_decrease -= (int64_t)m_lits_this_cl.size();
+ for(const lit_pair lits: m_lits_this_cl) {
+ seen2[lits.hash(seen2.size())] = 1;
+ }
+
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout
+ << "c [occ-bva] Examining clause for addition to 'potential':"
+ << solver->watched_to_string(c.lit, c.ws)
+ << " -- Least occurring in this CL: " << l_min
+ << endl;
+ }
+
+ *simplifier->limit_to_decrease -= (int64_t)solver->watches[l_min].size()*3;
+ for(const Watched& d_ws: solver->watches[l_min]) {
+ if (*simplifier->limit_to_decrease < 0)
+ goto end;
+
+ OccurClause d(l_min, d_ws);
+ const size_t sz_c = solver->cl_size(c.ws);
+ const size_t sz_d = solver->cl_size(d.ws);
+ if (c.ws != d.ws
+ && (sz_c == sz_d
+ || (sz_c+1 == sz_d
+ && solver->conf.bva_also_twolit_diff
+ && (long)solver->sumConflicts >= solver->conf.bva_extra_lit_and_red_start
+ )
+ )
+ && !solver->redundant(d.ws)
+ && lit_diff_watches(c, d) == lit
+ ) {
+ const lit_pair diff = lit_diff_watches(d, c);
+ if (seen2[diff.hash(seen2.size())] == 0) {
+ *simplifier->limit_to_decrease -= 3;
+ potential.push_back(PotentialClause(diff, c));
+ m_lits_this_cl.push_back(diff);
+ seen2[diff.hash(seen2.size())] = 1;
+
+ if (solver->conf.verbosity >= 6 || bva_verbosity) {
+ cout
+ << "c [occ-bva] Added to P: "
+ << potential.back().to_string(solver)
+ << endl;
+ }
+ }
+ }
+ }
+
+ end:
+ for(const lit_pair lits: m_lits_this_cl) {
+ seen2[lits.hash(seen2.size())] = 0;
+ }
+ }
+}
+
+
+bool BVA::VarBVAOrder::operator()(const uint32_t lit1_uint, const uint32_t lit2_uint) const
+{
+ return watch_irred_sizes[lit1_uint] > watch_irred_sizes[lit2_uint];
+}
+
+
+
+bool BVA::simplifies_system(const size_t num_occur) const
+{
+ //If first run, at least 2 must match, nothing else matters
+ if (m_lits.size() == 1) {
+ return num_occur >= 2;
+ }
+
+ assert(m_lits.size() > 1);
+ int orig_num_red = simplification_size(m_lits.size(), m_cls.size());
+ int new_num_red = simplification_size(m_lits.size()+1, num_occur);
+
+ if (new_num_red <= solver->conf.min_bva_gain)
+ return false;
+
+ if (new_num_red < (orig_num_red+solver->conf.min_bva_gain))
+ return false;
+
+ return true;
+}
+
+
+
+BVA::lit_pair BVA::most_occuring_lit_in_potential(size_t& largest)
+{
+ largest = 0;
+ lit_pair most_occur = lit_pair(lit_Undef, lit_Undef);
+ if (potential.size() > 1) {
+ *simplifier->limit_to_decrease -= (double)potential.size()*(double)std::log(potential.size())*0.2;
+ std::sort(potential.begin(), potential.end());
+ }
+
+ lit_pair last_occur = lit_pair(lit_Undef, lit_Undef);
+ size_t num = 0;
+ for(const PotentialClause pot: potential) {
+ if (last_occur != pot.lits) {
+ if (num >= largest) {
+ largest = num;
+ most_occur = last_occur;
+ }
+ last_occur = pot.lits;
+ num = 1;
+ } else {
+ num++;
+ }
+ }
+ if (num >= largest) {
+ largest = num;
+ most_occur = last_occur;
+ }
+
+ if (solver->conf.verbosity >= 5 || bva_verbosity) {
+ cout
+ << "c [occ-bva] ---> Most occuring lit in p: " << most_occur.lit1 << ", " << most_occur.lit2
+ << " occur num: " << largest
+ << endl;
+ }
+
+ return most_occur;
+}
+
+BVA::lit_pair BVA::lit_diff_watches(const OccurClause& a, const OccurClause& b)
+{
+ //assert(solver->cl_size(a.ws) == solver->cl_size(b.ws));
+ assert(a.lit != b.lit);
+ solver->for_each_lit(b, [&](const Lit lit) {seen[lit.toInt()] = 1;}, simplifier->limit_to_decrease);
+
+ size_t num = 0;
+ lit_pair toret = lit_pair(lit_Undef, lit_Undef);
+ const auto check_seen = [&] (const Lit lit) {
+ if (seen[lit.toInt()] == 0) {
+ if (num == 0)
+ toret.lit1 = lit;
+ else
+ toret.lit2 = lit;
+
+ num++;
+ }
+ };
+ solver->for_each_lit(a, check_seen, simplifier->limit_to_decrease);
+ solver->for_each_lit(b, [&](const Lit lit) {seen[lit.toInt()] = 0;}, simplifier->limit_to_decrease);
+
+ if (num >= 1 && num <= 2)
+ return toret;
+ else
+ return lit_Undef;
+}
+
+
+
+Lit BVA::least_occurring_except(const OccurClause& c)
+{
+ *simplifier->limit_to_decrease -= (int64_t)m_lits.size();
+ for(const lit_pair lits: m_lits) {
+ seen[lits.lit1.toInt()] = 1;
+ if (lits.lit2 != lit_Undef) {
+ seen[lits.lit2.toInt()] = 1;
+ }
+ }
+
+ Lit smallest = lit_Undef;
+ size_t smallest_val = std::numeric_limits<size_t>::max();
+ const auto check_smallest = [&] (const Lit lit) {
+ //Must not be in m_lits
+ if (seen[lit.toInt()] != 0)
+ return;
+
+ const size_t watch_size = solver->watches[lit].size();
+ if (watch_size < smallest_val) {
+ smallest = lit;
+ smallest_val = watch_size;
+ }
+ };
+ solver->for_each_lit_except_watched(c, check_smallest, simplifier->limit_to_decrease);
+
+ for(const lit_pair lits: m_lits) {
+ seen[lits.lit1.toInt()] = 0;
+ if (lits.lit2 != lit_Undef) {
+ seen[lits.lit2.toInt()] = 0;
+ }
+ }
+
+ return smallest;
+}
+
+void BVA::calc_watch_irred_sizes()
+{
+ watch_irred_sizes.clear();
+ for(size_t i = 0; i < solver->nVars()*2; i++) {
+ const Lit lit = Lit::toLit(i);
+ const size_t irred_size = calc_watch_irred_size(lit);
+ watch_irred_sizes.push_back(irred_size);
+ }
+}
+
+size_t BVA::calc_watch_irred_size(const Lit lit) const
+{
+#ifdef CHECK_N_OCCUR
+ size_t num = 0;
+ watch_subarray_const ws = solver->watches[lit];
+ for(const Watched w: ws) {
+ if (w.isBin()) {
+ num += !w.red();
+ continue;
+ }
+
+ assert(w.isClause());
+ const Clause& cl = *solver->cl_alloc.ptr(w.get_offset());
+ assert(!cl.freed());
+ assert(!cl.getRemoved());
+ num += !cl.red();
+ }
+ if (num != simplifier->n_occurs[lit.toInt()]) {
+ cout << "for lit "<< lit << endl;
+ cout << "n occ: "<< simplifier->n_occurs[lit.toInt()] << endl;
+ cout << "our count: "<< num << endl;
+ assert(false);
+ }
+#endif
+
+ return simplifier->n_occurs[lit.toInt()];
+}
+
+size_t BVA::mem_used() const
+{
+ size_t mem = 0;
+ mem += bva_tmp_lits.capacity()*sizeof(Lit);
+ mem += m_cls_lits.capacity()*sizeof(m_cls_lits_and_red);
+ for(auto m: m_cls_lits) {
+ mem += m.lits.capacity()*sizeof(Lit);
+ }
+ mem += to_remove.capacity()* sizeof(Lit);
+ mem += potential.capacity()*sizeof(PotentialClause);
+ mem += m_lits.capacity()*sizeof(lit_pair);
+ mem += m_lits_this_cl.capacity()*sizeof(lit_pair);
+ mem += m_cls.capacity()*sizeof(OccurClause);
+ mem += watch_irred_sizes.capacity()*sizeof(size_t);
+ mem += var_bva_order.mem_used();
+ mem += touched.mem_used();
+ return mem;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/bva.h b/cryptominisat5/cryptominisat-5.6.3/src/bva.h
new file mode 100644
index 000000000..5c3c472d3
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/bva.h
@@ -0,0 +1,176 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __BVA_H__
+#define __BVA_H__
+
+#include "heap.h"
+#include "watched.h"
+#include "clause.h"
+#include "touchlist.h"
+#include <vector>
+using std::vector;
+
+namespace CMSat {
+
+class Solver;
+class OccSimplifier;
+
+class BVA
+{
+public:
+ BVA(Solver* _solver, OccSimplifier* _simplifier);
+ bool bounded_var_addition();
+ size_t mem_used() const;
+
+private:
+ Solver* solver;
+ OccSimplifier* simplifier;
+ vector<uint16_t>& seen;
+ vector<uint8_t>& seen2;
+
+ bool bva_verbosity = 0;
+ size_t bva_worked;
+ size_t bva_simp_size;
+ struct lit_pair{
+ lit_pair(Lit a, Lit b = lit_Undef)
+ {
+ if (b == lit_Undef) {
+ lit1 = a;
+ } else {
+ assert(false && "lits are supposed to be sorted in occur lists");
+ assert(a != b);
+ if (a > b) {
+ std::swap(a, b);
+ }
+ lit1 = a;
+ lit2 = b;
+ }
+ }
+
+ bool operator==(const lit_pair& other) const
+ {
+ return lit1 == other.lit1 && lit2 == other.lit2;
+ }
+
+ unsigned hash(const uint32_t N) const
+ {
+ unsigned long h;
+ h = lit1.toInt();
+
+ if (lit2 == lit_Undef)
+ return h % N;
+
+ h = h*31 + lit2.toInt();
+ return h % N;
+ }
+
+ bool operator!=(const lit_pair& other) const
+ {
+ return !(*this == other);
+ }
+
+ Lit lit1;
+ Lit lit2;
+ };
+ struct PotentialClause {
+ PotentialClause(const lit_pair _lits, const OccurClause cl) :
+ lits(_lits)
+ , occur_cl(cl)
+ {}
+
+ bool operator<(const PotentialClause& other) const
+ {
+ if (lits == other.lits)
+ return false;
+
+ if (lits.lit1 != other.lits.lit1)
+ return lits.lit1 < other.lits.lit1;
+
+ return lits.lit2 < other.lits.lit2;
+ }
+
+ lit_pair lits;
+ OccurClause occur_cl;
+ string to_string(const Solver* solver) const;
+ };
+ struct m_cls_lits_and_red
+ {
+ //Used during removal to lower overhead
+ m_cls_lits_and_red(const vector<Lit>& _lits, bool _red) :
+ lits(_lits)
+ , red(_red)
+ {}
+ vector<Lit> lits;
+ bool red;
+ };
+ size_t calc_watch_irred_size(const Lit lit) const;
+ void calc_watch_irred_sizes();
+ lit_pair most_occuring_lit_in_potential(size_t& num_occur);
+ lit_pair lit_diff_watches(const OccurClause& a, const OccurClause& b);
+ Lit least_occurring_except(const OccurClause& c);
+ bool simplifies_system(const size_t num_occur) const;
+ int simplification_size(
+ const int m_lit_size
+ , const int m_cls_size
+ ) const;
+ void fill_potential(const Lit lit);
+ bool try_bva_on_lit(const Lit lit);
+ bool bva_simplify_system();
+ void update_touched_lits_in_bva();
+ bool add_longer_clause(const Lit lit, const OccurClause& cl);
+ void remove_duplicates_from_m_cls();
+ void remove_matching_clause(
+ const m_cls_lits_and_red& cl_lits
+ , const lit_pair lit_replace
+ );
+ Clause* find_cl_for_bva(
+ const vector<Lit>& torem
+ , const bool red
+ ) const;
+ void fill_m_cls_lits_and_red();
+ vector<Lit> bva_tmp_lits; //To reduce overhead
+ vector<m_cls_lits_and_red> m_cls_lits; //used during removal to lower overhead
+ vector<Lit> to_remove; //to reduce overhead
+ vector<PotentialClause> potential;
+ vector<lit_pair> m_lits;
+ vector<lit_pair> m_lits_this_cl;
+ vector<OccurClause> m_cls;
+ vector<size_t> watch_irred_sizes;
+ struct VarBVAOrder
+ {
+ explicit VarBVAOrder(vector<size_t>& _watch_irred_sizes) :
+ watch_irred_sizes(_watch_irred_sizes)
+ {}
+
+ bool operator()(const uint32_t lit1_uint, const uint32_t lit2_uint) const;
+ vector<size_t>& watch_irred_sizes;
+ };
+ Heap<VarBVAOrder> var_bva_order;
+ TouchList touched;
+
+ int64_t bounded_var_elim_time_limit;
+};
+
+}
+
+#endif //__BVA_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h b/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
new file mode 100644
index 000000000..d74497bd5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clabstraction.h
@@ -0,0 +1,49 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+
+#ifndef __CL_ABSTRACTION__H__
+#define __CL_ABSTRACTION__H__
+
+typedef uint32_t cl_abst_type;
+static const int cl_abst_modulo = 29;
+
+inline cl_abst_type abst_var(const uint32_t v)
+{
+ return 1UL << (v % cl_abst_modulo);
+}
+
+template <class T>
+cl_abst_type calcAbstraction(const T& ps)
+{
+ cl_abst_type abstraction = 0;
+ if (ps.size() > 50) {
+ return ~((cl_abst_type)(0ULL));
+ }
+
+ for (auto l: ps)
+ abstraction |= abst_var(l.var());
+
+ return abstraction;
+}
+
+#endif //__CL_ABSTRACTION__H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clause.h b/cryptominisat5/cryptominisat-5.6.3/src/clause.h
new file mode 100644
index 000000000..617a50e33
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clause.h
@@ -0,0 +1,510 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+
+#ifndef CLAUSE_H
+#define CLAUSE_H
+
+#include <cstdio>
+#include <vector>
+#include <sys/types.h>
+#include <string.h>
+#include <limits>
+
+#include "solverconf.h"
+#include "solvertypes.h"
+#include "constants.h"
+#include "watched.h"
+#include "alg.h"
+#include "clabstraction.h"
+#include "avgcalc.h"
+#include "constants.h"
+#include "searchhist.h"
+
+namespace CMSat {
+
+class ClauseAllocator;
+
+template <class T>
+struct AtecedentData
+{
+ void clear()
+ {
+ *this = AtecedentData<T>();
+ }
+
+ uint64_t num() const
+ {
+ return binRed + binIrred + longIrred + longRed;
+ }
+
+ template<class T2>
+ AtecedentData& operator+=(const AtecedentData<T2>& other)
+ {
+ binRed += other.binRed;
+ binIrred += other.binIrred;
+ longIrred += other.longIrred;
+ longRed += other.longRed;
+
+ glue_long_reds += other.glue_long_reds;
+ size_longs += other.size_longs;
+ age_long_reds += other.age_long_reds;
+ vsids_vars += other.vsids_vars;
+
+ return *this;
+ }
+
+ template<class T2>
+ AtecedentData& operator-=(const AtecedentData<T2>& other)
+ {
+ binRed -= other.binRed;
+ binIrred -= other.binIrred;
+ longIrred -= other.longIrred;
+ longRed -= other.longRed;
+
+ glue_long_reds -= other.glue_long_reds;
+ size_longs -= other.size_longs;
+ age_long_reds -= other.age_long_reds;
+ vsids_vars -= other.vsids_vars;
+
+ return *this;
+ }
+
+ uint32_t sum_size() const
+ {
+ uint32_t sum = 0;
+ sum += binIrred*2;
+ sum += binRed*2;
+ sum += size_longs.get_sum();
+
+ return sum;
+ }
+
+ T binRed = 0;
+ T binIrred = 0;
+ T longIrred = 0;
+ T longRed = 0;
+ AvgCalc<uint32_t> glue_long_reds;
+ AvgCalc<uint32_t> size_longs;
+ AvgCalc<uint32_t> age_long_reds;
+ AvgCalc<double, double> vsids_all_incoming_vars;
+ AvgCalc<double, double> vsids_vars;
+ AvgCalc<double, double> vsids_of_resolving_literals;
+ AvgCalc<double, double> vsids_of_ants;
+};
+
+struct ClauseStats
+{
+ ClauseStats()
+ {
+ glue = 1000;
+ which_red_array = 2;
+ activity = 1;
+ ttl = 0;
+ marked_clause = false;
+ }
+
+ //Stored data
+ uint32_t glue:27;
+ uint32_t marked_clause:1;
+ uint32_t ttl:2;
+ uint32_t which_red_array:2;
+ float activity = 1.0;
+ uint32_t last_touched = 0;
+ #ifdef STATS_NEEDED
+ uint32_t dump_number = std::numeric_limits<uint32_t>::max();
+ int64_t ID = 0;
+ uint64_t introduced_at_conflict = 0; ///<At what conflict number the clause was introduced
+ uint64_t conflicts_made = 0; ///<Number of times caused conflict
+ uint64_t sum_of_branch_depth_conflict = 0;
+ uint64_t propagations_made = 0; ///<Number of times caused propagation
+ uint64_t clause_looked_at = 0; ///<Number of times the clause has been deferenced during propagation
+ uint64_t used_for_uip_creation = 0; ///Number of times the claue was using during 1st UIP generation
+ AtecedentData<uint16_t> antec_data;
+ #endif
+
+ #ifdef STATS_NEEDED
+ void reset_rdb_stats()
+ {
+ ttl = 0;
+ conflicts_made = 0;
+ sum_of_branch_depth_conflict = 0;
+ propagations_made = 0;
+ clause_looked_at = 0;
+ used_for_uip_creation = 0;
+ antec_data.clear();
+ }
+ #endif
+
+ static ClauseStats combineStats(const ClauseStats& first, const ClauseStats& second)
+ {
+ //Create to-be-returned data
+ ClauseStats ret = first;
+
+ //Combine stats
+ ret.glue = std::min(first.glue, second.glue);
+ ret.activity = std::max(first.activity, second.activity);
+ #ifdef STATS_NEEDED
+ ret.introduced_at_conflict = std::min(first.introduced_at_conflict, second.introduced_at_conflict);
+ ret.conflicts_made = first.conflicts_made + second.conflicts_made;
+ ret.sum_of_branch_depth_conflict = first.sum_of_branch_depth_conflict + second.sum_of_branch_depth_conflict;
+ ret.propagations_made = first.propagations_made + second.propagations_made;
+ ret.clause_looked_at = first.clause_looked_at + second.clause_looked_at;
+ ret.used_for_uip_creation = first.used_for_uip_creation + second.used_for_uip_creation;
+ #endif
+ ret.which_red_array = std::min(first.which_red_array, second.which_red_array);
+
+ return ret;
+ }
+};
+
+inline std::ostream& operator<<(std::ostream& os, const ClauseStats& stats)
+{
+
+ os << "glue " << stats.glue << " ";
+ #ifdef STATS_NEEDED
+ os << "conflIntro " << stats.introduced_at_conflict<< " ";
+ os << "numConfl " << stats.conflicts_made<< " ";
+ os << "numProp " << stats.propagations_made<< " ";
+ os << "numLook " << stats.clause_looked_at<< " ";
+ os << "used_for_uip_creation" << stats.used_for_uip_creation << " ";
+ #endif
+
+ return os;
+}
+
+/**
+@brief Holds a clause. Does not allocate space for literals
+
+Literals are allocated by an external allocator that allocates enough space
+for the class that it can hold the literals as well. I.e. it malloc()-s
+ sizeof(Clause)+LENGHT*sizeof(Lit)
+to hold the clause.
+*/
+class Clause
+{
+public:
+ uint16_t isRed:1; ///<Is the clause a redundant clause?
+ uint16_t isRemoved:1; ///<Is this clause queued for removal?
+ uint16_t isFreed:1; ///<Has this clause been marked as freed by the ClauseAllocator ?
+ uint16_t is_distilled:1;
+ uint16_t occurLinked:1;
+ uint16_t must_recalc_abst:1;
+ uint16_t _used_in_xor:1;
+ uint16_t _gauss_temp_cl:1; ///Used ONLY by Gaussian elimination to incicate where a proagation is coming from
+ uint16_t reloced:1;
+
+
+ Lit* getData()
+ {
+ return (Lit*)((char*)this + sizeof(Clause));
+ }
+
+ const Lit* getData() const
+ {
+ return (Lit*)((char*)this + sizeof(Clause));
+ }
+
+public:
+ cl_abst_type abst;
+ ClauseStats stats;
+ uint32_t mySize;
+
+ template<class V>
+ Clause(const V& ps, const uint32_t _introduced_at_conflict
+ #ifdef STATS_NEEDED
+ , const int64_t _ID
+ #endif
+ )
+ {
+ //assert(ps.size() > 2);
+
+ stats.last_touched = _introduced_at_conflict;
+ #ifdef STATS_NEEDED
+ stats.introduced_at_conflict = _introduced_at_conflict;
+ stats.ID = _ID;
+ assert(_ID >= 0);
+ #endif
+ stats.glue = std::min<uint32_t>(stats.glue, ps.size());
+ isFreed = false;
+ mySize = ps.size();
+ isRed = false;
+ isRemoved = false;
+ is_distilled = false;
+ must_recalc_abst = true;
+ _used_in_xor = false;
+ _gauss_temp_cl = false;
+ reloced = false;
+
+ for (uint32_t i = 0; i < ps.size(); i++) {
+ getData()[i] = ps[i];
+ }
+ }
+
+ typedef Lit* iterator;
+ typedef const Lit* const_iterator;
+
+ uint32_t size() const
+ {
+ return mySize;
+ }
+
+ bool gauss_temp_cl() const
+ {
+ return _gauss_temp_cl;
+ }
+
+ void set_gauss_temp_cl()
+ {
+ _gauss_temp_cl = true;
+ }
+
+ bool used_in_xor() const
+ {
+ return _used_in_xor;
+ }
+
+ void set_used_in_xor(const bool val)
+ {
+ _used_in_xor = val;
+ }
+
+ void shrink(const uint32_t i)
+ {
+ assert(i <= size());
+ mySize -= i;
+ if (i > 0)
+ setStrenghtened();
+ }
+
+ void resize (const uint32_t i)
+ {
+ assert(i <= size());
+ if (i == size()) return;
+ mySize = i;
+ setStrenghtened();
+ }
+
+ bool red() const
+ {
+ return isRed;
+ }
+
+ bool freed() const
+ {
+ return isFreed;
+ }
+
+ void reCalcAbstraction()
+ {
+ abst = calcAbstraction(*this);
+ must_recalc_abst = false;
+ }
+
+ void setStrenghtened()
+ {
+ must_recalc_abst = true;
+ }
+
+ void recalc_abst_if_needed()
+ {
+ if (must_recalc_abst) {
+ reCalcAbstraction();
+ }
+ }
+
+ Lit& operator [] (const uint32_t i)
+ {
+ return *(getData() + i);
+ }
+
+ const Lit& operator [] (const uint32_t i) const
+ {
+ return *(getData() + i);
+ }
+
+ void makeIrred()
+ {
+ assert(isRed);
+ #if STATS_NEEDED
+ stats.ID = 0;
+ #endif
+ isRed = false;
+ }
+
+ void makeRed(const uint32_t newGlue, const double init_activity = 1.0)
+ {
+ stats.glue = newGlue;
+ stats.activity = init_activity;
+ isRed = true;
+ }
+
+ void strengthen(const Lit p)
+ {
+ remove(*this, p);
+ setStrenghtened();
+ }
+
+ void add(const Lit p)
+ {
+ mySize++;
+ getData()[mySize-1] = p;
+ setStrenghtened();
+ }
+
+ const Lit* begin() const
+ {
+ #ifdef SLOW_DEBUG
+ assert(!freed());
+ assert(!getRemoved());
+ #endif
+ return getData();
+ }
+
+ Lit* begin()
+ {
+ #ifdef SLOW_DEBUG
+ assert(!freed());
+ assert(!getRemoved());
+ #endif
+ return getData();
+ }
+
+ const Lit* end() const
+ {
+ return getData()+size();
+ }
+
+ Lit* end()
+ {
+ return getData()+size();
+ }
+
+ void setRemoved()
+ {
+ isRemoved = true;
+ }
+
+ bool getRemoved() const
+ {
+ return isRemoved;
+ }
+
+ void unset_removed()
+ {
+ isRemoved = false;
+ }
+
+ void setFreed()
+ {
+ isFreed = true;
+ }
+
+ void combineStats(const ClauseStats& other)
+ {
+ stats = ClauseStats::combineStats(stats, other);
+ }
+
+ void set_distilled(bool distilled)
+ {
+ is_distilled = distilled;
+ }
+
+ bool getdistilled() const
+ {
+ return is_distilled;
+ }
+
+ bool getOccurLinked() const
+ {
+ return occurLinked;
+ }
+
+ void setOccurLinked(bool toset)
+ {
+ occurLinked = toset;
+ }
+
+ void print_extra_stats() const
+ {
+ cout
+ << "Clause size " << std::setw(4) << size();
+ if (red()) {
+ cout << " glue : " << std::setw(4) << stats.glue;
+ }
+ #ifdef STATS_NEEDED
+ cout
+ << " Confls: " << std::setw(10) << stats.conflicts_made
+ << " Props: " << std::setw(10) << stats.propagations_made
+ << " Looked at: " << std::setw(10)<< stats.clause_looked_at
+ << " UIP used: " << std::setw(10)<< stats.used_for_uip_creation;
+ #endif
+ cout << endl;
+ }
+};
+
+inline std::ostream& operator<<(std::ostream& os, const Clause& cl)
+{
+ for (uint32_t i = 0; i < cl.size(); i++) {
+ os << cl[i];
+
+ if (i+1 != cl.size())
+ os << " ";
+ }
+
+ return os;
+}
+
+struct BinaryXor
+{
+ uint32_t vars[2];
+ bool rhs;
+
+ BinaryXor(uint32_t var1, uint32_t var2, const bool _rhs) {
+ if (var1 > var2) {
+ std::swap(var1, var2);
+ }
+ vars[0] = var1;
+ vars[1] = var2;
+ rhs = _rhs;
+ }
+
+ bool operator<(const BinaryXor& other) const
+ {
+ if (vars[0] != other.vars[0]) {
+ return vars[0] < other.vars[0];
+ }
+
+ if (vars[1] != other.vars[1]) {
+ return vars[1] < other.vars[1];
+ }
+
+ if (rhs != other.rhs) {
+ return (int)rhs < (int)other.rhs;
+ }
+ return false;
+ }
+};
+
+} //end namespace
+
+#endif //CLAUSE_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp b/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
new file mode 100644
index 000000000..e1eec758a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.cpp
@@ -0,0 +1,379 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "clauseallocator.h"
+
+#include <stdlib.h>
+#include <algorithm>
+#include <string.h>
+#include <limits>
+#include <cassert>
+#include <cmath>
+#include "solvertypes.h"
+#include "clause.h"
+#include "solver.h"
+#include "searcher.h"
+#include "time_mem.h"
+#include "sqlstats.h"
+#ifdef USE_GAUSS
+#include "EGaussian.h"
+#endif
+
+#ifdef USE_VALGRIND
+#include "valgrind/valgrind.h"
+#include "valgrind/memcheck.h"
+#endif
+
+using namespace CMSat;
+
+using std::pair;
+using std::cout;
+using std::endl;
+
+
+//For mild debug info:
+//#define DEBUG_CLAUSEALLOCATOR
+
+//For listing each and every clause location:
+//#define DEBUG_CLAUSEALLOCATOR2
+
+#define MIN_LIST_SIZE (50000 * (sizeof(Clause) + 4*sizeof(Lit))/sizeof(BASE_DATA_TYPE))
+#define ALLOC_GROW_MULT 1.5
+
+#define MAXSIZE ((1ULL << (EFFECTIVELY_USEABLE_BITS))-1)
+
+ClauseAllocator::ClauseAllocator() :
+ dataStart(NULL)
+ , size(0)
+ , capacity(0)
+ , currentlyUsedSize(0)
+{
+ assert(MIN_LIST_SIZE < MAXSIZE);
+}
+
+/**
+@brief Frees all stacks
+*/
+ClauseAllocator::~ClauseAllocator()
+{
+ free(dataStart);
+}
+
+void* ClauseAllocator::allocEnough(
+ uint32_t num_lits
+) {
+ //Try to quickly find a place at the end of a dataStart
+ uint64_t neededbytes = sizeof(Clause) + sizeof(Lit)*num_lits;
+ uint64_t needed
+ = neededbytes/sizeof(BASE_DATA_TYPE) + (bool)(neededbytes % sizeof(BASE_DATA_TYPE));
+
+ if (size + needed > capacity) {
+ //Grow by default, but don't go under or over the limits
+ uint64_t newcapacity = capacity * ALLOC_GROW_MULT;
+ newcapacity = std::max<size_t>(newcapacity, MIN_LIST_SIZE);
+ while (newcapacity < size+needed) {
+ newcapacity *= ALLOC_GROW_MULT;
+ }
+ assert(newcapacity >= size+needed);
+ newcapacity = std::min<size_t>(newcapacity, MAXSIZE);
+
+ //Oops, not enough space anyway
+ if (newcapacity < size + needed) {
+ std::cerr
+ << "ERROR: memory manager can't handle the load."
+#ifndef LARGE_OFFSETS
+ << " **PLEASE RECOMPILE WITH -DLARGEMEM=ON**"
+#endif
+ << " size: " << size
+ << " needed: " << needed
+ << " newcapacity: " << newcapacity
+ << endl;
+ std::cout
+ << "ERROR: memory manager can't handle the load."
+#ifndef LARGE_OFFSETS
+ << " **PLEASE RECOMPILE WITH -DLARGEMEM=ON**"
+#endif
+ << " size: " << size
+ << " needed: " << needed
+ << " newcapacity: " << newcapacity
+ << endl;
+
+ throw std::bad_alloc();
+ }
+
+ //Reallocate data
+ BASE_DATA_TYPE* new_dataStart;
+ new_dataStart = (BASE_DATA_TYPE*)realloc(
+ dataStart
+ , newcapacity*sizeof(BASE_DATA_TYPE)
+ );
+
+ //Realloc failed?
+ if (new_dataStart == NULL) {
+ std::cerr
+ << "ERROR: while reallocating clause space"
+ << endl;
+
+ throw std::bad_alloc();
+ }
+ dataStart = new_dataStart;
+
+ //Update capacity to reflect the update
+ capacity = newcapacity;
+ }
+
+ //Add clause to the set
+ Clause* pointer = (Clause*)(dataStart + size);
+ size += needed;
+ currentlyUsedSize += needed;
+
+ return pointer;
+}
+
+/**
+@brief Given the pointer of the clause it finds a 32-bit offset for it
+
+Calculates the stack frame and the position of the pointer in the stack, and
+rerturns a 32-bit value that is a concatenation of these two
+*/
+ClOffset ClauseAllocator::get_offset(const Clause* ptr) const
+{
+ return ((BASE_DATA_TYPE*)ptr - dataStart);
+}
+
+/**
+@brief Frees a clause
+
+If clause was binary, it frees it in quite a normal way. If it isn't, then it
+needs to set the data in the Clause that it has been freed, and updates the
+stack it belongs to such that the stack can now that its effectively used size
+is smaller
+
+NOTE: The size of claues can change. Therefore, currentlyUsedSizes can in fact
+be incorrect, since it was incremented by the ORIGINAL size of the clause, but
+when the clause is "freed", it is decremented by the POTENTIALLY SMALLER size
+of the clause. Therefore, the "currentlyUsedSizes" is an overestimation!!
+*/
+void ClauseAllocator::clauseFree(Clause* cl)
+{
+ assert(!cl->freed());
+
+ bool quick_freed = false;
+ #ifdef USE_GAUSS
+ if (cl->gauss_temp_cl()) {
+ uint64_t neededbytes = (sizeof(Clause) + sizeof(Lit)*cl->size());
+ uint64_t needed
+ = neededbytes/sizeof(BASE_DATA_TYPE) + (bool)(neededbytes % sizeof(BASE_DATA_TYPE));
+
+ if (((BASE_DATA_TYPE*)cl + needed) == (dataStart + size)) {
+ size -= needed;
+ currentlyUsedSize -= needed;
+ quick_freed = true;
+ }
+ }
+ #endif
+
+ if (!quick_freed) {
+ cl->setFreed();
+ uint64_t est_num_cl = cl->size();
+ est_num_cl = std::max(est_num_cl, (uint64_t)3); //we sometimes allow gauss to allocate 3-long clauses
+ uint64_t bytes_freed = sizeof(Clause) + est_num_cl*sizeof(Lit);
+ uint64_t elems_freed = bytes_freed/sizeof(BASE_DATA_TYPE) + (bool)(bytes_freed % sizeof(BASE_DATA_TYPE));
+ currentlyUsedSize -= elems_freed;
+ }
+
+ #ifdef VALGRIND_MAKE_MEM_UNDEFINED
+ VALGRIND_MAKE_MEM_UNDEFINED(((char*)cl)+sizeof(Clause), cl->size()*sizeof(Lit));
+ #endif
+}
+
+void ClauseAllocator::clauseFree(ClOffset offset)
+{
+ Clause* cl = ptr(offset);
+ clauseFree(cl);
+}
+
+ClOffset ClauseAllocator::move_cl(
+ ClOffset* newDataStart
+ , ClOffset*& new_ptr
+ , Clause* old
+) const {
+ uint64_t bytesNeeded = sizeof(Clause) + old->size()*sizeof(Lit);
+ uint64_t sizeNeeded = bytesNeeded/sizeof(BASE_DATA_TYPE) + (bool)(bytesNeeded % sizeof(BASE_DATA_TYPE));
+ memcpy(new_ptr, old, sizeNeeded*sizeof(BASE_DATA_TYPE));
+
+ ClOffset new_offset = new_ptr-newDataStart;
+ (*old)[0] = Lit::toLit(new_offset & 0xFFFFFFFF);
+ #ifdef LARGE_OFFSETS
+ (*old)[1] = Lit::toLit((new_offset>>32) & 0xFFFFFFFF);
+ #endif
+ old->reloced = true;
+
+ new_ptr += sizeNeeded;
+ return new_offset;
+}
+
+/**
+@brief If needed, compacts stacks, removing unused clauses
+
+Firstly, the algorithm determines if the number of useless slots is large or
+small compared to the problem size. If it is small, it does nothing. If it is
+large, then it allocates new stacks, copies the non-freed clauses to these new
+stacks, updates all pointers and offsets, and frees the original stacks.
+*/
+void ClauseAllocator::consolidate(
+ Solver* solver
+ , const bool force
+) {
+ //If re-allocation is not really neccessary, don't do it
+ //Neccesities:
+ //1) There is too much memory allocated. Re-allocation will save space
+ // Avoiding segfault (max is 16 outerOffsets, more than 10 is near)
+ //2) There is too much empty, unused space (>30%)
+ if (!force
+ && (float_div(currentlyUsedSize, size) > 0.8 || currentlyUsedSize < (100ULL*1000ULL))
+ ) {
+ if (solver->conf.verbosity >= 3) {
+ cout << "c Not consolidating memory." << endl;
+ }
+ return;
+ }
+ const double myTime = cpuTime();
+
+ //Pointers that will be moved along
+ BASE_DATA_TYPE * const newDataStart = (BASE_DATA_TYPE*)malloc(currentlyUsedSize*sizeof(BASE_DATA_TYPE));
+ BASE_DATA_TYPE * new_ptr = newDataStart;
+
+ assert(sizeof(BASE_DATA_TYPE) % sizeof(Lit) == 0);
+ for(auto& ws: solver->watches) {
+ for(Watched& w: ws) {
+ if (w.isClause()) {
+ Clause* old = ptr(w.get_offset());
+ assert(!old->freed());
+ Lit blocked = w.getBlockedLit();
+ if (old->reloced) {
+ ClOffset new_offset = (*old)[0].toInt();
+ #ifdef LARGE_OFFSETS
+ new_offset += ((uint64_t)(*old)[1].toInt())<<32;
+ #endif
+ w = Watched(new_offset, blocked);
+ } else {
+ ClOffset new_offset = move_cl(newDataStart, new_ptr, old);
+ w = Watched(new_offset, blocked);
+ }
+ }
+ }
+ }
+
+ #ifdef USE_GAUSS
+ for (EGaussian* gauss : solver->gmatrixes) {
+ for(auto& gcl: gauss->clauses_toclear) {
+ Clause* old = ptr(gcl.first);
+ if (old->reloced) {
+ ClOffset new_offset = (*old)[0].toInt();
+ #ifdef LARGE_OFFSETS
+ new_offset += ((uint64_t)(*old)[1].toInt())<<32;
+ #endif
+ gcl.first = new_offset;
+ } else {
+ ClOffset new_offset = move_cl(newDataStart, new_ptr, old);
+ gcl.first = new_offset;
+ }
+ assert(!old->freed());
+ }
+ }
+ #endif //USE_GAUSS
+
+ update_offsets(solver->longIrredCls);
+ for(auto& lredcls: solver->longRedCls) {
+ update_offsets(lredcls);
+ }
+
+ //Fix up propBy
+ for (size_t i = 0; i < solver->nVars(); i++) {
+ VarData& vdata = solver->varData[i];
+ if (vdata.reason.isClause()) {
+ if (vdata.removed == Removed::none
+ && solver->decisionLevel() >= vdata.level
+ && vdata.level != 0
+ && solver->value(i) != l_Undef
+ ) {
+ Clause* old = ptr(vdata.reason.get_offset());
+ assert(!old->freed());
+ ClOffset new_offset = (*old)[0].toInt();
+ #ifdef LARGE_OFFSETS
+ new_offset += ((uint64_t)(*old)[1].toInt())<<32;
+ #endif
+ vdata.reason = PropBy(new_offset);
+ } else {
+ vdata.reason = PropBy();
+ }
+ }
+ }
+
+ //Update sizes
+ const uint64_t old_size = size;
+ size = new_ptr-newDataStart;
+ capacity = currentlyUsedSize;
+ currentlyUsedSize = size;
+ free(dataStart);
+ dataStart = newDataStart;
+
+ const double time_used = cpuTime() - myTime;
+ if (solver->conf.verbosity >= 2) {
+ cout << "c [mem] Consolidated memory ";
+ cout << " old size "; print_value_kilo_mega(old_size*sizeof(BASE_DATA_TYPE));
+ cout << "B new size"; print_value_kilo_mega(size*sizeof(BASE_DATA_TYPE));
+ cout << "B bits of offset:" << std::fixed << std::setprecision(2) << std::log2(size);
+ cout << solver->conf.print_times(time_used)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "consolidate"
+ , time_used
+ );
+ }
+}
+
+void ClauseAllocator::update_offsets(
+ vector<ClOffset>& offsets
+) {
+
+ for(ClOffset& offs: offsets) {
+ Clause* old = ptr(offs);
+ assert(old->reloced);
+ offs = (*old)[0].toInt();
+ #ifdef LARGE_OFFSETS
+ offs += ((uint64_t)(*old)[1].toInt())<<32;
+ #endif
+ }
+}
+
+size_t ClauseAllocator::mem_used() const
+{
+ uint64_t mem = 0;
+ mem += capacity*sizeof(BASE_DATA_TYPE);
+
+ return mem;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h b/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
new file mode 100644
index 000000000..407ea8954
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clauseallocator.h
@@ -0,0 +1,128 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef CLAUSEALLOCATOR_H
+#define CLAUSEALLOCATOR_H
+
+
+#include "constants.h"
+#include "cloffset.h"
+#include "watched.h"
+#include "clause.h"
+
+#include <stdlib.h>
+#include <map>
+#include <vector>
+
+namespace CMSat {
+
+class Clause;
+class Solver;
+class PropEngine;
+
+using std::map;
+using std::vector;
+
+/**
+@brief Allocates memory for (xor) clauses
+
+This class allocates memory in large chunks, then distributes it to clauses when
+needed. When instructed, it consolidates the unused space (i.e. clauses free()-ed).
+Essentially, it is a stack-like allocator for clauses. It is useful to have
+this, because this way, we can address clauses according to their number,
+which is 32-bit, instead of their address, which might be 64-bit
+*/
+class ClauseAllocator {
+ public:
+ ClauseAllocator();
+ ~ClauseAllocator();
+
+ template<class T>
+ Clause* Clause_new(const T& ps, const uint32_t conflictNum
+ #ifdef STATS_NEEDED
+ , const int64_t ID
+ #endif
+ ) {
+ if (ps.size() > (0x01UL << 28)) {
+ throw CMSat::TooLongClauseError();
+ }
+
+ void* mem = allocEnough(ps.size());
+ Clause* real = new (mem) Clause(ps, conflictNum
+ #ifdef STATS_NEEDED
+ , ID
+ #endif
+ );
+
+ return real;
+ }
+
+ ClOffset get_offset(const Clause* ptr) const;
+
+ inline Clause* ptr(const ClOffset offset) const
+ {
+ return (Clause*)(&dataStart[offset]);
+ }
+
+ void clauseFree(Clause* c); ///Frees memory and associated clause number
+ void clauseFree(ClOffset offset);
+
+ void consolidate(
+ Solver* solver
+ , const bool force = false
+ );
+
+ size_t mem_used() const;
+
+ private:
+ void update_offsets(vector<ClOffset>& offsets);
+
+ ClOffset move_cl(
+ ClOffset* newDataStart
+ , ClOffset*& new_ptr
+ , Clause* old
+ ) const;
+
+ BASE_DATA_TYPE* dataStart; ///<Stack starts at these positions
+ uint64_t size; ///<The number of BASE_DATA_TYPE datapieces currently used in each stack
+ /**
+ @brief Clauses in the stack had this size when they were allocated
+ This my NOT be their current size: the clauses may be shrinked during
+ the running of the solver. Therefore, it is imperative that their orignal
+ size is saved. This way, we can later move clauses around.
+ */
+ uint64_t capacity; ///<The number of BASE_DATA_TYPE datapieces allocated
+ /**
+ @brief The estimated used size of the stack
+ This is incremented by clauseSize each time a clause is allocated, and
+ decremetented by clauseSize each time a clause is deallocated. The
+ problem is, that clauses can shrink, and thus this value will be an
+ overestimation almost all the time
+ */
+ uint64_t currentlyUsedSize;
+
+ void* allocEnough(const uint32_t num_lits);
+};
+
+} //end namespace
+
+#endif //CLAUSEALLOCATOR_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp b/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
new file mode 100644
index 000000000..b158cf59a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.cpp
@@ -0,0 +1,387 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "clausecleaner.h"
+#include "clauseallocator.h"
+#include "solver.h"
+#include "cryptominisat5/solvertypesmini.h"
+
+using namespace CMSat;
+
+//#define DEBUG_CLEAN
+//#define VERBOSE_DEBUG
+
+ClauseCleaner::ClauseCleaner(Solver* _solver) :
+ solver(_solver)
+{
+}
+
+bool ClauseCleaner::satisfied(const Watched& watched, Lit lit)
+{
+ assert(watched.isBin());
+ if (solver->value(lit) == l_True) return true;
+ if (solver->value(watched.lit2()) == l_True) return true;
+ return false;
+}
+
+void ClauseCleaner::clean_binary_implicit(
+ Watched& ws
+ , Watched*& j
+ , const Lit lit
+) {
+ if (satisfied(ws, lit)) {
+ //Only delete once
+ if (lit < ws.lit2()) {
+ (*solver->drat) << del << lit << ws.lit2() << fin;
+ }
+
+ if (ws.red()) {
+ impl_data.remLBin++;
+ } else {
+ impl_data.remNonLBin++;
+ }
+ } else {
+ assert(solver->value(ws.lit2()) == l_Undef);
+ assert(solver->value(lit) == l_Undef);
+ *j++ = ws;
+ }
+}
+
+void ClauseCleaner::clean_implicit_watchlist(
+ watch_subarray& watch_list
+ , const Lit lit
+) {
+ Watched* i = watch_list.begin();
+ Watched* j = i;
+ for (Watched* end2 = watch_list.end(); i != end2; i++) {
+ if (i->isClause()) {
+ *j++ = *i;
+ continue;
+ }
+
+ if (i->isBin()) {
+ clean_binary_implicit(*i, j, lit);
+ continue;
+ }
+ }
+ watch_list.shrink_(i - j);
+}
+
+void ClauseCleaner::clean_implicit_clauses()
+{
+ if (solver->conf.verbosity > 15) {
+ cout << "c cleaning implicit clauses" << endl;
+ }
+
+ assert(solver->decisionLevel() == 0);
+ impl_data = ImplicitData();
+ size_t wsLit = 0;
+ size_t wsLit2 = 2;
+ for (size_t end = solver->watches.size()
+ ; wsLit != end
+ ; wsLit++, wsLit2++
+ ) {
+ if (wsLit2 < end
+ && !solver->watches[Lit::toLit(wsLit2)].empty()
+ ) {
+ solver->watches.prefetch(Lit::toLit(wsLit2).toInt());
+ }
+
+ const Lit lit = Lit::toLit(wsLit);
+ watch_subarray ws = solver->watches[lit];
+ if (ws.empty())
+ continue;
+
+ clean_implicit_watchlist(ws, lit);
+ }
+ impl_data.update_solver_stats(solver);
+
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_implicit_stats();
+ #endif
+}
+
+void ClauseCleaner::clean_clauses_inter(vector<ClOffset>& cs)
+{
+ assert(solver->decisionLevel() == 0);
+ assert(solver->prop_at_head());
+
+ if (solver->conf.verbosity > 15) {
+ cout << "Cleaning clauses in vector<>" << endl;
+ }
+
+ vector<ClOffset>::iterator s, ss, end;
+ size_t at = 0;
+ for (s = ss = cs.begin(), end = cs.end(); s != end; ++s, ++at) {
+ if (at + 1 < cs.size()) {
+ Clause* pre_cl = solver->cl_alloc.ptr(cs[at+1]);
+ __builtin_prefetch(pre_cl);
+ }
+
+ const ClOffset off = *s;
+ Clause& cl = *solver->cl_alloc.ptr(off);
+
+ const Lit origLit1 = cl[0];
+ const Lit origLit2 = cl[1];
+ const auto origSize = cl.size();
+ const bool red = cl.red();
+
+ if (clean_clause(cl)) {
+ solver->watches.smudge(origLit1);
+ solver->watches.smudge(origLit2);
+ cl.setRemoved();
+ if (red) {
+ solver->litStats.redLits -= origSize;
+ } else {
+ solver->litStats.irredLits -= origSize;
+ }
+ delayed_free.push_back(off);
+ } else {
+ *ss++ = *s;
+ }
+ }
+ cs.resize(cs.size() - (s-ss));
+}
+
+inline bool ClauseCleaner::clean_clause(Clause& cl)
+{
+ assert(cl.size() > 2);
+ (*solver->drat) << deldelay << cl << fin;
+
+ #ifdef SLOW_DEBUG
+ uint32_t num_false_begin = 0;
+ Lit l1 = cl[0];
+ Lit l2 = cl[1];
+ num_false_begin += solver->value(cl[0]) == l_False;
+ num_false_begin += solver->value(cl[1]) == l_False;
+ #endif
+
+ Lit *i, *j, *end;
+ uint32_t num = 0;
+ for (i = j = cl.begin(), end = i + cl.size(); i != end; i++, num++) {
+ lbool val = solver->value(*i);
+ if (val == l_Undef) {
+ *j++ = *i;
+ continue;
+ }
+
+ if (val == l_True) {
+ (*solver->drat) << findelay;
+ return true;
+ }
+ }
+ if (i != j) {
+ cl.shrink(i-j);
+ (*solver->drat) << add << cl
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+ } else {
+ solver->drat->forget_delay();
+ }
+
+ assert(cl.size() > 1);
+ assert(solver->value(cl[0]) == l_Undef);
+ assert(solver->value(cl[1]) == l_Undef);
+
+ #ifdef SLOW_DEBUG
+ //no l_True, so first 2 of orig must have been l_Undef
+ if (num_false_begin != 0) {
+ cout << "val " << l1 << ":" << solver->value(l1) << endl;
+ cout << "val " << l2 << ":" << solver->value(l2) << endl;
+ }
+ assert(num_false_begin == 0 && "Propagation wasn't full? Watch lit was l_False and clause wasn't satisfied");
+ #endif
+
+ if (i != j) {
+ if (cl.size() == 2) {
+ solver->attach_bin_clause(cl[0], cl[1], cl.red());
+ return true;
+ } else {
+ if (cl.red()) {
+ solver->litStats.redLits -= i-j;
+ } else {
+ solver->litStats.irredLits -= i-j;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool ClauseCleaner::satisfied(const Clause& cl) const
+{
+ for (uint32_t i = 0; i != cl.size(); i++)
+ if (solver->value(cl[i]) == l_True)
+ return true;
+ return false;
+}
+
+void ClauseCleaner::ImplicitData::update_solver_stats(Solver* solver)
+{
+ for(const BinaryClause& bincl: toAttach) {
+ assert(solver->value(bincl.getLit1()) == l_Undef);
+ assert(solver->value(bincl.getLit2()) == l_Undef);
+ solver->attach_bin_clause(bincl.getLit1(), bincl.getLit2(), bincl.isRed());
+ }
+
+ assert(remNonLBin % 2 == 0);
+ assert(remLBin % 2 == 0);
+ solver->binTri.irredBins -= remNonLBin/2;
+ solver->binTri.redBins -= remLBin/2;
+}
+
+void ClauseCleaner::clean_clauses_pre()
+{
+ assert(solver->watches.get_smudged_list().empty());
+ assert(delayed_free.empty());
+}
+
+void ClauseCleaner::clean_clauses_post()
+{
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ for(ClOffset off: delayed_free) {
+ solver->cl_alloc.clauseFree(off);
+ }
+ delayed_free.clear();
+}
+
+void ClauseCleaner::remove_and_clean_all()
+{
+ double myTime = cpuTime();
+ assert(solver->okay());
+ assert(solver->prop_at_head());
+
+ clean_implicit_clauses();
+
+ clean_clauses_pre();
+ clean_clauses_inter(solver->longIrredCls);
+ for(auto& lredcls: solver->longRedCls) {
+ clean_clauses_inter(lredcls);
+ }
+ clean_clauses_post();
+
+
+ #ifndef NDEBUG
+ //Once we have cleaned the watchlists
+ //no watchlist whose lit is set may be non-empty
+ size_t wsLit = 0;
+ for(watch_array::iterator
+ it = solver->watches.begin(), end = solver->watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ const Lit lit = Lit::toLit(wsLit);
+ if (solver->value(lit) != l_Undef) {
+ if (!it->empty()) {
+ cout << "ERROR watches size: " << it->size() << endl;
+ for(const auto& w: *it) {
+ cout << "ERROR w: " << w << endl;
+ }
+ }
+ assert(it->empty());
+ }
+ }
+ #endif
+
+ if (solver->conf.verbosity >= 2) {
+ cout
+ << "c [clean] T: "
+ << std::fixed << std::setprecision(4)
+ << (cpuTime() - myTime)
+ << " s" << endl;
+ }
+}
+
+
+bool ClauseCleaner::clean_one_xor(Xor& x)
+{
+ bool rhs = x.rhs;
+ size_t i = 0;
+ size_t j = 0;
+ for(size_t size = x.size(); i < size; i++) {
+ uint32_t var = x[i];
+ if (solver->value(var) != l_Undef) {
+ rhs ^= solver->value(var) == l_True;
+ } else {
+ x[j++] = var;
+ }
+ }
+ x.resize(j);
+ x.rhs = rhs;
+
+ switch(x.size()) {
+ case 0:
+ solver->ok &= !x.rhs;
+ return false;
+
+ case 1: {
+ solver->fully_enqueue_this(Lit(x[0], !x.rhs));
+ return false;
+ }
+ case 2: {
+ solver->add_xor_clause_inter(vars_to_lits(x), x.rhs, true);
+ return false;
+ }
+ default: {
+ return true;
+ }
+ }
+}
+
+bool ClauseCleaner::clean_xor_clauses(vector<Xor>& xors)
+{
+ assert(solver->ok);
+ #ifdef VERBOSE_DEBUG
+ cout << "(" << matrix_no << ") Cleaning gauss clauses" << endl;
+ for(Xor& x : xors) {
+ cout << "orig XOR: " << x << endl;
+ }
+ #endif
+
+ size_t last_trail = std::numeric_limits<size_t>::max();
+ while(last_trail != solver->trail_size()) {
+ last_trail = solver->trail_size();
+ size_t i = 0;
+ size_t j = 0;
+ for(size_t size = xors.size(); i < size; i++) {
+ Xor& x = xors[i];
+ const bool keep = clean_one_xor(x);
+ if (!solver->ok) {
+ return false;
+ }
+
+ if (keep) {
+ xors[j++] = x;
+ }
+ }
+ xors.resize(j);
+
+ #ifdef VERBOSE_DEBUG
+ for(Xor& x : xors) {
+ cout << "cleaned XOR: " << x << endl;
+ }
+ #endif
+ }
+ return solver->okay();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h b/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
new file mode 100644
index 000000000..06c5adf91
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clausecleaner.h
@@ -0,0 +1,90 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef CLAUSECLEANER_H
+#define CLAUSECLEANER_H
+
+#include "constants.h"
+#include "watched.h"
+#include "watcharray.h"
+#include "clause.h"
+#include "xor.h"
+#include <vector>
+using std::vector;
+
+namespace CMSat {
+
+class Solver;
+
+/**
+@brief Cleans clauses from false literals & removes satisfied clauses
+*/
+class ClauseCleaner
+{
+ public:
+ ClauseCleaner(Solver* solver);
+
+ void clean_implicit_clauses();
+ void remove_and_clean_all();
+ bool satisfied(const Clause& c) const;
+ bool clean_xor_clauses(vector<Xor>& xors);
+
+ private:
+ bool clean_one_xor(Xor& x);
+
+ //Implicit cleaning
+ struct ImplicitData
+ {
+ uint64_t remNonLBin = 0;
+ uint64_t remLBin = 0;
+
+ //We can only attach these in delayed mode, otherwise we would
+ //need to manipulate the watchlist we are going through
+ vector<BinaryClause> toAttach;
+
+ void update_solver_stats(Solver* solver);
+ };
+ ImplicitData impl_data;
+ void clean_implicit_watchlist(
+ watch_subarray& watch_list
+ , const Lit lit
+ );
+ void clean_binary_implicit(
+ Watched& ws
+ , Watched*& j
+ , const Lit lit
+ );
+
+ void clean_clauses_pre();
+ void clean_clauses_post();
+ void clean_clauses_inter(vector<ClOffset>& cs);
+
+ bool satisfied(const Watched& watched, Lit lit);
+ bool clean_clause(Clause& c);
+ vector<ClOffset> delayed_free;
+
+ Solver* solver;
+};
+
+} //end namespace
+
+#endif //CLAUSECLEANER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp b/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
new file mode 100644
index 000000000..6fe90543b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.cpp
@@ -0,0 +1,312 @@
+/******************************************
+Copyright (c) 2018, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "clausedumper.h"
+#include "solver.h"
+#include "occsimplifier.h"
+#include "varreplacer.h"
+#include "comphandler.h"
+
+using namespace CMSat;
+
+void ClauseDumper::write_unsat_file()
+{
+ *outfile
+ << "p cnf 0 1\n"
+ << "0\n";
+}
+
+void ClauseDumper::open_file_and_write_sat(const std::string& fname)
+{
+ open_dump_file(fname);
+ *outfile
+ << "p cnf 0 0\n";
+ delete outfile;
+ outfile = NULL;
+}
+
+void ClauseDumper::open_file_and_write_unsat(const std::string& fname)
+{
+ open_dump_file(fname);
+ *outfile
+ << "p cnf 0 1\n"
+ << "0\n";
+ delete outfile;
+ outfile = NULL;
+}
+
+void ClauseDumper::open_file_and_dump_irred_clauses(const string& irredDumpFname)
+{
+ open_dump_file(irredDumpFname);
+ try {
+ if (!solver->okay()) {
+ write_unsat_file();
+ } else {
+ dump_irred_cls(true);
+ }
+ } catch (std::ifstream::failure& e) {
+ cout
+ << "Error writing clause dump to file: " << e.what()
+ << endl;
+ std::exit(-1);
+ }
+
+ delete outfile;
+ outfile = NULL;
+}
+
+void ClauseDumper::open_file_and_dump_red_clauses(const string& redDumpFname)
+{
+ open_dump_file(redDumpFname);
+ try {
+ if (!solver->okay()) {
+ write_unsat_file();
+ } else {
+ dump_red_cls(true);
+ }
+ } catch (std::ifstream::failure& e) {
+ cout
+ << "Error writing clause dump to file: " << e.what()
+ << endl;
+ std::exit(-1);
+ }
+ delete outfile;
+ outfile = NULL;
+}
+
+void ClauseDumper::open_file_and_dump_irred_clauses_preprocessor(const string& irredDumpFname)
+{
+ open_dump_file(irredDumpFname);
+
+ try {
+ if (!solver->okay()) {
+ write_unsat_file();
+ } else {
+ size_t num_cls = 0;
+ num_cls += solver->longIrredCls.size();
+ num_cls += solver->binTri.irredBins;
+ vector<Lit> units = solver->get_toplevel_units_internal(false);
+ num_cls += units.size();
+ num_cls += solver->undef_must_set_vars.size();
+ num_cls += solver->varReplacer->print_equivalent_literals(false)*2;
+
+ *outfile
+ << "p cnf " << solver->nVars() << " " << num_cls << "\n";
+
+ //dump unit clauses
+ *outfile << "c ------------ unit clauses" << endl;
+ for(Lit l: units) {
+ *outfile << l << " 0" << "\n";
+ }
+
+ dump_irred_cls_for_preprocessor(false);
+ }
+ } catch (std::ifstream::failure& e) {
+ cout
+ << "Error writing clause dump to file: " << e.what()
+ << endl;
+ std::exit(-1);
+ }
+ delete outfile;
+ outfile = NULL;
+}
+
+void ClauseDumper::dump_red_cls(bool outer_numbering)
+{
+ if (solver->get_num_bva_vars() > 0) {
+ std::cerr << "ERROR: cannot make meaningful dump with BVA turned on." << endl;
+ exit(-1);
+ }
+
+ *outfile << "c --- c red bin clauses" << endl;
+ dump_bin_cls(true, false, outer_numbering);
+
+ *outfile << "c ----- red long cls locked in the DB" << endl;
+ dump_clauses(solver->longRedCls[0], outer_numbering);
+
+ dump_eq_lits(outer_numbering);
+}
+
+void ClauseDumper::dump_irred_cls(bool outer_numbering)
+{
+ if (solver->get_num_bva_vars() > 0) {
+ std::cerr << "ERROR: cannot make meaningful dump with BVA turned on." << endl;
+ exit(-1);
+ }
+
+ dump_unit_cls(outer_numbering);
+
+ dump_irred_cls_for_preprocessor(outer_numbering);
+
+ *outfile << "c ------------------ previously eliminated variables" << endl;
+ dump_blocked_clauses(outer_numbering);
+
+ *outfile << "c ---------- clauses in components" << endl;
+ dump_component_clauses(outer_numbering);
+
+ dump_vars_appearing_inverted(outer_numbering);
+}
+
+void ClauseDumper::dump_unit_cls(bool outer_numbering)
+{
+ assert(outer_numbering);
+ *outfile << "c --------- unit clauses" << endl;
+
+ //'trail' cannot be trusted between 0....size()
+ vector<Lit> lits = solver->get_zero_assigned_lits();
+ for(Lit lit: lits) {
+ *outfile << lit << " 0\n";
+ }
+}
+
+void ClauseDumper::dump_blocked_clauses(bool outer_numbering) {
+ assert(outer_numbering);
+ if (solver->conf.perform_occur_based_simp) {
+ solver->occsimplifier->dump_blocked_clauses(outfile);
+ }
+}
+
+void ClauseDumper::dump_component_clauses(bool outer_numbering)
+{
+ assert(outer_numbering);
+ if (solver->compHandler) {
+ solver->compHandler->dump_removed_clauses(outfile);
+ }
+}
+
+void ClauseDumper::open_dump_file(const std::string& filename)
+{
+ delete outfile;
+ outfile = NULL;
+ std::ofstream* f = new std::ofstream;
+ f->open(filename.c_str());
+ if (!f->good()) {
+ cout
+ << "Cannot open file '"
+ << filename
+ << "' for writing. exiting"
+ << endl;
+ std::exit(-1);
+ }
+ f->exceptions(std::ifstream::failbit | std::ifstream::badbit);
+ outfile = f;
+}
+
+void ClauseDumper::dump_bin_cls(
+ const bool dumpRed
+ , const bool dumpIrred
+ , const bool outer_number
+) {
+ size_t wsLit = 0;
+ for (watch_array::const_iterator
+ it = solver->watches.begin(), end = solver->watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ Lit lit = Lit::toLit(wsLit);
+ watch_subarray_const ws = *it;
+
+ //Each element in the watchlist
+ for (const Watched* it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ //Only dump binaries
+ if (it2->isBin() && lit < it2->lit2()) {
+ bool toDump = false;
+ if (it2->red() && dumpRed) toDump = true;
+ if (!it2->red() && dumpIrred) toDump = true;
+
+ if (toDump) {
+ tmpCl.clear();
+ tmpCl.push_back(lit);
+ tmpCl.push_back(it2->lit2());
+ if (outer_number) {
+ tmpCl[0] = solver->map_inter_to_outer(tmpCl[0]);
+ tmpCl[1] = solver->map_inter_to_outer(tmpCl[1]);
+ }
+
+ *outfile
+ << tmpCl[0] << " "
+ << tmpCl[1]
+ << " 0\n";
+ }
+ }
+ }
+ }
+}
+
+void ClauseDumper::dump_eq_lits(bool outer_numbering)
+{
+ *outfile << "c ------------ equivalent literals" << endl;
+ solver->varReplacer->print_equivalent_literals(outer_numbering, outfile);
+}
+
+void ClauseDumper::dump_clauses(
+ const vector<ClOffset>& cls
+ , const bool outer_numbering
+) {
+ for(vector<ClOffset>::const_iterator
+ it = cls.begin(), end = cls.end()
+ ; it != end
+ ; ++it
+ ) {
+ Clause* cl = solver->cl_alloc.ptr(*it);
+ if (outer_numbering) {
+ *outfile << solver->clause_outer_numbered(*cl) << " 0\n";
+ } else {
+ *outfile << *cl << " 0\n";
+ }
+ }
+}
+
+void ClauseDumper::dump_vars_appearing_inverted(bool outer_numbering)
+{
+ *outfile << "c ------------ vars appearing inverted in cls" << endl;
+ for(size_t i = 0; i < solver->undef_must_set_vars.size(); i++) {
+ if (!solver->undef_must_set_vars[i] ||
+ solver->map_outer_to_inter(i) >= solver->nVars() ||
+ solver->value(solver->map_outer_to_inter(i)) != l_Undef
+ ) {
+ continue;
+ }
+
+ Lit l = Lit(i, false);
+ if (!outer_numbering) {
+ l = solver->map_outer_to_inter(l);
+ }
+ *outfile << l << " " << ~l << " 0" << "\n";
+ }
+}
+
+void ClauseDumper::dump_irred_cls_for_preprocessor(const bool outer_numbering)
+{
+ dump_vars_appearing_inverted(outer_numbering);
+
+ *outfile << "c -------- irred bin cls" << endl;
+ dump_bin_cls(false, true, outer_numbering);
+
+ *outfile << "c -------- irred long cls" << endl;
+ dump_clauses(solver->longIrredCls, outer_numbering);
+
+ dump_eq_lits(outer_numbering);
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h b/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
new file mode 100644
index 000000000..21bfac76d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clausedumper.h
@@ -0,0 +1,90 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CLAUSEDUMPER_H__
+#define __CLAUSEDUMPER_H__
+
+#include <fstream>
+#include <vector>
+#include <limits>
+#include "cryptominisat5/solvertypesmini.h"
+#include "cloffset.h"
+
+using std::vector;
+
+namespace CMSat {
+
+class Solver;
+
+class ClauseDumper
+{
+public:
+ explicit ClauseDumper(const Solver* _solver) :
+ solver(_solver)
+ {}
+
+ ~ClauseDumper() {
+ if (outfile) {
+ outfile->close();
+ delete outfile;
+ }
+ }
+
+ void open_file_and_write_unsat(const std::string& fname);
+ void open_file_and_write_sat(const std::string& fname);
+ void open_file_and_dump_irred_clauses_preprocessor(const std::string& fname);
+ void open_file_and_dump_irred_clauses(const std::string& fname);
+ void open_file_and_dump_red_clauses(const std::string& fname);
+
+
+private:
+ const Solver* solver;
+ std::ofstream* outfile = NULL;
+
+ void write_unsat_file();
+ void dump_irred_cls_for_preprocessor(bool outer_number);
+ void open_dump_file(const std::string& filename);
+ void dump_bin_cls(
+ const bool dumpRed
+ , const bool dumpIrred
+ , const bool outer_number
+ );
+
+ void dump_red_cls(bool outer_numbering);
+ void dump_eq_lits(bool outer_numbering);
+ void dump_unit_cls(bool outer_numbering);
+ void dump_blocked_clauses(bool outer_numbering);
+ void dump_irred_cls(bool outer_numbering);
+ void dump_component_clauses(bool outer_numbering);
+ void dump_vars_appearing_inverted(bool outer_numbering);
+ void dump_clauses(
+ const vector<ClOffset>& cls
+ , const bool outer_number
+ );
+
+ vector<Lit> tmpCl;
+
+};
+
+}
+
+#endif //__CLAUSEDUMPER_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp b/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
new file mode 100644
index 000000000..213e4b7d4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.cpp
@@ -0,0 +1,54 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "clauseusagestats.h"
+
+#include <iostream>
+#include <iomanip>
+
+using std::cout;
+using std::endl;
+
+using namespace CMSat;
+
+void ClauseUsageStats::print() const
+{
+ cout
+ #ifdef STATS_NEEDED
+ << " cls visit: "
+ << std::setw(7) << sumLookedAt/1000UL
+ << "K"
+ #endif
+
+ << " prop: "
+ << std::setw(5) << sumProp/1000UL
+ << "K"
+
+ << " conf: "
+ << std::setw(5) << sumConfl/1000UL
+ << "K"
+
+ << " UIP used: "
+ << std::setw(5) << sumUsedUIP/1000UL
+ << "K"
+ << endl;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h b/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
new file mode 100644
index 000000000..795a7b871
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/clauseusagestats.h
@@ -0,0 +1,74 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#ifndef __CLAUSEUSAGESTATS_H__
+#define __CLAUSEUSAGESTATS_H__
+
+#include <cstdint>
+#include "clause.h"
+
+namespace CMSat {
+
+struct ClauseUsageStats
+{
+ uint64_t sumPropAndConfl() const
+ {
+ return sumProp + sumConfl;
+ }
+
+ uint64_t num = 0;
+ uint64_t sumProp = 0;
+ uint64_t sumConfl = 0;
+ uint64_t sumLookedAt = 0;
+ uint64_t sumUsedUIP = 0;
+
+ ClauseUsageStats& operator+=(const ClauseUsageStats& other)
+ {
+ num += other.num;
+ sumProp += other.sumProp;
+ sumConfl += other.sumConfl;
+ sumLookedAt += other.sumLookedAt;
+ sumUsedUIP += other.sumUsedUIP;
+
+ return *this;
+ }
+
+ void addStat(const Clause&
+ #ifdef STATS_NEEDED
+ cl
+ #endif
+ ) {
+ num++;
+ #ifdef STATS_NEEDED
+ sumConfl += cl.stats.conflicts_made;
+ sumProp += cl.stats.propagations_made;
+ sumLookedAt += cl.stats.clause_looked_at;
+ sumUsedUIP += cl.stats.used_for_uip_creation;
+ #endif
+ }
+ void print() const;
+};
+
+}
+
+#endif //__CLAUSEUSAGESTATS_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h b/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
new file mode 100644
index 000000000..11032b10a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cloffset.h
@@ -0,0 +1,42 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#ifndef CLAUSEOFFSET_H
+#define CLAUSEOFFSET_H
+
+#include "constants.h"
+
+namespace CMSat {
+
+#ifndef LARGE_OFFSETS
+typedef uint32_t ClOffset;
+#else
+typedef uint64_t ClOffset;
+#endif
+#define CL_OFFSET_MAX (std::numeric_limits<ClOffset>::max())
+
+
+
+}
+
+#endif //CLAUSEOFFSET_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp b/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
new file mode 100644
index 000000000..3257ca78d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cnf.cpp
@@ -0,0 +1,707 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "cnf.h"
+
+#include <stdexcept>
+
+#include "vardata.h"
+#include "solvertypes.h"
+#include "clauseallocator.h"
+#include "watchalgos.h"
+#include "varupdatehelper.h"
+#include "time_mem.h"
+
+using namespace CMSat;
+
+void CNF::new_var(const bool bva, const uint32_t orig_outer)
+{
+ if (nVars() >= 1ULL<<28) {
+ cout << "ERROR! Variable requested is far too large" << endl;
+ throw std::runtime_error("ERROR! Variable requested is far too large");
+ }
+
+ minNumVars++;
+ enlarge_minimal_datastructs();
+ if (conf.doCache) {
+ implCache.new_var();
+ }
+ if (conf.doStamp) {
+ stamp.new_var();
+ }
+
+ if (orig_outer == std::numeric_limits<uint32_t>::max()) {
+ //completely new var
+ enlarge_nonminimial_datastructs();
+
+ uint32_t minVar = nVars()-1;
+ uint32_t maxVar = nVarsOuter()-1;
+ interToOuterMain.push_back(maxVar);
+ const uint32_t x = interToOuterMain[minVar];
+ interToOuterMain[minVar] = maxVar;
+ interToOuterMain[maxVar] = x;
+
+ outerToInterMain.push_back(maxVar);
+ outerToInterMain[maxVar] = minVar;
+ outerToInterMain[x] = maxVar;
+
+ swapVars(nVarsOuter()-1);
+ varData[nVars()-1].is_bva = bva;
+ if (bva) {
+ num_bva_vars ++;
+ } else {
+ outer_to_with_bva_map.push_back(nVarsOuter() - 1);
+ }
+ } else {
+ //Old var, re-inserted
+ assert(orig_outer < nVarsOuter());
+
+ const uint32_t minVar = nVars()-1;
+ uint32_t k = interToOuterMain[minVar];
+ uint32_t z = outerToInterMain[orig_outer];
+ interToOuterMain[minVar] = orig_outer;
+ interToOuterMain[z] = k;
+
+ outerToInterMain[k] = z;
+ outerToInterMain[orig_outer] = minVar;
+
+ swapVars(z);
+ }
+
+ #ifdef SLOW_DEBUG
+ test_reflectivity_of_renumbering();
+ #endif
+}
+
+void CNF::new_vars(const size_t n)
+{
+ if (nVars() + n >= 1ULL<<28) {
+ cout << "ERROR! Variable requested is far too large" << endl;
+ std::exit(-1);
+ }
+
+ if (conf.doCache) {
+ implCache.new_vars(n);
+ }
+ if (conf.doStamp) {
+ stamp.new_vars(n);
+ }
+
+ minNumVars += n;
+ enlarge_minimal_datastructs(n);
+ enlarge_nonminimial_datastructs(n);
+
+ size_t inter_at = interToOuterMain.size();
+ interToOuterMain.insert(interToOuterMain.end(), n, 0);
+
+ size_t outer_at = outerToInterMain.size();
+ outerToInterMain.insert(outerToInterMain.end(), n, 0);
+
+ size_t outer_to_with_bva_at = outer_to_with_bva_map.size();
+ outer_to_with_bva_map.insert(outer_to_with_bva_map.end(), n, 0);
+
+ for(int i = n-1; i >= 0; i--) {
+ const uint32_t minVar = nVars()-i-1;
+ const uint32_t maxVar = nVarsOuter()-i-1;
+
+ interToOuterMain[inter_at++] = maxVar;
+ const uint32_t x = interToOuterMain[minVar];
+ interToOuterMain[minVar] = maxVar;
+ interToOuterMain[maxVar] = x;
+
+ outerToInterMain[outer_at++] = maxVar;
+ outerToInterMain[maxVar] = minVar;
+ outerToInterMain[x] = maxVar;
+
+ swapVars(nVarsOuter()-i-1, i);
+ varData[nVars()-i-1].is_bva = false;
+ outer_to_with_bva_map[outer_to_with_bva_at++] = nVarsOuter()-i-1;
+ }
+
+ #ifdef SLOW_DEBUG
+ test_reflectivity_of_renumbering();
+ #endif
+}
+
+void CNF::swapVars(const uint32_t which, const int off_by)
+{
+ std::swap(assigns[nVars()-off_by-1], assigns[which]);
+ std::swap(varData[nVars()-off_by-1], varData[which]);
+}
+
+void CNF::enlarge_nonminimial_datastructs(size_t n)
+{
+ assigns.insert(assigns.end(), n, l_Undef);
+ varData.insert(varData.end(), n, VarData());
+ depth.insert(depth.end(), n, 0);
+}
+
+void CNF::enlarge_minimal_datastructs(size_t n)
+{
+ watches.insert(2*n);
+ #ifdef USE_GAUSS
+ gwatches.insert(2*n);
+ #endif
+ seen.insert(seen.end(), 2*n, 0);
+ seen2.insert(seen2.end(), 2*n, 0);
+ permDiff.insert(permDiff.end(), 2*n, 0);
+}
+
+void CNF::save_on_var_memory()
+{
+ //never resize varData --> contains info about what is replaced/etc.
+ //never resize assigns --> contains 0-level assigns
+ //never resize interToOuterMain, outerToInterMain
+
+ watches.resize(nVars()*2);
+ watches.consolidate();
+
+ #ifdef USE_GAUSS
+ gwatches.resize(nVars()*2);
+ //TODO
+ //gwatches.consolidate();
+ #endif
+
+ implCache.save_on_var_memorys(nVars());
+ stamp.save_on_var_memory(nVars());
+ for(auto& l: longRedCls) {
+ l.shrink_to_fit();
+ }
+ longIrredCls.shrink_to_fit();
+
+ seen.resize(nVars()*2);
+ seen.shrink_to_fit();
+ seen2.resize(nVars()*2);
+ seen2.shrink_to_fit();
+ permDiff.resize(nVars()*2);
+ permDiff.shrink_to_fit();
+}
+
+//Test for reflectivity of interToOuterMain & outerToInterMain
+void CNF::test_reflectivity_of_renumbering() const
+{
+ vector<uint32_t> test(nVarsOuter());
+ for(size_t i = 0; i < nVarsOuter(); i++) {
+ test[i] = i;
+ }
+ updateArrayRev(test, interToOuterMain);
+ #ifdef DEBUG_RENUMBER
+ for(size_t i = 0; i < nVarsOuter(); i++) {
+ cout << i << ": "
+ << std::setw(2) << test[i] << ", "
+ << std::setw(2) << outerToInterMain[i]
+ << endl;
+ }
+ #endif
+
+ for(size_t i = 0; i < nVarsOuter(); i++) {
+ assert(test[i] == outerToInterMain[i]);
+ }
+ #ifdef DEBUG_RENUMBR
+ cout << "Passed test" << endl;
+ #endif
+}
+
+void CNF::updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+) {
+ updateArray(interToOuterMain, interToOuter);
+ updateArrayMapCopy(outerToInterMain, outerToInter);
+}
+
+uint64_t CNF::mem_used_longclauses() const
+{
+ uint64_t mem = 0;
+ mem += cl_alloc.mem_used();
+ mem += longIrredCls.capacity()*sizeof(ClOffset);
+ for(auto& l: longRedCls) {
+ mem += l.capacity()*sizeof(ClOffset);
+ }
+ return mem;
+}
+
+uint64_t CNF::print_mem_used_longclauses(const size_t totalMem) const
+{
+ uint64_t mem = mem_used_longclauses();
+ print_stats_line("c Mem for longclauses"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, totalMem)
+ , "%"
+ );
+
+ return mem;
+}
+
+size_t CNF::cl_size(const Watched& ws) const
+{
+ switch(ws.getType()) {
+ case watch_binary_t:
+ return 2;
+
+ case watch_clause_t: {
+ const Clause* cl = cl_alloc.ptr(ws.get_offset());
+ return cl->size();
+ }
+
+ default:
+ assert(false);
+ return 0;
+ }
+}
+
+string CNF::watches_to_string(const Lit lit, watch_subarray_const ws) const
+{
+ std::stringstream ss;
+ for(Watched w: ws) {
+ ss << watched_to_string(lit, w) << " -- ";
+ }
+ return ss.str();
+}
+
+string CNF::watched_to_string(Lit otherLit, const Watched& ws) const
+{
+ std::stringstream ss;
+ switch(ws.getType()) {
+ case watch_binary_t:
+ ss << otherLit << ", " << ws.lit2();
+ if (ws.red()) {
+ ss << "(red)";
+ }
+ break;
+
+ case watch_clause_t: {
+ const Clause* cl = cl_alloc.ptr(ws.get_offset());
+ for(size_t i = 0; i < cl->size(); i++) {
+ ss << (*cl)[i];
+ if (i + 1 < cl->size())
+ ss << ", ";
+ }
+ if (cl->red()) {
+ ss << "(red)";
+ }
+ break;
+ }
+
+ default:
+ assert(false);
+ break;
+ }
+
+ return ss.str();
+}
+
+bool ClauseSizeSorter::operator () (const ClOffset x, const ClOffset y)
+{
+ Clause* cl1 = cl_alloc.ptr(x);
+ Clause* cl2 = cl_alloc.ptr(y);
+ return (cl1->size() < cl2->size());
+}
+
+size_t CNF::mem_used_renumberer() const
+{
+ size_t mem = 0;
+ mem += interToOuterMain.capacity()*sizeof(uint32_t);
+ mem += outerToInterMain.capacity()*sizeof(uint32_t);
+ mem += outer_to_with_bva_map.capacity()*sizeof(uint32_t);
+ return mem;
+}
+
+
+vector<lbool> CNF::map_back_to_without_bva(const vector<lbool>& val) const
+{
+ vector<lbool> ret;
+ assert(val.size() == nVarsOuter());
+ ret.reserve(nVarsOutside());
+ for(size_t i = 0; i < nVarsOuter(); i++) {
+ if (!varData[map_outer_to_inter(i)].is_bva) {
+ ret.push_back(val[i]);
+ }
+ }
+ assert(ret.size() == nVarsOutside());
+ return ret;
+}
+
+vector<uint32_t> CNF::build_outer_to_without_bva_map() const
+{
+ vector<uint32_t> ret;
+ size_t at = 0;
+ for(size_t i = 0; i < nVarsOuter(); i++) {
+ if (!varData[map_outer_to_inter(i)].is_bva) {
+ ret.push_back(at);
+ at++;
+ } else {
+ ret.push_back(var_Undef);
+ }
+ }
+
+ return ret;
+}
+
+size_t CNF::mem_used() const
+{
+ size_t mem = 0;
+ mem += sizeof(conf);
+ mem += sizeof(binTri);
+ mem += seen.capacity()*sizeof(uint16_t);
+ mem += seen2.capacity()*sizeof(uint8_t);
+ mem += toClear.capacity()*sizeof(Lit);
+
+ return mem;
+}
+
+void CNF::save_state(SimpleOutFile& f) const
+{
+ /*assert(!seen.empty());
+ assert(!varData.empty());
+ assert(watches.size() != 0);*/
+
+ f.put_vector(interToOuterMain);
+ f.put_vector(outerToInterMain);
+
+ f.put_vector(assigns);
+ f.put_vector(varData);
+ f.put_uint32_t(minNumVars);
+ f.put_uint32_t(num_bva_vars);
+ f.put_uint32_t(ok);
+}
+
+void CNF::load_state(SimpleInFile& f)
+{
+ assert(seen.empty());
+ assert(varData.empty());
+ assert(watches.size() == 0);
+
+ f.get_vector(interToOuterMain);
+ f.get_vector(outerToInterMain);
+ build_outer_to_without_bva_map();
+
+ f.get_vector(assigns);
+ f.get_vector(varData);
+ minNumVars = f.get_uint32_t();
+ num_bva_vars = f.get_uint32_t();
+ ok = f.get_uint32_t();
+
+ watches.resize(nVars()*2);
+}
+
+
+void CNF::test_all_clause_attached() const
+{
+ test_all_clause_attached(longIrredCls);
+ for(const vector<ClOffset>& l: longRedCls) {
+ test_all_clause_attached(l);
+ }
+}
+
+void CNF::test_all_clause_attached(const vector<ClOffset>& offsets) const
+{
+ for (vector<ClOffset>::const_iterator
+ it = offsets.begin(), end = offsets.end()
+ ; it != end
+ ; ++it
+ ) {
+ assert(normClauseIsAttached(*it));
+ }
+}
+
+bool CNF::normClauseIsAttached(const ClOffset offset) const
+{
+ bool attached = true;
+ const Clause& cl = *cl_alloc.ptr(offset);
+ assert(cl.size() > 2);
+
+ attached &= findWCl(watches[cl[0]], offset);
+ attached &= findWCl(watches[cl[1]], offset);
+
+ bool satisfied = satisfied_cl(cl);
+ uint32_t num_false2 = 0;
+ num_false2 += value(cl[0]) == l_False;
+ num_false2 += value(cl[1]) == l_False;
+ if (!satisfied) {
+ if (num_false2 != 0) {
+ cout << "Clause failed: " << cl << endl;
+ for(Lit l: cl) {
+ cout << "val " << l << " : " << value(l) << endl;
+ }
+ for(const Watched& w: watches[cl[0]]) {
+ cout << "watch " << cl[0] << endl;
+ if (w.isClause() && w.get_offset() == offset) {
+ cout << "Block lit: " << w.getBlockedLit()
+ << " val: " << value(w.getBlockedLit()) << endl;
+ }
+ }
+ for(const Watched& w: watches[cl[1]]) {
+ cout << "watch " << cl[1] << endl;
+ if (w.isClause() && w.get_offset() == offset) {
+ cout << "Block lit: " << w.getBlockedLit()
+ << " val: " << value(w.getBlockedLit()) << endl;
+ }
+ }
+ }
+ assert(num_false2 == 0 && "propagation was not full??");
+ }
+
+ return attached;
+}
+
+void CNF::find_all_attach() const
+{
+ for (size_t i = 0; i < watches.size(); i++) {
+ const Lit lit = Lit::toLit(i);
+ for (uint32_t i2 = 0; i2 < watches[lit].size(); i2++) {
+ const Watched& w = watches[lit][i2];
+ if (!w.isClause())
+ continue;
+
+ //Get clause
+ Clause* cl = cl_alloc.ptr(w.get_offset());
+ assert(!cl->freed());
+
+ bool satisfied = satisfied_cl(*cl);
+ if (!satisfied) {
+ if (value(w.getBlockedLit()) == l_True) {
+ cout << "ERROR: Clause " << *cl << " not satisfied, but its blocked lit, "
+ << w.getBlockedLit() << " is." << endl;
+ }
+ assert(value(w.getBlockedLit()) != l_True && "Blocked lit is satisfied but clause is NOT!!");
+ }
+
+ //Assert watch correctness
+ if ((*cl)[0] != lit
+ && (*cl)[1] != lit
+ ) {
+ std::cerr
+ << "ERROR! Clause " << (*cl)
+ << " not attached?"
+ << endl;
+
+ assert(false);
+ std::exit(-1);
+ }
+
+ //Clause in one of the lists
+ if (!find_clause(w.get_offset())) {
+ std::cerr
+ << "ERROR! did not find clause " << *cl
+ << endl;
+
+ assert(false);
+ std::exit(1);
+ }
+ }
+ }
+
+ find_all_attach(longIrredCls);
+ for(auto& lredcls: longRedCls) {
+ find_all_attach(lredcls);
+ }
+}
+
+void CNF::find_all_attach(const vector<ClOffset>& cs) const
+{
+ for(vector<ClOffset>::const_iterator
+ it = cs.begin(), end = cs.end()
+ ; it != end
+ ; ++it
+ ) {
+ Clause& cl = *cl_alloc.ptr(*it);
+ bool ret = findWCl(watches[cl[0]], *it);
+ if (!ret) {
+ cout
+ << "Clause " << cl
+ << " (red: " << cl.red() << ")"
+ << " doesn't have its 1st watch attached!"
+ << endl;
+
+ assert(false);
+ std::exit(-1);
+ }
+
+ ret = findWCl(watches[cl[1]], *it);
+ if (!ret) {
+ cout
+ << "Clause " << cl
+ << " (red: " << cl.red() << ")"
+ << " doesn't have its 2nd watch attached!"
+ << endl;
+
+ assert(false);
+ std::exit(-1);
+ }
+ }
+}
+
+
+bool CNF::find_clause(const ClOffset offset) const
+{
+ for (uint32_t i = 0; i < longIrredCls.size(); i++) {
+ if (longIrredCls[i] == offset)
+ return true;
+ }
+
+ for(auto& lredcls: longRedCls) {
+ for (ClOffset off: lredcls) {
+ if (off == offset)
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void CNF::check_wrong_attach() const
+{
+#ifdef SLOW_DEBUG
+ for(auto& lredcls: longRedCls) {
+ for (ClOffset offs: lredcls) {
+ const Clause& cl = *cl_alloc.ptr(offs);
+ for (uint32_t i = 0; i < cl.size(); i++) {
+ if (i > 0)
+ assert(cl[i-1].var() != cl[i].var());
+ }
+ }
+ }
+ for(watch_subarray_const ws: watches) {
+ check_watchlist(ws);
+ }
+#endif
+}
+
+void CNF::check_watchlist(watch_subarray_const ws) const
+{
+ for(const Watched& w: ws) {
+ if (!w.isClause()) {
+ continue;
+ }
+
+ const ClOffset offs = w.get_offset();
+ const Clause& c = *cl_alloc.ptr(offs);
+ Lit blockedLit = w.getBlockedLit();
+ /*cout << "Clause " << c << " blocked lit: "<< blockedLit << " val: " << value(blockedLit)
+ << " blocked removed:" << !(varData[blockedLit.var()].removed == Removed::none)
+ << " cl satisfied: " << satisfied_cl(&c)
+ << endl;*/
+ assert(blockedLit.var() < nVars());
+
+ if (varData[blockedLit.var()].removed == Removed::none
+ //0-level FALSE --> clause cleaner removed it from clause, that's OK
+ && value(blockedLit) != l_False
+ && !satisfied_cl(c)
+ ) {
+ bool found = false;
+ for(Lit l: c) {
+ if (l == blockedLit) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ cout << "Did not find non-removed blocked lit " << blockedLit
+ << " val: " << value(blockedLit) << endl
+ << "In clause " << c << endl;
+ }
+ assert(found);
+ }
+
+ }
+}
+
+
+uint64_t CNF::count_lits(
+ const vector<ClOffset>& clause_array
+ , const bool red
+ , const bool allowFreed
+) const {
+ uint64_t lits = 0;
+ for(vector<ClOffset>::const_iterator
+ it = clause_array.begin(), end = clause_array.end()
+ ; it != end
+ ; ++it
+ ) {
+ const Clause& cl = *cl_alloc.ptr(*it);
+ if (cl.freed()) {
+ assert(allowFreed);
+ } else {
+ if ((cl.red() ^ red) == false) {
+ lits += cl.size();
+ }
+ }
+ }
+
+ return lits;
+}
+
+void CNF::print_all_clauses() const
+{
+ for(vector<ClOffset>::const_iterator
+ it = longIrredCls.begin(), end = longIrredCls.end()
+ ; it != end
+ ; ++it
+ ) {
+ Clause* cl = cl_alloc.ptr(*it);
+ cout
+ << "Normal clause offs " << *it
+ << " cl: " << *cl
+ << endl;
+ }
+
+
+ uint32_t wsLit = 0;
+ for (watch_array::const_iterator
+ it = watches.begin(), end = watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ Lit lit = Lit::toLit(wsLit);
+ watch_subarray_const ws = *it;
+ cout << "watches[" << lit << "]" << endl;
+ for (const Watched *it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ if (it2->isBin()) {
+ cout << "Binary clause part: " << lit << " , " << it2->lit2() << endl;
+ } else if (it2->isClause()) {
+ cout << "Normal clause offs " << it2->get_offset() << endl;
+ }
+ }
+ }
+}
+
+bool CNF::no_marked_clauses() const
+{
+ for(ClOffset offset: longIrredCls) {
+ Clause* cl = cl_alloc.ptr(offset);
+ assert(!cl->stats.marked_clause);
+ }
+
+ for(auto& lredcls: longRedCls) {
+ for(ClOffset offset: lredcls) {
+ Clause* cl = cl_alloc.ptr(offset);
+ assert(!cl->stats.marked_clause);
+ }
+ }
+
+ return true;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cnf.h b/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
new file mode 100644
index 000000000..919bb26d7
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cnf.h
@@ -0,0 +1,633 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CNF_H__
+#define __CNF_H__
+
+#include <atomic>
+#include <limits>
+
+#include "constants.h"
+#include "vardata.h"
+#include "propby.h"
+#include "solverconf.h"
+#include "stamp.h"
+#include "solvertypes.h"
+#include "implcache.h"
+#include "watcharray.h"
+#include "drat.h"
+#include "clauseallocator.h"
+#include "varupdatehelper.h"
+#include "simplefile.h"
+#include "gausswatched.h"
+#include "xor.h"
+
+using std::numeric_limits;
+
+namespace CMSat {
+
+class ClauseAllocator;
+
+struct BinTriStats
+{
+ uint64_t irredBins = 0;
+ uint64_t redBins = 0;
+};
+
+struct LitStats
+{
+ uint64_t irredLits = 0;
+ uint64_t redLits = 0;
+};
+
+class CNF
+{
+public:
+ void save_on_var_memory();
+ void updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+ );
+ size_t mem_used_renumberer() const;
+ size_t mem_used() const;
+
+ CNF(const SolverConf *_conf, std::atomic<bool>* _must_interrupt_inter)
+ {
+ if (_conf != NULL) {
+ conf = *_conf;
+ }
+ drat = new Drat();
+ assert(_must_interrupt_inter != NULL);
+ must_interrupt_inter = _must_interrupt_inter;
+
+ longRedCls.resize(3);
+ }
+
+ virtual ~CNF()
+ {
+ delete drat;
+ }
+
+ ClauseAllocator cl_alloc;
+ SolverConf conf;
+
+ bool ok = true; //If FALSE, state of CNF is UNSAT
+
+ watch_array watches;
+ #ifdef USE_GAUSS
+ vec<vec<GaussWatched>> gwatches;
+ uint32_t gqhead;
+ #endif
+ vector<VarData> varData;
+ bool VSIDS = true;
+ vector<uint32_t> depth;
+ Stamp stamp;
+ ImplCache implCache;
+ uint32_t minNumVars = 0;
+ Drat* drat;
+ uint32_t sumConflicts = 0;
+ uint32_t latest_feature_calc = 0;
+ uint64_t last_feature_calc_confl = 0;
+ unsigned cur_max_temp_red_lev2_cls = conf.max_temp_lev2_learnt_clauses;
+
+ //Clauses
+ vector<ClOffset> longIrredCls;
+
+ /**
+ level 0 = never remove
+ level 1 = check rarely
+ level 2 = check often
+ **/
+ vector<vector<ClOffset> > longRedCls;
+ vector<Xor> xorclauses;
+ BinTriStats binTri;
+ LitStats litStats;
+ int64_t clauseID = 1;
+
+ //Temporaries
+ vector<uint16_t> seen;
+ vector<uint8_t> seen2;
+ vector<uint64_t> permDiff;
+ vector<Lit> toClear;
+ uint64_t MYFLAG = 1;
+
+ bool okay() const
+ {
+ return ok;
+ }
+
+ lbool value (const uint32_t x) const
+ {
+ return assigns[x];
+ }
+
+ lbool value (const Lit p) const
+ {
+ return assigns[p.var()] ^ p.sign();
+ }
+
+ bool must_interrupt_asap() const
+ {
+ std::atomic_thread_fence(std::memory_order_acquire);
+ return *must_interrupt_inter;
+ }
+
+ void set_must_interrupt_asap()
+ {
+ must_interrupt_inter->store(true, std::memory_order_relaxed);
+ }
+
+ void unset_must_interrupt_asap()
+ {
+ must_interrupt_inter->store(false, std::memory_order_relaxed);
+ }
+
+ std::atomic<bool>* get_must_interrupt_inter_asap_ptr()
+ {
+ return must_interrupt_inter;
+ }
+
+ bool clause_locked(const Clause& c, const ClOffset offset) const;
+ void unmark_all_irred_clauses();
+ void unmark_all_red1_clauses();
+
+ bool redundant(const Watched& ws) const;
+ bool redundant_or_removed(const Watched& ws) const;
+ size_t cl_size(const Watched& ws) const;
+ string watched_to_string(Lit otherLit, const Watched& ws) const;
+ string watches_to_string(const Lit lit, watch_subarray_const ws) const;
+
+ uint64_t print_mem_used_longclauses(size_t totalMem) const;
+ uint64_t mem_used_longclauses() const;
+ template<class Function>
+ void for_each_lit(
+ const OccurClause& cl
+ , Function func
+ , int64_t* limit
+ ) const;
+ template<class Function>
+ void for_each_lit_except_watched(
+ const OccurClause& cl
+ , Function func
+ , int64_t* limit
+ ) const;
+ uint32_t map_inter_to_outer(const uint32_t inter) const
+ {
+ return interToOuterMain[inter];
+ }
+ Lit map_inter_to_outer(const Lit lit) const
+ {
+ return Lit(interToOuterMain[lit.var()], lit.sign());
+ }
+ uint32_t map_outer_to_inter(const uint32_t outer) const
+ {
+ return outerToInterMain[outer];
+ }
+ Lit map_outer_to_inter(const Lit outer) const
+ {
+ return Lit(outerToInterMain[outer.var()], outer.sign());
+ }
+ void map_inter_to_outer(vector<Lit>& lits) const
+ {
+ updateLitsMap(lits, interToOuterMain);
+ }
+ void renumber_outer_to_inter_lits(vector<Lit>& ps) const;
+
+ uint32_t nVarsOutside() const
+ {
+ #ifdef DEBUG_SLOW
+ assert(outer_to_with_bva_map.size() == nVarsOuter() - num_bva_vars);
+ #endif
+ return nVarsOuter() - num_bva_vars;
+ }
+
+ Lit map_to_with_bva(const Lit lit) const
+ {
+ return Lit(outer_to_with_bva_map.at(lit.var()), lit.sign());
+ }
+
+ uint32_t map_to_with_bva(const uint32_t var) const
+ {
+ return outer_to_with_bva_map.at(var);
+ }
+
+ size_t nVars() const
+ {
+ return minNumVars;
+ }
+
+ size_t nVarsOuter() const
+ {
+ return assigns.size();
+ }
+
+ size_t get_num_bva_vars() const
+ {
+ return num_bva_vars;
+ }
+
+ vector<uint32_t> build_outer_to_without_bva_map() const;
+ void clean_occur_from_removed_clauses();
+ void clean_occur_from_removed_clauses_only_smudged();
+ void clean_occur_from_idx_types_only_smudged();
+ void clean_occur_from_idx(const Lit lit);
+ void clear_one_occur_from_removed_clauses(watch_subarray w);
+ bool no_marked_clauses() const;
+ void check_no_removed_or_freed_cl_in_watch() const;
+ bool normClauseIsAttached(const ClOffset offset) const;
+ void find_all_attach() const;
+ void find_all_attach(const vector<ClOffset>& cs) const;
+ bool find_clause(const ClOffset offset) const;
+ void test_all_clause_attached() const;
+ void test_all_clause_attached(const vector<ClOffset>& offsets) const;
+ void check_wrong_attach() const;
+ void check_watchlist(watch_subarray_const ws) const;
+ template<class T>
+ bool satisfied_cl(const T& cl) const;
+ template<typename T> bool no_duplicate_lits(const T& lits) const;
+ void check_no_duplicate_lits_anywhere() const;
+ void check_clid_correct() const;
+ void print_all_clauses() const;
+ template<class T> void clean_xor_no_prop(T& ps, bool& rhs);
+ template<class T> void clean_xor_vars_no_prop(T& ps, bool& rhs);
+ uint64_t count_lits(
+ const vector<ClOffset>& clause_array
+ , const bool red
+ , const bool allowFreed
+ ) const;
+
+protected:
+ virtual void new_var(const bool bva, const uint32_t orig_outer);
+ virtual void new_vars(const size_t n);
+ void test_reflectivity_of_renumbering() const;
+ vector<lbool> back_number_solution_from_inter_to_outer(const vector<lbool>& solution) const
+ {
+ vector<lbool> back_numbered = solution;
+ updateArrayRev(back_numbered, interToOuterMain);
+ return back_numbered;
+ }
+
+ vector<lbool> map_back_to_without_bva(const vector<lbool>& val) const;
+ vector<lbool> assigns;
+
+ void save_state(SimpleOutFile& f) const;
+ void load_state(SimpleInFile& f);
+
+private:
+ std::atomic<bool> *must_interrupt_inter; ///<Interrupt cleanly ASAP if true
+ void enlarge_minimal_datastructs(size_t n = 1);
+ void enlarge_nonminimial_datastructs(size_t n = 1);
+ void swapVars(const uint32_t which, const int off_by = 0);
+
+ vector<uint32_t> outerToInterMain;
+ vector<uint32_t> interToOuterMain;
+ size_t num_bva_vars = 0;
+ vector<uint32_t> outer_to_with_bva_map;
+};
+
+template<class Function>
+void CNF::for_each_lit(
+ const OccurClause& cl
+ , Function func
+ , int64_t* limit
+) const {
+ switch(cl.ws.getType()) {
+ case CMSat::watch_binary_t:
+ *limit -= 2;
+ func(cl.lit);
+ func(cl.ws.lit2());
+ break;
+
+ case CMSat::watch_clause_t: {
+ const Clause& clause = *cl_alloc.ptr(cl.ws.get_offset());
+ *limit -= (int64_t)clause.size();
+ for(const Lit lit: clause) {
+ func(lit);
+ }
+ break;
+ }
+
+ case watch_idx_t :
+ assert(false);
+ break;
+ }
+}
+
+template<class Function>
+void CNF::for_each_lit_except_watched(
+ const OccurClause& cl
+ , Function func
+ , int64_t* limit
+) const {
+ switch(cl.ws.getType()) {
+ case CMSat::watch_binary_t:
+ *limit -= 1;
+ func(cl.ws.lit2());
+ break;
+
+ case CMSat::watch_clause_t: {
+ const Clause& clause = *cl_alloc.ptr(cl.ws.get_offset());
+ *limit -= clause.size();
+ for(const Lit lit: clause) {
+ if (lit != cl.lit) {
+ func(lit);
+ }
+ }
+ break;
+ }
+
+ case CMSat::watch_idx_t:
+ assert(false);
+ break;
+ }
+}
+
+struct ClauseSizeSorter
+{
+ explicit ClauseSizeSorter(const ClauseAllocator& _cl_alloc) :
+ cl_alloc(_cl_alloc)
+ {}
+ bool operator () (const ClOffset x, const ClOffset y);
+ const ClauseAllocator& cl_alloc;
+};
+
+inline bool CNF::redundant(const Watched& ws) const
+{
+ return ( (ws.isBin() && ws.red())
+ || (ws.isClause() && cl_alloc.ptr(ws.get_offset())->red())
+ );
+}
+
+inline bool CNF::redundant_or_removed(const Watched& ws) const
+{
+ if (ws.isBin()) {
+ return ws.red();
+ }
+
+ assert(ws.isClause());
+ const Clause* cl = cl_alloc.ptr(ws.get_offset());
+ return cl->red() || cl->getRemoved();
+}
+
+inline void CNF::clean_occur_from_removed_clauses()
+{
+ for(watch_subarray w: watches) {
+ clear_one_occur_from_removed_clauses(w);
+ }
+}
+
+inline void CNF::clean_occur_from_removed_clauses_only_smudged()
+{
+ for(const Lit l: watches.get_smudged_list()) {
+ clear_one_occur_from_removed_clauses(watches[l]);
+ }
+ watches.clear_smudged();
+}
+
+inline void CNF::clean_occur_from_idx_types_only_smudged()
+{
+ for(const Lit lit: watches.get_smudged_list()) {
+ clean_occur_from_idx(lit);
+ }
+ watches.clear_smudged();
+}
+
+inline void CNF::clean_occur_from_idx(const Lit lit)
+{
+ watch_subarray ws = watches[lit];
+ Watched* i = ws.begin();
+ Watched* j = ws.begin();
+ for(const Watched* end = ws.end(); i < end; i++) {
+ if (!i->isIdx()) {
+ *j++ = *i;
+ }
+ }
+ ws.shrink(i-j);
+}
+
+inline bool CNF::clause_locked(const Clause& c, const ClOffset offset) const
+{
+ return value(c[0]) == l_True
+ && varData[c[0].var()].reason.isClause()
+ && varData[c[0].var()].reason.get_offset() == offset;
+}
+
+inline void CNF::clear_one_occur_from_removed_clauses(watch_subarray w)
+{
+ size_t i = 0;
+ size_t j = 0;
+ size_t end = w.size();
+ for(; i < end; i++) {
+ const Watched ws = w[i];
+ if (!ws.isClause()) {
+ w[j++] = w[i];
+ continue;
+ }
+
+ Clause* cl = cl_alloc.ptr(ws.get_offset());
+ if (!cl->getRemoved()) {
+ w[j++] = w[i];
+ }
+ }
+ w.shrink(i-j);
+}
+
+inline void CNF::unmark_all_irred_clauses()
+{
+ for(ClOffset offset: longIrredCls) {
+ Clause* cl = cl_alloc.ptr(offset);
+ cl->stats.marked_clause = false;
+ }
+}
+
+inline void CNF::unmark_all_red1_clauses()
+{
+ for(ClOffset offset: longRedCls[1]) {
+ Clause* cl = cl_alloc.ptr(offset);
+ cl->stats.marked_clause = false;
+ }
+}
+
+inline void CNF::renumber_outer_to_inter_lits(vector<Lit>& ps) const
+{
+ for (Lit& lit: ps) {
+ const Lit origLit = lit;
+
+ //Update variable numbering
+ assert(lit.var() < nVarsOuter());
+ lit = map_outer_to_inter(lit);
+
+ if (conf.verbosity >= 52) {
+ cout
+ << "var-renumber updating lit "
+ << origLit
+ << " to lit "
+ << lit
+ << endl;
+ }
+ }
+}
+
+template<typename T>
+inline vector<Lit> unsign_lits(const T& lits)
+{
+ vector<Lit> ret(lits.size());
+ for(size_t i = 0; i < lits.size(); i++) {
+ ret[i] = lits[i].unsign();
+ }
+ return ret;
+}
+
+inline void CNF::check_no_removed_or_freed_cl_in_watch() const
+{
+ for(watch_subarray_const ws: watches) {
+ for(const Watched& w: ws) {
+ assert(!w.isIdx());
+ if (w.isBin()) {
+ continue;
+ }
+ assert(w.isClause());
+ Clause& cl = *cl_alloc.ptr(w.get_offset());
+ assert(!cl.getRemoved());
+ assert(!cl.freed());
+ }
+ }
+}
+
+template<class T>
+bool CNF::satisfied_cl(const T& cl) const {
+ for(Lit lit: cl) {
+ if (value(lit) == l_True) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
+template<typename T>
+bool CNF::no_duplicate_lits(const T& lits) const
+{
+ vector<Lit> x(lits.size());
+ for(size_t i = 0; i < x.size(); i++) {
+ x[i] = lits[i];
+ }
+ std::sort(x.begin(), x.end());
+ for(size_t i = 1; i < x.size(); i++) {
+ if (x[i-1] == x[i])
+ return false;
+ }
+ return true;
+}
+
+inline void CNF::check_no_duplicate_lits_anywhere() const
+{
+ for(ClOffset offs: longIrredCls) {
+ Clause * cl = cl_alloc.ptr(offs);
+ assert(no_duplicate_lits((*cl)));
+ }
+ for(auto l: longRedCls) {
+ for(ClOffset offs: l) {
+ Clause * cl = cl_alloc.ptr(offs);
+ assert(no_duplicate_lits((*cl)));
+ }
+ }
+}
+
+inline void CNF::check_clid_correct() const
+{
+ #ifdef STATS_NEEDED
+ for(auto l: longRedCls) {
+ for(ClOffset offs: l) {
+ Clause * cl = cl_alloc.ptr(offs);
+ assert(!(cl->stats.ID == 0 && cl->red()));
+ }
+ }
+ #endif
+}
+
+template<class T>
+void CNF::clean_xor_no_prop(T& ps, bool& rhs)
+{
+ std::sort(ps.begin(), ps.end());
+ Lit p;
+ uint32_t i, j;
+ for (i = j = 0, p = lit_Undef; i != ps.size(); i++) {
+ assert(ps[i].sign() == false);
+
+ if (ps[i].var() == p.var()) {
+ //added, but easily removed
+ j--;
+ p = lit_Undef;
+
+ //Flip rhs if neccessary
+ if (value(ps[i]) != l_Undef) {
+ rhs ^= value(ps[i]) == l_True;
+ }
+
+ } else if (value(ps[i]) == l_Undef) {
+ //Add and remember as last one to have been added
+ ps[j++] = p = ps[i];
+
+ assert(varData[p.var()].removed != Removed::elimed);
+ } else {
+ //modify rhs instead of adding
+ rhs ^= value(ps[i]) == l_True;
+ }
+ }
+ ps.resize(ps.size() - (i - j));
+}
+
+template<class T>
+void CNF::clean_xor_vars_no_prop(T& ps, bool& rhs)
+{
+ std::sort(ps.begin(), ps.end());
+ uint32_t p;
+ uint32_t i, j;
+ for (i = j = 0, p = numeric_limits<uint32_t>::max(); i != ps.size(); i++) {
+ if (ps[i] == p) {
+ //added, but easily removed
+ j--;
+ p = numeric_limits<uint32_t>::max();
+
+ //Flip rhs if neccessary
+ if (value(ps[i]) != l_Undef) {
+ rhs ^= value(ps[i]) == l_True;
+ }
+
+ } else if (value(ps[i]) == l_Undef) {
+ //Add and remember as last one to have been added
+ ps[j++] = p = ps[i];
+
+ assert(varData[p].removed != Removed::elimed);
+ } else {
+ //modify rhs instead of adding
+ rhs ^= value(ps[i]) == l_True;
+ }
+ }
+ ps.resize(ps.size() - (i - j));
+}
+
+
+}
+
+#endif //__CNF_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp b/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
new file mode 100644
index 000000000..007af2327
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/compfinder.cpp
@@ -0,0 +1,342 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include <set>
+#include <map>
+#include <iomanip>
+#include <iostream>
+#include "compfinder.h"
+#include "time_mem.h"
+#include "cloffset.h"
+#include "solver.h"
+#include "varreplacer.h"
+#include "clausecleaner.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+
+using namespace CMSat;
+
+using std::set;
+using std::map;
+using std::cout;
+using std::endl;
+
+//#define VERBOSE_DEBUG
+
+
+
+//#define PART_FINDING
+
+CompFinder::CompFinder(Solver* _solver) :
+ timedout(false)
+ , seen(_solver->seen)
+ , solver(_solver)
+{
+}
+
+void CompFinder::print_found_components() const
+{
+ size_t notPrinted = 0;
+ size_t totalSmallSize = 0;
+ size_t i = 0;
+ size_t print_limit = 300;
+ for(map<uint32_t, vector<uint32_t> >::const_iterator
+ it = reverseTable.begin(), end = reverseTable.end()
+ ; it != end
+ ; ++it, i++
+ ) {
+ if (it->second.size() < print_limit || solver->conf.verbosity >= 3) {
+ totalSmallSize += it->second.size();
+ notPrinted++;
+ } else {
+ cout
+ << "c [comp] large component " << std::setw(5) << i
+ << " size: " << std::setw(10) << it->second.size()
+ << endl;
+ }
+ }
+
+ if (solver->conf.verbosity < 3 && notPrinted > 0) {
+ cout
+ << "c [comp] Unprinted small (<" << print_limit << " var) components:" << notPrinted
+ << " vars: " << totalSmallSize
+ << endl;
+ }
+}
+
+bool CompFinder::reverse_table_is_correct() const
+{
+ for (map<uint32_t, vector<uint32_t> >::const_iterator
+ it = reverseTable.begin()
+ ; it != reverseTable.end()
+ ; ++it
+ ) {
+ for (size_t i2 = 0; i2 < it->second.size(); i2++) {
+ assert(table[(it->second)[i2]] == it->first);
+ }
+ }
+
+ return true;
+}
+
+void CompFinder::find_components()
+{
+ assert(solver->okay());
+ const double myTime = cpuTime();
+
+ table.clear();
+ table.resize(solver->nVars(), std::numeric_limits<uint32_t>::max());
+ reverseTable.clear();
+ comp_no = 0;
+ used_comp_no = 0;
+
+ solver->clauseCleaner->remove_and_clean_all();
+
+ //Add the clauses to the sets
+ bogoprops_remain =
+ solver->conf.comp_find_time_limitM*1000ULL*1000ULL
+ *solver->conf.global_timeout_multiplier;
+ orig_bogoprops = bogoprops_remain;
+ timedout = false;
+ add_clauses_to_component(solver->longIrredCls);
+ addToCompImplicits();
+ if (timedout) {
+ reverseTable.clear();
+ }
+ print_and_add_to_sql_result(myTime);
+
+ assert(solver->okay());
+}
+
+void CompFinder::print_and_add_to_sql_result(const double myTime) const
+{
+ const double time_used = cpuTime() - myTime;
+ const double time_remain = float_div(bogoprops_remain, orig_bogoprops);
+
+ assert(reverse_table_is_correct());
+
+ if (solver->conf.verbosity) {
+ cout
+ << "c [comp] Found component(s): " << reverseTable.size()
+ << " BP: "
+ << std::setprecision(2) << std::fixed
+ << (double)(orig_bogoprops-bogoprops_remain)/(1000.0*1000.0)<< "M"
+ << solver->conf.print_times(time_used, timedout, time_remain)
+ << endl;
+
+ if (reverseTable.size() > 1) {
+ print_found_components();
+ }
+ }
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "compfinder"
+ , time_used
+ , timedout
+ , time_remain
+ );
+ }
+}
+
+void CompFinder::add_clauses_to_component(const vector<ClOffset>& cs)
+{
+ for (ClOffset offset: cs) {
+ if (bogoprops_remain <= 0) {
+ timedout = true;
+ break;
+ }
+ bogoprops_remain -= 10;
+ Clause* cl = solver->cl_alloc.ptr(offset);
+ add_clause_to_component(*cl);
+ }
+}
+
+void CompFinder::addToCompImplicits()
+{
+ vector<Lit> lits;
+
+ for (size_t var = 0; var < solver->nVars(); var++) {
+ if (bogoprops_remain <= 0) {
+ timedout = true;
+ break;
+ }
+
+ bogoprops_remain -= 2;
+ Lit lit(var, false);
+ lits.clear();
+ lits.push_back(lit);
+ for(int sign = 0; sign < 2; sign++) {
+ lit = Lit(var, sign);
+ watch_subarray ws = solver->watches[lit];
+
+ //If empty, skip
+ if (ws.empty())
+ continue;
+
+ bogoprops_remain -= (int64_t)ws.size() + 10;
+ for(const Watched *it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ if (it2->isBin()
+ //Only irred
+ && !it2->red()
+ //Only do each binary once
+ && lit < it2->lit2()
+ ) {
+ if (!seen[it2->lit2().var()]) {
+ lits.push_back(it2->lit2());
+ seen[it2->lit2().var()] = 1;
+ }
+ }
+ }
+ }
+
+ if (lits.size() > 1) {
+ //Clear seen
+ for(vector<Lit>::const_iterator
+ it = lits.begin(), end = lits.end()
+ ; it != end
+ ; ++it
+ ) {
+ seen[it->var()] = 0;
+ }
+
+ add_clause_to_component(lits);
+ }
+
+ }
+}
+
+template<class T>
+bool CompFinder::belong_to_same_component(const T& cl)
+{
+ if (table[cl[0].var()] != std::numeric_limits<uint32_t>::max()) {
+ bogoprops_remain -= (int64_t)cl.size()/2 + 1;
+ const uint32_t comp = table[cl[0].var()];
+
+ for (const Lit l: cl) {
+ if (table[l.var()] != comp) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+template<class T>
+void CompFinder::fill_newset_and_tomerge(const T& cl)
+{
+ bogoprops_remain -= (int64_t)cl.size()*2;
+
+ for (const Lit lit: cl) {
+ if (table[lit.var()] != std::numeric_limits<uint32_t>::max()
+ ) {
+ if (!seen[table[lit.var()]]) {
+ tomerge.push_back(table[lit.var()]);
+ seen[table[lit.var()]] = 1;
+ }
+ } else {
+ newSet.push_back(lit.var());
+ }
+ }
+}
+
+void CompFinder::merge_newset_into_single_component()
+{
+ const uint32_t into = tomerge[0];
+ seen[into] = 0;
+ map<uint32_t, vector<uint32_t> >::iterator intoReverse
+ = reverseTable.find(into);
+
+ //Put the new lits into this set
+ for (const uint32_t v: newSet) {
+ intoReverse->second.push_back(v);
+ table[v] = into;
+ }
+}
+
+template<class T>
+void CompFinder::add_clause_to_component(const T& cl)
+{
+ assert(cl.size() > 1);
+ tomerge.clear();
+ newSet.clear();
+
+ if (belong_to_same_component(cl)) {
+ return;
+ }
+
+ fill_newset_and_tomerge(cl);
+
+ //no sets to merge, only merge the clause into one tree
+ if (tomerge.size() == 1) {
+ merge_newset_into_single_component();
+ return;
+ }
+
+ //Expensive merging coming up
+ bogoprops_remain -= 20;
+
+ //Delete tables to merge and put their elements into newSet
+ for (const uint32_t merge: tomerge) {
+ //Clear seen
+ seen[merge] = 0;
+
+ //Find in reverseTable
+ bogoprops_remain -= (int64_t)reverseTable.size()*2;
+ map<uint32_t, vector<uint32_t> >::iterator it2 = reverseTable.find(merge);
+ assert(it2 != reverseTable.end());
+
+ //Add them all
+ bogoprops_remain -= (int64_t)it2->second.size();
+ newSet.insert(
+ newSet.end()
+ , it2->second.begin()
+ , it2->second.end()
+ );
+
+ //Delete this comp
+ bogoprops_remain -= (int64_t)reverseTable.size();
+ reverseTable.erase(it2);
+ used_comp_no--;
+ }
+
+ //No literals lie outside of already seen components
+ if (newSet.empty())
+ return;
+
+ //Mark all lits not belonging to seen components as belonging to comp_no
+ bogoprops_remain -= (int64_t)newSet.size();
+ for (const uint32_t v: newSet) {
+ table[v] = comp_no;
+ }
+
+ reverseTable[comp_no] = newSet;
+ comp_no++;
+ used_comp_no++;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h b/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
new file mode 100644
index 000000000..64e257c71
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/compfinder.h
@@ -0,0 +1,138 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef PARTFINDER_H
+#define PARTFINDER_H
+
+#include <vector>
+#include <map>
+#include "constants.h"
+#include "solvertypes.h"
+#include "cloffset.h"
+
+namespace CMSat {
+
+class Solver;
+class Clause;
+
+using std::map;
+using std::vector;
+using std::pair;
+
+class CompFinder {
+
+ public:
+ explicit CompFinder(Solver* solver);
+ void find_components();
+ bool getTimedOut() const;
+
+ const map<uint32_t, vector<uint32_t> >& getReverseTable() const; // comp->var
+ uint32_t getVarComp(const uint32_t var) const;
+ const vector<uint32_t>& getTable() const; //var -> comp
+ const vector<uint32_t>& getCompVars(const uint32_t comp);
+ uint32_t getNumComps() const;
+
+ private:
+ void addToCompImplicits();
+ void add_clauses_to_component(const vector<ClOffset>& cs);
+ template<class T>
+ void add_clause_to_component(const T& cl);
+ template<class T>
+ bool belong_to_same_component(const T& cl);
+ template<class T>
+ void fill_newset_and_tomerge(const T& cl);
+ void merge_newset_into_single_component();
+
+ void print_found_components() const;
+ bool reverse_table_is_correct() const;
+ void print_and_add_to_sql_result(const double myTime) const;
+
+ struct MySorter
+ {
+ bool operator () (
+ const pair<uint32_t, uint32_t>& left
+ , const pair<uint32_t, uint32_t>& right
+ ) {
+ return left.second < right.second;
+ }
+ };
+
+ //comp -> vars
+ map<uint32_t, vector<uint32_t> > reverseTable;
+
+ //var -> comp
+ vector<uint32_t> table;
+
+ //The comp counter
+ uint32_t comp_no;
+ uint32_t used_comp_no;
+
+ //Temporary
+ vector<uint32_t> newSet;
+ vector<uint32_t> tomerge;
+
+ //Keep track of time
+ long long bogoprops_remain;
+ long long orig_bogoprops;
+ bool timedout;
+
+ vector<uint16_t>& seen;
+ Solver* solver;
+};
+
+inline uint32_t CompFinder::getNumComps() const
+{
+ return reverseTable.size();
+}
+
+inline const map<uint32_t, vector<uint32_t> >& CompFinder::getReverseTable() const
+{
+ assert(!timedout);
+ return reverseTable;
+}
+
+inline const vector<uint32_t>& CompFinder::getTable() const
+{
+ assert(!timedout);
+ return table;
+}
+
+inline uint32_t CompFinder::getVarComp(const uint32_t var) const
+{
+ assert(!timedout);
+ return table[var];
+}
+
+inline const vector<uint32_t>& CompFinder::getCompVars(const uint32_t comp)
+{
+ assert(!timedout);
+ return reverseTable[comp];
+}
+
+inline bool CompFinder::getTimedOut() const
+{
+ return timedout;
+}
+
+} //End namespace
+
+#endif //PARTFINDER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp b/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
new file mode 100644
index 000000000..c74917709
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/comphandler.cpp
@@ -0,0 +1,768 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "comphandler.h"
+#include "compfinder.h"
+#include "varreplacer.h"
+#include "solver.h"
+#include "varupdatehelper.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "clausecleaner.h"
+#include <iostream>
+#include <cassert>
+#include <iomanip>
+#include "cryptominisat5/cryptominisat.h"
+#include "sqlstats.h"
+
+using namespace CMSat;
+using std::make_pair;
+using std::cout;
+using std::endl;
+
+//#define VERBOSE_DEBUG
+
+CompHandler::CompHandler(Solver* _solver) :
+ solver(_solver)
+ , compFinder(NULL)
+{
+}
+
+CompHandler::~CompHandler()
+{
+ if (compFinder != NULL) {
+ delete compFinder;
+ }
+}
+
+void CompHandler::new_var(const uint32_t orig_outer)
+{
+ if (orig_outer == std::numeric_limits<uint32_t>::max()) {
+ savedState.push_back(l_Undef);
+ }
+ assert(savedState.size() == solver->nVarsOuter());
+}
+
+void CompHandler::new_vars(size_t n)
+{
+ savedState.insert(savedState.end(), n, l_Undef);
+ assert(savedState.size() == solver->nVarsOuter());
+}
+
+void CompHandler::save_on_var_memory()
+{
+}
+
+size_t CompHandler::mem_used() const
+{
+ size_t mem = 0;
+ mem += savedState.capacity()*sizeof(lbool);
+ mem += useless.capacity()*sizeof(uint32_t);
+ mem += smallsolver_to_bigsolver.capacity()*sizeof(uint32_t);
+ mem += bigsolver_to_smallsolver.capacity()*sizeof(uint32_t);
+
+ return mem;
+}
+
+void CompHandler::createRenumbering(const vector<uint32_t>& vars)
+{
+ smallsolver_to_bigsolver.resize(vars.size());
+ bigsolver_to_smallsolver.resize(solver->nVars());
+
+ for(size_t i = 0, size = vars.size()
+ ; i < size
+ ; ++i
+ ) {
+ bigsolver_to_smallsolver[vars[i]] = i;
+ smallsolver_to_bigsolver[i] = vars[i];
+ }
+}
+
+bool CompHandler::assumpsInsideComponent(const vector<uint32_t>& vars)
+{
+ for(uint32_t var: vars) {
+ if (solver->var_inside_assumptions(var)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+vector<pair<uint32_t, uint32_t> > CompHandler::get_component_sizes() const
+{
+ vector<pair<uint32_t, uint32_t> > sizes;
+ map<uint32_t, vector<uint32_t> > reverseTable = compFinder->getReverseTable();
+
+ for (map<uint32_t, vector<uint32_t> >::iterator
+ it = reverseTable.begin()
+ ; it != reverseTable.end()
+ ; ++it
+ ) {
+ sizes.push_back(make_pair(
+ it->first //Comp number
+ , (uint32_t)it->second.size() //Size of the table
+ ));
+ }
+
+ //Sort according to smallest size first
+ std::sort(sizes.begin(), sizes.end(), sort_pred());
+ assert(sizes.size() > 1);
+
+ return sizes;
+}
+
+bool CompHandler::handle()
+{
+ assert(solver->conf.independent_vars == NULL && "Cannot handle components when indep vars is set");
+ assert(solver->okay());
+ double myTime = cpuTime();
+
+ delete compFinder;
+ compFinder = new CompFinder(solver);
+ compFinder->find_components();
+ if (compFinder->getTimedOut()) {
+ delete compFinder;
+ compFinder = NULL;
+ return solver->okay();
+ }
+
+ const uint32_t num_comps = compFinder->getNumComps();
+
+ //If there is only one big comp, we can't do anything
+ if (num_comps <= 1) {
+ if (solver->conf.verbosity >= 3) {
+ cout
+ << "c [comp] Only one component, not handling it separately"
+ << endl;
+ }
+
+ delete compFinder;
+ compFinder = NULL;
+ return solver->okay();
+ }
+
+ solver->xorclauses.clear();
+ #ifdef USE_GAUSS
+ solver->clearEnGaussMatrixes();
+ #endif
+ map<uint32_t, vector<uint32_t> > reverseTable = compFinder->getReverseTable();
+ assert(num_comps == compFinder->getReverseTable().size());
+ vector<pair<uint32_t, uint32_t> > sizes = get_component_sizes();
+
+ size_t num_comps_solved = 0;
+ size_t vars_solved = 0;
+ for (uint32_t it = 0; it < sizes.size()-1; ++it) {
+ const uint32_t comp = sizes[it].first;
+ vector<uint32_t>& vars = reverseTable[comp];
+ const bool ok = try_to_solve_component(it, comp, vars, num_comps);
+ if (!ok) {
+ break;
+ }
+ num_comps_solved++;
+ vars_solved += vars.size();
+ }
+
+ if (!solver->okay()) {
+ delete compFinder;
+ compFinder = NULL;
+
+ return solver->okay();
+ }
+
+ const double time_used = cpuTime() - myTime;
+ if (solver->conf.verbosity >= 1) {
+ cout
+ << "c [comp] Coming back to original instance, solved "
+ << num_comps_solved << " component(s), "
+ << vars_solved << " vars"
+ << solver->conf.print_times(time_used)
+ << endl;
+ }
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "comphandler"
+ , time_used
+ );
+ }
+
+ check_local_vardata_sanity();
+
+ delete compFinder;
+ compFinder = NULL;
+ return solver->okay();
+}
+
+bool CompHandler::try_to_solve_component(
+ const uint32_t comp_at
+ , const uint32_t comp
+ , const vector<uint32_t>& vars_orig
+ , const size_t num_comps
+) {
+ for(const uint32_t var: vars_orig) {
+ assert(solver->value(var) == l_Undef);
+ }
+
+ if (vars_orig.size() > 100ULL*1000ULL*
+ solver->conf.var_and_mem_out_mult
+ ) {
+ //There too many variables -- don't create a sub-solver
+ //I'm afraid that we will memory-out
+
+ return true;
+ }
+
+ //Components with assumptions should not be removed
+ if (assumpsInsideComponent(vars_orig))
+ return true;
+
+ return solve_component(comp_at, comp, vars_orig, num_comps);
+}
+
+bool CompHandler::solve_component(
+ const uint32_t comp_at
+ , const uint32_t comp
+ , const vector<uint32_t>& vars_orig
+ , const size_t num_comps
+) {
+ assert(!solver->drat->enabled());
+ vector<uint32_t> vars(vars_orig);
+ components_solved++;
+
+ //Sort and renumber
+ std::sort(vars.begin(), vars.end());
+ createRenumbering(vars);
+
+ if (solver->conf.verbosity && num_comps < 20) {
+ cout
+ << "c [comp] Solving component " << comp_at
+ << " num vars: " << vars.size()
+ << " ======================================="
+ << endl;
+ }
+
+ //Set up new solver
+ SolverConf conf = configureNewSolver(vars.size());
+ SATSolver newSolver(
+ (void*)&conf
+ , solver->get_must_interrupt_inter_asap_ptr()
+ );
+ moveVariablesBetweenSolvers(&newSolver, vars, comp);
+
+ //Move clauses over
+ moveClausesImplicit(&newSolver, comp, vars);
+ moveClausesLong(solver->longIrredCls, &newSolver, comp);
+ for(auto& lredcls: solver->longRedCls) {
+ moveClausesLong(lredcls, &newSolver, comp);
+ }
+
+ const lbool status = newSolver.solve();
+ //Out of time
+ if (status == l_Undef) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [comp] subcomponent returned l_Undef -- timeout or interrupt."
+ << endl;
+ }
+ readdRemovedClauses();
+ return false;
+ }
+
+ if (status == l_False) {
+ solver->ok = false;
+ if (solver->conf.verbosity) {
+ cout
+ << "c [comp] The component is UNSAT -> problem is UNSAT"
+ << endl;
+ }
+ return false;
+ }
+
+ check_solution_is_unassigned_in_main_solver(&newSolver, vars);
+ save_solution_to_savedstate(&newSolver, vars, comp);
+ move_decision_level_zero_vars_here(&newSolver);
+
+ if (solver->conf.verbosity && num_comps < 20) {
+ cout
+ << "c [comp] component " << comp_at
+ << " ======================================="
+ << endl;
+ }
+ return true;
+}
+
+void CompHandler::check_local_vardata_sanity()
+{
+ //Checking that all variables that are not in the remaining comp have
+ //correct 'removed' flags, and none have been assigned
+
+ size_t num_vars_removed_check = 0;
+ for (uint32_t outerVar = 0; outerVar < solver->nVarsOuter(); ++outerVar) {
+ const uint32_t interVar = solver->map_outer_to_inter(outerVar);
+ if (savedState[outerVar] != l_Undef) {
+ assert(solver->varData[interVar].removed == Removed::decomposed);
+ assert(solver->value(interVar) == l_Undef || solver->varData[interVar].level == 0);
+ }
+
+ if (solver->varData[interVar].removed == Removed::decomposed) {
+ num_vars_removed_check++;
+ }
+ }
+
+ assert(num_vars_removed == num_vars_removed_check);
+}
+
+void CompHandler::check_solution_is_unassigned_in_main_solver(
+ const SATSolver* newSolver
+ , const vector<uint32_t>& vars
+) {
+ for (size_t i = 0; i < vars.size(); ++i) {
+ uint32_t var = vars[i];
+ if (newSolver->get_model()[upd_bigsolver_to_smallsolver(var)] != l_Undef) {
+ assert(solver->value(var) == l_Undef);
+ }
+ }
+}
+
+void CompHandler::save_solution_to_savedstate(
+ const SATSolver* newSolver
+ , const vector<uint32_t>& vars
+ , const uint32_t comp
+) {
+ assert(savedState.size() == solver->nVarsOuter());
+ for (size_t i = 0; i < vars.size(); ++i) {
+ uint32_t var = vars[i];
+ uint32_t outerVar = solver->map_inter_to_outer(var);
+ if (newSolver->get_model()[upd_bigsolver_to_smallsolver(var)] != l_Undef) {
+ assert(savedState[outerVar] == l_Undef);
+ assert(compFinder->getVarComp(var) == comp);
+
+ savedState[outerVar] = newSolver->get_model()[upd_bigsolver_to_smallsolver(var)];
+ }
+ }
+}
+
+void CompHandler::move_decision_level_zero_vars_here(
+ const SATSolver* newSolver
+) {
+ const vector<Lit> zero_assigned = newSolver->get_zero_assigned_lits();
+ for (Lit lit: zero_assigned) {
+ assert(lit.var() < newSolver->nVars());
+ assert(lit.var() < smallsolver_to_bigsolver.size());
+ lit = Lit(smallsolver_to_bigsolver[lit.var()], lit.sign());
+ assert(solver->value(lit) == l_Undef);
+
+ assert(solver->varData[lit.var()].removed == Removed::decomposed);
+ solver->varData[lit.var()].removed = Removed::none;
+ solver->set_decision_var(lit.var());
+ num_vars_removed--;
+
+ const uint32_t outer = solver->map_inter_to_outer(lit.var());
+ savedState[outer] = l_Undef;
+ solver->enqueue(lit);
+
+ //These vars are not meant to be in the orig solver
+ //so they cannot cause UNSAT
+ solver->ok = (solver->propagate<false>().isNULL());
+ assert(solver->ok);
+ }
+}
+
+
+SolverConf CompHandler::configureNewSolver(
+ const size_t numVars
+) const {
+ SolverConf conf(solver->conf);
+ conf.origSeed = solver->mtrand.randInt();
+ conf.independent_vars = NULL;
+ if (numVars < 60) {
+ conf.do_simplify_problem = false;
+ conf.doStamp = false;
+ conf.doCache = false;
+ conf.doProbe = false;
+ conf.otfHyperbin = false;
+ conf.verbosity = std::min(solver->conf.verbosity, 0);
+ }
+
+ //Otherwise issues are:
+ // * variable elimination assumes some of these variables are set
+ // (in orig instance)
+ //
+ // * every var replaced with var replacement would need to be set anyway
+ //
+ // Let's not complicate all of this.
+ conf.greedy_undef = false;
+
+ //To small, don't clogger up the screen
+ if (numVars < 20 && solver->conf.verbosity < 3) {
+ conf.verbosity = 0;
+ }
+
+ //Don't recurse
+ conf.doCompHandler = false;
+
+ return conf;
+}
+
+/**
+@brief Moves the variables to the new solver
+
+This implies making the right variables decision in the new solver,
+and making it non-decision in the old solver.
+*/
+void CompHandler::moveVariablesBetweenSolvers(
+ SATSolver* newSolver
+ , const vector<uint32_t>& vars
+ , const uint32_t comp
+) {
+ for(const uint32_t var: vars) {
+ newSolver->new_var();
+ assert(compFinder->getVarComp(var) == comp);
+ assert(solver->value(var) == l_Undef);
+
+ assert(solver->varData[var].removed == Removed::none);
+ solver->varData[var].removed = Removed::decomposed;
+ num_vars_removed++;
+ }
+}
+
+void CompHandler::moveClausesLong(
+ vector<ClOffset>& cs
+ , SATSolver* newSolver
+ , const uint32_t comp
+) {
+ vector<Lit> tmp;
+
+ vector<ClOffset>::iterator i, j, end;
+ for (i = j = cs.begin(), end = cs.end()
+ ; i != end
+ ; ++i
+ ) {
+ Clause& cl = *solver->cl_alloc.ptr(*i);
+
+ //Irred, different comp
+ if (!cl.red()) {
+ if (compFinder->getVarComp(cl[0].var()) != comp) {
+ //different comp, move along
+ *j++ = *i;
+ continue;
+ }
+ }
+
+ if (cl.red()) {
+ //Check which comp(s) it belongs to
+ bool thisComp = false;
+ bool otherComp = false;
+ for (Lit* l = cl.begin(), *end2 = cl.end(); l != end2; ++l) {
+ if (compFinder->getVarComp(l->var()) == comp)
+ thisComp = true;
+
+ if (compFinder->getVarComp(l->var()) != comp)
+ otherComp = true;
+ }
+
+ //In both comps, remove it
+ if (thisComp && otherComp) {
+ solver->detachClause(cl);
+ solver->cl_alloc.clauseFree(&cl);
+ continue;
+ }
+
+ //In one comp, but not this one
+ if (!thisComp) {
+ //different comp, move along
+ *j++ = *i;
+ continue;
+ }
+ assert(thisComp && !otherComp);
+ }
+
+ //Let's move it to the other solver!
+ #ifdef VERBOSE_DEBUG
+ cout << "clause in this comp:" << cl << endl;
+ #endif
+
+ //Create temporary space 'tmp' and copy to backup
+ tmp.resize(cl.size());
+ for (size_t i2 = 0; i2 < cl.size(); ++i2) {
+ tmp[i2] = upd_bigsolver_to_smallsolver(cl[i2]);
+ }
+
+ //Add 'tmp' to the new solver
+ if (cl.red()) {
+ #ifdef STATS_NEEDED
+ cl.stats.introduced_at_conflict = 0;
+ #endif
+ //newSolver->addRedClause(tmp, cl.stats);
+ } else {
+ saveClause(cl);
+ newSolver->add_clause(tmp);
+ }
+
+ //Remove from here
+ solver->detachClause(cl);
+ solver->cl_alloc.clauseFree(&cl);
+ }
+ cs.resize(cs.size() - (i-j));
+}
+
+void CompHandler::remove_bin_except_for_lit1(const Lit lit, const Lit lit2)
+{
+ removeWBin(solver->watches, lit2, lit, true);
+
+ //Update stats
+ solver->binTri.redBins--;
+}
+
+void CompHandler::move_binary_clause(
+ SATSolver* newSolver
+ , const uint32_t comp
+ , Watched *i
+ , const Lit lit
+) {
+ const Lit lit2 = i->lit2();
+
+ //Unless redundant, cannot be in 2 comps at once
+ assert((compFinder->getVarComp(lit.var()) == comp
+ && compFinder->getVarComp(lit2.var()) == comp
+ ) || i->red()
+ );
+
+ //If it's redundant and the lits are in different comps, remove it.
+ if (compFinder->getVarComp(lit.var()) != comp
+ || compFinder->getVarComp(lit2.var()) != comp
+ ) {
+ //Can only be redundant, otherwise it would be in the same
+ //component
+ assert(i->red());
+
+ //The way we go through this, it's definitely going to be
+ //lit2 that's in the other component
+ assert(compFinder->getVarComp(lit2.var()) != comp);
+
+ remove_bin_except_for_lit1(lit, lit2);
+ return;
+ }
+
+ //don't add the same clause twice
+ if (lit < lit2) {
+
+ //Add clause
+ tmp_lits = {upd_bigsolver_to_smallsolver(lit), upd_bigsolver_to_smallsolver(lit2)};
+ assert(compFinder->getVarComp(lit.var()) == comp);
+ assert(compFinder->getVarComp(lit2.var()) == comp);
+
+ //Add new clause
+ if (i->red()) {
+ //newSolver->addRedClause(tmp_lits);
+ numRemovedHalfRed++;
+ } else {
+ //Save backup
+ saveClause(vector<Lit>{lit, lit2});
+
+ newSolver->add_clause(tmp_lits);
+ numRemovedHalfIrred++;
+ }
+ } else {
+
+ //Just remove, already added above
+ if (i->red()) {
+ numRemovedHalfRed++;
+ } else {
+ numRemovedHalfIrred++;
+ }
+ }
+}
+
+void CompHandler::moveClausesImplicit(
+ SATSolver* newSolver
+ , const uint32_t comp
+ , const vector<uint32_t>& vars
+) {
+ numRemovedHalfIrred = 0;
+ numRemovedHalfRed = 0;
+
+ for(const uint32_t var: vars) {
+ for(unsigned sign = 0; sign < 2; ++sign) {
+ const Lit lit = Lit(var, sign);
+ watch_subarray ws = solver->watches[lit];
+
+ //If empty, nothing to to, skip
+ if (ws.empty()) {
+ continue;
+ }
+
+ Watched *i = ws.begin();
+ Watched *j = i;
+ for (Watched *end2 = ws.end()
+ ; i != end2
+ ; ++i
+ ) {
+ //At least one variable inside comp
+ if (i->isBin()
+ && (compFinder->getVarComp(lit.var()) == comp
+ || compFinder->getVarComp(i->lit2().var()) == comp
+ )
+ ) {
+ move_binary_clause(newSolver, comp, i, lit);
+ continue;
+ }
+ *j++ = *i;
+ }
+ ws.shrink_(i-j);
+ }}
+
+ assert(numRemovedHalfIrred % 2 == 0);
+ solver->binTri.irredBins -= numRemovedHalfIrred/2;
+
+ assert(numRemovedHalfRed % 2 == 0);
+ solver->binTri.redBins -= numRemovedHalfRed/2;
+}
+
+void CompHandler::addSavedState(vector<lbool>& solution)
+{
+ //Enqueue them. They may need to be extended, so enqueue is needed
+ //manipulating "model" may not be good enough
+ assert(savedState.size() == solver->nVarsOuter());
+ assert(solution.size() == solver->nVarsOuter());
+ for (size_t var = 0; var < savedState.size(); ++var) {
+ if (savedState[var] != l_Undef) {
+ const uint32_t interVar = solver->map_outer_to_inter(var);
+ assert(solver->varData[interVar].removed == Removed::decomposed);
+
+ const lbool val = savedState[var];
+ assert(solution[var] == l_Undef);
+ solution[var] = val;
+ //cout << "Solution to var " << var + 1 << " has been added: " << val << endl;
+
+ solver->varData[interVar].polarity = (val == l_True);
+ }
+ }
+}
+
+template<class T>
+void CompHandler::saveClause(const T& lits)
+{
+ //Update variable number to 'outer' number. This means we will not have
+ //to update the variables every time the internal variable numbering changes
+ for (const Lit lit : lits ) {
+ removedClauses.lits.push_back(
+ solver->map_inter_to_outer(lit)
+ );
+ }
+ removedClauses.sizes.push_back(lits.size());
+}
+
+void CompHandler::readdRemovedClauses()
+{
+ assert(solver->okay());
+ double myTime = cpuTime();
+
+ //Avoid recursion, clear 'removed' status
+ for(size_t outer = 0; outer < solver->nVarsOuter(); ++outer) {
+ const uint32_t inter = solver->map_outer_to_inter(outer);
+ VarData& dat = solver->varData[inter];
+ if (dat.removed == Removed::decomposed) {
+ dat.removed = Removed::none;
+ num_vars_removed--;
+ }
+ }
+
+ //Clear saved state
+ for(lbool& val: savedState) {
+ val = l_Undef;
+ }
+
+ vector<Lit> tmp;
+ size_t at = 0;
+ for (uint32_t sz: removedClauses.sizes) {
+
+ //addClause() needs *outer* literals, so just do that
+ tmp.clear();
+ for(size_t i = at; i < at + sz; ++i) {
+ tmp.push_back(removedClauses.lits[i]);
+ }
+ if (solver->conf.verbosity >= 6) {
+ cout << "c [comp] Adding back component clause " << tmp << endl;
+ }
+
+ //Add the clause to the system
+ solver->addClause(tmp);
+ assert(solver->okay());
+
+ //Move 'at' along
+ at += sz;
+ }
+
+ //The variables have been added back thanks to addClause()
+ //-> set them decision
+ for(size_t outer = 0; outer < solver->nVarsOuter(); ++outer) {
+ const uint32_t inter = solver->map_outer_to_inter(outer);
+ VarData& dat = solver->varData[inter];
+ if (dat.removed == Removed::none
+ && solver->value(inter) == l_Undef
+ ) {
+ solver->set_decision_var(inter);
+ }
+ }
+
+ //Explain what we just did
+ const double time_used = cpuTime() - myTime;
+ if (solver->conf.verbosity) {
+ cout
+ << "c [comp] re-added components. Lits: "
+ << removedClauses.lits.size()
+ << " cls:" << removedClauses.sizes.size()
+ << solver->conf.print_times(time_used)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "comp re-adding"
+ , time_used
+ );
+ }
+
+ //Clear added data
+ removedClauses.lits.clear();
+ removedClauses.sizes.clear();
+}
+
+void CompHandler::dump_removed_clauses(std::ostream* outfile) const
+{
+ vector<Lit> tmp;
+ size_t at = 0;
+ for (uint32_t size :removedClauses.sizes) {
+ tmp.clear();
+ for(size_t i = at; i < at + size; ++i) {
+ tmp.push_back(removedClauses.lits[i]);
+ }
+ std::sort(tmp.begin(), tmp.end());
+ *outfile << tmp << " 0" << endl;
+
+ //Move 'at' along
+ at += size;
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h b/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
new file mode 100644
index 000000000..706bfeb93
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/comphandler.h
@@ -0,0 +1,203 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef PARTHANDLER_H
+#define PARTHANDLER_H
+
+#include "solvertypes.h"
+#include "cloffset.h"
+#include <map>
+#include <vector>
+
+namespace CMSat {
+
+using std::map;
+using std::vector;
+using std::pair;
+
+class SATSolver;
+class Solver;
+class CompFinder;
+class Watched;
+
+/**
+@brief Disconnected components are treated here
+
+Uses CompFinder to find disconnected components and treats them using
+subsolvers. The solutions (if SAT) are aggregated, and at then end, the
+solution is extended with the sub-solutions, and the removed clauses are
+added back to the problem.
+*/
+class CompHandler
+{
+ public:
+ explicit CompHandler(Solver* solver);
+ ~CompHandler();
+
+ struct RemovedClauses {
+ vector<Lit> lits;
+ vector<uint32_t> sizes;
+ };
+
+ bool handle();
+ const vector<lbool>& getSavedState();
+ void new_var(const uint32_t orig_outer);
+ void new_vars(const size_t n);
+ void save_on_var_memory();
+ void addSavedState(vector<lbool>& solution);
+ void readdRemovedClauses();
+ const RemovedClauses& getRemovedClauses() const;
+ void dump_removed_clauses(std::ostream* outfile) const;
+ size_t get_num_vars_removed() const;
+ size_t get_num_components_solved() const;
+ size_t mem_used() const;
+
+ private:
+ struct sort_pred {
+ bool operator()(
+ const std::pair<int,int> &left
+ , const std::pair<int,int> &right
+ ) {
+ return left.second < right.second;
+ }
+ };
+ bool assumpsInsideComponent(const vector<uint32_t>& vars);
+ void move_decision_level_zero_vars_here(
+ const SATSolver* newSolver
+ );
+ void save_solution_to_savedstate(
+ const SATSolver* newSolver
+ , const vector<uint32_t>& vars
+ , const uint32_t comp
+ );
+ void check_solution_is_unassigned_in_main_solver(
+ const SATSolver* newSolver
+ , const vector<uint32_t>& vars
+ );
+ void check_local_vardata_sanity();
+ bool try_to_solve_component(
+ const uint32_t comp_at
+ , const uint32_t comp
+ , const vector<uint32_t>& vars
+ , const size_t num_comps
+ );
+ bool solve_component(
+ const uint32_t comp_at
+ , const uint32_t comp
+ , const vector<uint32_t>& vars_orig
+ , const size_t num_comps
+ );
+ vector<pair<uint32_t, uint32_t> > get_component_sizes() const;
+
+ SolverConf configureNewSolver(
+ const size_t numVars
+ ) const;
+
+ void moveVariablesBetweenSolvers(
+ SATSolver* newSolver
+ , const vector<uint32_t>& vars
+ , const uint32_t comp
+ );
+
+ //For moving clauses
+ void moveClausesImplicit(
+ SATSolver* newSolver
+ , const uint32_t comp
+ , const vector<uint32_t>& vars
+ );
+ void moveClausesLong(
+ vector<ClOffset>& cs
+ , SATSolver* newSolver
+ , const uint32_t comp
+ );
+ void move_binary_clause(
+ SATSolver* newSolver
+ , const uint32_t comp
+ , Watched *i
+ , const Lit lit
+ );
+ void remove_bin_except_for_lit1(const Lit lit, const Lit lit2);
+
+ Solver* solver;
+ CompFinder* compFinder;
+
+ ///The solutions that have been found by the comps
+ vector<lbool> savedState;
+
+ //Re-numbering
+ void createRenumbering(const vector<uint32_t>& vars);
+ vector<uint32_t> useless; //temporary
+ vector<uint32_t> smallsolver_to_bigsolver;
+ vector<uint32_t> bigsolver_to_smallsolver;
+
+ Lit upd_bigsolver_to_smallsolver(const Lit lit) const
+ {
+ return Lit(upd_bigsolver_to_smallsolver(lit.var()), lit.sign());
+ }
+
+ uint32_t upd_bigsolver_to_smallsolver(const uint32_t var) const
+ {
+ return bigsolver_to_smallsolver[var];
+ }
+
+ //Saving clauses
+ template<class T>
+ void saveClause(const T& lits);
+ RemovedClauses removedClauses;
+ size_t num_vars_removed = 0;
+ size_t components_solved = 0;
+
+ //Clauses that have been moved to other comps
+ //vector<ClOffset> clausesRemoved;
+ //vector<pair<Lit, Lit> > binClausesRemoved;
+
+ uint32_t numRemovedHalfIrred = 0;
+ uint32_t numRemovedHalfRed = 0;
+ vector<Lit> tmp_lits;
+};
+
+/**
+@brief Returns the saved state of a variable
+*/
+inline const vector<lbool>& CompHandler::getSavedState()
+{
+ return savedState;
+}
+
+inline const CompHandler::RemovedClauses& CompHandler::getRemovedClauses() const
+{
+ return removedClauses;
+}
+
+inline size_t CompHandler::get_num_vars_removed() const
+{
+ return num_vars_removed;
+}
+
+inline size_t CompHandler::get_num_components_solved() const
+{
+ return components_solved;
+}
+
+} //end of namespace
+
+#endif //PARTHANDLER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp b/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
new file mode 100644
index 000000000..88cc85070
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.cpp
@@ -0,0 +1,231 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "completedetachreattacher.h"
+#include "solver.h"
+#include "varreplacer.h"
+#include "clausecleaner.h"
+#include "clauseallocator.h"
+
+using namespace CMSat;
+
+CompleteDetachReatacher::CompleteDetachReatacher(Solver* _solver) :
+ solver(_solver)
+{
+}
+
+/**
+@brief Completely detach all non-binary clauses
+*/
+void CompleteDetachReatacher::detach_nonbins_nontris()
+{
+ assert(!solver->drat->something_delayed());
+ ClausesStay stay;
+
+ for (watch_array::iterator
+ it = solver->watches.begin(), end = solver->watches.end()
+ ; it != end
+ ; ++it
+ ) {
+ stay += clearWatchNotBinNotTri(*it);
+ }
+
+ solver->litStats.redLits = 0;
+ solver->litStats.irredLits = 0;
+
+ assert(stay.redBins % 2 == 0);
+ solver->binTri.redBins = stay.redBins/2;
+
+ assert(stay.irredBins % 2 == 0);
+ solver->binTri.irredBins = stay.irredBins/2;
+}
+
+/**
+@brief Helper function for detachPointerUsingClauses()
+*/
+CompleteDetachReatacher::ClausesStay CompleteDetachReatacher::clearWatchNotBinNotTri(
+ watch_subarray ws
+) {
+ ClausesStay stay;
+
+ Watched* i = ws.begin();
+ Watched* j = i;
+ for (Watched* end = ws.end(); i != end; i++) {
+ if (i->isBin()) {
+ if (i->red())
+ stay.redBins++;
+ else
+ stay.irredBins++;
+
+ *j++ = *i;
+ }
+ }
+ ws.shrink_(i-j);
+
+ return stay;
+}
+
+bool CompleteDetachReatacher::reattachLongs(bool removeStatsFirst)
+{
+ if (solver->conf.verbosity >= 6) {
+ cout << "Cleaning and reattaching clauses" << endl;
+ }
+
+ cleanAndAttachClauses(solver->longIrredCls, removeStatsFirst);
+ for(auto& lredcls: solver->longRedCls) {
+ cleanAndAttachClauses(lredcls, removeStatsFirst);
+ }
+ solver->clauseCleaner->clean_implicit_clauses();
+ assert(!solver->drat->something_delayed());
+
+ if (solver->ok) {
+ solver->ok = (solver->propagate<true>().isNULL());
+ }
+
+ return solver->okay();
+}
+
+
+void CompleteDetachReatacher::reattachLongsNoClean()
+{
+ attachClauses(solver->longIrredCls);
+ for(auto& lredcls: solver->longRedCls) {
+ attachClauses(lredcls);
+ }
+}
+
+void CompleteDetachReatacher::attachClauses(
+ vector<ClOffset>& cs
+) {
+ for (ClOffset offs: cs) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ bool satisfied = false;
+ for(Lit lit: *cl) {
+ if (solver->value(lit) == l_True) {
+ satisfied = true;
+ }
+ }
+ if (!satisfied) {
+ assert(solver->value((*cl)[0]) == l_Undef);
+ assert(solver->value((*cl)[1]) == l_Undef);
+ }
+ solver->attachClause(*cl, false);
+ }
+}
+
+/**
+@brief Cleans clauses from failed literals/removes satisfied clauses from cs
+
+May change solver->ok to FALSE (!)
+*/
+void CompleteDetachReatacher::cleanAndAttachClauses(
+ vector<ClOffset>& cs
+ , bool removeStatsFirst
+) {
+ vector<ClOffset>::iterator i = cs.begin();
+ vector<ClOffset>::iterator j = i;
+ for (vector<ClOffset>::iterator end = cs.end(); i != end; i++) {
+ assert(!solver->drat->something_delayed());
+ Clause* cl = solver->cl_alloc.ptr(*i);
+
+ //Handle stat removal if need be
+ if (removeStatsFirst) {
+ if (cl->red()) {
+ solver->litStats.redLits -= cl->size();
+ } else {
+ solver->litStats.irredLits -= cl->size();
+ }
+ }
+
+ if (clean_clause(cl)) {
+ solver->attachClause(*cl);
+ *j++ = *i;
+ } else {
+ solver->cl_alloc.clauseFree(*i);
+ }
+ }
+ cs.resize(cs.size() - (i-j));
+}
+
+/**
+@brief Not only cleans a clause from false literals, but if clause is satisfied, it reports it
+*/
+bool CompleteDetachReatacher::clean_clause(Clause* cl)
+{
+ Clause& ps = *cl;
+ (*solver->drat) << deldelay << ps << fin;
+ if (ps.size() <= 2) {
+ cout
+ << "ERROR, clause is too small, and linked in: "
+ << *cl
+ << endl;
+ }
+ assert(ps.size() > 2);
+
+ Lit *i = ps.begin();
+ Lit *j = i;
+ for (Lit *end = ps.end(); i != end; i++) {
+ if (solver->value(*i) == l_True) {
+ (*solver->drat) << findelay;
+ return false;
+ }
+ if (solver->value(*i) == l_Undef) {
+ *j++ = *i;
+ }
+ }
+ ps.shrink(i-j);
+
+ //Drat
+ if (i != j) {
+ (*solver->drat) << add << *cl
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+ } else {
+ solver->drat->forget_delay();
+ }
+
+ switch (ps.size()) {
+ case 0:
+ solver->ok = false;
+ return false;
+
+ case 1:
+ solver->enqueue(ps[0]);
+ #ifdef STATS_NEEDED
+ solver->propStats.propsUnit++;
+ #endif
+ return false;
+
+ case 2: {
+ solver->attach_bin_clause(ps[0], ps[1], ps.red());
+ return false;
+ }
+
+ default: {
+ break;
+ }
+ }
+
+ return true;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h b/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
new file mode 100644
index 000000000..82a85748c
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/completedetachreattacher.h
@@ -0,0 +1,86 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __COMPLETE_DETACH_REATTACHER__
+#define __COMPLETE_DETACH_REATTACHER__
+
+#include "constants.h"
+#include "watched.h"
+#include "watcharray.h"
+
+namespace CMSat {
+
+class Solver;
+class Clause;
+
+/**
+@brief Helper class to completely detaches all(or only non-native) clauses
+
+Used in classes that (may) do a lot of clause-changning, in which case
+detaching&reattaching of clauses would be neccessary to do
+individually, which is \b very slow
+
+A main use-case is the following:
+-# detach all clauses
+-# play around with all clauses as desired. Cannot call solver.propagate() here
+-# attach again
+*/
+class CompleteDetachReatacher
+{
+ public:
+ explicit CompleteDetachReatacher(Solver* solver);
+ bool reattachLongs(bool removeStatsFrist = false);
+ void detach_nonbins_nontris();
+ void reattachLongsNoClean();
+
+ private:
+ void attachClauses(vector<ClOffset>& cs);
+ void cleanAndAttachClauses(
+ vector<ClOffset>& cs
+ , bool removeStatsFrist
+ );
+ bool clean_clause(Clause* cl);
+
+ class ClausesStay {
+ public:
+ ClausesStay() :
+ redBins(0)
+ , irredBins(0)
+ {}
+
+ ClausesStay& operator+=(const ClausesStay& other) {
+ redBins += other.redBins;
+ irredBins += other.irredBins;
+ return *this;
+ }
+
+ uint64_t redBins;
+ uint64_t irredBins;
+ };
+ ClausesStay clearWatchNotBinNotTri(watch_subarray ws);
+
+ Solver* solver;
+};
+
+} //end namespace
+
+#endif //__COMPLETE_DETACH_REATTACHER__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/constants.h b/cryptominisat5/cryptominisat-5.6.3/src/constants.h
new file mode 100644
index 000000000..00067366f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/constants.h
@@ -0,0 +1,142 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CONSTANTS_H__
+#define __CONSTANTS_H__
+
+#include <cstdint>
+#include <cstdlib>
+#include <stdio.h>
+
+#if defined(_MSC_VER)
+#define release_assert(a) \
+ do { \
+ __pragma(warning(push)) \
+ __pragma(warning(disable:4127)) \
+ if (!(a)) {\
+ __pragma(warning(pop)) \
+ fprintf(stderr, "*** ASSERTION FAILURE in %s() [%s:%d]: %s\n", \
+ __FUNCTION__, __FILE__, __LINE__, #a); \
+ abort(); \
+ } \
+ } while (0)
+#else
+#define release_assert(a) \
+ do { \
+ if (!(a)) {\
+ fprintf(stderr, "*** ASSERTION FAILURE in %s() [%s:%d]: %s\n", \
+ __FUNCTION__, __FILE__, __LINE__, #a); \
+ abort(); \
+ } \
+ } while (0)
+#endif
+
+#if !defined(__GNUC__) && !defined(__clang__)
+#define __builtin_prefetch(x) (void)(x)
+#endif //__GNUC__
+
+//We shift stuff around in Watched, so not all of 32 bits are useable.
+//for STATS we have 64b values in the Clauses, so they must be aligned to 64
+
+#if defined(STATS_NEEDED)
+#define LARGE_OFFSETS
+#endif
+
+#if defined(LARGE_OFFSETS)
+#define BASE_DATA_TYPE uint64_t
+#define EFFECTIVELY_USEABLE_BITS 62
+#else
+#define BASE_DATA_TYPE uint32_t
+#define EFFECTIVELY_USEABLE_BITS 30
+#endif
+
+#if defined _WIN32
+ #define DLL_PUBLIC __declspec(dllexport)
+#else
+ #define DLL_PUBLIC __attribute__ ((visibility ("default")))
+ #define DLL_LOCAL __attribute__ ((visibility ("hidden")))
+#endif
+
+///////////////////
+// Verbose Debug
+///////////////////
+
+//#define DRAT_DEBUG
+//#define VERBOSE_DEBUG
+
+#ifdef VERBOSE_DEBUG
+#define FAST_DEBUG
+#define DEBUG_ATTACH_FULL
+#define VERBOSE_DEBUG_XOR
+#define VERBOSE_DEBUG_RECONSTRUCT
+#endif
+
+//Thanks to Axel Kemper for the definitions below
+#ifdef _MSC_VER
+#pragma warning(disable : 4244) // C4244 : 'Argument': Konvertierung von 'const uint64_t' in 'double', möglicher Datenverlust
+#pragma warning(disable : 4267) // C4267 : 'return': Konvertierung von 'size_t' nach 'uint32_t', Datenverlust möglich
+#pragma warning(disable : 4302) // C4302 : truncation
+#pragma warning(disable : 4311) // C4311 : pointer truncation
+#pragma warning(disable : 4800) // C4800 : 'const uint32_t' : Variable wird auf booleschen Wert('True' oder 'False') gesetzt(Auswirkungen auf Leistungsverhalten möglich)
+#pragma warning(disable : 4805) // C4805 : '==' : unsichere Kombination von Typ 'unsigned short' mit Typ 'bool' in einer Operation
+#endif
+
+
+#ifdef __GNUC__
+ #define likely(x) __builtin_expect((x), 1)
+ #define unlikely(x) __builtin_expect((x), 0)
+#else
+ #define likely(x) x
+ #define unlikely(x) x
+#endif
+
+///////////////////
+// Silent Debug
+///////////////////
+
+#ifndef NDEBUG
+//#define FAST_DEBUG
+#endif
+
+#ifdef SLOW_DEBUG
+#define FAST_DEBUG
+#define DEBUG_PROPAGATEFROM
+#define ENQUEUE_DEBUG
+#define DEBUG_ATTACH_MORE
+#define DEBUG_IMPLICIT_PAIRS_TRIPLETS
+#define DEBUG_IMPLICIT_STATS
+#define DEBUG_GAUSS
+#define XOR_DEBUG
+#endif
+
+#ifdef FAST_DEBUG
+#define DEBUG_VARELIM
+#define DEBUG_WATCHED
+#define DEBUG_ATTACH
+#define DEBUG_REPLACER
+#define DEBUG_MARKED_CLAUSE
+#define CHECK_N_OCCUR
+#endif
+
+//#define DEBUG_ATTACH_FULL
+
+#endif //__CONSTANTS_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
new file mode 100644
index 000000000..652881280
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.cpp
@@ -0,0 +1,1075 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "constants.h"
+#include "cryptominisat5/cryptominisat.h"
+#include "solver.h"
+#include "drat.h"
+#include "shareddata.h"
+#include <fstream>
+
+#include <thread>
+#include <mutex>
+#include <atomic>
+using std::thread;
+
+#define CACHE_SIZE 10ULL*1000ULL*1000UL
+#ifndef LIMITMEM
+#define MAX_VARS (1ULL<<28)
+#else
+#define MAX_VARS 3000
+#endif
+
+using namespace CMSat;
+
+static bool print_thread_start_and_finish = false;
+
+namespace CMSat {
+ struct CMSatPrivateData {
+ explicit CMSatPrivateData(std::atomic<bool>* _must_interrupt)
+ {
+ must_interrupt = _must_interrupt;
+ if (must_interrupt == NULL) {
+ must_interrupt = new std::atomic<bool>(false);
+ must_interrupt_needs_delete = true;
+ }
+ }
+ ~CMSatPrivateData()
+ {
+ for(Solver* this_s: solvers) {
+ delete this_s;
+ }
+ if (must_interrupt_needs_delete) {
+ delete must_interrupt;
+ }
+
+ delete log; //this will also close the file
+ delete shared_data;
+ }
+ CMSatPrivateData(const CMSatPrivateData&) = delete;
+ CMSatPrivateData& operator=(const CMSatPrivateData&) = delete;
+
+ vector<Solver*> solvers;
+ SharedData *shared_data = NULL;
+ int which_solved = 0;
+ std::atomic<bool>* must_interrupt;
+ bool must_interrupt_needs_delete = false;
+ unsigned cls = 0;
+ unsigned vars_to_add = 0;
+ vector<Lit> cls_lits;
+ bool okay = true;
+ std::ofstream* log = NULL;
+ int sql = 0;
+ double timeout = std::numeric_limits<double>::max();
+
+ uint64_t previous_sum_conflicts = 0;
+ uint64_t previous_sum_propagations = 0;
+ uint64_t previous_sum_decisions = 0;
+ };
+}
+
+struct DataForThread
+{
+ explicit DataForThread(CMSatPrivateData* data, const vector<Lit>* _assumptions = NULL) :
+ solvers(data->solvers)
+ , lits_to_add(&(data->cls_lits))
+ , vars_to_add(data->vars_to_add)
+ , assumptions(_assumptions)
+ , update_mutex(new std::mutex)
+ , which_solved(&(data->which_solved))
+ , ret(new lbool(l_Undef))
+ {
+ }
+
+ ~DataForThread()
+ {
+ delete update_mutex;
+ delete ret;
+ }
+ vector<Solver*>& solvers;
+ vector<Lit> *lits_to_add;
+ uint32_t vars_to_add;
+ const vector<Lit> *assumptions;
+ std::mutex* update_mutex;
+ int *which_solved;
+ lbool* ret;
+};
+
+DLL_PUBLIC SATSolver::SATSolver(
+ void* config
+ , std::atomic<bool>* interrupt_asap
+ )
+{
+ data = new CMSatPrivateData(interrupt_asap);
+
+ if (config && ((SolverConf*) config)->verbosity) {
+ //NOT SAFE
+ //yes -- this system will use a lock, but the solver itself won't(!)
+ //so things will get mangled and printed wrongly
+ //print_thread_start_and_finish = true;
+ }
+
+ data->solvers.push_back(new Solver((SolverConf*) config, data->must_interrupt));
+}
+
+DLL_PUBLIC SATSolver::~SATSolver()
+{
+ delete data;
+}
+
+void update_config(SolverConf& conf, unsigned thread_num)
+{
+ //Don't accidentally reconfigure everything to a specific value!
+ if (thread_num > 0) {
+ conf.reconfigure_val = 0;
+ }
+ conf.origSeed += thread_num;
+
+ switch(thread_num % 23) {
+ case 0: {
+ //default setup
+ break;
+ }
+
+ case 1: {
+ //Minisat-like
+ conf.maple = 0;
+ conf.varElimRatioPerIter = 1;
+ conf.restartType = Restart::geom;
+ conf.polarity_mode = CMSat::PolarityMode::polarmode_neg;
+
+ conf.inc_max_temp_lev2_red_cls = 1.02;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.5;
+ break;
+ }
+ case 2: {
+ conf.maple = 1;
+ conf.modulo_maple_iter = 100;
+ break;
+ }
+ case 3: {
+ //Similar to CMS 2.9 except we look at learnt DB size insteead
+ //of conflicts to see if we need to clean.
+ conf.maple = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0.5;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0;
+ conf.glue_put_lev0_if_below_or_eq = 0;
+ conf.inc_max_temp_lev2_red_cls = 1.03;
+ break;
+ }
+ case 4: {
+ //Similar to CMS 5.0
+ conf.maple = 0;
+ conf.varElimRatioPerIter = 0.4;
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.max_temp_lev2_learnt_clauses = 30000;
+ conf.glue_put_lev0_if_below_or_eq = 4;
+
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.5;
+ break;
+ }
+ case 5: {
+ conf.maple = 0;
+ conf.never_stop_search = true;
+ break;
+ }
+ case 6: {
+ //Maple with backtrack
+ conf.maple = 1;
+ conf.modulo_maple_iter = 100;
+ break;
+ }
+ case 7: {
+ conf.maple = 0;
+ conf.do_bva = true;
+ conf.glue_put_lev0_if_below_or_eq = 2;
+ conf.varElimRatioPerIter = 1;
+ conf.inc_max_temp_lev2_red_cls = 1.04;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0.1;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.3;
+ conf.var_decay_vsids_max = 0.90; //more 'slow' in adjusting activities
+ break;
+ }
+ case 8: {
+ //Different glue limit
+ conf.maple = 0;
+ conf.glue_put_lev0_if_below_or_eq = 2;
+ conf.glue_put_lev1_if_below_or_eq = 2;
+ break;
+ }
+ case 9: {
+ conf.maple = 0;
+ conf.var_decay_vsids_max = 0.998;
+ break;
+ }
+ case 10: {
+ conf.maple = 0;
+ conf.polarity_mode = CMSat::PolarityMode::polarmode_pos;
+ break;
+ }
+ case 11: {
+ conf.maple = 0;
+ conf.varElimRatioPerIter = 1;
+ conf.restartType = Restart::geom;
+
+ conf.inc_max_temp_lev2_red_cls = 1.01;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.3;
+ break;
+ }
+ case 12: {
+ conf.maple = 0;
+ conf.inc_max_temp_lev2_red_cls = 1.001;
+ break;
+ }
+
+ case 13: {
+ //Minisat-like
+ conf.maple = 1;
+ conf.varElimRatioPerIter = 1;
+ conf.restartType = Restart::geom;
+ conf.polarity_mode = CMSat::PolarityMode::polarmode_neg;
+
+ conf.inc_max_temp_lev2_red_cls = 1.02;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.5;
+ break;
+ }
+ case 14: {
+ //Different glue limit
+ conf.maple = 0;
+ conf.doMinimRedMoreMore = 1;
+ conf.glue_put_lev0_if_below_or_eq = 4;
+ //conf.glue_put_lev2_if_below_or_eq = 8;
+ conf.max_num_lits_more_more_red_min = 3;
+ conf.max_glue_more_minim = 4;
+ break;
+ }
+ case 15: {
+ //Similar to CMS 2.9 except we look at learnt DB size insteead
+ //of conflicts to see if we need to clean.
+ conf.maple = 1;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0.5;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0;
+ conf.glue_put_lev0_if_below_or_eq = 0;
+ conf.inc_max_temp_lev2_red_cls = 1.03;
+ break;
+ }
+ case 16: {
+ //Similar to CMS 5.0
+ conf.maple = 1;
+ conf.varElimRatioPerIter = 0.4;
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.max_temp_lev2_learnt_clauses = 30000;
+ conf.glue_put_lev0_if_below_or_eq = 4;
+
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.5;
+ break;
+ }
+ case 17: {
+ //conf.max_temporary_learnt_clauses = 10000;
+ conf.do_bva = true;
+ break;
+ }
+ case 18: {
+ conf.maple = 0;
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.glue_put_lev1_if_below_or_eq = 0;
+ conf.max_temp_lev2_learnt_clauses = 10000;
+ break;
+ }
+
+ case 19: {
+ conf.maple = 1;
+ conf.doMinimRedMoreMore = 1;
+ conf.orig_global_timeout_multiplier = 5;
+ conf.num_conflicts_of_search_inc = 1.15;
+ conf.more_red_minim_limit_cache = 1200;
+ conf.more_red_minim_limit_binary = 600;
+ conf.max_num_lits_more_more_red_min = 20;
+ //conf.max_temporary_learnt_clauses = 10000;
+ conf.var_decay_vsids_max = 0.99; //more 'fast' in adjusting activities
+ break;
+ }
+
+ case 20: {
+ //Luby
+ conf.maple = 0;
+ conf.restart_inc = 1.5;
+ conf.restart_first = 100;
+ conf.restartType = CMSat::Restart::luby;
+ break;
+ }
+
+ case 21: {
+ conf.maple = 0;
+ conf.glue_put_lev0_if_below_or_eq = 3;
+ conf.glue_put_lev1_if_below_or_eq = 5;
+ conf.var_decay_vsids_max = 0.97;
+ break;
+ }
+
+ case 22: {
+ conf.maple = 0;
+ conf.doMinimRedMoreMore = 1;
+ conf.orig_global_timeout_multiplier = 5;
+ conf.num_conflicts_of_search_inc = 1.15;
+ conf.more_red_minim_limit_cache = 1200;
+ conf.more_red_minim_limit_binary = 600;
+ conf.max_num_lits_more_more_red_min = 20;
+ //conf.max_temporary_learnt_clauses = 10000;
+ conf.var_decay_vsids_max = 0.99; //more 'fast' in adjusting activities
+ break;
+ }
+
+ default: {
+ conf.maple = ((thread_num % 3) <= 1);
+ conf.modulo_maple_iter = (thread_num % 7)+1;
+ conf.varElimRatioPerIter = 0.1*(thread_num % 9);
+ if (thread_num % 4 == 0) {
+ conf.restartType = Restart::glue;
+ }
+ if (thread_num % 5 == 0) {
+ conf.restartType = Restart::geom;
+ }
+ conf.restart_first = 100 * (0.5*(thread_num % 5));
+ conf.doMinimRedMoreMore = ((thread_num % 5) == 1);
+ break;
+ }
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_num_threads(unsigned num)
+{
+ if (num <= 0) {
+ std::cerr << "ERROR: Number of threads must be at least 1" << endl;
+ throw std::runtime_error("ERROR: Number of threads must be at least 1");
+ }
+ if (num == 1) {
+ return;
+ }
+
+ if (data->solvers[0]->drat->enabled() ||
+ data->solvers[0]->conf.simulate_drat
+ ) {
+ std::cerr << "ERROR: DRAT cannot be used in multi-threaded mode" << endl;
+ throw std::runtime_error("ERROR: DRAT cannot be used in multi-threaded mode");
+ }
+
+ if (data->cls > 0 || nVars() > 0) {
+ std::cerr << "ERROR: You must first call set_num_threads() and only then add clauses and variables" << endl;
+ throw std::runtime_error("ERROR: You must first call set_num_threads() and only then add clauses and variables");
+ }
+
+ data->cls_lits.reserve(CACHE_SIZE);
+ for(unsigned i = 1; i < num; i++) {
+ SolverConf conf = data->solvers[0]->getConf();
+ update_config(conf, i);
+ data->solvers.push_back(new Solver(&conf, data->must_interrupt));
+ }
+
+ //set shared data
+ data->shared_data = new SharedData(data->solvers.size());
+ for(unsigned i = 0; i < num; i++) {
+ SolverConf conf = data->solvers[i]->getConf();
+ if (i >= 1) {
+ conf.verbosity = 0;
+ conf.doFindXors = 0;
+ }
+ data->solvers[i]->setConf(conf);
+ data->solvers[i]->set_shared_data((SharedData*)data->shared_data);
+ }
+}
+
+struct OneThreadAddCls
+{
+ OneThreadAddCls(DataForThread& _data_for_thread, size_t _tid) :
+ data_for_thread(_data_for_thread)
+ , tid(_tid)
+ {
+ }
+
+ void operator()()
+ {
+ Solver& solver = *data_for_thread.solvers[tid];
+ solver.new_external_vars(data_for_thread.vars_to_add);
+
+ vector<Lit> lits;
+ vector<uint32_t> vars;
+ bool ret = true;
+ size_t at = 0;
+ const vector<Lit>& orig_lits = (*data_for_thread.lits_to_add);
+ const size_t size = orig_lits.size();
+ while(at < size && ret) {
+ if (orig_lits[at] == lit_Undef) {
+ lits.clear();
+ at++;
+ for(; at < size
+ && orig_lits[at] != lit_Undef
+ && orig_lits[at] != lit_Error
+ ; at++
+ ) {
+ lits.push_back(orig_lits[at]);
+ }
+ ret = solver.add_clause_outer(lits);
+ } else {
+ vars.clear();
+ at++;
+ bool rhs = orig_lits[at].sign();
+ at++;
+ for(; at < size
+ && orig_lits[at] != lit_Undef
+ && orig_lits[at] != lit_Error
+ ; at++
+ ) {
+ vars.push_back(orig_lits[at].var());
+ }
+ ret = solver.add_xor_clause_outer(vars, rhs);
+ }
+ }
+
+ if (!ret) {
+ data_for_thread.update_mutex->lock();
+ *data_for_thread.ret = l_False;
+ data_for_thread.update_mutex->unlock();
+ }
+ }
+
+ DataForThread& data_for_thread;
+ const size_t tid;
+};
+
+static bool actually_add_clauses_to_threads(CMSatPrivateData* data)
+{
+ DataForThread data_for_thread(data);
+ std::vector<std::thread> thds;
+ for(size_t i = 0; i < data->solvers.size(); i++) {
+ thds.push_back(thread(OneThreadAddCls(data_for_thread, i)));
+ }
+ for(std::thread& thread : thds){
+ thread.join();
+ }
+ bool ret = (*data_for_thread.ret == l_True);
+
+ //clear what has been added
+ data->cls_lits.clear();
+ data->vars_to_add = 0;
+
+ return ret;
+}
+
+DLL_PUBLIC void SATSolver::set_max_time(double max_time)
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ if (max_time >= 0) {
+ s.conf.maxTime = s.get_stats().cpu_time + max_time;
+ }
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_max_confl(int64_t max_confl)
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ if (max_confl >= 0) {
+ s.conf.max_confl = s.get_stats().conflStats.numConflicts + max_confl;
+ }
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_default_polarity(bool polarity)
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.polarity_mode = polarity ? PolarityMode::polarmode_pos : PolarityMode::polarmode_neg;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_no_simplify()
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.doRenumberVars = false;
+ s.conf.simplify_at_startup = false;
+ s.conf.simplify_at_every_startup = false;
+ s.conf.full_simplify_at_startup = false;
+ s.conf.perform_occur_based_simp = false;
+ s.conf.do_simplify_problem = false;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_allow_otf_gauss()
+{
+ #ifndef USE_GAUSS
+ std::cerr << "ERROR: CryptoMiniSat was not compiled with GAUSS" << endl;
+ exit(-1);
+ #else
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ //s.conf.reconfigure_at = 0;
+ //s.conf.reconfigure_val = 15;
+ s.conf.gaussconf.max_num_matrixes = 10;
+ s.conf.gaussconf.autodisable = false;
+ s.conf.allow_elim_xor_vars = false;
+ }
+ #endif
+}
+
+DLL_PUBLIC void SATSolver::set_no_simplify_at_startup()
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.simplify_at_startup = false;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_no_equivalent_lit_replacement()
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.doFindAndReplaceEqLits = false;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_no_bva()
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.do_bva = false;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_no_bve()
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.doVarElim = false;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_greedy_undef()
+{
+ assert(false && "ERROR: Unfortunately, greedy undef is broken, please don't use it");
+ std::cerr << "ERROR: Unfortunately, greedy undef is broken, please don't use it" << endl;
+ exit(-1);
+
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.greedy_undef = true;
+ }
+}
+
+DLL_PUBLIC void SATSolver::set_independent_vars(vector<uint32_t>* ind_vars)
+{
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.independent_vars = ind_vars;
+ }
+}
+
+
+DLL_PUBLIC void SATSolver::set_verbosity(unsigned verbosity)
+{
+ if (data->solvers.empty())
+ return;
+
+ Solver& s = *data->solvers[0];
+ s.conf.verbosity = verbosity;
+}
+
+DLL_PUBLIC void SATSolver::set_timeout_all_calls(double timeout)
+{
+ data->timeout = timeout;
+}
+
+DLL_PUBLIC bool SATSolver::add_clause(const vector< Lit >& lits)
+{
+ if (data->log) {
+ (*data->log) << lits << " 0" << endl;
+ }
+
+ bool ret = true;
+ if (data->solvers.size() > 1) {
+ if (data->cls_lits.size() + lits.size() + 1 > CACHE_SIZE) {
+ ret = actually_add_clauses_to_threads(data);
+ }
+
+ data->cls_lits.push_back(lit_Undef);
+ for(Lit lit: lits) {
+ data->cls_lits.push_back(lit);
+ }
+ } else {
+ data->solvers[0]->new_vars(data->vars_to_add);
+ data->vars_to_add = 0;
+
+ ret = data->solvers[0]->add_clause_outer(lits);
+ data->cls++;
+ }
+
+ return ret;
+}
+
+void add_xor_clause_to_log(const std::vector<unsigned>& vars, bool rhs, std::ofstream* file)
+{
+ if (vars.size() == 0) {
+ if (rhs) {
+ (*file) << "0" << endl;;
+ }
+ } else {
+ if (!rhs) {
+ (*file) << "-";
+ }
+ for(unsigned var: vars) {
+ (*file) << (var+1) << " ";
+ }
+ (*file) << " 0" << endl;;
+ }
+}
+
+DLL_PUBLIC bool SATSolver::add_xor_clause(const std::vector<unsigned>& vars, bool rhs)
+{
+ if (data->log) {
+ add_xor_clause_to_log(vars, rhs, data->log);
+ }
+
+ bool ret = true;
+ if (data->solvers.size() > 1) {
+ if (data->cls_lits.size() + vars.size() + 1 > CACHE_SIZE) {
+ ret = actually_add_clauses_to_threads(data);
+ }
+
+ data->cls_lits.push_back(lit_Error);
+ data->cls_lits.push_back(Lit(0, rhs));
+ for(uint32_t var: vars) {
+ data->cls_lits.push_back(Lit(var, false));
+ }
+ } else {
+ data->solvers[0]->new_vars(data->vars_to_add);
+ data->vars_to_add = 0;
+
+ ret = data->solvers[0]->add_xor_clause_outer(vars, rhs);
+ data->cls++;
+ }
+
+ return ret;
+}
+
+struct OneThreadCalc
+{
+ OneThreadCalc(
+ DataForThread& _data_for_thread,
+ size_t _tid,
+ bool _solve,
+ bool _only_indep_solution
+ ) :
+ data_for_thread(_data_for_thread)
+ , tid(_tid)
+ , solve(_solve)
+ , only_indep_solution(_only_indep_solution)
+ {}
+
+ void operator()()
+ {
+ if (print_thread_start_and_finish) {
+ start_time = cpuTime();
+ //data_for_thread.update_mutex->lock();
+ //cout << "c Starting thread " << tid << endl;
+ //data_for_thread.update_mutex->unlock();
+ }
+
+ OneThreadAddCls cls_adder(data_for_thread, tid);
+ cls_adder();
+ lbool ret;
+ if (solve) {
+ ret = data_for_thread.solvers[tid]->solve_with_assumptions(data_for_thread.assumptions, only_indep_solution);
+ } else {
+ ret = data_for_thread.solvers[tid]->simplify_with_assumptions(data_for_thread.assumptions);
+ }
+
+ if (print_thread_start_and_finish) {
+ double end_time = cpuTime();
+ data_for_thread.update_mutex->lock();
+ ios::fmtflags f(cout.flags());
+ cout << "c Finished thread " << tid << " with result: " << ret
+ << " T-diff: " << std::fixed << std::setprecision(2)
+ << (end_time-start_time)
+ << endl;
+ cout.flags(f);
+ data_for_thread.update_mutex->unlock();
+ }
+
+
+ if (ret != l_Undef) {
+ data_for_thread.update_mutex->lock();
+ *data_for_thread.which_solved = tid;
+ *data_for_thread.ret = ret;
+ //will interrupt all of them
+ data_for_thread.solvers[0]->set_must_interrupt_asap();
+ data_for_thread.update_mutex->unlock();
+ }
+ }
+
+ DataForThread& data_for_thread;
+ const size_t tid;
+ double start_time;
+ bool solve;
+ bool only_indep_solution;
+};
+
+lbool calc(
+ const vector< Lit >* assumptions,
+ bool solve, CMSatPrivateData *data,
+ bool only_indep_solution = false
+) {
+ //Reset the interrupt signal if it was set
+ data->must_interrupt->store(false, std::memory_order_relaxed);
+
+ //Set timeout information
+ if (data->timeout != std::numeric_limits<double>::max()) {
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ s.conf.maxTime = cpuTime() + data->timeout;
+ }
+ }
+
+ if (data->log) {
+ (*data->log) << "c Solver::"
+ << (solve ? "solve" : "simplify")
+ << "( ";
+ if (assumptions) {
+ (*data->log) << *assumptions;
+ }
+ (*data->log) << " )" << endl;
+ }
+
+ if (data->solvers.size() > 1 && data->sql > 0) {
+ std::cerr
+ << "Multithreaded solving and SQL cannot be specified at the same time"
+ << endl;
+ exit(-1);
+ }
+
+ if (data->solvers.size() == 1) {
+ data->solvers[0]->new_vars(data->vars_to_add);
+ data->vars_to_add = 0;
+
+ lbool ret ;
+ if (solve) {
+ ret = data->solvers[0]->solve_with_assumptions(assumptions, only_indep_solution);
+ } else {
+ ret = data->solvers[0]->simplify_with_assumptions(assumptions);
+ }
+ data->okay = data->solvers[0]->okay();
+ return ret;
+ }
+
+ //Multi-thread from now on.
+ DataForThread data_for_thread(data, assumptions);
+ std::vector<std::thread> thds;
+ for(size_t i = 0
+ ; i < data->solvers.size()
+ ; i++
+ ) {
+ thds.push_back(thread(OneThreadCalc(data_for_thread, i, solve, only_indep_solution)));
+ }
+ for(std::thread& thread : thds){
+ thread.join();
+ }
+ lbool real_ret = *data_for_thread.ret;
+
+ //This does it for all of them, there is only one must-interrupt
+ data_for_thread.solvers[0]->unset_must_interrupt_asap();
+
+ //clear what has been added
+ data->cls_lits.clear();
+ data->vars_to_add = 0;
+ data->okay = data->solvers[*data_for_thread.which_solved]->okay();
+ return real_ret;
+}
+
+DLL_PUBLIC lbool SATSolver::solve(const vector< Lit >* assumptions, bool only_indep_solution)
+{
+ //set information data (props, confl, dec)
+ data->previous_sum_conflicts = get_sum_conflicts();
+ data->previous_sum_propagations = get_sum_propagations();
+ data->previous_sum_decisions = get_sum_decisions();
+
+ return calc(assumptions, true, data, only_indep_solution);
+}
+
+DLL_PUBLIC lbool SATSolver::simplify(const vector< Lit >* assumptions)
+{
+ //set information data (props, confl, dec)
+ data->previous_sum_conflicts = get_sum_conflicts();
+ data->previous_sum_propagations = get_sum_propagations();
+ data->previous_sum_decisions = get_sum_decisions();
+
+ return calc(assumptions, false, data);
+}
+
+DLL_PUBLIC const vector< lbool >& SATSolver::get_model() const
+{
+ return data->solvers[data->which_solved]->get_model();
+}
+
+DLL_PUBLIC const std::vector<Lit>& SATSolver::get_conflict() const
+{
+
+ return data->solvers[data->which_solved]->get_final_conflict();
+}
+
+DLL_PUBLIC uint32_t SATSolver::nVars() const
+{
+ return data->solvers[0]->nVarsOutside() + data->vars_to_add;
+}
+
+DLL_PUBLIC void SATSolver::new_var()
+{
+ new_vars(1);
+}
+
+DLL_PUBLIC void SATSolver::new_vars(const size_t n)
+{
+ if (n >= MAX_VARS
+ || (data->vars_to_add + n) >= MAX_VARS
+ ) {
+ throw CMSat::TooManyVarsError();
+ }
+
+ if (data->log) {
+ (*data->log) << "c Solver::new_vars( " << n << " )" << endl;
+ }
+
+ data->vars_to_add += n;
+}
+
+DLL_PUBLIC void SATSolver::add_sql_tag(const std::string& tagname, const std::string& tag)
+{
+ for(Solver* solver: data->solvers) {
+ solver->add_sql_tag(tagname, tag);
+ }
+}
+
+
+DLL_PUBLIC const char* SATSolver::get_version_sha1()
+{
+ return Solver::get_version_sha1();
+}
+
+DLL_PUBLIC const char* SATSolver::get_version()
+{
+ return Solver::get_version_tag();
+}
+
+DLL_PUBLIC const char* SATSolver::get_compilation_env()
+{
+ return Solver::get_compilation_env();
+}
+
+DLL_PUBLIC void SATSolver::print_stats() const
+{
+ double cpu_time;
+ if (data->solvers.size() > 1) {
+ cpu_time = cpuTimeTotal();
+ } else {
+ cpu_time = cpuTime();
+ }
+ data->solvers[data->which_solved]->print_stats(cpu_time);
+}
+
+DLL_PUBLIC void SATSolver::set_drat(std::ostream* os, bool add_ID)
+{
+ if (data->solvers.size() > 1) {
+ std::cerr << "ERROR: DRAT cannot be used in multi-threaded mode" << endl;
+ exit(-1);
+ }
+ Drat* drat = NULL;
+ if (add_ID) {
+ drat = new DratFile<true>;
+ } else {
+ drat = new DratFile<false>;
+ }
+ drat->setFile(os);
+ if (data->solvers[0]->drat)
+ delete data->solvers[0]->drat;
+
+ data->solvers[0]->drat = drat;
+}
+
+DLL_PUBLIC void SATSolver::interrupt_asap()
+{
+ data->must_interrupt->store(true, std::memory_order_relaxed);
+}
+
+void DLL_PUBLIC SATSolver::add_in_partial_solving_stats()
+{
+ data->solvers[data->which_solved]->add_in_partial_solving_stats();
+}
+
+DLL_PUBLIC std::vector<Lit> SATSolver::get_zero_assigned_lits() const
+{
+ return data->solvers[data->which_solved]->get_zero_assigned_lits();
+}
+
+DLL_PUBLIC unsigned long SATSolver::get_sql_id() const
+{
+ return data->solvers[0]->get_sql_id();
+}
+
+DLL_PUBLIC bool SATSolver::okay() const
+{
+ return data->okay;
+}
+
+DLL_PUBLIC void SATSolver::log_to_file(std::string filename)
+{
+ if (data->log) {
+ std::cerr
+ << "ERROR: A file has already been designated for logging!"
+ << endl;
+ exit(-1);
+ }
+
+ data->log = new std::ofstream();
+ data->log->exceptions( std::ofstream::failbit | std::ofstream::badbit );
+ data->log->open(filename.c_str(), std::ios::out);
+ if (!data->log->is_open()) {
+ std::cerr
+ << "ERROR: Cannot open record file '" << filename << "'"
+ << " for writing."
+ << endl;
+ exit(-1);
+ }
+}
+
+DLL_PUBLIC std::vector<std::pair<Lit, Lit> > SATSolver::get_all_binary_xors() const
+{
+ return data->solvers[0]->get_all_binary_xors();
+}
+
+DLL_PUBLIC vector<std::pair<vector<uint32_t>, bool> >
+SATSolver::get_recovered_xors(bool elongate) const
+{
+ vector<std::pair<vector<uint32_t>, bool> > ret;
+ Solver& s = *data->solvers[0];
+
+ std::pair<vector<uint32_t>, bool> tmp;
+ vector<Xor> xors = s.get_recovered_xors(elongate);
+ for(const auto& x: xors) {
+ tmp.first = x.get_vars();
+ tmp.second = x.rhs;
+ ret.push_back(tmp);
+ }
+ return ret;
+}
+
+DLL_PUBLIC void SATSolver::set_sqlite(std::string filename)
+{
+ if (data->solvers.size() > 1) {
+ std::cerr
+ << "Multithreaded solving and SQL cannot be specified at the same time"
+ << endl;
+ exit(-1);
+ }
+ data->sql = 1;
+ data->solvers[0]->set_sqlite(filename);
+}
+
+DLL_PUBLIC uint64_t SATSolver::get_sum_conflicts()
+{
+ uint64_t conlf = 0;
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ conlf += s.sumConflicts;
+ }
+ return conlf;
+}
+
+DLL_PUBLIC uint64_t SATSolver::get_sum_propagations()
+{
+ uint64_t props = 0;
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ props += s.sumPropStats.propagations;
+ }
+ return props;
+}
+
+DLL_PUBLIC uint64_t SATSolver::get_sum_decisions()
+{
+ uint64_t dec = 0;
+ for (size_t i = 0; i < data->solvers.size(); ++i) {
+ Solver& s = *data->solvers[i];
+ dec += s.sumSearchStats.decisions;
+ }
+ return dec;
+}
+
+DLL_PUBLIC uint64_t SATSolver::get_last_conflicts()
+{
+ return get_sum_conflicts() - data->previous_sum_conflicts;
+}
+
+DLL_PUBLIC uint64_t SATSolver::get_last_propagations()
+{
+ return get_sum_propagations() - data->previous_sum_propagations;
+}
+
+DLL_PUBLIC uint64_t SATSolver::get_last_decisions()
+{
+ return get_sum_decisions() - data->previous_sum_decisions;
+}
+
+DLL_PUBLIC void SATSolver::open_file_and_dump_irred_clauses(std::string fname) const
+{
+ data->solvers[data->which_solved]->open_file_and_dump_irred_clauses(fname);
+}
+
+void DLL_PUBLIC SATSolver::open_file_and_dump_red_clauses(std::string fname) const
+{
+ data->solvers[data->which_solved]->open_file_and_dump_red_clauses(fname);
+}
+
+void DLL_PUBLIC SATSolver::start_getting_small_clauses(uint32_t max_len, uint32_t max_glue)
+{
+ assert(data->solvers.size() >= 1);
+ data->solvers[0]->start_getting_small_clauses(max_len, max_glue);
+}
+
+bool DLL_PUBLIC SATSolver::get_next_small_clause(std::vector<Lit>& out)
+{
+ assert(data->solvers.size() >= 1);
+ return data->solvers[0]->get_next_small_clause(out);
+}
+
+void DLL_PUBLIC SATSolver::end_getting_small_clauses()
+{
+ assert(data->solvers.size() >= 1);
+ data->solvers[0]->end_getting_small_clauses();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in
new file mode 100644
index 000000000..b157e9c8f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in
@@ -0,0 +1,168 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CRYPTOMINISAT5_H__
+#define __CRYPTOMINISAT5_H__
+
+#define CRYPTOMINISAT_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
+#define CRYPTOMINISAT_VERSION_MINOR @PROJECT_VERSION_MINOR@
+#define CRYPTOMINISAT_VERSION_PATCH @PROJECT_VERSION_PATCH@
+
+#include <atomic>
+#include <vector>
+#include <iostream>
+#include <utility>
+#include "cryptominisat5/solvertypesmini.h"
+
+namespace CMSat {
+ struct CMSatPrivateData;
+ #ifdef _WIN32
+ class __declspec(dllexport) SATSolver
+ #else
+ class SATSolver
+ #endif
+ {
+ public:
+ SATSolver(void* config = NULL
+ , std::atomic<bool>* interrupt_asap = NULL
+ );
+ ~SATSolver();
+
+ ////////////////////////////
+ // Adding variables and clauses
+ ////////////////////////////
+
+ void new_var(); //add a new variable to the solver
+ void new_vars(const size_t n); //and many new variables to the solver -- much faster
+ unsigned nVars() const; //get number of variables inside the solver
+ bool add_clause(const std::vector<Lit>& lits);
+ bool add_xor_clause(const std::vector<unsigned>& vars, bool rhs);
+
+ ////////////////////////////
+ // Solving and simplifying
+ ////////////////////////////
+
+ lbool solve(const std::vector<Lit>* assumptions = 0, bool only_indep_solution = false); //solve the problem, optionally with assumptions. If only_indep_solution is set, only the independent variables set with set_independent_vars() are returned in the solution
+ lbool simplify(const std::vector<Lit>* assumptions = 0); //simplify the problem, optionally with assumptions
+ const std::vector<lbool>& get_model() const; //get model that satisfies the problem. Only makes sense if previous solve()/simplify() call was l_True
+ const std::vector<Lit>& get_conflict() const; //get conflict in terms of the assumptions given in case the previous call to solve() was l_False
+ bool okay() const; //the problem is still solveable, i.e. the empty clause hasn't been derived
+
+ ////////////////////////////
+ // Debug all calls for later replay with --debuglit FILENAME
+ ////////////////////////////
+ void log_to_file(std::string filename);
+
+ ////////////////////////////
+ // SQLite for statistics gathering
+ ////////////////////////////
+ void set_sqlite(std::string filename);
+ void add_sql_tag(const std::string& tagname, const std::string& tag);
+ unsigned long get_sql_id() const;
+
+ ////////////////////////////
+ // Configuration
+ // -- Note that nothing else can be changed, only these.
+ // -- The main.cpp has access to the internal config, but it changes
+ // -- all the time and hence exposing it to the outside world would
+ // -- be very brittle.
+ ////////////////////////////
+
+ void set_num_threads(unsigned n); //Number of threads to use. Must be set before any vars/clauses are added
+ void set_allow_otf_gauss(); //allow on-the-fly gaussian elimination
+ void set_max_time(double max_time); //max time to run to on next solve() call
+ void set_max_confl(int64_t max_confl); //max conflict to run to on next solve() call
+ void set_verbosity(unsigned verbosity = 0); //default is 0, silent
+ void set_default_polarity(bool polarity); //default polarity when branching for all vars
+ void set_no_simplify(); //never simplify
+ void set_no_simplify_at_startup(); //doesn't simplify at start, faster startup time
+ void set_no_equivalent_lit_replacement(); //don't replace equivalent literals
+ void set_no_bva(); //No bounded variable addition
+ void set_no_bve(); //No bounded variable elimination
+ void set_greedy_undef(); //Try to set variables to l_Undef in solution
+ void set_independent_vars(std::vector<uint32_t>* ind_vars);
+ void set_timeout_all_calls(double secs); //max timeout on all subsequent solve() or simplify
+
+
+ ////////////////////////////
+ // Get generic info
+ ////////////////////////////
+ static const char* get_version(); //get solver version in string format
+ static const char* get_version_sha1(); //get SHA1 version string of the solver
+ static const char* get_compilation_env(); //get compilation environment string
+
+
+ ////////////////////////////
+ // Get info about only the last solve() OR simplify() call
+ // summed for all threads
+ ////////////////////////////
+ uint64_t get_last_conflicts(); //get total number of conflicts of last solve() or simplify() call of all threads
+ uint64_t get_last_propagations(); //get total number of propagations of last solve() or simplify() call made by all threads
+ uint64_t get_last_decisions(); //get total number of decisions of last solve() or simplify() call made by all threads
+
+
+ ////////////////////////////
+ //Get info about total sum of all time of all threads
+ ////////////////////////////
+
+ uint64_t get_sum_conflicts(); //get total number of conflicts of all time of all threads
+ uint64_t get_sum_propagations(); //get total number of propagations of all time made by all threads
+ uint64_t get_sum_decisions(); //get total number of decisions of all time made by all threads
+
+ void print_stats() const; //print solving stats. Call after solve()/simplify()
+ void set_drat(std::ostream* os, bool set_ID); //set drat to ostream, e.g. stdout or a file
+ void interrupt_asap(); //call this asynchronously, and the solver will try to cleanly abort asap
+ void open_file_and_dump_irred_clauses(std::string fname) const; //dump irredundant clauses to this file when solving finishes
+ void open_file_and_dump_red_clauses(std::string fname) const; //dump redundant ("learnt") clauses to this file when solving finishes
+ void add_in_partial_solving_stats(); //used only by Ctrl+C handler. Ignore.
+
+ ////////////////////////////
+ // Extract useful information from the solver
+ // This can be used in the theory solver
+
+ ////////////////////////////
+ std::vector<Lit> get_zero_assigned_lits() const; //get literals of fixed value
+ std::vector<std::pair<Lit, Lit> > get_all_binary_xors() const; //get all binary XORs that are = 0
+
+ //////////////////////
+ // EXPERIMENTAL
+ std::vector<std::pair<std::vector<uint32_t>, bool> > get_recovered_xors(bool elongate) const; //get XORs recovered. If "elongate" is TRUE, then variables shared ONLY by two XORs will be XORed together
+
+ //////////////////////
+ //Below must be done in-order. Multi-threading not allowed.
+ // EXPERIMENTAL!!!
+
+ void start_getting_small_clauses(uint32_t max_len, uint32_t max_glue);
+ bool get_next_small_clause(std::vector<Lit>& ret); //returns FALSE if no more
+ void end_getting_small_clauses();
+
+ private:
+
+ ////////////////////////////
+ // Do not bother with this, it's private
+ ////////////////////////////
+
+ CMSatPrivateData *data;
+ };
+}
+
+#endif //__CRYPTOMINISAT5_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
new file mode 100644
index 000000000..f2d4a0ab6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.cpp
@@ -0,0 +1,124 @@
+/******************************************
+Copyright (c) 2016, @Storyyeller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "cryptominisat5/cryptominisat_c.h"
+#include "constants.h"
+#include "cryptominisat5/cryptominisat.h"
+
+
+// C wrappers for SATSolver so that it can be used from other languages (e.g. Rust)
+using namespace CMSat;
+
+// Make sure the types we expose are C compatible and don't change unexpectedly
+static_assert(sizeof(Lit) == sizeof(c_Lit), "Lit layout not c-compatible");
+static_assert(alignof(Lit) == alignof(c_Lit), "Lit layout not c-compatible");
+static_assert(sizeof(lbool) == sizeof(c_lbool), "lbool layout not c-compatible");
+static_assert(alignof(lbool) == alignof(c_lbool), "lbool layout not c-compatible");
+
+const Lit* fromc(const c_Lit* x)
+{
+ return reinterpret_cast<const Lit*>(x);
+}
+const lbool* fromc(const c_lbool* x)
+{
+ return reinterpret_cast<const lbool*>(x);
+}
+const c_lbool* toc(const lbool* x)
+{
+ return reinterpret_cast<const c_lbool*>(x);
+}
+const c_Lit* toc(const Lit* x)
+{
+ return reinterpret_cast<const c_Lit*>(x);
+}
+c_lbool toc(lbool x)
+{
+ return {x.getValue()};
+}
+
+template<typename T>
+std::vector<T> wrap(const T* vals, size_t num_vals)
+{
+ return std::vector<T>(vals, vals + num_vals);
+}
+
+template<typename Dest, typename T>
+Dest unwrap(const std::vector<T>& vec)
+{
+ return Dest {toc(vec.data()), vec.size()};
+}
+
+#define NOEXCEPT_START noexcept { try {
+#define NOEXCEPT_END } catch(...) { \
+ std::cerr << "ERROR: exception thrown past FFI boundary" << std::endl;\
+ std::exit(-1);\
+} }
+
+extern "C"
+{
+
+ DLL_PUBLIC SATSolver* cmsat_new(void) NOEXCEPT_START {
+ return new SATSolver();
+ } NOEXCEPT_END
+
+ DLL_PUBLIC void cmsat_free(SATSolver* s) NOEXCEPT_START {
+ delete s;
+ } NOEXCEPT_END
+
+ DLL_PUBLIC unsigned cmsat_nvars(const SATSolver* self) NOEXCEPT_START {
+ return self->nVars();
+ } NOEXCEPT_END
+
+ DLL_PUBLIC bool cmsat_add_clause(SATSolver* self, const c_Lit* lits, size_t num_lits) NOEXCEPT_START {
+ return self->add_clause(wrap(fromc(lits), num_lits));
+ } NOEXCEPT_END
+
+ DLL_PUBLIC bool cmsat_add_xor_clause(SATSolver* self, const unsigned* vars, size_t num_vars, bool rhs) NOEXCEPT_START {
+ return self->add_xor_clause(wrap(vars, num_vars), rhs);
+ } NOEXCEPT_END
+
+ DLL_PUBLIC void cmsat_new_vars(SATSolver* self, const size_t n) NOEXCEPT_START {
+ self->new_vars(n);
+ } NOEXCEPT_END
+
+ DLL_PUBLIC c_lbool cmsat_solve(SATSolver* self) NOEXCEPT_START {
+ return toc(self->solve(nullptr));
+ } NOEXCEPT_END
+
+ DLL_PUBLIC c_lbool cmsat_solve_with_assumptions(SATSolver* self, const c_Lit* assumptions, size_t num_assumptions) NOEXCEPT_START {
+ auto temp = wrap(fromc(assumptions), num_assumptions);
+ return toc(self->solve(&temp));
+ } NOEXCEPT_END
+
+ DLL_PUBLIC slice_lbool cmsat_get_model(const SATSolver* self) NOEXCEPT_START {
+ return unwrap<slice_lbool>(self->get_model());
+ } NOEXCEPT_END
+
+ DLL_PUBLIC slice_Lit cmsat_get_conflict(const SATSolver* self) NOEXCEPT_START {
+ return unwrap<slice_Lit>(self->get_conflict());
+ } NOEXCEPT_END
+
+//Setup
+ DLL_PUBLIC void cmsat_set_num_threads(SATSolver* self, unsigned n) NOEXCEPT_START {
+ self->set_num_threads(n);
+ } NOEXCEPT_END
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.h.in b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.h.in
new file mode 100644
index 000000000..51922e78f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat_c.h.in
@@ -0,0 +1,75 @@
+/******************************************
+Copyright (c) 2016, @Storyyeller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#pragma once
+#include <stddef.h>
+#include <stdint.h>
+
+typedef struct c_Lit { uint32_t x; } c_Lit;
+typedef struct c_lbool { uint8_t x; } c_lbool;
+typedef struct slice_Lit { const c_Lit* vals; size_t num_vals; } slice_Lit;
+typedef struct slice_lbool { const c_lbool* vals; size_t num_vals; } slice_lbool;
+
+#ifdef __cplusplus
+ #define NOEXCEPT noexcept
+
+ namespace CMSat{ struct SATSolver; }
+ using CMSat::SATSolver;
+
+ extern "C" {
+#else
+ // c stuff
+ #include <stdbool.h>
+ #define NOEXCEPT
+
+ #define L_TRUE (0u)
+ #define L_FALSE (1u)
+ #define L_UNDEF (2u)
+
+ // forward declaration
+ typedef struct SATSolver SATSolver;
+#endif
+
+#if defined _WIN32
+ #define CMS_DLL_PUBLIC __declspec(dllexport)
+#else
+ #define CMS_DLL_PUBLIC __attribute__ ((visibility ("default")))
+#endif
+
+CMS_DLL_PUBLIC SATSolver* cmsat_new(void) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_free(SATSolver* s) NOEXCEPT;
+
+CMS_DLL_PUBLIC unsigned cmsat_nvars(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_clause(SATSolver* self, const c_Lit* lits, size_t num_lits) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_xor_clause(SATSolver* self, const unsigned* vars, size_t num_vars, bool rhs) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_new_vars(SATSolver* self, const size_t n) NOEXCEPT;
+
+CMS_DLL_PUBLIC c_lbool cmsat_solve(SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC c_lbool cmsat_solve_with_assumptions(SATSolver* self, const c_Lit* assumptions, size_t num_assumptions) NOEXCEPT;
+CMS_DLL_PUBLIC slice_lbool cmsat_get_model(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC slice_Lit cmsat_get_conflict(const SATSolver* self) NOEXCEPT;
+
+CMS_DLL_PUBLIC void cmsat_set_num_threads(SATSolver* self, unsigned n) NOEXCEPT;
+
+#ifdef __cplusplus
+} // end extern c
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cset.h b/cryptominisat5/cryptominisat-5.6.3/src/cset.h
new file mode 100644
index 000000000..d23bee1ff
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cset.h
@@ -0,0 +1,191 @@
+/*
+Based on SatELite -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+#ifndef CSET_H
+#define CSET_H
+
+#include <limits>
+#include "constants.h"
+
+#include "clause.h"
+
+namespace CMSat {
+using std::vector;
+
+/**
+@brief Used to quicky add, remove and iterate through a clause set
+
+Used in OccSimplifier to put into a set all clauses that need to be treated
+*/
+class CSet {
+ vector<uint32_t> where; ///<Map clause ID to position in 'which'.
+ vector<ClOffset> which; ///< List of clauses (for fast iteration). May contain 'Clause_NULL'.
+ vector<uint32_t> free; ///<List of positions holding 'Clause_NULL'.
+
+ public:
+ //ClauseSimp& operator [] (uint32_t index) { return which[index]; }
+ void reserve(uint32_t size) {
+ where.reserve(size);
+ which.reserve(size);
+ }
+ //uint32_t size(void) const { return which.size(); }
+ ///@brief Number of elements in the set
+ uint32_t nElems(void) const { return which.size() - free.size(); }
+
+ /**
+ @brief Add a clause to the set
+ */
+ bool add(const ClOffset offs) {
+ //Don't check for special value
+ assert(offs != std::numeric_limits< uint32_t >::max());
+
+ if (where.size() < offs+1)
+ where.resize(offs+1, std::numeric_limits<uint32_t>::max());
+
+ if (where[offs] != std::numeric_limits<uint32_t>::max()) {
+ return false;
+ }
+ if (free.size() > 0){
+ where[offs] = free.back();
+ which[free.back()] = offs;
+ free.pop_back();
+ }else{
+ where[offs] = which.size();
+ which.push_back(offs);
+ }
+ return true;
+ }
+
+ bool alreadyIn(const ClOffset offs) const
+ {
+ //Don't check for special value
+ assert(offs != std::numeric_limits< uint32_t >::max());
+
+ if (where.size() < offs+1)
+ return false;
+
+ return where[offs] != std::numeric_limits<uint32_t>::max();
+ }
+
+ /**
+ @brief Fully clear the set
+ */
+ void clear(void) {
+ where.clear();
+ which.clear();
+ free.clear();
+ }
+
+ /**
+ @brief A normal iterator to iterate through the set
+
+ No other way exists of iterating correctly.
+ */
+ class iterator
+ {
+ public:
+ explicit iterator(vector<ClOffset>::iterator _it) :
+ it(_it)
+ {}
+
+ void operator++()
+ {
+ it++;
+ }
+
+ bool operator!=(const iterator& iter) const
+ {
+ return (it != iter.it);
+ }
+
+ ClOffset& operator*() {
+ return *it;
+ }
+
+ vector<ClOffset>::iterator& operator->() {
+ return it;
+ }
+ private:
+ vector<ClOffset>::iterator it;
+ };
+
+ /**
+ @brief A constant iterator to iterate through the set
+
+ No other way exists of iterating correctly.
+ */
+ class const_iterator
+ {
+ public:
+ explicit const_iterator(vector<ClOffset>::const_iterator _it) :
+ it(_it)
+ {}
+
+ void operator++()
+ {
+ it++;
+ }
+
+ bool operator!=(const const_iterator& iter) const
+ {
+ return (it != iter.it);
+ }
+
+ const ClOffset& operator*() {
+ return *it;
+ }
+
+ vector<ClOffset>::const_iterator& operator->() {
+ return it;
+ }
+ private:
+ vector<ClOffset>::const_iterator it;
+ };
+
+ ///@brief Get starting iterator
+ iterator begin()
+ {
+ return iterator(which.begin());
+ }
+
+ ///@brief Get ending iterator
+ iterator end()
+ {
+ return iterator(which.begin() + which.size());
+ }
+
+ ///@brief Get starting iterator (constant version)
+ const_iterator begin() const
+ {
+ return const_iterator(which.begin());
+ }
+
+ ///@brief Get ending iterator (constant version)
+ const_iterator end() const
+ {
+ return const_iterator(which.begin() + which.size());
+ }
+};
+
+} //end namespace
+
+#endif //CSET_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp b/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
new file mode 100644
index 000000000..b7cc27b32
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/datasync.cpp
@@ -0,0 +1,353 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "datasync.h"
+#include "varreplacer.h"
+#include "solver.h"
+#include "shareddata.h"
+#include <iomanip>
+
+using namespace CMSat;
+
+DataSync::DataSync(Solver* _solver, SharedData* _sharedData) :
+ solver(_solver)
+ , sharedData(_sharedData)
+ , seen(solver->seen)
+ , toClear(solver->toClear)
+{}
+
+void DataSync::new_var(const bool bva)
+{
+ if (!enabled())
+ return;
+
+ if (!bva) {
+ syncFinish.push_back(0);
+ syncFinish.push_back(0);
+ }
+ assert(solver->nVarsOutside()*2 == syncFinish.size());
+}
+
+void DataSync::new_vars(size_t n)
+{
+ if (!enabled())
+ return;
+
+ syncFinish.insert(syncFinish.end(), 2*n, 0);
+ assert(solver->nVarsOutside()*2 == syncFinish.size());
+}
+
+void DataSync::save_on_var_memory()
+{
+}
+
+void DataSync::rebuild_bva_map()
+{
+ must_rebuild_bva_map = true;
+}
+
+void DataSync::updateVars(
+ const vector<uint32_t>& /*outerToInter*/
+ , const vector<uint32_t>& /*interToOuter*/
+) {
+}
+
+bool DataSync::syncData()
+{
+ if (!enabled()
+ || lastSyncConf + solver->conf.sync_every_confl >= solver->sumConflicts
+ ) {
+ return true;
+ }
+
+ assert(sharedData != NULL);
+ assert(solver->decisionLevel() == 0);
+
+ if (must_rebuild_bva_map) {
+ outer_to_without_bva_map = solver->build_outer_to_without_bva_map();
+ must_rebuild_bva_map = false;
+ }
+
+ bool ok;
+ sharedData->unit_mutex.lock();
+ ok = shareUnitData();
+ sharedData->unit_mutex.unlock();
+ if (!ok) return false;
+
+ sharedData->bin_mutex.lock();
+ extend_bins_if_needed();
+ clear_set_binary_values();
+ ok = shareBinData();
+ sharedData->bin_mutex.unlock();
+ if (!ok) return false;
+
+ lastSyncConf = solver->sumConflicts;
+
+ return true;
+}
+
+void DataSync::clear_set_binary_values()
+{
+ for(size_t i = 0; i < solver->nVarsOutside()*2; i++) {
+ Lit lit1 = Lit::toLit(i);
+ lit1 = solver->map_to_with_bva(lit1);
+ lit1 = solver->varReplacer->get_lit_replaced_with_outer(lit1);
+ lit1 = solver->map_outer_to_inter(lit1);
+ if (solver->value(lit1) != l_Undef) {
+ sharedData->bins[i].clear();
+ }
+ }
+}
+
+void DataSync::extend_bins_if_needed()
+{
+ assert(sharedData->bins.size() <= (solver->nVarsOutside())*2);
+ if (sharedData->bins.size() == (solver->nVarsOutside())*2)
+ return;
+
+ sharedData->bins.resize(solver->nVarsOutside()*2);
+}
+
+bool DataSync::shareBinData()
+{
+ uint32_t oldRecvBinData = stats.recvBinData;
+ uint32_t oldSentBinData = stats.sentBinData;
+
+ syncBinFromOthers();
+ syncBinToOthers();
+ size_t mem = sharedData->calc_memory_use_bins();
+
+ if (solver->conf.verbosity >= 3) {
+ cout
+ << "c [sync] got bins " << (stats.recvBinData - oldRecvBinData)
+ << " sent bins " << (stats.sentBinData - oldSentBinData)
+ << " mem use: " << mem/(1024*1024) << " M"
+ << endl;
+ }
+
+ return true;
+}
+
+bool DataSync::syncBinFromOthers()
+{
+ for (uint32_t wsLit = 0; wsLit < sharedData->bins.size(); wsLit++) {
+ if (sharedData->bins[wsLit].data == NULL) {
+ continue;
+ }
+
+ Lit lit1 = Lit::toLit(wsLit);
+ lit1 = solver->map_to_with_bva(lit1);
+ lit1 = solver->varReplacer->get_lit_replaced_with_outer(lit1);
+ lit1 = solver->map_outer_to_inter(lit1);
+ if (solver->varData[lit1.var()].removed != Removed::none
+ || solver->value(lit1.var()) != l_Undef
+ ) {
+ continue;
+ }
+
+ vector<Lit>& bins = *sharedData->bins[wsLit].data;
+ watch_subarray ws = solver->watches[lit1];
+
+ assert(syncFinish.size() > wsLit);
+ if (bins.size() > syncFinish[wsLit]
+ && !syncBinFromOthers(lit1, bins, syncFinish[wsLit], ws)
+ ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool DataSync::syncBinFromOthers(
+ const Lit lit
+ , const vector<Lit>& bins
+ , uint32_t& finished
+ , watch_subarray ws
+) {
+ assert(solver->varReplacer->get_lit_replaced_with(lit) == lit);
+ assert(solver->varData[lit.var()].removed == Removed::none);
+
+ assert(toClear.empty());
+ for (const Watched& w: ws) {
+ if (w.isBin()) {
+ toClear.push_back(w.lit2());
+ assert(seen.size() > w.lit2().toInt());
+ seen[w.lit2().toInt()] = true;
+ }
+ }
+
+ vector<Lit> lits(2);
+ for (uint32_t i = finished; i < bins.size(); i++) {
+ Lit otherLit = bins[i];
+ otherLit = solver->map_to_with_bva(otherLit);
+ otherLit = solver->varReplacer->get_lit_replaced_with_outer(otherLit);
+ otherLit = solver->map_outer_to_inter(otherLit);
+ if (solver->varData[otherLit.var()].removed != Removed::none
+ || solver->value(otherLit) != l_Undef
+ ) {
+ continue;
+ }
+ assert(seen.size() > otherLit.toInt());
+ if (!seen[otherLit.toInt()]) {
+ stats.recvBinData++;
+ lits[0] = lit;
+ lits[1] = otherLit;
+
+ //Don't add DRAT: it would add to the thread data, too
+ solver->add_clause_int(lits, true, ClauseStats(), true, NULL, false);
+ if (!solver->ok) {
+ goto end;
+ }
+ }
+ }
+ finished = bins.size();
+
+ end:
+ for (const Lit l: toClear) {
+ seen[l.toInt()] = false;
+ }
+ toClear.clear();
+
+ return solver->okay();
+}
+
+void DataSync::syncBinToOthers()
+{
+ for(const std::pair<Lit, Lit>& bin: newBinClauses) {
+ addOneBinToOthers(bin.first, bin.second);
+ }
+
+ newBinClauses.clear();
+}
+
+void DataSync::addOneBinToOthers(Lit lit1, Lit lit2)
+{
+ assert(lit1 < lit2);
+ if (sharedData->bins[lit1.toInt()].data == NULL) {
+ return;
+ }
+
+ vector<Lit>& bins = *sharedData->bins[lit1.toInt()].data;
+ for (const Lit lit : bins) {
+ if (lit == lit2)
+ return;
+ }
+
+ bins.push_back(lit2);
+ stats.sentBinData++;
+}
+
+bool DataSync::shareUnitData()
+{
+ uint32_t thisGotUnitData = 0;
+ uint32_t thisSentUnitData = 0;
+
+ SharedData& shared = *sharedData;
+ if (shared.value.size() < solver->nVarsOutside()) {
+ shared.value.resize(solver->nVarsOutside(), l_Undef);
+ }
+ for (uint32_t var = 0; var < solver->nVarsOutside(); var++) {
+ Lit thisLit = Lit(var, false);
+ thisLit = solver->map_to_with_bva(thisLit);
+ thisLit = solver->varReplacer->get_lit_replaced_with_outer(thisLit);
+ thisLit = solver->map_outer_to_inter(thisLit);
+ const lbool thisVal = solver->value(thisLit);
+ const lbool otherVal = shared.value[var];
+
+ if (thisVal == l_Undef && otherVal == l_Undef)
+ continue;
+
+ if (thisVal != l_Undef && otherVal != l_Undef) {
+ if (thisVal != otherVal) {
+ solver->ok = false;
+ return false;
+ } else {
+ continue;
+ }
+ }
+
+ if (otherVal != l_Undef) {
+ assert(thisVal == l_Undef);
+ Lit litToEnqueue = thisLit ^ (otherVal == l_False);
+ if (solver->varData[litToEnqueue.var()].removed != Removed::none) {
+ continue;
+ }
+
+ solver->enqueue(litToEnqueue);
+ solver->ok = solver->propagate<false>().isNULL();
+ if (!solver->ok)
+ return false;
+
+ thisGotUnitData++;
+ continue;
+ }
+
+ if (thisVal != l_Undef) {
+ assert(otherVal == l_Undef);
+ shared.value[var] = thisVal;
+ thisSentUnitData++;
+ continue;
+ }
+ }
+
+ if (solver->conf.verbosity >= 3
+ //&& (thisGotUnitData > 0 || thisSentUnitData > 0)
+ ) {
+ cout
+ << "c [sync] got units " << thisGotUnitData
+ << " sent units " << thisSentUnitData
+ << endl;
+ }
+
+ stats.recvUnitData += thisGotUnitData;
+ stats.sentUnitData += thisSentUnitData;
+
+ return true;
+}
+
+void DataSync::signalNewBinClause(Lit lit1, Lit lit2)
+{
+ if (!enabled()) {
+ return;
+ }
+
+ if (must_rebuild_bva_map) {
+ outer_to_without_bva_map = solver->build_outer_to_without_bva_map();
+ must_rebuild_bva_map = false;
+ }
+
+ if (solver->varData[lit1.var()].is_bva)
+ return;
+ if (solver->varData[lit2.var()].is_bva)
+ return;
+
+ lit1 = solver->map_inter_to_outer(lit1);
+ lit1 = map_outside_without_bva(lit1);
+ lit2 = solver->map_inter_to_outer(lit2);
+ lit2 = map_outside_without_bva(lit2);
+
+ if (lit1.toInt() > lit2.toInt()) {
+ std::swap(lit1, lit2);
+ }
+ newBinClauses.push_back(std::make_pair(lit1, lit2));
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/datasync.h b/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
new file mode 100644
index 000000000..09825492b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/datasync.h
@@ -0,0 +1,114 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvertypes.h"
+#include "watched.h"
+#include "watcharray.h"
+
+namespace CMSat {
+
+class SharedData;
+class Solver;
+class DataSync
+{
+ public:
+ DataSync(Solver* solver, SharedData* sharedData);
+ bool enabled();
+ void new_var(const bool bva);
+ void new_vars(const size_t n);
+ bool syncData();
+ void save_on_var_memory();
+ void rebuild_bva_map();
+ void updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+ );
+
+ template <class T> void signalNewBinClause(T& ps);
+ void signalNewBinClause(Lit lit1, Lit lit2);
+
+ struct Stats
+ {
+ uint32_t sentUnitData = 0;
+ uint32_t recvUnitData = 0;
+ uint32_t sentBinData = 0;
+ uint32_t recvBinData = 0;
+ };
+ const Stats& get_stats() const;
+
+ private:
+ void extend_bins_if_needed();
+ Lit map_outside_without_bva(Lit lit) const;
+ bool shareUnitData();
+ bool syncBinFromOthers();
+ bool syncBinFromOthers(const Lit lit, const vector<Lit>& bins, uint32_t& finished, watch_subarray ws);
+ void syncBinToOthers();
+ void clear_set_binary_values();
+ void addOneBinToOthers(const Lit lit1, const Lit lit2);
+ bool shareBinData();
+
+ //stuff to sync
+ vector<std::pair<Lit, Lit> > newBinClauses;
+
+ //stats
+ uint64_t lastSyncConf = 0;
+ vector<uint32_t> syncFinish;
+ Stats stats;
+
+ //Other systems
+ Solver* solver;
+ SharedData* sharedData;
+
+ //misc
+ vector<uint16_t>& seen;
+ vector<Lit>& toClear;
+ vector<uint32_t> outer_to_without_bva_map;
+ bool must_rebuild_bva_map = false;
+};
+
+inline const DataSync::Stats& DataSync::get_stats() const
+{
+ return stats;
+}
+
+template <class T>
+inline void DataSync::signalNewBinClause(T& ps)
+{
+ if (sharedData == NULL) {
+ return;
+ }
+ //assert(ps.size() == 2);
+ signalNewBinClause(ps[0], ps[1]);
+}
+
+inline Lit DataSync::map_outside_without_bva(const Lit lit) const
+{
+ return Lit(outer_to_without_bva_map[lit.var()], lit.sign());
+
+}
+
+inline bool DataSync::enabled()
+{
+ return sharedData != NULL;
+}
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h b/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h
new file mode 100644
index 000000000..ebdf5edae
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/dimacsparser.h
@@ -0,0 +1,529 @@
+/*****************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat -- Copyright (c) 2009 Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+******************************************************************************/
+
+#ifndef DIMACSPARSER_H
+#define DIMACSPARSER_H
+
+#include <string.h>
+#include "streambuffer.h"
+#include "cryptominisat5/cryptominisat.h"
+#include <cstdlib>
+#include <cmath>
+
+using namespace CMSat;
+using std::vector;
+
+template <class C>
+class DimacsParser
+{
+ public:
+ DimacsParser(SATSolver* solver, const std::string* debugLib, unsigned _verbosity);
+
+ template <class T> bool parse_DIMACS(T input_stream, const bool strict_header);
+ uint64_t max_var = std::numeric_limits<uint64_t>::max();
+ vector<uint32_t> independent_vars;
+ const std::string dimacs_spec = "http://www.satcompetition.org/2009/format-benchmarks2009.html";
+ const std::string please_read_dimacs = "\nPlease read DIMACS specification at http://www.satcompetition.org/2009/format-benchmarks2009.html";
+
+ private:
+ bool parse_DIMACS_main(C& in);
+ bool readClause(C& in);
+ bool parse_and_add_clause(C& in);
+ bool parse_and_add_xor_clause(C& in);
+ bool match(C& in, const char* str);
+ bool printHeader(C& in);
+ bool parseComments(C& in, const std::string& str);
+ std::string stringify(uint32_t x) const;
+ bool parse_solve_simp_comment(C& in, const bool solve);
+ void write_solution_to_debuglib_file(const lbool ret) const;
+ bool parseIndependentSet(C& in);
+ std::string get_debuglib_fname() const;
+
+
+ SATSolver* solver;
+ std::string debugLib;
+ unsigned verbosity;
+
+ //Stat
+ size_t lineNum;
+
+ //Printing partial solutions to debugLibPart1..N.output when "debugLib" is set to TRUE
+ uint32_t debugLibPart = 1;
+
+ //check header strictly
+ bool strict_header = false;
+ bool header_found = false;
+ int num_header_vars = 0;
+ int num_header_cls = 0;
+
+ //Reduce temp overhead
+ vector<Lit> lits;
+ vector<uint32_t> vars;
+
+ size_t norm_clauses_added = 0;
+ size_t xor_clauses_added = 0;
+};
+
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+#include <vector>
+#include <fstream>
+#include <complex>
+#include <cassert>
+
+using std::vector;
+using std::cout;
+using std::endl;
+
+template<class C>
+DimacsParser<C>::DimacsParser(
+ SATSolver* _solver
+ , const std::string* _debugLib
+ , unsigned _verbosity
+):
+ solver(_solver)
+ , verbosity(_verbosity)
+ , lineNum(0)
+{
+ if (_debugLib) {
+ debugLib = *_debugLib;
+ }
+}
+
+template<class C>
+std::string DimacsParser<C>::stringify(uint32_t x) const
+{
+ std::ostringstream o;
+ o << x;
+ return o.str();
+}
+
+template<class C>
+bool DimacsParser<C>::readClause(C& in)
+{
+ int32_t parsed_lit;
+ uint32_t var;
+ for (;;) {
+ if (!in.parseInt(parsed_lit, lineNum)) {
+ return false;
+ }
+ if (parsed_lit == 0) {
+ break;
+ }
+
+ var = std::abs(parsed_lit)-1;
+
+ if (var > max_var) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is too large for DIMACS parser parameter: "
+ << var << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ if (var >= (1ULL<<28)) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is far too large: " << var + 1 << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ if (strict_header && !header_found) {
+ std::cerr
+ << "ERROR! "
+ << "DIMACS header ('p cnf vars cls') never found!" << endl;
+ return false;
+ }
+
+ if ((int)var >= num_header_vars && strict_header) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is larger than the header told us." << endl
+ << " -> var is : " << var + 1 << endl
+ << " -> header told us maximum will be : " << num_header_vars << endl
+ << " -> At line " << lineNum+1
+ << endl;
+ return false;
+ }
+
+ if (var >= solver->nVars()) {
+ assert(!strict_header);
+ solver->new_vars(var - solver->nVars() +1);
+ }
+
+ lits.push_back( (parsed_lit > 0) ? Lit(var, false) : Lit(var, true) );
+ if (*in != ' ') {
+ std::cerr
+ << "ERROR! "
+ << "After last element on the line must be 0" << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl
+ << endl;
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::match(C& in, const char* str)
+{
+ for (; *str != 0; ++str, ++in)
+ if (*str != *in)
+ return false;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::printHeader(C& in)
+{
+ if (match(in, "p cnf")) {
+ if (header_found && strict_header) {
+ std::cerr << "ERROR: CNF header ('p cnf vars cls') found twice in file! Exiting." << endl;
+ exit(-1);
+ }
+ header_found = true;
+
+ if (!in.parseInt(num_header_vars, lineNum)
+ || !in.parseInt(num_header_cls, lineNum)
+ ) {
+ return false;
+ }
+ if (verbosity) {
+ cout << "c -- header says num vars: " << std::setw(12) << num_header_vars << endl;
+ cout << "c -- header says num clauses:" << std::setw(12) << num_header_cls << endl;
+ }
+ if (num_header_vars < 0) {
+ std::cerr << "ERROR: Number of variables in header cannot be less than 0" << endl;
+ return false;
+ }
+ if (num_header_cls < 0) {
+ std::cerr << "ERROR: Number of clauses in header cannot be less than 0" << endl;
+ return false;
+ }
+
+ if (solver->nVars() < (size_t)num_header_vars) {
+ solver->new_vars(num_header_vars-solver->nVars());
+ }
+ } else {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (hex: " << std::hex
+ << std::setw(2)
+ << std::setfill('0')
+ << "0x" << *in
+ << std::setfill(' ')
+ << std::dec
+ << ")"
+ << " At line " << lineNum+1
+ << "' in the header, at line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ return true;
+}
+
+template<class C>
+std::string DimacsParser<C>::get_debuglib_fname() const
+{
+ std::string sol_fname = debugLib + "-debugLibPart" + stringify(debugLibPart) +".output";
+ return sol_fname;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_solve_simp_comment(C& in, const bool solve)
+{
+ vector<Lit> assumps;
+ in.skipWhitespace();
+ while(*in != ')') {
+ int lit;
+ if (!in.parseInt(lit, lineNum)) {
+ return false;
+ }
+ assumps.push_back(Lit(std::abs(lit)-1, lit < 0));
+ in.skipWhitespace();
+ }
+
+ if (verbosity) {
+ cout
+ << "c -----------> Solver::"
+ << (solve ? "solve" : "simplify")
+ <<" called (number: "
+ << std::setw(3) << debugLibPart << ") with assumps :";
+ for(Lit lit: assumps) {
+ cout << lit << " ";
+ }
+ cout << "<-----------" << endl;
+ }
+
+ lbool ret;
+ if (solve) {
+ if (verbosity) {
+ cout << "c Solution will be written to: "
+ << get_debuglib_fname() << endl;
+ }
+ ret = solver->solve(&assumps);
+ write_solution_to_debuglib_file(ret);
+ debugLibPart++;
+ } else {
+ ret = solver->simplify(&assumps);
+ }
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::"
+ << (solve ? "solve" : "simplify")
+ << endl;
+ }
+ return true;
+}
+
+template<class C>
+void DimacsParser<C>::write_solution_to_debuglib_file(const lbool ret) const
+{
+ //Open file for writing
+ std::string s = get_debuglib_fname();
+ std::ofstream partFile;
+ partFile.open(s.c_str());
+ if (!partFile) {
+ std::cerr << "ERROR: Cannot open part file '" << s << "'";
+ std::exit(-1);
+ }
+
+ //Output to part file the result
+ if (ret == l_True) {
+ partFile << "s SATISFIABLE\n";
+ partFile << "v ";
+ for (uint32_t i = 0; i != solver->nVars(); i++) {
+ if (solver->get_model()[i] != l_Undef)
+ partFile
+ << ((solver->get_model()[i]==l_True) ? "" : "-")
+ << (i+1) << " ";
+ }
+ partFile << "0\n";
+ } else if (ret == l_False) {
+ partFile << "conflict ";
+ for (Lit lit: solver->get_conflict()) {
+ partFile << lit << " ";
+ }
+ partFile
+ << "\ns UNSAT\n";
+ } else if (ret == l_Undef) {
+ cout << "c timeout, exiting" << endl;
+ std::exit(15);
+ } else {
+ assert(false);
+ }
+ partFile.close();
+}
+
+template<class C>
+bool DimacsParser<C>::parseComments(C& in, const std::string& str)
+{
+ if (!debugLib.empty() && str.substr(0, 13) == "Solver::solve") {
+ if (!parse_solve_simp_comment(in, true)) {
+ return false;
+ }
+ } else if (!debugLib.empty() && str.substr(0, 16) == "Solver::simplify") {
+ if (!parse_solve_simp_comment(in, false)) {
+ return false;
+ }
+ } else if (!debugLib.empty() && str == "Solver::new_var()") {
+ solver->new_var();
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::new_var()" << endl;
+ }
+ } else if (!debugLib.empty() && str == "Solver::new_vars(") {
+ in.skipWhitespace();
+ int n;
+ if (!in.parseInt(n, lineNum)) {
+ return false;
+ }
+ solver->new_vars(n);
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::new_vars( " << n << " )" << endl;
+ }
+ } else if (str == "ind") {
+ if (!parseIndependentSet(in)) {
+ return false;
+ }
+ } else {
+ if (verbosity >= 6) {
+ cout
+ << "didn't understand in CNF file comment line:"
+ << "'c " << str << "'"
+ << endl;
+ }
+ }
+ in.skipLine();
+ lineNum++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_and_add_clause(C& in)
+{
+ lits.clear();
+ if (!readClause(in)) {
+ return false;
+ }
+ in.skipWhitespace();
+ if (!in.skipEOL(lineNum)) {
+ return false;
+ }
+ lineNum++;
+ solver->add_clause(lits);
+ norm_clauses_added++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_and_add_xor_clause(C& in)
+{
+ lits.clear();
+ if (!readClause(in)) {
+ return false;
+ }
+ if (!in.skipEOL(lineNum)) {
+ return false;
+ }
+ lineNum++;
+ if (lits.empty())
+ return true;
+
+ bool rhs = true;
+ vars.clear();
+ for(Lit& lit: lits) {
+ vars.push_back(lit.var());
+ if (lit.sign()) {
+ rhs ^= true;
+ }
+ }
+ solver->add_xor_clause(vars, rhs);
+ xor_clauses_added++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_DIMACS_main(C& in)
+{
+ std::string str;
+
+ for (;;) {
+ in.skipWhitespace();
+ switch (*in) {
+ case EOF:
+ return true;
+ case 'p':
+ if (!printHeader(in)) {
+ return false;
+ }
+ in.skipLine();
+ lineNum++;
+ break;
+ case 'c':
+ ++in;
+ in.parseString(str);
+ if (!parseComments(in, str)) {
+ return false;
+ }
+ break;
+ case 'x':
+ ++in;
+ if (!parse_and_add_xor_clause(in)) {
+ return false;
+ }
+ break;
+ case '\n':
+ std::cerr
+ << "c WARNING: Empty line at line number " << lineNum+1
+ << " -- this is not part of the DIMACS specifications ("
+ << dimacs_spec << "). Ignoring."
+ << endl;
+ in.skipLine();
+ lineNum++;
+ break;
+ default:
+ if (!parse_and_add_clause(in)) {
+ return false;
+ }
+ break;
+ }
+ }
+
+ return true;
+}
+
+template <class C>
+template <class T>
+bool DimacsParser<C>::parse_DIMACS(T input_stream, const bool _strict_header)
+{
+ debugLibPart = 1;
+ strict_header = _strict_header;
+ const uint32_t origNumVars = solver->nVars();
+
+ C in(input_stream);
+ if ( !parse_DIMACS_main(in)) {
+ return false;
+ }
+
+ if (verbosity) {
+ cout
+ << "c -- clauses added: " << norm_clauses_added << endl
+ << "c -- xor clauses added: " << xor_clauses_added << endl
+ << "c -- vars added " << (solver->nVars() - origNumVars)
+ << endl;
+ }
+
+ return true;
+}
+
+template <class C>
+bool DimacsParser<C>::parseIndependentSet(C& in)
+{
+ int32_t parsed_lit;
+ for (;;) {
+ if (!in.parseInt(parsed_lit, lineNum)) {
+ return false;
+ }
+ if (parsed_lit == 0) {
+ break;
+ }
+ uint32_t var = std::abs(parsed_lit) - 1;
+ independent_vars.push_back(var);
+ }
+ return true;
+}
+
+#endif //DIMACSPARSER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp b/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
new file mode 100644
index 000000000..dae50d7c8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.cpp
@@ -0,0 +1,533 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "distillerlong.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+
+#include <iomanip>
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+//#define DEBUG_STAMPING
+
+#ifdef VERBOSE_DEBUG
+#define VERBOSE_SUBSUME_NONEXIST
+#endif
+
+//#define VERBOSE_SUBSUME_NONEXIST
+
+DistillerLong::DistillerLong(Solver* _solver) :
+ solver(_solver)
+{}
+
+bool DistillerLong::distill(const bool red)
+{
+ assert(solver->ok);
+ numCalls++;
+ Stats other;
+
+
+ if (!red) {
+ runStats.clear();
+ if (!distill_long_cls_all(solver->longIrredCls, 1)) {
+ goto end;
+ }
+ other = runStats;
+ } else {
+ runStats.clear();
+ if (!distill_long_cls_all(solver->longRedCls[0], 10.0)) {
+ goto end;
+ }
+// if (!distill_long_cls_all(solver->longRedCls[1], 10.0)) {
+// goto end;
+// }
+ }
+
+end:
+ runStats += other;
+ globalStats += runStats;
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3)
+ runStats.print(solver->nVars());
+ else
+ runStats.print_short(solver);
+ }
+ runStats.clear();
+
+ return solver->okay();
+}
+
+struct ClauseSizeSorterInv
+{
+ ClauseSizeSorterInv(const ClauseAllocator& _cl_alloc) :
+ cl_alloc(_cl_alloc)
+ {}
+
+ const ClauseAllocator& cl_alloc;
+
+ bool operator()(const ClOffset off1, const ClOffset off2) const
+ {
+ const Clause* cl1 = cl_alloc.ptr(off1);
+ const Clause* cl2 = cl_alloc.ptr(off2);
+
+ return cl1->size() > cl2->size();
+ }
+};
+
+bool DistillerLong::go_through_clauses(
+ vector<ClOffset>& cls
+) {
+ bool time_out = false;
+ vector<ClOffset>::iterator i, j;
+ i = j = cls.begin();
+ for (vector<ClOffset>::iterator end = cls.end()
+ ; i != end
+ ; i++
+ ) {
+ //Check if we are in state where we only copy offsets around
+ if (time_out || !solver->ok) {
+ *j++ = *i;
+ continue;
+ }
+
+ //if done enough, stop doing it
+ if ((int64_t)solver->propStats.bogoProps-(int64_t)oldBogoProps >= maxNumProps
+ || solver->must_interrupt_asap()
+ ) {
+ if (solver->conf.verbosity >= 3) {
+ cout
+ << "c Need to finish distillation -- ran out of prop (=allocated time)"
+ << endl;
+ }
+ runStats.timeOut++;
+ time_out = true;
+ }
+
+ //Get pointer
+ ClOffset offset = *i;
+ ClOffset offset2;
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ #ifdef USE_GAUSS
+ if (cl.used_in_xor()) {
+ offset2 = offset;
+ goto copy;
+ }
+ #endif
+
+ //Time to dereference
+ maxNumProps -= 5;
+
+ //If we already tried this clause, then move to next
+ if (cl.getdistilled()) {
+ *j++ = *i;
+ continue;
+ };
+ cl.set_distilled(true);
+ runStats.checkedClauses++;
+ assert(cl.size() > 2);
+
+ //we will detach the clause no matter what
+ maxNumProps -= solver->watches[cl[0]].size();
+ maxNumProps -= solver->watches[cl[1]].size();
+
+ maxNumProps -= cl.size();
+ if (solver->satisfied_cl(cl)) {
+ solver->detachClause(cl);
+ solver->cl_alloc.clauseFree(&cl);
+ continue;
+ }
+
+ //Try to distill clause
+ offset2 = try_distill_clause_and_return_new(
+ offset
+ , cl.red()
+ , cl.stats
+ );
+
+ #ifdef USE_GAUSS
+ copy:
+ #endif
+ if (offset2 != CL_OFFSET_MAX) {
+ *j++ = offset2;
+ }
+ }
+ cls.resize(cls.size()- (i-j));
+
+ return time_out;
+}
+
+bool DistillerLong::distill_long_cls_all(
+ vector<ClOffset>& offs
+ , double time_mult
+) {
+ assert(solver->ok);
+ if (solver->conf.verbosity >= 6) {
+ cout
+ << "c Doing distillation branch for long clauses"
+ << endl;
+ }
+
+ double myTime = cpuTime();
+ const size_t origTrailSize = solver->trail_size();
+
+ //Time-limiting
+ maxNumProps =
+ solver->conf.distill_long_cls_time_limitM*1000LL*1000ULL
+ *solver->conf.global_timeout_multiplier;
+
+ if (solver->litStats.irredLits + solver->litStats.redLits <
+ (500ULL*1000ULL*solver->conf.var_and_mem_out_mult)
+ ) {
+ maxNumProps *=2;
+ }
+ maxNumProps *= time_mult;
+ orig_maxNumProps = maxNumProps;
+
+ //stats setup
+ oldBogoProps = solver->propStats.bogoProps;
+ runStats.potentialClauses += offs.size();
+ runStats.numCalled += 1;
+
+ /*std::sort(offs.begin()
+ , offs.end()
+ , ClauseSizeSorterInv(solver->cl_alloc)
+ );*/
+
+ bool time_out = go_through_clauses(offs);
+
+ const double time_used = cpuTime() - myTime;
+ const double time_remain = float_div(
+ maxNumProps - ((int64_t)solver->propStats.bogoProps-(int64_t)oldBogoProps),
+ orig_maxNumProps);
+ if (solver->conf.verbosity) {
+ cout << "c [distill] long cls"
+ << " tried: " << runStats.checkedClauses << "/" << offs.size()
+ << " cl-short:" << runStats.numClShorten
+ << " lit-r:" << runStats.numLitsRem
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "distill long cls"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ //Update stats
+ runStats.time_used += cpuTime() - myTime;
+ runStats.zeroDepthAssigns += solver->trail_size() - origTrailSize;
+
+ return solver->okay();
+}
+
+/*ClOffset DistillerLong::try_distill_clause_and_return_new(
+ ClOffset offset
+ , const bool red
+ , const ClauseStats& stats
+) {
+ #ifdef DRAT_DEBUG
+ if (solver->conf.verbosity >= 6) {
+ cout << "Trying to distill clause:" << lits << endl;
+ }
+ #endif
+
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ lits.resize(cl.size());
+ std::copy(cl.begin(), cl.end(), lits.begin());
+
+ //Try to enqueue the literals in 'queueByBy' amounts and see if we fail
+ uint32_t new_sz = 0;
+ solver->new_decision_level();
+ bool early_abort = false;
+ for (size_t i = 0, sz = lits.size()-1; i < sz; i++) {
+ const Lit lit = lits[i];
+ lbool val = solver->value(lit);
+ if (val == l_Undef) {
+ solver->enqueue(~lit);
+ new_sz++;
+
+ maxNumProps -= 5;
+ if (!solver->propagate<true>().isNULL()) {
+ early_abort = true;
+ break;
+ }
+ } else if (val == l_False) {
+ //Record that there is no use for this literal
+ solver->seen[lit.toInt()] = 1;
+ //new_sz++;
+ } else {
+ //val is l_True --> can't do much
+ new_sz++;
+ early_abort = true;
+ break;
+ }
+ }
+ solver->cancelUntil<false, true>(0);
+ assert(solver->ok);
+ if (!early_abort) {
+ new_sz++;
+ }
+
+ if (new_sz < lits.size()) {
+ runStats.numClShorten++;
+ maxNumProps -= 20;
+ runStats.numLitsRem += lits.size() - new_sz;
+ if (solver->conf.verbosity >= 5) {
+ cout
+ << "c Distillation branch effective." << endl
+ << "c --> orig clause:" << *solver->cl_alloc.ptr(offset) << endl
+ << "c --> orig size:" << lits.size() << endl
+ << "c --> new size:" << new_sz << endl;
+ }
+
+ //Remove useless literals from 'lits'
+ vector<Lit>::iterator i = lits.begin();
+ vector<Lit>::iterator j = lits.begin();
+ for(vector<Lit>::iterator end = lits.end()
+ ; i != end
+ ; i++
+ ) {
+ if (solver->seen[i->toInt()] == 0) {
+ *j++ = *i;
+ } else {
+ //zero out 'seen'
+ solver->seen[i->toInt()] = 0;
+ }
+ }
+ lits.resize(new_sz);
+
+ //Make new clause
+ Clause *cl2 = solver->add_clause_int(lits, red, stats);
+
+ //Detach and free old clause
+ solver->detachClause(offset);
+ solver->cl_alloc.clauseFree(offset);
+
+ if (cl2 != NULL) {
+ cl2->set_distilled(true);
+ return solver->cl_alloc.get_offset(cl2);
+ } else {
+ //it became a bin/unit/zero
+ return CL_OFFSET_MAX;
+ }
+ } else {
+ //couldn't simplify the clause
+ return offset;
+ }
+}*/
+
+ClOffset DistillerLong::try_distill_clause_and_return_new(
+ ClOffset offset
+ , const bool red
+ , const ClauseStats& stats
+) {
+ #ifdef DRAT_DEBUG
+ if (solver->conf.verbosity >= 6) {
+ cout << "Trying to distill clause:" << lits << endl;
+ }
+ #endif
+
+ //Try to enqueue the literals in 'queueByBy' amounts and see if we fail
+ solver->detachClause(offset, false);
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ (*solver->drat) << deldelay << cl << fin;
+
+ uint32_t orig_size = cl.size();
+ uint32_t i = 0;
+ uint32_t j = 0;
+ for (uint32_t sz = cl.size(); i < sz; i++) {
+ if (solver->value(cl[i]) != l_False) {
+ cl[j++] = cl[i];
+ }
+ }
+ cl.resize(j);
+
+ solver->new_decision_level();
+ bool True_confl = false;
+ PropBy confl;
+ i = 0;
+ j = 0;
+ for (uint32_t sz = cl.size(); i < sz; i++) {
+ const Lit lit = cl[i];
+ lbool val = solver->value(lit);
+ if (val == l_Undef) {
+ solver->enqueue(~lit);
+ cl[j++] = cl[i];
+
+ maxNumProps -= 5;
+ confl = solver->propagate<true>();
+ if (!confl.isNULL()) {
+ break;
+ }
+ } else if (val == l_False) {
+ // skip
+ } else {
+ assert(val == l_True);
+ cl[j++] = cl[i];
+ True_confl = true;
+ confl = solver->varData[cl[i].var()].reason;
+ break;
+ }
+ }
+ assert(solver->ok);
+ cl.resize(j);
+
+ //Couldn't simplify the clause
+ if (j == orig_size && !True_confl && confl.isNULL()) {
+ solver->cancelUntil<false, true>(0);
+ solver->attachClause(cl);
+ solver->drat->forget_delay();
+ return offset;
+ }
+
+ #ifdef VERBOSE_DEBUG
+ if (j < i && solver->conf.verbosity >= 5) {
+ cout
+ << "c Distillation branch effective." << endl
+ << "c --> shortened cl:" << cl<< endl
+ << "c --> orig size:" << orig_size << endl
+ << "c --> new size:" << j << endl;
+ }
+ #endif
+
+ bool lits_set = false;
+ if (red && j > 1 && (!confl.isNULL() || True_confl)) {
+ #ifdef VERBOSE_DEBUG
+ if (solver->conf.verbosity >= 5) {
+ cout
+ << "c Distillation even more effective." << endl
+ << "c --> orig shortened cl:" << cl << endl;
+ }
+ #endif
+ runStats.numClShorten++;
+ maxNumProps -= 20;
+ lits.clear();
+ if (True_confl) {
+ lits.push_back(cl[cl.size()-1]);
+ }
+ solver->simple_create_learnt_clause(confl, lits, True_confl);
+ if (lits.size() < cl.size()) {
+ #ifdef VERBOSE_DEBUG
+ if (solver->conf.verbosity >= 5) {
+ cout
+ << "c --> more shortened cl:" << lits << endl;
+ }
+ #endif
+ lits_set = true;
+ }
+ }
+ solver->cancelUntil<false, true>(0);
+ runStats.numLitsRem += orig_size - cl.size();
+ runStats.numClShorten++;
+
+ //Make new clause
+ if (!lits_set) {
+ lits.resize(cl.size());
+ std::copy(cl.begin(), cl.end(), lits.begin());
+ }
+ solver->cl_alloc.clauseFree(offset);
+ Clause *cl2 = solver->add_clause_int(lits, red, stats);
+ (*solver->drat) << findelay;
+
+ if (cl2 != NULL) {
+ cl2->set_distilled(true);
+ return solver->cl_alloc.get_offset(cl2);
+ } else {
+ //it became a bin/unit/zero
+ return CL_OFFSET_MAX;
+ }
+}
+
+DistillerLong::Stats& DistillerLong::Stats::operator+=(const Stats& other)
+{
+ time_used += other.time_used;
+ timeOut += other.timeOut;
+ zeroDepthAssigns += other.zeroDepthAssigns;
+ numClShorten += other.numClShorten;
+ numLitsRem += other.numLitsRem;
+ checkedClauses += other.checkedClauses;
+ potentialClauses += other.potentialClauses;
+ numCalled += other.numCalled;
+
+ return *this;
+}
+
+void DistillerLong::Stats::print_short(const Solver* _solver) const
+{
+ cout
+ << "c [distill] long"
+ << " useful: "<< numClShorten
+ << "/" << checkedClauses << "/" << potentialClauses
+ << " lits-rem: " << numLitsRem
+ << " 0-depth-assigns: " << zeroDepthAssigns
+ << _solver->conf.print_times(time_used, timeOut)
+ << endl;
+}
+
+void DistillerLong::Stats::print(const size_t nVars) const
+{
+ cout << "c -------- DISTILL STATS --------" << endl;
+ print_stats_line("c time"
+ , time_used
+ , ratio_for_stat(time_used, numCalled)
+ , "per call"
+ );
+
+ print_stats_line("c timed out"
+ , timeOut
+ , stats_line_percent(timeOut, numCalled)
+ , "% of calls"
+ );
+
+ print_stats_line("c distill/checked/potential"
+ , numClShorten
+ , checkedClauses
+ , potentialClauses
+ );
+
+ print_stats_line("c lits-rem",
+ numLitsRem
+ );
+ print_stats_line("c 0-depth-assigns",
+ zeroDepthAssigns
+ , stats_line_percent(zeroDepthAssigns, nVars)
+ , "% of vars"
+ );
+ cout << "c -------- DISTILL STATS END --------" << endl;
+}
+
+double DistillerLong::mem_used() const
+{
+ double mem_used = sizeof(DistillerLong);
+ mem_used += lits.size()*sizeof(Lit);
+ return mem_used;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h b/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
new file mode 100644
index 000000000..b218727a5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/distillerlong.h
@@ -0,0 +1,109 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __DISTILLERALL_WITH_ALL_H__
+#define __DISTILLERALL_WITH_ALL_H__
+
+#include <vector>
+#include "clause.h"
+#include "constants.h"
+#include "solvertypes.h"
+#include "cloffset.h"
+#include "watcharray.h"
+
+namespace CMSat {
+
+using std::vector;
+
+class Solver;
+class Clause;
+
+class DistillerLong {
+ public:
+ explicit DistillerLong(Solver* solver);
+ bool distill(const bool red);
+
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ Stats& operator+=(const Stats& other);
+ void print_short(const Solver* solver) const;
+ void print(const size_t nVars) const;
+
+ double time_used = 0.0;
+ uint64_t timeOut = 0;
+ uint64_t zeroDepthAssigns = 0;
+ uint64_t numClShorten = 0;
+ uint64_t numLitsRem = 0;
+ uint64_t checkedClauses = 0;
+ uint64_t potentialClauses = 0;
+ uint64_t numCalled = 0;
+ };
+
+ const Stats& get_stats() const;
+ double mem_used() const;
+
+ private:
+
+ ClOffset try_distill_clause_and_return_new(
+ ClOffset offset
+ , const bool red
+ , const ClauseStats& stats
+ );
+ ClOffset try_distill_clause_and_return_new_slow(
+ ClOffset offset
+ , const bool red
+ , const ClauseStats& stats
+ );
+ bool distill_long_cls_all(vector<ClOffset>& offs, double time_mult);
+
+ //Actual algorithms used
+ bool distill_long_irred_cls();
+ bool go_through_clauses(vector<ClOffset>& cls);
+ Solver* solver;
+
+ //For distill
+ vector<Lit> lits;
+ uint64_t oldBogoProps;
+ int64_t maxNumProps;
+ int64_t orig_maxNumProps;
+
+ //Global status
+ Stats runStats;
+ Stats globalStats;
+ size_t numCalls = 0;
+
+};
+
+inline const DistillerLong::Stats& DistillerLong::get_stats() const
+{
+ return globalStats;
+}
+
+} //end namespace
+
+#endif //__DISTILLERALL_WITH_ALL_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp b/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
new file mode 100644
index 000000000..56b4547f4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.cpp
@@ -0,0 +1,635 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "distillerlongwithimpl.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+
+#include <iomanip>
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+//#define DEBUG_STAMPING
+
+#ifdef VERBOSE_DEBUG
+#define VERBOSE_SUBSUME_NONEXIST
+#endif
+
+//#define VERBOSE_SUBSUME_NONEXIST
+
+DistillerLongWithImpl::DistillerLongWithImpl(Solver* _solver) :
+ solver(_solver)
+ , seen(solver->seen)
+ , seen2(solver->seen2)
+ , numCalls(0)
+{}
+
+bool DistillerLongWithImpl::distill_long_with_implicit(const bool alsoStrengthen)
+{
+ assert(solver->ok);
+ numCalls++;
+
+ solver->clauseCleaner->remove_and_clean_all();
+
+ runStats.redCacheBased.clear();
+ runStats.irredCacheBased.clear();
+
+ if (!shorten_all_cl_with_cache_watch_stamp(solver->longIrredCls, false, false))
+ goto end;
+
+ if (solver->longRedCls[0].size() > 0
+ && !shorten_all_cl_with_cache_watch_stamp(solver->longRedCls[0], true, false)
+ ) {
+ goto end;
+ }
+
+ if (alsoStrengthen) {
+ if (!shorten_all_cl_with_cache_watch_stamp(solver->longIrredCls, false, true))
+ goto end;
+
+ if (solver->longRedCls[0].size() > 0
+ && !shorten_all_cl_with_cache_watch_stamp(solver->longRedCls[0], true, true)
+ ) {
+ goto end;
+ }
+ }
+
+end:
+ globalStats += runStats;
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3)
+ runStats.print();
+ else
+ runStats.print_short(solver);
+ }
+ runStats.clear();
+
+ return solver->okay();
+}
+
+void DistillerLongWithImpl::strengthen_clause_with_watch(
+ const Lit lit
+ , const Watched* wit
+) {
+ //Strengthening w/ bin
+ if (wit->isBin()
+ && seen[lit.toInt()] //We haven't yet removed it
+ ) {
+ if (seen[(~wit->lit2()).toInt()]) {
+ thisremLitBin++;
+ seen[(~wit->lit2()).toInt()] = 0;
+ }
+ }
+}
+
+bool DistillerLongWithImpl::subsume_clause_with_watch(
+ const Lit lit
+ , Watched* wit
+ , const Clause& cl
+) {
+ //Subsumption w/ bin
+ if (wit->isBin() &&
+ seen2[wit->lit2().toInt()]
+ ) {
+ //If subsuming irred with redundant, make the redundant into irred
+ if (wit->red() && !cl.red()) {
+ wit->setRed(false);
+ timeAvailable -= (long)solver->watches[wit->lit2()].size()*3;
+ findWatchedOfBin(solver->watches, wit->lit2(), lit, true).setRed(false);
+ solver->binTri.redBins--;
+ solver->binTri.irredBins++;
+ }
+ cache_based_data.subBin++;
+ isSubsumed = true;
+ return true;
+ }
+
+ //Extension w/ bin
+ if (wit->isBin()
+ && !wit->red()
+ && !seen2[(~(wit->lit2())).toInt()]
+ ) {
+ seen2[(~(wit->lit2())).toInt()] = 1;
+ lits2.push_back(~(wit->lit2()));
+ }
+
+ return false;
+}
+
+bool DistillerLongWithImpl::str_and_sub_clause_with_cache(const Lit lit, const bool alsoStrengthen)
+{
+ if (solver->conf.doCache
+ && seen[lit.toInt()] //We haven't yet removed this literal from the clause
+ ) {
+ timeAvailable -= (1+(int)alsoStrengthen)*(long)solver->implCache[lit].lits.size();
+ for (const LitExtra elit: solver->implCache[lit].lits) {
+ if (alsoStrengthen
+ && seen[(~(elit.getLit())).toInt()]
+ ) {
+ seen[(~(elit.getLit())).toInt()] = 0;
+ thisRemLitCache++;
+ }
+
+ if (seen2[elit.getLit().toInt()]
+ && elit.getOnlyIrredBin()
+ ) {
+ isSubsumed = true;
+ cache_based_data.subCache++;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ return false;
+}
+
+void DistillerLongWithImpl::str_and_sub_using_watch(
+ Clause& cl
+ , const Lit lit
+ , const bool alsoStrengthen
+) {
+ //Go through the watchlist
+ watch_subarray thisW = solver->watches[lit];
+ timeAvailable -= (long)thisW.size()*2 + 5;
+ for(Watched* wit = thisW.begin(), *wend = thisW.end()
+ ; wit != wend
+ ; wit++
+ ) {
+ //Can't do anything with a clause
+ if (wit->isClause())
+ continue;
+
+ timeAvailable -= 5;
+
+ if (alsoStrengthen) {
+ strengthen_clause_with_watch(lit, wit);
+ }
+
+ const bool subsumed = subsume_clause_with_watch(lit, wit, cl);
+ if (subsumed)
+ return;
+ }
+}
+
+void DistillerLongWithImpl::try_subsuming_by_stamping(const bool red)
+{
+ if (solver->conf.doStamp
+ && solver->conf.otfHyperbin
+ && !isSubsumed
+ && !red
+ ) {
+ timeAvailable -= (long)lits2.size()*3 + 10;
+ if (solver->stamp.stampBasedClRem(lits2)) {
+ isSubsumed = true;
+ cache_based_data.subsumedStamp++;
+ }
+ }
+}
+
+void DistillerLongWithImpl::remove_lits_through_stamping_red()
+{
+ if (lits.size() > 1) {
+ timeAvailable -= (long)lits.size()*3 + 10;
+ std::pair<size_t, size_t> tmp = solver->stamp.stampBasedLitRem(lits, STAMP_RED);
+ cache_based_data.remLitTimeStampTotal += tmp.first;
+ cache_based_data.remLitTimeStampTotalInv += tmp.second;
+ }
+}
+
+void DistillerLongWithImpl::remove_lits_through_stamping_irred()
+{
+ if (lits.size() > 1) {
+ timeAvailable -= (long)lits.size()*3 + 10;
+ std::pair<size_t, size_t> tmp = solver->stamp.stampBasedLitRem(lits, STAMP_IRRED);
+ cache_based_data.remLitTimeStampTotal += tmp.first;
+ cache_based_data.remLitTimeStampTotalInv += tmp.second;
+ }
+}
+
+void DistillerLongWithImpl::strsub_with_cache_and_watch(
+ bool alsoStrengthen
+ , Clause& cl
+) {
+ //Go through each literal and subsume/strengthen with it
+ Lit *lit2 = cl.begin();
+ lit2++;
+ for (const Lit
+ *lit = cl.begin(), *end = cl.end()
+ ; lit != end && !isSubsumed
+ ; lit++, lit2++
+ ) {
+ if (lit2 < end) {
+ solver->watches.prefetch(lit2->toInt());
+ }
+
+ bool subsumed = str_and_sub_clause_with_cache(*lit, alsoStrengthen);
+ if (subsumed)
+ break;
+
+ str_and_sub_using_watch(cl, *lit, alsoStrengthen);
+ }
+ assert(lits2.size() > 1);
+}
+
+bool DistillerLongWithImpl::sub_str_cl_with_cache_watch_stamp(
+ ClOffset& offset
+ , bool red
+ , const bool alsoStrengthen
+) {
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ assert(cl.size() > 2);
+
+ if (solver->conf.verbosity >= 10) {
+ cout << "Examining str clause:" << cl << endl;
+ }
+
+ timeAvailable -= (long)cl.size()*2;
+ tmpStats.totalLits += cl.size();
+ tmpStats.triedCls++;
+ isSubsumed = false;
+ thisRemLitCache = 0;
+ thisremLitBin = 0;
+
+ //Fill 'seen'
+ lits2.clear();
+ for (const Lit lit: cl) {
+ seen[lit.toInt()] = 1;
+ seen2[lit.toInt()] = 1;
+ lits2.push_back(lit);
+ }
+
+ strsub_with_cache_and_watch(alsoStrengthen, cl);
+ if (solver->stamp.stampingTime != 0) {
+ try_subsuming_by_stamping(red);
+ }
+
+ //Clear 'seen2'
+ timeAvailable -= (long)lits2.size()*3;
+ for (const Lit lit: lits2) {
+ seen2[lit.toInt()] = 0;
+ }
+
+ //Clear 'seen' and fill new clause data
+ lits.clear();
+ timeAvailable -= (long)cl.size()*3;
+ for (const Lit lit: cl) {
+ if (!isSubsumed
+ && seen[lit.toInt()]
+ ) {
+ lits.push_back(lit);
+ }
+ seen[lit.toInt()] = 0;
+ }
+
+ if (isSubsumed)
+ return true;
+
+ if (alsoStrengthen
+ && solver->conf.doStamp
+ ) {
+ remove_lits_through_stamping_red();
+ remove_lits_through_stamping_irred();
+ }
+
+ //Nothing to do
+ if (lits.size() == cl.size()) {
+ return false;
+ }
+
+ return remove_or_shrink_clause(cl, offset);
+}
+
+//returns FALSE in case clause is shortened, and TRUE in case it is removed
+bool DistillerLongWithImpl::remove_or_shrink_clause(Clause& cl, ClOffset& offset)
+{
+ //Remove or shrink clause
+ timeAvailable -= (long)cl.size()*10;
+ cache_based_data.remLitCache += thisRemLitCache;
+ cache_based_data.remLitBin += thisremLitBin;
+ tmpStats.shrinked++;
+ timeAvailable -= (long)lits.size()*2 + 50;
+ Clause* c2 = solver->add_clause_int(lits, cl.red(), cl.stats);
+ if (c2 != NULL) {
+ solver->detachClause(offset);
+ solver->cl_alloc.clauseFree(offset);
+ offset = solver->cl_alloc.get_offset(c2);
+ return false;
+ }
+
+ //Implicit clause or non-existent after addition, remove
+ return true;
+}
+
+void DistillerLongWithImpl::randomise_order_of_clauses(
+ vector<ClOffset>& clauses
+) {
+ if (clauses.empty())
+ return;
+
+ timeAvailable -= (long)clauses.size()*2;
+ for(size_t i = 0; i < clauses.size()-1; i++) {
+ std::swap(
+ clauses[i]
+ , clauses[i + solver->mtrand.randInt(clauses.size()-i-1)]
+ );
+ }
+}
+
+uint64_t DistillerLongWithImpl::calc_time_available(
+ const bool alsoStrengthen
+ , const bool red
+) const {
+ //If it hasn't been to successful until now, don't do it so much
+ const Stats::CacheBased* stats = NULL;
+ if (red) {
+ stats = &(globalStats.redCacheBased);
+ } else {
+ stats = &(globalStats.irredCacheBased);
+ }
+
+ uint64_t maxCountTime =
+ solver->conf.watch_cache_stamp_based_str_time_limitM*1000LL*1000LL
+ *solver->conf.global_timeout_multiplier;
+ if (!alsoStrengthen) {
+ maxCountTime *= 2;
+ }
+ if (stats->numCalled > 2
+ && stats->triedCls > 0 //avoid division by zero
+ && stats->totalLits > 0 //avoid division by zero
+ && float_div(stats->numClSubsumed, stats->triedCls) < 0.05
+ && float_div(stats->numLitsRem, stats->totalLits) < 0.05
+ ) {
+ maxCountTime *= 0.5;
+ }
+
+ return maxCountTime;
+}
+
+bool DistillerLongWithImpl::shorten_all_cl_with_cache_watch_stamp(
+ vector<ClOffset>& clauses
+ , bool red
+ , bool alsoStrengthen
+) {
+ assert(solver->ok);
+
+ //Stats
+ double myTime = cpuTime();
+
+ const int64_t orig_time_available = calc_time_available(alsoStrengthen, red);
+ timeAvailable = orig_time_available;
+ tmpStats = Stats::CacheBased();
+ tmpStats.totalCls = clauses.size();
+ tmpStats.numCalled = 1;
+ cache_based_data.clear();
+ bool need_to_finish = false;
+
+ //don't randomise if it's too large.
+ if (clauses.size() < 100*10000*1000) {
+ randomise_order_of_clauses(clauses);
+ }
+
+ size_t i = 0;
+ size_t j = i;
+ ClOffset offset;
+ #ifdef USE_GAUSS
+ Clause* cl;
+ #endif
+ const size_t end = clauses.size();
+ for (
+ ; i < end
+ ; i++
+ ) {
+ //Timeout?
+ if (timeAvailable <= 0
+ || !solver->okay()
+ ) {
+ need_to_finish = true;
+ tmpStats.ranOutOfTime++;
+ }
+
+ //Check status
+ offset = clauses[i];
+ if (need_to_finish) {
+ goto copy;
+ }
+
+ #ifdef USE_GAUSS
+ cl = solver->cl_alloc.ptr(offset);
+ if (cl->used_in_xor()) {
+ goto copy;
+ }
+ #endif
+
+ if (sub_str_cl_with_cache_watch_stamp(offset, red, alsoStrengthen)) {
+ solver->detachClause(offset);
+ solver->cl_alloc.clauseFree(offset);
+ continue;
+ }
+
+ copy:
+ clauses[j++] = offset;
+ }
+ clauses.resize(clauses.size() - (i-j));
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_implicit_stats();
+ #endif
+
+ dump_stats_for_shorten_all_cl_with_cache_stamp(red
+ , alsoStrengthen
+ , myTime
+ , orig_time_available
+ );
+
+ return solver->okay();
+}
+
+void DistillerLongWithImpl::dump_stats_for_shorten_all_cl_with_cache_stamp(
+ bool red
+ , bool alsoStrengthen
+ , double myTime
+ , double orig_time_available
+) {
+ //Set stats
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = timeAvailable < 0;
+ const double time_remain = float_div(timeAvailable, orig_time_available);
+ tmpStats.numClSubsumed += cache_based_data.get_cl_subsumed();
+ tmpStats.numLitsRem += cache_based_data.get_lits_rem();
+ tmpStats.cpu_time = time_used;
+ if (red) {
+ runStats.redCacheBased += tmpStats;
+ } else {
+ runStats.irredCacheBased += tmpStats;
+ }
+ if (solver->conf.verbosity >= 2) {
+ if (solver->conf.verbosity >= 10) {
+ cout << "red:" << red << " alsostrenghten:" << alsoStrengthen << endl;
+ }
+ cache_based_data.print();
+
+ cout << "c [distill-with-bin-ext]"
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ std::stringstream ss;
+ ss << "shorten"
+ << (alsoStrengthen ? " and str" : "")
+ << (red ? " red" : " irred")
+ << " cls with cache and stamp"
+ ;
+ solver->sqlStats->time_passed(
+ solver
+ , ss.str()
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+}
+
+void DistillerLongWithImpl::CacheBasedData::clear()
+{
+ CacheBasedData tmp;
+ *this = tmp;
+}
+
+size_t DistillerLongWithImpl::CacheBasedData::get_cl_subsumed() const
+{
+ return subBin + subsumedStamp + subCache;
+}
+
+size_t DistillerLongWithImpl::CacheBasedData::get_lits_rem() const
+{
+ return remLitBin + remLitCache
+ + remLitTimeStampTotal + remLitTimeStampTotalInv;
+}
+
+void DistillerLongWithImpl::CacheBasedData::print() const
+{
+ cout
+ << "c [distill-with-bin-ext] stamp-based"
+ << " lit-rem: " << remLitTimeStampTotal
+ << " inv-lit-rem: " << remLitTimeStampTotalInv
+ << " stamp-cl-rem: " << subsumedStamp
+ << endl;
+
+ cout
+ << "c [distill-with-bin-ext] bin-based"
+ << " lit-rem: " << remLitBin
+ << " cl-sub: " << subBin
+ << endl;
+
+ cout
+ << "c [distill-with-bin-ext] cache-based"
+ << " lit-rem: " << remLitCache
+ << " cl-sub: " << subCache
+ << endl;
+}
+
+DistillerLongWithImpl::Stats& DistillerLongWithImpl::Stats::operator+=(const Stats& other)
+{
+ irredCacheBased += other.irredCacheBased;
+ redCacheBased += other.redCacheBased;
+ return *this;
+}
+
+void DistillerLongWithImpl::Stats::print_short(const Solver* _solver) const
+{
+ irredCacheBased.print_short("irred", _solver);
+ redCacheBased.print_short("red", _solver);
+}
+
+void DistillerLongWithImpl::Stats::print() const
+{
+ cout << "c -------- STRENGTHEN STATS --------" << endl;
+ cout << "c --> cache-based on irred cls" << endl;
+ irredCacheBased.print();
+
+ cout << "c --> cache-based on red cls" << endl;
+ redCacheBased.print();
+ cout << "c -------- STRENGTHEN STATS END --------" << endl;
+}
+
+
+void DistillerLongWithImpl::Stats::CacheBased::print_short(const string type, const Solver* _solver) const
+{
+ cout << "c [distill] cache-based "
+ << std::setw(5) << type
+ << "-- "
+ << " cl tried " << std::setw(8) << triedCls
+ << " cl-sh " << std::setw(5) << shrinked
+ << " cl-rem " << std::setw(4) << numClSubsumed
+ << " lit-rem " << std::setw(6) << numLitsRem
+ << _solver->conf.print_times(cpu_time, ranOutOfTime)
+ << endl;
+}
+
+void DistillerLongWithImpl::Stats::CacheBased::print() const
+{
+ print_stats_line("c time"
+ , cpu_time
+ , ratio_for_stat(cpu_time, numCalled)
+ , "s/call"
+ );
+
+ print_stats_line("c shrinked/tried/total"
+ , shrinked
+ , triedCls
+ , totalCls
+ );
+
+ print_stats_line("c subsumed/tried/total"
+ , numClSubsumed
+ , triedCls
+ , totalCls
+ );
+
+ print_stats_line("c lits-rem"
+ , numLitsRem
+ , stats_line_percent(numLitsRem, totalLits)
+ , "% of lits tried"
+ );
+
+ print_stats_line("c called "
+ , numCalled
+ , stats_line_percent(ranOutOfTime, numCalled)
+ , "% ran out of time"
+ );
+
+}
+
+double DistillerLongWithImpl::mem_used() const
+{
+ double mem = sizeof(DistillerLongWithImpl);
+ mem+= lits.size()*sizeof(Lit);
+ mem +=lits2.size()*sizeof(Lit);
+
+ return mem;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h b/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
new file mode 100644
index 000000000..a2c7689fb
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/distillerlongwithimpl.h
@@ -0,0 +1,193 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __DISTILLERWITHBIN_H__
+#define __DISTILLERWITHBIN_H__
+
+#include <vector>
+#include "clause.h"
+#include "constants.h"
+#include "solvertypes.h"
+#include "cloffset.h"
+#include "watcharray.h"
+
+namespace CMSat {
+
+using std::vector;
+
+class Solver;
+class Clause;
+
+class DistillerLongWithImpl {
+ public:
+ DistillerLongWithImpl(Solver* solver);
+ bool distill_long_with_implicit(bool alsoStrengthen);
+
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ Stats& operator+=(const Stats& other);
+ void print_short(const Solver* solver) const;
+ void print() const;
+
+ struct CacheBased
+ {
+ double cpu_time = 0.0;
+ uint64_t numLitsRem = 0;
+ uint64_t numClSubsumed = 0;
+ uint64_t triedCls = 0;
+ uint64_t shrinked = 0;
+ uint64_t totalCls = 0;
+ uint64_t totalLits = 0;
+ uint64_t ranOutOfTime = 0;
+ uint64_t numCalled = 0;
+
+ void clear()
+ {
+ CacheBased tmp;
+ *this = tmp;
+ }
+
+ void print_short(const string type, const Solver* solver) const;
+ void print() const;
+
+ CacheBased& operator+=(const CacheBased& other)
+ {
+ cpu_time += other.cpu_time;
+ numLitsRem += other.numLitsRem;
+ numClSubsumed += other.numClSubsumed;
+ triedCls += other.triedCls;
+ shrinked += other.shrinked;
+ totalCls += other.totalCls;
+ totalLits += other.totalLits;
+ ranOutOfTime += other.ranOutOfTime;
+ numCalled += other.numCalled;
+
+ return *this;
+ }
+ };
+
+ CacheBased irredCacheBased;
+ CacheBased redCacheBased;
+ };
+
+ const Stats& get_stats() const;
+ double mem_used() const;
+
+ private:
+
+ bool remove_or_shrink_clause(Clause& cl, ClOffset& offset);
+ void strsub_with_cache_and_watch(
+ bool alsoStrengthen
+ , Clause& cl
+ );
+ void dump_stats_for_shorten_all_cl_with_cache_stamp(
+ bool red
+ , bool alsoStrengthen
+ , double myTime
+ , double orig_time_available
+ );
+
+ //Cache-based data
+ struct CacheBasedData
+ {
+ size_t remLitTimeStampTotal = 0;
+ size_t remLitTimeStampTotalInv = 0;
+ size_t subsumedStamp = 0;
+ size_t remLitCache = 0;
+ size_t remLitBin = 0;
+ size_t subBin = 0;
+ size_t subCache = 0;
+ void clear();
+ size_t get_cl_subsumed() const;
+ size_t get_lits_rem() const;
+ void print() const;
+ };
+ CacheBasedData cache_based_data;
+ bool isSubsumed;
+ size_t thisRemLitCache;
+ size_t thisremLitBin;
+ void str_and_sub_using_watch(
+ Clause& cl
+ , const Lit lit
+ , const bool alsoStrengthen
+ );
+ void strengthen_clause_with_watch(
+ const Lit lit
+ , const Watched* wit
+ );
+ bool subsume_clause_with_watch(
+ const Lit lit
+ , Watched* wit
+ , const Clause& cl
+ );
+ bool str_and_sub_clause_with_cache(const Lit lit, const bool alsoStrengthen);
+ void try_subsuming_by_stamping(const bool red);
+ void remove_lits_through_stamping_red();
+ void remove_lits_through_stamping_irred();
+ Stats::CacheBased tmpStats;
+ //bool needToFinish;
+ bool sub_str_cl_with_cache_watch_stamp(
+ ClOffset& offset
+ , bool red
+ , const bool alsoStrengthen
+ );
+ void randomise_order_of_clauses(vector<ClOffset>& clauses);
+ uint64_t calc_time_available(
+ const bool alsoStrengthen
+ , const bool red
+ ) const;
+
+ bool shorten_all_cl_with_cache_watch_stamp(
+ vector<ClOffset>& clauses
+ , bool red
+ , bool alsoStrengthen
+ );
+ int64_t timeAvailable;
+
+ //Working set
+ Solver* solver;
+ vector<Lit> lits;
+ vector<Lit> lits2;
+ vector<uint16_t>& seen;
+ vector<uint8_t>& seen2;
+
+ //Global status
+ Stats runStats;
+ Stats globalStats;
+ size_t numCalls = 0;
+
+};
+
+inline const DistillerLongWithImpl::Stats& DistillerLongWithImpl::get_stats() const
+{
+ return globalStats;
+}
+
+} //end namespace
+
+#endif //__DISTILLERWITHBIN_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/drat.h b/cryptominisat5/cryptominisat-5.6.3/src/drat.h
new file mode 100644
index 000000000..312e3814d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/drat.h
@@ -0,0 +1,352 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __DRAT_H__
+#define __DRAT_H__
+
+#include "clause.h"
+#include <iostream>
+
+namespace CMSat {
+
+enum DratFlag{fin, deldelay, del, findelay, add};
+
+struct Drat
+{
+ Drat()
+ {
+ }
+
+ virtual ~Drat()
+ {
+ }
+
+ virtual bool enabled()
+ {
+ return false;
+ }
+
+ virtual void forget_delay()
+ {
+ }
+
+ virtual bool get_conf_id() {
+ return false;
+ }
+
+ virtual bool something_delayed()
+ {
+ return false;
+ }
+
+ #ifdef STATS_NEEDED
+ virtual Drat& operator<<(const uint64_t)
+ {
+ return *this;
+ }
+ #endif
+
+ virtual Drat& operator<<(const Lit)
+ {
+ return *this;
+ }
+
+ virtual Drat& operator<<(const Clause&)
+ {
+ return *this;
+ }
+
+ virtual Drat& operator<<(const vector<Lit>&)
+ {
+ return *this;
+ }
+
+ virtual Drat& operator<<(const DratFlag)
+ {
+ return *this;
+ }
+
+ virtual void setFile(std::ostream*)
+ {
+ }
+
+ virtual void flush()
+ {
+ }
+
+ int buf_len;
+ unsigned char* drup_buf = 0;
+ unsigned char* buf_ptr;
+};
+
+template<bool add_ID>
+struct DratFile: public Drat
+{
+ DratFile()
+ {
+ drup_buf = new unsigned char[2 * 1024 * 1024];
+ buf_ptr = drup_buf;
+ buf_len = 0;
+ memset(drup_buf, 0, 2 * 1024 * 1024);
+
+ del_buf = new unsigned char[2 * 1024 * 1024];
+ del_ptr = del_buf;
+ del_len = 0;
+ }
+
+ virtual ~DratFile()
+ {
+ delete[] drup_buf;
+ delete[] del_buf;
+ }
+
+ #ifdef STATS_NEEDED
+ virtual Drat& operator<<(const uint64_t clauseID_or_sumConflicts) override
+ {
+ if (!id_set) {
+ ID = clauseID_or_sumConflicts;
+ id_set = true;
+ } else {
+ sumConflicts = clauseID_or_sumConflicts;
+ }
+ return *this;
+ }
+ #endif
+
+ void byteDRUPa(const Lit l)
+ {
+ unsigned int u = 2 * (l.var() + 1) + l.sign();
+ do {
+ *buf_ptr++ = (u & 0x7f) | 0x80;
+ buf_len++;
+ u = u >> 7;
+ } while (u);
+
+ // End marker of this unsigned number
+ *(buf_ptr - 1) &= 0x7f;
+ }
+
+ void byteDRUPaID(const uint64_t id)
+ {
+ for(unsigned i = 0; i < 6; i++) {
+ *buf_ptr++ = (id>>(8*i))&0xff;
+ buf_len++;
+ }
+ }
+
+ void byteDRUPd(const Lit l)
+ {
+ unsigned int u = 2 * (l.var() + 1) + l.sign();
+ do {
+ *del_ptr++ = (u & 0x7f) | 0x80;
+ del_len++;
+ u = u >> 7;
+ } while (u);
+
+ // End marker of this unsigned number
+ *(del_ptr - 1) &= 0x7f;
+ }
+
+ void flush() override
+ {
+ binDRUP_flush();
+ }
+
+ void binDRUP_flush() {
+ drup_file->write((const char*)drup_buf, buf_len);
+ buf_ptr = drup_buf;
+ buf_len = 0;
+ }
+
+ void setFile(std::ostream* _file) override
+ {
+ drup_file = _file;
+ }
+
+ bool get_conf_id() override {
+ return add_ID;
+ }
+
+ bool something_delayed() override
+ {
+ return delete_filled;
+ }
+
+ void forget_delay() override
+ {
+ del_ptr = del_buf;
+ del_len = 0;
+ must_delete_next = false;
+ delete_filled = false;
+ }
+
+ bool enabled() override
+ {
+ return true;
+ }
+
+ int del_len = 0;
+ unsigned char* del_buf;
+ unsigned char* del_ptr;
+
+ bool delete_filled = false;
+ bool must_delete_next = false;
+
+ Drat& operator<<(const Lit lit) override
+ {
+ if (must_delete_next) {
+ byteDRUPd(lit);
+ } else {
+ byteDRUPa(lit);
+ }
+
+ return *this;
+ }
+
+ Drat& operator<<(const Clause& cl) override
+ {
+ if (must_delete_next) {
+ for(const Lit l: cl)
+ byteDRUPd(l);
+ } else {
+ for(const Lit l: cl)
+ byteDRUPa(l);
+
+ #ifdef STATS_NEEDED
+ id_set = true;
+ if (is_add && add_ID) {
+ ID = cl.stats.ID;
+
+ // actually... for on-the-fly subsumed irred clauses can have an ID.
+ //assert(!(ID != 0 && !cl.red()));
+
+ //redundant clauses MUST have a valid ID
+ assert(!(ID == 0 && cl.red()));
+ }
+ #endif
+ }
+
+ return *this;
+ }
+
+ Drat& operator<<(const vector<Lit>& cl) override
+ {
+ if (must_delete_next) {
+ for(const Lit l: cl)
+ byteDRUPd(l);
+ } else {
+ for(const Lit l: cl)
+ byteDRUPa(l);
+ }
+
+ return *this;
+ }
+
+ Drat& operator<<(const DratFlag flag) override
+ {
+ switch (flag)
+ {
+ case DratFlag::fin:
+ if (must_delete_next) {
+ *del_ptr++ = 0;
+ del_len++;
+ delete_filled = true;
+ } else {
+ *buf_ptr++ = 0;
+ buf_len++;
+ #ifdef STATS_NEEDED
+ if (is_add && add_ID) {
+ byteDRUPaID(ID);
+ ID = 0;
+ id_set = false;
+
+ assert(sumConflicts != std::numeric_limits<int64_t>::max());
+ byteDRUPaID(sumConflicts);
+ sumConflicts = std::numeric_limits<int64_t>::max();
+ }
+ #endif
+ if (buf_len > 1048576) {
+ binDRUP_flush();
+ }
+ }
+ must_delete_next = false;
+ break;
+
+ case DratFlag::deldelay:
+ assert(!delete_filled);
+ forget_delay();
+ *del_ptr++ = 'd';
+ del_len++;
+ delete_filled = false;
+ must_delete_next = true;
+ break;
+
+ case DratFlag::findelay:
+ assert(delete_filled);
+ memcpy(buf_ptr, del_buf, del_len);
+ buf_len += del_len;
+ buf_ptr += del_len;
+ if (buf_len > 1048576) {
+ binDRUP_flush();
+ }
+
+ forget_delay();
+ break;
+
+ case DratFlag::add:
+ #ifdef STATS_NEEDED
+ is_add = true;
+ ID = 0;
+ id_set = false;
+ sumConflicts = std::numeric_limits<int64_t>::max();
+ #endif
+ *buf_ptr++ = 'a';
+ buf_len++;
+ break;
+
+ case DratFlag::del:
+ #ifdef STATS_NEEDED
+ is_add = false;
+ ID = 0;
+ id_set = false;
+ #endif
+ forget_delay();
+ *buf_ptr++ = 'd';
+ buf_len++;
+ break;
+ }
+
+ return *this;
+ }
+
+ std::ostream* drup_file = NULL;
+ #ifdef STATS_NEEDED
+ int64_t ID = 0;
+ int64_t sumConflicts = std::numeric_limits<int64_t>::max();
+ bool is_add = true;
+ bool id_set = false;
+ #endif
+};
+
+}
+
+#endif //__DRAT_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp b/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
new file mode 100644
index 000000000..03dba2676
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/features_calc.cpp
@@ -0,0 +1,394 @@
+/******************************************
+Copyright (c) 2016, Yuri Malitsky and Horst Samulowitz
+Copyright (c) 2018, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include <vector>
+#include <cmath>
+
+#include "solver.h"
+#include "features_calc.h"
+
+using std::vector;
+using namespace CMSat;
+
+template<class Function, class Function2>
+void SolveFeaturesCalc::for_one_clause(
+ const Watched& cl
+ , const Lit lit
+ , Function func_each_cl
+ , Function2 func_each_lit
+) const {
+ unsigned neg_vars = 0;
+ unsigned pos_vars = 0;
+ unsigned size = 0;
+
+ switch (cl.getType()) {
+ case CMSat::watch_binary_t: {
+ if (cl.red()) {
+ //only irred cls
+ break;
+ }
+ if (lit > cl.lit2()) {
+ //only count once
+ break;
+ }
+
+ pos_vars += !lit.sign();
+ pos_vars += !cl.lit2().sign();
+ size = 2;
+ neg_vars = size - pos_vars;
+ func_each_cl(size, pos_vars, neg_vars);
+ func_each_lit(lit, size, pos_vars, neg_vars);
+ func_each_lit(cl.lit2(), size, pos_vars, neg_vars);
+ break;
+ }
+
+ case CMSat::watch_clause_t: {
+ const Clause& clause = *solver->cl_alloc.ptr(cl.get_offset());
+ if (clause.red()) {
+ //only irred cls
+ break;
+ }
+ if (clause[0] < clause[1]) {
+ //only count once
+ break;
+ }
+
+ for (const Lit cl_lit : clause) {
+ pos_vars += !cl_lit.sign();
+ }
+ size = clause.size();
+ neg_vars = size - pos_vars;
+ func_each_cl(size, pos_vars, neg_vars);
+ for (const Lit cl_lit : clause) {
+ func_each_lit(cl_lit, size, pos_vars, neg_vars);
+ }
+ break;
+ }
+
+ case CMSat::watch_idx_t: {
+ // This should never be here
+ assert(false);
+ exit(-1);
+ break;
+ }
+ }
+}
+
+template<class Function, class Function2>
+void SolveFeaturesCalc::for_all_clauses(Function func_each_cl, Function2 func_each_lit) const
+{
+ for (size_t i = 0; i < solver->nVars() * 2; i++) {
+ Lit lit = Lit::toLit(i);
+ for (const Watched & w : solver->watches[lit]) {
+ for_one_clause(w, lit, func_each_cl, func_each_lit);
+ }
+ }
+}
+
+void SolveFeaturesCalc::fill_vars_cls()
+{
+ feat.numVars = solver->get_num_free_vars();
+ feat.numClauses = solver->longIrredCls.size() + solver->binTri.irredBins;
+ myVars.resize(solver->nVars());
+
+ auto func_each_cl = [&](unsigned /*size*/, unsigned pos_vars, unsigned /*neg_vars*/) -> bool {
+ if (pos_vars <= 1 ) {
+ feat.horn += 1;
+ return true;
+ }
+ return false;
+ };
+ auto func_each_lit = [&](Lit lit, unsigned /*size*/, unsigned pos_vars, unsigned /*neg_vars*/) -> void {
+ if (pos_vars <= 1 ) {
+ myVars[lit.var()].horn++;
+ }
+
+ if (!lit.sign()) {
+ myVars[lit.var()].numPos++;
+ }
+ myVars[lit.var()].size++;
+ };
+ for_all_clauses(func_each_cl, func_each_lit);
+}
+
+void SolveFeaturesCalc::calculate_clause_stats()
+{
+ auto empty_func = [](const Lit, unsigned /*size*/, unsigned /*pos_vars*/, unsigned /*neg_vars*/) -> void {};
+ auto func_each_cl = [&](unsigned size, unsigned pos_vars, unsigned /*neg_vars*/) -> void {
+ if (size == 0 ) {
+ return;
+ }
+
+ double _size = (double)size / (double)feat.numVars;
+ feat.vcg_cls_min = std::min(feat.vcg_cls_min, _size);
+ feat.vcg_cls_max = std::max(feat.vcg_cls_max, _size);
+ feat.vcg_cls_mean += _size;
+
+ double _pnr = 0.5 + ((2.0 * (double)pos_vars - (double)size) / (2.0 * (double)size));
+ feat.pnr_cls_min = std::min(feat.pnr_cls_min, _pnr);
+ feat.pnr_cls_max = std::max(feat.pnr_cls_max, _pnr);
+ feat.pnr_cls_mean += _pnr;
+ };
+ for_all_clauses(func_each_cl, empty_func);
+
+ feat.vcg_cls_mean /= (double)feat.numClauses;
+ feat.pnr_cls_mean /= (double)feat.numClauses;
+ feat.horn /= (double)feat.numClauses;
+ feat.binary = float_div(solver->binTri.irredBins, feat.numClauses);
+
+ feat.vcg_cls_spread = feat.vcg_cls_max - feat.vcg_cls_min;
+ feat.pnr_cls_spread = feat.pnr_cls_max - feat.pnr_cls_min;
+}
+
+void SolveFeaturesCalc::calculate_variable_stats()
+{
+ if (feat.numVars == 0)
+ return;
+
+ for ( int vv = 0; vv < (int)myVars.size(); vv++ ) {
+ if ( myVars[vv].size == 0 ) {
+ continue;
+ }
+
+ double _size = myVars[vv].size / (double)feat.numClauses;
+ feat.vcg_var_min = std::min(feat.vcg_var_min, _size);
+ feat.vcg_var_max = std::max(feat.vcg_var_max, _size);
+ feat.vcg_var_mean += _size;
+
+ double _pnr = 0.5 + ((2.0 * myVars[vv].numPos - myVars[vv].size)
+ / (2.0 * myVars[vv].size));
+ feat.pnr_var_min = std::min(feat.pnr_var_min, _pnr);
+ feat.pnr_var_max = std::max(feat.pnr_var_max, _pnr);
+ feat.pnr_var_mean += _pnr;
+
+ double _horn = myVars[vv].horn / (double)feat.numClauses;
+ feat.horn_min = std::min(feat.horn_min, _horn);
+ feat.horn_max = std::max(feat.horn_max, _horn);
+ feat.horn_mean += _horn;
+ }
+
+ if (feat.vcg_var_mean > 0) {
+ feat.vcg_var_mean /= (double)feat.numVars;
+ }
+ if (feat.pnr_var_mean > 0) {
+ feat.pnr_var_mean /= (double)feat.numVars;
+ }
+ if (feat.horn_mean > 0) {
+ feat.horn_mean /= (double)feat.numVars;
+ }
+
+ feat.vcg_var_spread = feat.vcg_var_max - feat.vcg_var_min;
+ feat.pnr_var_spread = feat.pnr_var_max - feat.pnr_var_min;
+ feat.horn_spread = feat.horn_max - feat.horn_min;
+}
+
+void SolveFeaturesCalc::calculate_extra_clause_stats()
+{
+ auto empty_func = [](const Lit, unsigned /*size*/, unsigned /*pos_vars*/, unsigned /*neg_vars*/) -> void {};
+ auto each_clause = [&](unsigned size, unsigned pos_vars, unsigned /*neg_vars*/) -> void {
+ if ( size == 0 ) {
+ return;
+ }
+
+ double _size = (double)size / (double)feat.numVars;
+ feat.vcg_cls_std += (feat.vcg_cls_mean - _size) * (feat.vcg_cls_mean - _size);
+
+ double _pnr = 0.5 + ((2.0 * (double)pos_vars - (double)size) / (2.0 * (double)size));
+ feat.pnr_cls_std += (feat.pnr_cls_mean - _pnr) * (feat.pnr_cls_mean - _pnr);
+ };
+ for_all_clauses(each_clause, empty_func);
+
+ if ( feat.vcg_cls_std > feat.eps && feat.vcg_cls_mean > feat.eps ) {
+ feat.vcg_cls_std = std::sqrt(feat.vcg_cls_std / (double)feat.numClauses) / feat.vcg_cls_mean;
+ } else {
+ feat.vcg_cls_std = 0;
+ }
+ if ( feat.pnr_cls_std > feat.eps && feat.pnr_cls_mean > feat.eps ) {
+ feat.pnr_cls_std = std::sqrt(feat.pnr_cls_std / (double)feat.numClauses) / feat.pnr_cls_mean;
+ } else {
+ feat.pnr_cls_std = 0;
+ }
+}
+
+void SolveFeaturesCalc::calculate_extra_var_stats()
+{
+ if (feat.numVars == 0)
+ return;
+
+ for ( int vv = 0; vv < (int)myVars.size(); vv++ ) {
+ if ( myVars[vv].size == 0 ) {
+ continue;
+ }
+
+ double _size = myVars[vv].size / (double)feat.numClauses;
+ feat.vcg_var_std += (feat.vcg_var_mean - _size) * (feat.vcg_var_mean - _size);
+
+ double _pnr = 0.5 + ((2.0 * myVars[vv].numPos - myVars[vv].size) / (2.0 * myVars[vv].size));
+ feat.pnr_var_std += (feat.pnr_var_mean - _pnr) * (feat.pnr_var_mean - _pnr);
+
+ double _horn = myVars[vv].horn / (double)feat.numClauses;
+ feat.horn_std += (feat.horn_mean - _horn) * (feat.horn_mean - _horn);
+ }
+ if ( feat.vcg_var_std > feat.eps && feat.vcg_var_mean > feat.eps ) {
+ feat.vcg_var_std = std::sqrt(feat.vcg_var_std / (double)feat.numVars) / feat.vcg_var_mean;
+ } else {
+ feat.vcg_var_std = 0;
+ }
+
+ if ( feat.pnr_var_std > feat.eps && feat.pnr_var_mean > feat.eps
+ && feat.pnr_var_mean != 0
+ ) {
+ feat.pnr_var_std = std::sqrt(feat.pnr_var_std / (double)feat.numVars) / feat.pnr_var_mean;
+ } else {
+ feat.pnr_var_std = 0;
+ }
+
+ if ( feat.horn_std / (double)feat.numVars > feat.eps && feat.horn_mean > feat.eps
+ && feat.horn_mean != 0
+ ) {
+ feat.horn_std = std::sqrt(feat.horn_std / (double)feat.numVars) / feat.horn_mean;
+ } else {
+ feat.horn_std = 0;
+ }
+}
+
+void SolveFeaturesCalc::calculate_cl_distributions(
+ const vector<ClOffset>& clauses
+ , struct SolveFeatures::Distrib& distrib_data
+) {
+ if (clauses.empty()) {
+ return;
+ }
+
+ double glue_mean = 0;
+ double glue_var = 0;
+
+ double size_mean = 0;
+ double size_var = 0;
+
+ double activity_mean = 0;
+ double activity_var = 0;
+
+ //Calculate means
+ double cla_inc = solver->get_cla_inc();
+ for(ClOffset off: clauses)
+ {
+ const Clause& cl = *solver->cl_alloc.ptr(off);
+ size_mean += cl.size();
+ glue_mean += cl.stats.glue;
+ if (cl.red()) {
+ activity_mean += (double)cl.stats.activity/cla_inc;
+ }
+ }
+ size_mean /= clauses.size();
+ glue_mean /= clauses.size();
+ activity_mean /= clauses.size();
+
+ //Calculate variances
+ for(ClOffset off: clauses)
+ {
+ const Clause& cl = *solver->cl_alloc.ptr(off);
+ size_var += std::pow(size_mean-cl.size(), 2);
+ glue_var += std::pow(glue_mean-cl.stats.glue, 2);
+ activity_var += std::pow(activity_mean-(double)cl.stats.activity/cla_inc, 2);
+ }
+ size_var /= clauses.size();
+ glue_var /= clauses.size();
+ activity_var /= clauses.size();
+
+ //Assign calculated values
+ distrib_data.glue_distr_mean = glue_mean;
+ distrib_data.glue_distr_var = glue_var;
+ distrib_data.size_distr_mean = size_mean;
+ distrib_data.size_distr_var = size_var;
+ distrib_data.activity_distr_mean = activity_mean;
+ distrib_data.activity_distr_var = activity_var;
+}
+
+void SolveFeaturesCalc::normalise_values()
+{
+ if (feat.vcg_var_min == std::numeric_limits<double>::max())
+ feat.vcg_var_min = -1;
+ if (feat.vcg_var_max == std::numeric_limits<double>::min())
+ feat.vcg_var_max = -1;
+
+ if (feat.vcg_cls_min == std::numeric_limits<double>::max())
+ feat.vcg_cls_min = -1;
+ if (feat.vcg_cls_max == std::numeric_limits<double>::min())
+ feat.vcg_cls_max = -1;
+
+ if (feat.pnr_var_min == std::numeric_limits<double>::max())
+ feat.pnr_var_min = -1;
+ if (feat.pnr_var_max == std::numeric_limits<double>::min())
+ feat.pnr_var_max = -1;
+
+ if (feat.horn_min == std::numeric_limits<double>::max())
+ feat.horn_min = -1;
+ if (feat.horn_max == std::numeric_limits<double>::min())
+ feat.horn_max = -1;
+
+ if (feat.pnr_cls_min == std::numeric_limits<double>::max())
+ feat.pnr_cls_min = -1;
+ if (feat.pnr_cls_max == std::numeric_limits<double>::min())
+ feat.pnr_cls_max = -1;
+}
+
+SolveFeatures SolveFeaturesCalc::extract()
+{
+ double start_time = cpuTime();
+ fill_vars_cls();
+
+ feat.numVars = 0;
+ for ( int vv = 0; vv < (int)myVars.size(); vv++ ) {
+ if ( myVars[vv].size > 0 ) {
+ feat.numVars++;
+ }
+ }
+ if (feat.numVars > 0) {
+ feat.var_cl_ratio = (double)feat.numVars/ (double)feat.numClauses;
+ }
+
+ if (feat.numClauses > 0 && feat.numVars > 0) {
+ calculate_clause_stats();
+ calculate_variable_stats();
+
+ calculate_extra_clause_stats();
+ calculate_extra_var_stats();
+
+ if (!solver->longRedCls[0].empty()) {
+ calculate_cl_distributions(solver->longRedCls[0], feat.red_cl_distrib);
+ }
+ if (!solver->longIrredCls.empty()) {
+ calculate_cl_distributions(solver->longIrredCls, feat.irred_cl_distrib);
+ }
+ }
+ normalise_values();
+
+ if (solver->conf.verbosity > 5) {
+ cout << "c [features] extracted"
+ << solver->conf.print_times(cpuTime() - start_time)
+ << endl;
+ }
+
+ return feat;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h b/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
new file mode 100644
index 000000000..87e38e0ed
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/features_calc.h
@@ -0,0 +1,82 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __FEATURES_FAST_H__
+#define __FEATURES_FAST_H__
+
+#include <vector>
+#include <limits>
+#include <utility>
+#include "solvefeatures.h"
+#include "cloffset.h"
+#include "watched.h"
+using std::vector;
+using std::pair;
+using std::make_pair;
+
+namespace CMSat {
+
+class Solver;
+
+struct SolveFeaturesCalc {
+public:
+ SolveFeaturesCalc(const Solver* _solver) :
+ solver(_solver) {
+ }
+ SolveFeatures extract();
+
+private:
+ void fill_vars_cls();
+ void calculate_clause_stats();
+ void calculate_variable_stats();
+ void calculate_extra_var_stats();
+ void calculate_extra_clause_stats();
+ void normalise_values();
+ void calculate_cl_distributions(
+ const vector<ClOffset>& clauses
+ , struct SolveFeatures::Distrib& distrib_data
+ );
+
+
+ const Solver* solver;
+ template<class Function, class Function2>
+ void for_one_clause(
+ const Watched& cl
+ , const Lit lit
+ , Function func
+ , Function2 func_each_lit
+ ) const;
+ template<class Function, class Function2>
+ void for_all_clauses(Function for_each_clause, Function2 func_each_lit) const;
+ struct VARIABLE {
+ int numPos = 0;
+ int size = 0;
+ int horn = 0;
+ };
+
+ vector<VARIABLE> myVars;
+ SolveFeatures feat;
+};
+
+} //end namespace
+
+#endif //__FEATURES_FAST_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp b/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
new file mode 100644
index 000000000..255451aed
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.cpp
@@ -0,0 +1,752 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvefeatures.h"
+#include <iostream>
+using std::cout;
+using std::endl;
+
+namespace CMSat {
+
+double get_score0(const SolveFeatures& feat, const int verb);
+double get_score4(const SolveFeatures& feat, const int verb);
+double get_score6(const SolveFeatures& feat, const int verb);
+double get_score7(const SolveFeatures& feat, const int verb);
+double get_score12(const SolveFeatures& feat, const int verb);
+double get_score16(const SolveFeatures& feat, const int verb);
+double get_score17(const SolveFeatures& feat, const int verb);
+
+int get_reconf_from_features(const SolveFeatures& feat, const int verb)
+{
+ double best_score = 0.0;
+ int best_val = 0;
+ double score;
+
+
+ score = get_score0(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 0 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 0;
+ }
+
+
+ score = get_score4(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 4 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 4;
+ }
+
+
+ score = get_score6(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 6 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 6;
+ }
+
+
+ score = get_score7(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 7 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 7;
+ }
+
+
+ score = get_score12(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 12 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 12;
+ }
+
+
+ score = get_score16(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 16 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 16;
+ }
+
+
+ score = get_score17(feat, verb);
+ if (verb >= 2)
+ cout << "c Score for reconf 17 is " << score << endl;
+ if (best_score < score) {
+ best_score = score;
+ best_val = 17;
+ }
+
+
+ if (verb >= 2)
+ cout << "c Winning reconf is " << best_val << endl;
+ return best_val;
+}
+
+
+
+double get_score0(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 1.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.confl_per_restart < 330.10001))
+ {
+ total_plus += 0.615;
+ }
+ if ((feat.vcg_cls_min < 0.00000) &&
+ (feat.pnr_var_max > 0.60000) &&
+ (feat.pnr_cls_std > 3.10000) &&
+ (feat.confl_per_restart > 181.80000) &&
+ (feat.red_cl_distrib.glue_distr_var < 0.30000) &&
+ (feat.red_cl_distrib.activity_distr_var < 87161348000.00000))
+ {
+ total_neg += 0.920;
+ }
+ if ((feat.numClauses > 24521.00000) &&
+ (feat.trail_depth_delta_max < 135198.00000) &&
+ (feat.confl_per_restart > 330.10001))
+ {
+ total_neg += 0.952;
+ }
+ if ((feat.horn > 0.00000) &&
+ (feat.pnr_var_mean > 0.40000) &&
+ (feat.pnr_var_std > 0.50000) &&
+ (feat.confl_size_max > 108.00000) &&
+ (feat.trail_depth_delta_max < 208897.00000) &&
+ (feat.irred_cl_distrib.activity_distr_var < 595761410.00000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.30000))
+ {
+ total_neg += 0.952;
+ }
+ if ((feat.binary > 0.10000) &&
+ (feat.vcg_cls_std < 3.70000) &&
+ (feat.pnr_var_mean > 0.40000) &&
+ (feat.avg_confl_size > 15.30000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.irred_cl_distrib.activity_distr_var < 130750880.00000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.40000))
+ {
+ total_neg += 0.923;
+ }
+ if ((feat.vcg_cls_std < 0.40000) &&
+ (feat.confl_size_min > 1.00000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.30000))
+ {
+ total_neg += 0.800;
+ }
+ if ((feat.vcg_var_std < 1.30000) &&
+ (feat.pnr_cls_mean > 0.50000))
+ {
+ total_neg += 0.889;
+ }
+ if ((feat.numClauses > 3631149.00000) &&
+ (feat.branch_depth_min > 18.00000) &&
+ (feat.red_cl_distrib.glue_distr_var < 0.30000))
+ {
+ total_neg += 0.857;
+ }
+ if ((feat.pnr_var_mean > 0.30000) &&
+ (feat.confl_size_max > 4843.00000) &&
+ (feat.branch_depth_min > 18.00000))
+ {
+ total_neg += 0.857;
+ }
+ if ((feat.avg_confl_size < 15.30000))
+ {
+ total_plus += 0.718;
+ }
+ if ((feat.horn < 0.00000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.30000))
+ {
+ total_plus += 0.875;
+ }
+ // num_rules: 11
+ // rule_no: 11
+ // default is: +
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+double get_score4(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 1.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.confl_size_max > 101.00000))
+ {
+ total_plus += 0.581;
+ }
+ if ((feat.branch_depth_max < 133.00000))
+ {
+ total_neg += 0.651;
+ }
+ if ((feat.irred_cl_distrib.glue_distr_mean > 940.00000) &&
+ (feat.irred_cl_distrib.glue_distr_var > 22169.50000))
+ {
+ total_neg += 0.971;
+ }
+ if ((feat.vcg_var_max > 0.00000) &&
+ (feat.pnr_cls_mean < 0.60000) &&
+ (feat.confl_size_max > 101.00000) &&
+ (feat.confl_size_max < 303.00000))
+ {
+ total_plus += 0.947;
+ }
+ if ((feat.vcg_var_std < 0.30000) &&
+ (feat.confl_size_max > 101.00000) &&
+ (feat.decisions_per_conflict < 2.60000) &&
+ (feat.irred_cl_distrib.glue_distr_mean > 998.40002))
+ {
+ total_plus += 0.864;
+ }
+ if ((feat.numClauses > 252434.00000) &&
+ (feat.binary < 0.10000) &&
+ (feat.branch_depth_max > 408.00000) &&
+ (feat.avg_branch_depth_delta < 8.40000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.30000) &&
+ (feat.red_cl_distrib.glue_distr_var < 0.40000))
+ {
+ total_neg += 0.917;
+ }
+ if ((feat.branch_depth_max < 133.00000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.40000))
+ {
+ total_plus += 0.909;
+ }
+ if ((feat.confl_size_max < 572.00000) &&
+ (feat.irred_cl_distrib.glue_distr_var > 22169.50000))
+ {
+ total_neg += 0.962;
+ }
+ if ((feat.binary < 0.10000) &&
+ (feat.irred_cl_distrib.size_distr_var > 5.30000) &&
+ (feat.red_cl_distrib.glue_distr_var > 0.30000))
+ {
+ total_neg += 0.947;
+ }
+ if ((feat.binary > 0.20000) &&
+ (feat.vcg_var_std < 0.30000) &&
+ (feat.vcg_var_max < 0.00000) &&
+ (feat.confl_size_max > 101.00000) &&
+ (feat.decisions_per_conflict < 2.60000))
+ {
+ total_plus += 0.923;
+ }
+ if ((feat.vcg_var_max > 0.00000) &&
+ (feat.confl_size_max > 101.00000) &&
+ (feat.confl_glue_max < 34.00000))
+ {
+ total_plus += 0.889;
+ }
+ if ((feat.confl_size_max < 101.00000))
+ {
+ total_neg += 0.923;
+ }
+ // num_rules: 12
+ // rule_no: 12
+ // default is: +
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+double get_score6(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 1.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.vcg_cls_std < 8.30000))
+ {
+ total_plus += 0.576;
+ }
+ if ((feat.vcg_cls_std > 8.30000))
+ {
+ total_neg += 0.889;
+ }
+ if ((feat.pnr_var_mean > 0.40000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.avg_confl_glue < 16.20000) &&
+ (feat.avg_branch_depth_delta > 1.30000) &&
+ (feat.decisions_per_conflict < 2.90000))
+ {
+ total_neg += 0.917;
+ }
+ if ((feat.avg_confl_size < 17.60000) &&
+ (feat.decisions_per_conflict < 2.90000))
+ {
+ total_neg += 0.952;
+ }
+ if ((feat.pnr_cls_max > 0.50000) &&
+ (feat.decisions_per_conflict < 2.90000) &&
+ (feat.irred_cl_distrib.size_distr_mean > 5.80000) &&
+ (feat.red_cl_distrib.activity_distr_mean > 4804.10010))
+ {
+ total_neg += 0.950;
+ }
+ if ((feat.binary > 0.20000) &&
+ (feat.pnr_var_max > 0.90000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.avg_confl_glue < 16.20000) &&
+ (feat.decisions_per_conflict < 2.90000))
+ {
+ total_neg += 0.944;
+ }
+ if ((feat.decisions_per_conflict < 2.90000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 3.30000))
+ {
+ total_neg += 0.789;
+ }
+ if ((feat.pnr_cls_mean > 0.50000) &&
+ (feat.decisions_per_conflict > 2.90000) &&
+ (feat.irred_cl_distrib.size_distr_var > 4.90000))
+ {
+ total_neg += 0.875;
+ }
+ if ((feat.avg_trail_depth_delta < 74.00000))
+ {
+ total_neg += 0.643;
+ }
+ if ((feat.pnr_cls_mean < 0.50000) &&
+ (feat.avg_confl_size > 16.40000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.avg_confl_glue < 12.40000) &&
+ (feat.learnt_bins_per_confl < 0.00000) &&
+ (feat.decisions_per_conflict > 2.90000))
+ {
+ total_plus += 0.953;
+ }
+ if ((feat.avg_branch_depth > 1243.20000))
+ {
+ total_neg += 0.800;
+ }
+ if ((feat.vcg_var_spread < 0.00000) &&
+ (feat.confl_size_min > 1.00000) &&
+ (feat.branch_depth_max < 32.00000))
+ {
+ total_neg += 0.867;
+ }
+ if ((feat.avg_branch_depth_delta < 1.00000))
+ {
+ total_neg += 0.857;
+ }
+ if ((feat.numClauses > 17097.00000) &&
+ (feat.vcg_var_spread < 0.00000) &&
+ (feat.pnr_var_max < 0.90000) &&
+ (feat.pnr_cls_max > 0.50000))
+ {
+ total_neg += 0.857;
+ }
+ // num_rules: 14
+ // rule_no: 14
+ // default is: +
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+double get_score7(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 0.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.confl_glue_max > 41.00000))
+ {
+ total_neg += 0.755;
+ }
+ if ((feat.confl_glue_max < 41.00000))
+ {
+ total_neg += 0.943;
+ }
+ if ((feat.binary > 0.30000) &&
+ (feat.branch_depth_max < 316.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 6.90000) &&
+ (feat.red_cl_distrib.activity_distr_var > 4041287700.00000))
+ {
+ total_plus += 0.923;
+ }
+ if ((feat.vcg_cls_std < 10.60000) &&
+ (feat.irred_cl_distrib.glue_distr_mean < 945.70001))
+ {
+ total_plus += 0.917;
+ }
+ if ((feat.avg_confl_size > 49.50000) &&
+ (feat.branch_depth_min < 22.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 6.90000))
+ {
+ total_plus += 0.909;
+ }
+ if ((feat.binary < 0.30000) &&
+ (feat.vcg_var_std < 1.20000) &&
+ (feat.confl_size_max > 943.00000) &&
+ (feat.branch_depth_min > 2.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.60000))
+ {
+ total_plus += 0.889;
+ }
+ if ((feat.vcg_var_std < 1.20000) &&
+ (feat.confl_glue_max > 41.00000) &&
+ (feat.branch_depth_min < 22.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.60000) &&
+ (feat.irred_cl_distrib.size_distr_var > 2.60000))
+ {
+ total_plus += 0.800;
+ }
+ if ((feat.pnr_var_std > 0.50000) &&
+ (feat.confl_glue_max > 41.00000) &&
+ (feat.trail_depth_delta_min > 2.00000))
+ {
+ total_plus += 0.889;
+ }
+ if ((feat.pnr_var_mean > 0.50000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 6.90000) &&
+ (feat.irred_cl_distrib.size_distr_var > 13.70000))
+ {
+ total_plus += 0.857;
+ }
+ if ((feat.vcg_var_std > 1.20000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.avg_branch_depth > 124.60000) &&
+ (feat.branch_depth_min < 22.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.60000))
+ {
+ total_plus += 0.800;
+ }
+ if ((feat.avg_confl_size > 144.80000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 6.90000) &&
+ (feat.red_cl_distrib.activity_distr_var > 4041287700.00000))
+ {
+ total_plus += 0.857;
+ }
+ if ((feat.branch_depth_min < 2.00000))
+ {
+ total_neg += 0.947;
+ }
+ // num_rules: 12
+ // rule_no: 12
+ // default is: -
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+double get_score12(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 1.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.vcg_var_spread < 0.00000) &&
+ (feat.pnr_var_std < 1.40000) &&
+ (feat.avg_confl_size < 60.00000) &&
+ (feat.branch_depth_max < 628.00000) &&
+ (feat.trail_depth_delta_max < 6774.00000) &&
+ (feat.confl_per_restart < 266.20001))
+ {
+ total_neg += 0.923;
+ }
+ if ((feat.confl_per_restart > 194.00000))
+ {
+ total_plus += 0.490;
+ }
+ if ((feat.binary > 0.10000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.confl_size_max < 6371.00000) &&
+ (feat.trail_depth_delta_max > 6774.00000))
+ {
+ total_plus += 0.964;
+ }
+ if ((feat.pnr_var_std > 0.30000) &&
+ (feat.confl_size_max > 6371.00000) &&
+ (feat.avg_trail_depth_delta < 4679.60010) &&
+ (feat.irred_cl_distrib.glue_distr_var < 5139.60010))
+ {
+ total_neg += 0.938;
+ }
+ if ((feat.confl_size_min > 1.00000) &&
+ (feat.avg_confl_glue > 10.80000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 16.80000))
+ {
+ total_neg += 0.778;
+ }
+ if ((feat.binary > 0.20000) &&
+ (feat.trail_depth_delta_max < 6774.00000))
+ {
+ total_neg += 0.783;
+ }
+ if ((feat.branch_depth_max > 42.00000) &&
+ (feat.trail_depth_delta_max < 6774.00000) &&
+ (feat.confl_per_restart < 194.00000))
+ {
+ total_neg += 0.915;
+ }
+ if ((feat.vcg_var_spread > 0.00000) &&
+ (feat.irred_cl_distrib.size_distr_var > 2.30000))
+ {
+ total_plus += 0.800;
+ }
+ if ((feat.binary < 0.10000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 3.60000))
+ {
+ total_neg += 0.846;
+ }
+ if ((feat.numClauses > 54199.00000) &&
+ (feat.avg_confl_size > 26.80000) &&
+ (feat.trail_depth_delta_max < 6774.00000))
+ {
+ total_neg += 0.909;
+ }
+ if ((feat.pnr_var_std > 1.40000) &&
+ (feat.branch_depth_max < 42.00000))
+ {
+ total_plus += 0.833;
+ }
+ if ((feat.confl_size_min < 1.00000) &&
+ (feat.confl_size_max < 6371.00000) &&
+ (feat.trail_depth_delta_max > 6774.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean > 3.60000))
+ {
+ total_plus += 0.843;
+ }
+ if ((feat.pnr_var_std > 0.30000) &&
+ (feat.avg_trail_depth_delta > 4679.60010))
+ {
+ total_plus += 0.846;
+ }
+ // num_rules: 13
+ // rule_no: 13
+ // default is: +
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+double get_score16(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 0.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.avg_branch_depth > 18.60000))
+ {
+ total_neg += 0.625;
+ }
+ if ((feat.binary < 0.40000))
+ {
+ total_plus += 0.498;
+ }
+ if ((feat.vcg_var_std < 2.10000) &&
+ (feat.vcg_cls_std > 5.50000) &&
+ (feat.pnr_cls_std < 11.90000))
+ {
+ total_plus += 0.939;
+ }
+ if ((feat.horn > 0.10000) &&
+ (feat.vcg_var_std < 2.20000) &&
+ (feat.confl_size_min < 1.00000) &&
+ (feat.confl_size_max > 149.00000) &&
+ (feat.avg_branch_depth < 178.30000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.50000) &&
+ (feat.irred_cl_distrib.size_distr_var < 3.60000) &&
+ (feat.red_cl_distrib.glue_distr_var < 0.40000) &&
+ (feat.red_cl_distrib.size_distr_mean > 5.20000))
+ {
+ total_plus += 0.893;
+ }
+ if ((feat.vcg_var_std > 2.20000) &&
+ (feat.vcg_var_std < 3.30000) &&
+ (feat.avg_branch_depth > 18.60000) &&
+ (feat.avg_branch_depth < 181.89999) &&
+ (feat.confl_per_restart < 262.10001) &&
+ (feat.red_cl_distrib.glue_distr_var < 0.40000))
+ {
+ total_plus += 0.941;
+ }
+ if ((feat.numClauses < 7548140.00000) &&
+ (feat.trail_depth_delta_max > 167286.00000))
+ {
+ total_plus += 0.826;
+ }
+ if ((feat.vcg_var_std < 2.20000) &&
+ (feat.confl_size_max > 149.00000) &&
+ (feat.avg_branch_depth > 218.20000) &&
+ (feat.branch_depth_min < 101.00000) &&
+ (feat.red_cl_distrib.glue_distr_var < 0.40000))
+ {
+ total_plus += 0.889;
+ }
+ if ((feat.numClauses < 108335.00000) &&
+ (feat.vcg_var_max < 0.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean > 5.90000))
+ {
+ total_plus += 0.950;
+ }
+ // num_rules: 8
+ // rule_no: 8
+ // default is: -
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+double get_score17(const SolveFeatures& feat, const int verb)
+{
+ double default_val = 0.00;
+
+ double total_plus = 0.0;
+ double total_neg = 0.0;
+ if ((feat.confl_size_max > 115.00000))
+ {
+ total_neg += 0.579;
+ }
+ if ((feat.confl_size_max < 115.00000))
+ {
+ total_plus += 0.896;
+ }
+ if ((feat.vcg_cls_std < 5.50000) &&
+ (feat.branch_depth_min < 18.00000) &&
+ (feat.confl_per_restart > 169.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.50000) &&
+ (feat.red_cl_distrib.size_distr_var < 14.50000) &&
+ (feat.red_cl_distrib.activity_distr_var < 131731750000.00000))
+ {
+ total_plus += 0.811;
+ }
+ if ((feat.vcg_cls_std > 5.50000) &&
+ (feat.avg_confl_size > 45.90000))
+ {
+ total_plus += 0.909;
+ }
+ if ((feat.avg_branch_depth < 15.80000))
+ {
+ total_plus += 0.900;
+ }
+ if ((feat.avg_trail_depth_delta > 5287.70020) &&
+ (feat.irred_cl_distrib.size_distr_var < 2.10000))
+ {
+ total_plus += 0.889;
+ }
+ if ((feat.numClauses > 84464.00000) &&
+ (feat.pnr_var_mean > 0.50000) &&
+ (feat.irred_cl_distrib.size_distr_mean > 4.50000))
+ {
+ total_plus += 0.833;
+ }
+ if ((feat.red_cl_distrib.activity_distr_var > 131731750000.00000))
+ {
+ total_plus += 0.722;
+ }
+ if ((feat.horn > 0.60000) &&
+ (feat.pnr_var_max < 0.50000) &&
+ (feat.avg_branch_depth_delta < 2.00000))
+ {
+ total_plus += 0.909;
+ }
+ if ((feat.pnr_var_std > 0.50000) &&
+ (feat.branch_depth_min < 18.00000) &&
+ (feat.confl_per_restart > 169.00000) &&
+ (feat.confl_per_restart < 296.29999) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.50000) &&
+ (feat.red_cl_distrib.activity_distr_var < 131731750000.00000))
+ {
+ total_plus += 0.944;
+ }
+ if ((feat.pnr_var_std < 0.30000) &&
+ (feat.pnr_var_max > 0.50000) &&
+ (feat.branch_depth_min < 18.00000) &&
+ (feat.avg_trail_depth_delta < 5287.70020) &&
+ (feat.trail_depth_delta_min < 2.00000) &&
+ (feat.confl_per_restart < 296.29999) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.50000))
+ {
+ total_plus += 0.857;
+ }
+ if ((feat.trail_depth_delta_min > 2.00000) &&
+ (feat.irred_cl_distrib.size_distr_mean < 4.50000))
+ {
+ total_plus += 0.769;
+ }
+ // num_rules: 12
+ // rule_no: 12
+ // default is: -
+
+ if (total_plus == 0.0 && total_neg == 0.0) {
+ return default_val;
+ }
+ if (verb >= 2) {
+ //cout << "c plus: " << total_plus << " , neg: " << total_neg << endl;
+ }
+ return total_plus - total_neg;
+}
+
+
+} //end namespace
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h b/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h
new file mode 100644
index 000000000..5b231a87a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/features_to_reconf.h
@@ -0,0 +1,29 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvefeatures.h"
+
+namespace CMSat {
+
+int get_reconf_from_features(const SolveFeatures& feat, const int verb);
+
+} //end namespace
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/fuzz.cpp b/cryptominisat5/cryptominisat-5.6.3/src/fuzz.cpp
new file mode 100644
index 000000000..1ee3807cf
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/fuzz.cpp
@@ -0,0 +1,72 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#include <string.h>
+#include "cryptominisat5/cryptominisat.h"
+#include "dimacsparser.h"
+
+struct MyText {
+ const unsigned char* txt = 0;
+ size_t size = 0;
+ size_t at = 0;
+};
+
+typedef size_t(*fread_op_text)(void*, size_t, size_t, MyText&);
+
+using namespace CMSat;
+
+static size_t text_read(void* buf, size_t num, size_t count, MyText& f)
+{
+ if (f.size == f.at) {
+ return EOF;
+ }
+
+ size_t toread = num*count;
+ if (toread > f.size-f.at) {
+ toread = f.size-f.at;
+ }
+ memcpy(buf, f.txt + f.at, toread);
+ //cout << "read in" << toread << endl;
+ f.at += toread;
+
+ return toread;
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const unsigned char *data, size_t size) {
+ SATSolver S;
+ S.set_verbosity(0);
+ //solver->set_num_threads(num_threads);
+
+ DimacsParser<StreamBuffer<MyText, fread_op_text, text_read> > parser(&S, "", 0);
+ parser.max_var = 1000;
+ MyText t;
+ t.at = 0;
+ t.size = size;
+ t.txt = data;
+ if (!parser.parse_DIMACS(t)) {
+ return 0;
+ }
+ S.solve();
+ //cout << "Ret is sat: " << (ret == l_True) << endl;
+ return 0;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/gatefinder.cpp b/cryptominisat5/cryptominisat-5.6.3/src/gatefinder.cpp
new file mode 100644
index 000000000..a8512e540
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/gatefinder.cpp
@@ -0,0 +1,1123 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gatefinder.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "occsimplifier.h"
+#include "subsumestrengthen.h"
+#include "clauseallocator.h"
+#include <array>
+#include <utility>
+#include "sqlstats.h"
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+GateFinder::GateFinder(OccSimplifier *_simplifier, Solver *_solver) :
+ numDotPrinted(0)
+ , simplifier(_simplifier)
+ , solver(_solver)
+ , seen(_solver->seen)
+ , seen2(_solver->seen2)
+ , toClear(solver->toClear)
+{
+ sizeSortedOcc.resize(solver->conf.maxGateBasedClReduceSize+1);
+}
+
+bool GateFinder::doAll()
+{
+ runStats.clear();
+ orGates.clear();
+
+ assert(solver->watches.get_smudged_list().empty());
+ find_or_gates_and_update_stats();
+ if (!all_simplifications_with_gates())
+ goto end;
+
+ if (solver->conf.doPrintGateDot) {
+ print_graphviz_dot();
+ }
+
+end:
+ solver->clean_occur_from_idx_types_only_smudged();
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3) {
+ runStats.print(solver->nVars());
+ }
+ }
+ globalStats += runStats;
+
+ orGates.clear();
+ orGates.shrink_to_fit();
+ solver->sumSearchStats.num_gates_found_last = orGates.size();
+
+ return solver->okay();
+}
+
+void GateFinder::find_or_gates_and_update_stats()
+{
+ assert(solver->ok);
+
+ double myTime = cpuTime();
+ const int64_t orig_numMaxGateFinder =
+ solver->conf.gatefinder_time_limitM*100LL*1000LL
+ *solver->conf.global_timeout_multiplier;
+ numMaxGateFinder = orig_numMaxGateFinder;
+ simplifier->limit_to_decrease = &numMaxGateFinder;
+
+ find_or_gates();
+
+ for(const auto orgate: orGates) {
+ if (orgate.red) {
+ runStats.learntGatesSize += 2;
+ runStats.numRed++;
+ } else {
+ runStats.irredGatesSize += 2;
+ runStats.numIrred++;
+ }
+ }
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (numMaxGateFinder <= 0);
+ const double time_remain = float_div(numMaxGateFinder, orig_numMaxGateFinder);
+ runStats.findGateTime = time_used;
+ runStats.find_gate_timeout = time_out;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "gate find"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ if (solver->conf.verbosity) {
+ cout << "c [occ-gates] found"
+ << " irred:" << runStats.numIrred
+ << " avg-s: " << std::fixed << std::setprecision(1)
+ << float_div(runStats.irredGatesSize, runStats.numIrred)
+ << " red: " << runStats.numRed
+ /*<< " avg-s: " << std::fixed << std::setprecision(1)
+ << float_div(learntGatesSize, numRed)*/
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+}
+
+bool GateFinder::shorten_with_all_or_gates()
+{
+ const double myTime = cpuTime();
+ const int64_t orig_numMaxShortenWithGates =
+ solver->conf.shorten_with_gates_time_limitM*1000LL*1000LL
+ *solver->conf.global_timeout_multiplier;
+
+ numMaxShortenWithGates = orig_numMaxShortenWithGates;
+ simplifier->limit_to_decrease = &numMaxShortenWithGates;
+
+ //Go through each gate, see if we can do something with it
+ simplifier->cl_to_free_later.clear();
+ for (const OrGate& gate: orGates) {
+ if (numMaxShortenWithGates < 0
+ || solver->must_interrupt_asap()
+ ) {
+ break;
+ }
+
+ if (!shortenWithOrGate(gate))
+ break;
+ }
+ solver->clean_occur_from_removed_clauses();
+ simplifier->free_clauses_to_free();
+
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (numMaxShortenWithGates <= 0);
+ const double time_remain = float_div(numMaxShortenWithGates, orig_numMaxShortenWithGates);
+ runStats.orBasedTime = time_used;
+ runStats.or_based_timeout = time_out;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "gate shorten cl"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ if (solver->conf.verbosity) {
+ cout << "c [occ-gates] shorten"
+ << " cl: " << std::setw(5) << runStats.orGateUseful
+ << " l-rem: " << std::setw(6) << runStats.litsRem
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+
+ return solver->okay();
+}
+
+bool GateFinder::remove_clauses_with_all_or_gates()
+{
+ const int64_t orig_numMaxClRemWithGates =
+ solver->conf.remove_cl_with_gates_time_limitM*1000LL*1000LL
+ *solver->conf.global_timeout_multiplier;
+
+ numMaxClRemWithGates = orig_numMaxClRemWithGates;
+ simplifier->limit_to_decrease = &numMaxClRemWithGates;
+ const double myTime = cpuTime();
+
+ //Go through each gate, see if we can do something with it
+ for (const OrGate& gate: orGates) {
+ if (numMaxClRemWithGates < 0
+ || solver->must_interrupt_asap()
+ ) {
+ break;
+ }
+
+ if (!remove_clauses_using_and_gate(gate, true, false))
+ break;
+
+ if (!remove_clauses_using_and_gate_tri(gate, true, false))
+ break;
+ }
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (numMaxClRemWithGates <= 0);
+ const double time_remain = float_div(numMaxClRemWithGates, orig_numMaxClRemWithGates);
+ runStats.andBasedTime = time_used;
+ runStats.and_based_timeout = time_out;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "gate rem cl"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ if (solver->conf.verbosity) {
+ cout << "c [occ-gates] rem"
+ << " cl: " << runStats.andGateUseful
+ << " avg s: " << std::setprecision(1)
+ << float_div(runStats.clauseSizeRem, runStats.andGateUseful)
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+
+ return solver->okay();
+}
+
+bool GateFinder::all_simplifications_with_gates()
+{
+ assert(solver->ok);
+
+ //OR gate treatment
+ if (solver->conf.doShortenWithOrGates) {
+ if (!shorten_with_all_or_gates()) {
+ return false;
+ }
+ }
+
+ //AND gate treatment
+ if (solver->conf.doRemClWithAndGates) {
+ if (!remove_clauses_with_all_or_gates()) {
+ return false;
+ }
+ }
+
+ //EQ gate treatment
+ if (solver->conf.doFindEqLitsWithGates) {
+ const double myTime = cpuTime();
+ runStats.varReplaced += findEqOrGates();
+
+ const double time_used = cpuTime() - myTime;
+ runStats.varReplaceTime += time_used;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "gate eq-var"
+ , time_used
+ );
+ }
+
+ if (solver->conf.verbosity) {
+ cout << "c [occ-gates] eqlit"
+ << " v-rep: " << std::setw(3) << runStats.varReplaced
+ << solver->conf.print_times(time_used)
+ << endl;
+ }
+
+ if (!solver->ok)
+ return false;
+ }
+
+ return solver->okay();
+}
+
+size_t GateFinder::findEqOrGates()
+{
+ assert(solver->ok);
+ size_t foundRep = 0;
+ vector<OrGate> gates = orGates;
+ std::sort(gates.begin(), gates.end(), GateCompareForEq());
+
+ vector<Lit> tmp(2);
+ for (uint32_t i = 1; i < gates.size(); i++) {
+ const OrGate& gate1 = gates[i-1];
+ const OrGate& gate2 = gates[i];
+
+ if (gate1.lit1 == gate2.lit1
+ && gate1.lit2 == gate2.lit2
+ && gate1.rhs.var() != gate2.rhs.var()
+ ) {
+ foundRep++;
+ tmp[0] = gate1.rhs.unsign();
+ tmp[1] = gate2.rhs.unsign();
+ const bool RHS = gate1.rhs.sign() ^ gate2.rhs.sign();
+ if (!solver->add_xor_clause_inter(tmp, RHS, false))
+ return foundRep;
+ }
+ }
+
+ return foundRep;
+}
+
+void GateFinder::find_or_gates()
+{
+ if (solver->nVars() < 1)
+ return;
+
+ const size_t offs = solver->mtrand.randInt(solver->nVars()*2-1);
+ for(size_t i = 0
+ ; i < solver->nVars()*2
+ && *simplifier->limit_to_decrease > 0
+ && !solver->must_interrupt_asap()
+ ; i++
+ ) {
+ const size_t at = (offs + i) % (solver->nVars()*2);
+ const Lit lit = Lit::toLit(at);
+ find_or_gates_in_sweep_mode(lit);
+ find_or_gates_in_sweep_mode(~lit);
+ }
+}
+
+void GateFinder::find_or_gates_in_sweep_mode(const Lit lit)
+{
+ assert(toClear.empty());
+ watch_subarray_const ws = solver->watches[lit];
+ *simplifier->limit_to_decrease -= ws.size();
+ for(const Watched w: ws) {
+ if (w.isBin() && !w.red()) {
+ seen[(~w.lit2()).toInt()] = 1;
+ toClear.push_back(~w.lit2());
+ }
+ }
+
+ if (solver->conf.doCache && solver->conf.otfHyperbin) {
+ const vector<LitExtra>& cache = solver->implCache[lit].lits;
+ *simplifier->limit_to_decrease -= cache.size();
+ for(const LitExtra l: cache) {
+ if (l.getOnlyIrredBin()) {
+ seen[(~l.getLit()).toInt()] = 1;
+ toClear.push_back(~l.getLit());
+ }
+ }
+ }
+
+ watch_subarray_const ws2 = solver->watches[~lit];
+ *simplifier->limit_to_decrease -= ws2.size();
+ for(const Watched w: ws2) {
+ if (w.isTri()
+ && !w.red()
+ && (seen[w.lit2().toInt()]
+ || (solver->conf.doStamp && solver->conf.otfHyperbin && solver->find_with_stamp_a_or_b(~w.lit2(), lit)))
+ && (seen[w.lit3().toInt()]
+ || (solver->conf.doStamp && solver->conf.otfHyperbin && solver->find_with_stamp_a_or_b(~w.lit3(), lit)))
+ ) {
+ add_gate_if_not_already_inside(lit, w.lit2(), w.lit3());
+ }
+ }
+
+ *simplifier->limit_to_decrease -= toClear.size();
+ for(const Lit toclear: toClear) {
+ seen[toclear.toInt()] = 0;
+ }
+ toClear.clear();
+}
+
+
+void GateFinder::add_gate_if_not_already_inside(
+ const Lit rhs
+ , const Lit lit1
+ , const Lit lit2
+) {
+ OrGate gate(rhs, lit1, lit2, false);
+ for (Watched ws: solver->watches[gate.rhs]) {
+ if (ws.isIdx()
+ && orGates[ws.get_idx()] == gate
+ ) {
+ return;
+ }
+ }
+ link_in_gate(gate);
+}
+
+void GateFinder::link_in_gate(const OrGate& gate)
+{
+ const size_t at = orGates.size();
+ orGates.push_back(gate);
+ solver->watches[gate.rhs].push(Watched(at));
+ solver->watches.smudge(gate.rhs);
+}
+
+bool GateFinder::shortenWithOrGate(const OrGate& gate)
+{
+ assert(solver->ok);
+
+ //Find clauses that potentially could be shortened
+ subs.clear();
+ simplifier->sub_str->find_subsumed(
+ std::numeric_limits< uint32_t >::max()
+ , gate.getLits()
+ , calcAbstraction(gate.getLits())
+ , subs
+ );
+
+ for (size_t i = 0; i < subs.size(); i++) {
+ ClOffset offset = subs[i];
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+
+ //Don't shorten irred clauses with red gates
+ // -- potential loss if e.g. red clause is removed later
+ if ((!cl.red() && gate.red))
+ continue;
+
+ runStats.orGateUseful++;
+
+ //Go through clause, check if RHS (rhs) is inside the clause
+ //If it is, we have two possibilities:
+ //1) a = b V c , clause: a V b V c V d
+ //2) a = b V c , clause: -a V b V c V d
+ //But we will simply ignore this. One of these clauses can be strengthened
+ //the other subsumed. But let's ignore these, subsumption/strenghtening will take care of this
+ bool rhsInside = false;
+ for (Lit lit: cl) {
+ if (gate.rhs.var() == lit.var()) {
+ rhsInside = true;
+ break;
+ }
+ }
+ if (rhsInside)
+ continue;
+
+ if (solver->conf.verbosity >= 6) {
+ cout << "OR gate-based cl-shortening" << endl;
+ cout << "Gate used: " << gate << endl;
+ cout << "orig Clause: " << cl<< endl;
+ }
+
+ //Set up future clause's lits
+ vector<Lit> lits;
+ for (const Lit lit: cl) {
+ bool inGate = false;
+ for (Lit lit2: gate.getLits()) {
+ if (lit == lit2) {
+ inGate = true;
+ runStats.litsRem++;
+ break;
+ }
+ }
+
+ if (!inGate)
+ lits.push_back(lit);
+ }
+ if (!rhsInside) {
+ lits.push_back(gate.rhs);
+ runStats.litsRem--;
+ }
+
+ //Future clause's stat
+ const bool red = cl.red();
+ const ClauseStats stats = cl.stats;
+
+ //Free the old clause and allocate new one
+ (*solver->drat) << deldelay << cl << fin;
+ simplifier->unlink_clause(offset, false, false, true);
+ Clause* cl2 = solver->add_clause_int(lits, red, stats, false);
+ (*solver->drat) << findelay;
+ if (!solver->ok)
+ return false;
+
+ //If the clause is implicit, it's already linked in, ignore
+ if (cl2 == NULL)
+ continue;
+
+ simplifier->linkInClause(*cl2);
+ ClOffset offset2 = solver->cl_alloc.get_offset(cl2);
+ simplifier->clauses.push_back(offset2);
+
+ if (solver->conf.verbosity >= 6) {
+ cout << "new clause after gate: " << lits << endl;
+ cout << "-----------" << endl;
+ }
+ }
+
+ return true;
+}
+
+void GateFinder::set_seen2_and_abstraction(
+ const Clause& cl
+ , cl_abst_type& abstraction
+) {
+ *simplifier->limit_to_decrease -= cl.size();
+ for (const Lit lit: cl) {
+ if (!seen2[lit.toInt()]) {
+ seen2[lit.toInt()] = true;
+ seen2Set.push_back(lit.toInt());
+ }
+ abstraction |= abst_var(lit.var());
+ }
+}
+
+cl_abst_type GateFinder::calc_sorted_occ_and_set_seen2(
+ const OrGate& gate
+ , uint32_t& maxSize
+ , uint32_t& minSize
+ , const bool only_irred
+) {
+ assert(seen2Set.empty());
+ cl_abst_type abstraction = 0;
+ for (vector<ClOffset>& certain_size_occ: sizeSortedOcc)
+ certain_size_occ.clear();
+
+ watch_subarray_const csOther = solver->watches[~(gate.lit2)];
+ *simplifier->limit_to_decrease -= csOther.size();
+ for (const Watched ws: csOther) {
+ if (!ws.isClause())
+ continue;
+
+ const ClOffset offset = ws.get_offset();
+ const Clause& cl = *solver->cl_alloc.ptr(offset);
+ if (cl.red() && only_irred)
+ continue;
+
+ //We might be contracting 2 irred clauses based on a learnt gate
+ //would lead to UNSAT->SAT
+ if (!cl.red() && gate.red)
+ continue;
+
+ //Clause too long, skip
+ if (cl.size() > solver->conf.maxGateBasedClReduceSize)
+ continue;
+
+ maxSize = std::max(maxSize, cl.size());
+ minSize = std::min(minSize, cl.size());
+ sizeSortedOcc[cl.size()].push_back(offset);
+ set_seen2_and_abstraction(cl, abstraction);
+ }
+
+ return abstraction;
+}
+
+void GateFinder::set_seen2_tri(
+ const OrGate& gate
+ , const bool only_irred
+) {
+ assert(seen2Set.empty());
+ watch_subarray_const csOther = solver->watches[~(gate.lit2)];
+ *simplifier->limit_to_decrease -= csOther.size();
+ for (const Watched ws: csOther) {
+ if (!ws.isTri())
+ continue;
+
+ if (ws.red() && only_irred)
+ continue;
+
+ //We might be contracting 2 irred clauses based on a learnt gate
+ //would lead to UNSAT->SAT
+ if (!ws.red() && gate.red)
+ continue;
+
+ const Lit lits[2] = {ws.lit2(), ws.lit3()};
+ for (size_t i = 0; i < 2; i++) {
+ const Lit lit = lits[i];
+ if (!seen2[lit.toInt()]) {
+ seen2[lit.toInt()] = 1;
+ seen2Set.push_back(lit.toInt());
+ }
+ }
+ }
+}
+
+cl_abst_type GateFinder::calc_abst_and_set_seen(
+ const Clause& cl
+ , const OrGate& gate
+) {
+ cl_abst_type abst = 0;
+ for (const Lit lit: cl) {
+ //lit1 doesn't count into abstraction
+ if (lit == ~(gate.lit1))
+ continue;
+
+ seen[lit.toInt()] = 1;
+ abst |= abst_var(lit.var());
+ }
+ abst |= abst_var((~(gate.lit2)).var());
+
+ return abst;
+}
+
+bool GateFinder::check_seen_and_gate_against_cl(
+ const Clause& this_cl
+ , const OrGate& gate
+) {
+ *(simplifier->limit_to_decrease) -= this_cl.size();
+ for (const Lit lit: this_cl) {
+
+ //We know this is inside, skip
+ if (lit == ~(gate.lit1))
+ continue;
+
+ //If some weird variable is inside, skip
+ if ( lit.var() == gate.lit2.var()
+ || lit.var() == gate.rhs.var()
+ //A lit is inside this clause isn't inside the others
+ || !seen2[lit.toInt()]
+ ) {
+ return false;
+ }
+ }
+ return true;
+}
+
+bool GateFinder::check_seen_and_gate_against_lit(
+ const Lit lit
+ , const OrGate& gate
+) {
+ //If some weird variable is inside, skip
+ if ( lit.var() == gate.lit2.var()
+ || lit.var() == gate.rhs.var()
+ //A lit is inside this clause isn't inside the others
+ || !seen2[lit.toInt()]
+ ) {
+ return false;
+ }
+
+ return true;
+}
+
+ClOffset GateFinder::find_pair_for_and_gate_reduction(
+ const Watched& ws
+ , const size_t minSize
+ , const size_t maxSize
+ , const cl_abst_type general_abst
+ , const OrGate& gate
+ , const bool only_irred
+) {
+ //Only long clauses
+ if (!ws.isClause())
+ return CL_OFFSET_MAX;
+
+ const ClOffset this_cl_offs = ws.get_offset();
+ Clause& this_cl = *solver->cl_alloc.ptr(this_cl_offs);
+ if ((ws.getAbst() | general_abst) != general_abst
+ || (this_cl.red() && only_irred)
+ || (!this_cl.red() && gate.red)
+ || this_cl.size() > solver->conf.maxGateBasedClReduceSize
+ || this_cl.size() > maxSize //Size must be smaller or equal to maxSize
+ || this_cl.size() < minSize //Size must be larger or equal than minsize
+ || sizeSortedOcc[this_cl.size()].empty()) //this bracket for sizeSortedOcc must be non-empty
+ {
+ //cout << "Not even possible, this clause cannot match any other" << endl;
+ return CL_OFFSET_MAX;
+ }
+
+ if (!check_seen_and_gate_against_cl(this_cl, gate))
+ return CL_OFFSET_MAX;
+
+
+ const cl_abst_type this_cl_abst = calc_abst_and_set_seen(this_cl, gate);
+ const ClOffset other_cl_offs = findAndGateOtherCl(
+ sizeSortedOcc[this_cl.size()] //in this occur list that contains clauses of specific size
+ , ~(gate.lit2) //this is the LIT that is meant to be in the clause
+ , this_cl_abst //clause MUST match this abst
+ , gate.red
+ , only_irred
+ );
+
+ //Clear 'seen' from bits set
+ *(simplifier->limit_to_decrease) -= this_cl.size();
+ for (const Lit lit: this_cl) {
+ seen[lit.toInt()] = 0;
+ }
+
+ return other_cl_offs;
+}
+
+bool GateFinder::find_pair_for_and_gate_reduction_tri(
+ const Watched& ws
+ , const OrGate& gate
+ , const bool only_irred
+ , Watched& found_pair
+) {
+ //Only long clauses
+ if (!ws.isTri())
+ return false;
+
+ if (ws.red() && only_irred) {
+ //cout << "Not even possible, this clause cannot match any other" << endl;
+ return false;
+ }
+
+ //Check that we are not removing irred info based on learnt gate
+ if (!ws.red() && gate.red)
+ return false;
+
+ if (!check_seen_and_gate_against_lit(ws.lit2(), gate)
+ || !check_seen_and_gate_against_lit(ws.lit3(), gate))
+ {
+ return false;
+ }
+
+ seen[ws.lit2().toInt()] = 1;
+ seen[ws.lit3().toInt()] = 1;
+ const bool ret = findAndGateOtherCl_tri(
+ solver->watches[~(gate.lit2)]
+ , gate.red
+ , only_irred
+ , found_pair
+ );
+
+ seen[ws.lit2().toInt()] = 0;
+ seen[ws.lit3().toInt()] = 0;
+
+ return ret;
+}
+
+bool GateFinder::remove_clauses_using_and_gate(
+ const OrGate& gate
+ , const bool really_remove
+ , const bool only_irred
+) {
+ assert(clToUnlink.empty());
+ if (solver->watches[~(gate.lit1)].empty()
+ || solver->watches[~(gate.lit2)].empty()
+ ) {
+ return solver->okay();
+ }
+
+ uint32_t maxSize = 0;
+ uint32_t minSize = std::numeric_limits<uint32_t>::max();
+ cl_abst_type general_abst = calc_sorted_occ_and_set_seen2(gate, maxSize, minSize, only_irred);
+ general_abst |= abst_var(gate.lit1.var());
+ if (maxSize == 0)
+ return solver->okay();
+
+ watch_subarray cs = solver->watches[~(gate.lit1)];
+ *simplifier->limit_to_decrease -= cs.size();
+ for (const Watched ws: cs) {
+ if (*simplifier->limit_to_decrease < 0)
+ break;
+
+ const ClOffset other_cl_offs = find_pair_for_and_gate_reduction(
+ ws, minSize, maxSize, general_abst, gate, only_irred
+ );
+
+ if (really_remove
+ && other_cl_offs != CL_OFFSET_MAX
+ ) {
+ const ClOffset this_cl_offs = ws.get_offset();
+ assert(other_cl_offs != this_cl_offs);
+ clToUnlink.insert(other_cl_offs);
+ clToUnlink.insert(this_cl_offs);
+ treatAndGateClause(other_cl_offs, gate, this_cl_offs);
+ }
+
+ if (!solver->ok)
+ return false;
+ }
+
+ //Clear from seen2 bits that have been set
+ *(simplifier->limit_to_decrease) -= seen2Set.size();
+ for(const size_t at: seen2Set) {
+ seen2[at] = 0;
+ }
+ seen2Set.clear();
+
+ //Now that all is computed, remove those that need removal
+ for(const ClOffset offset: clToUnlink) {
+ simplifier->unlink_clause(offset);
+ }
+ clToUnlink.clear();
+
+ return solver->okay();
+}
+
+bool GateFinder::remove_clauses_using_and_gate_tri(
+ const OrGate& gate
+ , const bool really_remove
+ , const bool only_irred
+) {
+ if (solver->watches[~(gate.lit1)].empty()
+ || solver->watches[~(gate.lit2)].empty()
+ ) {
+ return solver->okay();
+ }
+ tri_to_unlink.clear();
+
+ set_seen2_tri(gate, only_irred);
+ watch_subarray_const cs = solver->watches[~(gate.lit1)];
+ *simplifier->limit_to_decrease -= cs.size();
+ for (const Watched ws: cs) {
+ if (*simplifier->limit_to_decrease < 0)
+ break;
+
+ Watched other_ws;
+ const bool found_pair = find_pair_for_and_gate_reduction_tri(
+ ws, gate, only_irred, other_ws
+ );
+
+ if (really_remove && found_pair) {
+ runStats.andGateUseful++;
+ runStats.clauseSizeRem += 3;
+
+ tri_to_unlink.insert(TriToUnlink(ws.lit2(), ws.lit3(), ws.red()));
+ solver->detach_tri_clause(~(gate.lit2), other_ws.lit2(), other_ws.lit3(), other_ws.red());
+ vector<Lit> lits = {~(gate.rhs), ws.lit2(), ws.lit3()};
+ solver->add_clause_int(
+ lits
+ , ws.red() && other_ws.red()
+ , ClauseStats()
+ , false //don't attach/propagate
+ );
+ if (!solver->ok)
+ return false;
+ }
+ }
+
+ //Clear from seen2 bits that have been set
+ *(simplifier->limit_to_decrease) -= seen2Set.size();
+ for(const size_t at: seen2Set) {
+ seen2[at] = false;
+ }
+ seen2Set.clear();
+
+ for(const TriToUnlink tri: tri_to_unlink) {
+ solver->detach_tri_clause(~(gate.lit1), tri.lit2, tri.lit3, tri.red);
+ }
+ tri_to_unlink.clear();
+
+ return solver->okay();
+}
+
+void GateFinder::treatAndGateClause(
+ const ClOffset other_cl_offset
+ , const OrGate& gate
+ , const ClOffset this_cl_offset
+) {
+ //Update stats
+ runStats.andGateUseful++;
+ const Clause& this_cl = *solver->cl_alloc.ptr(this_cl_offset);
+ runStats.clauseSizeRem += this_cl.size();
+
+ if (solver->conf.verbosity >= 6) {
+ cout << "AND gate-based cl rem" << endl;
+ cout << "clause 1: " << this_cl << endl;
+ //cout << "clause 2: " << *clauses[other_cl_offset.index] << endl;
+ cout << "gate : " << gate << endl;
+ }
+
+ //Put into 'lits' the literals of the clause
+ vector<Lit> lits;
+ *simplifier->limit_to_decrease -= this_cl.size()*2;
+ for (const Lit lit: this_cl) {
+ if (lit != ~(gate.lit1)) {
+ lits.push_back(lit);
+ assert(lit.var() != gate.rhs.var());
+ assert(lit.var() != gate.lit1.var());
+ assert(lit.var() != gate.lit2.var());
+ }
+ }
+ lits.push_back(~(gate.rhs));
+
+ //Calculate learnt & glue
+ const Clause& other_cl = *solver->cl_alloc.ptr(other_cl_offset);
+ const bool red = other_cl.red() && this_cl.red();
+ ClauseStats stats = ClauseStats::combineStats(this_cl.stats, other_cl.stats);
+
+ if (solver->conf.verbosity >= 6) {
+ cout << "gate new clause:" << lits << endl;
+ cout << "-----------" << endl;
+ }
+
+ //Create clause (but don't attach)
+ Clause* clNew = solver->add_clause_int(lits, red, stats, false);
+
+ //Link in clause properly (not regular attach)
+ if (clNew != NULL) {
+ simplifier->linkInClause(*clNew);
+ ClOffset offsetNew = solver->cl_alloc.get_offset(clNew);
+ simplifier->clauses.push_back(offsetNew);
+ }
+}
+
+ClOffset GateFinder::findAndGateOtherCl(
+ const vector<ClOffset>& this_sizeSortedOcc
+ , const Lit otherLit
+ , const cl_abst_type abst
+ , const bool gate_is_red
+ , const bool only_irred
+) {
+ *(simplifier->limit_to_decrease) -= this_sizeSortedOcc.size();
+ for (const ClOffset offset: this_sizeSortedOcc) {
+ const Clause& cl = *solver->cl_alloc.ptr(offset);
+ if (cl.red() && only_irred)
+ continue;
+
+ if (!cl.red() && gate_is_red)
+ continue;
+
+ //abstraction must match
+ if (cl.abst != abst)
+ continue;
+
+ *(simplifier->limit_to_decrease) -= cl.size()/2+5;
+ for (const Lit lit: cl) {
+ //we skip the other lit in the gate
+ if (lit == otherLit)
+ continue;
+
+ //Seen is perfectly correct, everything must match
+ if (!seen[lit.toInt()])
+ goto next;
+
+ }
+ return offset;
+ next:;
+ }
+
+ return CL_OFFSET_MAX;
+}
+
+bool GateFinder::findAndGateOtherCl_tri(
+ watch_subarray_const ws_list
+ , const bool gate_is_red
+ , const bool only_irred
+ , Watched& ret
+) {
+ *(simplifier->limit_to_decrease) -= ws_list.size();
+ for (const Watched& ws: ws_list) {
+ if (!ws.isTri())
+ continue;
+
+ if (ws.red() && only_irred)
+ continue;
+
+ if (!ws.red() && gate_is_red)
+ continue;
+
+ if (seen[ws.lit2().toInt()]
+ && seen[ws.lit3().toInt()]
+ ) {
+ ret = ws;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void GateFinder::print_graphviz_dot2()
+{
+ std::stringstream ss;
+ ss << "Gates" << (numDotPrinted++) << ".dot";
+ std::string filenename = ss.str();
+ std::ofstream file(filenename.c_str(), std::ios::out);
+ file << "digraph G {" << endl;
+ vector<bool> gateUsed;
+ gateUsed.resize(orGates.size(), false);
+ size_t index = 0;
+ for (const OrGate orGate: orGates) {
+ index++;
+ for (const Lit lit: orGate.getLits()) {
+ for (Watched ws: solver->watches[lit]) {
+ if (!ws.isIdx()) {
+ continue;
+ }
+ uint32_t at = ws.get_idx();
+
+ //The same one, skip
+ if (at == index)
+ continue;
+
+ file << "Gate" << at;
+ gateUsed[at] = true;
+ file << " -> ";
+
+ file << "Gate" << index;
+ gateUsed[index] = true;
+
+ file << "[arrowsize=\"0.4\"];" << endl;
+ }
+
+ /*vector<uint32_t>& occ2 = gateOccEq[(~*it2).toInt()];
+ for (vector<uint32_t>::const_iterator it3 = occ2.begin(), end3 = occ2.end(); it3 != end3; it3++) {
+ if (*it3 == index) continue;
+
+ file << "Gate" << *it3;
+ gateUsed[*it3] = true;
+ file << " -> ";
+
+ file << "Gate" << index;
+ gateUsed[index] = true;
+
+ file << "[style = \"dotted\", arrowsize=\"0.4\"];" << endl;
+ }*/
+ }
+ }
+
+ index = 0;
+ for (const OrGate orGate: orGates) {
+ index++;
+
+ if (gateUsed[index]) {
+ file << "Gate" << index << " [ shape=\"point\"";
+ file << ", size = 0.8";
+ file << ", style=\"filled\"";
+ if (orGate.red)
+ file << ", color=\"darkseagreen4\"";
+ else
+ file << ", color=\"darkseagreen\"";
+
+ file << "];" << endl;
+ }
+ }
+
+ file << "}" << endl;
+ file.close();
+ cout << "c Printed gate structure to file " << filenename << endl;
+}
+
+void GateFinder::print_graphviz_dot()
+{
+ print_graphviz_dot2();
+}
+
+GateFinder::Stats& GateFinder::Stats::operator+=(const Stats& other)
+{
+ findGateTime += other.findGateTime;
+ find_gate_timeout += other.find_gate_timeout;
+ orBasedTime += other.orBasedTime;
+ or_based_timeout += other.or_based_timeout;
+ varReplaceTime += other.varReplaceTime;
+ andBasedTime += other.andBasedTime;
+ and_based_timeout += other.and_based_timeout;
+ erTime += other.erTime;
+
+ //OR-gate
+ orGateUseful += other.orGateUseful;
+ numLongCls += other.numLongCls;
+ numLongClsLits += other.numLongClsLits;
+ litsRem += other.litsRem;
+ varReplaced += other.varReplaced;
+
+ //And-gate
+ andGateUseful += other.andGateUseful;
+ clauseSizeRem += other.clauseSizeRem;
+
+ //ER
+ numERVars += other.numERVars;
+
+ //Gates
+ learntGatesSize += other.learntGatesSize;
+ numRed += other.numRed;
+ irredGatesSize += other.irredGatesSize;
+ numIrred += other.numIrred;
+
+ return *this;
+}
+
+void GateFinder::Stats::print(const size_t nVars) const
+{
+ cout << "c -------- GATE FINDING ----------" << endl;
+ print_stats_line("c time"
+ , total_time()
+ );
+
+ print_stats_line("c find gate time"
+ , findGateTime
+ , stats_line_percent(findGateTime, total_time())
+ , "% time"
+ );
+
+ print_stats_line("c gate-based cl-sh time"
+ , orBasedTime
+ , stats_line_percent(orBasedTime, total_time())
+ , "% time"
+ );
+
+ print_stats_line("c gate-based cl-rem time"
+ , andBasedTime
+ , stats_line_percent(andBasedTime, total_time())
+ , "% time"
+ );
+
+ print_stats_line("c gate-based varrep time"
+ , varReplaceTime
+ , stats_line_percent(varReplaceTime, total_time())
+ , "% time"
+ );
+
+ print_stats_line("c gatefinder cl-short"
+ , orGateUseful
+ , stats_line_percent(orGateUseful, numLongCls)
+ , "% long cls"
+ );
+
+ print_stats_line("c gatefinder lits-rem"
+ , litsRem
+ , stats_line_percent(litsRem, numLongClsLits)
+ , "% long cls lits"
+ );
+
+ print_stats_line("c gatefinder cl-rem"
+ , andGateUseful
+ , stats_line_percent(andGateUseful, numLongCls)
+ , "% long cls"
+ );
+
+ print_stats_line("c gatefinder cl-rem's lits"
+ , clauseSizeRem
+ , stats_line_percent(clauseSizeRem, numLongClsLits)
+ , "% long cls lits"
+ );
+
+ print_stats_line("c gatefinder var-rep"
+ , varReplaced
+ , stats_line_percent(varReplaced, nVars)
+ , "% vars"
+ );
+
+ cout << "c -------- GATE FINDING END ----------" << endl;
+}
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/gatefinder.h b/cryptominisat5/cryptominisat-5.6.3/src/gatefinder.h
new file mode 100644
index 000000000..5023d2f00
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/gatefinder.h
@@ -0,0 +1,319 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef _GATEFINDER_H_
+#define _GATEFINDER_H_
+
+#include "solvertypes.h"
+#include "cset.h"
+#include <set>
+#include "watcharray.h"
+#include <array>
+
+namespace CMSat {
+
+class Solver;
+class OccSimplifier;
+using std::set;
+
+class OrGate {
+ public:
+ OrGate(const Lit& _rhs, Lit _lit1, Lit _lit2, const bool _red) :
+ lit1(_lit1)
+ , lit2(_lit2)
+ , rhs(_rhs)
+ , red(_red)
+ {
+ if (lit1 > lit2)
+ std::swap(lit1, lit2);
+ }
+
+ bool operator==(const OrGate& other) const
+ {
+ return
+ rhs == other.rhs
+ && lit1 == other.lit1
+ && lit2 == other.lit2
+ ;
+ }
+ std::array<Lit, 2> getLits() const
+ {
+ return std::array<Lit, 2>{{lit1, lit2}};
+ }
+
+ //LHS
+ Lit lit1;
+ Lit lit2;
+
+ //RHS
+ Lit rhs;
+
+ //Data about gate
+ bool red;
+};
+
+struct GateCompareForEq
+{
+ bool operator()(const OrGate& a, const OrGate& b) const
+ {
+ if (a.lit1 != b.lit1) {
+ return (a.lit1 < b.lit1);
+ }
+
+ if (a.lit2 != b.lit2) {
+ return (a.lit2 < b.lit2);
+ }
+ return (a.rhs < b.rhs);
+ }
+};
+
+inline std::ostream& operator<<(std::ostream& os, const OrGate& gate)
+{
+ os
+ << " gate "
+ << " lits: " << gate.lit1 << ", " << gate.lit2
+ << " rhs: " << gate.rhs
+ << " learnt " << gate.red
+ ;
+ return os;
+}
+
+class GateFinder
+{
+public:
+ GateFinder(OccSimplifier *simplifier, Solver *control);
+ bool doAll();
+
+ //Stats
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ double total_time() const
+ {
+ return findGateTime + orBasedTime + varReplaceTime
+ + andBasedTime + erTime;
+ }
+ Stats& operator+=(const Stats& other);
+ void print(const size_t nVars) const;
+
+ //Time
+ double findGateTime = 0.0;
+ uint32_t find_gate_timeout = 0;
+ double orBasedTime = 0.0;
+ uint32_t or_based_timeout = 0;
+ double varReplaceTime = 0.0;
+ double andBasedTime = 0.0;
+ uint32_t and_based_timeout = 0;
+ double erTime = 0.0;
+
+ //OR-gate
+ uint64_t orGateUseful = 0;
+ uint64_t numLongCls = 0;
+ uint64_t numLongClsLits = 0;
+ int64_t litsRem = 0;
+
+ //Var-replace
+ uint64_t varReplaced = 0;
+
+ //And-gate
+ uint64_t andGateUseful = 0;
+ uint64_t clauseSizeRem = 0;
+
+ //ER
+ uint64_t numERVars = 0;
+
+ //Gates
+ uint64_t learntGatesSize = 0;
+ uint64_t numRed = 0;
+ uint64_t irredGatesSize = 0;
+ uint64_t numIrred = 0;
+ };
+
+ const Stats& get_stats() const;
+
+private:
+ void print_graphviz_dot();
+
+ //Setup
+ void link_in_gate(const OrGate& gate);
+ void add_gate_if_not_already_inside(Lit rhs, Lit lit1, Lit lit2);
+ void find_or_gates_in_sweep_mode(Lit lit);
+
+ //High-level functions
+ bool remove_clauses_with_all_or_gates();
+ bool shorten_with_all_or_gates();
+
+ //Finding
+ void find_or_gates_and_update_stats();
+ void find_or_gates();
+ void findOrGate(
+ const Lit rhs
+ , const Lit lit1
+ , const Lit lit2
+ );
+
+ bool all_simplifications_with_gates();
+ vector<ClOffset> subs; //to reduce overhead of allocation
+ bool shortenWithOrGate(const OrGate& gate);
+ size_t findEqOrGates();
+
+ //And gate treatment
+ bool remove_clauses_using_and_gate(
+ const OrGate& gate
+ , const bool reallyRemove
+ , const bool only_irred
+ );
+
+ cl_abst_type calc_sorted_occ_and_set_seen2(
+ const OrGate& gate
+ , uint32_t& maxSize
+ , uint32_t& minSize
+ , const bool only_irred
+ );
+ void set_seen2_and_abstraction(
+ const Clause& cl
+ , cl_abst_type& abstraction
+ );
+ bool check_seen_and_gate_against_cl(
+ const Clause& this_cl
+ , const OrGate& gate
+ );
+
+ void treatAndGateClause(
+ const ClOffset other_cl_offset
+ , const OrGate& gate
+ , const ClOffset this_cl_offset
+ );
+ cl_abst_type calc_abst_and_set_seen(
+ const Clause& cl
+ , const OrGate& gate
+ );
+ ClOffset find_pair_for_and_gate_reduction(
+ const Watched& ws
+ , const size_t minSize
+ , const size_t maxSize
+ , const cl_abst_type abstraction
+ , const OrGate& gate
+ , const bool only_irred
+ );
+
+ ClOffset findAndGateOtherCl(
+ const vector<ClOffset>& this_sizeSortedOcc
+ , const Lit lit
+ , const cl_abst_type abst2
+ , const bool gate_is_red
+ , const bool only_irred
+ );
+ bool findAndGateOtherCl_tri(
+ watch_subarray_const ws_list
+ , const bool gate_is_red
+ , const bool only_irred
+ , Watched& ret
+ );
+ bool find_pair_for_and_gate_reduction_tri(
+ const Watched& ws
+ , const OrGate& gate
+ , const bool only_irred
+ , Watched& found_pair
+ );
+ bool remove_clauses_using_and_gate_tri(
+ const OrGate& gate
+ , const bool really_remove
+ , const bool only_irred
+ );
+ void set_seen2_tri(
+ const OrGate& gate
+ , const bool only_irred
+ );
+ bool check_seen_and_gate_against_lit(
+ const Lit lit
+ , const OrGate& gate
+ );
+
+ ///temporary for and-gate treatment. Cleared at every treatAndGate() call
+ vector<vector<ClOffset> > sizeSortedOcc;
+
+ //Indexes, gate data
+ vector<OrGate> orGates; //List of OR gates
+
+ //For temporaries
+ vector<uint32_t> seen2Set; //Bits that have been set in seen2, and later need to be cleared
+ set<ClOffset> clToUnlink;
+ struct TriToUnlink
+ {
+ TriToUnlink(Lit _lit2, Lit _lit3, bool _red) :
+ lit2(_lit2)
+ , lit3(_lit3)
+ , red(_red)
+ {}
+
+ const Lit lit2;
+ const Lit lit3;
+ const bool red;
+
+ bool operator<(const TriToUnlink& other) const
+ {
+ if (lit2 != other.lit2)
+ return lit2 < other.lit2;
+ if (lit3 != other.lit3)
+ return lit3 < other.lit3;
+ return red < other.red;
+ }
+ };
+ set<TriToUnlink> tri_to_unlink;
+
+ //Graph
+ void print_graphviz_dot2(); ///<Print Graphviz DOT file describing the gates
+
+ //Stats
+ Stats runStats;
+ Stats globalStats;
+
+ //Limits
+ int64_t numMaxGateFinder;
+ int64_t numMaxShortenWithGates;
+ int64_t numMaxClRemWithGates;
+
+ //long-term stats
+ uint64_t numDotPrinted;
+
+ //Main data
+ OccSimplifier *simplifier;
+ Solver *solver;
+ vector<uint16_t>& seen;
+ vector<uint8_t>& seen2;
+ vector<Lit>& toClear;
+};
+
+inline const GateFinder::Stats& GateFinder::get_stats() const
+{
+ return globalStats;
+}
+
+} //end namespace
+
+#endif //_GATEFINDER_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h b/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
new file mode 100644
index 000000000..5bf0f9dff
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/gausswatched.h
@@ -0,0 +1,44 @@
+/******************************************
+Copyright (c) 2012 Cheng-Shen Han
+Copyright (c) 2012 Jie-Hong Roland Jiang
+Copyright (c) 2018 Mate Soos
+
+For more information, see " When Boolean Satisfiability Meets Gaussian
+Elimination in a Simplex Way." by Cheng-Shen Han and Jie-Hong Roland Jiang
+in CAV (Computer Aided Verification), 2012: 410-426
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef GAUSSWATCHED_H
+#define GAUSSWATCHED_H
+
+namespace CMSat {
+ struct GaussWatched{
+ GaussWatched(uint32_t r ,uint32_t m):
+ row_id(r) , matrix_num(m)
+ {}
+
+ uint32_t row_id; // watch row id
+ uint32_t matrix_num; // watch matrix id
+ };
+}
+
+#endif //GAUSSWATCHED_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h b/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
new file mode 100644
index 000000000..611ee5efa
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/gqueuedata.h
@@ -0,0 +1,67 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef GQUEUEDATA_H__
+#define GQUEUEDATA_H__
+
+namespace CMSat {
+
+struct GaussQData {
+ bool do_eliminate; // we do elimination when basic variable is invoked
+ uint32_t e_var; // do elimination variable
+ uint32_t e_row_n ; // do elimination row
+ PropBy confl; // for choosing better conflict
+ uint32_t conflict_size_gauss; // for choosing better conflict
+ int ret_gauss; // gauss matrix result
+ bool xorEqualFalse_gauss; // conflict xor clause xorEqualFalse
+ vector<Lit> conflict_clause_gauss; // for gaussian elimination better conflict
+
+
+ uint32_t big_gaussnum; // total gauss time for DPLL
+ uint32_t big_propagate; // total gauss propogation time for DPLL
+ uint32_t big_conflict; // total gauss conflict time for DPLL
+ bool engaus_disable; // decide to do gaussian elimination
+ bool enter_matrix;
+
+ void reset()
+ {
+ enter_matrix = false;
+ do_eliminate = false;
+ conflict_clause_gauss.clear();
+ xorEqualFalse_gauss = false;
+ ret_gauss = 4;
+ conflict_size_gauss = std::numeric_limits<uint32_t>::max();
+ }
+
+ void reset_stats()
+ {
+ big_gaussnum = 0; // total gauss time for DPLL
+ big_propagate = 0; // total gauss propogation time for DPLL
+ big_conflict = 0; // total gauss conflict time for DPLL
+ engaus_disable = 0; // decide to do gaussian elimination
+ }
+
+};
+
+}
+
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/hasher.h b/cryptominisat5/cryptominisat-5.6.3/src/hasher.h
new file mode 100644
index 000000000..326581461
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/hasher.h
@@ -0,0 +1,61 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvertypes.h"
+
+namespace CMSat
+{
+
+// Use 1G extra for clause re-learning bitmap.
+static const uint32_t hash_bits = 28;
+static const uint32_t hash_size = 1 << hash_bits;
+static const uint32_t hash_mask = hash_size - 1;
+
+static inline uint64_t rotl(uint64_t x, uint64_t n)
+{
+ return (x << n) | (x >> (8 * sizeof(x) - n));
+}
+
+#define HASH_MULT_CONST 0x61C8864680B583EBULL
+
+static inline uint64_t clause_hash(vector<Lit> &clause)
+{
+ //assert((sizeof(Lit) * clause.size()) % sizeof(unsigned long) == 0);
+
+ uint64_t x = 0;
+ uint64_t y = 0;
+
+ for (const Lit l: clause) {
+ x = x ^ l.toInt();
+ y = x ^ y;
+ x = rotl(x, 12);
+ x = x + y;
+ y = rotl(y, 45);
+ y = 9 * y;
+ }
+
+ y = y ^ (x * HASH_MULT_CONST);
+ y = y * HASH_MULT_CONST;
+ return y;
+}
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/heap.h b/cryptominisat5/cryptominisat-5.6.3/src/heap.h
new file mode 100644
index 000000000..e27aa6c6a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/heap.h
@@ -0,0 +1,216 @@
+/******************************************************************************************[Heap.h]
+Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+Copyright (c) 2007-2010, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**************************************************************************************************/
+
+#ifndef Glucose_Heap_h
+#define Glucose_Heap_h
+
+#include "Vec.h"
+#include "MersenneTwister.h"
+
+namespace CMSat {
+
+//=================================================================================================
+// A heap implementation with support for decrease/increase key.
+
+
+template<class Comp>
+class Heap {
+ Comp lt; // The heap is a minimum-heap with respect to this comparator
+ vec<int> heap; // Heap of integers
+ vec<int> indices; // Each integers position (index) in the Heap
+
+ // Index "traversal" functions
+ static inline int left (int i)
+ {
+ return i * 2 + 1;
+ }
+ static inline int right (int i)
+ {
+ return (i + 1) * 2;
+ }
+ static inline int parent(int i)
+ {
+ return (i - 1) >> 1;
+ }
+
+
+ void percolateUp(int i)
+ {
+ int x = heap[i];
+ int p = parent(i);
+
+ while (i != 0 && lt(x, heap[p])) {
+ heap[i] = heap[p];
+ indices[heap[p]] = i;
+ i = p;
+ p = parent(p);
+ }
+ heap [i] = x;
+ indices[x] = i;
+ }
+
+
+ void percolateDown(int i)
+ {
+ int x = heap[i];
+ while (left(i) < (int)heap.size()) {
+ int child = right(i) < (int)heap.size() && lt(heap[right(i)], heap[left(i)]) ? right(i) : left(i);
+ if (!lt(heap[child], x)) {
+ break;
+ }
+ heap[i] = heap[child];
+ indices[heap[i]] = i;
+ i = child;
+ }
+ heap [i] = x;
+ indices[x] = i;
+ }
+
+
+public:
+ Heap(const Comp& c) : lt(c) { }
+
+ int size () const
+ {
+ return heap.size();
+ }
+ bool empty () const
+ {
+ return heap.size() == 0;
+ }
+ bool inHeap (int n) const
+ {
+ return n < (int)indices.size() && indices[n] >= 0;
+ }
+ int operator[](int index) const
+ {
+ assert(index < (int)heap.size());
+ return heap[index];
+ }
+ int random_element(MTRand& rnd)
+ {
+ assert(!heap.empty());
+ return heap[rnd.randInt(heap.size()-1)];
+ }
+
+
+ void decrease (int n)
+ {
+ assert(inHeap(n));
+ percolateUp (indices[n]);
+ }
+ void increase (int n)
+ {
+ assert(inHeap(n));
+ percolateDown(indices[n]);
+ }
+
+
+ // Safe variant of insert/decrease/increase:
+ void update(int n)
+ {
+ if (!inHeap(n)) {
+ insert(n);
+ } else {
+ percolateUp(indices[n]);
+ percolateDown(indices[n]);
+ }
+ }
+
+
+ void insert(int n)
+ {
+ indices.growTo(n + 1, -1);
+ assert(!inHeap(n));
+
+ indices[n] = heap.size();
+ heap.push(n);
+ percolateUp(indices[n]);
+ }
+
+
+ int removeMin()
+ {
+ int x = heap[0];
+ heap[0] = heap.last();
+ indices[heap[0]] = 0;
+ indices[x] = -1;
+ heap.pop();
+ if (heap.size() > 1) {
+ percolateDown(0);
+ }
+ return x;
+ }
+
+
+ // Rebuild the heap from scratch, using the elements in 'ns':
+ template<typename T>
+ void build(const T& ns)
+ {
+ for (int i = 0; i < (int)heap.size(); i++) {
+ indices[heap[i]] = -1;
+ }
+ heap.clear();
+
+ for (uint32_t i = 0; i < ns.size(); i++) {
+ indices[ns[i]] = i;
+ heap.push(ns[i]);
+ }
+
+ for (int i = (int)heap.size() / 2 - 1; i >= 0; i--) {
+ percolateDown(i);
+ }
+ }
+
+ void clear(bool dealloc = false)
+ {
+ for (int i = 0; i < (int)heap.size(); i++) {
+ indices[heap[i]] = -1;
+ }
+ heap.clear(dealloc);
+ }
+
+ size_t mem_used() const
+ {
+ size_t mem = 0;
+ mem += heap.capacity()*sizeof(uint32_t);
+ mem += indices.capacity()*sizeof(uint32_t);
+ return mem;
+ }
+
+ bool heap_property (uint32_t i) const {
+ return i >= heap.size()
+ || ( (i == 0 || !lt(heap[i], heap[parent(i)]))
+ && heap_property( left(i) )
+ && heap_property( right(i) )
+ );
+ }
+
+ bool heap_property() const {
+ return heap_property(0);
+ }
+
+};
+
+
+//=================================================================================================
+}
+
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp b/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
new file mode 100644
index 000000000..19e00d220
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.cpp
@@ -0,0 +1,1080 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "hyperengine.h"
+#include "clauseallocator.h"
+
+using namespace CMSat;
+
+HyperEngine::HyperEngine(const SolverConf *_conf, std::atomic<bool>* _must_interrupt_inter) :
+ PropEngine(_conf, _must_interrupt_inter)
+{
+}
+
+Lit HyperEngine::propagate_bfs(const uint64_t timeout)
+{
+ timedOutPropagateFull = false;
+ propStats.otfHyperPropCalled++;
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Prop full BFS started" << endl;
+ #endif
+
+ PropBy confl;
+
+ //Assert startup: only 1 enqueued, uselessBin is empty
+ assert(uselessBin.empty());
+ //assert(decisionLevel() == 1);
+
+ //The toplevel decision has to be set specifically
+ //If we came here as part of a backtrack to decision level 1, then
+ //this is already set, and there is no need to set it
+ if (trail.size() - trail_lim.back() == 1) {
+ //Set up root node
+ Lit root = trail[qhead];
+ varData[root.var()].reason = PropBy(~lit_Undef, false, false, false);
+ }
+
+ uint32_t nlBinQHead = qhead;
+ uint32_t lBinQHead = qhead;
+
+ needToAddBinClause.clear();
+ PropResult ret = PROP_NOTHING;
+ start:
+
+ //Early-abort if too much time was used (from prober)
+ if (propStats.otfHyperTime + propStats.bogoProps > timeout) {
+ timedOutPropagateFull = true;
+ return lit_Undef;
+ }
+
+ //Propagate binary irred
+ while (nlBinQHead < trail.size()) {
+ const Lit p = trail[nlBinQHead++];
+ watch_subarray_const ws = watches[~p];
+ propStats.bogoProps += 1;
+ for(const Watched *k = ws.begin(), *end = ws.end()
+ ; k != end
+ ; k++
+ ) {
+
+ //If something other than irred binary, skip
+ if (!k->isBin() || k->red())
+ continue;
+
+ ret = prop_bin_with_ancestor_info(p, k, confl);
+ if (ret == PROP_FAIL)
+ return analyzeFail(confl);
+
+ }
+ propStats.bogoProps += ws.size()*4;
+ }
+
+ //Propagate binary redundant
+ ret = PROP_NOTHING;
+ while (lBinQHead < trail.size()) {
+ const Lit p = trail[lBinQHead];
+ watch_subarray_const ws = watches[~p];
+ propStats.bogoProps += 1;
+ size_t done = 0;
+
+ for(const Watched *k = ws.begin(), *end = ws.end(); k != end; k++, done++) {
+
+ //If something other than redundant binary, skip
+ if (!k->isBin() || !k->red())
+ continue;
+
+ ret = prop_bin_with_ancestor_info(p, k, confl);
+ if (ret == PROP_FAIL) {
+ return analyzeFail(confl);
+ } else if (ret == PROP_SOMETHING) {
+ propStats.bogoProps += done*4;
+ goto start;
+ } else {
+ assert(ret == PROP_NOTHING);
+ }
+ }
+ lBinQHead++;
+ propStats.bogoProps += done*4;
+ }
+
+ ret = PROP_NOTHING;
+ while (qhead < trail.size()) {
+ const Lit p = trail[qhead];
+ watch_subarray ws = watches[~p];
+ propStats.bogoProps += 1;
+
+ Watched* i = ws.begin();
+ Watched* j = ws.begin();
+ Watched* end = ws.end();
+ for(; i != end; i++) {
+ if (i->isBin()) {
+ *j++ = *i;
+ continue;
+ }
+
+ if (i->isClause()) {
+ ret = prop_normal_cl_with_ancestor_info(i, j, p, confl);
+ if (ret == PROP_SOMETHING || ret == PROP_FAIL) {
+ i++;
+ break;
+ } else {
+ assert(ret == PROP_NOTHING);
+ continue;
+ }
+ }
+ }
+ propStats.bogoProps += ws.size()*4;
+ while(i != end)
+ *j++ = *i++;
+ ws.shrink_(end-j);
+
+ if (ret == PROP_FAIL) {
+ return analyzeFail(confl);
+ } else if (ret == PROP_SOMETHING) {
+ propStats.bogoProps += ws.size()*4;
+ goto start;
+ }
+
+ qhead++;
+ propStats.bogoProps += ws.size()*4;
+ }
+
+ return lit_Undef;
+}
+
+Lit HyperEngine::prop_red_bin_dfs(
+ const StampType stampType
+ , PropBy& confl
+ , Lit& root
+ , bool& restart
+) {
+ propStats.bogoProps += 1;
+
+ const Lit p = toPropRedBin.top();
+ watch_subarray_const ws = watches[~p];
+ size_t done = 0;
+ for(const Watched *k = ws.begin(), *end = ws.end()
+ ; k != end
+ ; k++, done++
+ ) {
+ propStats.bogoProps += 1;
+
+ //If something other than redundant binary, skip
+ if (!k->isBin() || !k->red())
+ continue;
+
+ PropResult ret = prop_bin_with_ancestor_info(p, k, confl);
+ switch(ret) {
+ case PROP_FAIL:
+ close_all_timestamps(stampType);
+ return analyzeFail(confl);
+
+ case PROP_SOMETHING:
+ propStats.bogoProps += 8;
+ stamp.stampingTime++;
+ stamp.tstamp[trail.back().toInt()].start[stampType] = stamp.stampingTime;
+
+ //Root for literals propagated afterwards will be this literal
+ root = trail.back();
+
+ #ifdef DEBUG_STAMPING
+ cout
+ << "From " << p << " enqueued " << trail.back()
+ << " for stamp.stampingTime " << stamp.stampingTime
+ << endl;
+ #endif
+
+ toPropNorm.push(trail.back());
+ toPropBin.push(trail.back());
+ toPropRedBin.push(trail.back());
+ propStats.bogoProps += done*4;
+ restart = true;
+ return lit_Undef;
+
+ case PROP_NOTHING:
+ break;
+
+ default:
+ assert(false);
+ break;
+ }
+ }
+
+ //Finished with this literal of this type
+ propStats.bogoProps += ws.size()*4;
+ toPropRedBin.pop();
+
+ return lit_Undef;
+}
+
+Lit HyperEngine::prop_irred_bin_dfs(
+ StampType stampType
+ , PropBy& confl
+ , const Lit //root
+ , bool& restart
+) {
+ const Lit p = toPropBin.top();
+ watch_subarray_const ws = watches[~p];
+ size_t done = 0;
+ for(const Watched *k = ws.begin(), *end = ws.end()
+ ; k != end
+ ; k++, done++
+ ) {
+ propStats.bogoProps += 1;
+ //Pre-fetch long clause
+ if (k->isClause()) {
+ if (value(k->getBlockedLit()) != l_True) {
+ const ClOffset offset = k->get_offset();
+ __builtin_prefetch(cl_alloc.ptr(offset));
+ }
+
+ continue;
+ } //end CLAUSE
+
+ //If something other than binary, skip
+ if (!k->isBin())
+ continue;
+
+ //If stamping only irred, go over red binaries
+ if (stampType == STAMP_IRRED
+ && k->red()
+ ) {
+ continue;
+ }
+
+ PropResult ret = prop_bin_with_ancestor_info(p, k, confl);
+ switch(ret) {
+ case PROP_FAIL:
+ close_all_timestamps(stampType);
+ return analyzeFail(confl);
+
+ case PROP_SOMETHING:
+ propStats.bogoProps += 8;
+ stamp.stampingTime++;
+ stamp.tstamp[trail.back().toInt()].start[stampType] = stamp.stampingTime;
+ #ifdef DEBUG_STAMPING
+ cout
+ << "From " << p << " enqueued " << trail.back()
+ << " for stamp.stampingTime " << stamp.stampingTime
+ << endl;
+ #endif
+
+ toPropNorm.push(trail.back());
+ toPropBin.push(trail.back());
+ if (stampType == STAMP_IRRED) toPropRedBin.push(trail.back());
+ propStats.bogoProps += done*4;
+ restart = true;
+ return lit_Undef;
+
+ case PROP_NOTHING:
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ }
+
+ //Finished with this literal
+ propStats.bogoProps += ws.size()*4;
+ toPropBin.pop();
+ stamp.stampingTime++;
+ stamp.tstamp[p.toInt()].end[stampType] = stamp.stampingTime;
+ #ifdef DEBUG_STAMPING
+ cout
+ << "End time for " << p
+ << " is " << stamp.stampingTime
+ << endl;
+ #endif
+
+ return lit_Undef;
+}
+
+Lit HyperEngine::prop_larger_than_bin_cl_dfs(
+ StampType stampType
+ , PropBy& confl
+ , Lit& root
+ , bool& restart
+) {
+ PropResult ret = PROP_NOTHING;
+ const Lit p = toPropNorm.top();
+ watch_subarray ws = watches[~p];
+ propStats.bogoProps += 1;
+
+ Watched* i = ws.begin();
+ Watched* j = ws.begin();
+ Watched* end = ws.end();
+ for(; i != end; i++) {
+ propStats.bogoProps += 1;
+ if (i->isBin()) {
+ *j++ = *i;
+ continue;
+ }
+
+ if (i->isClause()) {
+ ret = prop_normal_cl_with_ancestor_info(i, j, p, confl);
+ if (ret == PROP_SOMETHING || ret == PROP_FAIL) {
+ i++;
+ break;
+ } else {
+ assert(ret == PROP_NOTHING);
+ continue;
+ }
+ }
+ }
+ while(i != end)
+ *j++ = *i++;
+ ws.shrink_(end-j);
+
+ switch(ret) {
+ case PROP_FAIL:
+ close_all_timestamps(stampType);
+ return analyzeFail(confl);
+
+ case PROP_SOMETHING:
+ propStats.bogoProps += 8;
+ stamp.stampingTime++;
+ #ifdef DEBUG_STAMPING
+ cout
+ << "From (long-reduced) " << p << " enqueued << " << trail.back()
+ << " for stamp.stampingTime " << stamp.stampingTime
+ << endl;
+ #endif
+ stamp.tstamp[trail.back().toInt()].start[stampType] = stamp.stampingTime;
+ if (stampType == STAMP_IRRED) {
+ //Root for literals propagated afterwards will be this literal
+ root = trail.back();
+ toPropRedBin.push(trail.back());
+ }
+
+ toPropNorm.push(trail.back());
+ toPropBin.push(trail.back());
+ propStats.bogoProps += ws.size()*8;
+ restart = true;
+ return lit_Undef;
+
+ case PROP_NOTHING:
+ break;
+
+ default:
+ assert(false);
+ break;
+ }
+
+ //Finished with this literal
+ propStats.bogoProps += ws.size()*8;
+ toPropNorm.pop();
+
+ return lit_Undef;
+}
+
+bool HyperEngine::need_early_abort_dfs(
+ StampType stampType
+ , const size_t timeout
+) {
+ //Early-abort if too much time was used (from prober)
+ if (propStats.otfHyperTime + propStats.bogoProps > timeout) {
+ close_all_timestamps(stampType);
+ timedOutPropagateFull = true;
+ return true;
+ }
+ return false;
+}
+
+Lit HyperEngine::propagate_dfs(
+ const StampType stampType
+ , const uint64_t timeout
+) {
+ timedOutPropagateFull = false;
+ propStats.otfHyperPropCalled++;
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Prop full started" << endl;
+ #endif
+
+ PropBy confl;
+
+ //Assert startup: only 1 enqueued, uselessBin is empty
+ assert(uselessBin.empty());
+ assert(decisionLevel() == 1);
+
+ //The toplevel decision has to be set specifically
+ //If we came here as part of a backtrack to decision level 1, then
+ //this is already set, and there is no need to set it
+ if (trail.size() - trail_lim.back() == 1) {
+ //Set up root node
+ Lit root = trail[qhead];
+ varData[root.var()].reason = PropBy(~lit_Undef, false, false, false);
+ }
+
+ //Set up stacks
+ toPropBin.clear();
+ toPropRedBin.clear();
+ toPropNorm.clear();
+
+ Lit root = trail.back();
+ toPropBin.push(root);
+ toPropNorm.push(root);
+ if (stampType == STAMP_RED)
+ toPropRedBin.push(root);
+
+ //Setup
+ needToAddBinClause.clear();
+ stamp.stampingTime++;
+ stamp.tstamp[root.toInt()].start[stampType] = stamp.stampingTime;
+
+ #ifdef DEBUG_STAMPING
+ cout
+ << "Top-enqueued << " << trail.back()
+ << " for stamp.stampingTime " << stamp.stampingTime
+ << endl;
+ #endif
+
+ while(true) {
+ propStats.bogoProps += 3;
+ if (need_early_abort_dfs(stampType, timeout))
+ return lit_Undef;
+
+ //Propagate binary irred
+ bool restart = false;
+ while (!toPropBin.empty()) {
+ Lit ret = prop_irred_bin_dfs(stampType, confl, root, restart);
+ if (ret != lit_Undef)
+ return ret;
+ if (restart)
+ break;
+ }
+ if (restart)
+ continue;
+
+ if (stampType == STAMP_IRRED) {
+ while (!toPropRedBin.empty()) {
+ Lit ret = prop_red_bin_dfs(stampType, confl, root, restart);
+ if (ret != lit_Undef)
+ return ret;
+ if (restart)
+ break;
+ }
+ }
+ if (restart)
+ continue;
+
+ while (!toPropNorm.empty()) {
+ Lit ret = prop_larger_than_bin_cl_dfs(stampType, confl, root, restart);
+ if (ret != lit_Undef)
+ return ret;
+ if (restart)
+ break;
+
+ qhead++;
+ }
+ if (restart)
+ continue;
+
+ //Nothing more to propagate
+ break;
+ }
+
+ return lit_Undef;
+}
+
+
+void HyperEngine::close_all_timestamps(const StampType stampType)
+{
+ while(!toPropBin.empty())
+ {
+ stamp.stampingTime++;
+ stamp.tstamp[toPropBin.top().toInt()].end[stampType] = stamp.stampingTime;
+ #ifdef DEBUG_STAMPING
+ cout
+ << "End time for " << toPropBin.top()
+ << " is " << stamp.stampingTime
+ << " (due to failure, closing all nodes)"
+ << endl;
+ #endif
+
+ toPropBin.pop();
+ }
+}
+
+
+//Add binary clause to deepest common ancestor
+void HyperEngine::add_hyper_bin(const Lit p)
+{
+ propStats.otfHyperTime += 2;
+
+ Lit deepestAncestor = lit_Undef;
+ bool hyperBinNotAdded = true;
+ if (currAncestors.size() > 1) {
+ deepestAncestor = deepest_common_ancestor();
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Adding hyper-bin clause: " << p << " , " << ~deepestAncestor << endl;
+ #endif
+ needToAddBinClause.insert(BinaryClause(p, ~deepestAncestor, true));
+ *drat << add
+ #ifdef STATS_NEEDED
+ << clauseID++ << sumConflicts
+ #endif
+ << p << (~deepestAncestor) << fin;
+
+ hyperBinNotAdded = false;
+ } else {
+ //0-level propagation is NEVER made by propFull
+ assert(currAncestors.size() > 0);
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout
+ << "Not adding hyper-bin because only ONE lit is not set at"
+ << "level 0 in long clause, but that long clause needs to be cleaned"
+ << endl;
+ #endif
+ deepestAncestor = currAncestors[0];
+ hyperBinNotAdded = true;
+ }
+
+ enqueue_with_acestor_info(p, deepestAncestor, true);
+ varData[p.var()].reason.setHyperbin(true);
+ varData[p.var()].reason.setHyperbinNotAdded(hyperBinNotAdded);
+}
+
+/**
+We can try both ways: either binary clause can be removed.
+Try to remove one, then the other
+Return which one is to be removed
+*/
+Lit HyperEngine::remove_which_bin_due_to_trans_red(
+ Lit conflict
+ , Lit thisAncestor
+ , bool thisStepRed
+) {
+ propStats.otfHyperTime += 1;
+ const PropBy& data = varData[conflict.var()].reason;
+
+ bool onlyIrred = !data.isRedStep();
+ Lit lookingForAncestor = data.getAncestor();
+
+ if (thisAncestor == lit_Undef || lookingForAncestor == lit_Undef)
+ return lit_Undef;
+
+ propStats.otfHyperTime += 1;
+ bool second_is_deeper = false;
+ bool ambivalent = true;
+ if (use_depth_trick) {
+ ambivalent = depth[thisAncestor.var()] == depth[lookingForAncestor.var()];
+ if (depth[thisAncestor.var()] < depth[lookingForAncestor.var()]) {
+ second_is_deeper = true;
+ }
+ }
+ #ifdef DEBUG_DEPTH
+ cout
+ << "1st: " << std::setw(6) << thisAncestor
+ << " depth: " << std::setw(4) << depth[thisAncestor.var()]
+ << " 2nd: " << std::setw(6) << lookingForAncestor
+ << " depth: " << std::setw(4) << depth[lookingForAncestor.var()]
+ ;
+ #endif
+
+
+ if ((ambivalent || !second_is_deeper) &&
+ is_ancestor_of(
+ conflict
+ , thisAncestor
+ , thisStepRed
+ , onlyIrred
+ , lookingForAncestor
+ )
+ ) {
+ #ifdef DEBUG_DEPTH
+ cout << " -- OK" << endl;
+ #endif
+ //assert(ambivalent || !second_is_deeper);
+ return thisAncestor;
+ }
+
+ onlyIrred = !thisStepRed;
+ thisStepRed = data.isRedStep();
+ std::swap(lookingForAncestor, thisAncestor);
+ if ((ambivalent || second_is_deeper) &&
+ is_ancestor_of(
+ conflict
+ , thisAncestor
+ , thisStepRed
+ , onlyIrred
+ , lookingForAncestor
+ )
+ ) {
+ #ifdef DEBUG_DEPTH
+ cout << " -- OK" << endl;
+ #endif
+ //assert(ambivalent || second_is_deeper);
+ return thisAncestor;
+ }
+
+ #ifdef DEBUG_DEPTH
+ cout << " -- NOTK" << endl;
+ #endif
+
+ return lit_Undef;
+}
+
+/**
+hop backwards from thisAncestor until:
+1) we reach ancestor of 'conflict' -- at this point, we return TRUE
+2) we reach an invalid point. Either root, or an invalid hop. We return FALSE.
+*/
+bool HyperEngine::is_ancestor_of(
+ const Lit conflict
+ , Lit thisAncestor
+ , const bool thisStepRed
+ , const bool onlyIrred
+ , const Lit lookingForAncestor
+) {
+ propStats.otfHyperTime += 1;
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "is_ancestor_of."
+ << "conflict: " << conflict
+ << " thisAncestor: " << thisAncestor
+ << " thisStepRed: " << thisStepRed
+ << " onlyIrred: " << onlyIrred
+ << " lookingForAncestor: " << lookingForAncestor << endl;
+ #endif
+
+ //Was propagated at level 0 -- clauseCleaner will remove the clause
+ if (lookingForAncestor == lit_Undef)
+ return false;
+
+ if (lookingForAncestor == thisAncestor) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Last position inside prop queue is not saved during propFull" << endl
+ << "This may be the same exact binary clause -- not removing" << endl;
+ #endif
+ return false;
+ }
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Looking for ancestor of " << conflict << " : " << lookingForAncestor << endl;
+ cout << "This step based on redundant cl? " << (thisStepRed ? "yes" : "false") << endl;
+ cout << "Only irred is acceptable?" << (onlyIrred ? "yes" : "no") << endl;
+ cout << "This step would be based on redundant cl?" << (thisStepRed ? "yes" : "no") << endl;
+ #endif
+
+ if (onlyIrred && thisStepRed) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "This step doesn't work -- is redundant but needs irred" << endl;
+ #endif
+ return false;
+ }
+
+ //This is as low as we should search -- we cannot find what we are searchig for lower than this
+ const size_t bottom = depth[lookingForAncestor.var()];
+
+ while(thisAncestor != lit_Undef
+ && (!use_depth_trick || bottom <= depth[thisAncestor.var()])
+ ) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Current acestor: " << thisAncestor
+ << " redundant step? " << varData[thisAncestor.var()].reason.isRedStep()
+ << endl;
+ #endif
+
+ if (thisAncestor == conflict) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "We are trying to step over the conflict."
+ << " That would create a loop." << endl;
+ #endif
+ return false;
+ }
+
+ if (thisAncestor == lookingForAncestor) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Ancestor found" << endl;
+ #endif
+ return true;
+ }
+
+ const PropBy& data = varData[thisAncestor.var()].reason;
+ if ((onlyIrred && data.isRedStep())
+ || data.getHyperbinNotAdded()
+ ) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Wrong kind of hop would be needed" << endl;
+ #endif
+ return false; //reached would-be redundant hop (but this is irred)
+ }
+
+ thisAncestor = data.getAncestor();
+ propStats.otfHyperTime += 1;
+ }
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Exit, reached root" << endl;
+ #endif
+
+ return false;
+}
+
+void HyperEngine::add_hyper_bin(const Lit p, const Clause& cl)
+{
+ assert(value(p.var()) == l_Undef);
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Enqueing " << p
+ << " with ancestor clause: " << cl
+ << endl;
+ #endif
+
+ currAncestors.clear();
+ size_t i = 0;
+ for (Clause::const_iterator
+ it = cl.begin(), end = cl.end()
+ ; it != end
+ ; ++it, i++
+ ) {
+ if (*it != p) {
+ assert(value(*it) == l_False);
+ if (varData[it->var()].level != 0)
+ currAncestors.push_back(~*it);
+ }
+ }
+
+ add_hyper_bin(p);
+}
+
+//Analyze why did we fail at decision level 1
+Lit HyperEngine::analyzeFail(const PropBy propBy)
+{
+ //Clear out the datastructs we will be usin
+ currAncestors.clear();
+
+ //First, we set the ancestors, based on the clause
+ //Each literal in the clause is an ancestor. So just 'push' them inside the
+ //'currAncestors' variable
+ switch(propBy.getType()) {
+ case binary_t: {
+ const Lit lit = ~propBy.lit2();
+ if (varData[lit.var()].level != 0)
+ currAncestors.push_back(lit);
+
+ if (varData[failBinLit.var()].level != 0)
+ currAncestors.push_back(~failBinLit);
+
+ break;
+ }
+
+ case clause_t: {
+ const uint32_t offset = propBy.get_offset();
+ const Clause& cl = *cl_alloc.ptr(offset);
+ for(size_t i = 0; i < cl.size(); i++) {
+ if (varData[cl[i].var()].level != 0)
+ currAncestors.push_back(~cl[i]);
+ }
+ break;
+ }
+
+ case null_clause_t:
+ assert(false);
+ break;
+ }
+
+ Lit foundLit = deepest_common_ancestor();
+
+ return foundLit;
+}
+
+Lit HyperEngine::deepest_common_ancestor()
+{
+ //Then, we go back on each ancestor recursively, and exit on the first one
+ //that unifies ALL the previous ancestors. That is the lowest common ancestor
+ assert(toClear.empty());
+ Lit foundLit = lit_Undef;
+ while(foundLit == lit_Undef) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "LEVEL analyzeFail" << endl;
+ #endif
+ size_t num_lit_undef = 0;
+ for (vector<Lit>::iterator
+ it = currAncestors.begin(), end = currAncestors.end()
+ ; it != end
+ ; ++it
+ ) {
+ propStats.otfHyperTime += 1;
+
+ //We have reached the top of the graph, the other 'threads' that
+ //are still stepping back will find which literal is the lowest
+ //common ancestor
+ if (*it == lit_Undef) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "seen lit_Undef" << endl;
+ #endif
+ num_lit_undef++;
+ assert(num_lit_undef != currAncestors.size());
+ continue;
+ }
+
+ //Increase path count
+ seen[it->toInt()]++;
+
+ //Visited counter has to be cleared later, so add it to the
+ //to-be-cleared set
+ if (seen[it->toInt()] == 1)
+ toClear.push_back(*it);
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "seen " << *it << " : " << seen[it->toInt()] << endl;
+ #endif
+
+ //Is this point where all the 'threads' that are stepping backwards
+ //reach each other? If so, we have found what we were looking for!
+ //We can exit, and return 'foundLit'
+ if (seen[it->toInt()] == currAncestors.size()) {
+ foundLit = *it;
+ break;
+ }
+
+ //Update ancestor to its own ancestor, i.e. step up this 'thread'
+ *it = varData[it->var()].reason.getAncestor();
+ }
+ }
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "END" << endl;
+ #endif
+ assert(foundLit != lit_Undef);
+
+ //Clear nodes we have visited
+ propStats.otfHyperTime += toClear.size()/2;
+ for(const Lit lit: toClear) {
+ seen[lit.toInt()] = 0;
+ }
+ toClear.clear();
+
+ return foundLit;
+}
+
+void HyperEngine::remove_bin_clause(Lit lit)
+{
+ //The binary clause we should remove
+ const BinaryClause clauseToRemove(
+ ~varData[lit.var()].reason.getAncestor()
+ , lit
+ , varData[lit.var()].reason.isRedStep()
+ );
+
+ //We now remove the clause
+ //If it's hyper-bin, then we remove the to-be-added hyper-binary clause
+ //However, if the hyper-bin was never added because only 1 literal was unbound at level 0 (i.e. through
+ //clause cleaning, the clause would have been 2-long), then we don't do anything.
+ if (!varData[lit.var()].reason.getHyperbin()) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Normal removing clause " << clauseToRemove << endl;
+ #endif
+ propStats.otfHyperTime += 2;
+ uselessBin.insert(clauseToRemove);
+ } else if (!varData[lit.var()].reason.getHyperbinNotAdded()) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Removing hyper-bin clause " << clauseToRemove << endl;
+ #endif
+ propStats.otfHyperTime += needToAddBinClause.size()/4;
+ std::set<BinaryClause>::iterator it = needToAddBinClause.find(clauseToRemove);
+
+ //In case this is called after a backtrack to decisionLevel 1
+ //then in fact we might have already cleaned the
+ //'needToAddBinClause'. When called from probing, the IF below
+ //must ALWAYS be true
+ if (it != needToAddBinClause.end()) {
+ propStats.otfHyperTime += 2;
+ needToAddBinClause.erase(it);
+ }
+ //This will subsume the clause later, so don't remove it
+ }
+}
+
+PropResult HyperEngine::prop_bin_with_ancestor_info(
+ const Lit p
+ , const Watched* k
+ , PropBy& confl
+) {
+ const Lit lit = k->lit2();
+ const lbool val = value(lit);
+ if (val == l_Undef) {
+ #ifdef STATS_NEEDED
+ if (k->red())
+ propStats.propsBinRed++;
+ else
+ propStats.propsBinIrred++;
+ #endif
+
+ //Never propagated before
+ enqueue_with_acestor_info(lit, p, k->red());
+ return PROP_SOMETHING;
+
+ } else if (val == l_False) {
+ //Conflict
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Conflict from " << p << " , " << lit << endl;
+ #endif //VERBOSE_DEBUG_FULLPROP
+
+ //Update stats
+ if (k->red())
+ lastConflictCausedBy = ConflCausedBy::binred;
+ else
+ lastConflictCausedBy = ConflCausedBy::binirred;
+
+ failBinLit = lit;
+ confl = PropBy(~p, k->red());
+ return PROP_FAIL;
+
+ } else if (varData[lit.var()].level != 0 && perform_transitive_reduction) {
+ //Propaged already
+ assert(val == l_True);
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Lit " << p << " also wants to propagate " << lit << endl;
+ #endif
+ Lit remove = remove_which_bin_due_to_trans_red(lit, p, k->red());
+
+ //Remove this one
+ if (remove == p) {
+ Lit origAnc = varData[lit.var()].reason.getAncestor();
+ assert(origAnc != lit_Undef);
+
+ remove_bin_clause(lit);
+
+ //Update data indicating what lead to lit
+ varData[lit.var()].reason = PropBy(~p, k->red(), false, false);
+ assert(varData[p.var()].level != 0);
+ depth[lit.var()] = depth[p.var()] + 1;
+ //NOTE: we don't update the levels of other literals... :S
+
+ //for correctness, we would need this, but that would need re-writing of history :S
+ //if (!onlyIrred) return PropBy();
+
+ } else if (remove != lit_Undef) {
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Removing this bin clause" << endl;
+ #endif
+ propStats.otfHyperTime += 2;
+ uselessBin.insert(BinaryClause(~p, lit, k->red()));
+ }
+ }
+
+ return PROP_NOTHING;
+}
+
+
+PropResult HyperEngine::prop_normal_cl_with_ancestor_info(
+ Watched* i
+ , Watched*& j
+ , const Lit p
+ , PropBy& confl
+) {
+ //Blocked literal is satisfied, so clause is satisfied
+ if (value(i->getBlockedLit()) == l_True) {
+ *j++ = *i;
+ return PROP_NOTHING;
+ }
+
+ //Dereference pointer
+ propStats.bogoProps += 4;
+ const ClOffset offset = i->get_offset();
+ Clause& c = *cl_alloc.ptr(offset);
+ #ifdef STATS_NEEDED
+ c.stats.clause_looked_at++;
+ #endif
+
+ PropResult ret = prop_normal_helper(c, offset, j, p);
+ if (ret != PROP_TODO)
+ return ret;
+
+ // Did not find watch -- clause is unit under assignment:
+ *j++ = *i;
+ if (value(c[0]) == l_False) {
+ return handle_normal_prop_fail(c, offset, confl);
+ }
+
+ //Update stats
+ #ifdef STATS_NEEDED
+ c.stats.propagations_made++;
+ if (c.red())
+ propStats.propsLongRed++;
+ else
+ propStats.propsLongIrred++;
+ #endif
+
+ add_hyper_bin(c[0], c);
+
+ return PROP_SOMETHING;
+}
+
+size_t HyperEngine::mem_used() const
+{
+ size_t mem = 0;
+ mem += PropEngine::mem_used();
+ mem += toPropNorm.capacity()*sizeof(Lit);
+ mem += toPropBin.capacity()*sizeof(Lit);
+ mem += toPropRedBin.capacity()*sizeof(Lit);
+ mem += currAncestors.capacity()*sizeof(Lit);
+
+ return mem;
+}
+
+size_t HyperEngine::mem_used_stamp() const
+{
+ return stamp.mem_used();
+}
+
+size_t HyperEngine::print_stamp_mem(size_t totalMem) const
+{
+ const size_t mem = mem_used_stamp();
+ print_stats_line("c Mem for stamps"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, totalMem)
+ , "%"
+ );
+
+ return mem;
+}
+
+
+void HyperEngine::enqueue_with_acestor_info(
+ const Lit p
+ , const Lit ancestor
+ , const bool redStep
+) {
+ enqueue(p, PropBy(~ancestor, redStep, false, false));
+
+ assert(varData[ancestor.var()].level != 0);
+
+ if (use_depth_trick) {
+ depth[p.var()] = depth[ancestor.var()] + 1;
+ } else {
+ depth[p.var()] = 0;
+ }
+ #if defined(DEBUG_DEPTH) || defined(VERBOSE_DEBUG_FULLPROP)
+ cout
+ << "Enqueued "
+ << std::setw(6) << (p)
+ << " by " << std::setw(6) << (~ancestor)
+ << " at depth " << std::setw(4) << depth[p.var()]
+ << " at dec level: " << decisionLevel()
+ << endl;
+ #endif
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h b/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
new file mode 100644
index 000000000..e375b60c0
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/hyperengine.h
@@ -0,0 +1,125 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "cnf.h"
+#include "propby.h"
+#include "solvertypes.h"
+#include <vector>
+#include <set>
+#include "propengine.h"
+#include "mystack.h"
+
+
+using std::vector;
+using std::set;
+
+namespace CMSat {
+
+class HyperEngine : public PropEngine {
+public:
+ HyperEngine(const SolverConf *_conf, std::atomic<bool>* _must_interrupt_inter);
+ size_t print_stamp_mem(size_t totalMem) const;
+ size_t mem_used() const;
+ size_t mem_used_stamp() const;
+
+ bool use_depth_trick = true;
+ bool perform_transitive_reduction = true;
+ bool timedOutPropagateFull = false;
+ Lit propagate_bfs(
+ const uint64_t earlyAborTOut = std::numeric_limits<uint64_t>::max()
+ );
+ Lit propagate_dfs(
+ StampType stampType
+ , uint64_t earlyAborTOut = std::numeric_limits<uint64_t>::max()
+ );
+ set<BinaryClause> needToAddBinClause; ///<We store here hyper-binary clauses to be added at the end of propagateFull()
+ set<BinaryClause> uselessBin;
+
+ ///Add hyper-binary clause given this bin clause
+ void add_hyper_bin(Lit p);
+
+ ///Add hyper-binary clause given this large clause
+ void add_hyper_bin(Lit p, const Clause& cl);
+
+ void enqueue_with_acestor_info(const Lit p, const Lit ancestor, const bool redStep);
+
+private:
+ Lit analyzeFail(PropBy propBy);
+ void close_all_timestamps(const StampType stampType);
+ Lit remove_which_bin_due_to_trans_red(Lit conflict, Lit thisAncestor, const bool thisStepRed);
+ void remove_bin_clause(Lit lit);
+ bool is_ancestor_of(
+ const Lit conflict
+ , Lit thisAncestor
+ , const bool thisStepRed
+ , const bool onlyIrred
+ , const Lit lookingForAncestor
+ );
+
+ //Find lowest common ancestor, once 'currAncestors' has been filled
+ Lit deepest_common_ancestor();
+
+ PropResult prop_bin_with_ancestor_info(
+ const Lit p
+ , const Watched* k
+ , PropBy& confl
+ );
+
+ PropResult prop_normal_cl_with_ancestor_info(
+ Watched* i
+ , Watched*& j
+ , const Lit p
+ , PropBy& confl
+ );
+ Lit prop_red_bin_dfs(
+ StampType stampType
+ , PropBy& confl
+ , Lit& root
+ , bool& restart
+ );
+ Lit prop_irred_bin_dfs(
+ StampType stampType
+ , PropBy& confl
+ , const Lit root
+ , bool& restart
+ );
+ Lit prop_larger_than_bin_cl_dfs(
+ StampType stampType
+ , PropBy& confl
+ , Lit& root
+ , bool& restart
+ );
+ bool need_early_abort_dfs(
+ StampType stampType
+ , const size_t timeout
+ );
+
+ //For proiorty propagations
+ //
+ MyStack<Lit> toPropNorm;
+ MyStack<Lit> toPropBin;
+ MyStack<Lit> toPropRedBin;
+
+ vector<Lit> currAncestors;
+};
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp b/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
new file mode 100644
index 000000000..7a13c4981
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/implcache.cpp
@@ -0,0 +1,674 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "implcache.h"
+
+#ifndef TRANSCACHE_H_
+#define TRANSCACHE_H_
+
+#include "solver.h"
+#include "varreplacer.h"
+#include "varupdatehelper.h"
+#include "time_mem.h"
+#include "sqlstats.h"
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+//Make all literals as if propagated only by redundant
+void ImplCache::makeAllRed()
+{
+ for(vector<TransCache>::iterator
+ it = implCache.begin(), end = implCache.end()
+ ; it != end
+ ; ++it
+ ) {
+ it->makeAllRed();
+ }
+}
+
+size_t ImplCache::mem_used() const
+{
+ double numBytes = 0;
+ for(vector<TransCache>::const_iterator
+ it = implCache.begin(), end = implCache.end()
+ ; it != end
+ ; ++it
+ ) {
+ //1.2 is overhead
+ numBytes += (double)it->lits.capacity()*(double)sizeof(LitExtra)*1.2;
+ }
+ numBytes += implCache.capacity()*sizeof(vector<TransCache>);
+
+ return numBytes;
+}
+
+void ImplCache::print_stats(const Solver* solver) const
+{
+ cout
+ << "c --------- Implication Cache Stats Start ----------"
+ << endl;
+
+ print_statsSort(solver);
+
+ cout
+ << "c --------- Implication Cache Stats End ----------"
+ << endl;
+}
+
+void ImplCache::print_statsSort(const Solver* solver) const
+{
+ size_t numHasElems = 0;
+ size_t totalElems = 0;
+ size_t activeLits = 0;
+
+ for(size_t i = 0; i < implCache.size(); i++) {
+ Lit lit = Lit::toLit(i);
+
+ if (solver->varData[lit.var()].removed == Removed::none) {
+ activeLits++;
+ totalElems += implCache[i].lits.size();
+ numHasElems += !implCache[i].lits.empty();
+ }
+ }
+
+ print_stats_line(
+ "c lits having cache"
+ , stats_line_percent(numHasElems, activeLits)
+ , "% of decision lits"
+ );
+
+ print_stats_line(
+ "c num elems in cache/lit"
+ , stats_line_percent(totalElems, numHasElems)
+ , "extralits"
+ );
+}
+
+bool ImplCache::clean(Solver* solver, bool* setSomething)
+{
+ assert(solver->ok);
+ assert(solver->decisionLevel() == 0);
+ vector<Lit> toEnqueue;
+
+ double myTime = cpuTime();
+ uint64_t numUpdated = 0;
+ uint64_t numCleaned = 0;
+ uint64_t numFreed = 0;
+
+ //Merge in & free memory
+ for (uint32_t var = 0; var < solver->nVars(); var++) {
+
+ //If replaced, merge it into the one that replaced it
+ if (solver->varData[var].removed == Removed::replaced) {
+ for(int i = 0; i < 2; i++) {
+ const Lit litOrig = Lit(var, i);
+ if (implCache[litOrig.toInt()].lits.empty())
+ continue;
+
+ const Lit lit = solver->varReplacer->get_lit_replaced_with(litOrig);
+
+ //Updated literal must be normal, otherwise, biig problems e.g
+ //implCache is not even large enough, etc.
+ if (solver->varData[lit.var()].removed == Removed::none) {
+ bool taut = implCache.at(lit.toInt()).merge(
+ implCache[litOrig.toInt()].lits
+ , lit_Undef //nothing to add
+ , false //replaced, so 'irred'
+ , lit.var() //exclude the literal itself
+ , solver->seen
+ );
+
+ if (taut) {
+ toEnqueue.push_back(lit);
+ (*solver->drat) << add << lit
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ }
+ }
+ }
+ }
+
+ //Free it
+ if (solver->value(var) != l_Undef
+ || solver->varData[var].removed != Removed::none
+ ) {
+ vector<LitExtra> tmp1;
+ numFreed += implCache[Lit(var, false).toInt()].lits.capacity();
+ implCache[Lit(var, false).toInt()].lits.swap(tmp1);
+
+ vector<LitExtra> tmp2;
+ numFreed += implCache[Lit(var, true).toInt()].lits.capacity();
+ implCache[Lit(var, true).toInt()].lits.swap(tmp2);
+ }
+ }
+
+ vector<uint16_t>& inside = solver->seen;
+ vector<uint8_t>& irred = solver->seen2;
+ size_t wsLit = 0;
+ for(vector<TransCache>::iterator
+ trans = implCache.begin(), transEnd = implCache.end()
+ ; trans != transEnd
+ ; trans++, wsLit++
+ ) {
+ //Stats
+ size_t origSize = trans->lits.size();
+ size_t newSize = 0;
+
+ //Update to replaced vars, remove vars already set or eliminated
+ Lit vertLit = Lit::toLit(wsLit);
+ for (vector<LitExtra>::iterator end = trans->lits.end(),
+ it=trans->lits.begin(), it2 = trans->lits.begin()
+ ; it != end
+ ; ++it
+ ) {
+ Lit lit = it->getLit();
+ assert(lit.var() != vertLit.var());
+
+ //Remove if value is set
+ if (solver->value(lit.var()) != l_Undef)
+ continue;
+
+ //Update to its replaced version
+ if (solver->varData[lit.var()].removed == Removed::replaced) {
+ lit = solver->varReplacer->get_lit_replaced_with(lit);
+
+ //This would be tautological (and incorrect), so skip
+ if (lit.var() == vertLit.var())
+ continue;
+ numUpdated++;
+ }
+
+ //Yes, it's possible that the child was not set, but the parent is set
+ //This is because there is a delay between replacement and cache cleaning
+ if (solver->value(lit.var()) != l_Undef)
+ continue;
+
+ //If updated version is eliminated/decomposed, skip
+ if (solver->varData[lit.var()].removed != Removed::none)
+ continue;
+
+ //Mark irred
+ irred[lit.toInt()] |= (char)it->getOnlyIrredBin();
+
+ //If we have already visited this var, just skip over, but update irred
+ if (inside[lit.toInt()]) {
+ continue;
+ }
+
+ inside[lit.toInt()] = true;
+ *it2++ = LitExtra(lit, it->getOnlyIrredBin());
+ newSize++;
+ }
+ trans->lits.resize(newSize);
+
+ //Now that we have gone through the list, go through once more to:
+ //1) set irred right (above we might have it set later)
+ //2) clear 'inside'
+ //3) clear 'irred'
+ for (vector<LitExtra>::iterator
+ it2 = trans->lits.begin(), end2 = trans->lits.end()
+ ;it2 != end2
+ ; it2++
+ ) {
+ Lit lit = it2->getLit();
+
+ //Clear 'inside'
+ inside[lit.toInt()] = false;
+
+ //Clear 'irred'
+ const bool nRed = irred[lit.toInt()];
+ irred[lit.toInt()] = false;
+
+ //Set non-leartness correctly
+ *it2 = LitExtra(lit, nRed);
+ assert(solver->varData[it2->getLit().var()].removed == Removed::none);
+ assert(solver->value(it2->getLit()) == l_Undef);
+ }
+ numCleaned += origSize-trans->lits.size();
+ }
+
+ size_t origTrailDepth = solver->trail_size();
+ solver->fully_enqueue_these(toEnqueue);
+ if (setSomething) {
+ *setSomething = (solver->trail_size() != origTrailDepth);
+ }
+
+ const double time_used = cpuTime()-myTime;
+ if (solver->conf.verbosity) {
+ cout << "c [cache] cleaned."
+ << " Updated: " << std::setw(7) << numUpdated/1000 << " K"
+ << " Cleaned: " << std::setw(7) << numCleaned/1000 << " K"
+ << " Freed: " << std::setw(7) << numFreed/1000 << " K"
+ << solver->conf.print_times(time_used)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "clean cache"
+ , time_used
+ );
+ }
+
+ return solver->okay();
+}
+
+void ImplCache::handleNewData(
+ vector<uint8_t>& val
+ , uint32_t var
+ , Lit lit
+) {
+ //Unfortunately, we cannot add the clauses, because that could mess up
+ //the watchlists, which are being traversed by the callers, so we add these
+ //new truths as delayed clauses, and add them at the end
+
+ //a->b and (-a)->b, so 'b'
+ if (val[lit.var()] == lit.sign()) {
+ delayedClausesToAddNorm.push_back(lit);
+ runStats.bProp++;
+ } else {
+ //a->b, and (-a)->(-b), so equivalent literal
+ auto tmp = std::make_pair(Lit(var, false), Lit(lit.var(), false));
+ bool sign = lit.sign();
+ delayedClausesToAddXor.push_back(std::make_pair(tmp, sign));
+ runStats.bXProp++;
+ }
+}
+
+bool ImplCache::addDelayedClauses(Solver* solver)
+{
+ assert(solver->ok);
+ vector<Lit> tmp;
+
+ //Add all delayed clauses
+ if (solver->conf.doFindAndReplaceEqLits) {
+ for(const auto& x: delayedClausesToAddXor) {
+ Lit lit1 = x.first.first;
+ Lit lit2 = x.first.second;
+ if (solver->varData[lit1.var()].removed != Removed::none ||
+ solver->varData[lit2.var()].removed != Removed::none
+ ) {
+ //Var has been eliminated one way or another. Don't add this clause
+ continue;
+ }
+
+ //Add the clause
+ tmp.clear();
+ tmp.push_back(lit1);
+ tmp.push_back(lit2);
+ solver->add_xor_clause_inter(tmp, x.second, true);
+
+ //Check if this caused UNSAT
+ if (!solver->ok)
+ return false;
+ }
+ }
+
+ for(vector<Lit>::const_iterator
+ it = delayedClausesToAddNorm.begin(), end = delayedClausesToAddNorm.end()
+ ; it != end
+ ; ++it
+ ) {
+ //Build unit clause
+ tmp.resize(1);
+ tmp[0] = *it;
+
+ //Add unit clause
+ solver->add_clause_int(tmp);
+
+ //Check if this caused UNSAT
+ if (!solver->ok)
+ return false;
+ }
+
+ //Clear all
+ delayedClausesToAddXor.clear();
+ delayedClausesToAddNorm.clear();
+
+ return true;
+}
+
+bool ImplCache::tryBoth(Solver* solver)
+{
+ assert(solver->ok);
+ assert(solver->decisionLevel() == 0);
+ const size_t origTrailSize = solver->trail_size();
+ runStats.clear();
+ runStats.numCalls = 1;
+
+ //Measuring time & usefulness
+ double myTime = cpuTime();
+
+ for (uint32_t var = 0; var < solver->nVars(); var++) {
+
+ //If value is set or eliminated, skip
+ if (solver->value(var) != l_Undef
+ || solver->varData[var].removed != Removed::none
+ ) {
+ continue;
+ }
+
+ //Try to do it
+ tryVar(solver, var);
+
+ //Add all clauses that have been delayed
+ if (!addDelayedClauses(solver))
+ goto end;
+ }
+
+end:
+ const double time_used = cpuTime() - myTime;
+ runStats.zeroDepthAssigns = solver->trail_size() - origTrailSize;
+ runStats.cpu_time = time_used;
+ if (solver->conf.verbosity) {
+ runStats.print_short(solver);
+ }
+ globalStats += runStats;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "cache extractboth"
+ , time_used
+ );
+ }
+
+ return solver->okay();
+}
+
+void ImplCache::tryVar(
+ Solver* solver
+ , uint32_t var
+) {
+ //Sanity check
+ assert(solver->ok);
+ assert(solver->decisionLevel() == 0);
+
+ //Convenience
+ vector<uint16_t>& seen = solver->seen;
+ vector<uint8_t>& val = solver->seen2;
+
+ Lit lit = Lit(var, false);
+
+ const vector<LitExtra>& cache1 = implCache[lit.toInt()].lits;
+ assert(solver->watches.size() > (lit.toInt()));
+ watch_subarray_const ws1 = solver->watches[lit];
+ const vector<LitExtra>& cache2 = implCache[(~lit).toInt()].lits;
+ watch_subarray_const ws2 = solver->watches[~lit];
+
+ //Fill 'seen' and 'val' from cache
+ for (vector<LitExtra>::const_iterator
+ it = cache1.begin(), end = cache1.end()
+ ; it != end
+ ; ++it
+ ) {
+ const uint32_t var2 = it->getLit().var();
+
+ //A variable that has been really eliminated, skip
+ if (solver->varData[var2].removed != Removed::none) {
+ continue;
+ }
+
+ seen[it->getLit().var()] = 1;
+ val[it->getLit().var()] = it->getLit().sign();
+ }
+
+ //Fill 'seen' and 'val' from watch
+ for (const Watched *it = ws1.begin(), *end = ws1.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (!it->isBin())
+ continue;
+
+ const Lit otherLit = it->lit2();
+
+ if (!seen[otherLit.var()]) {
+ seen[otherLit.var()] = 1;
+ val[otherLit.var()] = otherLit.sign();
+ } else if (val[otherLit.var()] != otherLit.sign()) {
+ //(a->b, a->-b) -> so 'a'
+ delayedClausesToAddNorm.push_back(lit);
+ }
+ }
+ //Okay, filled
+
+ //Try to see if we propagate the same or opposite from the other end
+ //Using cache
+ for (vector<LitExtra>::const_iterator
+ it = cache2.begin(), end = cache2.end()
+ ; it != end
+ ; ++it
+ ) {
+ assert(it->getLit().var() != var);
+ const uint32_t var2 = it->getLit().var();
+
+ //Only if the other one also contained it
+ if (!seen[var2])
+ continue;
+
+ //If var has been removed, skip
+ if (solver->varData[var2].removed != Removed::none) {
+ continue;
+ }
+
+ handleNewData(val, var, it->getLit());
+ }
+
+ //Try to see if we propagate the same or opposite from the other end
+ //Using binary clauses
+ for (const Watched *it = ws2.begin(), *end = ws2.end(); it != end; ++it) {
+ if (!it->isBin())
+ continue;
+
+ assert(it->lit2().var() != var);
+ const uint32_t var2 = it->lit2().var();
+ assert(var2 < solver->nVars());
+
+ //Only if the other one also contained it
+ if (!seen[var2])
+ continue;
+
+ handleNewData(val, var, it->lit2());
+ }
+
+ //Clear 'seen' and 'val'
+ for (vector<LitExtra>::const_iterator it = cache1.begin(), end = cache1.end(); it != end; ++it) {
+ seen[it->getLit().var()] = false;
+ val[it->getLit().var()] = false;
+ }
+
+ for (const Watched *it = ws1.begin(), *end = ws1.end(); it != end; ++it) {
+ if (!it->isBin())
+ continue;
+
+ seen[it->lit2().var()] = false;
+ val[it->lit2().var()] = false;
+ }
+}
+
+bool TransCache::merge(
+ const vector<LitExtra>& otherLits //Lits to add
+ , const Lit extraLit //Add this, too to the list of lits
+ , const bool red //The step was a redundant-dependent step?
+ , const uint32_t leaveOut //Leave this literal out
+ , vector<uint16_t>& seen
+) {
+ //Mark every literal that is to be added in 'seen'
+ for (size_t i = 0, size = otherLits.size(); i < size; i++) {
+ const Lit lit = otherLits[i].getLit();
+ const bool onlyIrred = otherLits[i].getOnlyIrredBin();
+
+ seen[lit.toInt()] = 1 + (int)onlyIrred;
+ }
+
+ bool taut = mergeHelper(extraLit, red, seen);
+
+ //Whatever rests needs to be added
+ for (size_t i = 0 ,size = otherLits.size(); i < size; i++) {
+ const Lit lit = otherLits[i].getLit();
+ if (seen[lit.toInt()]) {
+ if (lit.var() != leaveOut)
+ lits.push_back(LitExtra(lit, !red && otherLits[i].getOnlyIrredBin()));
+ seen[lit.toInt()] = 0;
+ }
+ }
+
+ //Handle extra lit
+ if (extraLit != lit_Undef && seen[extraLit.toInt()]) {
+ if (extraLit.var() != leaveOut)
+ lits.push_back(LitExtra(extraLit, !red));
+ seen[extraLit.toInt()] = 0;
+ }
+
+ return taut;
+}
+
+bool TransCache::merge(
+ const vector<Lit>& otherLits //Lits to add
+ , const Lit extraLit //Add this, too to the list of lits
+ , const bool red //The step was a redundant-dependent step?
+ , const uint32_t leaveOut //Leave this literal out
+ , vector<uint16_t>& seen
+) {
+ //Mark every literal that is to be added in 'seen'
+ for (size_t i = 0, size = otherLits.size(); i < size; i++) {
+ const Lit lit = otherLits[i];
+ seen[lit.toInt()] = 1;
+ }
+
+ bool taut = mergeHelper(extraLit, red, seen);
+
+ //Whatever rests needs to be added
+ for (size_t i = 0 ,size = otherLits.size(); i < size; i++) {
+ const Lit lit = otherLits[i];
+ if (seen[lit.toInt()]) {
+ if (lit.var() != leaveOut)
+ lits.push_back(LitExtra(lit, false));
+ seen[lit.toInt()] = 0;
+ }
+ }
+
+ //Handle extra lit
+ if (extraLit != lit_Undef && seen[extraLit.toInt()]) {
+ if (extraLit.var() != leaveOut)
+ lits.push_back(LitExtra(extraLit, !red));
+ seen[extraLit.toInt()] = 0;
+ }
+
+ return taut;
+}
+
+bool TransCache::mergeHelper(
+ const Lit extraLit //Add this, too to the list of lits
+ , const bool red //The step was a redundant-dependent step?
+ , vector<uint16_t>& seen
+) {
+ bool taut = false;
+
+ //Handle extra lit
+ if (extraLit != lit_Undef)
+ seen[extraLit.toInt()] = 1 + (int)!red;
+
+ //Everything that's already in the cache, set seen[] to zero
+ //Also, if seen[] is 2, but it's marked redundant in the cache
+ //mark it as irred
+ for (size_t i = 0, size = lits.size(); i < size; i++) {
+ if (!red
+ && !lits[i].getOnlyIrredBin()
+ && seen[lits[i].getLit().toInt()] == 2
+ ) {
+ lits[i].setOnlyIrredBin();
+ }
+
+ seen[lits[i].getLit().toInt()] = 0;
+
+ //Both L and ~L are in, the ancestor is a tautology
+ if (seen[(~(lits[i].getLit())).toInt()]) {
+ taut = true;
+ }
+ }
+
+ return taut;
+}
+
+//Make all literals as if propagated only by redundant
+void TransCache::makeAllRed()
+{
+ for(size_t i = 0; i < lits.size(); i++) {
+ lits[i] = LitExtra(lits[i].getLit(), false);
+ }
+
+}
+
+void TransCache::updateVars(
+ const std::vector< uint32_t >& outerToInter
+ , const size_t newMaxVars
+) {
+ for(size_t i = 0; i < lits.size(); i++) {
+ lits[i] = LitExtra(getUpdatedLit(lits[i].getLit(), outerToInter), lits[i].getOnlyIrredBin());
+ assert(lits[i].getLit().var() < newMaxVars);
+ }
+
+}
+
+void ImplCache::updateVars(
+ vector<uint16_t>& seen
+ , const std::vector< uint32_t >& outerToInter
+ , const std::vector< uint32_t >& interToOuter2
+ , const size_t newMaxVar
+) {
+ updateBySwap(implCache, seen, interToOuter2);
+ for(size_t i = 0; i < implCache.size(); i++) {
+ implCache[i].updateVars(outerToInter, newMaxVar);
+ }
+}
+
+ImplCache::TryBothStats& ImplCache::TryBothStats::operator+=(const TryBothStats& other)
+{
+ numCalls += other.numCalls;
+ cpu_time += other.cpu_time;
+ zeroDepthAssigns += other.zeroDepthAssigns;
+ varReplaced += other.varReplaced;
+ bProp += other.bProp;
+ bXProp += other.bXProp;
+
+ return *this;
+}
+
+void ImplCache::TryBothStats::print_short(Solver* solver) const
+{
+ cout
+ << "c [bcache] "
+ //<< " set: " << bProp
+ << " 0-depth ass: " << zeroDepthAssigns
+ << " BXprop: " << bXProp
+ << solver->conf.print_times(cpu_time)
+ << endl;
+}
+
+
+#endif //TRANSCACHE_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/implcache.h b/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
new file mode 100644
index 000000000..a940ba30b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/implcache.h
@@ -0,0 +1,272 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef TRANSCACHE_H
+#define TRANSCACHE_H
+
+#include <vector>
+#include <limits>
+#include <algorithm>
+#include <vector>
+#include "constants.h"
+#include "solvertypes.h"
+
+namespace CMSat {
+
+class Solver;
+
+class LitExtra {
+public:
+ LitExtra() {}
+
+ LitExtra(const Lit l, const bool onlyNLBin)
+ {
+ x = ((uint32_t)onlyNLBin) | (l.toInt() << 1);
+ }
+
+ const Lit getLit() const
+ {
+ return Lit::toLit(x>>1);
+ }
+
+ bool getOnlyIrredBin() const
+ {
+ return x&1;
+ }
+
+ void setOnlyIrredBin()
+ {
+ x |= 0x1;
+ }
+
+ bool operator<(const LitExtra other) const
+ {
+ if (getOnlyIrredBin() && !other.getOnlyIrredBin()) return false;
+ if (!getOnlyIrredBin() && other.getOnlyIrredBin()) return true;
+ return (getLit() < other.getLit());
+ }
+
+ bool operator==(const LitExtra other) const
+ {
+ return x == other.x;
+ }
+
+ bool operator!=(const LitExtra other) const
+ {
+ return x != other.x;
+ }
+private:
+ uint32_t x;
+
+};
+
+class TransCache {
+public:
+ TransCache()
+ //conflictLastUpdated(std::numeric_limits<uint64_t>::max())
+ {}
+
+ bool merge(
+ const vector<LitExtra>& otherLits
+ , const Lit extraLit
+ , const bool red
+ , const uint32_t leaveOut
+ , vector<uint16_t>& seen
+ );
+ bool merge(
+ const vector<Lit>& otherLits //Lits to add
+ , const Lit extraLit //Add this, too to the list of lits
+ , const bool red //The step was a redundant-dependent step?
+ , const uint32_t leaveOut //Leave this literal out
+ , vector<uint16_t>& seen
+ );
+ void makeAllRed();
+
+ void updateVars(
+ const std::vector< uint32_t >& outerToInter
+ , const size_t newMaxVars
+ );
+
+ std::vector<LitExtra> lits;
+ //uint64_t conflictLastUpdated;
+
+private:
+ bool mergeHelper(
+ const Lit extraLit //Add this, too to the list of lits
+ , const bool red //The step was a redundant-dependent step?
+ , vector<uint16_t>& seen
+ );
+};
+
+inline std::ostream& operator<<(std::ostream& os, const TransCache& tc)
+{
+ for (size_t i = 0; i < tc.lits.size(); i++) {
+ os << tc.lits[i].getLit()
+ << "(" << (tc.lits[i].getOnlyIrredBin() ? "NL" : "L") << ") ";
+ }
+ return os;
+}
+
+class ImplCache {
+public:
+ void print_stats(const Solver* solver) const;
+ void print_statsSort(const Solver* solver) const;
+ size_t mem_used() const;
+ void makeAllRed();
+ void save_on_var_memorys(uint32_t newNumVars)
+ {
+ implCache.resize(newNumVars*2);
+ implCache.shrink_to_fit();
+ }
+
+ std::vector<TransCache> implCache;
+
+ std::vector<TransCache>::iterator begin()
+ {
+ return implCache.begin();
+ }
+
+ std::vector<TransCache>::iterator end()
+ {
+ return implCache.end();
+ }
+
+ std::vector<TransCache>::const_iterator begin() const
+ {
+ return implCache.begin();
+ }
+
+ std::vector<TransCache>::const_iterator end() const
+ {
+ return implCache.end();
+ }
+
+ const TransCache& operator[](const Lit at) const
+ {
+ return implCache[at.toInt()];
+ }
+
+ TransCache& operator[](const Lit at)
+ {
+ return implCache[at.toInt()];
+ }
+
+ void new_var()
+ {
+ implCache.push_back(TransCache());
+ implCache.push_back(TransCache());
+ }
+
+ void new_vars(const size_t n)
+ {
+ implCache.insert(implCache.end(), 2*n, TransCache());
+ }
+
+ size_t size() const
+ {
+ return implCache.size();
+ }
+
+ void updateVars(
+ vector<uint16_t>& seen
+ , const std::vector< uint32_t >& outerToInter
+ , const std::vector< uint32_t >& interToOuter2
+ , const size_t newMaxVars
+ );
+
+ bool clean(Solver* solver, bool* setSomething = NULL);
+ bool tryBoth(Solver* solver);
+
+ struct TryBothStats
+ {
+ void clear()
+ {
+ TryBothStats tmp;
+ *this = tmp;
+ }
+
+ TryBothStats& operator+=(const TryBothStats& other);
+ void print_short(Solver* solver) const;
+
+ uint64_t numCalls = 0;
+ double cpu_time = 0;
+ uint64_t zeroDepthAssigns = 0;
+ uint64_t varReplaced = 0;
+ uint64_t bProp = 0;
+ uint64_t bXProp = 0;
+ };
+
+ TryBothStats runStats;
+ TryBothStats globalStats;
+ const TryBothStats& get_stats() const
+ {
+ return globalStats;
+ }
+
+ void free()
+ {
+ vector<TransCache> tmp;
+ implCache.swap(tmp);
+ }
+
+ void clear()
+ {
+ for(vector<TransCache>::iterator
+ it = implCache.begin(), end = implCache.end()
+ ; it != end
+ ; ++it
+ ) {
+ it->lits.clear();
+ }
+ }
+
+private:
+ void tryVar(Solver* solver, uint32_t var);
+
+ void handleNewData(
+ vector<uint8_t>& val
+ , uint32_t var
+ , Lit lit
+ );
+
+ vector< std::pair<std::pair<Lit, Lit>, bool> > delayedClausesToAddXor;
+ vector<Lit> delayedClausesToAddNorm;
+ bool addDelayedClauses(Solver* solver);
+};
+
+} //end namespace
+
+namespace std
+{
+ template <>
+ inline void swap (CMSat::TransCache& m1, CMSat::TransCache& m2)
+ #ifdef _MSC_VER
+ throw()
+ #else
+ noexcept (true)
+ #endif
+ {
+ m1.lits.swap(m2.lits);
+ }
+}
+
+#endif //TRANSCACHE_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp b/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
new file mode 100644
index 000000000..0604eb997
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/intree.cpp
@@ -0,0 +1,459 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "intree.h"
+#include "solver.h"
+#include "varreplacer.h"
+#include "clausecleaner.h"
+#include "sqlstats.h"
+#include "watchalgos.h"
+
+#include <cmath>
+#include <cassert>
+
+using namespace CMSat;
+
+InTree::InTree(Solver* _solver) :
+ solver(_solver)
+ , seen(_solver->seen)
+{}
+
+bool InTree::replace_until_fixedpoint(bool& aborted)
+{
+ uint64_t time_limit =
+ solver->conf.intree_scc_varreplace_time_limitM*1000ULL*1000ULL
+ *solver->conf.global_timeout_multiplier
+ *0.5;
+ time_limit = (double)time_limit * std::min(std::pow((double)(numCalls+1), 0.2), 3.0);
+
+ aborted = false;
+ uint64_t bogoprops = 0;
+ uint32_t last_replace = std::numeric_limits<uint32_t>::max();
+ uint32_t this_replace = solver->varReplacer->get_num_replaced_vars();
+ while(last_replace != this_replace && !aborted) {
+ last_replace = this_replace;
+ solver->clauseCleaner->remove_and_clean_all();
+ bool OK = solver->varReplacer->replace_if_enough_is_found(0, &bogoprops);
+ if (!OK) {
+ return false;
+ }
+
+ if (solver->varReplacer->get_scc_depth_warning_triggered()) {
+ aborted = true;
+ return solver->okay();
+ }
+ this_replace = solver->varReplacer->get_num_replaced_vars();
+
+ if (bogoprops > time_limit) {
+ aborted = true;
+ return solver->okay();
+ }
+ }
+
+ return true;
+}
+
+bool InTree::watches_only_contains_nonbin(const Lit lit) const
+{
+ watch_subarray_const ws = solver->watches[lit];
+ for(const Watched w: ws) {
+ if (w.isBin()) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool InTree::check_timeout_due_to_hyperbin()
+{
+ assert(!(solver->timedOutPropagateFull && solver->drat->enabled()));
+ assert(!(solver->timedOutPropagateFull && solver->conf.simulate_drat));
+
+ if (solver->timedOutPropagateFull
+ && !solver->drat->enabled()
+ ) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [intree] intra-propagation timout,"
+ << " turning off OTF hyper-bin&trans-red"
+ << endl;
+ }
+
+ solver->conf.otfHyperbin = false;
+ return true;
+ }
+
+ return false;
+}
+
+void InTree::fill_roots()
+{
+ //l is root if no clause of form (l, l2).
+
+ roots.clear();
+ for(uint32_t i = 0; i < solver->nVars()*2; i++)
+ {
+ Lit lit(i/2, i%2);
+ if (solver->varData[lit.var()].removed != Removed::none
+ || solver->value(lit) != l_Undef
+ ) {
+ continue;
+ }
+
+ if (watches_only_contains_nonbin(lit)) {
+ roots.push_back(lit);
+ }
+ }
+}
+
+bool InTree::intree_probe()
+{
+ assert(solver->okay());
+ queue.clear();
+ reset_reason_stack.clear();
+ solver->use_depth_trick = false;
+ solver->perform_transitive_reduction = true;
+ hyperbin_added = 0;
+ removedIrredBin = 0;
+ removedRedBin = 0;
+ numCalls++;
+
+ bool aborted = false;
+ if (!replace_until_fixedpoint(aborted))
+ {
+ return solver->okay();
+ }
+ if (aborted) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [intree] too expensive or depth exceeded during SCC: aborting"
+ << endl;
+ }
+ solver->use_depth_trick = true;
+ solver->perform_transitive_reduction = true;
+ return true;
+ }
+
+ double myTime = cpuTime();
+ bogoprops_to_use =
+ solver->conf.intree_time_limitM*1000ULL*1000ULL
+ *solver->conf.global_timeout_multiplier;
+ bogoprops_to_use = (double)bogoprops_to_use * std::pow((double)(numCalls+1), 0.3);
+ bogoprops_remain = bogoprops_to_use;
+
+ fill_roots();
+ randomize_roots();
+
+ //Let's enqueue all ~root -s.
+ for(Lit lit: roots) {
+ enqueue(~lit, lit_Undef, false);
+ }
+
+ //clear seen
+ for(QueueElem elem: queue) {
+ if (elem.propagated != lit_Undef) {
+ seen[elem.propagated.toInt()] = 0;
+ }
+ }
+ const size_t orig_num_free_vars = solver->get_num_free_vars();
+
+ tree_look();
+ unmark_all_bins();
+
+ const double time_used = cpuTime() - myTime;
+ const double time_remain = float_div(bogoprops_remain, bogoprops_to_use);
+ const bool time_out = (bogoprops_remain < 0);
+
+ if (solver->conf.verbosity) {
+ cout << "c [intree] Set "
+ << (orig_num_free_vars - solver->get_num_free_vars())
+ << " vars"
+ << " hyper-added: " << hyperbin_added
+ << " trans-irred::" << removedIrredBin
+ << " trans-red::" << removedRedBin
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "intree"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ solver->use_depth_trick = true;
+ solver->perform_transitive_reduction = true;
+ return solver->okay();
+}
+
+void InTree::unmark_all_bins()
+{
+ for(watch_subarray wsub: solver->watches) {
+ for(Watched& w: wsub) {
+ if (w.isBin()) {
+ w.unmark_bin_cl();
+ }
+ }
+ }
+}
+
+void InTree::randomize_roots()
+{
+ for (size_t i = 0
+ ; i + 1< roots.size()
+ ; i++
+ ) {
+ std::swap(
+ roots[i]
+ , roots[i+solver->mtrand.randInt(roots.size()-1-i)]
+ );
+ }
+}
+
+void InTree::tree_look()
+{
+ assert(failed.empty());
+ depth_failed.clear();
+ depth_failed.push_back(false);
+ solver->propStats.clear();
+
+ bool timeout = false;
+ while(!queue.empty())
+ {
+ if ((int64_t)solver->propStats.bogoProps
+ + (int64_t)solver->propStats.otfHyperTime
+ > bogoprops_remain
+ || timeout
+ ) {
+ break;
+ }
+
+ const QueueElem elem = queue.front();
+ queue.pop_front();
+
+ if (solver->conf.verbosity >= 10) {
+ cout << "Dequeued [[" << elem << "]] dec lev:"
+ << solver->decisionLevel() << endl;
+ }
+
+ if (elem.propagated != lit_Undef) {
+ timeout = handle_lit_popped_from_queue(elem.propagated, elem.other_lit, elem.red);
+ } else {
+ assert(solver->decisionLevel() > 0);
+ solver->cancelUntil<false, true>(solver->decisionLevel()-1);
+
+ depth_failed.pop_back();
+ assert(!depth_failed.empty());
+
+ if (reset_reason_stack.empty()) {
+ assert(solver->decisionLevel() == 0);
+ } else {
+ assert(!reset_reason_stack.empty());
+ ResetReason tmp = reset_reason_stack.back();
+ reset_reason_stack.pop_back();
+ if (tmp.var_reason_changed != var_Undef) {
+ solver->varData[tmp.var_reason_changed].reason = tmp.orig_propby;
+ if (solver->conf.verbosity >= 10) {
+ cout << "RESet reason for VAR " << tmp.var_reason_changed+1 << " to: ????" << /*tmp.orig_propby.lit2() << */ " red: " << (int)tmp.orig_propby.isRedStep() << endl;
+ }
+ }
+ }
+ }
+
+ if (solver->decisionLevel() == 0) {
+ if (!empty_failed_list()) {
+ return;
+ }
+ }
+ }
+
+ bogoprops_remain -= (int64_t)solver->propStats.bogoProps + (int64_t)solver->propStats.otfHyperTime;
+
+ solver->cancelUntil<false, true>(0);
+ empty_failed_list();
+}
+
+bool InTree::handle_lit_popped_from_queue(const Lit lit, const Lit other_lit, const bool red)
+{
+ solver->new_decision_level();
+ depth_failed.push_back(depth_failed.back());
+ if (other_lit != lit_Undef) {
+ reset_reason_stack.push_back(ResetReason(var_Undef, PropBy()));
+ }
+
+ bool timeout = false;
+
+ if (solver->value(lit) == l_False
+ || depth_failed.back() == 1
+ ) {
+ //l is failed.
+ failed.push_back(~lit);
+ if (solver->conf.verbosity >= 10) {
+ cout << "Failed :" << ~lit << " level: " << solver->decisionLevel() << endl;
+ }
+
+ return false;
+ }
+
+ if (other_lit != lit_Undef) {
+ //update 'other_lit' 's ancestor to 'lit'
+ assert(solver->value(other_lit) == l_True);
+ reset_reason_stack.back() = ResetReason(other_lit.var(), solver->varData[other_lit.var()].reason);
+ solver->varData[other_lit.var()].reason = PropBy(~lit, red, false, false);
+ if (solver->conf.verbosity >= 10) {
+ cout << "Set reason for VAR " << other_lit.var()+1 << " to: " << ~lit << " red: " << (int)red << endl;
+ }
+ }
+
+ if (solver->value(lit) == l_Undef) {
+ solver->enqueue(lit);
+
+ //Should do HHBR here
+ bool ok;
+ if (solver->conf.otfHyperbin) {
+ uint64_t max_hyper_time = std::numeric_limits<uint64_t>::max();
+ if (!solver->drat->enabled() &&
+ !solver->conf.simulate_drat
+ ) {
+ max_hyper_time =
+ solver->propStats.otfHyperTime
+ + solver->propStats.bogoProps
+ + 1600ULL*1000ULL*1000ULL;
+ }
+
+ Lit ret = solver->propagate_bfs(
+ max_hyper_time //early-abort timeout
+ );
+ ok = (ret == lit_Undef);
+ timeout = check_timeout_due_to_hyperbin();
+ } else {
+ ok = solver->propagate<true>().isNULL();
+ }
+
+ if (!ok && !timeout) {
+ depth_failed.back() = 1;
+ failed.push_back(~lit);
+ if (solver->conf.verbosity >= 10) {
+ cout << "(timeout?) Failed :" << ~lit << " level: " << solver->decisionLevel() << endl;
+ }
+ } else {
+ hyperbin_added += solver->hyper_bin_res_all(false);
+ std::pair<size_t, size_t> tmp = solver->remove_useless_bins(true);
+ removedIrredBin += tmp.first;
+ removedRedBin += tmp.second;
+ }
+ solver->uselessBin.clear();
+ solver->needToAddBinClause.clear();
+ }
+
+ return timeout;
+}
+
+bool InTree::empty_failed_list()
+{
+ assert(solver->decisionLevel() == 0);
+ for(const Lit lit: failed) {
+ if (!solver->ok) {
+ return false;
+ }
+
+ if (solver->value(lit) == l_Undef) {
+ solver->enqueue(lit);
+ *(solver->drat) << add << lit
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ solver->ok = solver->propagate<true>().isNULL();
+ if (!solver->ok) {
+ return false;
+ }
+ } else if (solver->value(lit) == l_False) {
+ *(solver->drat) << add << ~lit
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ *(solver->drat) << add
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ solver->ok = false;
+ return false;
+ }
+ }
+ failed.clear();
+
+ return true;
+}
+
+
+// (lit V otherlit) exists -> (~otherlit, lit) in queue
+// Next: (~otherLit, lit2) exists -> (~lit2, ~otherLit) in queue
+// --> original ~otherlit got enqueued by lit2 = False (--> PropBy(lit2) ).
+
+void InTree::enqueue(const Lit lit, const Lit other_lit, bool red_cl)
+{
+ queue.push_back(QueueElem(lit, other_lit, red_cl));
+ assert(!seen[lit.toInt()]);
+ seen[lit.toInt()] = 1;
+ assert(solver->value(lit) == l_Undef);
+
+ watch_subarray ws = solver->watches[lit];
+ for(Watched& w: ws) {
+ if (w.isBin()
+ && seen[(~w.lit2()).toInt()] == 0
+ && solver->value(w.lit2()) == l_Undef
+ ) {
+ //Mark both
+ w.mark_bin_cl();
+ Watched& other_w = findWatchedOfBin(solver->watches, w.lit2(), lit, w.red());
+ other_w.mark_bin_cl();
+
+ enqueue(~w.lit2(), lit, w.red());
+ }
+ }
+ queue.push_back(QueueElem(lit_Undef, lit_Undef, false));
+}
+
+
+double InTree::mem_used() const
+{
+ double mem = 0;
+ mem += sizeof(InTree);
+ mem += roots.size()*sizeof(Lit);
+ mem += failed.size()*sizeof(Lit);
+ mem += reset_reason_stack.size()*sizeof(ResetReason);
+ mem += queue.size()*sizeof(QueueElem);
+ mem += depth_failed.size()*sizeof(char);
+ return mem;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/intree.h b/cryptominisat5/cryptominisat-5.6.3/src/intree.h
new file mode 100644
index 000000000..a4e4ab4f5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/intree.h
@@ -0,0 +1,116 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "cloffset.h"
+#include "solvertypes.h"
+#include "propby.h"
+
+#include <vector>
+#include <deque>
+using std::vector;
+using std::deque;
+
+namespace CMSat {
+
+class Solver;
+
+class InTree
+{
+public:
+ InTree(Solver* _solver);
+ bool intree_probe();
+
+ struct QueueElem
+ {
+ QueueElem(Lit _propagated, Lit _other_lit, bool _red) :
+ propagated(_propagated)
+ , other_lit(_other_lit)
+ , red(_red)
+ {}
+
+ Lit propagated;
+ Lit other_lit;
+ bool red;
+ };
+
+ struct ResetReason
+ {
+ ResetReason(uint32_t _var_reason_changed, PropBy _orig_propby) :
+ var_reason_changed(_var_reason_changed)
+ , orig_propby(_orig_propby)
+ {}
+
+ uint32_t var_reason_changed;
+ PropBy orig_propby;
+ };
+
+ double mem_used() const;
+
+private:
+
+ bool check_timeout_due_to_hyperbin();
+ void unmark_all_bins();
+ void randomize_roots();
+ bool handle_lit_popped_from_queue(const Lit lit, const Lit propagating, const bool red);
+ bool empty_failed_list();
+ void fill_roots();
+ bool watches_only_contains_nonbin(const Lit lit) const;
+ bool replace_until_fixedpoint(bool& aborted);
+ void enqueue(const Lit lit, const Lit other_lit, bool red_cl);
+
+ void setup();
+ void build_intree();
+ void do_one();
+ void tree_look();
+
+ vector<Lit> roots;
+ vector<Lit> failed;
+ vector<ResetReason> reset_reason_stack;
+ deque<QueueElem> queue;
+ vector<char> depth_failed;
+ int64_t bogoprops_to_use;
+ int64_t bogoprops_remain;
+
+ size_t hyperbin_added;
+ size_t removedIrredBin;
+ size_t removedRedBin;
+ size_t numCalls = 0;
+
+ Solver* solver;
+ vector<uint16_t>& seen;
+};
+
+inline std::ostream& operator<<(std::ostream& os, const InTree::QueueElem& elem)
+{
+ if (elem.propagated == lit_Undef) {
+ os << "NONE";
+ } else {
+ os << "prop:" << elem.propagated
+ << " other_lit:" << elem.other_lit
+ << " red: " << elem.red;
+ }
+
+ return os;
+}
+
+}
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/ipasir.cpp b/cryptominisat5/cryptominisat-5.6.3/src/ipasir.cpp
new file mode 100644
index 000000000..aea9acbb0
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/ipasir.cpp
@@ -0,0 +1,238 @@
+/******************************************
+Copyright (c) 2014, Tomas Balyo, Karlsruhe Institute of Technology.
+Copyright (c) 2014, Armin Biere, Johannes Kepler University.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+***********************************************/
+
+/**
+ * Return the name and the version of the incremental SAT
+ * solving library.
+ */
+
+#include "cryptominisat5/cryptominisat.h"
+#include <vector>
+#include <complex>
+#include <cassert>
+#include "constants.h"
+
+using std::vector;
+using namespace CMSat;
+struct MySolver {
+ ~MySolver()
+ {
+ delete solver;
+ }
+
+ MySolver()
+ {
+ solver = new SATSolver;
+ }
+
+ SATSolver* solver;
+ vector<Lit> clause;
+ vector<Lit> assumptions;
+};
+
+extern "C" {
+
+DLL_PUBLIC const char * ipasir_signature ()
+{
+ return SATSolver::get_version();
+}
+
+/**
+ * Construct a new solver and return a pointer to it.
+ * Use the returned pointer as the first parameter in each
+ * of the following functions.
+ *
+ * Required state: N/A
+ * State after: INPUT
+ */
+DLL_PUBLIC void * ipasir_init ()
+{
+ MySolver *s = new MySolver;
+ return (void*)s;
+}
+
+/**
+ * Release the solver, i.e., all its resoruces and
+ * allocated memory (destructor). The solver pointer
+ * cannot be used for any purposes after this call.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: undefined
+ */
+DLL_PUBLIC void ipasir_release (void * solver)
+{
+ MySolver* s = (MySolver*)solver;
+ delete s;
+}
+
+/**
+ * Add the given literal into the currently added clause
+ * or finalize the clause with a 0. Clauses added this way
+ * cannot be removed. The addition of removable clauses
+ * can be simulated using activation literals and assumptions.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT
+ *
+ * Literals are encoded as (non-zero) integers as in the
+ * DIMACS formats. They have to be smaller or equal to
+ * INT_MAX and strictly larger than INT_MIN (to avoid
+ * negation overflow). This applies to all the literal
+ * arguments in API functions.
+ */
+DLL_PUBLIC void ipasir_add (void * solver, int lit_or_zero)
+{
+ MySolver* s = (MySolver*)solver;
+
+ if (lit_or_zero == 0) {
+ s->solver->add_clause(s->clause);
+ s->clause.clear();
+ } else {
+ Lit lit(std::abs(lit_or_zero)-1, lit_or_zero < 0);
+ if (lit.var() >= s->solver->nVars()) {
+ const uint32_t toadd = lit.var() - s->solver->nVars() + 1;
+ s->solver->new_vars(toadd);
+ }
+ s->clause.push_back(lit);
+ }
+}
+
+/**
+ * Add an assumption for the next SAT search (the next call
+ * of ipasir_solve). After calling ipasir_solve all the
+ * previously added assumptions are cleared.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT
+ */
+DLL_PUBLIC void ipasir_assume (void * solver, int lit)
+{
+ MySolver* s = (MySolver*)solver;
+ Lit lit_cms(std::abs(lit)-1, lit < 0);
+ s->assumptions.push_back(lit_cms);
+}
+
+/**
+ * Solve the formula with specified clauses under the specified assumptions.
+ * If the formula is satisfiable the function returns 10 and the state of the solver is changed to SAT.
+ * If the formula is unsatisfiable the function returns 20 and the state of the solver is changed to UNSAT.
+ * If the search is interrupted (see ipasir_set_terminate) the function returns 0 and the state of the solver remains INPUT.
+ * This function can be called in any defined state of the solver.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT or SAT or UNSAT
+ */
+DLL_PUBLIC int ipasir_solve (void * solver)
+{
+ MySolver* s = (MySolver*)solver;
+ lbool ret = s->solver->solve(&(s->assumptions));
+ s->assumptions.clear();
+
+ if (ret == l_True) {
+ return 10;
+ }
+ if (ret == l_False) {
+ return 20;
+ }
+ if (ret == l_Undef) {
+ return 0;
+ }
+ assert(false);
+ exit(-1);
+}
+
+/**
+ * Get the truth value of the given literal in the found satisfying
+ * assignment. Return 'lit' if True, '-lit' if False, and 0 if not important.
+ * This function can only be used if ipasir_solve has returned 10
+ * and no 'ipasir_add' nor 'ipasir_assume' has been called
+ * since then, i.e., the state of the solver is SAT.
+ *
+ * Required state: SAT
+ * State after: SAT
+ */
+DLL_PUBLIC int ipasir_val (void * solver, int lit)
+{
+ MySolver* s = (MySolver*)solver;
+ assert(s->solver->okay());
+
+ const uint32_t var = std::abs(lit)-1;
+ lbool val = s->solver->get_model()[var];
+ if (val == l_Undef) {
+ return 0;
+ }
+ if (val == l_False) {
+ lit = -1*lit;
+ }
+ return lit;
+}
+
+/**
+ * Check if the given assumption literal was used to prove the
+ * unsatisfiability of the formula under the assumptions
+ * used for the last SAT search. Return 1 if so, 0 otherwise.
+ * This function can only be used if ipasir_solve has returned 20 and
+ * no ipasir_add or ipasir_assume has been called since then, i.e.,
+ * the state of the solver is UNSAT.
+ *
+ * Required state: UNSAT
+ * State after: UNSAT
+ */
+DLL_PUBLIC int ipasir_failed (void * solver, int lit)
+{
+ MySolver* s = (MySolver*)solver;
+ const vector<Lit>& confl = s->solver->get_conflict();
+ const Lit tofind(std::abs(lit)-1, lit < 0);
+
+ for(const Lit l: confl) {
+ if (l == tofind) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Set a callback function used to indicate a termination requirement to the
+ * solver. The solver will periodically call this function and check its return
+ * value during the search. The ipasir_set_terminate function can be called in any
+ * state of the solver, the state remains unchanged after the call.
+ * The callback function is of the form "int terminate(void * state)"
+ * - it returns a non-zero value if the solver should terminate.
+ * - the solver calls the callback function with the parameter "state"
+ * having the value passed in the ipasir_set_terminate function (2nd parameter).
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT or SAT or UNSAT
+ */
+DLL_PUBLIC void ipasir_set_terminate (void * /*solver*/, void * /*state*/, int (* /*terminate*/)(void * state))
+{
+ //this is complicated.
+}
+
+}
+
+DLL_PUBLIC void ipasir_set_learn (void * /*solver*/, void * /*state*/, int /*max_length*/, void (* /*learn*/)(void * state, int * clause))
+{
+ //this is complicated
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/ipasir.h b/cryptominisat5/cryptominisat-5.6.3/src/ipasir.h
new file mode 100644
index 000000000..18e5213cd
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/ipasir.h
@@ -0,0 +1,152 @@
+/******************************************
+Copyright (c) 2014, Tomas Balyo, Karlsruhe Institute of Technology.
+Copyright (c) 2014, Armin Biere, Johannes Kepler University.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+***********************************************/
+
+
+/* Part of the generic incremental SAT API called 'ipasir'.
+ * See 'LICENSE' for rights to use this software.
+ */
+#ifndef ipasir_h_INCLUDED
+#define ipasir_h_INCLUDED
+
+/**
+ * Return the name and the version of the incremental SAT
+ * solving library.
+ */
+const char * ipasir_signature ();
+
+/**
+ * Construct a new solver and return a pointer to it.
+ * Use the returned pointer as the first parameter in each
+ * of the following functions.
+ *
+ * Required state: N/A
+ * State after: INPUT
+ */
+void * ipasir_init ();
+
+/**
+ * Release the solver, i.e., all its resoruces and
+ * allocated memory (destructor). The solver pointer
+ * cannot be used for any purposes after this call.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: undefined
+ */
+void ipasir_release (void * solver);
+
+/**
+ * Add the given literal into the currently added clause
+ * or finalize the clause with a 0. Clauses added this way
+ * cannot be removed. The addition of removable clauses
+ * can be simulated using activation literals and assumptions.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT
+ *
+ * Literals are encoded as (non-zero) integers as in the
+ * DIMACS formats. They have to be smaller or equal to
+ * INT_MAX and strictly larger than INT_MIN (to avoid
+ * negation overflow). This applies to all the literal
+ * arguments in API functions.
+ */
+void ipasir_add (void * solver, int lit_or_zero);
+
+/**
+ * Add an assumption for the next SAT search (the next call
+ * of ipasir_solve). After calling ipasir_solve all the
+ * previously added assumptions are cleared.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT
+ */
+void ipasir_assume (void * solver, int lit);
+
+/**
+ * Solve the formula with specified clauses under the specified assumptions.
+ * If the formula is satisfiable the function returns 10 and the state of the solver is changed to SAT.
+ * If the formula is unsatisfiable the function returns 20 and the state of the solver is changed to UNSAT.
+ * If the search is interrupted (see ipasir_set_terminate) the function returns 0 and the state of the solver remains INPUT.
+ * This function can be called in any defined state of the solver.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT or SAT or UNSAT
+ */
+int ipasir_solve (void * solver);
+
+/**
+ * Get the truth value of the given literal in the found satisfying
+ * assignment. Return 'lit' if True, '-lit' if False, and 0 if not important.
+ * This function can only be used if ipasir_solve has returned 10
+ * and no 'ipasir_add' nor 'ipasir_assume' has been called
+ * since then, i.e., the state of the solver is SAT.
+ *
+ * Required state: SAT
+ * State after: SAT
+ */
+int ipasir_val (void * solver, int lit);
+
+/**
+ * Check if the given assumption literal was used to prove the
+ * unsatisfiability of the formula under the assumptions
+ * used for the last SAT search. Return 1 if so, 0 otherwise.
+ * This function can only be used if ipasir_solve has returned 20 and
+ * no ipasir_add or ipasir_assume has been called since then, i.e.,
+ * the state of the solver is UNSAT.
+ *
+ * Required state: UNSAT
+ * State after: UNSAT
+ */
+int ipasir_failed (void * solver, int lit);
+
+/**
+ * Set a callback function used to indicate a termination requirement to the
+ * solver. The solver will periodically call this function and check its return
+ * value during the search. The ipasir_set_terminate function can be called in any
+ * state of the solver, the state remains unchanged after the call.
+ * The callback function is of the form "int terminate(void * state)"
+ * - it returns a non-zero value if the solver should terminate.
+ * - the solver calls the callback function with the parameter "state"
+ * having the value passed in the ipasir_set_terminate function (2nd parameter).
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT or SAT or UNSAT
+ */
+void ipasir_set_terminate (void * solver, void * state, int (*terminate)(void * state));
+
+/**
+ * Set a callback function used to extract learned clauses up to a given lenght from the
+ * solver. The solver will call this function for each learned clause that satisfies
+ * the maximum length (literal count) condition. The ipasir_set_learn function can be called in any
+ * state of the solver, the state remains unchanged after the call.
+ * The callback function is of the form "void learn(void * state, int * clause)"
+ * - the solver calls the callback function with the parameter "state"
+ * having the value passed in the ipasir_set_terminate function (2nd parameter).
+ * - the argument "clause" is a pointer to a null terminated integer array containing the learned clause.
+ * the solver can change the data at the memory location that "clause" points to after the function call.
+ *
+ * Required state: INPUT or SAT or UNSAT
+ * State after: INPUT or SAT or UNSAT
+ */
+void ipasir_set_learn (void * solver, void * state, int max_length, void (*learn)(void * state, int * clause));
+
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/main.cpp b/cryptominisat5/cryptominisat-5.6.3/src/main.cpp
new file mode 100644
index 000000000..5c1715880
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/main.cpp
@@ -0,0 +1,1339 @@
+/*
+Copyright (c) 2010-2015 Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#if defined(__GNUC__) && defined(__linux__)
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <fenv.h>
+#endif
+
+#include <ctime>
+#include <cstring>
+#include <errno.h>
+#include <string.h>
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+#include <map>
+#include <set>
+#include <fstream>
+#include <sys/stat.h>
+#include <string.h>
+#include <list>
+#include <array>
+#include <thread>
+
+#include "main.h"
+#include "main_common.h"
+#include "time_mem.h"
+#include "dimacsparser.h"
+#include "cryptominisat5/cryptominisat.h"
+#include "signalcode.h"
+
+#include <boost/lexical_cast.hpp>
+using namespace CMSat;
+using boost::lexical_cast;
+
+using std::cout;
+using std::cerr;
+using std::endl;
+using boost::lexical_cast;
+using std::list;
+using std::map;
+
+struct WrongParam
+{
+ WrongParam(string _param, string _msg) :
+ param(_param)
+ , msg(_msg)
+ {}
+
+ const string& getMsg() const
+ {
+ return msg;
+ }
+
+ const string& getParam() const
+ {
+ return param;
+ }
+
+ string param;
+ string msg;
+};
+
+bool fileExists(const string& filename)
+{
+ struct stat buf;
+ if (stat(filename.c_str(), &buf) != -1)
+ {
+ return true;
+ }
+ return false;
+}
+
+
+Main::Main(int _argc, char** _argv) :
+ argc(_argc)
+ , argv(_argv)
+ , fileNamePresent (false)
+{
+}
+
+void Main::readInAFile(SATSolver* solver2, const string& filename)
+{
+ solver2->add_sql_tag("filename", filename);
+ if (conf.verbosity) {
+ cout << "c Reading file '" << filename << "'" << endl;
+ }
+ #ifndef USE_ZLIB
+ FILE * in = fopen(filename.c_str(), "rb");
+ DimacsParser<StreamBuffer<FILE*, FN> > parser(solver2, &debugLib, conf.verbosity);
+ #else
+ gzFile in = gzopen(filename.c_str(), "rb");
+ DimacsParser<StreamBuffer<gzFile, GZ> > parser(solver2, &debugLib, conf.verbosity);
+ #endif
+
+ if (in == NULL) {
+ std::cerr
+ << "ERROR! Could not open file '"
+ << filename
+ << "' for reading: " << strerror(errno) << endl;
+
+ std::exit(1);
+ }
+
+ bool strict_header = conf.preprocess;
+ if (!parser.parse_DIMACS(in, strict_header)) {
+ exit(-1);
+ }
+
+ if (!independent_vars_str.empty() && !parser.independent_vars.empty()) {
+ cerr << "ERROR! Independent vars set in console but also in CNF." << endl;
+ exit(-1);
+ }
+
+ if (!independent_vars_str.empty()) {
+ assert(independent_vars.empty());
+
+ std::stringstream ss(independent_vars_str);
+ uint32_t i;
+ while (ss >> i)
+ {
+ const uint32_t var = i-1;
+ independent_vars.push_back(var);
+
+ if (ss.peek() == ',' || ss.peek() == ' ')
+ ss.ignore();
+ }
+ } else {
+ independent_vars.swap(parser.independent_vars);
+ }
+
+ if (independent_vars.empty()) {
+ if (only_indep_solution) {
+ cout << "ERROR: only independent vars are requested in the solution, but no independent vars have been set!" << endl;
+ exit(-1);
+ }
+ } else {
+ solver2->set_independent_vars(&independent_vars);
+ cout << "c Independent vars set: ";
+ for(size_t i = 0; i < independent_vars.size(); i++) {
+ const uint32_t v = independent_vars[i];
+ cout << v+1;
+ if (i+1 != independent_vars.size())
+ cout << ",";
+ }
+ cout << endl;
+ }
+ call_after_parse();
+
+ #ifndef USE_ZLIB
+ fclose(in);
+ #else
+ gzclose(in);
+ #endif
+}
+
+void Main::readInStandardInput(SATSolver* solver2)
+{
+ if (conf.verbosity) {
+ cout
+ << "c Reading from standard input... Use '-h' or '--help' for help."
+ << endl;
+ }
+
+ #ifndef USE_ZLIB
+ FILE * in = stdin;
+ #else
+ gzFile in = gzdopen(0, "rb"); //opens stdin, which is 0
+ #endif
+
+ if (in == NULL) {
+ std::cerr << "ERROR! Could not open standard input for reading" << endl;
+ std::exit(1);
+ }
+
+ #ifndef USE_ZLIB
+ DimacsParser<StreamBuffer<FILE*, FN> > parser(solver2, &debugLib, conf.verbosity);
+ #else
+ DimacsParser<StreamBuffer<gzFile, GZ> > parser(solver2, &debugLib, conf.verbosity);
+ #endif
+
+ if (!parser.parse_DIMACS(in, false)) {
+ exit(-1);
+ }
+
+ #ifdef USE_ZLIB
+ gzclose(in);
+ #endif
+}
+
+void Main::parseInAllFiles(SATSolver* solver2)
+{
+ const double myTime = cpuTime();
+
+ //First read normal extra files
+ if (!debugLib.empty() && filesToRead.size() > 1) {
+ cout
+ << "debugLib must be OFF"
+ << "to parse in more than one file"
+ << endl;
+
+ std::exit(-1);
+ }
+
+ for (const string& fname: filesToRead) {
+ readInAFile(solver2, fname.c_str());
+ }
+
+ solver->add_sql_tag("stdin", fileNamePresent ? "False" : "True");
+ if (!fileNamePresent) {
+ readInStandardInput(solver2);
+ }
+
+ if (conf.verbosity) {
+ cout
+ << "c Parsing time: "
+ << std::fixed << std::setprecision(2)
+ << (cpuTime() - myTime)
+ << " s" << endl;
+ }
+}
+
+void Main::printResultFunc(
+ std::ostream* os
+ , const bool toFile
+ , const lbool ret
+) {
+ if (ret == l_True) {
+ if(toFile) {
+ *os << "SAT" << endl;
+ }
+ else if (!printResult) *os << "s SATISFIABLE" << endl;
+ else *os << "s SATISFIABLE" << endl;
+ } else if (ret == l_False) {
+ if(toFile) {
+ *os << "UNSAT" << endl;
+ }
+ else if (!printResult) *os << "s UNSATISFIABLE" << endl;
+ else *os << "s UNSATISFIABLE" << endl;
+ } else {
+ *os << "s INDETERMINATE" << endl;
+ }
+
+ if (ret == l_True && (printResult || toFile)) {
+ if (toFile) {
+ for (uint32_t var = 0; var < solver->nVars(); var++) {
+ if (solver->get_model()[var] != l_Undef) {
+ *os << ((solver->get_model()[var] == l_True)? "" : "-") << var+1 << " ";
+ }
+ }
+ *os << "0" << endl;
+ } else {
+ const uint32_t num_undef = print_model(os, solver);
+ if (num_undef && !toFile && conf.verbosity) {
+ if (only_indep_solution) {
+ cout << "c NOTE: some variables' value are NOT set -- you ONLY asked for the independent set's values: '--onlyindep'" << endl;
+ } else {
+ cout << "c NOTE: " << num_undef << " varables are NOT set" << endl;
+ }
+ }
+ }
+ }
+}
+
+void Main::add_supported_options()
+{
+ // Declare the supported options.
+ generalOptions.add_options()
+ ("help,h", "Print simple help")
+ ("hhelp", "Print extensive help")
+ ("version,v", "Print version info")
+ ("verb", po::value(&conf.verbosity)->default_value(conf.verbosity)
+ , "[0-10] Verbosity of solver. 0 = only solution")
+ ("random,r", po::value(&conf.origSeed)->default_value(conf.origSeed)
+ , "[0..] Random seed")
+ ("threads,t", po::value(&num_threads)->default_value(1)
+ ,"Number of threads")
+ ("maxtime", po::value(&conf.maxTime)->default_value(conf.maxTime, "MAX")
+ , "Stop solving after this much time (s)")
+ ("maxconfl", po::value(&conf.max_confl)->default_value(conf.max_confl, "MAX")
+ , "Stop solving after this many conflicts")
+// ("undef", po::value(&conf.greedy_undef)->default_value(conf.greedy_undef)
+// , "Set as many variables in solution to UNDEF as possible if solution is SAT")
+ ("mult,m", po::value(&conf.orig_global_timeout_multiplier)->default_value(conf.orig_global_timeout_multiplier)
+ , "Time multiplier for all simplification cutoffs")
+ ("memoutmult", po::value(&conf.var_and_mem_out_mult)->default_value(conf.var_and_mem_out_mult)
+ , "Multiplier for memory-out checks on variables and clause-link-in, etc. Useful when you have limited memory.")
+ ("preproc,p", po::value(&conf.preprocess)->default_value(conf.preprocess)
+ , "0 = normal run, 1 = preprocess and dump, 2 = read back dump and solution to produce final solution")
+ ("polar", po::value<string>()->default_value("auto")
+ , "{true,false,rnd,auto} Selects polarity mode. 'true' -> selects only positive polarity when branching. 'false' -> selects only negative polarity when branching. 'auto' -> selects last polarity used (also called 'caching')")
+ #ifdef STATS_NEEDED
+ ("clid", po::bool_switch(&clause_ID_needed)
+ , "Add clause IDs to DRAT output")
+ #endif
+ //("greedyunbound", po::bool_switch(&conf.greedyUnbound)
+ // , "Greedily unbound variables that are not needed for SAT")
+ ;
+
+ std::ostringstream s_blocking_multip;
+ s_blocking_multip << std::setprecision(4) << conf.blocking_restart_multip;
+
+ po::options_description restartOptions("Restart options");
+ restartOptions.add_options()
+ ("restart", po::value<string>()
+ , "{geom, glue, luby} Restart strategy to follow.")
+ ("gluehist", po::value(&conf.shortTermHistorySize)->default_value(conf.shortTermHistorySize)
+ , "The size of the moving window for short-term glue history of redundant clauses. If higher, the minimal number of conflicts between restarts is longer")
+ ("blkrest", po::value(&conf.do_blocking_restart)->default_value(conf.do_blocking_restart)
+ , "Perform blocking restarts as per Glucose 3.0")
+ ("blkrestlen", po::value(&conf.blocking_restart_trail_hist_length)->default_value(conf.blocking_restart_trail_hist_length)
+ , "Length of the long term trail size for blocking restart")
+ ("blkrestmultip", po::value(&conf.blocking_restart_multip)->default_value(conf.blocking_restart_multip, s_blocking_multip.str())
+ , "Multiplier used for blocking restart cut-off (called 'R' in Glucose 3.0)")
+ ("lwrbndblkrest", po::value(&conf.lower_bound_for_blocking_restart)->default_value(conf.lower_bound_for_blocking_restart)
+ , "Lower bound on blocking restart -- don't block before this many conflicts")
+ ("locgmult" , po::value(&conf.local_glue_multiplier)->default_value(conf.local_glue_multiplier)
+ , "The multiplier used to determine if we should restart during glue-based restart")
+ ("brokengluerest", po::value(&conf.broken_glue_restart)->default_value(conf.broken_glue_restart)
+ , "Should glue restart be broken as before 8e74cb5010bb4")
+ ("ratiogluegeom", po::value(&conf.ratio_glue_geom)->default_value(conf.ratio_glue_geom)
+ , "Ratio of glue vs geometric restarts -- more is more glue")
+ ;
+
+ std::ostringstream s_incclean;
+
+ std::ostringstream s_adjust_low;
+ s_adjust_low << std::setprecision(2) << conf.adjust_glue_if_too_many_low;
+
+ po::options_description reduceDBOptions("Redundant clause options");
+ reduceDBOptions.add_options()
+ ("gluecut0", po::value(&conf.glue_put_lev0_if_below_or_eq)->default_value(conf.glue_put_lev0_if_below_or_eq)
+ , "Glue value for lev 0 ('keep') cut")
+ ("gluecut1", po::value(&conf.glue_put_lev1_if_below_or_eq)->default_value(conf.glue_put_lev1_if_below_or_eq)
+ , "Glue value for lev 1 cut ('give another shot'")
+ ("adjustglue", po::value(&conf.adjust_glue_if_too_many_low)->default_value(conf.adjust_glue_if_too_many_low, s_adjust_low.str())
+ , "If more than this % of clauses is LOW glue (level 0) then lower the glue cutoff by 1 -- once and never again")
+ ("ml", po::value(&conf.guess_cl_effectiveness)->default_value(conf.guess_cl_effectiveness)
+ , "Use ML model to guess clause effectiveness")
+ ("everylev1", po::value(&conf.every_lev1_reduce)->default_value(conf.every_lev1_reduce)
+ , "Reduce lev1 clauses every N")
+ ("everylev2", po::value(&conf.every_lev2_reduce)->default_value(conf.every_lev2_reduce)
+ , "Reduce lev2 clauses every N")
+ ("lev1usewithin", po::value(&conf.must_touch_lev1_within)->default_value(conf.must_touch_lev1_within)
+ , "Learnt clause must be used in lev1 within this timeframe or be dropped to lev2")
+ ("dumpred", po::value(&dump_red_fname)->default_value(dump_red_fname)
+ , "Dump redundant clauses of gluecut0&1 to this filename")
+ ("dumpredmaxlen", po::value(&dump_red_max_len)->default_value(dump_red_max_len)
+ , "When dumping redundant clauses, only dump clauses at most this long")
+ ("dumpredmaxglue", po::value(&dump_red_max_len)->default_value(dump_red_max_glue)
+ , "When dumping redundant clauses, only dump clauses with at most this large glue")
+ ;
+
+ std::ostringstream s_random_var_freq;
+ s_random_var_freq << std::setprecision(5) << conf.random_var_freq;
+
+ std::ostringstream s_var_decay_vsids_start;
+ s_var_decay_vsids_start << std::setprecision(5) << conf.var_decay_vsids_start;
+
+ std::ostringstream s_var_decay_vsids_max;
+ s_var_decay_vsids_max << std::setprecision(5) << conf.var_decay_vsids_max;
+
+ po::options_description varPickOptions("Variable branching options");
+ varPickOptions.add_options()
+ ("vardecaystart", po::value(&conf.var_decay_vsids_start)->default_value(conf.var_decay_vsids_start, s_var_decay_vsids_start.str())
+ , "variable activity increase divider (MUST be smaller than multiplier)")
+ ("vardecaymax", po::value(&conf.var_decay_vsids_max)->default_value(conf.var_decay_vsids_max, s_var_decay_vsids_max.str())
+ , "variable activity increase divider (MUST be smaller than multiplier)")
+ ("vincstart", po::value(&conf.var_inc_vsids_start)->default_value(conf.var_inc_vsids_start)
+ , "variable activity increase stars with this value. Make sure that this multiplied by multiplier and divided by divider is larger than itself")
+ ("freq", po::value(&conf.random_var_freq)->default_value(conf.random_var_freq, s_random_var_freq.str())
+ , "[0 - 1] freq. of picking var at random")
+ ("maple", po::value(&conf.maple)->default_value(conf.maple)
+ , "Use maple-type variable picking sometimes")
+ ("maplemod", po::value(&conf.modulo_maple_iter)->default_value(conf.modulo_maple_iter)
+ , "Use maple N-1 of N rounds. Normally, N is 2, so used every other round. Set to 3 so it will use maple 2/3rds of the time.")
+ ("maplemorebump", po::value(&conf.more_maple_bump_high_glue)->default_value(conf.more_maple_bump_high_glue)
+ , "Bump variable usefulness more when glue is HIGH")
+ ;
+
+
+ po::options_description iterativeOptions("Iterative solve options");
+ iterativeOptions.add_options()
+ ("maxsol", po::value(&max_nr_of_solutions)->default_value(max_nr_of_solutions)
+ , "Search for given amount of solutions")
+ ("debuglib", po::value<string>(&debugLib)
+ , "MainSolver at specific 'solve()' points in CNF file")
+ ("dumpresult", po::value(&resultFilename)
+ , "Write solution(s) to this file")
+ ;
+
+ po::options_description probeOptions("Probing options");
+ probeOptions.add_options()
+ ("bothprop", po::value(&conf.doBothProp)->default_value(conf.doBothProp)
+ , "Do propagations solely to propagate the same value twice")
+ ("probe", po::value(&conf.doProbe)->default_value(conf.doProbe)
+ , "Carry out probing")
+ ("probemaxm", po::value(&conf.probe_bogoprops_time_limitM)->default_value(conf.probe_bogoprops_time_limitM)
+ , "Time in mega-bogoprops to perform probing")
+ ("transred", po::value(&conf.doTransRed)->default_value(conf.doTransRed)
+ , "Remove useless binary clauses (transitive reduction)")
+ ("intree", po::value(&conf.doIntreeProbe)->default_value(conf.doIntreeProbe)
+ , "Carry out intree-based probing")
+ ("intreemaxm", po::value(&conf.intree_time_limitM)->default_value(conf.intree_time_limitM)
+ , "Time in mega-bogoprops to perform intree probing")
+ ;
+
+ std::ostringstream ssERatio;
+ ssERatio << std::setprecision(4) << "norm: " << conf.varElimRatioPerIter << " preproc: " << 1.0;
+
+ po::options_description simplificationOptions("Simplification options");
+ simplificationOptions.add_options()
+ ("schedsimp", po::value(&conf.do_simplify_problem)->default_value(conf.do_simplify_problem)
+ , "Perform simplification rounds. If 0, we never perform any.")
+ ("presimp", po::value(&conf.simplify_at_startup)->default_value(conf.simplify_at_startup)
+ , "Perform simplification at the very start")
+ ("allpresimp", po::value(&conf.simplify_at_every_startup)->default_value(conf.simplify_at_every_startup)
+ , "Perform simplification at EVERY start -- only matters in library mode")
+ ("nonstop,n", po::value(&conf.never_stop_search)->default_value(conf.never_stop_search)
+ , "Never stop the search() process in class SATSolver")
+
+ ("schedule", po::value(&conf.simplify_schedule_nonstartup)
+ , "Schedule for simplification during run")
+ ("preschedule", po::value(&conf.simplify_schedule_startup)
+ , "Schedule for simplification at startup")
+
+ ("occsimp", po::value(&conf.perform_occur_based_simp)->default_value(conf.perform_occur_based_simp)
+ , "Perform occurrence-list-based optimisations (variable elimination, subsumption, bounded variable addition...)")
+
+
+ ("confbtwsimp", po::value(&conf.num_conflicts_of_search)->default_value(conf.num_conflicts_of_search)
+ , "Start first simplification after this many conflicts")
+ ("confbtwsimpinc", po::value(&conf.num_conflicts_of_search_inc)->default_value(conf.num_conflicts_of_search_inc)
+ , "Simp rounds increment by this power of N")
+ ("varelim", po::value(&conf.doVarElim)->default_value(conf.doVarElim)
+ , "Perform variable elimination as per Een and Biere")
+ ("varelimto", po::value(&conf.varelim_time_limitM)->default_value(conf.varelim_time_limitM)
+ , "Var elimination bogoprops M time limit")
+ ("varelimover", po::value(&conf.min_bva_gain)->default_value(conf.min_bva_gain)
+ , "Do BVE until the resulting no. of clause increase is less than X. Only power of 2 makes sense, i.e. 2,4,8...")
+ ("emptyelim", po::value(&conf.do_empty_varelim)->default_value(conf.do_empty_varelim)
+ , "Perform empty resolvent elimination using bit-map trick")
+ ("strengthen", po::value(&conf.do_strengthen_with_occur)->default_value(conf.do_strengthen_with_occur)
+ , "Perform clause contraction through self-subsuming resolution as part of the occurrence-subsumption system")
+ ("bva", po::value(&conf.do_bva)->default_value(conf.do_bva)
+ , "Perform bounded variable addition")
+ ("bvalim", po::value(&conf.bva_limit_per_call)->default_value(conf.bva_limit_per_call)
+ , "Maximum number of variables to add by BVA per call")
+ ("bva2lit", po::value(&conf.bva_also_twolit_diff)->default_value(conf.bva_also_twolit_diff)
+ , "BVA with 2-lit difference hack, too. Beware, this reduces the effectiveness of 1-lit diff")
+ ("bvato", po::value(&conf.bva_time_limitM)->default_value(conf.bva_time_limitM)
+ , "BVA time limit in bogoprops M")
+ ("eratio", po::value(&conf.varElimRatioPerIter)->default_value(conf.varElimRatioPerIter, ssERatio.str())
+ , "Eliminate this ratio of free variables at most per variable elimination iteration")
+ ("skipresol", po::value(&conf.skip_some_bve_resolvents)->default_value(conf.skip_some_bve_resolvents)
+ , "Skip BVE resolvents in case they belong to a gate")
+ ("occredmax", po::value(&conf.maxRedLinkInSize)->default_value(conf.maxRedLinkInSize)
+ , "Don't add to occur list any redundant clause larger than this")
+ ("occirredmaxmb", po::value(&conf.maxOccurIrredMB)->default_value(conf.maxOccurIrredMB)
+ , "Don't allow irredundant occur size to be beyond this many MB")
+ ("occredmaxmb", po::value(&conf.maxOccurRedMB)->default_value(conf.maxOccurRedMB)
+ , "Don't allow redundant occur size to be beyond this many MB")
+ ("substimelim", po::value(&conf.subsumption_time_limitM)->default_value(conf.subsumption_time_limitM)
+ , "Time-out in bogoprops M of subsumption of long clauses with long clauses, after computing occur")
+ ("strstimelim", po::value(&conf.strengthening_time_limitM)->default_value(conf.strengthening_time_limitM)
+ , "Time-out in bogoprops M of strengthening of long clauses with long clauses, after computing occur")
+ ("agrelimtimelim", po::value(&conf.aggressive_elim_time_limitM)->default_value(conf.aggressive_elim_time_limitM)
+ , "Time-out in bogoprops M of aggressive(=uses reverse distillation) var-elimination")
+ ;
+
+ po::options_description xorOptions("XOR-related options");
+ xorOptions.add_options()
+ ("xor", po::value(&conf.doFindXors)->default_value(conf.doFindXors)
+ , "Discover long XORs")
+ ("xorcache", po::value(&conf.useCacheWhenFindingXors)->default_value(conf.useCacheWhenFindingXors)
+ , "Use cache when finding XORs. Finds a LOT more XORs, but takes a lot more time")
+ ("varsperxorcut", po::value(&conf.xor_var_per_cut)->default_value(conf.xor_var_per_cut)
+ , "Number of _real_ variables per XOR when cutting them. So 2 will have XORs of size 4 because 1 = connecting to previous, 1 = connecting to next, 2 in the midde. If the XOR is 4 long, it will be just one 4-long XOR, no connectors")
+ ("echelonxor", po::value(&conf.doEchelonizeXOR)->default_value(conf.doEchelonizeXOR)
+ , "Extract data from XORs through echelonization (TOP LEVEL ONLY)")
+ ("maxxormat", po::value(&conf.maxXORMatrix)->default_value(conf.maxXORMatrix)
+ , "Maximum matrix size (=num elements) that we should try to echelonize")
+ //Not implemented yet
+ //("mix", po::value(&conf.doMixXorAndGates)->default_value(conf.doMixXorAndGates)
+ // , "Mix XORs and OrGates for new truths")
+ ;
+
+ po::options_description eqLitOpts("Equivalent literal options");
+ eqLitOpts.add_options()
+ ("scc", po::value(&conf.doFindAndReplaceEqLits)->default_value(conf.doFindAndReplaceEqLits)
+ , "Find equivalent literals through SCC and replace them")
+ ("extscc", po::value(&conf.doExtendedSCC)->default_value(conf.doExtendedSCC)
+ , "Perform SCC using cache")
+ ;
+
+ po::options_description gateOptions("Gate-related options");
+ gateOptions.add_options()
+ ("gates", po::value(&conf.doGateFind)->default_value(conf.doGateFind)
+ , "Find gates. Disables all sub-options below")
+ ("gorshort", po::value(&conf.doShortenWithOrGates)->default_value(conf.doShortenWithOrGates)
+ , "Shorten clauses with OR gates")
+ ("gandrem", po::value(&conf.doRemClWithAndGates)->default_value(conf.doRemClWithAndGates)
+ , "Remove clauses with AND gates")
+ ("gateeqlit", po::value(&conf.doFindEqLitsWithGates)->default_value(conf.doFindEqLitsWithGates)
+ , "Find equivalent literals using gates")
+ /*("maxgatesz", po::value(&conf.maxGateSize)->default_value(conf.maxGateSize)
+ , "Maximum gate size to discover")*/
+ ("printgatedot", po::value(&conf.doPrintGateDot)->default_value(conf.doPrintGateDot)
+ , "Print gate structure regularly to file 'gatesX.dot'")
+ ("gatefindto", po::value(&conf.gatefinder_time_limitM)->default_value(conf.gatefinder_time_limitM)
+ , "Max time in bogoprops M to find gates")
+ ("shortwithgatesto", po::value(&conf.shorten_with_gates_time_limitM)->default_value(conf.shorten_with_gates_time_limitM)
+ , "Max time to shorten with gates, bogoprops M")
+ ("remwithgatesto", po::value(&conf.remove_cl_with_gates_time_limitM)->default_value(conf.remove_cl_with_gates_time_limitM)
+ , "Max time to remove with gates, bogoprops M")
+ ;
+
+ po::options_description conflOptions("Conflict options");
+ conflOptions.add_options()
+ ("recur", po::value(&conf.doRecursiveMinim)->default_value(conf.doRecursiveMinim)
+ , "Perform recursive minimisation")
+ ("moreminim", po::value(&conf.doMinimRedMore)->default_value(conf.doMinimRedMore)
+ , "Perform strong minimisation at conflict gen.")
+ ("moremoreminim", po::value(&conf.doMinimRedMoreMore)->default_value(conf.doMinimRedMoreMore)
+ , "Perform even stronger minimisation at conflict gen.")
+ ("moremorecachelimit", po::value(&conf.more_red_minim_limit_cache)->default_value(conf.more_red_minim_limit_cache)
+ , "Time-out in microsteps for each more minimisation with cache. Only active if 'moreminim' is on")
+ ("moremorestamp", po::value(&conf.more_more_with_stamp)->default_value(conf.more_more_with_stamp)
+ , "Use cache for otf more minim of learnt clauses")
+ ("moremorealways", po::value(&conf.doAlwaysFMinim)->default_value(conf.doAlwaysFMinim)
+ , "Always strong-minimise clause")
+ ("otfsubsume", po::value(&conf.doOTFSubsume)->default_value(conf.doOTFSubsume)
+ , "Perform on-the-fly subsumption")
+ ;
+
+ po::options_description propOptions("Propagation options");
+ propOptions.add_options()
+ ("updateglueonanalysis", po::value(&conf.update_glues_on_analyze)->default_value(conf.update_glues_on_analyze)
+ , "Update glues while analyzing")
+ ("otfhyper", po::value(&conf.otfHyperbin)->default_value(conf.otfHyperbin)
+ , "Perform hyper-binary resolution at dec. level 1 after every restart and during probing")
+ ;
+
+
+ po::options_description stampOptions("Stamping options");
+ stampOptions.add_options()
+ ("stamp", po::value(&conf.doStamp)->default_value(conf.doStamp)
+ , "Use time stamping as per Heule&Jarvisalo&Biere paper")
+ ("cache", po::value(&conf.doCache)->default_value(conf.doCache)
+ , "Use implication cache -- may use a lot of memory")
+ ("cachesize", po::value(&conf.maxCacheSizeMB)->default_value(conf.maxCacheSizeMB)
+ , "Maximum size of the implication cache in MB. It may temporarily reach higher usage, but will be deleted&disabled if this limit is reached.")
+ ("cachecutoff", po::value(&conf.cacheUpdateCutoff)->default_value(conf.cacheUpdateCutoff)
+ , "If the number of literals propagated by a literal is more than this, it's not included into the implication cache")
+ ;
+
+ po::options_description sqlOptions("SQL options");
+ sqlOptions.add_options()
+ ("sql", po::value(&sql)->default_value(0)
+ , "Write to SQL. 0 = no SQL, 1 or 2 = sqlite")
+ ("sqlitedb", po::value(&sqlite_filename)
+ , "Where to put the SQLite database")
+ ("cldatadumpratio", po::value(&conf.dump_individual_cldata_ratio)->default_value(conf.dump_individual_cldata_ratio)
+ , "Only dump this ratio of clauses' data, randomly selected. Since machine learning doesn't need that much data, this can reduce the data you have to deal with.")
+ ;
+
+ po::options_description printOptions("Printing options");
+ printOptions.add_options()
+ ("verbstat", po::value(&conf.verbStats)->default_value(conf.verbStats)
+ , "Change verbosity of statistics at the end of the solving [0..2]")
+ ("verbrestart", po::value(&conf.print_full_restart_stat)->default_value(conf.print_full_restart_stat)
+ , "Print more thorough, but different stats")
+ ("verballrestarts", po::value(&conf.print_all_restarts)->default_value(conf.print_all_restarts)
+ , "Print a line for every restart")
+ ("printsol,s", po::value(&printResult)->default_value(printResult)
+ , "Print assignment if solution is SAT")
+ ("restartprint", po::value(&conf.print_restart_line_every_n_confl)->default_value(conf.print_restart_line_every_n_confl)
+ , "Print restart status lines at least every N conflicts")
+ ;
+
+ po::options_description componentOptions("Component options");
+ componentOptions.add_options()
+ ("comps", po::value(&conf.doCompHandler)->default_value(conf.doCompHandler)
+ , "Perform component-finding and separate handling")
+ ("compsfrom", po::value(&conf.handlerFromSimpNum)->default_value(conf.handlerFromSimpNum)
+ , "Component finding only after this many simplification rounds")
+ ("compsvar", po::value(&conf.compVarLimit)->default_value(conf.compVarLimit)
+ , "Only use components in case the number of variables is below this limit")
+ ("compslimit", po::value(&conf.comp_find_time_limitM)->default_value(conf.comp_find_time_limitM)
+ , "Limit how much time is spent in component-finding");
+
+ po::options_description distillOptions("Misc options");
+ distillOptions.add_options()
+ //("noparts", "Don't find&solve subproblems with subsolvers")
+ ("distill", po::value(&conf.do_distill_clauses)->default_value(conf.do_distill_clauses)
+ , "Regularly execute clause distillation")
+ ("distillmaxm", po::value(&conf.distill_long_cls_time_limitM)->default_value(conf.distill_long_cls_time_limitM)
+ , "Maximum number of Mega-bogoprops(~time) to spend on vivifying/distilling long cls by enqueueing and propagating")
+ ("distillto", po::value(&conf.distill_time_limitM)->default_value(conf.distill_time_limitM)
+ , "Maximum time in bogoprops M for distillation")
+ ;
+
+ po::options_description miscOptions("Misc options");
+ miscOptions.add_options()
+ //("noparts", "Don't find&solve subproblems with subsolvers")
+ ("strcachemaxm", po::value(&conf.watch_cache_stamp_based_str_time_limitM)->default_value(conf.watch_cache_stamp_based_str_time_limitM)
+ , "Maximum number of Mega-bogoprops(~time) to spend on vivifying long irred cls through watches, cache and stamps")
+ ("renumber", po::value(&conf.doRenumberVars)->default_value(conf.doRenumberVars)
+ , "Renumber variables to increase CPU cache efficiency")
+ ("savemem", po::value(&conf.doSaveMem)->default_value(conf.doSaveMem)
+ , "Save memory by deallocating variable space after renumbering. Only works if renumbering is active.")
+ ("implicitmanip", po::value(&conf.doStrSubImplicit)->default_value(conf.doStrSubImplicit)
+ , "Subsume and strengthen implicit clauses with each other")
+ ("implsubsto", po::value(&conf.subsume_implicit_time_limitM)->default_value(conf.subsume_implicit_time_limitM)
+ , "Timeout (in bogoprop Millions) of implicit subsumption")
+ ("implstrto", po::value(&conf.distill_implicit_with_implicit_time_limitM)->default_value(conf.distill_implicit_with_implicit_time_limitM)
+ , "Timeout (in bogoprop Millions) of implicit strengthening")
+ ;
+
+ po::options_description reconfOptions("Reconf options");
+ reconfOptions.add_options()
+ ("reconfat", po::value(&conf.reconfigure_at)->default_value(conf.reconfigure_at)
+ , "Reconfigure after this many simplifications")
+ ("reconf", po::value(&conf.reconfigure_val)->default_value(conf.reconfigure_val)
+ , "Reconfigure after some time to this solver configuration [0..15]")
+ ;
+
+ hiddenOptions.add_options()
+ ("sync", po::value(&conf.sync_every_confl)->default_value(conf.sync_every_confl)
+ , "Sync threads every N conflicts")
+ ("dratdebug", po::bool_switch(&dratDebug)
+ , "Output DRAT verification into the console. Helpful to see where DRAT fails -- use in conjunction with --verb 20")
+ ("clearinter", po::value(&need_clean_exit)->default_value(0)
+ , "Interrupt threads cleanly, all the time")
+ ("zero-exit-status", po::bool_switch(&zero_exit_status)
+ , "Exit with status zero in case the solving has finished without an issue")
+ ("input", po::value< vector<string> >(), "file(s) to read")
+ ("printtimes", po::value(&conf.do_print_times)->default_value(conf.do_print_times)
+ , "Print time it took for each simplification run. If set to 0, logs are easier to compare")
+ ("drat,d", po::value(&dratfilname)
+ , "Put DRAT verification information into this file")
+ ("savedstate", po::value(&conf.saved_state_file)->default_value(conf.saved_state_file)
+ , "The file to save the saved state of the solver")
+ ("maxsccdepth", po::value(&conf.max_scc_depth)->default_value(conf.max_scc_depth)
+ , "The maximum for scc search depth")
+ ("simdrat", po::value(&conf.simulate_drat)->default_value(conf.simulate_drat)
+ , "The maximum for scc search depth")
+ ("indep", po::value(&independent_vars_str)->default_value(independent_vars_str)
+ , "Independent vars, separated by comma")
+ ("onlyindep", po::bool_switch(&only_indep_solution)
+ , "Independent vars, separated by comma")
+ ;
+
+#ifdef USE_GAUSS
+ po::options_description gaussOptions("Gauss options");
+ gaussOptions.add_options()
+ ("maxgaussdepth", po::value(&conf.gaussconf.decision_until)->default_value(conf.gaussconf.decision_until)
+ , "Only run Gaussian Elimination until this depth. You may want this depth to be relatively small, such as 120-30, though it depends on the complexity of the problem. It is best to experiment.")
+ ("maxmatrixrows", po::value(&conf.gaussconf.max_matrix_rows)->default_value(conf.gaussconf.max_matrix_rows)
+ , "Set maximum no. of rows for gaussian matrix. Too large matrixes"
+ "should bee discarded for reasons of efficiency")
+ ("autodisablegauss", po::value(&conf.gaussconf.autodisable)->default_value(conf.gaussconf.autodisable)
+ , "Automatically disable gauss when performing badly")
+ ("minmatrixrows", po::value(&conf.gaussconf.min_matrix_rows)->default_value(conf.gaussconf.min_matrix_rows)
+ , "Set minimum no. of rows for gaussian matrix. Normally, too small"
+ "matrixes are discarded for reasons of efficiency")
+ ("maxnummatrixes", po::value(&conf.gaussconf.max_num_matrixes)->default_value(conf.gaussconf.max_num_matrixes)
+ , "Maximum number of matrixes to treat.")
+ ;
+#endif //USE_GAUSS
+
+ help_options_complicated
+ .add(generalOptions)
+ #if defined(USE_SQLITE3)
+ .add(sqlOptions)
+ #endif
+ .add(restartOptions)
+ .add(printOptions)
+ .add(propOptions)
+ .add(reduceDBOptions)
+ .add(varPickOptions)
+ .add(conflOptions)
+ .add(iterativeOptions)
+ .add(probeOptions)
+ .add(stampOptions)
+ .add(simplificationOptions)
+ .add(eqLitOpts)
+ .add(componentOptions)
+ #if defined(USE_M4RI) or defined(USE_GAUSS)
+ .add(xorOptions)
+ #endif
+ .add(gateOptions)
+ #ifdef USE_GAUSS
+ .add(gaussOptions)
+ #endif
+ .add(distillOptions)
+ .add(reconfOptions)
+ .add(miscOptions)
+ ;
+}
+
+string remove_last_comma_if_exists(std::string s)
+{
+ std::string s2 = s;
+ if (s[s.length()-1] == ',')
+ s2.resize(s2.length()-1);
+ return s2;
+}
+
+void Main::check_options_correctness()
+{
+ try {
+ po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm);
+ if (vm.count("hhelp"))
+ {
+ cout
+ << "A universal, fast SAT solver with XOR and Gaussian Elimination support. " << endl
+ << "Input "
+ #ifndef USE_ZLIB
+ << "must be plain"
+ #else
+ << "can be either plain or gzipped"
+ #endif
+ << " DIMACS with XOR extension" << endl << endl;
+
+ cout
+ << "cryptominisat5 [options] inputfile [drat-trim-file]" << endl << endl;
+
+ cout << "Preprocessor usage:" << endl
+ << " cryptominisat5 --preproc 1 [options] inputfile simplified-cnf-file" << endl << endl
+ << " cryptominisat5 --preproc 2 [options] solution-file" << endl;
+
+ cout << help_options_complicated << endl;
+ cout << "Normal run schedules:" << endl;
+ cout << " Default schedule: "
+ << remove_last_comma_if_exists(conf.simplify_schedule_nonstartup) << endl<< endl;
+ cout << " Schedule at startup: "
+ << remove_last_comma_if_exists(conf.simplify_schedule_startup) << endl << endl;
+
+ cout << "Preproc run schedule:" << endl;
+ cout << " "
+ << remove_last_comma_if_exists(conf.simplify_schedule_preproc) << endl;
+ std::exit(0);
+ }
+
+ if (vm.count("help"))
+ {
+ cout
+ << "USAGE 1: " << argv[0] << " [options] inputfile [drat-trim-file]" << endl
+ << "USAGE 2: " << argv[0] << " --preproc 1 [options] inputfile simplified-cnf-file" << endl
+ << "USAGE 2: " << argv[0] << " --preproc 2 [options] solution-file" << endl
+
+ << " where input is "
+ #ifndef USE_ZLIB
+ << "plain"
+ #else
+ << "plain or gzipped"
+ #endif
+ << " DIMACS." << endl;
+
+ cout << help_options_simple << endl;
+ std::exit(0);
+ }
+
+ po::notify(vm);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::unknown_option> >& c
+ ) {
+ cerr
+ << "ERROR: Some option you gave was wrong. Please give '--help' to get help" << endl
+ << " Unkown option: " << c.what() << endl;
+ std::exit(-1);
+ } catch (boost::bad_any_cast &e) {
+ std::cerr
+ << "ERROR! You probably gave a wrong argument type" << endl
+ << " Bad cast: " << e.what()
+ << endl;
+
+ std::exit(-1);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::invalid_option_value> >& what
+ ) {
+ cerr
+ << "ERROR: Invalid value '" << what.what() << "'" << endl
+ << " given to option '" << what.get_option_name() << "'"
+ << endl;
+
+ std::exit(-1);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::multiple_occurrences> >& what
+ ) {
+ cerr
+ << "ERROR: " << what.what() << " of option '"
+ << what.get_option_name() << "'"
+ << endl;
+
+ std::exit(-1);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::required_option> >& what
+ ) {
+ cerr
+ << "ERROR: You forgot to give a required option '"
+ << what.get_option_name() << "'"
+ << endl;
+
+ std::exit(-1);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::too_many_positional_options_error> >& what
+ ) {
+ cerr
+ << "ERROR: You gave too many positional arguments. Only at most two can be given:" << endl
+ << " the 1st the CNF file input, and optinally, the 2nd the DRAT file output" << endl
+ << " OR (pre-processing) 1st for the input CNF, 2nd for the simplified CNF" << endl
+ << " OR (post-processing) 1st for the solution file" << endl
+ ;
+
+ std::exit(-1);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::ambiguous_option> >& what
+ ) {
+ cerr
+ << "ERROR: The option you gave was not fully written and matches" << endl
+ << " more than one option. Please give the full option name." << endl
+ << " The option you gave: '" << what.get_option_name() << "'" <<endl
+ << " The alternatives are: ";
+ for(size_t i = 0; i < what.alternatives().size(); i++) {
+ cout << what.alternatives()[i];
+ if (i+1 < what.alternatives().size()) {
+ cout << ", ";
+ }
+ }
+ cout << endl;
+
+ std::exit(-1);
+ } catch (boost::exception_detail::clone_impl<
+ boost::exception_detail::error_info_injector<po::invalid_command_line_syntax> >& what
+ ) {
+ cerr
+ << "ERROR: The option you gave is missing the argument or the" << endl
+ << " argument is given with space between the equal sign." << endl
+ << " detailed error message: " << what.what() << endl
+ ;
+ std::exit(-1);
+ }
+}
+
+void Main::handle_drat_option()
+{
+ if (!conf.simulate_drat) {
+ if (dratDebug) {
+ dratf = &cout;
+ } else {
+ std::ofstream* dratfTmp = new std::ofstream;
+ dratfTmp->open(dratfilname.c_str(), std::ofstream::out | std::ofstream::binary);
+ if (!*dratfTmp) {
+ std::cerr
+ << "ERROR: Could not open DRAT file "
+ << dratfilname
+ << " for writing"
+ << endl;
+
+ std::exit(-1);
+ }
+ dratf = dratfTmp;
+ }
+ }
+
+ if (!conf.otfHyperbin) {
+ if (conf.verbosity) {
+ cout
+ << "c OTF hyper-bin is needed for BProp in DRAT, turning it back"
+ << endl;
+ }
+ conf.otfHyperbin = true;
+ }
+
+ if (conf.doFindXors) {
+ if (conf.verbosity) {
+ cout
+ << "c XOR manipulation is not supported in DRAT, turning it off"
+ << endl;
+ }
+ conf.doFindXors = false;
+ }
+
+ if (conf.doRenumberVars) {
+ if (conf.verbosity) {
+ cout
+ << "c Variable renumbering is not supported during DRAT, turning it off"
+ << endl;
+ }
+ conf.doRenumberVars = false;
+ }
+
+ if (conf.doCompHandler) {
+ if (conf.verbosity) {
+ cout
+ << "c Component finding & solving is not supported during DRAT, turning it off"
+ << endl;
+ }
+ conf.doCompHandler = false;
+ }
+}
+
+void Main::parse_restart_type()
+{
+ if (vm.count("restart")) {
+ string type = vm["restart"].as<string>();
+ if (type == "geom")
+ conf.restartType = Restart::geom;
+ else if (type == "luby")
+ conf.restartType = Restart::luby;
+ else if (type == "glue")
+ conf.restartType = Restart::glue;
+ else throw WrongParam("restart", "unknown restart type");
+ }
+}
+
+void Main::parse_polarity_type()
+{
+ if (vm.count("polar")) {
+ string mode = vm["polar"].as<string>();
+
+ if (mode == "true") conf.polarity_mode = PolarityMode::polarmode_pos;
+ else if (mode == "false") conf.polarity_mode = PolarityMode::polarmode_neg;
+ else if (mode == "rnd") conf.polarity_mode = PolarityMode::polarmode_rnd;
+ else if (mode == "auto") conf.polarity_mode = PolarityMode::polarmode_automatic;
+ else throw WrongParam(mode, "unknown polarity-mode");
+ }
+}
+
+void Main::manually_parse_some_options()
+{
+ if (conf.shortTermHistorySize <= 0) {
+ cout
+ << "You MUST give a short term history size (\"--gluehist\")" << endl
+ << " greater than 0!"
+ << endl;
+
+ std::exit(-1);
+ }
+
+ if (!vm["savedstate"].defaulted() && conf.preprocess == 0) {
+ cout << "ERROR: It does not make sense to have --savedstate passed and not use preprocessing" << endl;
+ exit(-1);
+ }
+
+ if (conf.preprocess != 0) {
+ conf.simplify_at_startup = 1;
+ conf.varelim_time_limitM *= 5;
+ conf.orig_global_timeout_multiplier *= 1.5;
+ if (conf.doCompHandler) {
+ conf.doCompHandler = false;
+ if (conf.verbosity) {
+ cout << "c Cannot handle components when preprocessing. Turning it off." << endl;
+ }
+ }
+
+ if (num_threads > 1) {
+ num_threads = 1;
+ cout << "c Cannot handle multiple threads for preprocessing. Setting to 1." << endl;
+ }
+
+
+ if (!redDumpFname.empty()
+ || !irredDumpFname.empty()
+ ) {
+ std::cerr << "ERROR: dumping clauses with preprocessing makes no sense. Exiting" << endl;
+ std::exit(-1);
+ }
+
+ if (max_nr_of_solutions > 1) {
+ std::cerr << "ERROR: multi-solutions make no sense with preprocessing. Exiting." << endl;
+ std::exit(-1);
+ }
+
+ if (!filesToRead.empty()) {
+ assert(false && "we should never reach this place, filesToRead has not been populated yet");
+ exit(-1);
+ }
+
+ if (!debugLib.empty()) {
+ std::cerr << "ERROR: debugLib makes no sense with preprocessing. Exiting." << endl;
+ std::exit(-1);
+ }
+
+ if (vm.count("schedule")) {
+ std::cerr << "ERROR: Pleaase adjust the --preschedule not the --schedule when preprocessing. Exiting." << endl;
+ std::exit(-1);
+ }
+
+ if (vm.count("occschedule")) {
+ std::cerr << "ERROR: Pleaase adjust the --preoccschedule not the --occschedule when preprocessing. Exiting." << endl;
+ std::exit(-1);
+ }
+
+ if (!vm.count("preschedule")) {
+ conf.simplify_schedule_startup = conf.simplify_schedule_preproc;
+ }
+
+ if (!vm.count("eratio")) {
+ conf.varElimRatioPerIter = 2.0;
+ }
+ }
+
+ if (vm.count("dumpresult")) {
+ resultfile = new std::ofstream;
+ resultfile->open(resultFilename.c_str());
+ if (!(*resultfile)) {
+ cout
+ << "ERROR: Couldn't open file '"
+ << resultFilename
+ << "' for writing!"
+ << endl;
+ std::exit(-1);
+ }
+ }
+
+ parse_polarity_type();
+
+ if (conf.random_var_freq < 0 || conf.random_var_freq > 1) {
+ throw WrongParam(lexical_cast<string>(conf.random_var_freq), "Illegal random var frequency ");
+ }
+
+ //Conflict
+ if (vm.count("maxdump") && redDumpFname.empty()) {
+ throw WrongParam("maxdump", "--dumpred <filename> must be activated if issuing --maxdump <size>");
+ }
+
+ parse_restart_type();
+
+ if (conf.preprocess == 2) {
+ if (vm.count("input") == 0) {
+ cout << "ERROR: When post-processing you must give the solution as the positional argument"
+ << endl;
+ std::exit(-1);
+ }
+
+ vector<string> solution = vm["input"].as<vector<string> >();
+ if (solution.size() > 1) {
+ cout << "ERROR: When post-processing you must give only the solution as the positional argument."
+ << endl
+ << "The saved state must be given as the argument '--savedsate X'"
+ << endl;
+ std::exit(-1);
+ }
+ conf.solution_file = solution[0];
+ } else if (vm.count("input")) {
+ filesToRead = vm["input"].as<vector<string> >();
+ if (!vm.count("sqlitedb")) {
+ sqlite_filename = filesToRead[0] + ".sqlite";
+ } else {
+ sqlite_filename = vm["sqlitedb"].as<string>();
+ }
+ fileNamePresent = true;
+ } else {
+ fileNamePresent = false;
+ }
+
+ if (conf.preprocess == 1) {
+ if (!vm.count("drat")) {
+ cout << "ERROR: When preprocessing, you must give the simplified file name as 2nd argument" << endl;
+ std::exit(-1);
+ }
+ conf.simplified_cnf = vm["drat"].as<string>();
+ }
+
+ if (conf.preprocess == 2) {
+ if (vm.count("drat")) {
+ cout << "ERROR: When postprocessing, you must NOT give a 2nd argument" << endl;
+ std::exit(-1);
+ }
+ }
+
+ if (conf.preprocess == 0 &&
+ (vm.count("drat") || conf.simulate_drat)
+ ) {
+ handle_drat_option();
+ }
+
+ if (conf.verbosity) {
+ cout << "c Outputting solution to console" << endl;
+ }
+}
+
+void Main::parseCommandLine()
+{
+ need_clean_exit = 0;
+
+ //Reconstruct the command line so we can emit it later if needed
+ for(int i = 0; i < argc; i++) {
+ commandLine += string(argv[i]);
+ if (i+1 < argc) {
+ commandLine += " ";
+ }
+ }
+
+ add_supported_options();
+ p.add("input", 1);
+ p.add("drat", 1);
+ all_options.add(help_options_complicated);
+ all_options.add(hiddenOptions);
+
+ help_options_simple
+ .add(generalOptions)
+ ;
+
+ check_options_correctness();
+ if (vm.count("version")) {
+ printVersionInfo();
+ std::exit(0);
+ }
+
+ try {
+ manually_parse_some_options();
+ } catch(WrongParam& wp) {
+ cerr << "ERROR: " << wp.getMsg() << endl;
+ exit(-1);
+ }
+}
+
+void Main::check_num_threads_sanity(const unsigned thread_num) const
+{
+ const unsigned num_cores = std::thread::hardware_concurrency();
+ if (num_cores == 0) {
+ //Library doesn't know much, we can't do any checks.
+ return;
+ }
+
+ if (thread_num > num_cores && conf.verbosity) {
+ std::cout
+ << "c WARNING: Number of threads requested is more than the number of"
+ << " cores reported by the system.\n"
+ << "c WARNING: This is not a good idea in general. It's best to set the"
+ << " number of threads to the number of real cores" << endl;
+ }
+}
+
+void Main::dump_red_file()
+{
+ if (dump_red_fname.length() == 0)
+ return;
+
+ std::ofstream* dumpfile = new std::ofstream;
+ dumpfile->open(dump_red_fname.c_str());
+ if (!(*dumpfile)) {
+ cout
+ << "ERROR: Couldn't open file '"
+ << resultFilename
+ << "' for writing!"
+ << endl;
+ std::exit(-1);
+ }
+
+ bool ret = true;
+ vector<Lit> lits;
+ solver->start_getting_small_clauses(dump_red_max_len, dump_red_max_glue);
+ while(ret) {
+ ret = solver->get_next_small_clause(lits);
+ if (ret) {
+ *dumpfile << lits << " " << 0 << endl;
+ }
+ }
+ solver->end_getting_small_clauses();
+
+ delete dumpfile;
+}
+
+int Main::solve()
+{
+ solver = new SATSolver((void*)&conf);
+ solverToInterrupt = solver;
+ if (dratf) {
+ solver->set_drat(dratf, clause_ID_needed);
+ }
+ check_num_threads_sanity(num_threads);
+ solver->set_num_threads(num_threads);
+ if (sql != 0) {
+ solver->set_sqlite(sqlite_filename);
+ }
+
+ //Print command line used to execute the solver: for options and inputs
+ if (conf.verbosity) {
+ printVersionInfo();
+ cout
+ << "c Executed with command line: "
+ << commandLine
+ << endl;
+ }
+
+ solver->add_sql_tag("commandline", commandLine);
+ solver->add_sql_tag("verbosity", lexical_cast<string>(conf.verbosity));
+ solver->add_sql_tag("threads", lexical_cast<string>(num_threads));
+ solver->add_sql_tag("version", solver->get_version());
+ solver->add_sql_tag("SHA-revision", solver->get_version_sha1());
+ solver->add_sql_tag("env", solver->get_compilation_env());
+ #ifdef __GNUC__
+ solver->add_sql_tag("compiler", "gcc-" __VERSION__);
+ #else
+ solver->add_sql_tag("compiler", "non-gcc");
+ #endif
+
+ //Parse in DIMACS (maybe gzipped) files
+ //solver->log_to_file("mydump.cnf");
+ if (conf.preprocess != 2) {
+ parseInAllFiles(solver);
+ }
+
+ lbool ret = multi_solutions();
+
+ if (conf.preprocess != 1) {
+ if (ret == l_Undef && conf.verbosity) {
+ cout
+ << "c Not finished running -- signal caught or some maximum reached"
+ << endl;
+ }
+ if (conf.verbosity) {
+ solver->print_stats();
+ }
+ if (ret == l_True) {
+ dump_red_file();
+ }
+ }
+ printResultFunc(&cout, false, ret);
+ if (resultfile) {
+ printResultFunc(resultfile, true, ret);
+ }
+
+ return correctReturnValue(ret);
+}
+
+lbool Main::multi_solutions()
+{
+ unsigned long current_nr_of_solutions = 0;
+ lbool ret = l_True;
+ while(current_nr_of_solutions < max_nr_of_solutions && ret == l_True) {
+ ret = solver->solve(NULL, only_indep_solution);
+ current_nr_of_solutions++;
+
+ if (ret == l_True && current_nr_of_solutions < max_nr_of_solutions) {
+ printResultFunc(&cout, false, ret);
+ if (resultfile) {
+ printResultFunc(resultfile, true, ret);
+ }
+
+ if (conf.verbosity) {
+ cout
+ << "c Number of solutions found until now: "
+ << std::setw(6) << current_nr_of_solutions
+ << endl;
+ }
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ solver->print_removed_vars();
+ #endif
+
+ //Banning found solution
+ vector<Lit> lits;
+ if (independent_vars.empty()) {
+ for (uint32_t var = 0; var < solver->nVars(); var++) {
+ if (solver->get_model()[var] != l_Undef) {
+ lits.push_back( Lit(var, (solver->get_model()[var] == l_True)? true : false) );
+ }
+ }
+ } else {
+ for (const uint32_t var: independent_vars) {
+ if (solver->get_model()[var] != l_Undef) {
+ lits.push_back( Lit(var, (solver->get_model()[var] == l_True)? true : false) );
+ }
+ }
+ }
+ solver->add_clause(lits);
+ }
+ }
+ return ret;
+}
+
+///////////
+// Useful helper functions
+///////////
+
+void Main::printVersionInfo()
+{
+ cout << "c CryptoMiniSat version " << solver->get_version() << endl;
+ cout << "c CryptoMiniSat SHA revision " << solver->get_version_sha1() << endl;
+ #ifdef USE_GAUSS
+ cout << "c Using code from 'When Boolean Satisfiability Meets Gauss-E. in a Simplex Way'" << endl;
+ cout << "c by C.-S. Han and J.-H. Roland Jiang in CAV 2012. Fixes by M. Soos" << endl;
+ #endif
+ cout << "c CryptoMiniSat compilation env " << solver->get_compilation_env() << endl;
+ #ifdef __GNUC__
+ cout << "c CryptoMiniSat compiled with gcc version " << __VERSION__ << endl;
+ #else
+ cout << "c CryptoMiniSat compiled with non-gcc compiler" << endl;
+ #endif
+}
+
+int Main::correctReturnValue(const lbool ret) const
+{
+ int retval = -1;
+ if (ret == l_True) {
+ retval = 10;
+ } else if (ret == l_False) {
+ retval = 20;
+ } else if (ret == l_Undef) {
+ retval = 15;
+ } else {
+ std::cerr << "Something is very wrong, output is neither l_Undef, nor l_False, nor l_True" << endl;
+ exit(-1);
+ }
+
+ if (zero_exit_status) {
+ return 0;
+ } else {
+ return retval;
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/main.h b/cryptominisat5/cryptominisat-5.6.3/src/main.h
new file mode 100644
index 000000000..1b9155122
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/main.h
@@ -0,0 +1,134 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef MAIN_H
+#define MAIN_H
+
+#include <string>
+#include <vector>
+#include <memory>
+#include <fstream>
+
+#include "solverconf.h"
+#include "cryptominisat5/cryptominisat.h"
+
+using std::string;
+using std::vector;
+
+#include <boost/program_options.hpp>
+namespace po = boost::program_options;
+using namespace CMSat;
+
+class Main
+{
+ public:
+ Main(int argc, char** argv);
+ ~Main()
+ {
+ if (dratf) {
+ *dratf << std::flush;
+ if (dratf != &std::cout) {
+ delete dratf;
+ }
+ }
+
+ delete solver;
+ }
+
+ void parseCommandLine();
+ virtual int solve();
+ SolverConf conf;
+
+ private:
+ //arguments
+ int argc;
+ char** argv;
+ string var_elim_strategy;
+ string dratfilname;
+ void check_options_correctness();
+ void manually_parse_some_options();
+ void handle_drat_option();
+ void parse_restart_type();
+ void parse_polarity_type();
+ void check_num_threads_sanity(const unsigned thread_num) const;
+
+ po::positional_options_description p;
+ po::options_description all_options;
+
+ protected:
+ //Options
+ po::variables_map vm;
+ virtual void add_supported_options();
+ virtual void call_after_parse() {}
+
+ po::options_description help_options_simple;
+ po::options_description help_options_complicated;
+ po::options_description hiddenOptions;
+ po::options_description generalOptions = po::options_description("Main options");
+
+ SATSolver* solver = NULL;
+
+ //File reading
+ void readInAFile(SATSolver* solver2, const string& filename);
+ void readInStandardInput(SATSolver* solver2);
+ void parseInAllFiles(SATSolver* solver2);
+
+ //Helper functions
+ void printResultFunc(
+ std::ostream* os
+ , const bool toFile
+ , const lbool ret
+ );
+ void printVersionInfo();
+ int correctReturnValue(const lbool ret) const;
+ lbool multi_solutions();
+ void dump_red_file();
+
+ //Config
+ bool zero_exit_status = false;
+ std::string resultFilename;
+ std::string debugLib;
+ int printResult = true;
+ string commandLine;
+ unsigned num_threads = 1;
+ uint32_t max_nr_of_solutions = 1;
+ int sql = 0;
+ string sqlite_filename;
+ vector<uint32_t> independent_vars;
+ std::string independent_vars_str = "";
+ bool only_indep_solution = false;
+
+ //Files to read & write
+ bool fileNamePresent;
+ vector<string> filesToRead;
+ std::ofstream* resultfile = NULL;
+ string dump_red_fname;
+ uint32_t dump_red_max_len = 10000;
+ uint32_t dump_red_max_glue = 1000;
+
+ //Drat checker
+ std::ostream* dratf = NULL;
+ bool dratDebug = false;
+ bool clause_ID_needed = false;
+};
+
+#endif //MAIN_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/main_common.h b/cryptominisat5/cryptominisat-5.6.3/src/main_common.h
new file mode 100644
index 000000000..6aa0e1ed4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/main_common.h
@@ -0,0 +1,55 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#ifndef __MAIN_COMMON_H__
+#define __MAIN_COMMON_H__
+
+#include "cryptominisat5/cryptominisat.h"
+#include <iostream>
+#include <cmath>
+
+//Returns the number of undefined variables
+uint32_t print_model(std::ostream* os, CMSat::SATSolver* solver)
+{
+ *os << "v ";
+ size_t line_size = 2;
+ size_t num_undef = 0;
+ for (uint32_t var = 0; var < solver->nVars(); var++) {
+ if (solver->get_model()[var] != CMSat::l_Undef) {
+ const bool value_is_positive = (solver->get_model()[var] == CMSat::l_True);
+ const size_t this_var_size = std::ceil(std::log10(var+1)) + 1 + !value_is_positive;
+ line_size += this_var_size;
+ if (line_size > 80) {
+ *os << std::endl << "v ";
+ line_size = 2 + this_var_size;
+ }
+ *os << (value_is_positive? "" : "-") << var+1 << " ";
+ } else {
+ num_undef++;
+ }
+ }
+ *os << "0" << std::endl;
+ return num_undef;
+}
+
+#endif //__MAIN_COMMON_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/main_emscripten.cpp b/cryptominisat5/cryptominisat-5.6.3/src/main_emscripten.cpp
new file mode 100644
index 000000000..6d53aeb8a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/main_emscripten.cpp
@@ -0,0 +1,135 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#include <iostream>
+#include <stdlib.h>
+#include <string.h>
+#include "constants.h"
+
+using std::cout;
+using std::endl;
+
+#include "main_common.h"
+
+#include "solverconf.h"
+#include "cryptominisat5/cryptominisat.h"
+#include "dimacsparser.h"
+#include "streambuffer.h"
+
+using namespace CMSat;
+
+SATSolver* solver = NULL;
+DLL_PUBLIC void printVersionInfo()
+{
+ cout << "c CryptoMiniSat version " << solver->get_version() << endl;
+ cout << "c CryptoMiniSat SHA revision " << solver->get_version_sha1() << endl;
+}
+
+DLL_PUBLIC int start_solve(const char* input)
+{
+ SolverConf conf;
+ conf.max_confl = 500;
+ conf.verbosity = 1;
+ conf.do_print_times = 0;
+ conf.simplify_at_startup = 0;
+
+ delete solver;
+ solver = new SATSolver(&conf);
+
+ if (conf.verbosity) {
+ printVersionInfo();
+ }
+
+ DimacsParser<StreamBuffer<const char*, CH>> parser(solver, NULL, conf.verbosity);
+ if (!parser.parse_DIMACS(input, false)) {
+ exit(-1);
+ }
+
+ solver->set_max_confl(500);
+ lbool ret = solver->simplify();
+
+ if (ret == l_True) {
+ cout << "s SATISFIABLE" << endl;
+ solver->print_stats();
+ } else if (ret == l_False) {
+ cout << "s UNSATISFIABLE"<< endl;
+ solver->print_stats();
+ }
+
+ if (ret == l_True) {
+ return 0;
+ } else if (ret == l_False) {
+ return 1;
+ } else {
+ return 2;
+ }
+}
+
+DLL_PUBLIC int continue_solve()
+{
+ solver->set_max_confl(500);
+ lbool ret = solver->solve();
+
+ if (ret == l_True) {
+ cout << "s SATISFIABLE" << endl;
+ solver->print_stats();
+ } else if (ret == l_False) {
+ cout << "s UNSATISFIABLE"<< endl;
+ solver->print_stats();
+ }
+
+ if (ret == l_True) {
+ print_model(&std::cout, solver);
+ }
+
+ if (ret == l_True) {
+ return 0;
+ } else if (ret == l_False) {
+ return 1;
+ } else {
+ return 2;
+ }
+}
+
+DLL_PUBLIC int get_num_conflicts()
+{
+ uint64_t num = solver->get_sum_conflicts();
+ return num;
+}
+
+
+extern "C" {
+
+DLL_PUBLIC int cstart_solve(const char *input) {
+ return start_solve(input);
+}
+
+DLL_PUBLIC int ccontinue_solve() {
+ return continue_solve();
+}
+
+DLL_PUBLIC int cget_num_conflicts() {
+ return get_num_conflicts();
+}
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/main_exe.cpp b/cryptominisat5/cryptominisat-5.6.3/src/main_exe.cpp
new file mode 100644
index 000000000..b26c62a74
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/main_exe.cpp
@@ -0,0 +1,56 @@
+/*
+Copyright (c) 2010-2015 Mate Soos
+Copyright (c) Kuldeep S. Meel, Daniel J. Fremont
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#include "main.h"
+#include "signalcode.h"
+#include <signal.h>
+#include <fenv.h>
+
+int main(int argc, char** argv)
+{
+ #if defined(__GNUC__) && defined(__linux__)
+ feenableexcept(FE_INVALID |
+ FE_DIVBYZERO |
+ FE_OVERFLOW
+ );
+ #endif
+
+ int ret = -1;
+ try {
+ Main main(argc, argv);
+ main.conf.verbosity = 1;
+ main.conf.verbStats = 1;
+ main.parseCommandLine();
+
+ signal(SIGINT, SIGINT_handler);
+ ret = main.solve();
+ } catch (CMSat::TooManyVarsError& e) {
+ std::cerr << "ERROR! Variable requested is far too large" << std::endl;
+ exit(-1);
+ } catch (CMSat::TooLongClauseError& e) {
+ std::cerr << "ERROR! Too long clause inserted" << std::endl;
+ exit(-1);
+ };
+
+ return ret;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp b/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
new file mode 100644
index 000000000..44470f8ef
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/main_simple.cpp
@@ -0,0 +1,328 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#include <ctime>
+#include <cstring>
+#include <errno.h>
+#include <iostream>
+#include <stdlib.h>
+#include <string.h>
+
+using std::cout;
+using std::endl;
+
+#include <signal.h>
+#include "time_mem.h"
+#include "main_common.h"
+
+#include "solverconf.h"
+#include "cryptominisat5/cryptominisat.h"
+#include "dimacsparser.h"
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4706) // Assignment within conditional expression
+ // -- used in parsing args
+#endif
+
+using namespace CMSat;
+std::ostream* dratf;
+
+SATSolver* solver;
+bool zero_exit_status = false;
+static void SIGINT_handler(int) {
+ cout << "\n*** INTERRUPTED ***\n";
+ solver->print_stats();
+ cout << "\n*** INTERRUPTED ***\n";
+ exit(1);
+}
+
+void printVersionInfo()
+{
+ cout << "c CryptoMiniSat version " << solver->get_version() << endl;
+ #ifdef __GNUC__
+ cout << "c CryptoMiniSat compiled with gcc version " << __VERSION__ << endl;
+ #else
+ cout << "c CryptoMiniSat compiled with non-gcc compiler" << endl;
+ #endif
+}
+
+
+void handle_drat_option(SolverConf& conf, const char* dratfilname)
+{
+ std::ofstream* dratfTmp = new std::ofstream;
+ dratfTmp->open(dratfilname, std::ofstream::out | std::ofstream::binary);
+ if (!*dratfTmp) {
+ std::cerr
+ << "ERROR: Could not open DRAT file "
+ << dratfilname
+ << " for writing"
+ << endl;
+
+ std::exit(-1);
+ }
+ dratf = dratfTmp;
+
+ if (!conf.otfHyperbin) {
+ if (conf.verbosity) {
+ cout
+ << "c OTF hyper-bin is needed for BProp in DRAT, turning it back"
+ << endl;
+ }
+ conf.otfHyperbin = true;
+ }
+
+ if (conf.doFindXors) {
+ if (conf.verbosity) {
+ cout
+ << "c XOR manipulation is not supported in DRAT, turning it off"
+ << endl;
+ }
+ conf.doFindXors = false;
+ }
+
+ if (conf.doRenumberVars) {
+ if (conf.verbosity) {
+ cout
+ << "c Variable renumbering is not supported during DRAT, turning it off"
+ << endl;
+ }
+ conf.doRenumberVars = false;
+ }
+
+ if (conf.doCompHandler) {
+ if (conf.verbosity) {
+ cout
+ << "c Component finding & solving is not supported during DRAT, turning it off"
+ << endl;
+ }
+ conf.doCompHandler = false;
+ }
+}
+
+void printUsage(char** argv)
+{
+ cout << "USAGE:"
+ << argv[0] << " [options] <input-file> \n\n where input is plain DIMACS.\n\n";
+ cout << "OPTIONS:\n\n";
+ cout << " --verb = [0...] Sets verbosity level. Anything higher\n";
+ cout << " than 2 will give debug log\n";
+ cout << " --drat = {fname} DRAT dumped to file\n";
+ cout << " --gluebreak = {0,1} Break the glue-based restarts\n";
+ cout << " --threads = [1...] Sets number of threads\n";
+ cout << "\n";
+}
+
+const char* hasPrefix(const char* str, const char* prefix)
+{
+ int len = strlen(prefix);
+ if (strncmp(str, prefix, len) == 0)
+ return str + len;
+ else
+ return NULL;
+}
+
+int main(int argc, char** argv)
+{
+ SolverConf conf;
+ conf.verbosity = 1;
+ dratf = NULL;
+
+ int i, j;
+ long int num_threads = 1;
+ for (i = j = 0; i < argc; i++){
+ const char* value;
+ if ((value = hasPrefix(argv[i], "--drat="))){
+ handle_drat_option(conf, value);
+ }else if ((value = hasPrefix(argv[i], "--verb="))){
+ long int verbosity = (int)strtol(value, NULL, 10);
+ if (verbosity == 0 && errno == EINVAL){
+ cout << "ERROR! illegal verbosity level" << value << endl;
+ exit(0);
+ }
+ conf.verbosity = verbosity;
+ }else if ((value = hasPrefix(argv[i], "--threads="))){
+ num_threads = (int)strtol(value, NULL, 10);
+ if (num_threads == 0 && errno == EINVAL){
+ cout << "ERROR! illegal threads " << value << endl;
+ exit(0);
+ }
+ if (num_threads > 16) {
+ conf.var_and_mem_out_mult *= 0.4;
+ }
+ }else if ((value = hasPrefix(argv[i], "--otherconf="))){
+ int otherconf = (int)strtol(value, NULL, 10);
+ if (otherconf == 0 && errno == EINVAL){
+ cout << "ERROR! illegal threads " << value << endl;
+ exit(0);
+ }
+ if (otherconf == 1) {
+ cout << "c other conf set" << endl;
+ conf.intree_time_limitM = 1500;
+ conf.min_bva_gain = 64;
+ conf.ratio_glue_geom = 5;
+ }
+ }else if ((value = hasPrefix(argv[i], "--gluebreak="))){
+ int gluebreak = (int)strtol(value, NULL, 10);
+ if (gluebreak == 0 && errno == EINVAL){
+ cout << "ERROR! illegal gluebreak " << value << endl;
+ exit(0);
+ }
+ conf.broken_glue_restart = gluebreak;
+ }else if ((value = hasPrefix(argv[i], "--reconf="))){
+ long int reconf = (int)strtol(value, NULL, 10);
+ if (reconf == 0 && errno == EINVAL){
+ cout << "ERROR! illegal threads " << value << endl;
+ exit(0);
+ }
+ conf.reconfigure_val = reconf;
+ }else if (strcmp(argv[i], "--zero-exit-status") == 0){
+ zero_exit_status = true;
+ } else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0 || strcmp(argv[i], "--help") == 0){
+ printUsage(argv);
+ exit(0);
+
+ }else if (strncmp(argv[i], "-", 1) == 0){
+ cout << "ERROR! unknown flag" << argv[i] << endl;
+ exit(0);
+
+ }else
+ argv[j++] = argv[i];
+ }
+ argc = j;
+
+ SATSolver S(&conf);
+ solver = &S;
+ if (dratf) {
+ solver->set_drat(dratf, false);
+ if (num_threads > 1) {
+ cout << "ERROR: Cannot have DRAT and multiple threads." << endl;
+ exit(-1);
+ }
+ }
+ solver->set_num_threads(num_threads);
+
+ if (conf.verbosity) {
+ printVersionInfo();
+ cout << "c NOTE: this is a SIMPLIFIED executable. For the full experience, you need to compile/obtain/use the 'cryptominisat5' executable. To compile that, you need the boost libraries. Please read the README." << endl;
+ }
+ double cpu_time = cpuTime();
+
+ solver = &S;
+ signal(SIGINT,SIGINT_handler);
+ #if !defined (_WIN32)
+ signal(SIGHUP,SIGINT_handler);
+ #endif
+
+ if (argc == 1) {
+ cout << "Reading from standard input... Use '-h' or '--help' for help.\n";
+ #ifndef USE_ZLIB
+ FILE* in = stdin;
+ DimacsParser<StreamBuffer<FILE*, FN> > parser(solver, NULL, conf.verbosity);
+ #else
+ gzFile in = gzdopen(0, "rb"); //opens stdin, which is 0
+ DimacsParser<StreamBuffer<gzFile, GZ> > parser(solver, NULL, conf.verbosity);
+ #endif
+
+ if (!parser.parse_DIMACS(in, false)) {
+ exit(-1);
+ }
+
+ #ifndef USE_ZLIB
+ fclose(in);
+ #else
+ gzclose(in);
+ #endif
+ } else {
+ #ifndef USE_ZLIB
+ FILE* in = fopen(argv[1], "rb");
+ #else
+ gzFile in = gzopen(argv[1], "rb");
+ #endif
+
+ if (in == NULL) {
+ std::cout << "ERROR! Could not open file: ";
+ if (argc == 1) {
+ std::cout << "<stdin>";
+ } else {
+ std::cout << argv[1] << " reason: " << strerror(errno);
+ }
+ std::cout << std::endl;
+ std::exit(1);
+ }
+
+ #ifndef USE_ZLIB
+ DimacsParser<StreamBuffer<FILE*, FN> > parser(solver, NULL, conf.verbosity);
+ #else
+ DimacsParser<StreamBuffer<gzFile, GZ> > parser(solver, NULL, conf.verbosity);
+ #endif
+
+ if (!parser.parse_DIMACS(in, false)) {
+ exit(-1);
+ }
+
+ #ifndef USE_ZLIB
+ fclose(in);
+ #else
+ gzclose(in);
+ #endif
+ }
+
+ double parse_time = cpuTime() - cpu_time;
+ if (conf.verbosity) {
+ cout << "c Parsing time: "
+ << std::fixed << std::setprecision(2) << parse_time << " s" << endl;
+ }
+
+ lbool ret = S.solve();
+ if (conf.verbosity) {
+ S.print_stats();
+ }
+
+ if (ret == l_True) {
+ cout << "s SATISFIABLE" << endl;
+ } else if (ret == l_False) {
+ cout << "s UNSATISFIABLE"<< endl;
+ }
+
+ if (ret == l_True) {
+ print_model(&std::cout, solver);
+ }
+
+ if (dratf) {
+ *dratf << std::flush;
+ if (dratf != &std::cout) {
+ delete dratf;
+ }
+ }
+
+ if (zero_exit_status)
+ return 0;
+ else {
+ return ret == l_True ? 10 : 20;
+ }
+}
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.cpp b/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.cpp
new file mode 100644
index 000000000..5e595172e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.cpp
@@ -0,0 +1,372 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "matrixfinder.h"
+#include "solver.h"
+#include "EGaussian.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "sqlstats.h"
+#include "xorfinder.h"
+#include "varreplacer.h"
+
+#include <set>
+#include <map>
+#include <iomanip>
+#include <cmath>
+
+//#define VERBOSE_DEBUG
+//#define PART_FINDING
+
+using namespace CMSat;
+
+using std::set;
+using std::map;
+
+MatrixFinder::MatrixFinder(Solver* _solver) :
+ solver(_solver)
+{
+}
+
+inline uint32_t MatrixFinder::fingerprint(const Xor& x) const
+{
+ uint32_t fingerprint = 0;
+
+ for (uint32_t v: x)
+ fingerprint |= v;
+
+ return fingerprint;
+}
+
+inline bool MatrixFinder::firstPartOfSecond(const Xor& c1, const Xor& c2) const
+{
+ uint32_t i1, i2;
+ for (i1 = 0, i2 = 0; i1 < c1.size() && i2 < c2.size();) {
+ if (c1[i1] != c2[i2])
+ i2++;
+ else {
+ i1++;
+ i2++;
+ }
+ }
+
+ return (i1 == c1.size());
+}
+
+inline bool MatrixFinder::belong_same_matrix(const Xor& x)
+{
+ uint32_t comp_num = std::numeric_limits<uint32_t>::max();
+ for (uint32_t v : x) {
+ if (table[v] == var_Undef) {
+ //Belongs to none, abort
+ return false;
+ }
+
+ if (comp_num == std::numeric_limits<uint32_t>::max()) {
+ //Belongs to this one
+ comp_num = table[v];
+ } else {
+ if (comp_num != table[v]) {
+ //Another var in this XOR belongs to another component
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+bool MatrixFinder::findMatrixes(bool simplify_xors)
+{
+ assert(solver->decisionLevel() == 0);
+ assert(solver->ok);
+ assert(solver->gmatrixes.empty());
+
+ table.clear();
+ table.resize(solver->nVars(), var_Undef);
+ reverseTable.clear();
+ matrix_no = 0;
+ double myTime = cpuTime();
+ XorFinder finder(NULL, solver);
+
+ if (simplify_xors) {
+ if (!solver->clauseCleaner->clean_xor_clauses(solver->xorclauses)) {
+ return false;
+ }
+ xors = solver->xorclauses;
+
+ finder.grab_mem();
+ xors = finder.remove_xors_without_connecting_vars(xors);
+ if (!finder.xor_together_xors(xors))
+ return false;
+
+ xors = finder.remove_xors_without_connecting_vars(xors);
+ } else {
+ xors = solver->xorclauses;
+ }
+ finder.clean_equivalent_xors(xors);
+
+ if (xors.size() < solver->conf.gaussconf.min_gauss_xor_clauses
+ || solver->conf.gaussconf.decision_until <= 0
+ ) {
+ if (solver->conf.verbosity >= 2)
+ cout << "c [matrix] too few xor clauses:" << xors.size() << endl;
+
+ return true;
+ }
+
+ if (xors.size() > solver->conf.gaussconf.max_gauss_xor_clauses
+ && solver->conf.independent_vars->size() > 0
+ ) {
+ if (solver->conf.verbosity) {
+ cout << "c WARNING independent vars have been given but there"
+ "are too many XORs and it would take too much time to put them"
+ "into matrixes. Skipping!" << endl;
+ return true;
+ }
+ }
+
+ if (!solver->conf.gaussconf.doMatrixFind) {
+ if (solver->conf.verbosity >=1) {
+ cout << "c Matrix finding disabled through switch. Putting all xors into matrix." << endl;
+ }
+ solver->gmatrixes.push_back(new EGaussian(solver, solver->conf.gaussconf, 0, xors));
+ solver->gqueuedata.resize(solver->gmatrixes.size());
+ return true;
+ }
+
+ vector<uint32_t> newSet;
+ set<uint32_t> tomerge;
+ for (const Xor& x : xors) {
+ if (belong_same_matrix(x)) {
+ continue;
+ }
+
+ tomerge.clear();
+ newSet.clear();
+ for (uint32_t v : x) {
+ if (table[v] != var_Undef)
+ tomerge.insert(table[v]);
+ else
+ newSet.push_back(v);
+ }
+ if (tomerge.size() == 1) {
+ const uint32_t into = *tomerge.begin();
+ auto intoReverse = reverseTable.find(into);
+ for (uint32_t i = 0; i < newSet.size(); i++) {
+ intoReverse->second.push_back(newSet[i]);
+ table[newSet[i]] = into;
+ }
+ continue;
+ }
+
+ for (uint32_t v: tomerge) {
+ newSet.insert(newSet.end(), reverseTable[v].begin(), reverseTable[v].end());
+ reverseTable.erase(v);
+ }
+ for (uint32_t i = 0; i < newSet.size(); i++)
+ table[newSet[i]] = matrix_no;
+ reverseTable[matrix_no] = newSet;
+ matrix_no++;
+ }
+
+ #ifdef VERBOSE_DEBUG
+ for (map<uint32_t, vector<uint32_t> >::iterator it = reverseTable.begin()
+ , end = reverseTable.end()
+ ; it != end
+ ; ++it
+ ) {
+ cout << "-- set: " << endl;
+ for (vector<uint32_t>::iterator it2 = it->second.begin(), end2 = it->second.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ cout << *it2 << ", ";
+ }
+ cout << "-------" << endl;
+ }
+ #endif
+
+ uint32_t numMatrixes = setMatrixes();
+
+ const bool time_out = false;
+ const double time_used = cpuTime() - myTime;
+ if (solver->conf.verbosity) {
+ cout << "c Found matrixes: " << numMatrixes
+ << " from " << xors.size() << " xors"
+ << solver->conf.print_times(time_used, time_out)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "matrix find"
+ , time_used
+ );
+ }
+
+ return solver->okay();
+}
+
+uint32_t MatrixFinder::setMatrixes()
+{
+ if (solver->conf.independent_vars) {
+ uint32_t size_at_least = (double)solver->conf.independent_vars->size()*3;
+ if (solver->conf.gaussconf.max_matrix_rows < size_at_least) {
+ solver->conf.gaussconf.max_matrix_rows = size_at_least;
+ if (solver->conf.verbosity) {
+ cout << "c [matrixfind] incrementing max number of rows to "
+ << size_at_least
+ << endl;
+ }
+ }
+ }
+
+ vector<MatrixShape> matrix_shape;
+ vector<vector<Xor> > xorsInMatrix(matrix_no);
+
+ for (uint32_t i = 0; i < matrix_no; i++) {
+ matrix_shape.push_back(MatrixShape(i));
+ matrix_shape[i].num = i;
+ matrix_shape[i].cols = reverseTable[i].size();
+ }
+
+ for (const Xor& x : xors) {
+ //take 1st variable to check which matrix it's in.
+ const uint32_t matrix = table[x[0]];
+ assert(matrix < matrix_no);
+
+ //for stats
+ matrix_shape[matrix].rows ++;
+ matrix_shape[matrix].sum_xor_sizes += x.size();
+ xorsInMatrix[matrix].push_back(x);
+ }
+
+ for(auto& m: matrix_shape) {
+ if (m.tot_size() > 0) {
+ m.density = (double)m.sum_xor_sizes / (double)(m.tot_size());
+ }
+ }
+
+ std::sort(matrix_shape.begin(), matrix_shape.end(), mysorter());
+
+ uint32_t realMatrixNum = 0;
+ uint32_t unusedMatrix = 0;
+ for (int a = matrix_no-1; a >= 0; a--) {
+ MatrixShape& m = matrix_shape[a];
+ uint32_t i = m.num;
+ if (m.rows == 0) {
+ continue;
+ }
+
+ //cout << "small check" << endl;
+ if (m.rows < solver->conf.gaussconf.min_matrix_rows
+ || m.rows > solver->conf.gaussconf.max_matrix_rows
+ ) {
+ if (m.rows > solver->conf.gaussconf.max_matrix_rows
+ && solver->conf.verbosity
+ ) {
+ cout << "c [matrix] Too many rows in matrix: " << m.rows << endl;
+ }
+ continue;
+ }
+
+ double ratio_indep = 0;
+ if (solver->conf.independent_vars) {
+ uint32_t indep_var_inside_matrix = 0;
+
+ //'seen' with what is in Matrix
+ for(uint32_t int_var: reverseTable[i]) {
+ solver->seen[int_var] = true;
+ }
+
+ for(uint32_t outside_var: *solver->conf.independent_vars) {
+ uint32_t outer_var = solver->map_to_with_bva(outside_var);
+ outer_var = solver->varReplacer->get_var_replaced_with_outer(outer_var);
+ uint32_t int_var = solver->map_outer_to_inter(outer_var);
+ if (int_var < solver->nVars()
+ && solver->seen[int_var]
+ ) {
+ indep_var_inside_matrix++;
+ }
+ }
+
+ //Clear 'seen'
+ for(uint32_t int_var: reverseTable[i]) {
+ solver->seen[int_var] = false;
+ }
+
+ ratio_indep = (double)indep_var_inside_matrix/(double)reverseTable[i].size();
+ }
+
+
+ bool use_matrix = false;
+ if (solver->conf.independent_vars) {
+ if (ratio_indep > 1.0) { //TODO Magic constant
+ use_matrix = true;
+ }
+ }
+
+ if (realMatrixNum <= solver->conf.gaussconf.max_num_matrixes) {
+ use_matrix = true;
+ }
+
+ if (use_matrix) {
+ solver->gmatrixes.push_back(
+ new EGaussian(solver, solver->conf.gaussconf, realMatrixNum, xorsInMatrix[i]));
+ solver->gqueuedata.resize(solver->gmatrixes.size());
+
+ if (solver->conf.verbosity) {
+ cout << "c [matrix] Good matrix " << std::setw(2) << realMatrixNum;
+ }
+ realMatrixNum++;
+ } else {
+ if (solver->conf.verbosity >= 3) {
+ cout << "c [matrix] UNused matrix ";
+ }
+ unusedMatrix++;
+ }
+
+ if (solver->conf.verbosity) {
+ double avg = (double)m.sum_xor_sizes/(double)m.rows;
+
+ if (!use_matrix && solver->conf.verbosity < 3)
+ continue;
+
+ cout << std::setw(7) << m.rows << " x"
+ << std::setw(5) << reverseTable[i].size()
+ << " density:"
+ << std::setw(5) << std::fixed << std::setprecision(1) << m.density << "%"
+ << " xorlen avg: "
+ << std::setw(5) << std::fixed << std::setprecision(2) << avg
+ << " perc indep: "
+ << std::setw(5) << std::fixed << std::setprecision(3) << ratio_indep*100.0 << " %"
+ << endl;
+ }
+ }
+
+ if (solver->conf.verbosity && unusedMatrix > 0) {
+ cout << "c [matrix] unused matrixes: " << unusedMatrix << endl;
+ }
+
+ return realMatrixNum;
+}
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h b/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h
new file mode 100644
index 000000000..3d85f0347
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/matrixfinder.h
@@ -0,0 +1,92 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef MATRIXFINDER_H
+#define MATRIXFINDER_H
+
+#include <vector>
+#include <map>
+#include "xor.h"
+#include "constants.h"
+
+namespace CMSat {
+
+class Solver;
+
+using std::map;
+using std::vector;
+using std::pair;
+
+class MatrixFinder {
+
+ public:
+ MatrixFinder(Solver* solver);
+
+ //NOTE "simplify_xors" should always be true except during testing
+ bool findMatrixes(bool simplify_xors = true);
+
+ private:
+ uint32_t setMatrixes();
+ struct MatrixShape
+ {
+ MatrixShape(uint32_t matrix_num) :
+ num(matrix_num)
+ {}
+
+ MatrixShape()
+ {}
+
+ uint32_t num;
+ uint32_t rows = 0;
+ uint32_t cols = 0;
+ uint32_t sum_xor_sizes = 0;
+ double density = 0;
+
+ uint64_t tot_size() const
+ {
+ return rows*cols;
+ }
+ };
+
+ struct mysorter
+ {
+ bool operator () (const MatrixShape& left, const MatrixShape& right)
+ {
+ return left.sum_xor_sizes < right.sum_xor_sizes;
+ }
+ };
+
+ inline uint32_t fingerprint(const Xor& c) const;
+ inline bool firstPartOfSecond(const Xor& c1, const Xor& c2) const;
+ inline bool belong_same_matrix(const Xor& x);
+
+ map<uint32_t, vector<uint32_t> > reverseTable; //matrix -> vars
+ vector<uint32_t> table; //var -> matrix
+ uint32_t matrix_no;
+ vector<Xor> xors;
+
+ Solver* solver;
+};
+
+}
+
+#endif //MATRIXFINDER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/mystack.h b/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
new file mode 100644
index 000000000..2d6b7757f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/mystack.h
@@ -0,0 +1,77 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __MYSTACK_H__
+#define __MYSTACK_H__
+
+#include <vector>
+using std::vector;
+
+namespace CMSat {
+
+template<class T>
+class MyStack
+{
+public:
+ void clear()
+ {
+ inter.clear();
+ }
+
+ bool empty() const
+ {
+ return inter.empty();
+ }
+
+ void pop()
+ {
+ assert(!inter.empty());
+ inter.resize(inter.size()-1);
+ }
+
+ const T top() const
+ {
+ return inter.back();
+ }
+
+ void push(const T& data)
+ {
+ inter.push_back(data);
+ }
+
+ size_t capacity() const
+ {
+ return inter.capacity();
+ }
+
+ size_t mem_used() const
+ {
+ return capacity()*sizeof(T);
+ }
+
+private:
+ vector<T> inter;
+};
+
+}
+
+#endif //__MYSTACK_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/nomutex.h b/cryptominisat5/cryptominisat-5.6.3/src/nomutex.h
new file mode 100644
index 000000000..67ba48ae4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/nomutex.h
@@ -0,0 +1,60 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef NO_MUTEX_H
+#define NO_MUTEX_H
+
+namespace std {
+ struct mutex {
+ void lock() {}
+ void unlock() {}
+ };
+
+ static const bool memory_order_relaxed = true;
+ static const bool memory_order_acquire = true;
+
+ inline void atomic_thread_fence(bool)
+ {}
+
+ template<class T>
+ struct atomic {
+ atomic()
+ {}
+
+ atomic(bool _val) :
+ val(_val)
+ {}
+
+ void store(bool _val, bool) {
+ val = _val;
+ }
+ bool load(bool) const {
+ return val;
+ }
+ operator bool() {
+ return val;
+ }
+ T val;
+ };
+}
+
+#endif //NO_MUTEX_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp b/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
new file mode 100644
index 000000000..c0459eb91
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.cpp
@@ -0,0 +1,3086 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "time_mem.h"
+#include <cassert>
+#include <iomanip>
+#include <cmath>
+#include <algorithm>
+#include <set>
+#include <algorithm>
+#include <fstream>
+#include <set>
+#include <iostream>
+#include <limits>
+#include <cmath>
+#include <functional>
+
+
+#include "popcnt.h"
+#include "occsimplifier.h"
+#include "clause.h"
+#include "solver.h"
+#include "clausecleaner.h"
+#include "constants.h"
+#include "solutionextender.h"
+#include "varreplacer.h"
+#include "varupdatehelper.h"
+#include "completedetachreattacher.h"
+#include "subsumestrengthen.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "toplevelgaussabst.h"
+#include "subsumeimplicit.h"
+#include "sqlstats.h"
+#include "datasync.h"
+#include "xorfinder.h"
+#include "bva.h"
+#include "trim.h"
+
+#ifdef USE_M4RI
+#include "toplevelgauss.h"
+#endif
+
+//#define VERBOSE_DEBUG
+#ifdef VERBOSE_DEBUG
+#define BIT_MORE_VERBOSITY
+#define VERBOSE_ORGATE_REPLACE
+#define VERBOSE_ASYMTE
+#define VERBOSE_GATE_REMOVAL
+#define VERBOSE_XORGATE_MIX
+#define VERBOSE_DEBUG_XOR_FINDER
+#define VERBOSE_DEBUG_VARELIM
+#endif
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+//#define VERBOSE_DEBUG_VARELIM
+//#define VERBOSE_DEBUG_XOR_FINDER
+//#define BIT_MORE_VERBOSITY
+//#define TOUCH_LESS
+//#define VERBOSE_ORGATE_REPLACE
+//#define VERBOSE_DEBUG_ASYMTE
+//#define VERBOSE_GATE_REMOVAL
+//#define VERBOSE_XORGATE_MIX
+//#define CHECK_N_OCCUR
+//#define DEBUG_VARELIM
+
+OccSimplifier::OccSimplifier(Solver* _solver):
+ solver(_solver)
+ , seen(solver->seen)
+ , seen2(solver->seen2)
+ , toClear(solver->toClear)
+ , velim_order(VarOrderLt(varElimComplexity))
+ , topLevelGauss(NULL)
+ //, gateFinder(NULL)
+ , anythingHasBeenBlocked(false)
+ , blockedMapBuilt(false)
+{
+ bva = new BVA(solver, this);
+ topLevelGauss = new TopLevelGaussAbst;
+ #ifdef USE_M4RI
+ delete topLevelGauss;
+ topLevelGauss = new TopLevelGauss(solver);
+ #endif
+ sub_str = new SubsumeStrengthen(this, solver);
+
+ if (solver->conf.doGateFind) {
+ //gateFinder = new GateFinder(this, solver);
+ }
+ tmp_bin_cl.resize(2);
+}
+
+OccSimplifier::~OccSimplifier()
+{
+ delete bva;
+ delete topLevelGauss;
+ delete sub_str;
+ //delete gateFinder;
+}
+
+void OccSimplifier::new_var(const uint32_t /*orig_outer*/)
+{
+ n_occurs.insert(n_occurs.end(), 2, 0);
+ if (solver->conf.independent_vars) {
+ indep_vars.insert(indep_vars.end(), 1, 0);
+ }
+}
+
+void OccSimplifier::new_vars(size_t n)
+{
+ n_occurs.insert(n_occurs.end(), n*2ULL, 0);
+ if (solver->conf.independent_vars) {
+ indep_vars.insert(indep_vars.end(), n, 0);
+ }
+}
+
+void OccSimplifier::save_on_var_memory()
+{
+ clauses.clear();
+ clauses.shrink_to_fit();
+ blkcls.shrink_to_fit();
+
+ cl_to_free_later.shrink_to_fit();
+
+ elim_calc_need_update.shrink_to_fit();
+ blockedClauses.shrink_to_fit();;
+}
+
+void OccSimplifier::print_blocked_clauses_reverse() const
+{
+ for(vector<BlockedClauses>::const_reverse_iterator
+ it = blockedClauses.rbegin(), end = blockedClauses.rend()
+ ; it != end
+ ; ++it
+ ) {
+ size_t at = 1;
+ vector<Lit> lits;
+ while(at < it->size()) {
+ Lit l = it->at(at, blkcls);
+ if (l == lit_Undef) {
+ cout
+ << "blocked clause (internal number):";
+ for(size_t i = 0; i < it->size(); i++) {
+ cout << it->at(i, blkcls) << " ";
+ }
+ cout << endl;
+ lits.clear();
+ } else {
+ lits.push_back(l);
+ }
+ at++;
+ }
+
+ cout
+ << "dummy blocked clause for var (internal number) " << it->at(0, blkcls).var()
+ << endl;
+
+ }
+}
+
+void OccSimplifier::dump_blocked_clauses(std::ostream* outfile) const
+{
+ for (BlockedClauses blocked: blockedClauses) {
+ if (blocked.toRemove)
+ continue;
+
+ for (size_t i = 0; i < blocked.size(); i++) {
+ //It's blocked on this variable
+ if (i == 0) {
+ continue;
+ }
+ Lit l = blocked.at(i, blkcls);
+ if (l == lit_Undef) {
+ *outfile
+ << " 0"
+ << endl;
+ } else {
+ *outfile
+ << l << " ";
+ }
+ }
+ }
+}
+
+void OccSimplifier::extend_model(SolutionExtender* extender)
+{
+ //Either a variable is not eliminated, or its value is undef
+ for(size_t i = 0; i < solver->nVarsOuter(); i++) {
+ const uint32_t outer = solver->map_inter_to_outer(i);
+ assert(solver->varData[i].removed != Removed::elimed
+ || (solver->value(i) == l_Undef && solver->model_value(outer) == l_Undef)
+ );
+ }
+
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "Number of blocked clauses:" << blockedClauses.size() << endl;
+ print_blocked_clauses_reverse();
+ #endif
+
+ //go through in reverse order
+ vector<Lit> lits;
+ for (int i = (int)blockedClauses.size()-1; i >= 0; i--) {
+ BlockedClauses* it = &blockedClauses[i];
+ if (it->toRemove) {
+ continue;
+ }
+
+ Lit blockedOn = solver->varReplacer->get_lit_replaced_with_outer(it->at(0, blkcls));
+ size_t at = 1;
+ bool satisfied = false;
+ while(at < it->size()) {
+ if (it->at(at, blkcls) == lit_Undef) {
+ if (!satisfied) {
+ bool var_set = extender->addClause(lits, blockedOn.var());
+
+ #ifndef DEBUG_VARELIM
+ //all should be satisfied in fact
+ //no need to go any further
+ if (var_set)
+ break;
+ #endif
+ }
+ satisfied = false;
+ lits.clear();
+ } else if (!satisfied) {
+ Lit l = it->at(at, blkcls);
+ l = solver->varReplacer->get_lit_replaced_with_outer(l);
+
+ //Blocked clause can be skipped, it's satisfied
+ if (solver->model_value(l) == l_True) {
+ satisfied = true;
+ }
+ lits.push_back(l);
+ }
+ at++;
+ }
+ extender->dummyBlocked(blockedOn.var());
+ }
+ if (solver->conf.verbosity >= 2) {
+ cout << "c [extend] Extended " << blockedClauses.size() << " var-elim clauses" << endl;
+ }
+}
+
+void OccSimplifier::unlink_clause(
+ const ClOffset offset
+ , bool doDrat
+ , bool allow_empty_watch
+ , bool only_set_is_removed
+) {
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ if (doDrat && (solver->drat->enabled() || solver->conf.simulate_drat)) {
+ (*solver->drat) << del << cl << fin;
+ }
+
+ if (!cl.red()) {
+ for (const Lit lit: cl) {
+ elim_calc_need_update.touch(lit.var());
+#ifdef CHECK_N_OCCUR
+ assert(n_occurs[lit.toInt()]>0);
+#endif
+ n_occurs[lit.toInt()]--;
+ removed_cl_with_var.touch(lit.var());
+ }
+ }
+
+ if (!only_set_is_removed) {
+ for (const Lit lit: cl) {
+ if (!(allow_empty_watch && solver->watches[lit].empty())) {
+ *limit_to_decrease -= 2*(long)solver->watches[lit].size();
+ removeWCl(solver->watches[lit], offset);
+ }
+ }
+ } else {
+ for (const Lit lit: cl) {
+ solver->watches.smudge(lit);
+ }
+ }
+ cl.setRemoved();
+
+ if (cl.red()) {
+ solver->litStats.redLits -= cl.size();
+ } else {
+ solver->litStats.irredLits -= cl.size();
+ }
+
+ if (!only_set_is_removed) {
+ solver->cl_alloc.clauseFree(&cl);
+ } else {
+ cl_to_free_later.push_back(offset);
+ }
+}
+
+lbool OccSimplifier::clean_clause(ClOffset offset)
+{
+ assert(!solver->drat->something_delayed());
+ assert(solver->ok);
+
+ bool satisfied = false;
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ (*solver->drat) << deldelay << cl << fin;
+
+ Lit* i = cl.begin();
+ Lit* j = cl.begin();
+ const Lit* end = cl.end();
+ *limit_to_decrease -= (long)cl.size();
+ for(; i != end; i++) {
+ if (solver->value(*i) == l_Undef) {
+ //clean_clause() is called when the clause changed, so this is relevant
+ added_cl_to_var.touch(i->var());
+ *j++ = *i;
+ continue;
+ }
+
+ if (solver->value(*i) == l_True)
+ satisfied = true;
+
+ if (solver->value(*i) == l_True
+ || solver->value(*i) == l_False
+ ) {
+ removeWCl(solver->watches[*i], offset);
+ if (!cl.red()) {
+ removed_cl_with_var.touch(i->var());
+ elim_calc_need_update.touch(i->var());
+ n_occurs[i->toInt()]--;
+ }
+ }
+ }
+ cl.shrink(i-j);
+ cl.recalc_abst_if_needed();
+
+ //Update lits stat
+ if (cl.red()) {
+ solver->litStats.redLits -= i-j;
+ } else {
+ solver->litStats.irredLits -= i-j;
+ }
+
+ if (satisfied) {
+ (*solver->drat) << findelay;
+ unlink_clause(offset, false);
+ return l_True;
+ }
+
+ if (solver->conf.verbosity >= 6) {
+ cout << "-> Clause became after cleaning:" << cl << endl;
+ }
+
+ if (i-j > 0) {
+ (*solver->drat) << add << cl
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+ } else {
+ solver->drat->forget_delay();
+ }
+
+ switch(cl.size()) {
+ case 0:
+ unlink_clause(offset, false);
+ solver->ok = false;
+ return l_False;
+
+ case 1:
+ solver->enqueue(cl[0]);
+ #ifdef STATS_NEEDED
+ solver->propStats.propsUnit++;
+ #endif
+ unlink_clause(offset, false);
+ return l_True;
+
+ case 2: {
+ solver->attach_bin_clause(cl[0], cl[1], cl.red());
+ if (!cl.red()) {
+ std::pair<Lit, Lit> tmp = {cl[0], cl[1]};
+ added_bin_cl.push_back(tmp);
+ n_occurs[tmp.first.toInt()]++;
+ n_occurs[tmp.second.toInt()]++;
+ }
+ unlink_clause(offset, false);
+ return l_True;
+ }
+ default:
+ cl.setStrenghtened();
+ cl.recalc_abst_if_needed();
+ if (!cl.red()) {
+ added_long_cl.push_back(offset);
+ }
+ return l_Undef;
+ }
+}
+
+
+bool OccSimplifier::complete_clean_clause(Clause& cl)
+{
+ assert(!solver->drat->something_delayed());
+ assert(cl.size() > 2);
+ (*solver->drat) << deldelay << cl << fin;
+
+ //Remove all lits from stats
+ //we will re-attach the clause either way
+ if (cl.red()) {
+ solver->litStats.redLits -= cl.size();
+ } else {
+ solver->litStats.irredLits -= cl.size();
+ }
+
+ Lit *i = cl.begin();
+ Lit *j = i;
+ for (Lit *end = cl.end(); i != end; i++) {
+ if (solver->value(*i) == l_True) {
+
+ (*solver->drat) << findelay;
+ return false;
+ }
+
+ if (solver->value(*i) == l_Undef) {
+ *j++ = *i;
+ }
+ }
+ cl.shrink(i-j);
+ cl.recalc_abst_if_needed();
+
+ //Drat
+ if (i - j > 0) {
+ (*solver->drat) << add << cl
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+ } else {
+ solver->drat->forget_delay();
+ }
+
+ switch (cl.size()) {
+ case 0:
+ solver->ok = false;
+ return false;
+
+ case 1:
+ solver->enqueue(cl[0]);
+ #ifdef STATS_NEEDED
+ solver->propStats.propsUnit++;
+ #endif
+ return false;
+
+ case 2:
+ solver->attach_bin_clause(cl[0], cl[1], cl.red());
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+uint64_t OccSimplifier::calc_mem_usage_of_occur(const vector<ClOffset>& toAdd) const
+{
+ uint64_t memUsage = 0;
+ for (vector<ClOffset>::const_iterator
+ it = toAdd.begin(), end = toAdd.end()
+ ; it != end
+ ; ++it
+ ) {
+ Clause* cl = solver->cl_alloc.ptr(*it);
+ //*2 because of the overhead of allocation
+ memUsage += cl->size()*sizeof(Watched)*2;
+ }
+
+ //Estimate malloc overhead
+ memUsage += solver->num_active_vars()*2*40;
+
+ return memUsage;
+}
+
+void OccSimplifier::print_mem_usage_of_occur(uint64_t memUsage) const
+{
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ] mem usage for occur "
+ << std::setw(6) << memUsage/(1024ULL*1024ULL) << " MB"
+ << endl;
+ }
+}
+
+void OccSimplifier::print_linkin_data(const LinkInData link_in_data) const
+{
+ if (solver->conf.verbosity < 2)
+ return;
+
+ double val;
+ if (link_in_data.cl_linked + link_in_data.cl_not_linked == 0) {
+ val = 0;
+ } else {
+ val = float_div(link_in_data.cl_not_linked, link_in_data.cl_linked+link_in_data.cl_not_linked)*100.0;
+ }
+
+ cout
+ << "c [occ] Not linked in "
+ << link_in_data.cl_not_linked << "/"
+ << (link_in_data.cl_linked + link_in_data.cl_not_linked)
+ << " ("
+ << std::setprecision(2) << std::fixed
+ << val
+ << " %)"
+ << endl;
+}
+
+
+OccSimplifier::LinkInData OccSimplifier::link_in_clauses(
+ const vector<ClOffset>& toAdd
+ , bool alsoOccur
+ , uint32_t max_size
+ , int64_t link_in_lit_limit
+) {
+ LinkInData link_in_data;
+ for (const ClOffset offs: toAdd) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ cl->recalc_abst_if_needed();
+ assert(cl->abst == calcAbstraction(*cl));
+
+ if (alsoOccur
+ && cl->size() < max_size
+ && link_in_lit_limit > 0
+ ) {
+ linkInClause(*cl);
+ link_in_data.cl_linked++;
+ link_in_lit_limit -= cl->size();
+ clause_lits_added += cl->size();
+ } else {
+ /*cout << "alsoOccur: " << alsoOccur
+ << " cl->size() < max_size: " << (cl->size() < max_size)
+ << " link_in_lit_limit: " << link_in_lit_limit << endl;*/
+ //assert(cl->red());
+ cl->setOccurLinked(false);
+ link_in_data.cl_not_linked++;
+ std::sort(cl->begin(), cl->end());
+ }
+
+ clauses.push_back(offs);
+ }
+
+ return link_in_data;
+}
+
+bool OccSimplifier::decide_occur_limit(bool irred, uint64_t memUsage)
+{
+ //over + irred -> exit
+ if (irred
+ && (double)memUsage/(1024.0*1024.0) >= solver->conf.maxOccurIrredMB
+ ) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [simp] Not linking in irred due to excessive expected memory usage"
+ << endl;
+ }
+ return false;
+ }
+
+ //over + red -> don't link
+ if (!irred
+ && (double)memUsage/(1024.0*1024.0) >= solver->conf.maxOccurRedMB
+ ) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [simp] Not linking in red due to excessive expected memory usage"
+ << endl;
+ }
+
+ return false;
+ }
+
+ return true;
+}
+
+bool OccSimplifier::check_varelim_when_adding_back_cl(const Clause* cl) const
+{
+ bool notLinkedNeedFree = false;
+ for (Clause::const_iterator
+ it2 = cl->begin(), end2 = cl->end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ //The clause was too long, and wasn't linked in
+ //but has been var-elimed, so remove it
+ if (!cl->getOccurLinked()
+ && solver->varData[it2->var()].removed == Removed::elimed
+ ) {
+ notLinkedNeedFree = true;
+ }
+
+ if (cl->getOccurLinked()
+ && solver->varData[it2->var()].removed != Removed::none
+ ) {
+ std::cerr
+ << "ERROR! Clause " << *cl
+ << " red: " << cl->red()
+ << " contains lit " << *it2
+ << " which has removed status"
+ << removed_type_to_string(solver->varData[it2->var()].removed)
+ << endl;
+
+ assert(false);
+ std::exit(-1);
+ }
+ }
+
+ return notLinkedNeedFree;
+}
+
+void OccSimplifier::add_back_to_solver()
+{
+ for (ClOffset offs: clauses) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->freed())
+ continue;
+
+ assert(!cl->getRemoved());
+
+ //All clauses are larger than 2-long
+ assert(cl->size() > 2);
+
+ if (check_varelim_when_adding_back_cl(cl)) {
+ //The clause wasn't linked in but needs removal now
+ if (cl->red()) {
+ solver->litStats.redLits -= cl->size();
+ } else {
+ solver->litStats.irredLits -= cl->size();
+ }
+ solver->cl_alloc.clauseFree(cl);
+ continue;
+ }
+
+ if (complete_clean_clause(*cl)) {
+ solver->attachClause(*cl);
+ if (cl->red()) {
+ if (cl->stats.glue <= solver->conf.glue_put_lev0_if_below_or_eq) {
+ cl->stats.which_red_array = 0;
+ } else if (
+ cl->stats.glue <= solver->conf.glue_put_lev1_if_below_or_eq
+ && solver->conf.glue_put_lev1_if_below_or_eq != 0
+ ) {
+ cl->stats.which_red_array = 1;
+ }
+ solver->longRedCls[cl->stats.which_red_array].push_back(offs);
+ } else {
+ solver->longIrredCls.push_back(offs);
+ }
+ } else {
+ solver->cl_alloc.clauseFree(cl);
+ }
+ }
+}
+
+void OccSimplifier::remove_all_longs_from_watches()
+{
+ for (watch_array::iterator
+ it = solver->watches.begin(), end = solver->watches.end()
+ ; it != end
+ ; ++it
+ ) {
+ watch_subarray ws = *it;
+
+ Watched* i = ws.begin();
+ Watched* j = i;
+ for (Watched *end2 = ws.end(); i != end2; i++) {
+ if (i->isClause()) {
+ continue;
+ } else {
+ assert(i->isBin());
+ *j++ = *i;
+ }
+ }
+ ws.shrink(i - j);
+ }
+}
+
+void OccSimplifier::eliminate_empty_resolvent_vars()
+{
+ uint32_t var_elimed = 0;
+ double myTime = cpuTime();
+ const int64_t orig_empty_varelim_time_limit = empty_varelim_time_limit;
+ limit_to_decrease = &empty_varelim_time_limit;
+ assert(cl_to_free_later.empty());
+ assert(solver->watches.get_smudged_list().empty());
+
+ ///Nothing to do
+ if (solver->nVars() == 0)
+ return;
+
+ for(size_t var = solver->mtrand.randInt(solver->nVars()-1), num = 0
+ ; num < solver->nVars() && *limit_to_decrease > 0
+ ; var = (var + 1) % solver->nVars(), num++
+ ) {
+ assert(var == var % solver->nVars());
+ if (!can_eliminate_var(var))
+ continue;
+
+ const Lit lit = Lit(var, false);
+ if (!check_empty_resolvent(lit))
+ continue;
+
+ create_dummy_blocked_clause(lit);
+ rem_cls_from_watch_due_to_varelim(solver->watches[lit], lit);
+ rem_cls_from_watch_due_to_varelim(solver->watches[~lit], ~lit);
+ set_var_as_eliminated(var, lit);
+ var_elimed++;
+ }
+
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ free_clauses_to_free();
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (*limit_to_decrease <= 0);
+ const double time_remain = float_div(*limit_to_decrease, orig_empty_varelim_time_limit);
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ-empty-res] Empty resolvent elimed: " << var_elimed
+ << solver->conf.print_times(time_used, time_out)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "empty resolvent"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+}
+
+bool OccSimplifier::can_eliminate_var(const uint32_t var) const
+{
+ #ifdef SLOW_DEBUG
+ if (solver->conf.independent_vars) {
+ assert(var < solver->nVars());
+ assert(var < indep_vars.size());
+ }
+ #endif
+
+ assert(var < solver->nVars());
+ if (solver->value(var) != l_Undef
+ || solver->varData[var].removed != Removed::none
+ || solver->var_inside_assumptions(var)
+ || (solver->conf.independent_vars && indep_vars[var])
+ //|| (!solver->conf.allow_elim_xor_vars && solver->varData[var].added_for_xor)
+ ) {
+ return false;
+ }
+
+ return true;
+}
+
+uint32_t OccSimplifier::sum_irred_cls_longs() const
+{
+ uint32_t sum = 0;
+ for (ClOffset offs: clauses) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->freed() || cl->getRemoved() || cl->red())
+ continue;
+
+ assert(cl->size() > 2);
+ sum++;
+ }
+ return sum;
+}
+
+uint32_t OccSimplifier::sum_irred_cls_longs_lits() const
+{
+ uint32_t sum = 0;
+ for (ClOffset offs: clauses) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->freed() || cl->getRemoved() || cl->red())
+ continue;
+
+ assert(cl->size() > 2);
+ sum += cl->size();
+ }
+ return sum;
+}
+
+bool OccSimplifier::deal_with_added_long_and_bin(const bool main)
+{
+ while (!added_long_cl.empty() && !added_bin_cl.empty())
+ {
+ if (!sub_str->handle_added_long_cl(limit_to_decrease, main)) {
+ return false;
+ }
+ added_long_cl.clear();
+
+ //NOTE: added_bin_cl CAN CHANGE while this is running!!
+ for (size_t i = 0; i < added_bin_cl.size(); i++) {
+ tmp_bin_cl[0] = added_bin_cl[i].first;
+ tmp_bin_cl[1] = added_bin_cl[i].second;
+
+ sub_str->backw_sub_str_long_with_implicit(tmp_bin_cl);
+ if (!solver->okay()) {
+ return false;
+ }
+ }
+ added_bin_cl.clear();
+ }
+ return true;
+}
+
+bool OccSimplifier::clear_vars_from_cls_that_have_been_set(size_t& last_trail)
+{
+ //BUG TODO
+ //solver->clauseCleaner->clean_implicit_clauses();
+
+ vector<ClOffset> cls_to_clean;
+ while(last_trail < solver->trail_size()) {
+ Lit l = solver->trail_at(last_trail++);
+ watch_subarray ws = solver->watches[l];
+ for (Watched& w: ws) {
+ if (w.isClause()) {
+ ClOffset offs = w.get_offset();
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->getRemoved() || cl->freed()) {
+ continue;
+ }
+ cls_to_clean.push_back(offs);
+ }
+ }
+
+ l = ~l;
+ watch_subarray ws2 = solver->watches[l];
+ for(Watched& w: ws2) {
+ if (w.isClause()) {
+ ClOffset offs = w.get_offset();
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->getRemoved() || cl->freed()) {
+ continue;
+ }
+ cls_to_clean.push_back(offs);
+ }
+ }
+ }
+ for(ClOffset offs: cls_to_clean) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (!cl->getRemoved() && !cl->freed()) {
+ lbool ret = clean_clause(offs);
+ if (ret == l_False) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+bool OccSimplifier::deal_with_added_cl_to_var_lit(const Lit lit)
+{
+ watch_subarray_const cs = solver->watches[lit];
+ *limit_to_decrease -= (long)cs.size()*2+ 40;
+ for (const Watched *it = cs.begin(), *end = cs.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (it->isClause()) {
+ ClOffset offs = it->get_offset();
+ Clause* cl = solver->cl_alloc.ptr(offs);
+
+ //Has already been removed or added to "added_long_cl"
+ if (cl->freed() || cl->getRemoved() || cl->stats.marked_clause)
+ continue;
+
+ cl->stats.marked_clause = 1;
+ added_long_cl.push_back(offs);
+ }
+ }
+ return true;
+}
+
+bool OccSimplifier::prop_and_clean_long_and_impl_clauses()
+{
+ solver->ok = solver->propagate_occur();
+ if (!solver->okay()) {
+ return false;
+ }
+
+ for(ClOffset offs: clauses) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (!cl->getRemoved() && !cl->freed() && cl->getOccurLinked()) {
+ lbool ret = clean_clause(offs);
+ if (ret == l_False) {
+ return false;
+ }
+ }
+ }
+
+ //BUG TODO
+ //solver->clauseCleaner->clean_implicit_clauses();
+
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ return true;
+}
+
+bool OccSimplifier::simulate_frw_sub_str_with_added_cl_to_var()
+{
+ limit_to_decrease = &varelim_sub_str_limit;
+
+ //during the deal_with_added_cl_to_var_lit() below, we mark the clauses
+ //so we don't add the same clause twice
+ for(uint32_t i = 0
+ ; i < added_cl_to_var.getTouchedList().size()
+ && *limit_to_decrease > 0
+ && !solver->must_interrupt_asap()
+ ; i++
+ ) {
+ uint32_t var = added_cl_to_var.getTouchedList()[i];
+ Lit lit = Lit(var, true);
+ if (!sub_str->backw_sub_str_long_with_bins_watch(lit, false)) {
+ return false;
+ }
+ if (!deal_with_added_cl_to_var_lit(lit)) {
+ return false;
+ }
+
+ lit = ~lit;
+ if (!sub_str->backw_sub_str_long_with_bins_watch(lit, false)) {
+ return false;
+ }
+ if (!deal_with_added_cl_to_var_lit(lit)) {
+ return false;
+ }
+ }
+ added_cl_to_var.clear();
+
+ //here, we clean the marks on the clauses, even in case of timeout/abort
+ if (!sub_str->handle_added_long_cl(&varelim_sub_str_limit, false)) {
+ return false;
+ }
+ limit_to_decrease = &norm_varelim_time_limit;
+
+ return true;
+}
+
+bool OccSimplifier::eliminate_vars()
+{
+ //solver->conf.verbosity = 1;
+ //Set-up
+ size_t last_trail = solver->trail_size();
+ double myTime = cpuTime();
+ size_t vars_elimed = 0;
+ size_t wenThrough = 0;
+ time_spent_on_calc_otf_update = 0;
+ num_otf_update_until_now = 0;
+ int64_t orig_norm_varelim_time_limit = norm_varelim_time_limit;
+ limit_to_decrease = &norm_varelim_time_limit;
+ cl_to_free_later.clear();
+ assert(solver->watches.get_smudged_list().empty());
+ bvestats.clear();
+ bvestats.numCalls = 1;
+
+ //Go through the ordered list of variables to eliminate
+ int64_t last_elimed = 1;
+ grow = 0;
+ uint32_t n_cls_last = sum_irred_cls_longs() + solver->binTri.irredBins;
+ uint32_t n_cls_init = n_cls_last;
+ uint32_t n_vars_last = solver->get_num_free_vars();
+
+
+ added_bin_cl.clear();
+
+ //For debug ONLY
+ // subsume with bins everywhere first
+// for(uint32_t i = 0; i < solver->nVars(); i++) {
+// Lit lit = Lit(i, false);
+// if (!sub_str->backw_sub_str_long_with_bins_watch(lit, false)) {
+// goto end;
+// }
+//
+// lit = Lit(i, true);
+// if (!sub_str->backw_sub_str_long_with_bins_watch(lit, false)) {
+// goto end;
+// }
+// if (*limit_to_decrease <= 0)
+// break;
+// }
+ //
+
+ if (!prop_and_clean_long_and_impl_clauses()) {
+ goto end;
+ }
+ last_trail = solver->trail_size();
+
+ while(varelim_num_limit > 0
+ && *limit_to_decrease > 0
+ && grow < (uint32_t)solver->conf.min_bva_gain
+ //&& grow < 1 //solver->conf.min_bva_gain
+ ) {
+ if (solver->conf.verbosity >= 2) {
+ cout << "c x n vars : " << solver->get_num_free_vars() << endl;
+ #ifdef DEBUG_VARELIM
+ cout << "c x cls long : " << sum_irred_cls_longs() << endl;
+ cout << "c x cls bin : " << solver->binTri.irredBins << endl;
+ cout << "c x long cls lits: " << sum_irred_cls_longs_lits() << endl;
+ #endif
+ }
+
+ last_elimed = 0;
+ limit_to_decrease = &norm_varelim_time_limit;
+ order_vars_for_elim();
+
+ added_cl_to_var.clear();
+ removed_cl_with_var.touch(Lit(0, false));
+ while(!removed_cl_with_var.getTouchedList().empty()
+ && *limit_to_decrease > 0
+ && !solver->must_interrupt_asap()
+ ) {
+ removed_cl_with_var.clear();
+ while(!velim_order.empty()
+ && *limit_to_decrease > 0
+ && varelim_num_limit > 0
+ && !solver->must_interrupt_asap()
+ ) {
+ assert(limit_to_decrease == &norm_varelim_time_limit);
+ uint32_t var = velim_order.removeMin();
+
+ //Stats
+ *limit_to_decrease -= 20;
+ wenThrough++;
+
+ if (!can_eliminate_var(var))
+ continue;
+
+ //Try to eliminate
+ elim_calc_need_update.clear();
+ if (maybe_eliminate(var)) {
+ vars_elimed++;
+ varelim_num_limit--;
+ last_elimed++;
+ }
+ if (!solver->ok)
+ goto end;
+
+ //SUB and STR for long and short
+ limit_to_decrease = &varelim_sub_str_limit;
+ if (!deal_with_added_long_and_bin(false)) {
+ limit_to_decrease = &norm_varelim_time_limit;
+ goto end;
+ }
+ limit_to_decrease = &norm_varelim_time_limit;
+
+ solver->ok = solver->propagate_occur();
+ if (!solver->okay()) {
+ goto end;
+ }
+
+ update_varelim_complexity_heap();
+ }
+
+ //Clean clauses that have vars that have been set
+ if (last_trail != solver->trail_size()) {
+ if (!clear_vars_from_cls_that_have_been_set(last_trail)) {
+ goto end;
+ }
+ }
+
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ update_varelim_complexity_heap();
+
+
+ if (solver->conf.verbosity >= 2) {
+ cout <<"c size of added_cl_to_var : " << added_cl_to_var.getTouchedList().size() << endl;
+ cout <<"c size of removed_cl_with_var: " << removed_cl_with_var.getTouchedList().size() << endl;
+ }
+
+ if (!simulate_frw_sub_str_with_added_cl_to_var()) {
+ goto end;
+ }
+
+ for(uint32_t var: removed_cl_with_var.getTouchedList()) {
+ if (!can_eliminate_var(var)) {
+ continue;
+ }
+ varElimComplexity[var] = heuristicCalcVarElimScore(var);
+ velim_order.update(var);
+ }
+
+ if (solver->conf.verbosity >= 2) {
+ cout << "c x n vars : " << solver->get_num_free_vars() << endl;
+ #ifdef DEBUG_VARELIM
+ cout << "c x cls long : " << sum_irred_cls_longs() << endl;
+ cout << "c x cls bin : " << solver->binTri.irredBins << endl;
+ cout << "c x long cls lits: " << sum_irred_cls_longs_lits() << endl;
+ #endif
+ cout << "c another run ?"<< endl;
+ }
+ }
+ #ifdef DEBUG_VARELIM
+ if (solver->conf.verbosity >= 2) {
+ cout << "c finished here" << endl;
+ }
+ #endif
+ solver->clean_occur_from_removed_clauses_only_smudged();
+
+ //For debug ONLY
+ ///////////////
+// free_clauses_to_free();
+// // backward_sub_str();
+// // limit_to_decrease = &norm_varelim_time_limit;
+// solver->clauseCleaner->clean_implicit_clauses();
+// solver->clean_occur_from_removed_clauses();
+ ///////////////
+
+ uint32_t n_cls_now = sum_irred_cls_longs() + solver->binTri.irredBins;
+ uint32_t n_vars_now = solver->get_num_free_vars();
+ double cl_inc_rate = 2.0;
+ if (n_cls_last != 0) {
+ cl_inc_rate = (double)n_cls_now / n_cls_last;
+ }
+
+ double var_dec_rate = 1.0;
+ if (n_vars_now != 0) {
+ var_dec_rate = (double)n_vars_last / n_vars_now;
+ }
+ if (solver->conf.verbosity) {
+ cout << "c [occ-bve] iter v-elim " << last_elimed << endl;
+ cout << "c cl_inc_rate=" << cl_inc_rate
+ << ", var_dec_rate=" << var_dec_rate
+ << " (grow=" << grow << ")" << endl;
+
+ cout << "c Reduced to " << solver->get_num_free_vars() << " vars"
+ << ", " << sum_irred_cls_longs() + solver->binTri.irredBins
+ << " cls (grow=" << grow << ")" << endl;
+ }
+
+
+ if (n_cls_now > n_cls_init || cl_inc_rate > (var_dec_rate)) {
+ break;
+ }
+ n_cls_last = n_cls_now;
+ n_vars_last = n_vars_now;
+
+ if (grow == 0) {
+ grow = 8;
+ } else {
+ grow *= 2;
+ }
+ }
+
+ if (solver->conf.verbosity) {
+ cout << "c x n vars : " << solver->get_num_free_vars() << endl;
+ #ifdef DEBUG_VARELIM
+ cout << "c x cls long : " << sum_irred_cls_longs() << endl;
+ cout << "c x cls bin : " << solver->binTri.irredBins << endl;
+ cout << "c x long cls lits: " << sum_irred_cls_longs_lits() << endl;
+ #endif
+ }
+
+end:
+ free_clauses_to_free();
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (*limit_to_decrease <= 0);
+ const double time_remain = float_div(*limit_to_decrease, orig_norm_varelim_time_limit);
+
+ if (solver->conf.verbosity) {
+ cout
+ << "c #try to eliminate: "; print_value_kilo_mega(wenThrough); cout << endl
+ << "c #var-elim : "; print_value_kilo_mega(vars_elimed); cout << endl
+ << "c #T-o: " << (time_out ? "Y" : "N") << endl
+ << "c #T-r: " << std::fixed << std::setprecision(2) << (time_remain*100.0) << "%" << endl
+ << "c #T : " << time_used << endl;
+ }
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3)
+ runStats.print(solver->nVars());
+ else
+ runStats.print_short();
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "bve"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ assert(limit_to_decrease == &norm_varelim_time_limit);
+ bvestats.varElimTimeOut += time_out;
+ bvestats.timeUsed = cpuTime() - myTime;
+ bvestats_global += bvestats;
+
+ //exit(0);
+ return solver->okay();
+}
+
+void OccSimplifier::free_clauses_to_free()
+{
+ for(ClOffset off: cl_to_free_later) {
+ Clause* cl = solver->cl_alloc.ptr(off);
+ solver->cl_alloc.clauseFree(cl);
+ }
+ cl_to_free_later.clear();
+}
+
+bool OccSimplifier::fill_occur_and_print_stats()
+{
+ double myTime = cpuTime();
+ remove_all_longs_from_watches();
+ if (!fill_occur()) {
+ return false;
+ }
+ sanityCheckElimedVars();
+ const double linkInTime = cpuTime() - myTime;
+ runStats.linkInTime += linkInTime;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "occur build"
+ , linkInTime
+ );
+ }
+
+ //Print memory usage after occur link-in
+ if (solver->conf.verbosity) {
+ double vm_usage = 0;
+ solver->print_watch_mem_used(memUsedTotal(vm_usage));
+ }
+
+ return true;
+}
+
+struct MyOccSorter
+{
+ MyOccSorter(const Solver* _solver) :
+ solver(_solver)
+ {
+ }
+ bool operator()(const Watched& w1, const Watched& w2)
+ {
+ if (w2.isBin())
+ return false;
+
+ if (w1.isBin() && !w2.isBin())
+ return true;
+
+ //both are non-bin
+ const Clause* cl1 = solver->cl_alloc.ptr(w1.get_offset());
+ const Clause* cl2 = solver->cl_alloc.ptr(w2.get_offset());
+
+ //The other is at least as good, this is removed
+ if (cl1->freed() || cl1->getRemoved())
+ return false;
+
+ //The other is not removed, so it's better
+ if (cl2->freed() || cl2->getRemoved())
+ return true;
+
+ const uint32_t sz1 = cl1->size();
+ const uint32_t sz2 = cl2->size();
+ return sz1 < sz2;
+ }
+
+ const Solver* solver;
+};
+
+void OccSimplifier::sort_occurs_and_set_abst()
+{
+ for(auto& ws: solver->watches) {
+ std::sort(ws.begin(), ws.end(), MyOccSorter(solver));
+
+ for(Watched& w: ws) {
+ if (w.isClause()) {
+ Clause* cl = solver->cl_alloc.ptr(w.get_offset());
+ if (cl->freed() || cl->getRemoved()) {
+ w.setBlockedLit(lit_Error);
+ } else if (cl->size() >solver->conf.maxXorToFind) {
+ w.setBlockedLit(lit_Undef);
+ } else {
+ w.setBlockedLit(Lit::toLit(cl->abst));
+ }
+ }
+ }
+ }
+}
+
+bool OccSimplifier::execute_simplifier_strategy(const string& strategy)
+{
+ std::istringstream ss(strategy);
+ std::string token;
+
+ while(std::getline(ss, token, ',')) {
+ if (cpuTime() > solver->conf.maxTime
+ || solver->must_interrupt_asap()
+ || solver->nVars() == 0
+ || !solver->ok
+ ) {
+ return solver->okay();
+ }
+
+ #ifdef SLOW_DEBUG
+ check_clid_correct();
+ solver->check_implicit_stats(true);
+ #endif
+ if (!solver->propagate_occur()) {
+ solver->ok = false;
+ return false;
+ }
+ set_limits();
+
+ token = trim(token);
+ std::transform(token.begin(), token.end(), token.begin(), ::tolower);
+ if (token != "" && solver->conf.verbosity) {
+ cout << "c --> Executing OCC strategy token: " << token << '\n';
+ }
+ if (token == "occ-backw-sub-str") {
+ backward_sub_str();
+ } else if (token == "occ-xor") {
+ if (solver->conf.doFindXors) {
+ XorFinder finder(this, solver);
+ finder.find_xors();
+ vector<Xor> xors = finder.xors;
+ if (!finder.xor_together_xors(xors))
+ return false;
+
+ vector<Lit> out_changed_occur;
+ solver->ok = finder.add_new_truths_from_xors(xors, &out_changed_occur);
+ if (!solver->ok)
+ return false;
+
+ #ifdef USE_M4RI
+ if (topLevelGauss != NULL) {
+ xors = finder.remove_xors_without_connecting_vars(xors);
+ topLevelGauss->toplevelgauss(xors, &out_changed_occur);
+ }
+ #endif
+ finder.add_xors_to_solver();
+
+ //these may have changed, recalculating occur
+ for(Lit lit: out_changed_occur) {
+ n_occurs[lit.toInt()] = calc_occ_data(lit);
+ n_occurs[(~lit).toInt()] = calc_occ_data(~lit);
+ }
+ }
+ } else if (token == "occ-clean-implicit") {
+ //BUG TODO
+ //solver->clauseCleaner->clean_implicit_clauses();
+ } else if (token == "occ-bve") {
+ if (solver->conf.doVarElim && solver->conf.do_empty_varelim) {
+ solver->xorclauses.clear();
+ #ifdef USE_GAUSS
+ solver->clearEnGaussMatrixes();
+ #endif
+
+ eliminate_empty_resolvent_vars();
+ eliminate_vars();
+ }
+ } else if (token == "occ-bva") {
+ bva->bounded_var_addition();
+ added_bin_cl.clear();
+ added_cl_to_var.clear();
+ added_long_cl.clear();
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ } /*else if (token == "occ-gates") {
+ if (solver->conf.doCache
+ && solver->conf.doGateFind
+ ) {
+ gateFinder->doAll();
+ }
+ }*/ else if (token == "") {
+ //nothing, ignore empty token
+ } else {
+ cout << "ERROR: occur strategy '" << token << "' not recognised!" << endl;
+ exit(-1);
+ }
+
+#ifdef CHECK_N_OCCUR
+ check_n_occur();
+#endif //CHECK_N_OCCUR
+ }
+
+ if (solver->okay() &&
+ !solver->propagate_occur()
+ ) {
+ solver->ok = false;
+ return false;
+ }
+
+ return solver->okay();
+}
+
+bool OccSimplifier::setup()
+{
+ assert(solver->okay());
+ assert(toClear.empty());
+ added_long_cl.clear();
+ added_bin_cl.clear();
+ added_cl_to_var.clear();
+ n_occurs.clear();
+ n_occurs.resize(solver->nVars()*2, 0);
+
+ //Test & debug
+ #ifdef DEBUG_ATTACH_MORE
+ solver->test_all_clause_attached();
+ solver->check_wrong_attach();
+ #endif
+
+ //Clean the clauses before playing with them
+ solver->clauseCleaner->remove_and_clean_all();
+
+ //If too many clauses, don't do it
+ if (solver->getNumLongClauses() > 40ULL*1000ULL*1000ULL*solver->conf.var_and_mem_out_mult
+ || solver->litStats.irredLits > 100ULL*1000ULL*1000ULL*solver->conf.var_and_mem_out_mult
+ ) {
+ if (solver->conf.verbosity) {
+ cout << "c [occ] will not link in occur, CNF has too many clauses/irred lits" << endl;
+ }
+ return false;
+ }
+
+ //Setup
+ clause_lits_added = 0;
+ runStats.clear();
+ runStats.numCalls++;
+ clauses.clear();
+ set_limits(); //to calculate strengthening_time_limit
+ limit_to_decrease = &strengthening_time_limit;
+ if (!fill_occur_and_print_stats()) {
+ return false;
+ }
+
+ set_limits();
+ return solver->okay();
+}
+
+bool OccSimplifier::simplify(const bool _startup, const std::string schedule)
+{
+ #ifdef DEBUG_MARKED_CLAUSE
+ assert(solver->no_marked_clauses());
+ #endif
+
+ startup = _startup;
+ if (!setup()) {
+ return solver->okay();
+ }
+
+ const size_t origBlockedSize = blockedClauses.size();
+ const size_t origTrailSize = solver->trail_size();
+
+
+ indep_vars.clear();
+ if (solver->conf.independent_vars) {
+ indep_vars.resize(solver->nVars(), false);
+ for(uint32_t outside_var: *solver->conf.independent_vars) {
+ uint32_t outer_var = solver->map_to_with_bva(outside_var);
+ outer_var = solver->varReplacer->get_var_replaced_with_outer(outer_var);
+ uint32_t int_var = solver->map_outer_to_inter(outer_var);
+ if (int_var < solver->nVars()) {
+ indep_vars[int_var] = true;
+ }
+ }
+ } else {
+ indep_vars.shrink_to_fit();
+ }
+
+ execute_simplifier_strategy(schedule);
+
+ remove_by_drat_recently_blocked_clauses(origBlockedSize);
+ finishUp(origTrailSize);
+
+ return solver->okay();
+}
+
+bool OccSimplifier::backward_sub_str()
+{
+ limit_to_decrease = &subsumption_time_limit;
+ assert(cl_to_free_later.empty());
+ assert(solver->watches.get_smudged_list().empty());
+
+ if (!sub_str->backw_sub_str_long_with_bins()
+ || solver->must_interrupt_asap()
+ ) {
+ goto end;
+ }
+
+ sub_str->backw_sub_long_with_long();
+ if (solver->must_interrupt_asap())
+ goto end;
+
+ limit_to_decrease = &strengthening_time_limit;
+ if (!sub_str->backw_str_long_with_long()
+ || solver->must_interrupt_asap()
+ ) {
+ goto end;
+ }
+
+ if (!deal_with_added_long_and_bin(true)
+ || solver->must_interrupt_asap()
+ ) {
+ goto end;
+ }
+
+ end:
+ added_long_cl.clear();
+ free_clauses_to_free();
+ solver->clean_occur_from_removed_clauses_only_smudged();
+
+ return solver->okay();
+}
+
+bool OccSimplifier::fill_occur()
+{
+ //Calculate binary clauses' contribution to n_occurs
+ size_t wsLit = 0;
+ for (watch_array::const_iterator
+ it = solver->watches.begin(), end = solver->watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ Lit lit = Lit::toLit(wsLit);
+ watch_subarray_const ws = *it;
+ for (const Watched* it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ if (it2->isBin() && !it2->red() && lit < it2->lit2()) {
+ n_occurs[lit.toInt()]++;
+ n_occurs[it2->lit2().toInt()]++;
+ }
+ }
+ }
+
+ //Add irredundant to occur
+ uint64_t memUsage = calc_mem_usage_of_occur(solver->longIrredCls);
+ print_mem_usage_of_occur(memUsage);
+ if (memUsage > solver->conf.maxOccurIrredMB*1000ULL*1000ULL*solver->conf.var_and_mem_out_mult) {
+ if (solver->conf.verbosity) {
+ cout << "c [occ] Memory usage of occur is too high, unlinking and skipping occur" << endl;
+ }
+ CompleteDetachReatacher detRet(solver);
+ detRet.reattachLongs(true);
+ return false;
+ }
+
+ link_in_data_irred = link_in_clauses(
+ solver->longIrredCls
+ , true //add to occur list
+ , std::numeric_limits<uint32_t>::max()
+ , std::numeric_limits<int64_t>::max()
+ );
+ solver->longIrredCls.clear();
+ print_linkin_data(link_in_data_irred);
+
+ //Add redundant to occur
+ memUsage = calc_mem_usage_of_occur(solver->longRedCls[0]);
+ print_mem_usage_of_occur(memUsage);
+ bool linkin = true;
+ if (memUsage > solver->conf.maxOccurRedMB*1000ULL*1000ULL*solver->conf.var_and_mem_out_mult) {
+ linkin = false;
+ }
+ //Sort, so we get the shortest ones in at least
+ std::sort(solver->longRedCls[0].begin(), solver->longRedCls[0].end()
+ , ClauseSizeSorter(solver->cl_alloc));
+
+ link_in_data_red = link_in_clauses(
+ solver->longRedCls[0]
+ , linkin
+ , solver->conf.maxRedLinkInSize
+ , solver->conf.maxOccurRedLitLinkedM*1000ULL*1000ULL*solver->conf.var_and_mem_out_mult
+ );
+ solver->longRedCls[0].clear();
+
+ //Don't really link in the rest
+ for(auto& lredcls: solver->longRedCls) {
+ link_in_clauses(lredcls, linkin, 0, 0);
+ }
+ for(auto& lredcls: solver->longRedCls) {
+ lredcls.clear();
+ }
+
+ LinkInData combined(link_in_data_irred);
+ combined.combine(link_in_data_red);
+ print_linkin_data(combined);
+
+ return true;
+}
+
+//This must NEVER be called during solve. Only JUST BEFORE Solver::solve() is called
+//otherwise, uneliminated_vars_since_last_solve will be wrong
+bool OccSimplifier::uneliminate(uint32_t var)
+{
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "calling uneliminate() on var" << var+1 << endl;
+ #endif
+ assert(solver->decisionLevel() == 0);
+ assert(solver->okay());
+
+ //Check that it was really eliminated
+ //NOTE: it's already been made a decision var, as the variable has been re-added already
+ solver->set_decision_var(var);
+ assert(solver->varData[var].removed == Removed::elimed);
+ assert(solver->value(var) == l_Undef);
+
+ if (!blockedMapBuilt) {
+ cleanBlockedClauses();
+ buildBlockedMap();
+ }
+
+ //Uneliminate it in theory
+ bvestats_global.numVarsElimed--;
+ solver->varData[var].removed = Removed::none;
+ solver->set_decision_var(var);
+
+ //Find if variable is really needed to be eliminated
+ var = solver->map_inter_to_outer(var);
+ uint32_t at_blocked_cls = blk_var_to_cls[var];
+ if (at_blocked_cls == std::numeric_limits<uint32_t>::max())
+ return solver->okay();
+
+ //Eliminate it in practice
+ //NOTE: Need to eliminate in theory first to avoid infinite loops
+
+ //Mark for removal from blocked list
+ blockedClauses[at_blocked_cls].toRemove = true;
+ can_remove_blocked_clauses = true;
+ assert(blockedClauses[at_blocked_cls].at(0, blkcls).var() == var);
+
+ //Re-insert into Solver
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout
+ << "Uneliminating cl ";
+ for(size_t i=0; i< blockedClauses[at_blocked_cls].size(); i++){
+ cout << blockedClauses[at_blocked_cls].at(i, blkcls) << " ";
+ }
+ cout << " on var " << var+1
+ << endl;
+ #endif
+
+ vector<Lit> lits;
+ size_t bat = 1;
+ while(bat < blockedClauses[at_blocked_cls].size()) {
+ Lit l = blockedClauses[at_blocked_cls].at(bat, blkcls);
+ if (l == lit_Undef) {
+ solver->addClause(lits);
+ if (!solver->okay()) {
+ return false;
+ }
+ lits.clear();
+ } else {
+ lits.push_back(l);
+ }
+ bat++;
+ }
+
+ return solver->okay();
+}
+
+void OccSimplifier::remove_by_drat_recently_blocked_clauses(size_t origBlockedSize)
+{
+ if (!(*solver->drat).enabled())
+ return;
+
+ if (solver->conf.verbosity >= 6) {
+ cout << "c Deleting blocked clauses for DRAT" << endl;
+ }
+
+ for(size_t i = origBlockedSize; i < blockedClauses.size(); i++) {
+ //If doing stamping or caching, we cannot delete binary redundant
+ //clauses, because they are stored in the stamp/cache and so
+ //will be used -- and DRAT will complain when used
+ vector<Lit> lits;
+ size_t at = 1;
+ while(at < blockedClauses[i].size()) {
+ const Lit l = blockedClauses[i].at(at, blkcls);
+ if (l == lit_Undef) {
+ if (!(lits.size() <= 2 && (solver->conf.doCache|| solver->conf.doStamp))) {
+ (*solver->drat) << del << lits << fin;
+ }
+
+ lits.clear();
+ } else {
+ lits.push_back(l);
+ }
+ at++;
+ }
+ }
+}
+
+void OccSimplifier::buildBlockedMap()
+{
+ blk_var_to_cls.clear();
+ blk_var_to_cls.resize(solver->nVarsOuter(), std::numeric_limits<uint32_t>::max());
+ for(size_t i = 0; i < blockedClauses.size(); i++) {
+ const BlockedClauses& blocked = blockedClauses[i];
+ uint32_t blockedon = blocked.at(0, blkcls).var();
+ assert(blockedon < blk_var_to_cls.size());
+ blk_var_to_cls[blockedon] = i;
+ }
+ blockedMapBuilt = true;
+}
+
+void OccSimplifier::finishUp(
+ size_t origTrailSize
+) {
+ bool somethingSet = (solver->trail_size() - origTrailSize) > 0;
+ runStats.zeroDepthAssings = solver->trail_size() - origTrailSize;
+ const double myTime = cpuTime();
+
+ //Add back clauses to solver
+ if (solver->ok) {
+ solver-> ok = solver->propagate_occur();
+ }
+ remove_all_longs_from_watches();
+ add_back_to_solver();
+ if (solver->ok) {
+ solver->ok = solver->propagate<false>().isNULL();
+ }
+
+ //Update global stats
+ const double time_used = cpuTime() - myTime;
+ runStats.finalCleanupTime += time_used;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "occur cleanup"
+ , time_used
+ );
+ }
+ globalStats += runStats;
+ sub_str->finishedRun();
+
+ //Sanity checks
+ if (solver->ok && somethingSet) {
+ solver->test_all_clause_attached();
+ solver->check_wrong_attach();
+ solver->check_stats();
+ solver->check_implicit_propagated();
+ }
+
+ if (solver->ok) {
+ check_elimed_vars_are_unassignedAndStats();
+ }
+}
+
+void OccSimplifier::sanityCheckElimedVars()
+{
+ //First, sanity-check the long clauses
+ for (vector<ClOffset>::const_iterator
+ it = clauses.begin(), end = clauses.end()
+ ; it != end
+ ; ++it
+ ) {
+ const Clause* cl = solver->cl_alloc.ptr(*it);
+
+ //Already removed
+ if (cl->freed())
+ continue;
+
+ for (const Lit lit: *cl) {
+ if (solver->varData[lit.var()].removed == Removed::elimed) {
+ cout
+ << "Error: elimed var -- Lit " << lit << " in clause"
+ << endl
+ << "wrongly left in clause: " << *cl
+ << endl;
+ std::exit(-1);
+ }
+ }
+ }
+
+ //Then, sanity-check the binary clauses
+ size_t wsLit = 0;
+ for (watch_array::const_iterator
+ it = solver->watches.begin(), end = solver->watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ Lit lit = Lit::toLit(wsLit);
+ watch_subarray_const ws = *it;
+ for (const Watched* it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ if (it2->isBin()) {
+ if (solver->varData[lit.var()].removed == Removed::elimed
+ || solver->varData[it2->lit2().var()].removed == Removed::elimed
+ ) {
+ cout
+ << "Error: A var is elimed in a binary clause: "
+ << lit << " , " << it2->lit2()
+ << endl;
+ std::exit(-1);
+ }
+ }
+ }
+ }
+}
+
+void OccSimplifier::set_limits()
+{
+ subsumption_time_limit = 450LL*1000LL*solver->conf.subsumption_time_limitM
+ *solver->conf.global_timeout_multiplier;
+ strengthening_time_limit = 200LL*1000LL*solver->conf.strengthening_time_limitM
+ *solver->conf.global_timeout_multiplier;
+ norm_varelim_time_limit = 4ULL*1000LL*1000LL*solver->conf.varelim_time_limitM
+ *solver->conf.global_timeout_multiplier;
+ empty_varelim_time_limit = 200LL*1000LL*solver->conf.empty_varelim_time_limitM
+ *solver->conf.global_timeout_multiplier;
+ varelim_sub_str_limit = 1000ULL*1000ULL*solver->conf.varelim_sub_str_limit
+ *solver->conf.global_timeout_multiplier;
+
+ //If variable elimination isn't going so well
+ if (bvestats_global.testedToElimVars > 0
+ && float_div(bvestats_global.numVarsElimed, bvestats_global.testedToElimVars) < 0.1
+ ) {
+ norm_varelim_time_limit /= 2;
+ }
+
+ #ifdef BIT_MORE_VERBOSITY
+ cout << "c clause_lits_added: " << clause_lits_added << endl;
+ #endif
+
+ norm_varelim_time_limit *= 4;
+ empty_varelim_time_limit *= 4;
+ subsumption_time_limit *= 2;
+ strengthening_time_limit *= 2;
+ varelim_sub_str_limit *= 10;
+
+ varelim_num_limit = ((double)solver->get_num_free_vars() * solver->conf.varElimRatioPerIter);
+
+ if (!solver->conf.do_strengthen_with_occur) {
+ strengthening_time_limit = 0;
+ }
+
+ //For debugging
+// subsumption_time_limit = 0;
+// strengthening_time_limit = 0;
+// norm_varelim_time_limit = 0;
+// empty_varelim_time_limit = 0;
+// varelim_num_limit = 0;
+// subsumption_time_limit = std::numeric_limits<int64_t>::max();
+// strengthening_time_limit = std::numeric_limits<int64_t>::max();
+// norm_varelim_time_limit = std::numeric_limits<int64_t>::max();
+// empty_varelim_time_limit = std::numeric_limits<int64_t>::max();
+// varelim_num_limit = std::numeric_limits<int64_t>::max();
+// varelim_sub_str_limit = std::numeric_limits<int64_t>::max();
+}
+
+void OccSimplifier::cleanBlockedClausesIfDirty()
+{
+ if (can_remove_blocked_clauses) {
+ cleanBlockedClauses();
+ }
+}
+
+void OccSimplifier::cleanBlockedClauses()
+{
+ assert(solver->decisionLevel() == 0);
+ vector<BlockedClauses>::iterator i = blockedClauses.begin();
+ vector<BlockedClauses>::iterator j = blockedClauses.begin();
+
+ uint64_t i_blkcls = 0;
+ uint64_t j_blkcls = 0;
+ for (vector<BlockedClauses>::iterator
+ end = blockedClauses.end()
+ ; i != end
+ ; i++
+ ) {
+ const uint32_t blockedOn = solver->map_outer_to_inter(i->at(0, blkcls).var());
+ if (solver->varData[blockedOn].removed == Removed::elimed
+ && solver->value(blockedOn) != l_Undef
+ ) {
+ std::cerr
+ << "ERROR: var " << Lit(blockedOn, false) << " elimed,"
+ << " value: " << solver->value(blockedOn)
+ << endl;
+ assert(false);
+ std::exit(-1);
+ }
+
+ if (i->toRemove) {
+ blockedMapBuilt = false;
+ i_blkcls += i->size();
+ assert(i_blkcls == i->end);
+ i->start = std::numeric_limits<uint64_t>::max();
+ i->end = std::numeric_limits<uint64_t>::max();
+ } else {
+ assert(solver->varData[blockedOn].removed == Removed::elimed);
+
+ //beware we might change this
+ const size_t sz = i->size();
+
+ //don't copy if we don't need to
+ if (!blockedMapBuilt) {
+ for(size_t x = 0; x < sz; x++) {
+ blkcls[j_blkcls++] = blkcls[i_blkcls++];
+ }
+ } else {
+ i_blkcls += sz;
+ j_blkcls += sz;
+ }
+ assert(i_blkcls == i->end);
+ i->start = j_blkcls-sz;
+ i->end = j_blkcls;
+ *j++ = *i;
+ }
+ }
+ blkcls.resize(j_blkcls);
+ blockedClauses.resize(blockedClauses.size()-(i-j));
+ can_remove_blocked_clauses = false;
+}
+
+void OccSimplifier::rem_cls_from_watch_due_to_varelim(
+ watch_subarray todo
+ , const Lit lit
+) {
+ blockedMapBuilt = false;
+
+ //Copy&clear i.e. MOVE
+ todo.moveTo(tmp_rem_cls_copy);
+ assert(solver->watches[lit].empty());
+
+ vector<Lit>& lits = tmp_rem_lits;
+ for (const Watched watch :tmp_rem_cls_copy) {
+ lits.clear();
+ bool red = false;
+
+ if (watch.isClause()) {
+ const ClOffset offset = watch.get_offset();
+ const Clause& cl = *solver->cl_alloc.ptr(offset);
+ if (cl.getRemoved()) {
+ continue;
+ }
+ assert(!cl.freed());
+
+ //Update stats
+ if (!cl.red()) {
+ bvestats.clauses_elimed_long++;
+ bvestats.clauses_elimed_sumsize += cl.size();
+
+ lits.resize(cl.size());
+ std::copy(cl.begin(), cl.end(), lits.begin());
+ add_clause_to_blck(lits);
+ } else {
+ red = true;
+ bvestats.longRedClRemThroughElim++;
+ }
+
+ //Remove -- only DRAT the ones that are redundant
+ //The irred will be removed thanks to 'blocked' system
+ unlink_clause(offset, cl.red(), true, true);
+ }
+
+ if (watch.isBin()) {
+
+ //Update stats
+ if (!watch.red()) {
+ bvestats.clauses_elimed_bin++;
+ bvestats.clauses_elimed_sumsize += 2;
+ } else {
+ red = true;
+ bvestats.binRedClRemThroughElim++;
+ }
+
+ //Put clause into blocked status
+ lits.resize(2);
+ lits[0] = lit;
+ lits[1] = watch.lit2();
+ if (!watch.red()) {
+ add_clause_to_blck(lits);
+ n_occurs[lits[0].toInt()]--;
+ n_occurs[lits[1].toInt()]--;
+ } else {
+ //If redundant, delayed blocked-based DRAT deletion will not work
+ //so delete explicitly
+
+ //Drat
+ if (!solver->conf.doStamp && !solver->conf.doCache) {
+ (*solver->drat) << del << lits[0] << lits[1] << fin;
+ }
+ }
+
+ //Remove
+ //*limit_to_decrease -= (long)solver->watches[lits[0]].size()/4; //This is zero
+ *limit_to_decrease -= (long)solver->watches[lits[1]].size()/4;
+ solver->detach_bin_clause(lits[0], lits[1], red, true, true);
+ }
+
+ if (solver->conf.verbosity >= 3 && !lits.empty()) {
+ cout
+ << "Eliminated clause " << lits << " (red: " << red << ")"
+ << " on var " << lit.var()+1
+ << endl;
+ }
+ }
+}
+
+void OccSimplifier::add_clause_to_blck(const vector<Lit>& lits)
+{
+ for(const Lit& l: lits) {
+ removed_cl_with_var.touch(l.var());
+ elim_calc_need_update.touch(l.var());
+ }
+
+ vector<Lit> lits_outer = lits;
+ solver->map_inter_to_outer(lits_outer);
+ for(Lit l: lits_outer) {
+ blkcls.push_back(l);
+ }
+ blkcls.push_back(lit_Undef);
+ blockedClauses.back().end = blkcls.size();
+}
+
+void OccSimplifier::find_gate(
+ Lit elim_lit
+ , watch_subarray_const a
+ , watch_subarray_const b
+) {
+ assert(toClear.empty());
+ for(const Watched w: a) {
+ if (w.isBin() && !w.red()) {
+ seen[(~w.lit2()).toInt()] = 1;
+ toClear.push_back(~w.lit2());
+ }
+ }
+
+ //Have to find the corresponding gate. Finding one is good enough
+ for(const Watched w: b) {
+ if (w.isBin()) {
+ continue;
+ }
+
+ if (w.isClause()) {
+ Clause* cl = solver->cl_alloc.ptr(w.get_offset());
+ if (cl->getRemoved()) {
+ continue;
+ }
+
+ assert(cl->size() > 2);
+ if (!cl->red()) {
+ bool OK = true;
+ for(const Lit lit: *cl) {
+ if (lit != ~elim_lit) {
+ if (!seen[lit.toInt()]) {
+ OK = false;
+ break;
+ }
+ }
+ }
+
+ //Found all lits inside
+ if (OK) {
+ cl->stats.marked_clause = true;
+ gate_varelim_clause = cl;
+ break;
+ }
+ }
+ }
+ }
+
+ for(Lit l: toClear) {
+ seen[l.toInt()] = 0;
+ }
+ toClear.clear();
+}
+
+void OccSimplifier::mark_gate_in_poss_negs(
+ Lit elim_lit
+ , watch_subarray_const poss
+ , watch_subarray_const negs
+) {
+ //Either of the two is OK. Let's just find ONE, not the biggest one.
+ //We could find the biggest one, but it's expensive.
+ bool found_pos = false;
+ gate_varelim_clause = NULL;
+ find_gate(elim_lit, poss, negs);
+ if (gate_varelim_clause == NULL) {
+ find_gate(~elim_lit, negs, poss);
+ found_pos = true;
+ }
+
+ if (gate_varelim_clause != NULL && solver->conf.verbosity >= 10) {
+ cout
+ << "Lit: " << elim_lit
+ << " gate_found_elim_pos:" << found_pos
+ << endl;
+ }
+}
+
+int OccSimplifier::test_elim_and_fill_resolvents(const uint32_t var)
+{
+ assert(solver->ok);
+ assert(solver->varData[var].removed == Removed::none);
+ assert(solver->value(var) == l_Undef);
+
+ //Gather data
+ #ifdef CHECK_N_OCCUR
+ if (n_occurs[Lit(var, false).toInt()] != calc_data_for_heuristic(Lit(var, false))) {
+ cout << "lit " << Lit(var, false) << endl;
+ cout << "n_occ is: " << n_occurs[Lit(var, false).toInt()] << endl;
+ cout << "calc is: " << calc_data_for_heuristic(Lit(var, false)) << endl;
+ assert(false);
+ }
+
+ if (n_occurs[Lit(var, true).toInt()] != calc_data_for_heuristic(Lit(var, true))) {
+ cout << "lit " << Lit(var, true) << endl;
+ cout << "n_occ is: " << n_occurs[Lit(var, true).toInt()] << endl;
+ cout << "calc is: " << calc_data_for_heuristic(Lit(var, true)) << endl;
+ }
+ #endif
+ const uint32_t pos = n_occurs[Lit(var, false).toInt()];
+ const uint32_t neg = n_occurs[Lit(var, true).toInt()];
+
+ //Heuristic calculation took too much time
+ if (*limit_to_decrease < 0) {
+ return std::numeric_limits<int>::max();
+ }
+
+ //set-up
+ const Lit lit = Lit(var, false);
+ watch_subarray poss = solver->watches[lit];
+ watch_subarray negs = solver->watches[~lit];
+ std::sort(poss.begin(), poss.end(), watch_sort_smallest_first());
+ std::sort(negs.begin(), negs.end(), watch_sort_smallest_first());
+ resolvents.clear();
+
+ //Pure literal, no resolvents
+ //we look at "pos" and "neg" (and not poss&negs) because we don't care about redundant clauses
+ if (pos == 0 || neg == 0) {
+ return -100;
+ }
+
+ //Too expensive to check, it's futile
+ if ((uint64_t)neg * (uint64_t)pos
+ >= solver->conf.varelim_cutoff_too_many_clauses
+ ) {
+ return std::numeric_limits<int>::max();
+ }
+
+ gate_varelim_clause = NULL;
+ if (solver->conf.skip_some_bve_resolvents) {
+ mark_gate_in_poss_negs(lit, poss, negs);
+ }
+
+ // Count clauses/literals after elimination
+ uint32_t before_clauses = pos + neg;
+ uint32_t after_clauses = 0;
+
+ size_t at_poss = 0;
+ for (const Watched* it = poss.begin(), *end = poss.end()
+ ; it != end
+ ; ++it, at_poss++
+ ) {
+ *limit_to_decrease -= 3;
+ if (solver->redundant_or_removed(*it))
+ continue;
+
+ size_t at_negs = 0;
+ for (const Watched *it2 = negs.begin(), *end2 = negs.end()
+ ; it2 != end2
+ ; it2++, at_negs++
+ ) {
+ *limit_to_decrease -= 3;
+ if (solver->redundant_or_removed(*it2))
+ continue;
+
+ //Resolve the two clauses
+ bool tautological = resolve_clauses(*it, *it2, lit);
+ if (tautological) {
+ continue;
+ }
+
+ if (solver->satisfied_cl(dummy)) {
+ continue;
+ }
+
+ #ifdef VERBOSE_DEBUG_VARELIM
+ cout << "Adding new clause due to varelim: " << dummy << endl;
+ #endif
+
+ after_clauses++;
+ //Early-abort or over time
+ if (after_clauses > (before_clauses + grow)
+ //Too long resolvent
+ || (solver->conf.velim_resolvent_too_large != -1
+ && ((int)dummy.size() > solver->conf.velim_resolvent_too_large))
+ //Over-time
+ || *limit_to_decrease < -10LL*1000LL
+
+ ) {
+ if (gate_varelim_clause) {
+ gate_varelim_clause->stats.marked_clause = false;
+ }
+ return std::numeric_limits<int>::max();
+ }
+
+ //Calculate new clause stats
+ ClauseStats stats;
+ bool is_xor = false;
+ #if defined(USE_GAUSS) || defined(STATS_NEEDED)
+ if (it->isBin() && it2->isClause()) {
+ Clause* c = solver->cl_alloc.ptr(it2->get_offset());
+ stats = c->stats;
+ is_xor |= c->used_in_xor();
+ } else if (it2->isBin() && it->isClause()) {
+ Clause* c = solver->cl_alloc.ptr(it->get_offset());
+ stats = c->stats;
+ is_xor |= c->used_in_xor();
+ } else if (it2->isClause() && it->isClause()) {
+ Clause* c1 = solver->cl_alloc.ptr(it->get_offset());
+ Clause* c2 = solver->cl_alloc.ptr(it2->get_offset());
+ stats = ClauseStats::combineStats(c1->stats, c2->stats);
+ is_xor |= c1->used_in_xor();
+ is_xor |= c2->used_in_xor();
+ }
+ #endif
+ //must clear marking that has been set due to gate
+ stats.marked_clause = 0;
+ resolvents.add_resolvent(dummy, stats, is_xor);
+ }
+ }
+
+ if (gate_varelim_clause) {
+ gate_varelim_clause->stats.marked_clause = false;
+ }
+
+ return -1;
+}
+
+void OccSimplifier::printOccur(const Lit lit) const
+{
+ for(size_t i = 0; i < solver->watches[lit].size(); i++) {
+ const Watched& w = solver->watches[lit][i];
+ if (w.isBin()) {
+ cout
+ << "Bin --> "
+ << lit << ", "
+ << w.lit2()
+ << "(red: " << w.red()
+ << ")"
+ << endl;
+ }
+
+ if (w.isClause()) {
+ const Clause& cl = *solver->cl_alloc.ptr(w.get_offset());
+ if (cl.getRemoved())
+ continue;
+ cout
+ << "Clause--> "
+ << cl
+ << "(red: " << cl.red()
+ << ")"
+ << "(rem: " << cl.getRemoved()
+ << ")"
+ << endl;
+ }
+ }
+}
+
+void OccSimplifier::print_var_eliminate_stat(const Lit lit) const
+{
+ //Eliminate:
+ if (solver->conf.verbosity < 5)
+ return;
+
+ cout
+ << "Eliminating var " << lit
+ << " with occur sizes "
+ << solver->watches[lit].size() << " , "
+ << solver->watches[~lit].size()
+ << endl;
+
+ cout << "POS: " << endl;
+ printOccur(lit);
+ cout << "NEG: " << endl;
+ printOccur(~lit);
+}
+
+bool OccSimplifier::add_varelim_resolvent(
+ vector<Lit>& finalLits
+ , const ClauseStats& stats
+ , const bool is_xor
+) {
+ bvestats.newClauses++;
+ Clause* newCl = NULL;
+
+ if (solver->conf.verbosity >= 5) {
+ cout
+ << "adding v-elim resolvent: "
+ << finalLits
+ << endl;
+ }
+
+ newCl = solver->add_clause_int(
+ finalLits //Literals in new clause
+ , false //Is the new clause redundant?
+ , stats //Statistics for this new clause (usage, etc.)
+ , false //Should clause be attached?
+ , &finalLits //Return final set of literals here
+ );
+
+ if (!solver->ok)
+ return false;
+
+ if (newCl != NULL) {
+ newCl->set_used_in_xor(is_xor);
+ linkInClause(*newCl);
+ ClOffset offset = solver->cl_alloc.get_offset(newCl);
+ clauses.push_back(offset);
+ added_long_cl.push_back(offset);
+ } else if (finalLits.size() == 2) {
+ added_bin_cl.push_back(std::make_pair(finalLits[0], finalLits[1]));
+ n_occurs[finalLits[0].toInt()]++;
+ n_occurs[finalLits[1].toInt()]++;
+ if (!solver->ok) {
+ return false;
+ }
+ }
+
+ //Touch every var of the new clause, so we re-estimate
+ //elimination complexity for this var
+ for(Lit lit: finalLits) {
+ #ifdef CHECK_N_OCCUR
+ if(n_occurs[lit.toInt()] != calc_data_for_heuristic(lit)) {
+ cout << "n_occurs[lit.toInt()]:" << n_occurs[lit.toInt()] << endl;
+ cout << "calc_data_for_heuristic(lit): " << calc_data_for_heuristic(lit) << endl;
+ cout << "cl: " << finalLits << endl;
+ cout << "lit: " << lit << endl;
+ assert(false);
+ }
+ #endif
+ elim_calc_need_update.touch(lit.var());
+ added_cl_to_var.touch(lit.var());
+ }
+
+ return true;
+}
+
+void OccSimplifier::check_n_occur()
+{
+ for (size_t i=0; i < solver->nVars(); i++) {
+ Lit lit(i, false);
+ const uint32_t pos = calc_occ_data(lit);
+ if (pos != n_occurs[lit.toInt()]) {
+ cout << "for lit: " << lit << endl;
+ cout << "pos is: " << pos
+ << " n_occurs is:" << n_occurs[lit.toInt()] << endl;
+ assert(false);
+ }
+
+ const uint32_t neg = calc_occ_data(~lit);
+ if (neg != n_occurs[(~lit).toInt()]) {
+ cout << "for lit: " << lit << endl;
+ cout << "neg is: " << neg
+ << " n_occurs is:" << n_occurs[(~lit).toInt()] << endl;
+ assert(false);
+ }
+ }
+}
+
+void OccSimplifier::update_varelim_complexity_heap()
+{
+ num_otf_update_until_now++;
+ for(uint32_t var: elim_calc_need_update.getTouchedList()) {
+ //No point in updating the score of this var
+ if (!can_eliminate_var(var) || !velim_order.inHeap(var)) {
+ continue;
+ }
+
+ //cout << "updating var " << var+1 << endl;
+ varElimComplexity[var] = heuristicCalcVarElimScore(var);
+ velim_order.update(var);
+ }
+}
+
+void OccSimplifier::print_var_elim_complexity_stats(const uint32_t var) const
+{
+ if (solver->conf.verbosity >= 5) {
+ cout << "var " << var +1 << " trying complexity: " << varElimComplexity[var] << endl;
+ }
+}
+
+void OccSimplifier::set_var_as_eliminated(const uint32_t var, const Lit lit)
+{
+ if (solver->conf.verbosity >= 5) {
+ cout << "Elimination of var "
+ << solver->map_inter_to_outer(lit)
+ << " finished " << endl;
+ }
+ assert(solver->varData[var].removed == Removed::none);
+ solver->varData[var].removed = Removed::elimed;
+
+ bvestats_global.numVarsElimed++;
+}
+
+void OccSimplifier::create_dummy_blocked_clause(const Lit lit)
+{
+ blkcls.push_back(solver->map_inter_to_outer(lit));
+ blockedClauses.push_back(
+ BlockedClauses(blkcls.size()-1, blkcls.size())
+ );
+ blockedMapBuilt = false;
+}
+
+bool OccSimplifier::maybe_eliminate(const uint32_t var)
+{
+ assert(solver->ok);
+ print_var_elim_complexity_stats(var);
+ bvestats.testedToElimVars++;
+ const Lit lit = Lit(var, false);
+
+ //Heuristic says no, or we ran out of time
+ if (test_elim_and_fill_resolvents(var) > 0
+ || *limit_to_decrease < 0
+ ) {
+ return false; //didn't eliminate :(
+ }
+ bvestats.triedToElimVars++;
+
+ print_var_eliminate_stat(lit);
+
+ //Remove clauses
+ create_dummy_blocked_clause(lit);
+ rem_cls_from_watch_due_to_varelim(solver->watches[lit], lit);
+ rem_cls_from_watch_due_to_varelim(solver->watches[~lit], ~lit);
+
+ //Add resolvents
+ while(!resolvents.empty()) {
+ if (!add_varelim_resolvent(resolvents.back_lits(),
+ resolvents.back_stats(), resolvents.back_xor())
+ ) {
+ goto end;
+ }
+ resolvents.pop();
+ }
+ limit_to_decrease = &norm_varelim_time_limit;
+
+end:
+ set_var_as_eliminated(var, lit);
+
+ return true; //eliminated!
+}
+
+void OccSimplifier::add_pos_lits_to_dummy_and_seen(
+ const Watched ps
+ , const Lit posLit
+) {
+ if (ps.isBin()) {
+ *limit_to_decrease -= 1;
+ assert(ps.lit2() != posLit);
+
+ seen[ps.lit2().toInt()] = 1;
+ dummy.push_back(ps.lit2());
+ }
+
+ if (ps.isClause()) {
+ Clause& cl = *solver->cl_alloc.ptr(ps.get_offset());
+ *limit_to_decrease -= (long)cl.size()/2;
+ for (const Lit lit : cl){
+ if (lit != posLit) {
+ seen[lit.toInt()] = 1;
+ dummy.push_back(lit);
+ }
+ }
+ }
+}
+
+bool OccSimplifier::add_neg_lits_to_dummy_and_seen(
+ const Watched qs
+ , const Lit posLit
+) {
+ if (qs.isBin()) {
+ *limit_to_decrease -= 1;
+ assert(qs.lit2() != ~posLit);
+
+ if (seen[(~qs.lit2()).toInt()]) {
+ return true;
+ }
+ if (!seen[qs.lit2().toInt()]) {
+ dummy.push_back(qs.lit2());
+ seen[qs.lit2().toInt()] = 1;
+ }
+ }
+
+ if (qs.isClause()) {
+ Clause& cl = *solver->cl_alloc.ptr(qs.get_offset());
+ *limit_to_decrease -= (long)cl.size()/2;
+ for (const Lit lit: cl) {
+ if (lit == ~posLit)
+ continue;
+
+ if (seen[(~lit).toInt()]) {
+ return true;
+ }
+
+ if (!seen[lit.toInt()]) {
+ dummy.push_back(lit);
+ seen[lit.toInt()] = 1;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool OccSimplifier::resolve_clauses(
+ const Watched ps
+ , const Watched qs
+ , const Lit posLit
+) {
+ //If clause has already been freed, skip
+ Clause *cl1 = NULL;
+ if (ps.isClause()) {
+ cl1 = solver->cl_alloc.ptr(ps.get_offset());
+ if (cl1->freed()) {
+ return true;
+ }
+ }
+
+ Clause *cl2 = NULL;
+ if (qs.isClause()) {
+ cl2 = solver->cl_alloc.ptr(qs.get_offset());
+ if (cl2->freed()) {
+ return true;
+ }
+ }
+ if (gate_varelim_clause
+ && cl1 && cl2
+ && !cl1->stats.marked_clause
+ && !cl2->stats.marked_clause
+ ) {
+ //for G (U) R, we only neede to resolve to
+ // (Gx * R!x) (U) (G!x * Rx)
+ // So Rx * R!x is skipped
+ //
+ // Here: Both are long clauses, so only one could be in G. But neither
+ // are marked, hence neither are in G, so both are in R.
+ // see: http://baldur.iti.kit.edu/sat/files/ex04.pdf
+ return true;
+ }
+
+ dummy.clear();
+ add_pos_lits_to_dummy_and_seen(ps, posLit);
+ bool tautological = add_neg_lits_to_dummy_and_seen(qs, posLit);
+
+ *limit_to_decrease -= (long)dummy.size()/2 + 1;
+ for (const Lit lit: dummy) {
+ seen[lit.toInt()] = 0;
+ }
+
+ return tautological;
+}
+
+uint32_t OccSimplifier::calc_data_for_heuristic(const Lit lit)
+{
+ uint32_t ret = 0;
+ watch_subarray_const ws_list = solver->watches[lit];
+
+ //BUT WATCHES ARE SMUDGED!!
+ //THIS IS WRONG!!
+ /*if (link_in_data_red.cl_linked < 100) {
+ ret = ws_list.size();
+ return ret;
+ }*/
+
+ *limit_to_decrease -= (long)ws_list.size()*3 + 100;
+ for (const Watched ws: ws_list) {
+ //Skip redundant clauses
+ if (solver->redundant(ws))
+ continue;
+
+ switch(ws.getType()) {
+ case watch_binary_t:
+ ret++;
+ break;
+
+ case watch_clause_t: {
+ const Clause* cl = solver->cl_alloc.ptr(ws.get_offset());
+ if (!cl->getRemoved()) {
+ assert(!cl->freed() && "Inside occur, so cannot be freed");
+ ret++;
+ }
+ break;
+ }
+
+ default:
+ assert(false);
+ break;
+ }
+ }
+ return ret;
+}
+
+uint32_t OccSimplifier::calc_occ_data(const Lit lit)
+{
+ uint32_t ret = 0;
+ watch_subarray_const ws_list = solver->watches[lit];
+ for (const Watched ws: ws_list) {
+ //Skip redundant clauses
+ if (solver->redundant(ws))
+ continue;
+
+ switch(ws.getType()) {
+ case watch_binary_t:
+ ret++;
+ break;
+
+ case watch_clause_t: {
+ const Clause* cl = solver->cl_alloc.ptr(ws.get_offset());
+ if (!cl->getRemoved()) {
+ assert(!cl->freed() && "Inside occur, so cannot be freed");
+ ret++;
+ }
+ break;
+ }
+
+ default:
+ assert(false);
+ break;
+ }
+ }
+ return ret;
+}
+
+bool OccSimplifier::check_empty_resolvent(Lit lit)
+{
+ //Take the smaller of the two
+ if (solver->watches[~lit].size() < solver->watches[lit].size())
+ lit = ~lit;
+
+ int num_bits_set = check_empty_resolvent_action(
+ lit
+ , ResolvCount::set
+ , 0
+ );
+
+ int num_resolvents = std::numeric_limits<int>::max();
+
+ //Can only count if the POS was small enough
+ //otherwise 'seen' cannot properly store the data
+ if (num_bits_set < 16) {
+ num_resolvents = check_empty_resolvent_action(
+ ~lit
+ , ResolvCount::count
+ , num_bits_set
+ );
+ }
+
+ //Clear the 'seen' array
+ check_empty_resolvent_action(
+ lit
+ , ResolvCount::unset
+ , 0
+ );
+
+ //Okay, this would be great
+ return (num_resolvents == 0);
+}
+
+
+int OccSimplifier::check_empty_resolvent_action(
+ const Lit lit
+ , const ResolvCount action
+ , const int otherSize
+) {
+ uint16_t at = 1;
+ int count = 0;
+ size_t numCls = 0;
+
+ watch_subarray_const watch_list = solver->watches[lit];
+ *limit_to_decrease -= (long)watch_list.size()*2;
+ for (const Watched& ws: watch_list) {
+ if (numCls >= 16
+ && (action == ResolvCount::set
+ || action == ResolvCount::unset)
+ ) {
+ break;
+ }
+
+ if (count > 0
+ && action == ResolvCount::count
+ ) {
+ break;
+ }
+
+ //Handle binary
+ if (ws.isBin()){
+ //Only count irred
+ if (!ws.red()) {
+ *limit_to_decrease -= 4;
+ switch(action) {
+ case ResolvCount::set:
+ seen[ws.lit2().toInt()] |= at;
+ break;
+
+ case ResolvCount::unset:
+ seen[ws.lit2().toInt()] = 0;
+ break;
+
+ case ResolvCount::count:
+ int num = my_popcnt(seen[(~ws.lit2()).toInt()]);
+ assert(num <= otherSize);
+ count += otherSize - num;
+ break;
+ }
+ at <<= 1;
+ numCls++;
+ }
+ continue;
+ }
+
+ if (ws.isClause()) {
+ const Clause* cl = solver->cl_alloc.ptr(ws.get_offset());
+ if (cl->getRemoved()) {
+ continue;
+ }
+
+ //If in occur then it cannot be freed
+ assert(!cl->freed());
+
+ //Only irred is of relevance
+ if (!cl->red()) {
+ *limit_to_decrease -= (long)cl->size()*2;
+ uint16_t tmp = 0;
+ for(const Lit l: *cl) {
+
+ //Ignore orig
+ if (l == lit)
+ continue;
+
+ switch (action) {
+ case ResolvCount::set:
+ seen[l.toInt()] |= at;
+ break;
+
+ case ResolvCount::unset:
+ seen[l.toInt()] = 0;
+ break;
+
+ case ResolvCount::count:
+ tmp |= seen[(~l).toInt()];
+ break;
+ }
+ }
+ at <<= 1;
+ numCls++;
+
+ //Count using tmp
+ if (action == ResolvCount::count) {
+ int num = my_popcnt(tmp);
+ assert(num <= otherSize);
+ count += otherSize - num;
+ }
+ }
+
+ continue;
+ }
+
+ //Only these types are possible
+ assert(false);
+ }
+
+ switch(action) {
+ case ResolvCount::count:
+ return count;
+
+ case ResolvCount::set:
+ return numCls;
+
+ case ResolvCount::unset:
+ return 0;
+ }
+
+ assert(false);
+ return std::numeric_limits<int>::max();
+}
+
+uint64_t OccSimplifier::heuristicCalcVarElimScore(const uint32_t var)
+{
+ const Lit lit(var, false);
+ #ifdef CHECK_N_OCCUR
+ const uint32_t pos = calc_data_for_heuristic(lit);
+ if (pos != n_occurs[lit.toInt()]) {
+ cout << "for lit: " << lit << endl;
+ cout << "pos is: " << pos
+ << " n_occurs is:" << n_occurs[lit.toInt()] << endl;
+ assert(false);
+ }
+
+ const uint32_t neg = calc_data_for_heuristic(~lit);
+ if (neg != n_occurs[(~lit).toInt()]) {
+ cout << "for lit: " << lit << endl;
+ cout << "neg is: " << neg
+ << " n_occurs is:" << n_occurs[(~lit).toInt()] << endl;
+ assert(false);
+ }
+ #endif
+
+ return (uint64_t)n_occurs[lit.toInt()] * (uint64_t)n_occurs[(~lit).toInt()];
+}
+
+void OccSimplifier::order_vars_for_elim()
+{
+ velim_order.clear();
+ varElimComplexity.clear();
+ varElimComplexity.resize(solver->nVars(), 0);
+ elim_calc_need_update.clear();
+
+ //Go through all vars
+ for (
+ size_t var = 0
+ ; var < solver->nVars() && *limit_to_decrease > 0
+ ; var++
+ ) {
+ if (!can_eliminate_var(var))
+ continue;
+
+ *limit_to_decrease -= 50;
+ assert(!velim_order.inHeap(var));
+ varElimComplexity[var] = heuristicCalcVarElimScore(var);
+ velim_order.insert(var);
+ }
+ assert(velim_order.heap_property());
+
+ //Print sorted listed list
+ #ifdef VERBOSE_DEBUG_VARELIM
+ /*cout << "-----------" << endl;
+ for(size_t i = 0; i < velim_order.size(); i++) {
+ cout
+ << "velim_order[" << i << "]: "
+ << " var: " << velim_order[i]+1
+ << " val: " << varElimComplexity[velim_order[i]].first
+ << " , " << varElimComplexity[velim_order[i]].second
+ << endl;
+ }*/
+ #endif
+}
+
+void OccSimplifier::check_elimed_vars_are_unassigned() const
+{
+ for (size_t i = 0; i < solver->nVarsOuter(); i++) {
+ if (solver->varData[i].removed == Removed::elimed) {
+ assert(solver->value(i) == l_Undef);
+ }
+ }
+}
+
+void OccSimplifier::check_elimed_vars_are_unassignedAndStats() const
+{
+ assert(solver->ok);
+ int64_t checkNumElimed = 0;
+ for (size_t i = 0; i < solver->nVarsOuter(); i++) {
+ if (solver->varData[i].removed == Removed::elimed) {
+ checkNumElimed++;
+ assert(solver->value(i) == l_Undef);
+ }
+ }
+ if (bvestats_global.numVarsElimed != checkNumElimed) {
+ std::cerr
+ << "ERROR: globalStats.numVarsElimed is "<<
+ bvestats_global.numVarsElimed
+ << " but checkNumElimed is: " << checkNumElimed
+ << endl;
+
+ assert(false);
+ }
+}
+
+size_t OccSimplifier::mem_used() const
+{
+ size_t b = 0;
+ b += dummy.capacity()*sizeof(char);
+ b += added_long_cl.capacity()*sizeof(ClOffset);
+ b += sub_str->mem_used();
+ b += blockedClauses.capacity()*sizeof(BlockedClauses);
+ b += blkcls.capacity()*sizeof(Lit);
+ b += blk_var_to_cls.size()*sizeof(uint32_t);
+ b += velim_order.mem_used();
+ b += varElimComplexity.capacity()*sizeof(int)*2;
+ b += elim_calc_need_update.mem_used();
+ b += clauses.capacity()*sizeof(ClOffset);
+ b += indep_vars.capacity();
+
+ return b;
+}
+
+size_t OccSimplifier::mem_used_xor() const
+{
+ if (topLevelGauss)
+ return topLevelGauss->mem_used();
+ else
+ return 0;
+}
+
+size_t OccSimplifier::mem_used_bva() const
+{
+ if (bva)
+ return bva->mem_used();
+ else
+ return 0;
+}
+
+
+void OccSimplifier::freeXorMem()
+{
+ delete topLevelGauss;
+ topLevelGauss = NULL;
+}
+
+void OccSimplifier::linkInClause(Clause& cl)
+{
+ assert(cl.size() > 2);
+ ClOffset offset = solver->cl_alloc.get_offset(&cl);
+ cl.recalc_abst_if_needed();
+ if (!cl.red()) {
+ for(const Lit l: cl){
+ n_occurs[l.toInt()]++;
+ added_cl_to_var.touch(l.var());
+ }
+ }
+ assert(cl.stats.marked_clause == 0 && "marks must always be zero at linkin");
+
+ std::sort(cl.begin(), cl.end());
+ for (const Lit lit: cl) {
+ watch_subarray ws = solver->watches[lit];
+ ws.push(Watched(offset, cl.abst));
+ }
+ cl.setOccurLinked(true);
+}
+
+
+/*void OccSimplifier::print_gatefinder_stats() const
+{
+ if (gateFinder) {
+ gateFinder->get_stats().print(solver->nVarsOuter());
+ }
+}*/
+
+double OccSimplifier::Stats::total_time() const
+{
+ return linkInTime + blockTime
+ + varElimTime + finalCleanupTime;
+}
+
+void OccSimplifier::Stats::clear()
+{
+ Stats stats;
+ *this = stats;
+}
+
+OccSimplifier::Stats& OccSimplifier::Stats::operator+=(const Stats& other)
+{
+ numCalls += other.numCalls;
+
+ //Time
+ linkInTime += other.linkInTime;
+ blockTime += other.blockTime;
+ varElimTime += other.varElimTime;
+ finalCleanupTime += other.finalCleanupTime;
+ zeroDepthAssings += other.zeroDepthAssings;
+
+ return *this;
+}
+
+BVEStats& BVEStats::operator+=(const BVEStats& other)
+{
+ numVarsElimed += other.numVarsElimed;
+ varElimTimeOut += other.varElimTimeOut;
+ clauses_elimed_long += other.clauses_elimed_long;
+ clauses_elimed_tri += other.clauses_elimed_tri;
+ clauses_elimed_bin += other.clauses_elimed_bin;
+ clauses_elimed_sumsize += other.clauses_elimed_sumsize;
+ longRedClRemThroughElim += other.longRedClRemThroughElim;
+ binRedClRemThroughElim += other.binRedClRemThroughElim;
+ numRedBinVarRemAdded += other.numRedBinVarRemAdded;
+ testedToElimVars += other.testedToElimVars;
+ triedToElimVars += other.triedToElimVars;
+ newClauses += other.newClauses;
+ subsumedByVE += other.subsumedByVE;
+
+ return *this;
+}
+
+void OccSimplifier::Stats::print_short() const
+{
+
+ cout
+ << "c [occur] " << linkInTime+finalCleanupTime << " is overhead"
+ << endl;
+
+ cout
+ << "c [occur] link-in T: " << linkInTime
+ << " cleanup T: " << finalCleanupTime
+ << endl;
+}
+
+void OccSimplifier::Stats::print(const size_t nVars) const
+{
+ cout << "c -------- OccSimplifier STATS ----------" << endl;
+ print_stats_line("c time"
+ , total_time()
+ , stats_line_percent(varElimTime, total_time())
+ , "% var-elim"
+ );
+
+ print_stats_line("c called"
+ , numCalls
+ , float_div(total_time(), numCalls)
+ , "s per call"
+ );
+
+
+
+
+ print_stats_line("c 0-depth assigns"
+ , zeroDepthAssings
+ , stats_line_percent(zeroDepthAssings, nVars)
+ , "% vars"
+ );
+
+ cout << "c -------- OccSimplifier STATS END ----------" << endl;
+}
+
+void OccSimplifier::save_state(SimpleOutFile& f)
+{
+ assert(solver->decisionLevel() == 0);
+ cleanBlockedClauses();
+ f.put_uint64_t(blockedClauses.size());
+ for(const BlockedClauses& c: blockedClauses) {
+ c.save_to_file(f);
+ }
+ f.put_vector(blkcls);
+ f.put_struct(globalStats);
+ f.put_uint32_t(anythingHasBeenBlocked);
+
+
+}
+void OccSimplifier::load_state(SimpleInFile& f)
+{
+ const uint64_t sz = f.get_uint64_t();
+ for(uint64_t i = 0; i < sz; i++) {
+ BlockedClauses b;
+ b.load_from_file(f);
+ blockedClauses.push_back(b);
+ }
+ f.get_vector(blkcls);
+ f.get_struct(globalStats);
+ anythingHasBeenBlocked = f.get_uint32_t();
+
+ blockedMapBuilt = false;
+ buildBlockedMap();
+
+ //Sanity check
+ for(size_t i = 0; i < solver->nVars(); i++) {
+ if (solver->varData[i].removed == Removed::elimed) {
+ assert(solver->value(i) == l_Undef);
+ }
+ }
+}
+
+void OccSimplifier::check_clid_correct() const
+{
+ #ifdef STATS_NEEDED
+ for(auto offs: clauses) {
+ Clause * cl = solver->cl_alloc.ptr(offs);
+ if (!cl->freed() && !cl->getRemoved()) {
+ assert(!(cl->stats.ID == 0 && cl->red()));
+ }
+ }
+ #endif
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h b/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
new file mode 100644
index 000000000..647681c31
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/occsimplifier.h
@@ -0,0 +1,578 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SIMPLIFIER_H
+#define SIMPLIFIER_H
+
+
+#include <map>
+#include <vector>
+#include <list>
+#include <set>
+#include <queue>
+#include <map>
+#include <iomanip>
+#include <fstream>
+
+#include "clause.h"
+#include "solvertypes.h"
+#include "heap.h"
+#include "touchlist.h"
+#include "varupdatehelper.h"
+#include "watched.h"
+#include "watcharray.h"
+#include "simplefile.h"
+
+namespace CMSat {
+
+using std::vector;
+using std::map;
+using std::set;
+using std::pair;
+using std::priority_queue;
+
+class ClauseCleaner;
+class SolutionExtender;
+class Solver;
+class TopLevelGaussAbst;
+class SubsumeStrengthen;
+class BVA;
+
+struct BlockedClauses {
+ BlockedClauses()
+ {}
+
+ explicit BlockedClauses(size_t _start, size_t _end) :
+ start(_start)
+ , end(_end)
+ , toRemove(false)
+ {}
+
+ void save_to_file(SimpleOutFile& f) const
+ {
+ f.put_uint32_t(toRemove);
+ f.put_uint64_t(start);
+ f.put_uint64_t(end);
+ }
+
+ void load_from_file(SimpleInFile& f)
+ {
+ toRemove = f.get_uint32_t();
+ start = f.get_uint64_t();
+ end = f.get_uint64_t();
+ }
+
+ const Lit& at(const uint64_t at, const vector<Lit>& blkcls) const
+ {
+ return blkcls[start+at];
+ }
+
+ Lit& at(const uint64_t at, vector<Lit>& blkcls)
+ {
+ return blkcls[start+at];
+ }
+
+ uint64_t size() const {
+ return end-start;
+ }
+
+ uint64_t start;
+ uint64_t end;
+ bool toRemove = false;
+};
+
+struct BVEStats
+{
+ uint64_t numCalls = 0;
+ double timeUsed = 0.0;
+
+ int64_t numVarsElimed = 0;
+ uint64_t varElimTimeOut = 0;
+ uint64_t clauses_elimed_long = 0;
+ uint64_t clauses_elimed_tri = 0;
+ uint64_t clauses_elimed_bin = 0;
+ uint64_t clauses_elimed_sumsize = 0;
+ uint64_t longRedClRemThroughElim = 0;
+ uint64_t binRedClRemThroughElim = 0;
+ uint64_t numRedBinVarRemAdded = 0;
+ uint64_t testedToElimVars = 0;
+ uint64_t triedToElimVars = 0;
+ uint64_t newClauses = 0;
+ uint64_t subsumedByVE = 0;
+
+ BVEStats& operator+=(const BVEStats& other);
+
+ void print() const
+ {
+ //About elimination
+ cout
+ << "c [occ-bve]"
+ << " elimed: " << numVarsElimed
+ << endl;
+
+ cout
+ << "c [occ-bve]"
+ << " cl-new: " << newClauses
+ << " tried: " << triedToElimVars
+ << " tested: " << testedToElimVars
+ << endl;
+
+ cout
+ << "c [occ-bve]"
+ << " subs: " << subsumedByVE
+ << " red-bin rem: " << binRedClRemThroughElim
+ << " red-long rem: " << longRedClRemThroughElim
+ << endl;
+ }
+
+ void print()
+ {
+ print_stats_line("c timeouted"
+ , stats_line_percent(varElimTimeOut, numCalls)
+ , "% called"
+ );
+ print_stats_line("c v-elimed"
+ , numVarsElimed
+ , "% vars"
+ );
+
+ /*cout << "c"
+ << " v-elimed: " << numVarsElimed
+ << " / " << origNumMaxElimVars
+ << " / " << origNumFreeVars
+ << endl;*/
+
+ print_stats_line("c cl-new"
+ , newClauses
+ );
+
+ print_stats_line("c tried to elim"
+ , triedToElimVars
+ );
+
+ print_stats_line("c elim-bin-lt-cl"
+ , binRedClRemThroughElim);
+
+ print_stats_line("c elim-long-lt-cl"
+ , longRedClRemThroughElim);
+
+ print_stats_line("c lt-bin added due to v-elim"
+ , numRedBinVarRemAdded);
+
+ print_stats_line("c cl-elim-bin"
+ , clauses_elimed_bin);
+
+ print_stats_line("c cl-elim-tri"
+ , clauses_elimed_tri);
+
+ print_stats_line("c cl-elim-long"
+ , clauses_elimed_long);
+
+ print_stats_line("c cl-elim-avg-s",
+ ((double)clauses_elimed_sumsize
+ /(double)(clauses_elimed_bin + clauses_elimed_tri + clauses_elimed_long))
+ );
+
+ print_stats_line("c v-elim-sub"
+ , subsumedByVE
+ );
+ }
+ void clear() {
+ BVEStats tmp;
+ *this = tmp;
+ }
+};
+
+/**
+@brief Handles subsumption, self-subsuming resolution, variable elimination, and related algorithms
+*/
+class OccSimplifier
+{
+public:
+
+ //Construct-destruct
+ explicit OccSimplifier(Solver* solver);
+ ~OccSimplifier();
+
+ //Called from main
+ bool setup();
+ bool simplify(const bool _startup, const std::string schedule);
+ void new_var(const uint32_t orig_outer);
+ void new_vars(const size_t n);
+ void save_on_var_memory();
+ bool uneliminate(const uint32_t var);
+ size_t mem_used() const;
+ size_t mem_used_xor() const;
+ size_t mem_used_bva() const;
+ void print_gatefinder_stats() const;
+ void dump_blocked_clauses(std::ostream* outfile) const;
+
+ //UnElimination
+ void print_blocked_clauses_reverse() const;
+ void extend_model(SolutionExtender* extender);
+ uint32_t get_num_elimed_vars() const
+ {
+ return bvestats_global.numVarsElimed;
+ }
+
+ struct Stats
+ {
+ void print(const size_t nVars) const;
+ void print_short() const;
+ Stats& operator+=(const Stats& other);
+ void clear();
+ double total_time() const;
+
+ uint64_t numCalls = 0;
+
+ //Time stats
+ double linkInTime = 0;
+ double blockTime = 0;
+ double varElimTime = 0;
+ double finalCleanupTime = 0;
+
+ //General stat
+ uint64_t zeroDepthAssings = 0;
+ };
+
+ BVEStats bvestats;
+ BVEStats bvestats_global;
+
+ const Stats& get_stats() const;
+ const SubsumeStrengthen* getSubsumeStrengthen() const;
+ void check_elimed_vars_are_unassigned() const;
+ void check_clid_correct() const;
+ bool getAnythingHasBeenBlocked() const;
+ void freeXorMem();
+ void sort_occurs_and_set_abst();
+ void save_state(SimpleOutFile& f);
+ void load_state(SimpleInFile& f);
+ vector<ClOffset> added_long_cl;
+ TouchListLit added_cl_to_var;
+ vector<uint32_t> n_occurs;
+ TouchListLit removed_cl_with_var;
+ vector<std::pair<Lit, Lit> > added_bin_cl;
+ vector<ClOffset> clauses;
+ void check_elimed_vars_are_unassignedAndStats() const;
+ void unlink_clause(ClOffset cc
+ , bool drat = true
+ , bool allow_empty_watch = false
+ , bool only_set_is_removed = false
+ );
+ void free_clauses_to_free();
+ void cleanBlockedClausesIfDirty();
+
+private:
+ friend class SubsumeStrengthen;
+ SubsumeStrengthen* sub_str;
+ friend class BVA;
+ BVA* bva;
+ bool startup = false;
+ bool backward_sub_str();
+ bool execute_simplifier_strategy(const string& strategy);
+
+ //debug
+ bool subsetReverse(const Clause& B) const;
+
+ //Persistent data
+ Solver* solver; ///<The solver this simplifier is connected to
+ vector<uint16_t>& seen;
+ vector<uint8_t>& seen2;
+ vector<Lit>& toClear;
+ vector<bool> indep_vars;
+
+ //Temporaries
+ vector<Lit> dummy; ///<Used by merge()
+
+ //Limits
+ uint64_t clause_lits_added;
+ int64_t strengthening_time_limit; ///<Max. number self-subsuming resolution tries to do this run
+ int64_t subsumption_time_limit; ///<Max. number backward-subsumption tries to do this run
+ int64_t norm_varelim_time_limit;
+ int64_t empty_varelim_time_limit;
+ int64_t varelim_num_limit;
+ int64_t varelim_sub_str_limit;
+ int64_t* limit_to_decrease;
+
+ //Start-up
+ bool fill_occur();
+ bool fill_occur_and_print_stats();
+ void finishUp(size_t origTrailSize);
+ struct LinkInData
+ {
+ LinkInData()
+ {}
+
+ LinkInData(uint64_t _cl_linked, uint64_t _cl_not_linked) :
+ cl_linked(_cl_linked)
+ , cl_not_linked(_cl_not_linked)
+ {}
+
+ LinkInData& combine(const LinkInData& other)
+ {
+ cl_linked += other.cl_linked;
+ cl_not_linked += other.cl_not_linked;
+ return *this;
+ }
+
+ uint64_t cl_linked = 0;
+ uint64_t cl_not_linked = 0;
+ };
+ LinkInData link_in_data_irred;
+ LinkInData link_in_data_red;
+ uint64_t calc_mem_usage_of_occur(const vector<ClOffset>& toAdd) const;
+ void print_mem_usage_of_occur(uint64_t memUsage) const;
+ void print_linkin_data(const LinkInData link_in_data) const;
+ bool decide_occur_limit(bool irred, uint64_t memUsage);
+ OccSimplifier::LinkInData link_in_clauses(
+ const vector<ClOffset>& toAdd
+ , bool alsoOccur
+ , uint32_t max_size
+ , int64_t link_in_lit_limit
+ );
+ void set_limits();
+
+ //Finish-up
+ void remove_by_drat_recently_blocked_clauses(size_t origBlockedSize);
+ void add_back_to_solver();
+ bool check_varelim_when_adding_back_cl(const Clause* cl) const;
+ void remove_all_longs_from_watches();
+ bool complete_clean_clause(Clause& ps);
+
+ //Clause update
+ lbool clean_clause(ClOffset c);
+ void linkInClause(Clause& cl);
+ bool handleUpdatedClause(ClOffset c);
+ uint32_t sum_irred_cls_longs() const;
+ uint32_t sum_irred_cls_longs_lits() const;
+
+ struct watch_sort_smallest_first {
+ bool operator()(const Watched& first, const Watched& second)
+ {
+ //Anything but clause!
+ if (first.isClause())
+ return false;
+ if (second.isClause())
+ return true;
+
+ //Both are bin
+ return false;
+ }
+ };
+
+ /////////////////////
+ //Variable elimination
+ uint32_t grow = 0; /// maximum grow rate for clauses
+ vector<uint64_t> varElimComplexity;
+ ///Order variables according to their complexity of elimination
+ struct VarOrderLt {
+ const vector<uint64_t>& varElimComplexity;
+ bool operator () (const uint64_t x, const uint64_t y) const
+ {
+ return varElimComplexity[x] < varElimComplexity[y];
+ }
+
+ explicit VarOrderLt(
+ const vector<uint64_t>& _varElimComplexity
+ ) :
+ varElimComplexity(_varElimComplexity)
+ {}
+ };
+ void order_vars_for_elim();
+ Heap<VarOrderLt> velim_order;
+ void rem_cls_from_watch_due_to_varelim(watch_subarray todo, const Lit lit);
+ vector<Lit> tmp_rem_lits;
+ vec<Watched> tmp_rem_cls_copy;
+ void add_clause_to_blck(const vector<Lit>& lits);
+ void set_var_as_eliminated(const uint32_t var, const Lit lit);
+ bool can_eliminate_var(const uint32_t var) const;
+ bool clear_vars_from_cls_that_have_been_set(size_t& last_trail);
+ bool deal_with_added_cl_to_var_lit(const Lit lit);
+ bool simulate_frw_sub_str_with_added_cl_to_var();
+
+
+ TouchList elim_calc_need_update;
+ vector<ClOffset> cl_to_free_later;
+ bool maybe_eliminate(const uint32_t x);
+ bool deal_with_added_long_and_bin(const bool main);
+ bool prop_and_clean_long_and_impl_clauses();
+ vector<Lit> tmp_bin_cl;
+ void create_dummy_blocked_clause(const Lit lit);
+ int test_elim_and_fill_resolvents(uint32_t var);
+ void mark_gate_in_poss_negs(Lit elim_lit, watch_subarray_const poss, watch_subarray_const negs);
+ void find_gate(Lit elim_lit, watch_subarray_const a, watch_subarray_const b);
+ void print_var_eliminate_stat(Lit lit) const;
+ bool add_varelim_resolvent(vector<Lit>& finalLits, const ClauseStats& stats, bool is_xor);
+ void update_varelim_complexity_heap();
+ void print_var_elim_complexity_stats(const uint32_t var) const;
+
+ struct ResolventData {
+ ResolventData()
+ {}
+
+ ResolventData(const ClauseStats& cls, const bool _is_xor) :
+ stats(cls),
+ is_xor(_is_xor)
+ {}
+
+ ClauseStats stats;
+ bool is_xor;
+ };
+
+ struct Resolvents {
+ uint32_t at = 0;
+ vector<vector<Lit>> resolvents_lits;
+ vector<ResolventData> resolvents_stats;
+ void clear() {
+ at = 0;
+ }
+ void add_resolvent(const vector<Lit>& res, const ClauseStats& stats, bool is_xor) {
+ if (resolvents_lits.size() < at+1) {
+ resolvents_lits.resize(at+1);
+ resolvents_stats.resize(at+1);
+ }
+
+ resolvents_lits[at] = res;
+ resolvents_stats[at] = ResolventData(stats, is_xor);
+ at++;
+ }
+ vector<Lit>& back_lits() {
+ assert(at > 0);
+ return resolvents_lits[at-1];
+ }
+ const ClauseStats& back_stats() const {
+ assert(at > 0);
+ return resolvents_stats[at-1].stats;
+ }
+ bool back_xor() const {
+ assert(at > 0);
+ return resolvents_stats[at-1].is_xor;
+ }
+ void pop() {
+ at--;
+ }
+ bool empty() const {
+ return at == 0;
+ }
+ uint32_t size() const {
+ return at;
+ }
+ };
+ Resolvents resolvents;
+ Clause* gate_varelim_clause;
+ uint32_t calc_data_for_heuristic(const Lit lit);
+ uint64_t time_spent_on_calc_otf_update;
+ uint64_t num_otf_update_until_now;
+
+ //for n_occur checking only
+ uint32_t calc_occ_data(const Lit lit);
+ void check_n_occur();
+
+ //For empty resolvents
+ enum class ResolvCount{count, set, unset};
+ bool check_empty_resolvent(const Lit lit);
+ int check_empty_resolvent_action(
+ const Lit lit
+ , ResolvCount action
+ , int otherSize
+ );
+
+ uint64_t heuristicCalcVarElimScore(const uint32_t var);
+ bool resolve_clauses(
+ const Watched ps
+ , const Watched qs
+ , const Lit noPosLit
+ );
+ void add_pos_lits_to_dummy_and_seen(
+ const Watched ps
+ , const Lit posLit
+ );
+ bool add_neg_lits_to_dummy_and_seen(
+ const Watched qs
+ , const Lit posLit
+ );
+ bool eliminate_vars();
+ void eliminate_empty_resolvent_vars();
+
+ /////////////////////
+ //Helpers
+ friend class TopLevelGaussAbst;
+ //friend class GateFinder;
+ TopLevelGaussAbst *topLevelGauss;
+ //GateFinder *gateFinder;
+
+ /////////////////////
+ //Blocked clause elimination
+ bool anythingHasBeenBlocked;
+ vector<Lit> blkcls;
+ vector<BlockedClauses> blockedClauses; ///<maps var(outer!!) to postion in blockedClauses
+ vector<uint32_t> blk_var_to_cls;
+ bool blockedMapBuilt;
+ void buildBlockedMap();
+ void cleanBlockedClauses();
+ bool can_remove_blocked_clauses = false;
+
+ //validity checking
+ void sanityCheckElimedVars();
+ void printOccur(const Lit lit) const;
+
+ ///Stats from this run
+ Stats runStats;
+
+ ///Stats globally
+ Stats globalStats;
+};
+
+inline const OccSimplifier::Stats& OccSimplifier::get_stats() const
+{
+ return globalStats;
+}
+
+inline bool OccSimplifier::getAnythingHasBeenBlocked() const
+{
+ return anythingHasBeenBlocked;
+}
+
+/*inline std::ostream& operator<<(std::ostream& os, const BlockedClauses& bl)
+{
+ os << bl.lits << " to remove: " << bl.toRemove;
+
+ return os;
+}*/
+
+inline bool OccSimplifier::subsetReverse(const Clause& B) const
+{
+ for (uint32_t i = 0; i != B.size(); i++) {
+ if (!seen[B[i].toInt()])
+ return false;
+ }
+ return true;
+}
+
+inline const SubsumeStrengthen* OccSimplifier::getSubsumeStrengthen() const
+{
+ return sub_str;
+}
+
+} //end namespace
+
+#endif //SIMPLIFIER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h b/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
new file mode 100644
index 000000000..0ddd664a4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/packedmatrix.h
@@ -0,0 +1,190 @@
+/******************************************
+Copyright (c) 2018 Mate Soos
+Copyright (c) 2012 Cheng-Shen Han
+Copyright (c) 2012 Jie-Hong Roland Jiang
+
+For more information, see " When Boolean Satisfiability Meets Gaussian
+Elimination in a Simplex Way." by Cheng-Shen Han and Jie-Hong Roland Jiang
+in CAV (Computer Aided Verification), 2012: 410-426
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef PACKEDMATRIX_H
+#define PACKEDMATRIX_H
+
+#include <algorithm>
+#include <cstdint>
+#include "packedrow.h"
+
+//#define DEBUG_MATRIX
+
+namespace CMSat {
+
+class PackedMatrix
+{
+public:
+ PackedMatrix() :
+ mp(NULL)
+ , numRows(0)
+ , numCols(0)
+ {
+ }
+
+ ~PackedMatrix()
+ {
+ delete[] mp;
+ }
+
+ void resize(const uint32_t num_rows, uint32_t num_cols)
+ {
+ num_cols = num_cols / 64 + (bool)(num_cols % 64);
+ if (numRows*(numCols+1) < num_rows*(num_cols+1)) {
+ delete[] mp;
+ mp = new uint64_t[num_rows*(num_cols+1)];
+ }
+
+ numRows = num_rows;
+ numCols = num_cols;
+ }
+
+ void resizeNumRows(const uint32_t num_rows)
+ {
+ #ifdef DEBUG_MATRIX
+ assert(num_rows <= numRows);
+ #endif
+
+ numRows = num_rows;
+ }
+
+ PackedMatrix& operator=(const PackedMatrix& b)
+ {
+ #ifdef DEBUG_MATRIX
+ //assert(b.numRows > 0 && b.numCols > 0);
+ #endif
+
+ if (numRows*(numCols+1) < b.numRows*(b.numCols+1)) {
+ delete[] mp;
+ mp = new uint64_t[b.numRows*(b.numCols+1)];
+ }
+ numRows = b.numRows;
+ numCols = b.numCols;
+ memcpy(mp, b.mp, sizeof(uint64_t)*numRows*(numCols+1));
+
+ return *this;
+ }
+
+ inline PackedRow getMatrixAt(const uint32_t i)
+ {
+ #ifdef DEBUG_MATRIX
+ assert(i <= numRows);
+ #endif
+
+ return PackedRow(numCols, mp+i*(numCols+1));
+
+ }
+
+ inline PackedRow getMatrixAt(const uint32_t i) const
+ {
+ #ifdef DEBUG_MATRIX
+ assert(i <= numRows);
+ #endif
+
+ return PackedRow(numCols, mp+i*(numCols+1));
+ }
+
+ class iterator
+ {
+ public:
+ friend class PackedMatrix;
+
+ PackedRow operator*()
+ {
+ return PackedRow(numCols, mp);
+ }
+
+ iterator& operator++()
+ {
+ mp += (numCols+1);
+ return *this;
+ }
+
+ iterator operator+(const uint32_t num) const
+ {
+ iterator ret(*this);
+ ret.mp += (numCols+1)*num;
+ return ret;
+ }
+
+ uint32_t operator-(const iterator& b) const
+ {
+ return (mp - b.mp)/((numCols+1));
+ }
+
+ void operator+=(const uint32_t num)
+ {
+ mp += (numCols+1)*num; // add by f4
+ }
+
+ bool operator!=(const iterator& it) const
+ {
+ return mp != it.mp;
+ }
+
+ bool operator==(const iterator& it) const
+ {
+ return mp == it.mp;
+ }
+
+ private:
+ iterator(uint64_t* _mp, const uint32_t _numCols) :
+ mp(_mp)
+ , numCols(_numCols)
+ {}
+
+ uint64_t* mp;
+ const uint32_t numCols;
+ };
+
+ inline iterator beginMatrix()
+ {
+ return iterator(mp, numCols);
+ }
+
+ inline iterator endMatrix()
+ {
+ return iterator(mp+numRows*(numCols+1), numCols);
+ }
+
+ inline uint32_t getSize() const
+ {
+ return numRows;
+ }
+
+private:
+
+ uint64_t* mp;
+ uint32_t numRows;
+ uint32_t numCols;
+};
+
+}
+
+#endif //PACKEDMATRIX_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/packedrow.cpp b/cryptominisat5/cryptominisat-5.6.3/src/packedrow.cpp
new file mode 100644
index 000000000..6e0d9002e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/packedrow.cpp
@@ -0,0 +1,189 @@
+/******************************************
+Copyright (c) 2018 Mate Soos
+Copyright (c) 2012 Cheng-Shen Han
+Copyright (c) 2012 Jie-Hong Roland Jiang
+
+For more information, see " When Boolean Satisfiability Meets Gaussian
+Elimination in a Simplex Way." by Cheng-Shen Han and Jie-Hong Roland Jiang
+in CAV (Computer Aided Verification), 2012: 410-426
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "packedrow.h"
+
+using namespace CMSat;
+
+bool PackedRow::fill(
+ vec<Lit>& tmp_clause,
+ const vec<lbool>& assigns,
+ const vector<uint32_t>& col_to_var_original
+) const
+{
+ bool final = !rhs_internal;
+
+ tmp_clause.clear();
+ uint32_t col = 0;
+ bool wasundef = false;
+ for (uint32_t i = 0; i < size; i++) for (uint32_t i2 = 0; i2 < 64; i2++) {
+ if ((mp[i] >> i2) &1) {
+ const uint32_t& var = col_to_var_original[col];
+ assert(var != std::numeric_limits<uint32_t>::max());
+
+ const lbool val = assigns[var];
+ const bool val_bool = val == l_True;
+ tmp_clause.push(Lit(var, val_bool));
+ final ^= val_bool;
+ if (val == l_Undef) {
+ assert(!wasundef);
+ Lit tmp(tmp_clause[0]);
+ tmp_clause[0] = tmp_clause.last();
+ tmp_clause.last() = tmp;
+ wasundef = true;
+ }
+ }
+ col++;
+ }
+ if (wasundef) {
+ tmp_clause[0] ^= final;
+ //assert(ps != ps_first+1);
+ } else
+ assert(!final);
+
+ return wasundef;
+}
+
+///returns popcnt
+uint32_t PackedRow::find_watchVar(
+ vector<Lit>& tmp_clause,
+ const vector<uint32_t>& col_to_var,
+ vec<bool> &GasVar_state,
+ uint32_t& nb_var
+) {
+ uint32_t tmp_var = 0;
+ uint32_t popcnt = 0;
+ nb_var = std::numeric_limits<uint32_t>::max();
+ uint32_t i;
+ tmp_clause.clear();
+
+
+ for(i = 0; i < size*64; i++) {
+ if (this->operator[](i)){
+ popcnt++;
+ tmp_var = col_to_var[i];
+ tmp_clause.push_back(Lit(tmp_var, false));
+ if( !GasVar_state[tmp_var] ){ //nobasic
+ nb_var = tmp_var;
+ break;
+ }else{ // basic
+ Lit tmp(tmp_clause[0]);
+ tmp_clause[0] = tmp_clause.back();
+ tmp_clause.back() = tmp;
+ }
+ }
+ }
+
+ for( i = i + 1 ; i < size*64; i++) {
+ if (this->operator[](i)){
+ popcnt++;
+ tmp_var = col_to_var[i];
+ tmp_clause.push_back(Lit(tmp_var, false));
+ if( GasVar_state[tmp_var] ){ //basic
+ Lit tmp(tmp_clause[0]);
+ tmp_clause[0] = tmp_clause.back();
+ tmp_clause.back() = tmp;
+ }
+ }
+ }
+ assert(tmp_clause.size() == popcnt);
+ assert( popcnt == 0 || GasVar_state[ tmp_clause[0].var() ]) ;
+ return popcnt;
+
+}
+
+gret PackedRow::propGause(
+ vector<Lit>& tmp_clause,
+ const vector<lbool>& assigns,
+ const vector<uint32_t>& col_to_var,
+ vec<bool> &GasVar_state, // variable state : basic or non-basic
+ uint32_t& nb_var,
+ uint32_t start
+) {
+
+ bool final = !rhs_internal;
+ nb_var = std::numeric_limits<uint32_t>::max();
+ tmp_clause.clear();
+
+ for (uint32_t i = start/64; i != size; i++) if (mp[i]) {
+ uint64_t tmp = mp[i];
+ for (uint32_t i2 = 0 ; i2 < 64; i2++) {
+ if(tmp & 1){
+ const uint32_t var = col_to_var[i * 64 + i2];
+ const lbool val = assigns[var];
+ if (val == l_Undef && !GasVar_state[var]) { // find non basic value
+ nb_var = var;
+ return gret::nothing_fnewwatch; // nothing
+ }
+ const bool val_bool = (val == l_True);
+ final ^= val_bool;
+ tmp_clause.push_back(Lit(var, val_bool));
+ if (likely(GasVar_state[var])) {
+ std::swap(tmp_clause[0], tmp_clause.back());
+ }
+ }
+ tmp >>= 1;
+ }
+ }
+
+ for ( uint32_t i =0; i != start/64; i++) if (likely(mp[i])) {
+ uint64_t tmp = mp[i];
+ for (uint32_t i2 = 0 ; i2 < 64; i2++) {
+ if(tmp & 1){
+ const uint32_t var = col_to_var[i * 64 + i2];
+ const lbool val = assigns[var];
+ if (val == l_Undef && !GasVar_state[var] ){ // find non basic value
+ nb_var = var;
+ return gret::nothing_fnewwatch; // nothing
+ }
+ const bool val_bool = val == l_True;
+ final ^= val_bool;
+ tmp_clause.push_back(Lit(var, val_bool));
+ if ( GasVar_state[var] ) {
+ std::swap(tmp_clause[0], tmp_clause.back());
+ }
+ }
+ tmp >>= 1;
+ }
+ }
+
+ if (assigns[tmp_clause[0].var()] == l_Undef) { // propogate
+ tmp_clause[0] = tmp_clause[0].unsign()^final;
+ return gret::prop; // propogate
+ } else if (!final) {
+ return gret::confl; // conflict
+ }
+ // this row already true
+ return gret::nothing; // nothing
+
+}
+
+
+
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h b/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
new file mode 100644
index 000000000..5e5b5100e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/packedrow.h
@@ -0,0 +1,282 @@
+/******************************************
+Copyright (c) 2018 Mate Soos
+Copyright (c) 2012 Cheng-Shen Han
+Copyright (c) 2012 Jie-Hong Roland Jiang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef PACKEDROW_H
+#define PACKEDROW_H
+
+//#define DEBUG_ROW
+
+#include <vector>
+#include <cstdint>
+#include <string.h>
+#include <iostream>
+#include <algorithm>
+#include <limits>
+
+#include "solvertypes.h"
+#include "popcnt.h"
+#include "Vec.h"
+
+namespace CMSat {
+
+using std::vector;
+
+class PackedMatrix;
+
+class PackedRow
+{
+public:
+ bool operator ==(const PackedRow& b) const;
+ bool operator !=(const PackedRow& b) const;
+
+ PackedRow& operator=(const PackedRow& b)
+ {
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ assert(b.size > 0);
+ assert(size == b.size);
+ #endif
+
+ memcpy(mp-1, b.mp-1, size+1);
+ return *this;
+ }
+
+ PackedRow& operator^=(const PackedRow& b)
+ {
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ assert(b.size > 0);
+ assert(b.size == size);
+ #endif
+
+ for (uint32_t i = 0; i != size; i++) {
+ *(mp + i) ^= *(b.mp + i);
+ }
+
+ rhs_internal ^= b.rhs_internal;
+ return *this;
+ }
+
+ void xorBoth(const PackedRow& b)
+ {
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ assert(b.size > 0);
+ assert(b.size == size);
+ #endif
+
+ for (uint32_t i = 0; i != size; i++) {
+ *(mp + i) ^= *(b.mp + i);
+ }
+
+ rhs_internal ^= b.rhs_internal;
+ }
+
+
+ uint32_t popcnt() const;
+ bool popcnt_is_one() const
+ {
+ int ret = 0;
+ for (uint32_t i = 0; i != size; i++) {
+ ret += my_popcnt(mp[i]&0xffffffff);
+ ret += my_popcnt(mp[i]>>32);
+ if (ret > 1) return false;
+ }
+ return ret == 1;
+ }
+
+ bool popcnt_is_one(uint32_t from) const
+ {
+ from++;
+
+ uint64_t tmp = mp[from/64];
+ tmp >>= from%64;
+ if (tmp) return false;
+
+ for (uint32_t i = from/64+1; i != size; i++)
+ if (mp[i]) return false;
+ return true;
+ }
+
+ inline const uint64_t& rhs() const
+ {
+ return rhs_internal;
+ }
+
+ inline bool isZero() const
+ {
+ for (uint32_t i = 0; i != size; i++) {
+ if (mp[i]) return false;
+ }
+ return true;
+ }
+
+ inline void setZero()
+ {
+ memset(mp, 0, sizeof(uint64_t)*size);
+ }
+
+ inline void clearBit(const uint32_t i)
+ {
+ mp[i/64] &= ~((uint64_t)1 << (i%64));
+ }
+
+ inline void invert_rhs(const bool b = true)
+ {
+ rhs_internal ^= (uint64_t)b;
+ }
+
+ inline void setBit(const uint32_t i)
+ {
+ mp[i/64] |= ((uint64_t)1 << (i%64));
+ }
+
+ void swapBoth(PackedRow b)
+ {
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ assert(b.size > 0);
+ assert(b.size == size);
+ #endif
+
+ uint64_t * __restrict mp1 = mp-1;
+ uint64_t * __restrict mp2 = b.mp-1;
+
+ uint32_t i = size+1;
+ while(i != 0) {
+ std::swap(*mp1, *mp2);
+ mp1++;
+ mp2++;
+ i--;
+ }
+ }
+
+ inline bool operator[](const uint32_t& i) const
+ {
+ #ifdef DEBUG_ROW
+ assert(size*64 > i);
+ #endif
+
+ return (mp[i/64] >> (i%64)) & 1;
+ }
+
+ template<class T>
+ void set(const T& v, const vector<uint32_t>& var_to_col, const uint32_t matrix_size)
+ {
+ //(xorclause, var_to_col, origMat.num_cols)
+ assert(size == (matrix_size/64) + ((bool)(matrix_size % 64)));
+ //mp = new uint64_t[size];
+ setZero();
+ for (uint32_t i = 0; i != v.size(); i++) {
+ const uint32_t toset_var = var_to_col[v[i]];
+ assert(toset_var != std::numeric_limits<uint32_t>::max());
+
+ setBit(toset_var);
+ }
+
+ rhs_internal = v.rhs;
+ }
+
+ bool fill(vec<Lit>& tmp_clause, const vec<lbool>& assigns, const vector<uint32_t>& col_to_var_original) const;
+
+ // using find nonbasic and basic value
+ uint32_t find_watchVar(vector<Lit>& tmp_clause, const vector<uint32_t>& col_to_var,vec<bool> &GasVar_state , uint32_t& nb_var );
+
+ // using find nonbasic value after watch list is enter
+ gret propGause(vector<Lit>& tmp_clause,const vector<lbool>& assigns, const vector<uint32_t>& col_to_var, vec<bool> &GasVar_state ,uint32_t& nb_var , uint32_t start);
+
+ inline unsigned long int scan(const unsigned long int var) const
+ {
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ #endif
+
+ for(uint32_t i = var; i != size*64; i++) {
+ if (this->operator[](i)) return i;
+ }
+
+ return std::numeric_limits<unsigned long int>::max();
+ }
+
+private:
+ friend class PackedMatrix;
+ friend std::ostream& operator << (std::ostream& os, const PackedRow& m);
+
+ PackedRow(const uint32_t _size, uint64_t* const _mp) :
+ mp(_mp+1)
+ , rhs_internal(*_mp)
+ , size(_size)
+ {}
+
+ uint64_t* __restrict const mp;
+ uint64_t& rhs_internal;
+ const uint32_t size;
+};
+
+inline std::ostream& operator << (std::ostream& os, const PackedRow& m)
+{
+ for(uint32_t i = 0; i < m.size*64; i++) {
+ os << m[i];
+ }
+ os << " -- rhs: " << m.rhs();
+ return os;
+}
+
+
+inline bool PackedRow::operator ==(const PackedRow& b) const
+{
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ assert(b.size > 0);
+ assert(size == b.size);
+ #endif
+
+ return (std::equal(b.mp-1, b.mp+size, mp-1));
+}
+
+inline bool PackedRow::operator !=(const PackedRow& b) const
+{
+ #ifdef DEBUG_ROW
+ assert(size > 0);
+ assert(b.size > 0);
+ assert(size == b.size);
+ #endif
+
+ return (!std::equal(b.mp-1, b.mp+size, mp-1));
+}
+
+
+inline uint32_t PackedRow::popcnt() const
+{
+ int ret = 0;
+ for (uint32_t i = 0; i != size; i++) {
+ ret += my_popcnt(mp[i]&0xffffffff);
+ ret += my_popcnt(mp[i]>>32);
+ }
+ return ret;
+}
+
+}
+
+#endif //PACKEDROW_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h b/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
new file mode 100644
index 000000000..0c8988e72
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/popcnt.h
@@ -0,0 +1,37 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef POPCNT__H
+#define POPCNT__H
+
+
+#if defined (_MSC_VER)
+#include <intrin.h>
+#endif
+
+#if defined (_MSC_VER)
+#define my_popcnt(x) __popcnt(x)
+#else
+#define my_popcnt(x) __builtin_popcount(x)
+#endif
+
+#endif //POPCNT__H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp b/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
new file mode 100644
index 000000000..13fe7ce5d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/prober.cpp
@@ -0,0 +1,954 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+
+#include "prober.h"
+
+#include <iomanip>
+#include <utility>
+#include <set>
+#include <utility>
+#include <cmath>
+
+#include "solver.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "clausecleaner.h"
+#include "completedetachreattacher.h"
+#include "sqlstats.h"
+
+using namespace CMSat;
+using std::make_pair;
+using std::set;
+using std::cout;
+using std::endl;
+
+//#define VERBOSE_DEUBUG
+
+/**
+@brief Sets up variables that are used between calls to probe()
+*/
+Prober::Prober(Solver* _solver):
+ solver(_solver)
+ , numPropsMultiplier(1.0)
+ , lastTimeZeroDepthAssings(0)
+{
+}
+
+uint64_t Prober::limit_used() const
+{
+ return solver->propStats.bogoProps
+ + solver->propStats.otfHyperTime
+ + extraTime
+ + extraTimeCache;
+}
+
+void Prober::checkOTFRatio()
+{
+ double ratio = float_div(solver->propStats.bogoProps,
+ solver->propStats.otfHyperTime + solver->propStats.bogoProps);
+
+ /*static int val = 0;
+ if (val % 10 == 0) {
+ cout << "Ratio is " << std::setprecision(2) << ratio << endl;
+ }
+ val++;*/
+
+ if (solver->conf.verbosity) {
+ cout
+ << "c [probe] Ratio of hyperbin/(bogo+hyperbin) is : "
+ << std::setprecision(2) << ratio
+ << " (this indicates how much time is spent doing hyperbin&trans-red)"
+ << endl;
+ }
+
+ const uint64_t time_limit =
+ solver->conf.otf_hyper_time_limitM*1000ULL*1000ULL
+ *solver->conf.global_timeout_multiplier;
+ if (solver->propStats.bogoProps+solver->propStats.otfHyperTime
+ > time_limit
+ && ratio < solver->conf.otf_hyper_ratio_limit
+ && solver->conf.otfHyperbin
+ && !(solver->drat->enabled() || solver->conf.simulate_drat)
+ ) {
+ solver->conf.otfHyperbin = false;
+ if (solver->conf.verbosity) {
+ cout << "c [probe] no longer doing OTF hyper-bin&trans-red" << endl;
+ }
+ solver->needToAddBinClause.clear();
+ solver->uselessBin.clear();
+ }
+}
+
+void Prober::reset_stats_and_state()
+{
+ extraTime = 0;
+ extraTimeCache = 0;
+ solver->propStats.clear();
+ runStats.clear();
+ runStats.origNumBins = solver->binTri.redBins + solver->binTri.irredBins;
+
+ visitedAlready.clear();
+ visitedAlready.resize(solver->nVars()*2, 0);
+ propagatedBitSet.clear();
+ propagated.clear();
+ propagated.resize(solver->nVars(), 0);
+ propValue.resize(solver->nVars());
+}
+
+uint64_t Prober::calc_num_props_limit()
+{
+ uint64_t num_props_limit = solver->conf.probe_bogoprops_time_limitM
+ *solver->conf.global_timeout_multiplier
+ *1000ULL*1000ULL;
+
+ //Bogoprops for hyper-bin is MUCH more precise, so if no propagateFull???
+ //then mush less bogoProps will lead to the same amount of time
+ if (!solver->conf.otfHyperbin) {
+ num_props_limit /= 4;
+ }
+
+ //Account for cache being too small
+ const size_t num_active_vars = solver->num_active_vars();
+ if (num_active_vars < 50LL*1000LL) {
+ num_props_limit *= 1.2;
+ }
+ if (solver->litStats.redLits + solver->litStats.irredLits < 2LL*1000LL*1000LL) {
+ num_props_limit *= 1.2;
+ }
+ if (num_active_vars > 600LL*1000LL) {
+ num_props_limit *= 0.8;
+ }
+ if (solver->litStats.redLits + solver->litStats.irredLits > 20LL*1000LL*1000LL) {
+ num_props_limit *= 0.8;
+ }
+
+ runStats.origNumFreeVars = num_active_vars;
+ if (solver->conf.verbosity) {
+ cout
+ << "c [probe] lits : "
+ << std::setprecision(2) << (double)(solver->litStats.redLits + solver->litStats.irredLits)/(1000.0*1000.0)
+ << "M"
+ << " act vars: "
+ << std::setprecision(2) << (double)num_active_vars/1000.0 << "K"
+ << " BP+HP todo: "
+ << std::setprecision(2) << (double)num_props_limit/(1000.0*1000.0) << "M"
+ << endl;
+ }
+
+ return num_props_limit;
+}
+
+void Prober::clean_clauses_before_probe()
+{
+ if (solver->conf.verbosity >= 6) {
+ cout << "c Cleaning clauses before probing." << endl;
+ }
+ solver->clauseCleaner->remove_and_clean_all();
+ if (solver->conf.verbosity >= 6) {
+ cout << "c Cleaning clauses before probing finished." << endl;
+ }
+}
+
+uint64_t Prober::update_num_props_limit_based_on_prev_perf(uint64_t num_props_limit)
+{
+ //If failed var searching is going good, do successively more and more of it
+ const double percentEffectLast =
+ float_div(lastTimeZeroDepthAssings, runStats.origNumFreeVars)
+ * 100.0;
+
+ if (percentEffectLast > 20.0) {
+ //It's doing VERY well
+ numPropsMultiplier = std::min(numPropsMultiplier*2, 5.0);
+ } else if (percentEffectLast >= 10.0) {
+ //It's doing well
+ numPropsMultiplier = std::min(numPropsMultiplier*1.6, 4.0);
+ } else if (percentEffectLast <= 3) {
+ //It's doing badly
+ numPropsMultiplier = 0.5;
+ } else {
+ //It's doing OK
+ numPropsMultiplier = 1.0;
+ }
+
+ //First start is special, there is no previous record
+ if (globalStats.numCalls == 0) {
+ numPropsMultiplier = 1.0;
+ }
+
+ num_props_limit = (double)num_props_limit * numPropsMultiplier;
+ const size_t num_props_limitAftPerf = num_props_limit;
+ num_props_limit = (double)num_props_limit * std::pow((double)(globalStats.numCalls+1), 0.3);
+
+ if (solver->conf.verbosity >=2 ) {
+ cout
+ << "c [probe] NumProps after perf multi: "
+ << std::setprecision(2) << (double)num_props_limitAftPerf/(1000.0*1000.0)
+ << "M"
+ << " after numcall multi: "
+ << std::setprecision(2) << (double)num_props_limit/(1000.0*1000.0)
+ << "M (<- final)"
+ << endl;
+ }
+
+ return num_props_limit;
+}
+
+void Prober::clean_clauses_after_probe()
+{
+ double time = cpuTime();
+ bool advancedCleanup = false;
+
+ //If more than 10% were set, detach&reattach. It's faster
+ if ((double)runStats.origNumFreeVars - (double)solver->get_num_free_vars()
+ > (double)runStats.origNumFreeVars/10.0
+ && solver->getNumLongClauses() > 200000
+ ) {
+ if (solver->conf.verbosity >= 5)
+ cout << "c Advanced cleanup after probing" << endl;
+
+ advancedCleanup = true;
+ CompleteDetachReatacher reattacher(solver);
+ reattacher.detach_nonbins_nontris();
+ const bool ret = reattacher.reattachLongs();
+ release_assert(ret == true);
+ } else {
+ if (solver->conf.verbosity >= 5)
+ cout << "c Standard cleanup after probing" << endl;
+
+ solver->clauseCleaner->remove_and_clean_all();
+ }
+
+ if (solver->conf.verbosity >= 1 &&
+ (runStats.zeroDepthAssigns > 100 || advancedCleanup)
+ ) {
+ double time_used = cpuTime() - time;
+ cout
+ << "c [probe] cleaning up after"
+ << solver->conf.print_times(time_used)
+ << endl;
+ }
+}
+
+void Prober::check_if_must_disable_otf_hyperbin_and_tred(const uint64_t num_props_limit)
+{
+ const double ratioUsedTime = float_div(
+ solver->propStats.bogoProps + solver->propStats.otfHyperTime + extraTime
+ , num_props_limit);
+ if (solver->conf.otfHyperbin
+ //Visited less than half
+ && float_div(runStats.numVisited, runStats.origNumFreeVars) < 0.8
+ //And we used up most of the time
+ && ratioUsedTime > 0.8
+ ) {
+ checkOTFRatio();
+ }
+}
+
+void Prober::check_if_must_disable_cache_update()
+{
+ //If time wasted on cache updating (extraTime) is large, stop cache
+ //updation
+ double timeOnCache = float_div(extraTimeCache
+ , solver->propStats.bogoProps
+ + solver->propStats.otfHyperTime
+ + extraTime + extraTimeCache
+ ) ;
+
+
+ //More than 50% of the time is spent updating the cache... that's a lot
+ //Disable and free
+ if (timeOnCache > 50.0 && solver->conf.doCache) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [probe] too much time spent on updating cache: "
+ << std::fixed << std::setprecision(1) << timeOnCache
+ << "% during probing --> disabling cache"
+ << endl;
+ }
+
+ solver->conf.doCache = false;
+ solver->implCache.free();
+ } else {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [probe] time spent updating cache during probing: "
+ << std::fixed << std::setprecision(1) << timeOnCache
+ << "%"
+ << endl;
+ }
+ }
+}
+
+vector<uint32_t> Prober::randomize_possible_choices()
+{
+ vars_to_probe.clear();
+ for(size_t i = 0; i < solver->nVars(); i++) {
+ if (solver->value(i) == l_Undef
+ && solver->varData[i].removed == Removed::none
+ ) {
+ vars_to_probe.push_back(i);
+ }
+ }
+
+ //Random swap
+ for (size_t i = 0
+ ; i + 1< vars_to_probe.size()
+ ; i++
+ ) {
+ std::swap(
+ vars_to_probe[i]
+ , vars_to_probe[i+solver->mtrand.randInt(vars_to_probe.size()-1-i)]
+ );
+ }
+
+ return vars_to_probe;
+}
+
+bool Prober::probe(vector<uint32_t>* probe_order)
+{
+ assert(solver->ok);
+ assert(solver->qhead == solver->trail.size());
+ assert(solver->decisionLevel() == 0);
+ assert(solver->nVars() > 0);
+
+ clean_clauses_before_probe();
+ reset_stats_and_state();
+ uint64_t num_props_limit = calc_num_props_limit();
+
+ const double myTime = cpuTime();
+ const size_t origTrailSize = solver->trail_size();
+ num_props_limit = update_num_props_limit_based_on_prev_perf(num_props_limit);
+
+ if (probe_order == NULL) {
+ randomize_possible_choices();
+ } else {
+ vars_to_probe = *probe_order;
+ }
+
+ if (solver->conf.verbosity >= 10) {
+ cout << "Order of probe:";
+ for(auto x: vars_to_probe) {
+ cout << x+1 << ", ";
+ }
+ cout << endl;
+ }
+
+ assert(solver->propStats.bogoProps == 0);
+ assert(solver->propStats.otfHyperTime == 0);
+ single_prop_tout = (double)num_props_limit *solver->conf.single_probe_time_limit_perc;
+
+ for(size_t i = 0
+ ; i < vars_to_probe.size()
+ && limit_used() < num_props_limit
+ && !solver->must_interrupt_asap()
+ ; i++
+ ) {
+ if ((i & 0xff) == 0xff
+ && cpuTime() >= solver->conf.maxTime
+ ) {
+ break;
+ }
+ extraTime += 20;
+ runStats.numLoopIters++;
+ const uint32_t var = vars_to_probe[i];
+
+ //Probe 'false' first --> this is not critical
+ Lit lit = Lit(var, false);
+
+ //Check if var is set already
+ if (solver->value(lit.var()) != l_Undef
+ || solver->varData[lit.var()].removed != Removed::none
+ || visitedAlready[lit.toInt()]
+ ) {
+ continue;
+ }
+
+ runStats.numVarProbed++;
+ extraTime += 20;
+
+ if (!try_this(lit, true))
+ goto end;
+
+ if (solver->value(lit) == l_Undef
+ && !try_this(~lit, false)
+ ) {
+ goto end;
+ }
+ }
+
+end:
+
+ if (solver->conf.verbosity >= 10) {
+ cout << "c main loop for " << __func__
+ << " finished: "
+ << " must_interrupt? " << solver->must_interrupt_asap()
+ << " limit_used? " << (limit_used() >= num_props_limit)
+ << endl;
+ }
+
+ //Delete any remaining binaries to add or remove
+ //next time, variables will be renumbered/etc. so it will be wrong
+ //to add/remove them
+ solver->needToAddBinClause.clear();
+ solver->uselessBin.clear();
+
+ runStats.zeroDepthAssigns = solver->trail_size() - origTrailSize;
+ if (solver->ok && runStats.zeroDepthAssigns) {
+ clean_clauses_after_probe();
+ }
+
+ update_and_print_stats(myTime, num_props_limit);
+ check_if_must_disable_otf_hyperbin_and_tred(num_props_limit);
+ check_if_must_disable_cache_update();
+
+ return solver->okay();
+}
+
+void Prober::update_and_print_stats(const double myTime, const uint64_t num_props_limit)
+{
+ for(size_t i = 0; i < visitedAlready.size(); i++) {
+ if (visitedAlready[i])
+ runStats.numVisited++;
+ }
+ lastTimeZeroDepthAssings = runStats.zeroDepthAssigns;
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (limit_used() > num_props_limit);
+ const double time_remain = float_div((int64_t)num_props_limit-(int64_t)limit_used(), num_props_limit);
+ runStats.cpu_time = time_used;
+ runStats.propStats = solver->propStats;
+ runStats.timeAllocated += num_props_limit;
+ runStats.numCalls = 1;
+ globalStats += runStats;
+
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3)
+ runStats.print(solver->nVars(), solver->conf.do_print_times);
+ else
+ runStats.print_short(solver, time_out, time_remain);
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "probe"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+}
+
+void Prober::clear_up_before_first_set()
+{
+ extraTime += propagatedBitSet.size();
+ for(size_t varset: propagatedBitSet) {
+ propagated[varset] = false;
+ }
+ propagatedBitSet.clear();
+}
+
+void Prober::update_cache(Lit thisLit, Lit lit, size_t numElemsSet)
+{
+ //Update cache, if the trail was within limits (cacheUpdateCutoff)
+ const Lit ancestor = solver->varData[thisLit.var()].reason.getAncestor();
+ if (solver->conf.doCache
+ && thisLit != lit
+ && numElemsSet <= solver->conf.cacheUpdateCutoff
+ //&& cacheUpdated[(~ancestor).toInt()] == 0
+ ) {
+ //Update stats/markings
+ //cacheUpdated[(~ancestor).toInt()]++;
+ extraTime += 1;
+ extraTimeCache += solver->implCache[~ancestor].lits.size()/30;
+ extraTimeCache += solver->implCache[~thisLit].lits.size()/30;
+
+ const bool redStep = solver->varData[thisLit.var()].reason.isRedStep();
+
+ //Update the cache now
+ assert(ancestor != lit_Undef);
+ bool taut = solver->implCache[~ancestor].merge(
+ solver->implCache[~thisLit].lits
+ , thisLit
+ , redStep
+ , ancestor.var()
+ , solver->seen
+ );
+
+ //If tautology according to cache we can
+ //enqueue ~ancestor at toplevel since both
+ //~ancestor V OTHER, and ~ancestor V ~OTHER are technically in
+ if (taut
+ && solver->varData[ancestor.var()].removed == Removed::none
+ ) {
+ toEnqueue.push_back(~ancestor);
+ (*solver->drat) << add << ~ancestor
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ if (solver->conf.verbosity >= 10)
+ cout << "c Tautology from cache indicated we can enqueue " << (~ancestor) << endl;
+ }
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "The impl cache of " << (~ancestor) << " is now: ";
+ cout << solver->implCache[(~ancestor).toInt()] << endl;
+ #endif
+ }
+}
+
+void Prober::check_and_set_both_prop(Lit probed_lit, uint32_t var, bool first)
+{
+ //If this is the first, set what is propagated
+ if (first) {
+ //Visited this var, needs clear later on
+ propagatedBitSet.push_back(var);
+
+ //Set prop has been done
+ propagated[var] = true;
+
+ //Set propValue
+ if (solver->value(var) == l_True)
+ propValue[var] = true;
+ else
+ propValue[var] = false;
+ } else if (propagated[var]) {
+ if (propValue[var] == (solver->value(var) == l_True)) {
+
+ //they both imply the same
+ const Lit litToEnq = Lit(var, !propValue[var]);
+ toEnqueue.push_back(litToEnq);
+ (*solver->drat) << add << probed_lit << litToEnq
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ (*solver->drat) << add << ~probed_lit << litToEnq
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ (*solver->drat) << add << litToEnq
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ if (solver->conf.verbosity >= 10)
+ cout << "c Bothprop indicated to enqueue " << litToEnq << endl;
+ }
+ }
+}
+
+void Prober::add_rest_of_lits_to_cache(Lit lit)
+{
+ tmp_lits.clear();
+ for (int64_t c = solver->trail_size()-1
+ ; c != (int64_t)solver->trail_lim[0] - 1
+ ; c--
+ ) {
+ extraTime += 2;
+ const Lit thisLit = solver->trail[c];
+ tmp_lits.push_back(thisLit);
+ }
+
+ bool taut = solver->implCache[~lit].merge(
+ tmp_lits
+ , lit_Undef
+ , true //Red step -- we don't know, so we assume
+ , lit.var()
+ , solver->seen
+ );
+
+ //If tautology according to cache we can
+ //enqueue ~lit at toplevel since both
+ //~lit V OTHER, and ~lit V ~OTHER are technically in
+ if (taut) {
+ toEnqueue.push_back(~lit);
+ (*solver->drat) << add << ~lit
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ }
+}
+
+bool Prober::check_timeout_due_to_hyperbin()
+{
+ //If we timed out on ONE call, turn otf hyper-bin off
+ //and return --> the "visitedAlready" will be wrong
+ if (solver->timedOutPropagateFull
+ && !(solver->drat->enabled() || solver->conf.simulate_drat)
+ ) {
+ if (solver->conf.verbosity) {
+ cout
+ << "c [probe] intra-propagation timout,"
+ << " turning off OTF hyper-bin&trans-red"
+ << endl;
+ }
+
+ solver->conf.otfHyperbin = false;
+ solver->cancelUntil<false, true>(0);
+
+ runStats.addedBin += solver->hyper_bin_res_all();
+ std::pair<size_t, size_t> tmp = solver->remove_useless_bins();
+ runStats.removedIrredBin += tmp.first;
+ runStats.removedRedBin += tmp.second;
+
+ for(vector<uint32_t>::const_iterator
+ it = propagatedBitSet.begin(), end = propagatedBitSet.end()
+ ; it != end
+ ; ++it
+ ) {
+ propagated[*it] = false;
+ }
+ propagatedBitSet.clear();
+ toEnqueue.clear();
+ return true;
+ }
+
+ return false;
+}
+
+bool Prober::try_this(const Lit lit, const bool first)
+{
+ //Clean state if this is the 1st of two
+ if (first) {
+ clear_up_before_first_set();
+ }
+ toEnqueue.clear();
+ runStats.numProbed++;
+ solver->new_decision_level();
+ solver->enqueue(lit);
+ solver->depth[lit.var()] = 0;
+ if (solver->conf.verbosity >= 6) {
+ cout
+ << "c Probing lit " << lit
+ << endl;
+ }
+
+ Lit failed = lit_Undef;
+ if (!propagate(failed)) {
+ return solver->okay();
+ }
+
+ if (failed == lit_Undef) {
+ if (solver->conf.verbosity >= 6)
+ cout << "c Did not fail on lit " << lit << endl;
+
+ //Fill bothprop, cache
+ assert(solver->decisionLevel() > 0);
+ size_t numElemsSet = solver->trail_size() - solver->trail_lim[0];
+ for (int64_t c = solver->trail_size()-1
+ ; c != (int64_t)solver->trail_lim[0] - 1
+ ; c--
+ ) {
+ extraTime += 2;
+ const Lit thisLit = solver->trail[c];
+ const uint32_t var = thisLit.var();
+
+ if (solver->conf.doBothProp) {
+ check_and_set_both_prop(lit, var, first);
+ }
+ visitedAlready[thisLit.toInt()] = 1;
+ if (solver->conf.otfHyperbin) {
+ update_cache(thisLit, lit, numElemsSet);
+ }
+ }
+
+ if (!solver->conf.otfHyperbin
+ && solver->conf.doCache
+ ) {
+ add_rest_of_lits_to_cache(lit);
+ }
+ }
+
+ solver->cancelUntil<false, true>(0);
+ solver->add_otf_subsume_long_clauses();
+ solver->add_otf_subsume_implicit_clause();
+ runStats.addedBin += solver->hyper_bin_res_all();
+ std::pair<size_t, size_t> tmp = solver->remove_useless_bins();
+ runStats.removedIrredBin += tmp.first;
+ runStats.removedRedBin += tmp.second;
+
+ if (failed != lit_Undef) {
+ if (solver->conf.verbosity >= 6) {
+ cout << "c Failed while enq + prop " << lit
+ << " Lit that got propagated to both values: " << failed << endl;
+ }
+ runStats.numFailed++;
+ #ifdef STATS_NEEDED
+ runStats.conflStats.update(solver->lastConflictCausedBy);
+ #endif
+ runStats.conflStats.numConflicts++;
+
+ vector<Lit> lits;
+ lits.push_back(~failed);
+ solver->add_clause_int(lits, true);
+ clear_up_before_first_set();
+ return solver->okay();
+ } else {
+ assert(solver->ok);
+ runStats.bothSameAdded += toEnqueue.size();
+ extraTime += 3*toEnqueue.size();
+ return solver->fully_enqueue_these(toEnqueue);
+ }
+}
+
+bool Prober::propagate(Lit& failed)
+{
+ if (solver->conf.otfHyperbin) {
+ //Set timeout for ONE enqueue. This used so that in case ONE enqueue
+ //takes too long (usually because of hyper-bin), we exit early
+ uint64_t timeout = std::numeric_limits<uint64_t>::max();
+ if (!(solver->drat->enabled() || solver->conf.simulate_drat)) {
+ timeout = solver->propStats.otfHyperTime
+ + solver->propStats.bogoProps
+ + single_prop_tout;
+ }
+
+ //DFS is expensive, actually. So do BFS 50% of the time
+ if (solver->conf.doStamp &&
+ (force_stamp >= 1 || (solver->mtrand.randInt(1) == 0 && force_stamp == -1))
+ ) {
+ StampType stampType;
+ if (force_stamp == 2) {
+ stampType = StampType::STAMP_IRRED;
+ } else if (force_stamp == 1) {
+ stampType = StampType::STAMP_RED;
+ } else {
+ stampType = solver->mtrand.randInt(1) ? StampType::STAMP_IRRED : StampType::STAMP_RED;
+ }
+ failed = solver->propagate_dfs(stampType, timeout);
+ } else {
+ failed = solver->propagate_bfs(timeout);
+ }
+
+ if (check_timeout_due_to_hyperbin()) {
+ return false;
+ }
+ } else {
+ //No hyper-bin so we use regular propagate and regular analyze
+
+ PropBy confl = solver->propagate<true>();
+ if (!confl.isNULL()) {
+ uint32_t glue;
+ uint32_t backtrack_level;
+ solver->analyze_conflict<true>(
+ confl
+ , backtrack_level //return backtrack level here
+ , glue //return glue here
+ );
+ if (solver->learnt_clause.empty()) {
+ solver->ok = false;
+ return false;
+ }
+ assert(solver->learnt_clause.size() == 1);
+ failed = ~(solver->learnt_clause[0]);
+ }
+ }
+
+ return true;
+}
+
+size_t Prober::mem_used() const
+{
+ size_t mem = 0;
+ mem += visitedAlready.capacity()*sizeof(char);
+ mem += propagatedBitSet.capacity()*sizeof(uint32_t);
+ mem += toEnqueue.capacity()*sizeof(Lit);
+ mem += tmp_lits.capacity()*sizeof(Lit);
+ mem += propagated.capacity()/8;
+ mem += propValue.capacity()/8;
+
+ return mem;
+}
+
+// void Prober::fillToTry(vector<uint32_t>& toTry)
+// {
+// uint32_t max = std::min(solver->negPosDist.size()-1, (size_t)300);
+// while(true) {
+// uint32_t var = solver->negPosDist[solver->mtrand.randInt(max)].var;
+// if (solver->value(var) != l_Undef
+// || (solver->varData[var].removed != Removed::none)
+// ) continue;
+//
+// bool OK = true;
+// for (uint32_t i = 0; i < toTry.size(); i++) {
+// if (toTry[i] == var) {
+// OK = false;
+// break;
+// }
+// }
+// if (OK) {
+// toTry.push_back(var);
+// return;
+// }
+// }
+// }
+//
+// const bool Prober::tryMultiLevelAll()
+// {
+// assert(solver->ok);
+// uint32_t backupNumUnits = solver->trail_size();
+// double myTime = cpuTime();
+// uint32_t numTries = 0;
+// uint32_t finished = 0;
+// uint64_t oldBogoProps = solver->bogoProps;
+// uint32_t enqueued = 0;
+// uint32_t numFailed = 0;
+//
+// if (solver->negPosDist.size() < 30) return true;
+//
+// propagated.resize(solver->nVars(), 0);
+// propagated2.resize(solver->nVars(), 0);
+// propValue.resize(solver->nVars(), 0);
+// assert(propagated.isZero());
+// assert(propagated2.isZero());
+//
+// vector<uint32_t> toTry;
+// while(solver->bogoProps < oldBogoProps + 300*1000*1000) {
+// toTry.clear();
+// for (uint32_t i = 0; i < 3; i++) {
+// fillToTry(toTry);
+// }
+// numTries++;
+// if (!tryMultiLevel(toTry, enqueued, finished, numFailed)) goto end;
+// }
+//
+// end:
+// assert(propagated.isZero());
+// assert(propagated2.isZero());
+//
+// cout
+// << "c multiLevelBoth tried " << numTries
+// << " finished: " << finished
+// << " units: " << (solver->trail_size() - backupNumUnits)
+// << " enqueued: " << enqueued
+// << " numFailed: " << numFailed
+// << " time: " << (cpuTime() - myTime)
+// << endl;
+//
+// return solver->okay();
+// }
+//
+// const bool Prober::tryMultiLevel(const vector<uint32_t>& vars, uint32_t& enqueued, uint32_t& finished, uint32_t& numFailed)
+// {
+// assert(solver->ok);
+//
+// vector<Lit> toEnqueue;
+// bool first = true;
+// bool last = false;
+// //cout << "//////////////////" << endl;
+// for (uint32_t comb = 0; comb < (1U << vars.size()); comb++) {
+// last = (comb == (1U << vars.size())-1);
+// solver->new_decision_level();
+// for (uint32_t i = 0; i < vars.size(); i++) {
+// solver->enqueue(Lit(vars[i], comb&(0x1 << i)));
+// //cout << "lit: " << Lit(vars[i], comb&(1U << i)) << endl;
+// }
+// //cout << "---" << endl;
+// bool failed = !(solver->propagate().isNULL());
+// if (failed) {
+// solver->cancelUntil<false>(0);
+// if (!first) propagated.setZero();
+// numFailed++;
+// return true;
+// }
+//
+// for (int sublevel = solver->trail_size()-1; sublevel > (int)solver->trail_lim[0]; sublevel--) {
+// uint32_t x = solver->trail[sublevel].var();
+// if (first) {
+// propagated.setBit(x);
+// if (solver->assigns[x].getBool()) propValue.setBit(x);
+// else propValue.clearBit(x);
+// } else if (last) {
+// if (propagated[x] && solver->assigns[x].getBool() == propValue[x])
+// toEnqueue.push_back(Lit(x, !propValue[x]));
+// } else {
+// if (solver->assigns[x].getBool() == propValue[x]) {
+// propagated2.setBit(x);
+// }
+// }
+// }
+// solver->cancelUntil<false>(0);
+// if (!first && !last) propagated &= propagated2;
+// propagated2.setZero();
+// if (propagated.isZero()) return true;
+// first = false;
+// }
+// propagated.setZero();
+// finished++;
+//
+// for (vector<Lit>::iterator l = toEnqueue.begin(), end = toEnqueue.end(); l != end; l++) {
+// enqueued++;
+// solver->enqueue(*l);
+// }
+// solver->ok = solver->propagate().isNULL();
+// //std::exit(-1);
+//
+// return solver->okay();
+// }
+
+void Prober::Stats::print_short(const Solver* solver, const bool time_out, const double time_remain) const
+{
+ cout
+ << "c [probe]"
+ << " 0-depth assigns: " << zeroDepthAssigns
+ << " bsame: " << bothSameAdded
+ << " Flit: " << numFailed
+
+ // x2 because it's LITERAL visit
+ << " Visited: " << numVisited << "/" << (origNumFreeVars*2)
+ << "(" << std::setprecision(1)
+ << stats_line_percent(numVisited, origNumFreeVars*2)
+ << "%)"
+ << endl;
+
+ cout
+ << "c [probe]"
+ << " probed: " << numProbed
+ << "(" << std::setprecision(1)
+ // x2 because it's LITERAL probed
+ << stats_line_percent(numProbed, origNumFreeVars*2)
+ << "%)"
+
+ << " hyperBin:" << addedBin
+ << " transR-Irred:" << removedIrredBin
+ << " transR-Red:" << removedRedBin
+ << endl;
+
+ cout
+ << "c [probe]"
+ << " BP: " << std::fixed << std::setprecision(1)
+ << (double)(propStats.bogoProps)/1000000.0 << "M"
+ << " HP: " << std::fixed << std::setprecision(1)
+ << (double)(propStats.otfHyperTime)/1000000.0 << "M"
+
+ << solver->conf.print_times(cpu_time, time_out, time_remain)
+ << endl;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/prober.h b/cryptominisat5/cryptominisat-5.6.3/src/prober.h
new file mode 100644
index 000000000..e8f1f2946
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/prober.h
@@ -0,0 +1,283 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+
+#ifndef __PROBER_H__
+#define __PROBER_H__
+
+#include <set>
+#include <map>
+#include <vector>
+
+#include "solvertypes.h"
+#include "clause.h"
+
+namespace CMSat {
+
+using std::set;
+using std::map;
+using std::vector;
+
+class Solver;
+
+//#define DEBUG_REMOVE_USELESS_BIN
+
+class Prober {
+ public:
+ explicit Prober(Solver* _solver);
+ bool probe(vector<uint32_t>* probe_order = NULL);
+ int force_stamp = -1; // For testing. 1,2 = DFS (2=irred, 1=red), 0 = BFS, -1 = DONTCARE
+
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ Stats& operator +=(const Stats& other)
+ {
+ //Time
+ cpu_time += other.cpu_time;
+ timeAllocated += other.timeAllocated;
+ numCalls += other.numCalls;
+
+ //Probe stats
+ numFailed += other.numFailed;
+ numProbed += other.numProbed;
+ numLoopIters += other.numLoopIters;
+ numVarProbed += other.numVarProbed;
+ numVisited += other.numVisited;
+ zeroDepthAssigns += other.zeroDepthAssigns;
+
+ //Propagation stats
+ propStats += other.propStats;
+ conflStats += other.conflStats;
+
+ //Binary clause
+ addedBin += other.addedBin;
+ removedIrredBin += other.removedIrredBin;
+ removedRedBin += other.removedRedBin;
+
+ //Compare against
+ origNumFreeVars += other.origNumFreeVars;
+ origNumBins += other.origNumBins;
+
+ //Bothprop
+ bothSameAdded += other.bothSameAdded;
+
+ return *this;
+ }
+
+ void print(const size_t nVars, const bool do_print_times) const
+ {
+ cout << "c -------- PROBE STATS ----------" << endl;
+ print_stats_line("c probe time"
+ , cpu_time
+ , ratio_for_stat(timeAllocated, cpu_time*1000.0*1000.0)
+ , "(Mega BP+HP)/s"
+ );
+
+ print_stats_line("c called"
+ , numCalls
+ , ratio_for_stat(cpu_time, numCalls)
+ , "s/call"
+ );
+
+ int64_t unused_time = ((int64_t)timeAllocated - (int64_t)(propStats.bogoProps + propStats.otfHyperTime));
+ print_stats_line("c unused Mega BP+HP"
+ , (double)unused_time/(1000.0*1000.0)
+ , ratio_for_stat(cpu_time, propStats.bogoProps + propStats.otfHyperTime)*(double)unused_time
+ , "est. secs"
+ );
+
+ print_stats_line("c 0-depth-assigns"
+ , zeroDepthAssigns
+ , stats_line_percent(zeroDepthAssigns, nVars)
+ , "% vars");
+
+ print_stats_line("c bothsame"
+ , bothSameAdded
+ , stats_line_percent(bothSameAdded, numVisited)
+ , "% visited"
+ );
+
+ print_stats_line("c probed"
+ , numProbed
+ , ratio_for_stat(numProbed, cpu_time)
+ , "probe/sec"
+ );
+
+ print_stats_line("c loop iters"
+ , numLoopIters
+ , stats_line_percent(numVarProbed, numLoopIters)
+ , "% var probed"
+ );
+
+ print_stats_line("c failed"
+ , numFailed
+ , stats_line_percent(numFailed, numProbed)
+ , "% of probes"
+ );
+
+ print_stats_line("c visited"
+ , (double)numVisited/(1000.0*1000.0)
+ , "M lits"
+ , stats_line_percent(numVisited, origNumFreeVars*2)
+ , "% of available lits"
+ );
+
+ print_stats_line("c bin add"
+ , addedBin
+ , stats_line_percent(addedBin, origNumBins)
+ , "% of bins"
+ );
+
+ print_stats_line("c irred bin rem"
+ , removedIrredBin
+ , stats_line_percent(removedIrredBin, origNumBins)
+ , "% of bins"
+ );
+
+ print_stats_line("c red bin rem"
+ , removedRedBin
+ , stats_line_percent(removedRedBin, origNumBins)
+ , "% of bins"
+ );
+
+ print_stats_line("c time"
+ , cpu_time
+ , "s");
+
+ conflStats.print(cpu_time, do_print_times);
+ propStats.print(cpu_time);
+ cout << "c -------- PROBE STATS END ----------" << endl;
+ }
+
+ void print_short(const Solver* solver, const bool time_out, const double time_remain) const;
+
+ //Time
+ double cpu_time = 0;
+ uint64_t timeAllocated = 0;
+ uint64_t numCalls = 0;
+
+ //Probe stats
+ uint64_t numFailed = 0;
+ uint64_t numProbed = 0;
+ uint64_t numLoopIters = 0;
+ uint64_t numVarProbed = 0;
+ uint64_t numVisited = 0;
+ uint64_t zeroDepthAssigns = 0;
+
+ //Propagation stats
+ PropStats propStats;
+ ConflStats conflStats;
+
+ //Binary clause
+ uint64_t addedBin = 0;
+ uint64_t removedIrredBin = 0;
+ uint64_t removedRedBin = 0;
+
+ //Compare against
+ uint64_t origNumFreeVars = 0;
+ uint64_t origNumBins = 0;
+
+ //Bothprop
+ uint64_t bothSameAdded = 0;
+ };
+
+ const Stats& get_stats() const;
+ size_t mem_used() const;
+
+ private:
+ //Main
+ vector<uint32_t> vars_to_probe;
+ bool try_this(const Lit lit, const bool first);
+ bool propagate(Lit& failed);
+ vector<char> visitedAlready;
+ Solver* solver; ///<The solver we are updating&working with
+ void checkOTFRatio();
+ uint64_t limit_used() const;
+ void reset_stats_and_state();
+ uint64_t calc_num_props_limit();
+ void clean_clauses_before_probe();
+ uint64_t update_num_props_limit_based_on_prev_perf(uint64_t num_props_limit);
+ void clean_clauses_after_probe();
+ void check_if_must_disable_otf_hyperbin_and_tred(const uint64_t num_props_limit);
+ void check_if_must_disable_cache_update();
+ vector<uint32_t> randomize_possible_choices();
+ void update_and_print_stats(const double myTime, const uint64_t num_props_limit);
+ bool check_timeout_due_to_hyperbin();
+
+ //For bothprop
+ vector<uint32_t> propagatedBitSet;
+ vector<bool> propagated; ///<These lits have been propagated by propagating the lit picked
+ vector<bool> propValue; ///<The value (0 or 1) of the lits propagated set in "propagated"
+ vector<Lit> toEnqueue;
+ vector<Lit> tmp_lits;
+ void clear_up_before_first_set();
+
+ void update_cache(Lit thisLit, Lit lit, size_t numElemsSet);
+ void check_and_set_both_prop(Lit probed_lit, uint32_t var, bool first);
+ void add_rest_of_lits_to_cache(Lit lit);
+
+ //For hyper-bin resolution
+ #ifdef DEBUG_REMOVE_USELESS_BIN
+ void testBinRemoval(const Lit origLit);
+ void fillTestUselessBinRemoval(const Lit lit);
+ vector<uint32_t> origNLBEnqueuedVars;
+ vector<uint32_t> origEnqueuedVars;
+ #endif
+
+ //Multi-level
+ void calcNegPosDist();
+ bool tryMultiLevel(const vector<uint32_t>& vars, uint32_t& enqueued, uint32_t& finished, uint32_t& numFailed);
+ bool tryMultiLevelAll();
+ void fillToTry(vector<uint32_t>& toTry);
+
+ //Used to count extra time, must be cleared at every startup
+ uint64_t extraTime;
+ uint64_t extraTimeCache;
+
+ //Stats
+ Stats runStats;
+ Stats globalStats;
+
+ ///If last time we were successful, do it more
+ double numPropsMultiplier;
+ ///How successful were we last time?
+ uint32_t lastTimeZeroDepthAssings;
+
+ uint64_t single_prop_tout;
+
+};
+
+inline const Prober::Stats& Prober::get_stats() const
+{
+ return globalStats;
+}
+
+} //end namespace;
+
+#endif //__PROBER_H__
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/propby.h b/cryptominisat5/cryptominisat-5.6.3/src/propby.h
new file mode 100644
index 000000000..055d13acc
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/propby.h
@@ -0,0 +1,209 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef PROPBY_H
+#define PROPBY_H
+
+#include "constants.h"
+#include "solvertypes.h"
+#include "clause.h"
+
+//#define DEBUG_PROPAGATEFROM
+
+#include "cloffset.h"
+
+namespace CMSat {
+
+enum PropByType {null_clause_t = 0, clause_t = 1, binary_t = 2};
+
+class PropBy
+{
+ private:
+ uint32_t red_step:1;
+ uint32_t data1:31;
+ uint32_t type:2;
+ //0: clause, NULL
+ //1: clause, non-null
+ //2: binary
+ //3: tertiary
+ uint32_t data2:30;
+
+ public:
+ PropBy() :
+ red_step(0)
+ , data1(0)
+ , type(null_clause_t)
+ , data2(0)
+ {}
+
+ //Normal clause prop
+ explicit PropBy(const ClOffset offset) :
+ red_step(0)
+ , data1(offset)
+ , type(clause_t)
+ , data2(0)
+ {
+ //No roll-over
+ /*#ifdef DEBUG_PROPAGATEFROM
+ assert(offset == get_offset());
+ #endif*/
+ }
+
+ //Binary prop
+ PropBy(const Lit lit, const bool redStep) :
+ red_step(redStep)
+ , data1(lit.toInt())
+ , type(binary_t)
+ , data2(0)
+ {
+ }
+
+ //For hyper-bin, etc.
+ PropBy(
+ const Lit lit
+ , bool redStep //Step that lead here from ancestor is redundant
+ , bool hyperBin //It's a hyper-binary clause
+ , bool hyperBinNotAdded //It's a hyper-binary clause, but was never added because all the rest was zero-level
+ ) :
+ red_step(redStep)
+ , data1(lit.toInt())
+ , type(binary_t)
+ , data2(0)
+ {
+ //HACK: if we are doing seamless hyper-bin and transitive reduction
+ //then if we are at toplevel, .getAncestor()
+ //must work, and return lit_Undef, but at the same time, .isNULL()
+ //must also work, for conflict generation. So this is a hack to
+ //achieve that. What an awful hack.
+ if (lit == ~lit_Undef)
+ type = null_clause_t;
+
+ data2 = ((uint32_t)hyperBin) << 1
+ | ((uint32_t)hyperBinNotAdded) << 2;
+ }
+
+ bool isRedStep() const
+ {
+ return red_step;
+ }
+
+ bool getHyperbin() const
+ {
+ return data2 & 2U;
+ }
+
+ void setHyperbin(bool toSet)
+ {
+ data2 &= ~2U;
+ data2 |= (uint32_t)toSet << 1;
+ }
+
+ bool getHyperbinNotAdded() const
+ {
+ return data2 & 4U;
+ }
+
+ void setHyperbinNotAdded(bool toSet)
+ {
+ data2 &= ~4U;
+ data2 |= (uint32_t)toSet << 2;
+ }
+
+ Lit getAncestor() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(type == null_clause_t || type == binary_t);
+ #endif
+ return ~Lit::toLit(data1);
+ }
+
+ bool isClause() const
+ {
+ return type == clause_t;
+ }
+
+ PropByType getType() const
+ {
+ return (PropByType)type;
+ }
+
+ Lit lit2() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(type == binary_t);
+ #endif
+ return Lit::toLit(data1);
+ }
+
+ ClOffset get_offset() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(isClause());
+ #endif
+ return data1;
+ }
+
+ bool isNULL() const
+ {
+ return type == null_clause_t;
+ }
+
+ bool operator==(const PropBy other) const
+ {
+ return (type == other.type
+ && red_step == other.red_step
+ && data1 == other.data1
+ && data2 == other.data2
+ );
+ }
+
+ bool operator!=(const PropBy other) const
+ {
+ return !(*this == other);
+ }
+};
+
+inline std::ostream& operator<<(std::ostream& os, const PropBy& pb)
+{
+ switch (pb.getType()) {
+ case binary_t :
+ os << " binary, other lit= " << pb.lit2();
+ break;
+
+ case clause_t :
+ os << " clause, num= " << pb.get_offset();
+ break;
+
+ case null_clause_t :
+ os << " NULL";
+ break;
+
+ default:
+ assert(false);
+ break;
+ }
+ return os;
+}
+
+} //end namespace
+
+#endif //PROPBY_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/propby_backup.h b/cryptominisat5/cryptominisat-5.6.3/src/propby_backup.h
new file mode 100644
index 000000000..3d858a2a7
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/propby_backup.h
@@ -0,0 +1,232 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef PROPBY_H
+#define PROPBY_H
+
+#include "constants.h"
+#include "solvertypes.h"
+#include "clause.h"
+
+//#define DEBUG_PROPAGATEFROM
+
+#include "cloffset.h"
+
+namespace CMSat {
+
+enum PropByType {null_clause_t = 0, clause_t = 1, binary_t = 2, tertiary_t = 3};
+
+class PropBy
+{
+ private:
+ uint32_t data1;
+ uint32_t data2;
+
+ //0: clause, NULL
+ //1: clause, non-null
+ //2: binary
+ //3: tertiary
+ char type;
+
+ char red_step;
+
+ public:
+ PropBy() :
+ red_step(0)
+ , data1(0)
+ , type(null_clause_t)
+ , data2(0)
+ {}
+
+ //Normal clause prop
+ explicit PropBy(const ClOffset offset) :
+ red_step(0)
+ , data1(offset)
+ , type(clause_t)
+ , data2(0)
+ {
+ //No roll-over
+ /*#ifdef DEBUG_PROPAGATEFROM
+ assert(offset == get_offset());
+ #endif*/
+ }
+
+ //Binary prop
+ PropBy(const Lit lit, const bool redStep) :
+ red_step(redStep)
+ , data1(lit.toInt())
+ , type(binary_t)
+ , data2(0)
+ {
+ }
+
+ //For hyper-bin, etc.
+ PropBy(
+ const Lit lit
+ , bool redStep //Step that lead here from ancestor is redundant
+ , bool hyperBin //It's a hyper-binary clause
+ , bool hyperBinNotAdded //It's a hyper-binary clause, but was never added because all the rest was zero-level
+ ) :
+ red_step(redStep)
+ , data1(lit.toInt())
+ , type(binary_t)
+ , data2(0)
+ {
+ //HACK: if we are doing seamless hyper-bin and transitive reduction
+ //then if we are at toplevel, .getAncestor()
+ //must work, and return lit_Undef, but at the same time, .isNULL()
+ //must also work, for conflict generation. So this is a hack to
+ //achieve that. What an awful hack.
+ if (lit == ~lit_Undef)
+ type = null_clause_t;
+
+ data2 = ((uint32_t)hyperBin) << 1
+ | ((uint32_t)hyperBinNotAdded) << 2;
+ }
+
+ //Tertiary prop
+ PropBy(const Lit lit1, const Lit lit2, const bool redStep) :
+ red_step(redStep)
+ , data1(lit1.toInt())
+ , type(tertiary_t)
+ , data2(lit2.toInt())
+ {
+ }
+
+ bool isRedStep() const
+ {
+ return red_step;
+ }
+
+ bool getHyperbin() const
+ {
+ return data2 & 2U;
+ }
+
+ void setHyperbin(bool toSet)
+ {
+ data2 &= ~2U;
+ data2 |= (uint32_t)toSet << 1;
+ }
+
+ bool getHyperbinNotAdded() const
+ {
+ return data2 & 4U;
+ }
+
+ void setHyperbinNotAdded(bool toSet)
+ {
+ data2 &= ~4U;
+ data2 |= (uint32_t)toSet << 2;
+ }
+
+ Lit getAncestor() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(type == null_clause_t || type == binary_t);
+ #endif
+ return ~Lit::toLit(data1);
+ }
+
+ bool isClause() const
+ {
+ return type == clause_t;
+ }
+
+ PropByType getType() const
+ {
+ return (PropByType)type;
+ }
+
+ Lit lit2() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(type == tertiary_t || type == binary_t);
+ #endif
+ return Lit::toLit(data1);
+ }
+
+ Lit lit3() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(type == tertiary_t);
+ #endif
+ return Lit::toLit(data2);
+ }
+
+ ClOffset get_offset() const
+ {
+ #ifdef DEBUG_PROPAGATEFROM
+ assert(isClause());
+ #endif
+ return data1;
+ }
+
+ bool isNULL() const
+ {
+ return type == null_clause_t;
+ }
+
+ bool operator==(const PropBy other) const
+ {
+ return (type == other.type
+ && red_step == other.red_step
+ && data1 == other.data1
+ && data2 == other.data2
+ );
+ }
+
+ bool operator!=(const PropBy other) const
+ {
+ return !(*this == other);
+ }
+};
+
+inline std::ostream& operator<<(std::ostream& os, const PropBy& pb)
+{
+ switch (pb.getType()) {
+ case binary_t :
+ os << " binary, other lit= " << pb.lit2();
+ break;
+
+ case tertiary_t :
+ os << " tri, other 2 lits= " << pb.lit2() << " , "<< pb.lit3();
+ break;
+
+ case clause_t :
+ os << " clause, num= " << pb.get_offset();
+ break;
+
+ case null_clause_t :
+ os << " NULL";
+ break;
+
+ default:
+ assert(false);
+ break;
+ }
+ return os;
+}
+
+} //end namespace
+
+#endif //PROPBY_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h b/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h
new file mode 100644
index 000000000..34aedb5b0
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/propbyforgraph.h
@@ -0,0 +1,151 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvertypes.h"
+#include "clause.h"
+#include "propby.h"
+#include "clauseallocator.h"
+
+#ifndef __PROPBYFORGRAPH_H__
+#define __PROPBYFORGRAPH_H__
+
+namespace CMSat {
+
+class PropByForGraph
+{
+ private:
+ uint16_t type;
+ uint32_t isize;
+ Clause* clause;
+ Lit lits[3];
+
+ public:
+ PropByForGraph(PropBy orig
+ , Lit otherLit
+ , const ClauseAllocator& alloc
+ ) :
+ type(10)
+ , isize(0)
+ , clause(NULL)
+ {
+ if (orig.getType() == binary_t) {
+ lits[0] = otherLit;
+ lits[1] = orig.lit2();
+ type = 1;
+ isize = 2;
+ }
+ if (orig.isClause()) {
+ if (orig.isNULL()) {
+ type = 0;
+ isize = 0;
+ clause = NULL;
+ return;
+ }
+ clause = alloc.ptr(orig.get_offset());
+ isize = clause->size();
+ type = 0;
+ }
+ }
+
+ PropByForGraph() :
+ type(0)
+ , clause(NULL)
+ {}
+
+ PropByForGraph(const PropByForGraph& other) :
+ type(other.type)
+ , isize(other.isize)
+ , clause(other.clause)
+ {
+ memcpy(lits, other.lits, sizeof(Lit)*3);
+ }
+
+ PropByForGraph& operator=(const PropByForGraph& other)
+ {
+ type = other.type,
+ isize = other.isize;
+ clause = other.clause;
+ //delete xorLits;
+ memcpy(lits, other.lits, sizeof(Lit)*3);
+ return *this;
+ }
+
+ uint32_t size() const
+ {
+ return isize;
+ }
+
+ bool isNULL() const
+ {
+ return type == 0 && clause == NULL;
+ }
+
+ bool isClause() const
+ {
+ return type == 0;
+ }
+
+ bool isBin() const
+ {
+ return type == 1;
+ }
+
+ const Clause* getClause() const
+ {
+ return clause;
+ }
+
+ Clause* getClause()
+ {
+ return clause;
+ }
+
+ Lit operator[](const uint32_t i) const
+ {
+ switch (type) {
+ case 0:
+ assert(clause != NULL);
+ return (*clause)[i];
+
+ default :
+ return lits[i];
+ }
+ }
+};
+
+inline std::ostream& operator<<(
+ std::ostream& os
+ , const PropByForGraph& propByFull
+) {
+
+ if (propByFull.isBin()) {
+ os << propByFull[0] << " " << propByFull[1];
+ } else if (propByFull.isClause()) {
+ if (propByFull.isNULL()) os << "null clause";
+ else os << *propByFull.getClause();
+ }
+ return os;
+}
+
+} //end namespace
+
+#endif //__PROPBYFORGRAPH_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp b/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
new file mode 100644
index 000000000..415b61a82
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/propengine.cpp
@@ -0,0 +1,598 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "propengine.h"
+#include <cmath>
+#include <string.h>
+#include <algorithm>
+#include <limits.h>
+#include <vector>
+#include <iomanip>
+#include <algorithm>
+
+#include "solver.h"
+#include "clauseallocator.h"
+#include "clause.h"
+#include "time_mem.h"
+#include "varupdatehelper.h"
+#include "watchalgos.h"
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+//#define DEBUG_ENQUEUE_LEVEL0
+//#define VERBOSE_DEBUG_POLARITIES
+//#define DEBUG_DYNAMIC_RESTART
+
+/**
+@brief Sets a sane default config and allocates handler classes
+*/
+PropEngine::PropEngine(
+ const SolverConf* _conf, std::atomic<bool>* _must_interrupt_inter
+) :
+ CNF(_conf, _must_interrupt_inter)
+ , qhead(0)
+ , order_heap_vsids(VarOrderLt(var_act_vsids))
+ , order_heap_maple(VarOrderLt(var_act_maple))
+{
+}
+
+PropEngine::~PropEngine()
+{
+}
+
+void PropEngine::new_var(const bool bva, uint32_t orig_outer)
+{
+ CNF::new_var(bva, orig_outer);
+ //TODO
+ //trail... update x->whatever
+}
+
+void PropEngine::new_vars(size_t n)
+{
+ CNF::new_vars(n);
+ //TODO
+ //trail... update x->whatever
+}
+
+void PropEngine::save_on_var_memory()
+{
+ CNF::save_on_var_memory();
+}
+
+/**
+ @ *brief Attach normal a clause to the watchlists
+
+ Handles 2, 3 and >3 clause sizes differently and specially
+ */
+
+void PropEngine::attachClause(
+ const Clause& c
+ , const bool checkAttach
+) {
+ const ClOffset offset = cl_alloc.get_offset(&c);
+
+ assert(c.size() > 2);
+ if (checkAttach) {
+ assert(value(c[0]) == l_Undef);
+ assert(value(c[1]) == l_Undef || value(c[1]) == l_False);
+ }
+
+ #ifdef DEBUG_ATTACH
+ for (uint32_t i = 0; i < c.size(); i++) {
+ assert(varData[c[i].var()].removed == Removed::none);
+ }
+ #endif //DEBUG_ATTACH
+
+ const Lit blocked_lit = c[2];
+ watches[c[0]].push(Watched(offset, blocked_lit));
+ watches[c[1]].push(Watched(offset, blocked_lit));
+}
+
+/**
+@brief Detaches a (potentially) modified clause
+
+The first two literals might have chaned through modification, so they are
+passed along as arguments -- they are needed to find the correct place where
+the clause is
+*/
+void PropEngine::detach_modified_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const Clause* address
+) {
+ ClOffset offset = cl_alloc.get_offset(address);
+ removeWCl(watches[lit1], offset);
+ removeWCl(watches[lit2], offset);
+}
+
+/**
+@brief Propagates a binary clause
+
+Need to be somewhat tricky if the clause indicates that current assignement
+is incorrect (i.e. both literals evaluate to FALSE). If conflict if found,
+sets failBinLit
+*/
+template<bool update_bogoprops>
+inline bool PropEngine::prop_bin_cl(
+ const Watched* i
+ , const Lit p
+ , PropBy& confl
+) {
+ const lbool val = value(i->lit2());
+ if (val == l_Undef) {
+ #ifdef STATS_NEEDED
+ if (i->red())
+ propStats.propsBinRed++;
+ else
+ propStats.propsBinIrred++;
+ #endif
+
+ enqueue<update_bogoprops>(i->lit2(), PropBy(~p, i->red()));
+ } else if (val == l_False) {
+ #ifdef STATS_NEEDED
+ if (i->red())
+ lastConflictCausedBy = ConflCausedBy::binred;
+ else
+ lastConflictCausedBy = ConflCausedBy::binirred;
+ #endif
+
+ confl = PropBy(~p, i->red());
+ failBinLit = i->lit2();
+ qhead = trail.size();
+ return false;
+ }
+
+ return true;
+}
+
+template<bool update_bogoprops>
+inline
+bool PropEngine::prop_long_cl_any_order(
+ Watched* i
+ , Watched*& j
+ , const Lit p
+ , PropBy& confl
+) {
+ //Blocked literal is satisfied, so clause is satisfied
+ if (value(i->getBlockedLit()) == l_True) {
+ *j++ = *i;
+ return true;
+ }
+ if (update_bogoprops) {
+ propStats.bogoProps += 4;
+ }
+ const ClOffset offset = i->get_offset();
+ Clause& c = *cl_alloc.ptr(offset);
+
+ #ifdef SLOW_DEBUG
+ assert(!c.getRemoved());
+ assert(!c.freed());
+ #endif
+
+ if (prop_normal_helper(c, offset, j, p) == PROP_NOTHING) {
+ return true;
+ }
+
+ // Did not find watch -- clause is unit under assignment:
+ *j++ = *i;
+ if (value(c[0]) == l_False) {
+ handle_normal_prop_fail(c, offset, confl);
+ return false;
+ } else {
+ #ifdef STATS_NEEDED
+ c.stats.propagations_made++;
+ if (c.red())
+ propStats.propsLongRed++;
+ else
+ propStats.propsLongIrred++;
+ #endif
+
+ enqueue<update_bogoprops>(c[0], PropBy(offset));
+ }
+
+ return true;
+}
+
+PropBy PropEngine::propagate_any_order_fast()
+{
+ PropBy confl;
+
+ #ifdef VERBOSE_DEBUG_PROP
+ cout << "Fast Propagation started" << endl;
+ #endif
+
+ int64_t num_props = 0;
+ while (qhead < trail.size()) {
+ const Lit p = trail[qhead++]; // 'p' is enqueued fact to propagate.
+ watch_subarray ws = watches[~p];
+ Watched* i;
+ Watched* j;
+ Watched* end;
+ num_props++;
+
+ for (i = j = ws.begin(), end = ws.end(); unlikely(i != end);) {
+ //Prop bin clause
+ if (i->isBin()) {
+ assert(j < end);
+ *j++ = *i;
+ const lbool val = value(i->lit2());
+ if (val == l_Undef) {
+ enqueue<false>(i->lit2(), PropBy(~p, i->red()));
+ i++;
+ } else if (val == l_False) {
+ confl = PropBy(~p, i->red());
+ failBinLit = i->lit2();
+ #ifdef STATS_NEEDED
+ if (i->red())
+ lastConflictCausedBy = ConflCausedBy::binred;
+ else
+ lastConflictCausedBy = ConflCausedBy::binirred;
+ #endif
+ i++;
+ while (i < end) {
+ *j++ = *i++;
+ }
+ qhead = trail.size();
+ } else {
+ i++;
+ }
+ continue;
+ }
+
+ //propagate normal clause
+ //assert(i->isClause());
+ Lit blocked = i->getBlockedLit();
+ if (likely(value(blocked) == l_True)) {
+ *j++ = *i++;
+ continue;
+ }
+
+ const ClOffset offset = i->get_offset();
+ Clause& c = *cl_alloc.ptr(offset);
+ Lit false_lit = ~p;
+ if (c[0] == false_lit) {
+ c[0] = c[1], c[1] = false_lit;
+ }
+ assert(c[1] == false_lit);
+ i++;
+
+ Lit first = c[0];
+ Watched w = Watched(offset, first);
+ if (first != blocked && value(first) == l_True) {
+ *j++ = w;
+ continue;
+ }
+
+ // Look for new watch:
+ for (uint32_t k = 2; k < c.size(); k++) {
+ //Literal is either unset or satisfied, attach to other watchlist
+ if (likely(value(c[k]) != l_False)) {
+ c[1] = c[k];
+ c[k] = false_lit;
+ watches[c[1]].push(w);
+ goto nextClause;
+ }
+ }
+
+ // Did not find watch -- clause is unit under assignment:
+ *j++ = w;
+ if (value(c[0]) == l_False) {
+ confl = PropBy(offset);
+ #ifdef STATS_NEEDED
+ if (c.red())
+ lastConflictCausedBy = ConflCausedBy::longred;
+ else
+ lastConflictCausedBy = ConflCausedBy::longirred;
+ #endif
+ while (i < end) {
+ *j++ = *i++;
+ }
+ assert(j <= end);
+ qhead = trail.size();
+ } else {
+ enqueue<false>(c[0], PropBy(offset));
+ }
+
+ nextClause:;
+ }
+ ws.shrink_(i-j);
+ }
+ qhead = trail.size();
+ simpDB_props -= num_props;
+ propStats.propagations += (uint64_t)num_props;
+
+ #ifdef VERBOSE_DEBUG
+ cout << "Propagation (propagate_any_order) ended." << endl;
+ #endif
+
+ return confl;
+}
+
+template<bool update_bogoprops>
+PropBy PropEngine::propagate_any_order()
+{
+ PropBy confl;
+
+ #ifdef VERBOSE_DEBUG_PROP
+ cout << "Fast Propagation started" << endl;
+ #endif
+
+ while (qhead < trail.size() && confl.isNULL()) {
+ const Lit p = trail[qhead]; // 'p' is enqueued fact to propagate.
+ watch_subarray ws = watches[~p];
+ Watched* i = ws.begin();
+ Watched* j = i;
+ Watched* end = ws.end();
+ if (update_bogoprops) {
+ propStats.bogoProps += ws.size()/4 + 1;
+ }
+ propStats.propagations++;
+ for (; i != end; i++) {
+ if (likely(i->isBin())) {
+ *j++ = *i;
+ if (!prop_bin_cl<update_bogoprops>(i, p, confl)) {
+ i++;
+ break;
+ }
+ continue;
+ }
+
+ //propagate normal clause
+ if (!prop_long_cl_any_order<update_bogoprops>(i, j, p, confl)) {
+ i++;
+ break;
+ }
+ continue;
+ }
+ while (i != end) {
+ *j++ = *i++;
+ }
+ ws.shrink_(end-j);
+ qhead++;
+ }
+
+ #ifdef VERBOSE_DEBUG
+ cout << "Propagation (propagate_any_order) ended." << endl;
+ #endif
+
+ return confl;
+}
+template PropBy PropEngine::propagate_any_order<true>();
+template PropBy PropEngine::propagate_any_order<false>();
+
+
+void PropEngine::printWatchList(const Lit lit) const
+{
+ watch_subarray_const ws = watches[lit];
+ for (const Watched *it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ if (it2->isBin()) {
+ cout << "bin: " << lit << " , " << it2->lit2() << " red : " << (it2->red()) << endl;
+ } else if (it2->isClause()) {
+ cout << "cla:" << it2->get_offset() << endl;
+ } else {
+ assert(false);
+ }
+ }
+}
+
+void PropEngine::updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+ , const vector<uint32_t>& interToOuter2
+) {
+ updateArray(varData, interToOuter);
+ updateArray(assigns, interToOuter);
+ assert(decisionLevel() == 0);
+
+ //Trail is NOT correct, only its length is correct
+ for(Lit& lit: trail) {
+ lit = lit_Undef;
+ }
+ updateBySwap(watches, seen, interToOuter2);
+
+ for(watch_subarray w: watches) {
+ if (!w.empty())
+ updateWatch(w, outerToInter);
+ }
+}
+
+inline void PropEngine::updateWatch(
+ watch_subarray ws
+ , const vector<uint32_t>& outerToInter
+) {
+ for(Watched *it = ws.begin(), *end = ws.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (it->isBin()) {
+ it->setLit2(
+ getUpdatedLit(it->lit2(), outerToInter)
+ );
+ continue;
+ }
+
+ assert(it->isClause());
+ const Clause &cl = *cl_alloc.ptr(it->get_offset());
+ Lit blocked_lit = it->getBlockedLit();
+ blocked_lit = getUpdatedLit(it->getBlockedLit(), outerToInter);
+ bool found = false;
+ for(Lit lit: cl) {
+ if (lit == blocked_lit) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ it->setBlockedLit(cl[2]);
+ } else {
+ it->setBlockedLit(blocked_lit);
+ }
+ }
+}
+
+PropBy PropEngine::propagateIrredBin()
+{
+ PropBy confl;
+ while (qhead < trail.size()) {
+ Lit p = trail[qhead++];
+ watch_subarray ws = watches[~p];
+ for(Watched* k = ws.begin(), *end = ws.end(); k != end; k++) {
+
+ //If not binary, or is redundant, skip
+ if (!k->isBin() || k->red())
+ continue;
+
+ //Propagate, if conflict, exit
+ if (!prop_bin_cl(k, p, confl))
+ return confl;
+ }
+ }
+
+ //No conflict, propagation done
+ return PropBy();
+}
+
+void PropEngine::print_trail()
+{
+ for(size_t i = trail_lim[0]; i < trail.size(); i++) {
+ cout
+ << "trail " << i << ":" << trail[i]
+ << " lev: " << varData[trail[i].var()].level
+ << " reason: " << varData[trail[i].var()].reason
+ << endl;
+ }
+}
+
+
+bool PropEngine::propagate_occur()
+{
+ assert(ok);
+
+ while (qhead < trail_size()) {
+ const Lit p = trail[qhead];
+ qhead++;
+ watch_subarray ws = watches[~p];
+
+ //Go through each occur
+ for (const Watched* it = ws.begin(), *end = ws.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (it->isClause()) {
+ if (!propagate_long_clause_occur(it->get_offset()))
+ return false;
+ }
+
+ if (it->isBin()) {
+ if (!propagate_binary_clause_occur(*it))
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+bool PropEngine::propagate_binary_clause_occur(const Watched& ws)
+{
+ const lbool val = value(ws.lit2());
+ if (val == l_False) {
+ return false;
+ }
+
+ if (val == l_Undef) {
+ enqueue(ws.lit2());
+ #ifdef STATS_NEEDED
+ if (ws.red())
+ propStats.propsBinRed++;
+ else
+ propStats.propsBinIrred++;
+ #endif
+ }
+
+ return true;
+}
+
+bool PropEngine::propagate_long_clause_occur(const ClOffset offset)
+{
+ const Clause& cl = *cl_alloc.ptr(offset);
+ assert(!cl.freed() && "Cannot be already removed in occur");
+ if (cl.getRemoved())
+ return true;
+
+ Lit lastUndef = lit_Undef;
+ uint32_t numUndef = 0;
+ bool satisfied = false;
+ for (const Lit lit: cl) {
+ const lbool val = value(lit);
+ if (val == l_True) {
+ satisfied = true;
+ break;
+ }
+ if (val == l_Undef) {
+ numUndef++;
+ if (numUndef > 1) break;
+ lastUndef = lit;
+ }
+ }
+ if (satisfied)
+ return true;
+
+ //Problem is UNSAT
+ if (numUndef == 0) {
+ return false;
+ }
+
+ if (numUndef > 1)
+ return true;
+
+ enqueue(lastUndef);
+ #ifdef STATS_NEEDED
+ if (cl.red())
+ propStats.propsLongRed++;
+ else
+ propStats.propsLongIrred++;
+ #endif
+
+ return true;
+}
+
+void PropEngine::save_state(SimpleOutFile& f) const
+{
+ f.put_vector(trail);
+ f.put_uint32_t(qhead);
+
+ CNF::save_state(f);
+}
+
+void PropEngine::load_state(SimpleInFile& f)
+{
+ f.get_vector(trail);
+ qhead = f.get_uint32_t();
+
+ CNF::load_state(f);
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/propengine.h b/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
new file mode 100644
index 000000000..151fa2083
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/propengine.h
@@ -0,0 +1,475 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __PROPENGINE_H__
+#define __PROPENGINE_H__
+
+#include <cstdio>
+#include <string.h>
+#include <stack>
+#include <set>
+#include <cmath>
+
+//#define ANIMATE3D
+
+#include "constants.h"
+#include "propby.h"
+
+#include "avgcalc.h"
+#include "propby.h"
+#include "heap.h"
+#include "alg.h"
+#include "clause.h"
+#include "boundedqueue.h"
+#include "cnf.h"
+#include "watchalgos.h"
+
+namespace CMSat {
+
+using std::set;
+class Solver;
+class SQLStats;
+
+//#define VERBOSE_DEBUG_FULLPROP
+//#define DEBUG_STAMPING
+//#define VERBOSE_DEBUG
+
+#ifdef VERBOSE_DEBUG
+#define VERBOSE_DEBUG_FULLPROP
+#define ENQUEUE_DEBUG
+#define DEBUG_ENQUEUE_LEVEL0
+#endif
+
+class Solver;
+class ClauseAllocator;
+class Gaussian;
+
+enum PropResult {
+ PROP_FAIL = 0
+ , PROP_NOTHING = 1
+ , PROP_SOMETHING = 2
+ , PROP_TODO = 3
+};
+
+/**
+@brief The propagating and conflict generation class
+
+Handles watchlists, conflict analysis, propagation, variable settings, etc.
+*/
+class PropEngine: public CNF
+{
+public:
+
+ // Constructor/Destructor:
+ //
+ PropEngine(
+ const SolverConf* _conf
+ , std::atomic<bool>* _must_interrupt_inter
+ );
+ ~PropEngine();
+
+ // Read state:
+ //
+ uint32_t nAssigns () const; ///<The current number of assigned literals.
+
+ //Get state
+ uint32_t decisionLevel() const; ///<Returns current decision level
+ size_t getTrailSize() const; //number of variables set at decision level 0
+ size_t trail_size() const {
+ return trail.size();
+ }
+ Lit trail_at(size_t at) const {
+ return trail[at];
+ }
+ bool propagate_occur();
+ PropStats propStats;
+ template<bool update_bogoprops = true>
+ void enqueue(const Lit p, const PropBy from = PropBy());
+ void new_decision_level();
+ vector<double> var_act_vsids;
+ vector<double> var_act_maple;
+
+protected:
+ int64_t simpDB_props = 0;
+ void new_var(const bool bva, const uint32_t orig_outer) override;
+ void new_vars(const size_t n) override;
+ void save_on_var_memory();
+ template<class T> uint32_t calc_glue(const T& ps);
+
+ //For state saving
+ void save_state(SimpleOutFile& f) const;
+ void load_state(SimpleInFile& f);
+
+ //Stats for conflicts
+ ConflCausedBy lastConflictCausedBy;
+
+ // Solver state:
+ //
+ vector<Lit> trail; ///< Assignment stack; stores all assigments made in the order they were made.
+ vector<uint32_t> trail_lim; ///< Separator indices for different decision levels in 'trail'.
+ uint32_t qhead; ///< Head of queue (as index into the trail)
+ Lit failBinLit; ///< Used to store which watches[lit] we were looking through when conflict occured
+
+
+ struct VarOrderLt { ///Order variables according to their activities
+ const vector<double>& activities;
+ bool operator () (const uint32_t x, const uint32_t y) const
+ {
+ return activities[x] > activities[y];
+ }
+
+ explicit VarOrderLt(const vector<double>& _activities) :
+ activities(_activities)
+ {}
+ };
+
+ ///activity-ordered heap of decision variables.
+ ///NOT VALID WHILE SIMPLIFYING
+ Heap<VarOrderLt> order_heap_vsids;
+ Heap<VarOrderLt> order_heap_maple;
+
+ friend class EGaussian;
+
+ template<bool update_bogoprops>
+ PropBy propagate_any_order();
+ PropBy propagate_any_order_fast();
+ PropBy propagate_strict_order();
+ /*template<bool update_bogoprops>
+ bool handle_xor_cl(
+ Watched*& i
+ , Watched*& &j
+ , const Lit p
+ , PropBy& confl
+ );*/
+ PropBy propagateIrredBin(); ///<For debug purposes, to test binary clause removal
+ PropResult prop_normal_helper(
+ Clause& c
+ , ClOffset offset
+ , Watched*& j
+ , const Lit p
+ );
+ PropResult handle_normal_prop_fail(Clause& c, ClOffset offset, PropBy& confl);
+
+ /////////////////
+ // Operations on clauses:
+ /////////////////
+ void attachClause(
+ const Clause& c
+ , const bool checkAttach = true
+ );
+
+ void detach_bin_clause(
+ Lit lit1
+ , Lit lit2
+ , bool red
+ , bool allow_empty_watch = false
+ , bool allow_change_order = false
+ ) {
+ if (!allow_change_order) {
+ if (!(allow_empty_watch && watches[lit1].empty())) {
+ removeWBin(watches, lit1, lit2, red);
+ }
+ if (!(allow_empty_watch && watches[lit2].empty())) {
+ removeWBin(watches, lit2, lit1, red);
+ }
+ } else {
+ if (!(allow_empty_watch && watches[lit1].empty())) {
+ removeWBin_change_order(watches, lit1, lit2, red);
+ }
+ if (!(allow_empty_watch && watches[lit2].empty())) {
+ removeWBin_change_order(watches, lit2, lit1, red);
+ }
+ }
+ }
+ void attach_bin_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const bool red
+ , const bool checkUnassignedFirst = true
+ );
+ void detach_modified_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const Clause* address
+ );
+
+ // Debug & etc:
+ void print_all_clauses();
+ void printWatchList(const Lit lit) const;
+ bool satisfied(const BinaryClause& bin);
+ void print_trail();
+
+ //Var selection, activity, etc.
+ void updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+ , const vector<uint32_t>& interToOuter2
+ );
+ void updateWatch(watch_subarray ws, const vector<uint32_t>& outerToInter);
+
+ size_t mem_used() const
+ {
+ size_t mem = 0;
+ mem += CNF::mem_used();
+ mem += trail.capacity()*sizeof(Lit);
+ mem += trail_lim.capacity()*sizeof(uint32_t);
+ mem += toClear.capacity()*sizeof(Lit);
+ return mem;
+ }
+
+private:
+ bool propagate_binary_clause_occur(const Watched& ws);
+ bool propagate_long_clause_occur(const ClOffset offset);
+ template<bool update_bogoprops = true>
+ bool prop_bin_cl(
+ const Watched* i
+ , const Lit p
+ , PropBy& confl
+ ); ///<Propagate 2-long clause
+ template<bool update_bogoprops>
+ bool prop_long_cl_any_order(
+ Watched* i
+ , Watched*& j
+ , const Lit p
+ , PropBy& confl
+ );
+};
+
+
+///////////////////////////////////////
+// Implementation of inline methods:
+
+inline void PropEngine::new_decision_level()
+{
+ trail_lim.push_back(trail.size());
+ #ifdef VERBOSE_DEBUG
+ cout << "New decision level: " << trail_lim.size() << endl;
+ #endif
+}
+
+inline uint32_t PropEngine::decisionLevel() const
+{
+ return trail_lim.size();
+}
+
+inline uint32_t PropEngine::nAssigns() const
+{
+ return trail.size();
+}
+
+inline size_t PropEngine::getTrailSize() const
+{
+ if (decisionLevel() == 0) {
+ return trail.size();
+ } else {
+ return trail_lim[0];
+ }
+}
+
+inline bool PropEngine::satisfied(const BinaryClause& bin)
+{
+ return ((value(bin.getLit1()) == l_True)
+ || (value(bin.getLit2()) == l_True));
+}
+
+template<class T> inline
+uint32_t PropEngine::calc_glue(const T& ps)
+{
+ MYFLAG++;
+ uint32_t nblevels = 0;
+ for (Lit lit: ps) {
+ int l = varData[lit.var()].level;
+ if (l != 0 && permDiff[l] != MYFLAG) {
+ permDiff[l] = MYFLAG;
+ nblevels++;
+ if (nblevels >= 50) {
+ return nblevels;
+ }
+ }
+ }
+ return nblevels;
+}
+
+inline PropResult PropEngine::prop_normal_helper(
+ Clause& c
+ , ClOffset offset
+ , Watched*& j
+ , const Lit p
+) {
+ #ifdef STATS_NEEDED
+ c.stats.clause_looked_at++;
+ #endif
+
+ // Make sure the false literal is data[1]:
+ if (c[0] == ~p) {
+ std::swap(c[0], c[1]);
+ }
+
+ assert(c[1] == ~p);
+
+ // If 0th watch is true, then clause is already satisfied.
+ if (value(c[0]) == l_True) {
+ *j = Watched(offset, c[0]);
+ j++;
+ return PROP_NOTHING;
+ }
+
+ // Look for new watch:
+ for (Lit *k = c.begin() + 2, *end2 = c.end()
+ ; k != end2
+ ; k++
+ ) {
+ //Literal is either unset or satisfied, attach to other watchlist
+ if (value(*k) != l_False) {
+ c[1] = *k;
+ *k = ~p;
+ watches[c[1]].push(Watched(offset, c[0]));
+ return PROP_NOTHING;
+ }
+ }
+
+ return PROP_TODO;
+}
+
+
+inline PropResult PropEngine::handle_normal_prop_fail(
+ Clause&
+ #ifdef STATS_NEEDED
+ c
+ #endif
+ , ClOffset offset
+ , PropBy& confl
+) {
+ confl = PropBy(offset);
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Conflict from ";
+ for(size_t i = 0; i < c.size(); i++) {
+ cout << c[i] << " , ";
+ }
+ cout << endl;
+ #endif //VERBOSE_DEBUG_FULLPROP
+
+ //Update stats
+ #ifdef STATS_NEEDED
+ c.stats.conflicts_made++;
+ c.stats.sum_of_branch_depth_conflict += decisionLevel() + 1;
+ if (c.red())
+ lastConflictCausedBy = ConflCausedBy::longred;
+ else
+ lastConflictCausedBy = ConflCausedBy::longirred;
+ #endif
+
+ qhead = trail.size();
+ return PROP_FAIL;
+}
+
+template<bool update_bogoprops>
+void PropEngine::enqueue(const Lit p, const PropBy from)
+{
+ #ifdef DEBUG_ENQUEUE_LEVEL0
+ #ifndef VERBOSE_DEBUG
+ if (decisionLevel() == 0)
+ #endif //VERBOSE_DEBUG
+ cout << "enqueue var " << p.var()+1
+ << " to val " << !p.sign()
+ << " level: " << decisionLevel()
+ << " sublevel: " << trail.size()
+ << " by: " << from << endl;
+ #endif //DEBUG_ENQUEUE_LEVEL0
+
+ #ifdef ENQUEUE_DEBUG
+ assert(trail.size() <= nVarsOuter());
+ assert(varData[p.var()].removed == Removed::none);
+ #endif
+
+ const uint32_t v = p.var();
+ assert(value(v) == l_Undef);
+ if (!watches[~p].empty()) {
+ watches.prefetch((~p).toInt());
+ }
+
+ if (!update_bogoprops && !VSIDS) {
+ varData[v].last_picked = sumConflicts;
+ varData[v].conflicted = 0;
+
+ assert(sumConflicts >= varData[v].cancelled);
+ uint32_t age = sumConflicts - varData[v].cancelled;
+ if (age > 0) {
+ double decay = std::pow(0.95, age);
+ var_act_maple[v] *= decay;
+ if (order_heap_maple.inHeap(v))
+ order_heap_maple.increase(v);
+ }
+ }
+
+ const bool sign = p.sign();
+ assigns[v] = boolToLBool(!sign);
+ varData[v].reason = from;
+ varData[v].level = decisionLevel();
+ if (!update_bogoprops) {
+ varData[v].polarity = !sign;
+ #ifdef STATS_NEEDED
+ if (sign) {
+ propStats.varSetNeg++;
+ } else {
+ propStats.varSetPos++;
+ }
+ #endif
+ }
+ trail.push_back(p);
+
+ if (update_bogoprops) {
+ propStats.bogoProps += 1;
+ }
+
+ #ifdef ANIMATE3D
+ std::cerr << "s " << v << " " << p.sign() << endl;
+ #endif
+}
+
+inline void PropEngine::attach_bin_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const bool red
+ , const bool
+ #ifdef DEBUG_ATTACH
+ checkUnassignedFirst
+ #endif
+) {
+ #ifdef DEBUG_ATTACH
+ assert(lit1.var() != lit2.var());
+ if (checkUnassignedFirst) {
+ assert(value(lit1.var()) == l_Undef);
+ assert(value(lit2) == l_Undef || value(lit2) == l_False);
+ }
+
+ assert(varData[lit1.var()].removed == Removed::none);
+ assert(varData[lit2.var()].removed == Removed::none);
+ #endif //DEBUG_ATTACH
+
+ watches[lit1].push(Watched(lit2, red));
+ watches[lit2].push(Watched(lit1, red));
+}
+
+} //end namespace
+
+#endif //__PROPENGINE_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp b/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
new file mode 100644
index 000000000..0c7b9e404
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/reducedb.cpp
@@ -0,0 +1,323 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "reducedb.h"
+#include "solver.h"
+#include "solverconf.h"
+#include "sqlstats.h"
+#include <functional>
+
+using namespace CMSat;
+
+struct SortRedClsGlue
+{
+ explicit SortRedClsGlue(ClauseAllocator& _cl_alloc) :
+ cl_alloc(_cl_alloc)
+ {}
+ ClauseAllocator& cl_alloc;
+
+ bool operator () (const ClOffset xOff, const ClOffset yOff) const
+ {
+ const Clause* x = cl_alloc.ptr(xOff);
+ const Clause* y = cl_alloc.ptr(yOff);
+ return x->stats.glue < y->stats.glue;
+ }
+};
+
+struct SortRedClsSize
+{
+ explicit SortRedClsSize(ClauseAllocator& _cl_alloc) :
+ cl_alloc(_cl_alloc)
+ {}
+ ClauseAllocator& cl_alloc;
+
+ bool operator () (const ClOffset xOff, const ClOffset yOff) const
+ {
+ const Clause* x = cl_alloc.ptr(xOff);
+ const Clause* y = cl_alloc.ptr(yOff);
+ return x->size() < y->size();
+ }
+};
+
+struct SortRedClsAct
+{
+ explicit SortRedClsAct(ClauseAllocator& _cl_alloc) :
+ cl_alloc(_cl_alloc)
+ {}
+ ClauseAllocator& cl_alloc;
+
+ bool operator () (const ClOffset xOff, const ClOffset yOff) const
+ {
+ const Clause* x = cl_alloc.ptr(xOff);
+ const Clause* y = cl_alloc.ptr(yOff);
+ return x->stats.activity > y->stats.activity;
+ }
+};
+
+ReduceDB::ReduceDB(Solver* _solver) :
+ solver(_solver)
+{
+}
+
+void ReduceDB::sort_red_cls(ClauseClean clean_type)
+{
+ switch (clean_type) {
+ case ClauseClean::glue : {
+ std::sort(solver->longRedCls[2].begin(), solver->longRedCls[2].end(), SortRedClsGlue(solver->cl_alloc));
+ break;
+ }
+
+ case ClauseClean::activity : {
+ std::sort(solver->longRedCls[2].begin(), solver->longRedCls[2].end(), SortRedClsAct(solver->cl_alloc));
+ break;
+ }
+
+ default: {
+ assert(false && "Unknown cleaning type");
+ }
+ }
+}
+
+//TODO maybe we chould count binary learnt clauses as well into the
+//kept no. of clauses as other solvers do
+void ReduceDB::handle_lev2()
+{
+ nbReduceDB_lev1++;
+ solver->dump_memory_stats_to_sql();
+
+ const double myTime = cpuTime();
+ assert(solver->watches.get_smudged_list().empty());
+
+ //lev2 -- clean
+ int64_t num_to_reduce = solver->longRedCls[2].size();
+ for(unsigned keep_type = 0
+ ; keep_type < sizeof(solver->conf.ratio_keep_clauses)/sizeof(double)
+ ; keep_type++
+ ) {
+ const uint64_t keep_num = (double)num_to_reduce*solver->conf.ratio_keep_clauses[keep_type];
+ if (keep_num == 0) {
+ continue;
+ }
+ sort_red_cls(static_cast<ClauseClean>(keep_type));
+ mark_top_N_clauses(keep_num);
+ }
+ assert(delayed_clause_free.empty());
+ cl_marked = 0;
+ cl_ttl = 0;
+ cl_locked_solver = 0;
+ remove_cl_from_lev2();
+
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ for(ClOffset offset: delayed_clause_free) {
+ solver->cl_alloc.clauseFree(offset);
+ }
+ delayed_clause_free.clear();
+
+ #ifdef SLOW_DEBUG
+ solver->check_no_removed_or_freed_cl_in_watch();
+ #endif
+
+ if (solver->conf.verbosity >= 2) {
+ cout << "c [DBclean lev2]"
+ << " marked: " << cl_marked
+ << " ttl:" << cl_ttl
+ << " locked_solver:" << cl_locked_solver
+ << solver->conf.print_times(cpuTime()-myTime)
+ << endl;
+ }
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "dbclean-lev2"
+ , cpuTime()-myTime
+ );
+ }
+ total_time += cpuTime()-myTime;
+
+ last_reducedb_num_conflicts = solver->sumConflicts;
+}
+
+void ReduceDB::dump_sql_cl_data()
+{
+ #ifdef STATS_NEEDED
+ assert(solver->sqlStats);
+
+ for(uint32_t lev = 0; lev < solver->longRedCls.size(); lev++) {
+ auto& cc = solver->longRedCls[lev];
+ for(const auto& offs: cc) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ assert(!cl->getRemoved());
+ assert(!cl->freed());
+ if (cl->stats.dump_number < 5) {
+ const bool locked = solver->clause_locked(*cl, offs);
+ solver->sqlStats->reduceDB(
+ solver
+ , locked
+ , cl
+ );
+ cl->stats.dump_number++;
+ cl->stats.reset_rdb_stats();
+ }
+ }
+ }
+ #endif
+}
+
+void ReduceDB::handle_lev1()
+{
+ nbReduceDB_lev1++;
+ uint32_t moved_w0 = 0;
+ uint32_t used_recently = 0;
+ uint32_t non_recent_use = 0;
+ double myTime = cpuTime();
+
+ size_t j = 0;
+ for(size_t i = 0
+ ; i < solver->longRedCls[1].size()
+ ; i++
+ ) {
+ const ClOffset offset = solver->longRedCls[1][i];
+ Clause* cl = solver->cl_alloc.ptr(offset);
+ if (cl->stats.which_red_array == 0) {
+ solver->longRedCls[0].push_back(offset);
+ moved_w0++;
+ } else if (cl->stats.which_red_array == 2) {
+ assert(false && "we should never move up through any other means");
+ } else {
+ if (!solver->clause_locked(*cl, offset)
+ && cl->stats.last_touched + solver->conf.must_touch_lev1_within < solver->sumConflicts
+ ) {
+ solver->longRedCls[2].push_back(offset);
+ cl->stats.which_red_array = 2;
+ cl->stats.activity = 0;
+ solver->bump_cl_act<false>(cl);
+ non_recent_use++;
+ } else {
+ solver->longRedCls[1][j++] = offset;
+ used_recently++;
+ }
+ }
+ }
+ solver->longRedCls[1].resize(j);
+
+ if (solver->conf.verbosity >= 2) {
+ cout << "c [DBclean lev1]"
+ << " used recently: " << used_recently
+ << " not used recently: " << non_recent_use
+ << " moved w0: " << moved_w0
+ << solver->conf.print_times(cpuTime()-myTime)
+ << endl;
+ }
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "dbclean-lev1"
+ , cpuTime()-myTime
+ );
+ }
+ total_time += cpuTime()-myTime;
+}
+
+void ReduceDB::mark_top_N_clauses(const uint64_t keep_num)
+{
+ size_t marked = 0;
+ for(size_t i = 0
+ ; i < solver->longRedCls[2].size() && marked < keep_num
+ ; i++
+ ) {
+ const ClOffset offset = solver->longRedCls[2][i];
+ Clause* cl = solver->cl_alloc.ptr(offset);
+
+ if (cl->used_in_xor()
+ || cl->stats.ttl > 0
+ || solver->clause_locked(*cl, offset)
+ || cl->stats.which_red_array != 2
+ ) {
+ //no need to mark, skip
+ continue;
+ }
+
+ if (!cl->stats.marked_clause) {
+ marked++;
+ cl->stats.marked_clause = true;
+ }
+ }
+}
+
+bool ReduceDB::cl_needs_removal(const Clause* cl, const ClOffset offset) const
+{
+ assert(cl->red());
+ return !cl->used_in_xor()
+ && !cl->stats.marked_clause
+ && cl->stats.ttl == 0
+ && !solver->clause_locked(*cl, offset);
+}
+
+void ReduceDB::remove_cl_from_lev2() {
+ size_t i, j;
+ for (i = j = 0
+ ; i < solver->longRedCls[2].size()
+ ; i++
+ ) {
+ ClOffset offset = solver->longRedCls[2][i];
+ Clause* cl = solver->cl_alloc.ptr(offset);
+ assert(cl->size() > 2);
+
+ //move to another array
+ if (cl->stats.which_red_array < 2) {
+ cl->stats.marked_clause = 0;
+ solver->longRedCls[cl->stats.which_red_array].push_back(offset);
+ continue;
+ }
+ assert(cl->stats.which_red_array == 2);
+
+ //Check if locked, or marked or ttl-ed
+ if (cl->stats.marked_clause) {
+ cl_marked++;
+ } else if (cl->stats.ttl != 0) {
+ cl_ttl++;
+ } else if (solver->clause_locked(*cl, offset)) {
+ cl_locked_solver++;
+ }
+
+ if (!cl_needs_removal(cl, offset)) {
+ if (cl->stats.ttl > 0) {
+ cl->stats.ttl--;
+ }
+ solver->longRedCls[2][j++] = offset;
+ cl->stats.marked_clause = 0;
+ continue;
+ }
+
+ //Stats Update
+ solver->watches.smudge((*cl)[0]);
+ solver->watches.smudge((*cl)[1]);
+ solver->litStats.redLits -= cl->size();
+
+ *solver->drat << del << *cl << fin;
+ cl->setRemoved();
+ delayed_clause_free.push_back(offset);
+ }
+ solver->longRedCls[2].resize(j);
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h b/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
new file mode 100644
index 000000000..ad85d4d20
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/reducedb.h
@@ -0,0 +1,68 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __REDUCEDB_H__
+#define __REDUCEDB_H__
+
+#include "clauseallocator.h"
+#include "clauseusagestats.h"
+
+namespace CMSat {
+
+class Solver;
+
+class ReduceDB
+{
+public:
+ ReduceDB(Solver* solver);
+ double get_total_time() const {
+ return total_time;
+ }
+ void handle_lev1();
+ void handle_lev2();
+ void dump_sql_cl_data();
+ uint64_t nbReduceDB_lev1 = 0;
+ uint64_t nbReduceDB_lev2 = 0;
+
+private:
+ Solver* solver;
+ vector<ClOffset> delayed_clause_free;
+ double total_time = 0.0;
+
+ unsigned cl_marked;
+ unsigned cl_ttl;
+ unsigned cl_locked_solver;
+
+ size_t last_reducedb_num_conflicts = 0;
+ bool red_cl_too_young(const Clause* cl) const;
+ void clear_clauses_stats(vector<ClOffset>& clauseset);
+
+ bool cl_needs_removal(const Clause* cl, const ClOffset offset) const;
+ void remove_cl_from_lev2();
+
+ void sort_red_cls(ClauseClean clean_type);
+ void mark_top_N_clauses(const uint64_t keep_num);
+};
+
+}
+
+#endif //__REDUCEDB_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp b/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
new file mode 100644
index 000000000..5d000bd89
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.cpp
@@ -0,0 +1,230 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include <iostream>
+#include <vector>
+#include <iomanip>
+
+#include "solvertypes.h"
+#include "sccfinder.h"
+#include "varreplacer.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "sqlstats.h"
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+SCCFinder::SCCFinder(Solver* _solver) :
+ globalIndex(0)
+ , solver(_solver)
+{}
+
+bool SCCFinder::performSCC(uint64_t* bogoprops_given)
+{
+ assert(binxors.empty());
+ runStats.clear();
+ runStats.numCalls = 1;
+ depth_warning_issued = false;
+ const double myTime = cpuTime();
+
+ globalIndex = 0;
+ index.clear();
+ index.resize(solver->nVars()*2, std::numeric_limits<uint32_t>::max());
+ lowlink.clear();
+ lowlink.resize(solver->nVars()*2, std::numeric_limits<uint32_t>::max());
+ stackIndicator.clear();
+ stackIndicator.resize(solver->nVars()*2, false);
+ assert(stack.empty());
+
+ depth = 0;
+ for (uint32_t vertex = 0; vertex < solver->nVars()*2; vertex++) {
+ //Start a DFS at each node we haven't visited yet
+ const uint32_t v = vertex>>1;
+ if (solver->value(v) != l_Undef) {
+ continue;
+ }
+ assert(depth == 0);
+ if (index[vertex] == std::numeric_limits<uint32_t>::max()) {
+ tarjan(vertex);
+ depth--;
+ assert(stack.empty());
+ }
+ }
+
+ //Update & print stats
+ runStats.cpu_time = cpuTime() - myTime;
+ runStats.foundXorsNew = binxors.size();
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3)
+ runStats.print();
+ else
+ runStats.print_short(solver);
+ }
+ globalStats += runStats;
+
+ if (bogoprops_given) {
+ *bogoprops_given += runStats.bogoprops;
+ }
+
+ return solver->okay();
+}
+
+void SCCFinder::tarjan(const uint32_t vertex)
+{
+ depth++;
+ if (depth >= (uint32_t)solver->conf.max_scc_depth) {
+ if (solver->conf.verbosity && !depth_warning_issued) {
+ depth_warning_issued = true;
+ cout << "c [scc] WARNING: reached maximum depth of " << solver->conf.max_scc_depth << endl;
+ }
+ return;
+ }
+
+ const Lit vertLit = Lit::toLit(vertex);
+ if (solver->varData[vertLit.var()].removed != Removed::none) {
+ return;
+ }
+
+ runStats.bogoprops += 1;
+ index[vertex] = globalIndex; // Set the depth index for v
+ lowlink[vertex] = globalIndex;
+ globalIndex++;
+ stack.push(vertex); // Push v on the stack
+ stackIndicator[vertex] = true;
+
+ vector<LitExtra>* transCache = NULL;
+ if (solver->conf.doCache
+ && solver->conf.doExtendedSCC
+ && (!(solver->drat->enabled() || solver->conf.simulate_drat) ||
+ solver->conf.otfHyperbin)
+ ) {
+ transCache = &(solver->implCache[~vertLit].lits);
+ __builtin_prefetch(transCache->data());
+ }
+
+ //Go through the watch
+ watch_subarray_const ws = solver->watches[~vertLit];
+ runStats.bogoprops += ws.size()/4;
+ for (const Watched& w: ws) {
+ //Only binary clauses matter
+ if (!w.isBin())
+ continue;
+
+ const Lit lit = w.lit2();
+ if (solver->value(lit) != l_Undef) {
+ continue;
+ }
+ doit(lit, vertex);
+ }
+
+ if (transCache) {
+ runStats.bogoprops += transCache->size()/4;
+ for (const LitExtra& le: *transCache) {
+ Lit lit = le.getLit();
+ if (solver->value(lit) != l_Undef) {
+ continue;
+ }
+ if (lit != ~vertLit) {
+ doit(lit, vertex);
+ }
+ }
+ }
+
+ // Is v the root of an SCC?
+ if (lowlink[vertex] == index[vertex]) {
+ uint32_t vprime;
+ tmp.clear();
+ do {
+ assert(!stack.empty());
+ vprime = stack.top();
+ stack.pop();
+ stackIndicator[vprime] = false;
+ tmp.push_back(vprime);
+ } while (vprime != vertex);
+ if (tmp.size() >= 2) {
+ runStats.bogoprops += 3;
+ add_bin_xor_in_tmp();
+ }
+ }
+}
+
+void SCCFinder::add_bin_xor_in_tmp()
+{
+ for (uint32_t i = 1; i < tmp.size(); i++) {
+ bool rhs = Lit::toLit(tmp[0]).sign()
+ ^ Lit::toLit(tmp[i]).sign();
+
+ BinaryXor binxor(Lit::toLit(tmp[0]).var(), Lit::toLit(tmp[i]).var(), rhs);
+ binxors.insert(binxor);
+
+ //Both are UNDEF, so this is a proper binary XOR
+ if (solver->value(binxor.vars[0]) == l_Undef
+ && solver->value(binxor.vars[1]) == l_Undef
+ ) {
+ runStats.foundXors++;
+ #ifdef VERBOSE_DEBUG
+ cout << "SCC says: "
+ << binxor.vars[0] +1
+ << " XOR "
+ << binxor.vars[1] +1
+ << " = " << binxor.rhs
+ << endl;
+ #endif
+ }
+ }
+}
+
+void SCCFinder::Stats::print_short(Solver* solver) const
+{
+ cout
+ << "c [scc]"
+ << " new: " << foundXorsNew
+ << " BP " << bogoprops/(1000*1000) << "M";
+ if (solver) {
+ cout << solver->conf.print_times(cpu_time);
+ } else {
+ cout << " T: " << std::setprecision(2) << std::fixed << cpu_time;
+ }
+ cout << endl;
+
+ if (solver && solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "scc"
+ , cpu_time
+ );
+ }
+}
+
+size_t SCCFinder::mem_used() const
+{
+ size_t mem = 0;
+ mem += index.capacity()*sizeof(uint32_t);
+ mem += lowlink.capacity()*sizeof(uint32_t);
+ mem += stack.size()*sizeof(uint32_t); //TODO under-estimates
+ mem += stackIndicator.capacity()*sizeof(char);
+ mem += tmp.capacity()*sizeof(uint32_t);
+
+ return mem;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h b/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
new file mode 100644
index 000000000..d99a50a16
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sccfinder.h
@@ -0,0 +1,164 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SCCFINDER_H
+#define SCCFINDER_H
+
+#include "clause.h"
+#include <stack>
+#include <set>
+
+namespace CMSat {
+
+class Solver;
+
+class SCCFinder {
+ public:
+ explicit SCCFinder(Solver* _solver);
+ bool performSCC(uint64_t* bogoprops_given = NULL);
+ const std::set<BinaryXor>& get_binxors() const;
+ size_t get_num_binxors_found() const;
+ void clear_binxors();
+
+ struct Stats
+ {
+ void clear()
+ {
+ Stats _tmp;
+ *this = _tmp;
+ }
+
+ uint64_t numCalls = 0;
+ double cpu_time = 0.0;
+ uint64_t foundXors = 0;
+ uint64_t foundXorsNew = 0;
+ uint64_t bogoprops = 0;
+
+ Stats& operator+=(const Stats& other)
+ {
+ numCalls += other.numCalls;
+ cpu_time += other.cpu_time;
+ foundXors += other.foundXors;
+ foundXorsNew += other.foundXorsNew;
+ bogoprops += other.bogoprops;
+
+ return *this;
+ }
+
+ void print() const
+ {
+ cout << "c ----- SCC STATS --------" << endl;
+ print_stats_line("c time"
+ , cpu_time
+ , float_div(cpu_time, numCalls)
+ , "per call"
+ );
+
+ print_stats_line("c called"
+ , numCalls
+ , float_div(foundXorsNew, numCalls)
+ , "new found per call"
+ );
+
+ print_stats_line("c found"
+ , foundXorsNew
+ , stats_line_percent(foundXorsNew, foundXors)
+ , "% of all found"
+ );
+
+ print_stats_line("c bogoprops"
+ , bogoprops
+ , "% of all found"
+ );
+
+ cout << "c ----- SCC STATS END --------" << endl;
+ }
+
+ void print_short(Solver* solver) const;
+ };
+
+ const Stats& get_stats() const;
+ size_t mem_used() const;
+ bool depth_warning_triggered() const;
+
+ private:
+ void tarjan(const uint32_t vertex);
+ bool depth_warning_issued;
+ void doit(const Lit lit, const uint32_t vertex);
+ void add_bin_xor_in_tmp();
+
+ //temporaries
+ uint32_t globalIndex;
+ vector<uint32_t> index;
+ vector<uint32_t> lowlink;
+ std::stack<uint32_t, vector<uint32_t> > stack;
+ vector<char> stackIndicator;
+ vector<uint32_t> tmp;
+ uint32_t depth;
+
+ Solver* solver;
+ std::set<BinaryXor> binxors;
+
+ //Stats
+ Stats runStats;
+ Stats globalStats;
+};
+
+inline void SCCFinder::doit(const Lit lit, const uint32_t vertex) {
+ // Was successor v' visited?
+ if (index[lit.toInt()] == std::numeric_limits<uint32_t>::max()) {
+ tarjan(lit.toInt());
+ depth--;
+ lowlink[vertex] = std::min(lowlink[vertex], lowlink[lit.toInt()]);
+ } else if (stackIndicator[lit.toInt()]) {
+ lowlink[vertex] = std::min(lowlink[vertex], lowlink[lit.toInt()]);
+ }
+}
+
+inline bool SCCFinder::depth_warning_triggered() const
+{
+ return depth_warning_issued;
+}
+
+inline const SCCFinder::Stats& SCCFinder::get_stats() const
+{
+ return globalStats;
+}
+
+inline const std::set<BinaryXor>& SCCFinder::get_binxors() const
+{
+ return binxors;
+}
+
+inline size_t SCCFinder::get_num_binxors_found() const
+{
+ return binxors.size();
+}
+
+inline void SCCFinder::clear_binxors()
+{
+ binxors.clear();
+}
+
+} //end namespaceC
+
+#endif //SCCFINDER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp b/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
new file mode 100644
index 000000000..872ec81da
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/searcher.cpp
@@ -0,0 +1,3475 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "searcher.h"
+#include "occsimplifier.h"
+#include "time_mem.h"
+#include "solver.h"
+#include <iomanip>
+#include "varreplacer.h"
+#include "clausecleaner.h"
+#include "propbyforgraph.h"
+#include <algorithm>
+#include <cstddef>
+#include <cmath>
+#include <ratio>
+#include "sqlstats.h"
+#include "datasync.h"
+#include "reducedb.h"
+#include "sqlstats.h"
+#include "watchalgos.h"
+#include "hasher.h"
+#include "solverconf.h"
+#include "distillerlong.h"
+#include "xorfinder.h"
+#include "matrixfinder.h"
+#ifdef USE_GAUSS
+#include "EGaussian.h"
+#endif
+//#define DEBUG_RESOLV
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+//#define VERBOSE_DEBUG_GEN_CONFL_DOT
+
+#ifdef VERBOSE_DEBUG
+#define VERBOSE_DEBUG_GEN_CONFL_DOT
+#endif
+
+/**
+@brief Sets a sane default config and allocates handler classes
+*/
+Searcher::Searcher(const SolverConf *_conf, Solver* _solver, std::atomic<bool>* _must_interrupt_inter) :
+ HyperEngine(
+ _conf
+ , _must_interrupt_inter
+ )
+
+ //variables
+ #ifdef USE_GAUSS
+ , sum_gauss_called (0)
+ , sum_gauss_confl (0)
+ , sum_gauss_prop (0)
+ , sum_gauss_unit_truths (0)
+ , sum_initEnGauss (0)
+ , sum_initUnit (0)
+ , sum_initTwo (0)
+ , sum_Enconflict (0)
+ , sum_Enpropagate(0)
+ , sum_Enunit(0)
+ , sum_EnGauss(0)
+ #endif //USE_GAUSS
+ , solver(_solver)
+ , cla_inc(1)
+{
+ var_decay_vsids = conf.var_decay_vsids_start;
+ step_size = solver->conf.orig_step_size;
+
+ var_inc_vsids = conf.var_inc_vsids_start;
+ more_red_minim_limit_binary_actual = conf.more_red_minim_limit_binary;
+ more_red_minim_limit_cache_actual = conf.more_red_minim_limit_cache;
+ mtrand.seed(conf.origSeed);
+ hist.setSize(conf.shortTermHistorySize, conf.blocking_restart_trail_hist_length);
+ cur_max_temp_red_lev2_cls = conf.max_temp_lev2_learnt_clauses;
+}
+
+Searcher::~Searcher()
+{
+ #ifdef USE_GAUSS
+ clearEnGaussMatrixes();
+ #endif
+}
+
+void Searcher::new_var(const bool bva, const uint32_t orig_outer)
+{
+ PropEngine::new_var(bva, orig_outer);
+
+ var_act_vsids.push_back(0);
+ var_act_maple.push_back(0);
+ insert_var_order_all((int)nVars()-1);
+}
+
+void Searcher::new_vars(size_t n)
+{
+ PropEngine::new_vars(n);
+
+ var_act_vsids.insert(var_act_vsids.end(), n, 0);
+ var_act_maple.insert(var_act_maple.end(), n, 0);
+ for(int i = n-1; i >= 0; i--) {
+ insert_var_order_all((int)nVars()-i-1);
+ }
+}
+
+void Searcher::save_on_var_memory()
+{
+ PropEngine::save_on_var_memory();
+
+ var_act_vsids.resize(nVars());
+ var_act_maple.resize(nVars());
+
+ var_act_vsids.shrink_to_fit();
+ var_act_maple.shrink_to_fit();
+
+}
+
+void Searcher::updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+) {
+ updateArray(var_act_vsids, interToOuter);
+ updateArray(var_act_maple, interToOuter);
+
+ renumber_assumptions(outerToInter);
+}
+
+void Searcher::renumber_assumptions(const vector<uint32_t>& outerToInter)
+{
+ solver->unfill_assumptions_set_from(assumptions);
+ for(AssumptionPair& lit_pair: assumptions) {
+ assert(lit_pair.lit_inter.var() < outerToInter.size());
+ lit_pair.lit_inter = getUpdatedLit(lit_pair.lit_inter, outerToInter);
+ }
+ solver->fill_assumptions_set_from(assumptions);
+}
+
+template<bool update_bogoprops>
+inline void Searcher::add_lit_to_learnt(
+ const Lit lit
+) {
+ #ifdef STATS_NEEDED
+ antec_data.vsids_all_incoming_vars.push(var_act_vsids[lit.var()]/var_inc_vsids);
+ #endif
+ const uint32_t var = lit.var();
+ assert(varData[var].removed == Removed::none);
+
+ //If var is at level 0, don't do anything with it, just skip
+ if (seen[var] || varData[var].level == 0) {
+ return;
+ }
+ seen[var] = 1;
+
+ if (!update_bogoprops) {
+ if (VSIDS) {
+ bump_vsids_var_act<update_bogoprops>(var, 0.5);
+ implied_by_learnts.push_back(var);
+ } else {
+ varData[var].conflicted++;
+ }
+
+ if (conf.doOTFSubsume) {
+ tmp_learnt_clause_size++;
+ seen2[lit.toInt()] = 1;
+ tmp_learnt_clause_abst |= abst_var(lit.var());
+ }
+ }
+
+ if (varData[var].level >= decisionLevel()) {
+ pathC++;
+ } else {
+ learnt_clause.push_back(lit);
+ }
+}
+
+inline void Searcher::recursiveConfClauseMin()
+{
+ uint32_t abstract_level = 0;
+ for (size_t i = 1; i < learnt_clause.size(); i++) {
+ //(maintain an abstraction of levels involved in conflict)
+ abstract_level |= abstractLevel(learnt_clause[i].var());
+ }
+
+ size_t i, j;
+ for (i = j = 1; i < learnt_clause.size(); i++) {
+ if (varData[learnt_clause[i].var()].reason.isNULL()
+ || !litRedundant(learnt_clause[i], abstract_level)
+ ) {
+ learnt_clause[j++] = learnt_clause[i];
+ }
+ }
+ learnt_clause.resize(j);
+}
+
+void Searcher::create_otf_subsuming_implicit_clause(const Clause& cl)
+{
+ OTFClause newCl;
+ newCl.size = 0;
+ for(const Lit
+ *it = cl.begin(), *end = cl.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (seen2[it->toInt()]) {
+ assert(newCl.size < 3);
+ newCl.lits[newCl.size] = *it;
+ newCl.size++;
+ }
+ }
+ otf_subsuming_short_cls.push_back(newCl);
+ if (conf.verbosity >= 6) {
+ cout << "New implicit clause that subsumes a long clause:";
+ for(unsigned i = 0; i < newCl.size; i++) {
+ cout
+ << newCl.lits[i] << " ";
+ }
+ cout << endl;
+ }
+
+ if (drat->enabled() || solver->conf.simulate_drat) {
+ *drat << add
+ #ifdef STATS_NEEDED
+ << solver->clauseID++ << sumConflicts
+ #endif
+ ;
+ for(unsigned i = 0; i < newCl.size; i++) {
+ *drat << newCl.lits[i];
+ }
+ *drat << fin;
+ }
+
+ stats.otfSubsumed++;
+ stats.otfSubsumedImplicit++;
+ stats.otfSubsumedRed += cl.red();
+ stats.otfSubsumedLitsGained += cl.size() - newCl.size;
+}
+
+void Searcher::create_otf_subsuming_long_clause(
+ Clause& cl
+ , const ClOffset offset
+) {
+ (*solver->drat) << deldelay << cl << fin;
+ solver->detachClause(cl, false);
+ stats.otfSubsumed++;
+ stats.otfSubsumedLong++;
+ stats.otfSubsumedRed += cl.red();
+ stats.otfSubsumedLitsGained += cl.size() - tmp_learnt_clause_size;
+
+ size_t i = 0;
+ size_t i2 = 0;
+ for (; i < cl.size(); i++) {
+ if (seen2[cl[i].toInt()]) {
+ cl[i2++] = cl[i];
+ }
+ }
+ cl.shrink(i-i2);
+ assert(cl.size() == tmp_learnt_clause_size);
+ if (conf.verbosity >= 6) {
+ cout
+ << "New smaller clause OTF:" << cl << endl;
+ }
+ #ifdef STATS_NEEDED
+ cl.stats.ID = clauseID;
+ #endif
+ *drat << add << cl
+ #ifdef STATS_NEEDED
+ << sumConflicts
+ #endif
+ << fin << findelay;
+ otf_subsuming_long_cls.push_back(offset);
+
+ #ifdef STATS_NEEDED
+ clauseID++;
+ #endif
+}
+
+void Searcher::check_otf_subsume(const ClOffset offset, Clause& cl)
+{
+ size_t num_lits_from_cl = 0;
+ for (const Lit lit: cl) {
+ if (seen2[lit.toInt()]) {
+ num_lits_from_cl++;
+ }
+ }
+ if (num_lits_from_cl != tmp_learnt_clause_size)
+ return;
+
+ if (num_lits_from_cl <= 2) {
+ create_otf_subsuming_implicit_clause(cl);
+ } else {
+ create_otf_subsuming_long_clause(cl, offset);
+ }
+}
+
+void Searcher::normalClMinim()
+{
+ size_t i,j;
+ for (i = j = 1; i < learnt_clause.size(); i++) {
+ const PropBy& reason = varData[learnt_clause[i].var()].reason;
+ size_t size;
+ Clause* cl = NULL;
+ PropByType type = reason.getType();
+ if (type == null_clause_t) {
+ learnt_clause[j++] = learnt_clause[i];
+ continue;
+ }
+
+ switch (type) {
+ case clause_t:
+ cl = cl_alloc.ptr(reason.get_offset());
+ size = cl->size()-1;
+ break;
+
+ case binary_t:
+ size = 1;
+ break;
+
+ default:
+ release_assert(false);
+ std::exit(-1);
+ }
+
+ for (size_t k = 0; k < size; k++) {
+ Lit p;
+ switch (type) {
+ case clause_t:
+ p = (*cl)[k+1];
+ break;
+
+ case binary_t:
+ p = reason.lit2();
+ break;
+
+ default:
+ release_assert(false);
+ std::exit(-1);
+ }
+
+ if (!seen[p.var()] && varData[p.var()].level > 0) {
+ learnt_clause[j++] = learnt_clause[i];
+ break;
+ }
+ }
+ }
+ learnt_clause.resize(j);
+}
+
+void Searcher::debug_print_resolving_clause(const PropBy confl) const
+{
+#ifndef DEBUG_RESOLV
+ //Avoid unused parameter warning
+ (void) confl;
+#else
+ switch(confl.getType()) {
+ case binary_t: {
+ cout << "resolv bin: " << confl.lit2() << endl;
+ break;
+ }
+
+ case clause_t: {
+ Clause* cl = cl_alloc.ptr(confl.get_offset());
+ cout << "resolv (long): " << *cl << endl;
+ break;
+ }
+
+ case xor_t: {
+ //in the future, we'll have XOR clauses. Not yet.
+ assert(false);
+ exit(-1);
+ break;
+ }
+
+ case null_clause_t: {
+ assert(false);
+ break;
+ }
+ }
+#endif
+}
+
+void Searcher::update_clause_glue_from_analysis(Clause* cl)
+{
+ assert(cl->red());
+ const unsigned new_glue = calc_glue(*cl);
+
+ if (new_glue < cl->stats.glue) {
+ if (cl->stats.glue <= conf.protect_cl_if_improved_glue_below_this_glue_for_one_turn) {
+ cl->stats.ttl = 1;
+ }
+ cl->stats.glue = new_glue;
+
+ //move to lev0 if very low glue
+ if (new_glue <= conf.glue_put_lev0_if_below_or_eq
+ && cl->stats.which_red_array >= 1
+ ) {
+ cl->stats.which_red_array = 0;
+ } else {
+ //move to lev1 if low glue
+ if (new_glue <= conf.glue_put_lev1_if_below_or_eq
+ && solver->conf.glue_put_lev1_if_below_or_eq != 0
+ ) {
+ cl->stats.which_red_array = 1;
+ }
+ }
+ }
+}
+
+template<bool update_bogoprops>
+Clause* Searcher::add_literals_from_confl_to_learnt(
+ const PropBy confl
+ , const Lit p
+) {
+ #ifdef VERBOSE_DEBUG
+ debug_print_resolving_clause(confl);
+ #endif
+
+ Clause* cl = NULL;
+ switch (confl.getType()) {
+ case binary_t : {
+ if (confl.isRedStep()) {
+ #ifdef STATS_NEEDED
+ antec_data.binRed++;
+ #endif
+ stats.resolvs.binRed++;
+ } else {
+ #ifdef STATS_NEEDED
+ antec_data.binIrred++;
+ #endif
+ stats.resolvs.binIrred++;
+ }
+ break;
+ }
+
+ case clause_t : {
+ cl = cl_alloc.ptr(confl.get_offset());
+ if (cl->red()) {
+ stats.resolvs.longRed++;
+ #ifdef STATS_NEEDED
+ antec_data.vsids_of_ants.push(cl->stats.antec_data.vsids_vars.avg());
+ antec_data.longRed++;
+ antec_data.age_long_reds.push(sumConflicts - cl->stats.introduced_at_conflict);
+ antec_data.glue_long_reds.push(cl->stats.glue);
+ #endif
+ } else {
+ #ifdef STATS_NEEDED
+ antec_data.longIrred++;
+ #endif
+ stats.resolvs.longRed++;
+ }
+ #ifdef STATS_NEEDED
+ antec_data.size_longs.push(cl->size());
+ cl->stats.used_for_uip_creation++;
+ #endif
+
+ if (!update_bogoprops
+ && cl->red()
+ && cl->stats.which_red_array != 0
+ ) {
+ if (conf.update_glues_on_analyze) {
+ update_clause_glue_from_analysis(cl);
+ }
+
+ //If STATS_NEEDED then bump acitvity of ALL clauses
+ if (cl->stats.which_red_array == 1) {
+ cl->stats.last_touched = sumConflicts;
+ } else if (cl->stats.which_red_array == 2) {
+ #ifndef STATS_NEEDED
+ bump_cl_act<update_bogoprops>(cl);
+ #endif
+ }
+ #ifdef STATS_NEEDED
+ bump_cl_act<update_bogoprops>(cl);
+ #endif
+ }
+
+ break;
+ }
+
+ case null_clause_t:
+ default:
+ assert(false && "Error in conflict analysis (otherwise should be UIP)");
+ }
+
+ size_t i = 0;
+ bool cont = true;
+ Lit x = lit_Undef;
+ while(cont) {
+ switch (confl.getType()) {
+ case binary_t:
+ if (i == 0) {
+ x = failBinLit;
+ } else {
+ x = confl.lit2();
+ cont = false;
+ }
+ break;
+
+ case clause_t:
+ assert(!cl->getRemoved());
+ x = (*cl)[i];
+ if (i == cl->size()-1) {
+ cont = false;
+ }
+ break;
+ case null_clause_t:
+ assert(false);
+ }
+ if (p == lit_Undef || i > 0) {
+ add_lit_to_learnt<update_bogoprops>(x);
+ }
+ i++;
+ }
+ return cl;
+}
+
+template<bool update_bogoprops>
+inline void Searcher::minimize_learnt_clause()
+{
+ const size_t origSize = learnt_clause.size();
+
+ toClear = learnt_clause;
+ if (conf.doRecursiveMinim) {
+ recursiveConfClauseMin();
+ } else {
+ normalClMinim();
+ }
+ for (const Lit lit: toClear) {
+ if (!update_bogoprops
+ && conf.doOTFSubsume
+ ) {
+ seen2[lit.toInt()] = 0;
+ }
+ seen[lit.var()] = 0;
+ }
+ toClear.clear();
+
+ stats.recMinCl += ((origSize - learnt_clause.size()) > 0);
+ stats.recMinLitRem += origSize - learnt_clause.size();
+}
+
+inline void Searcher::minimize_using_permdiff()
+{
+ if (conf.doMinimRedMore
+ && learnt_clause.size() > 1
+ ) {
+ stats.permDiff_attempt++;
+ stats.moreMinimLitsStart += learnt_clause.size();
+ watch_based_learnt_minim();
+
+ stats.moreMinimLitsEnd += learnt_clause.size();
+ }
+}
+
+inline void Searcher::watch_based_learnt_minim()
+{
+ MYFLAG++;
+ const auto& ws = watches[~learnt_clause[0]];
+ uint32_t nb = 0;
+ for (const Watched& w: ws) {
+ if (w.isBin()) {
+ Lit imp = w.lit2();
+ if (permDiff[imp.var()] == MYFLAG && value(imp) == l_True) {
+ nb++;
+ permDiff[imp.var()] = MYFLAG - 1;
+ }
+ } else {
+ break;
+ }
+ }
+ uint32_t l = learnt_clause.size() - 1;
+ if (nb > 0) {
+ for (uint32_t i = 1; i < learnt_clause.size() - nb; i++) {
+ if (permDiff[learnt_clause[i].var()] != MYFLAG) {
+ Lit p = learnt_clause[l];
+ learnt_clause[l] = learnt_clause[i];
+ learnt_clause[i] = p;
+ l--;
+ i--;
+ }
+ }
+ learnt_clause.resize(learnt_clause.size()-nb);
+ stats.permDiff_success++;
+ stats.permDiff_rem_lits+=nb;
+ }
+}
+
+void Searcher::print_fully_minimized_learnt_clause() const
+{
+ if (conf.verbosity >= 6) {
+ cout << "Final clause: " << learnt_clause << endl;
+ for (uint32_t i = 0; i < learnt_clause.size(); i++) {
+ cout << "lev learnt_clause[" << i << "]:" << varData[learnt_clause[i].var()].level << endl;
+ }
+ }
+}
+
+size_t Searcher::find_backtrack_level_of_learnt()
+{
+ if (learnt_clause.size() <= 1)
+ return 0;
+ else {
+ uint32_t max_i = 1;
+ for (uint32_t i = 2; i < learnt_clause.size(); i++) {
+ if (varData[learnt_clause[i].var()].level > varData[learnt_clause[max_i].var()].level)
+ max_i = i;
+ }
+ std::swap(learnt_clause[max_i], learnt_clause[1]);
+ return varData[learnt_clause[1].var()].level;
+ }
+}
+
+template<bool update_bogoprops>
+inline Clause* Searcher::create_learnt_clause(PropBy confl)
+{
+ pathC = 0;
+ int index = trail.size() - 1;
+ Lit p = lit_Undef;
+ Clause* last_resolved_cl = NULL;
+
+ learnt_clause.push_back(lit_Undef); //make space for ~p
+ do {
+ #ifdef DEBUG_RESOLV
+ cout << "p is: " << p << endl;
+ #endif
+
+ //This is for OTF subsumption ("OTF clause improvement" by Han&Somezi)
+ //~p is essentially popped from the temporary learnt clause
+ if (p != lit_Undef) {
+ #ifdef STATS_NEEDED
+ antec_data.vsids_of_resolving_literals.push(var_act_vsids[p.var()]/var_inc_vsids);
+ #endif
+ if (!update_bogoprops && conf.doOTFSubsume) {
+ tmp_learnt_clause_size--;
+ assert(seen2[(~p).toInt()] == 1);
+ seen2[(~p).toInt()] = 0;
+ }
+
+ //We MUST under-estimate
+ tmp_learnt_clause_abst &= ~(abst_var((~p).var()));
+ }
+
+ last_resolved_cl = add_literals_from_confl_to_learnt<update_bogoprops>(confl, p);
+
+ // Select next implication to look at
+ while (!seen[trail[index--].var()]);
+
+ p = trail[index+1];
+ assert(p != lit_Undef);
+
+ if (!update_bogoprops
+ && pathC > 1
+ && conf.doOTFSubsume
+ //A long clause
+ && last_resolved_cl != NULL
+ //Good enough clause to try to minimize
+ && (!last_resolved_cl->red() || last_resolved_cl->stats.glue <= conf.doOTFSubsumeOnlyAtOrBelowGlue)
+ //Must subsume, so must be smaller
+ && last_resolved_cl->size() > tmp_learnt_clause_size
+ //Must not be a temporary clause
+ && !last_resolved_cl->gauss_temp_cl()
+ && !last_resolved_cl->used_in_xor()
+ ) {
+ last_resolved_cl->recalc_abst_if_needed();
+ //Everything in learnt_cl_2 seems to be also in cl
+ if ((last_resolved_cl->abst & tmp_learnt_clause_abst) == tmp_learnt_clause_abst
+ ) {
+ check_otf_subsume(confl.get_offset(), *last_resolved_cl);
+ }
+ }
+
+ confl = varData[p.var()].reason;
+ assert(varData[p.var()].level > 0);
+
+ //This clears out vars that haven't been added to learnt_clause,
+ //but their 'seen' has been set
+ seen[p.var()] = 0;
+
+ //Okay, one more path done
+ pathC--;
+ } while (pathC > 0);
+ assert(pathC == 0);
+ learnt_clause[0] = ~p;
+
+ if (conf.doOTFSubsume
+ && !update_bogoprops
+ ) {
+ for(const Lit lit: learnt_clause) {
+ seen2[lit.toInt()] = 0;
+ }
+ }
+
+ return last_resolved_cl;
+}
+
+void Searcher::simple_create_learnt_clause(
+ PropBy confl,
+ vector<Lit>& out_learnt,
+ bool True_confl
+) {
+ int until = -1;
+ int mypathC = 0;
+ Lit p = lit_Undef;
+ int index = trail.size() - 1;
+ assert(decisionLevel() == 1);
+
+ do {
+ if (!confl.isNULL()) {
+ if (confl.getType() == binary_t) {
+ if (p == lit_Undef && True_confl == false) {
+ Lit q = failBinLit;
+ if (!seen[q.var()]) {
+ seen[q.var()] = 1;
+ mypathC++;
+ }
+ }
+ Lit q = confl.lit2();
+ if (!seen[q.var()]) {
+ seen[q.var()] = 1;
+ mypathC++;
+ }
+ } else {
+ const Clause& c = *solver->cl_alloc.ptr(confl.get_offset());
+
+ // if True_confl==true, then choose p begin with the 1st index of c
+ for (uint32_t j = (p == lit_Undef && True_confl == false) ? 0 : 1
+ ; j < c.size()
+ ; j++
+ ) {
+ Lit q = c[j];
+ assert(q.var() < seen.size());
+ if (!seen[q.var()]) {
+ seen[q.var()] = 1;
+ mypathC++;
+ }
+ }
+ }
+ } else {
+ assert(confl.isNULL());
+ out_learnt.push_back(~p);
+ }
+ // if not break, while() will come to the index of trail blow 0, and fatal error occur;
+ if (mypathC == 0) {
+ break;
+ }
+ // Select next clause to look at:
+ while (!seen[trail[index--].var()]);
+ // if the reason cr from the 0-level assigned var, we must break avoid move forth further;
+ // but attention that maybe seen[x]=1 and never be clear. However makes no matter;
+ if ((int)trail_lim[0] > index + 1
+ && until == -1
+ ) {
+ until = out_learnt.size();
+ }
+ p = trail[index + 1];
+ confl = varData[p.var()].reason;
+
+ //under normal circumstances this does not happen, but here, it can
+ //reason is undefined for level 0
+ if (varData[p.var()].level == 0) {
+ confl = PropBy();
+ }
+ seen[p.var()] = 0;
+ mypathC--;
+ } while (mypathC >= 0);
+
+ if (until != -1)
+ out_learnt.resize(until);
+}
+
+Clause* Searcher::otf_subsume_last_resolved_clause(Clause* last_resolved_cl)
+{
+ //We can only on-the-fly subsume with clauses that are not 2- or 3-long
+ //furthermore, we cannot subsume a clause that is marked for deletion
+ //due to its high glue value
+ if (!conf.doOTFSubsume
+ //Last was a lont clause
+ || last_resolved_cl == NULL
+ //Final clause will not be implicit
+ || learnt_clause.size() <= 2
+ //Larger or equivalent clauses cannot subsume the clause
+ || learnt_clause.size() >= last_resolved_cl->size()
+ ) {
+ return NULL;
+ }
+
+ //Does it subsume?
+ if (!subset(learnt_clause, *last_resolved_cl))
+ return NULL;
+
+ //on-the-fly subsumed the original clause
+ stats.otfSubsumed++;
+ stats.otfSubsumedLong++;
+ stats.otfSubsumedRed += last_resolved_cl->red();
+ stats.otfSubsumedLitsGained += last_resolved_cl->size() - learnt_clause.size();
+ return last_resolved_cl;
+}
+
+void Searcher::print_debug_resolution_data(const PropBy confl)
+{
+#ifndef DEBUG_RESOLV
+ //Avoid unused parameter warning
+ (void) confl;
+#else
+ cout << "Before resolution, trail is: " << endl;
+ print_trail();
+ cout << "Conflicting clause: " << confl << endl;
+ cout << "Fail bin lit: " << failBinLit << endl;
+#endif
+}
+
+template<bool update_bogoprops>
+Clause* Searcher::analyze_conflict(
+ const PropBy confl
+ , uint32_t& out_btlevel
+ , uint32_t& glue
+) {
+ //Set up environment
+ #ifdef STATS_NEEDED
+ antec_data.clear();
+ #endif
+ learnt_clause.clear();
+ assert(toClear.empty());
+ implied_by_learnts.clear();
+ otf_subsuming_short_cls.clear();
+ otf_subsuming_long_cls.clear();
+ tmp_learnt_clause_size = 0;
+ tmp_learnt_clause_abst = 0;
+ assert(decisionLevel() > 0);
+
+ print_debug_resolution_data(confl);
+ Clause* last_resolved_cl = create_learnt_clause<update_bogoprops>(confl);
+ stats.litsRedNonMin += learnt_clause.size();
+ minimize_learnt_clause<update_bogoprops>();
+ stats.litsRedFinal += learnt_clause.size();
+
+ //further minimisation 1 -- short, small glue clauses
+ glue = std::numeric_limits<uint32_t>::max();
+ if (learnt_clause.size() <= conf.max_size_more_minim) {
+ glue = calc_glue(learnt_clause);
+ if (glue <= conf.max_glue_more_minim) {
+ minimize_using_permdiff();
+ }
+ }
+ if (glue == std::numeric_limits<uint32_t>::max()) {
+ glue = calc_glue(learnt_clause);
+ }
+ print_fully_minimized_learnt_clause();
+
+ if (learnt_clause.size() > conf.max_size_more_minim
+ && glue <= (conf.glue_put_lev0_if_below_or_eq+2)
+ && conf.doMinimRedMoreMore
+ ) {
+ minimise_redundant_more_more(learnt_clause);
+ }
+
+ out_btlevel = find_backtrack_level_of_learnt();
+ if (!update_bogoprops) {
+ if (VSIDS) {
+ bump_var_activities_based_on_implied_by_learnts<update_bogoprops>(out_btlevel);
+ } else {
+ uint32_t bump_by = 2;
+ if (conf.more_maple_bump_high_glue) {
+ if (glue <= 3) {
+ bump_by = 1;
+ }
+ }
+ assert(toClear.empty());
+ const Lit p = learnt_clause[0];
+ seen[p.var()] = true;
+ toClear.push_back(p);
+ for (int i = learnt_clause.size() - 1; i >= 0; i--) {
+ const uint32_t v = learnt_clause[i].var();
+ if (varData[v].reason.isClause()) {
+ ClOffset offs = varData[v].reason.get_offset();
+ Clause* cl = cl_alloc.ptr(offs);
+ for (const Lit l: *cl) {
+ if (!seen[l.var()]) {
+ seen[l.var()] = true;
+ varData[l.var()].conflicted+=bump_by;
+ toClear.push_back(l);
+ }
+ }
+ } else if (varData[v].reason.getType() == binary_t) {
+ Lit l = varData[v].reason.lit2();
+ if (!seen[l.var()]) {
+ seen[l.var()] = true;
+ varData[l.var()].conflicted+=bump_by;
+ toClear.push_back(l);
+ }
+ l = Lit(v, false);
+ if (!seen[l.var()]) {
+ seen[l.var()] = true;
+ varData[l.var()].conflicted+=bump_by;
+ toClear.push_back(l);
+ }
+ }
+ }
+ for (Lit l: toClear) {
+ seen[l.var()] = 0;
+ }
+ toClear.clear();
+ }
+ }
+
+ #ifdef STATS_NEEDED
+ for(const Lit l: learnt_clause) {
+ antec_data.vsids_vars.push(var_act_vsids[l.var()]/var_inc_vsids);
+ }
+ #endif
+
+ return otf_subsume_last_resolved_clause(last_resolved_cl);
+
+}
+
+bool Searcher::litRedundant(const Lit p, uint32_t abstract_levels)
+{
+ #ifdef DEBUG_LITREDUNDANT
+ cout << "c " << __func__ << " called" << endl;
+ #endif
+
+ analyze_stack.clear();
+ analyze_stack.push(p);
+
+ size_t top = toClear.size();
+ while (!analyze_stack.empty()) {
+ #ifdef DEBUG_LITREDUNDANT
+ cout << "At point in litRedundant: " << analyze_stack.top() << endl;
+ #endif
+
+ const PropBy reason = varData[analyze_stack.top().var()].reason;
+ PropByType type = reason.getType();
+ analyze_stack.pop();
+
+ //Must have a reason
+ assert(!reason.isNULL());
+
+ size_t size;
+ Clause* cl = NULL;
+ switch (type) {
+ case clause_t:
+ cl = cl_alloc.ptr(reason.get_offset());
+ size = cl->size()-1;
+ break;
+
+ case binary_t:
+ size = 1;
+ break;
+
+ case null_clause_t:
+ default:
+ release_assert(false);
+ }
+
+ for (size_t i = 0
+ ; i < size
+ ; i++
+ ) {
+ Lit p2;
+ switch (type) {
+ case clause_t:
+ p2 = (*cl)[i+1];
+ break;
+
+ case binary_t:
+ p2 = reason.lit2();
+ break;
+
+ case null_clause_t:
+ default:
+ release_assert(false);
+ }
+ stats.recMinimCost++;
+
+ if (!seen[p2.var()] && varData[p2.var()].level > 0) {
+ if (!varData[p2.var()].reason.isNULL()
+ && (abstractLevel(p2.var()) & abstract_levels) != 0
+ ) {
+ seen[p2.var()] = 1;
+ analyze_stack.push(p2);
+ toClear.push_back(p2);
+ } else {
+ //Return to where we started before function executed
+ for (size_t j = top; j < toClear.size(); j++) {
+ seen[toClear[j].var()] = 0;
+ }
+ toClear.resize(top);
+
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+}
+template Clause* Searcher::analyze_conflict<true>(const PropBy confl
+ , uint32_t& out_btlevel
+ , uint32_t& glue
+);
+template Clause* Searcher::analyze_conflict<false>(const PropBy confl
+ , uint32_t& out_btlevel
+ , uint32_t& glue
+);
+
+bool Searcher::subset(const vector<Lit>& A, const Clause& B)
+{
+ //Set seen
+ for (uint32_t i = 0; i != B.size(); i++)
+ seen[B[i].toInt()] = 1;
+
+ bool ret = true;
+ for (uint32_t i = 0; i != A.size(); i++) {
+ if (!seen[A[i].toInt()]) {
+ ret = false;
+ break;
+ }
+ }
+
+ //Clear seen
+ for (uint32_t i = 0; i != B.size(); i++)
+ seen[B[i].toInt()] = 0;
+
+ return ret;
+}
+
+void Searcher::analyze_final_confl_with_assumptions(const Lit p, vector<Lit>& out_conflict)
+{
+ out_conflict.clear();
+ out_conflict.push_back(p);
+
+ if (decisionLevel() == 0) {
+ return;
+ }
+
+ //It's been set at level 0. The seen[] may not be large enough to do
+ //seen[p.var()] -- we might have mem-saved that
+ if (varData[p.var()].level == 0) {
+ return;
+ }
+
+ seen[p.var()] = 1;
+
+ assert(!trail_lim.empty());
+ for (int64_t i = (int64_t)trail.size() - 1; i >= (int64_t)trail_lim[0]; i--) {
+ const uint32_t x = trail[i].var();
+ if (seen[x]) {
+ const PropBy reason = varData[x].reason;
+ if (reason.isNULL()) {
+ assert(varData[x].level > 0);
+ out_conflict.push_back(~trail[i]);
+ } else {
+ switch(reason.getType()) {
+ case PropByType::clause_t : {
+ const Clause& cl = *cl_alloc.ptr(reason.get_offset());
+ assert(value(cl[0]) == l_True);
+ for(const Lit lit: cl) {
+ if (varData[lit.var()].level > 0) {
+ seen[lit.var()] = 1;
+ }
+ }
+ break;
+ }
+ case PropByType::binary_t: {
+ const Lit lit = reason.lit2();
+ if (varData[lit.var()].level > 0) {
+ seen[lit.var()] = 1;
+ }
+ break;
+ }
+
+ default:
+ assert(false);
+ break;
+ }
+ }
+ seen[x] = 0;
+ }
+ }
+ seen[p.var()] = 0;
+}
+
+void Searcher::update_assump_conflict_to_orig_outside(vector<Lit>& out_conflict)
+{
+ if (assumptions.empty()) {
+ return;
+ }
+
+ std::sort(assumptions.begin(), assumptions.end());
+ std::sort(out_conflict.begin(), out_conflict.end());
+ assert(out_conflict.size() <= assumptions.size());
+ //They now are in the order where we can go through them linearly
+
+ /*cout << "out_conflict: " << out_conflict << endl;
+ cout << "assumptions: ";
+ for(AssumptionPair p: assumptions) {
+ cout << "inter: " << p.lit_inter << " , outer: " << p.lit_orig_outside << " , ";
+ }
+ cout << endl;*/
+
+ uint32_t at_assump = 0;
+ for(size_t i = 0; i < out_conflict.size(); i++) {
+ Lit& lit = out_conflict[i];
+ while(lit != ~assumptions[at_assump].lit_inter) {
+ at_assump++;
+ assert(at_assump < assumptions.size() && "final conflict contains literals that are not from the assumptions!");
+ }
+ assert(lit == ~assumptions[at_assump].lit_inter);
+
+ //Update to correct outside lit
+ lit = ~assumptions[at_assump].lit_orig_outside;
+ }
+}
+
+void Searcher::check_blocking_restart()
+{
+ if (conf.do_blocking_restart
+ && sumConflicts > conf.lower_bound_for_blocking_restart
+ && hist.glueHist.isvalid()
+ && hist.trailDepthHistLonger.isvalid()
+ && decisionLevel() > 0
+ && trail_lim.size() > 0
+ && trail.size() > hist.trailDepthHistLonger.avg()*conf.blocking_restart_multip
+ ) {
+ hist.glueHist.clear();
+ if (!blocked_restart) {
+ stats.blocked_restart_same++;
+ }
+ blocked_restart = true;
+ stats.blocked_restart++;
+ }
+}
+
+template<bool update_bogoprops>
+lbool Searcher::search()
+{
+ assert(ok);
+ #ifdef SLOW_DEBUG
+ check_no_duplicate_lits_anywhere();
+ check_order_heap_sanity();
+ #endif
+ const double myTime = cpuTime();
+
+ //Stats reset & update
+ if (!update_bogoprops) {
+ stats.numRestarts++;
+ stats.clauseID_at_start_inclusive = clauseID;
+ }
+ hist.clear();
+ hist.reset_glue_hist_size(conf.shortTermHistorySize);
+
+ assert(solver->prop_at_head());
+
+ //Loop until restart or finish (SAT/UNSAT)
+ blocked_restart = false;
+ PropBy confl;
+ lbool dec_ret = l_Undef;
+ while (!params.needToStopSearch
+ || !confl.isNULL() //always finish the last conflict
+ ) {
+ #ifdef USE_GAUSS
+ gqhead = qhead;
+ #endif
+ if (update_bogoprops) {
+ confl = propagate<update_bogoprops>();
+ } else {
+ confl = propagate_any_order_fast();
+ }
+
+ if (!confl.isNULL()) {
+ //manipulate startup parameters
+ if (!update_bogoprops) {
+ if (VSIDS &&
+ ((stats.conflStats.numConflicts & 0xfff) == 0xfff) &&
+ var_decay_vsids < conf.var_decay_vsids_max
+ ) {
+ var_decay_vsids += 0.01;
+ }
+ if (!VSIDS && step_size > solver->conf.min_step_size) {
+ step_size -= solver->conf.step_size_dec;
+ }
+ }
+
+ #ifdef STATS_NEEDED
+ stats.conflStats.update(lastConflictCausedBy);
+ #endif
+
+ print_restart_stat();
+ if (!update_bogoprops) {
+ #ifdef STATS_NEEDED
+ hist.trailDepthHist.push(trail.size());
+ #endif
+ hist.trailDepthHistLonger.push(trail.size());
+ }
+ if (!handle_conflict<update_bogoprops>(confl)) {
+ dump_search_loop_stats(myTime);
+ return l_False;
+ }
+ check_need_restart();
+ } else {
+ assert(ok);
+ #ifdef USE_GAUSS
+ if (!update_bogoprops) {
+ llbool ret = Gauss_elimination();
+ if (ret == l_Continue) {
+ continue;
+ //TODO conflict should be goto-d to "confl" label
+ } else if (ret != l_Nothing) {
+ dump_search_loop_stats(myTime);
+ return ret;
+ }
+ }
+ #endif //USE_GAUSS
+
+ if (decisionLevel() == 0
+ && !clean_clauses_if_needed()
+ ) {
+ return l_False;
+ };
+ reduce_db_if_needed();
+ dec_ret = new_decision<update_bogoprops>();
+ if (dec_ret != l_Undef) {
+ dump_search_loop_stats(myTime);
+ return dec_ret;
+ }
+ }
+ }
+ max_confl_this_phase -= (int64_t)params.conflictsDoneThisRestart;
+
+ cancelUntil<true, update_bogoprops>(0);
+ confl = propagate<update_bogoprops>();
+ if (!confl.isNULL()) {
+ ok = false;
+ return l_False;
+ }
+ assert(solver->prop_at_head());
+ if (!solver->datasync->syncData()) {
+ return l_False;
+ }
+ dump_search_loop_stats(myTime);
+
+ return l_Undef;
+}
+
+void Searcher::dump_search_sql(const double myTime)
+{
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "search"
+ , cpuTime()-myTime
+ );
+ }
+}
+
+/**
+@brief Picks a new decision variable to branch on
+
+@returns l_Undef if it should restart instead. l_False if it reached UNSAT
+ (through simplification)
+*/
+template<bool update_bogoprops>
+lbool Searcher::new_decision()
+{
+ Lit next = lit_Undef;
+ while (decisionLevel() < assumptions.size()) {
+ // Perform user provided assumption:
+ Lit p = assumptions[decisionLevel()].lit_inter;
+ assert(varData[p.var()].removed == Removed::none);
+
+ if (value(p) == l_True) {
+ // Dummy decision level:
+ new_decision_level();
+ } else if (value(p) == l_False) {
+ analyze_final_confl_with_assumptions(~p, conflict);
+ return l_False;
+ } else {
+ assert(p.var() < nVars());
+ stats.decisionsAssump++;
+ next = p;
+ break;
+ }
+ }
+
+ if (next == lit_Undef) {
+ // New variable decision:
+ next = pickBranchLit();
+
+ //No decision taken, because it's SAT
+ if (next == lit_Undef)
+ return l_True;
+
+ //Update stats
+ stats.decisions++;
+ }
+
+ // Increase decision level and enqueue 'next'
+ assert(value(next) == l_Undef);
+ new_decision_level();
+ enqueue(next);
+
+ return l_Undef;
+}
+
+double Searcher::luby(double y, int x)
+{
+ int size = 1;
+ int seq;
+ for (seq = 0
+ ; size < x + 1
+ ; seq++
+ ) {
+ size = 2 * size + 1;
+ }
+
+ while (size - 1 != x) {
+ size = (size - 1) >> 1;
+ seq--;
+ x = x % size;
+ }
+
+ return std::pow(y, seq);
+}
+
+void Searcher::check_need_restart()
+{
+ if ((stats.conflStats.numConflicts & 0xff) == 0xff) {
+ //It's expensive to check the time the time
+ if (cpuTime() > conf.maxTime) {
+ params.needToStopSearch = true;
+ }
+
+ if (must_interrupt_asap()) {
+ if (conf.verbosity >= 3)
+ cout << "c must_interrupt_asap() is set, restartig as soon as possible!" << endl;
+ params.needToStopSearch = true;
+ }
+ }
+
+ assert(params.rest_type != Restart::glue_geom);
+ if (params.rest_type == Restart::glue) {
+ check_blocking_restart();
+ if (hist.glueHist.isvalid()
+ && conf.local_glue_multiplier * hist.glueHist.avg() > hist.glueHistLTLimited.avg()
+ ) {
+ params.needToStopSearch = true;
+ }
+ }
+ if ((params.rest_type == Restart::geom ||
+ params.rest_type == Restart::luby ||
+ (conf.broken_glue_restart && conf.restartType == Restart::glue_geom))
+ && (int64_t)params.conflictsDoneThisRestart > max_confl_this_phase
+ ) {
+ params.needToStopSearch = true;
+ }
+
+ //Conflict limit reached?
+ if (params.conflictsDoneThisRestart > params.max_confl_to_do) {
+ if (conf.verbosity >= 3) {
+ cout
+ << "c Over limit of conflicts for this restart"
+ << " -- restarting as soon as possible!" << endl;
+ }
+ params.needToStopSearch = true;
+ }
+}
+
+void Searcher::add_otf_subsume_long_clauses()
+{
+ //Hande long OTF subsumption
+ for(size_t i = 0; i < otf_subsuming_long_cls.size(); i++) {
+ const ClOffset offset = otf_subsuming_long_cls[i];
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+
+ //Find the l_Undef
+ size_t at = std::numeric_limits<size_t>::max();
+ for(size_t i2 = 0; i2 < cl.size(); i2++) {
+ if (value(cl[i2]) == l_Undef) {
+ at = i2;
+ break;
+ }
+ }
+ assert(at != std::numeric_limits<size_t>::max());
+ std::swap(cl[at], cl[0]);
+ assert(value(cl[0]) == l_Undef);
+
+ //Find another l_Undef or an l_True
+ at = 0;
+ for(size_t i2 = 1; i2 < cl.size(); i2++) {
+ if (value(cl[i2]) == l_Undef || value(cl[i2]) == l_True) {
+ at = i2;
+ break;
+ }
+ }
+ assert(cl.size() > 2);
+
+ if (at == 0) {
+ //If none found, we have a propagating clause_t
+ enqueue(cl[0], decisionLevel() == 0 ? PropBy() : PropBy(offset));
+
+ //Drat
+ if (decisionLevel() == 0) {
+ *drat << add << cl[0]
+ #ifdef STATS_NEEDED
+ << cl.stats.ID
+ << sumConflicts
+ #endif
+ << fin;
+ }
+ } else {
+ //We have a non-propagating clause
+
+ std::swap(cl[at], cl[1]);
+ assert(value(cl[1]) == l_Undef || value(cl[1]) == l_True);
+ }
+ solver->attachClause(cl, false);
+ cl.setStrenghtened();
+ }
+ otf_subsuming_long_cls.clear();
+}
+
+void Searcher::add_otf_subsume_implicit_clause()
+{
+ //Handle implicit OTF subsumption
+ for(vector<OTFClause>::iterator
+ it = otf_subsuming_short_cls.begin(), end = otf_subsuming_short_cls.end()
+ ; it != end
+ ; ++it
+ ) {
+ assert(it->size > 1);
+ //Find the l_Undef
+ size_t at = std::numeric_limits<size_t>::max();
+ for(size_t i2 = 0; i2 < it->size; i2++) {
+ if (value(it->lits[i2]) == l_Undef) {
+ at = i2;
+ break;
+ }
+ }
+ assert(at != std::numeric_limits<size_t>::max());
+ std::swap(it->lits[at], it->lits[0]);
+ assert(value(it->lits[0]) == l_Undef);
+
+ //Find another l_Undef or an l_True
+ at = 0;
+ for(size_t i2 = 1; i2 < it->size; i2++) {
+ if (value(it->lits[i2]) == l_Undef
+ || value(it->lits[i2]) == l_True
+ ) {
+ at = i2;
+ break;
+ }
+ }
+
+ if (at == 0) {
+ //If none found, we have a propagation
+ //Calculate reason
+ PropBy by = PropBy();
+
+ //if decision level is non-zero, we have to be more careful
+ if (decisionLevel() != 0) {
+ assert(it->size == 2);
+ by = PropBy(it->lits[1], true);
+ }
+
+ //Enqueue this literal, finally
+ enqueue(
+ it->lits[0]
+ , by
+ );
+
+ //Drat
+ if (decisionLevel() == 0) {
+ *drat << add << it->lits[0]
+ #ifdef STATS_NEEDED
+ << clauseID++
+ << sumConflicts
+ #endif
+ << fin;
+ }
+ } else {
+ //We have a non-propagating clause
+ std::swap(it->lits[at], it->lits[1]);
+ assert(value(it->lits[1]) == l_Undef
+ || value(it->lits[1]) == l_True
+ );
+
+ //Attach new binary/tertiary clause
+ if (it->size == 2) {
+ solver->datasync->signalNewBinClause(it->lits);
+ solver->attach_bin_clause(it->lits[0], it->lits[1], true);
+ }
+ }
+ }
+ otf_subsuming_short_cls.clear();
+}
+
+void Searcher::update_history_stats(size_t backtrack_level, uint32_t glue)
+{
+ assert(decisionLevel() > 0);
+
+ //short-term averages
+ hist.branchDepthHist.push(decisionLevel());
+ #ifdef STATS_NEEDED
+ hist.backtrackLevelHist.push(backtrack_level);
+ hist.branchDepthHistQueue.push(decisionLevel());
+ hist.numResolutionsHist.push(antec_data.num());
+ #endif
+ hist.branchDepthDeltaHist.push(decisionLevel() - backtrack_level);
+ hist.conflSizeHist.push(learnt_clause.size());
+ hist.trailDepthDeltaHist.push(trail.size() - trail_lim[backtrack_level]);
+
+ //long-term averages
+ #ifdef STATS_NEEDED
+ hist.vsidsVarsAvgLT.push(antec_data.vsids_vars.avg());
+ hist.numResolutionsHistLT.push(antec_data.num());
+ hist.decisionLevelHistLT.push(decisionLevel());
+ const uint32_t overlap = antec_data.sum_size()-(antec_data.num()-1)-learnt_clause.size();
+ hist.antec_data_sum_sizeHistLT.push(antec_data.sum_size());
+ hist.overlapHistLT.push(overlap);
+ #endif
+ hist.backtrackLevelHistLT.push(backtrack_level);
+ hist.conflSizeHistLT.push(learnt_clause.size());
+ hist.trailDepthHistLT.push(trail.size());
+ if (params.rest_type == Restart::glue) {
+ hist.glueHistLTLimited.push(std::min<size_t>(glue, 50));
+ }
+ hist.glueHistLTAll.push(glue);
+ hist.glueHist.push(glue);
+}
+
+template<bool update_bogoprops>
+void Searcher::attach_and_enqueue_learnt_clause(Clause* cl, bool enq)
+{
+ switch (learnt_clause.size()) {
+ case 0:
+ assert(false);
+ case 1:
+ //Unitary learnt
+ stats.learntUnits++;
+ if (enq) enqueue(learnt_clause[0]);
+ assert(decisionLevel() == 0);
+
+ #ifdef STATS_NEEDED
+ propStats.propsUnit++;
+ #endif
+
+ break;
+ case 2:
+ //Binary learnt
+ stats.learntBins++;
+ solver->datasync->signalNewBinClause(learnt_clause);
+ solver->attach_bin_clause(learnt_clause[0], learnt_clause[1], true, enq);
+ if (enq) enqueue(learnt_clause[0], PropBy(learnt_clause[1], true));
+
+ #ifdef STATS_NEEDED
+ propStats.propsBinRed++;
+ #endif
+ break;
+
+ default:
+ //Long learnt
+ stats.learntLongs++;
+ solver->attachClause(*cl, enq);
+ if (enq) enqueue(learnt_clause[0], PropBy(cl_alloc.get_offset(cl)));
+ bump_cl_act<update_bogoprops>(cl);
+
+ #ifdef STATS_NEEDED
+ cl->stats.antec_data = antec_data;
+ propStats.propsLongRed++;
+ #endif
+
+ break;
+ }
+}
+
+inline void Searcher::print_learning_debug_info() const
+{
+ #ifndef VERBOSE_DEBUG
+ return;
+ #else
+ cout
+ << "Learning:" << learnt_clause
+ << endl
+ << "reverting var " << learnt_clause[0].var()+1
+ << " to " << !learnt_clause[0].sign()
+ << endl;
+ #endif
+}
+
+void Searcher::print_learnt_clause() const
+{
+ if (conf.verbosity >= 6) {
+ cout
+ << "c learnt clause: "
+ << learnt_clause
+ << endl;
+ }
+}
+
+#ifdef STATS_NEEDED
+void Searcher::dump_sql_clause_data(
+ const uint32_t glue
+ , const uint32_t old_decision_level
+) {
+ vector<double> last_dec_var_act;
+ for(int i = (int)decisionLevel()-1; i >= 0; i--) {
+ uint32_t at = trail_lim[i];
+ if (at < trail.size()) {
+ uint32_t v = trail[at].var();
+ double act_rel = var_act_vsids[v]/var_inc_vsids;
+ last_dec_var_act.push_back(act_rel);
+ if (last_dec_var_act.size() >= 2)
+ break;
+ }
+ }
+
+ while(last_dec_var_act.size() < 2)
+ last_dec_var_act.push_back(0);
+
+ vector<double> first_dec_var_act;
+ for(size_t i = 0; i < decisionLevel(); i++) {
+ uint32_t at = trail_lim[i];
+ if (at < trail.size()) {
+ uint32_t v = trail[at].var();
+ double act_rel = var_act_vsids[v]/var_inc_vsids;
+ first_dec_var_act.push_back(act_rel);
+ if (first_dec_var_act.size() >= 2)
+ break;
+ }
+ }
+
+ while(first_dec_var_act.size() < 2)
+ first_dec_var_act.push_back(0);
+
+ solver->sqlStats->dump_clause_stats(
+ solver
+ , clauseID
+ , glue
+ , decisionLevel()
+ , learnt_clause.size()
+ , antec_data
+ , old_decision_level
+ , trail.size()
+ , params.conflictsDoneThisRestart
+ , restart_type_to_short_string(params.rest_type)
+ , hist
+ , last_dec_var_act[0]
+ , last_dec_var_act[1]
+ , first_dec_var_act[0]
+ , first_dec_var_act[1]
+ );
+}
+#endif
+
+Clause* Searcher::handle_last_confl_otf_subsumption(
+ Clause* cl
+ , const uint32_t glue
+ , const uint32_t
+ #ifdef STATS_NEEDED
+ old_decision_level
+ #endif
+) {
+ if (learnt_clause.size() <= 2 ||
+ cl == NULL ||
+ cl->gauss_temp_cl() ||
+ !conf.doOTFSubsume
+ ) {
+ //Cannot make a non-implicit into an implicit
+ if (learnt_clause.size() <= 2) {
+ *drat << add << learnt_clause
+ #ifdef STATS_NEEDED
+ << clauseID
+ << sumConflicts
+ #endif
+ << fin;
+ cl = NULL;
+ } else {
+ cl = cl_alloc.Clause_new(learnt_clause
+ , sumConflicts
+ #ifdef STATS_NEEDED
+ , clauseID
+ #endif
+ );
+ cl->makeRed(glue);
+ ClOffset offset = cl_alloc.get_offset(cl);
+ unsigned which_arr = 2;
+
+ if (glue <= conf.glue_put_lev0_if_below_or_eq) {
+ which_arr = 0;
+ } else if (
+ glue <= conf.glue_put_lev1_if_below_or_eq
+ && conf.glue_put_lev1_if_below_or_eq != 0
+ ) {
+ which_arr = 1;
+ } else {
+ which_arr = 2;
+ }
+
+ if (which_arr == 0) {
+ stats.red_cl_in_which0++;
+ }
+
+ /*if (conf.guess_cl_effectiveness) {
+ unsigned lower_it = guess_clause_array(cl->stats, decisionLevel());
+ if (lower_it) {
+ stats.guess_different++;
+ cl->stats.ttl = 1;
+ }
+ }*/
+
+ cl->stats.which_red_array = which_arr;
+ solver->longRedCls[cl->stats.which_red_array].push_back(offset);
+ *drat << add << *cl
+ #ifdef STATS_NEEDED
+ << sumConflicts
+ #endif
+ << fin;
+ }
+ } else {
+ //On-the-fly subsumption
+ assert(cl->size() > 2);
+ *(solver->drat) << deldelay << *cl << fin;
+ solver->detachClause(*cl, false);
+
+ //Shrink clause
+ assert(cl->size() > learnt_clause.size());
+ for (uint32_t i = 0; i < learnt_clause.size(); i++) {
+ (*cl)[i] = learnt_clause[i];
+ }
+ cl->resize(learnt_clause.size());
+ assert(cl->size() == learnt_clause.size());
+
+ //Update stats
+ if (cl->red() && cl->stats.glue > glue) {
+ cl->stats.glue = glue;
+ }
+ #ifdef STATS_NEEDED
+ cl->stats.ID = clauseID;
+ #endif
+
+ *(solver->drat) << add << *cl
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+ }
+
+ #ifdef STATS_NEEDED
+ if (solver->sqlStats
+ && drat
+ && conf.dump_individual_restarts_and_clauses
+ ) {
+ if (dump_this_many_cldata_in_stream <= 0) {
+ double myrnd = mtrand.randDblExc();
+ if (myrnd <= conf.dump_individual_cldata_ratio) {
+ dump_this_many_cldata_in_stream = 5;
+ }
+ }
+
+ if (dump_this_many_cldata_in_stream >= 0) {
+ if (cl) {
+ cl->stats.dump_number = 0;
+ }
+ dump_this_many_cldata_in_stream--;
+ dump_sql_clause_data(
+ glue
+ , old_decision_level
+ );
+ }
+ }
+ clauseID++;
+ #endif
+
+ return cl;
+}
+
+template<bool update_bogoprops>
+bool Searcher::handle_conflict(const PropBy confl)
+{
+ stats.conflStats.numConflicts++;
+ sumConflicts++;
+ if (sumConflicts == 100000 && //TODO magic constant
+ longRedCls[0].size() < 100 &&
+ //so that in case of some "standard-minisat behavriour" config
+ //we don't override it
+ conf.glue_put_lev0_if_below_or_eq != 0
+ ) {
+ conf.glue_put_lev0_if_below_or_eq += 2; //TODO magic constant
+ }
+
+ /*if (sumConflicts > 50000) {
+ DISTANCE = 0;
+ }
+ if (VSIDS && DISTANCE) {
+ collectFirstUIP(confl);
+ }*/
+
+ params.conflictsDoneThisRestart++;
+
+ if (decisionLevel() == 0)
+ return false;
+
+ uint32_t backtrack_level;
+ uint32_t glue;
+ Clause* subsumed_cl = analyze_conflict<update_bogoprops>(
+ confl
+ , backtrack_level //return backtrack level here
+ , glue //return glue here
+ );
+ print_learnt_clause();
+
+ //Add decision-based clause in case it's short
+ decision_clause.clear();
+ if (!update_bogoprops
+ && learnt_clause.size() > 50 //TODO MAGIC parameter
+ && decisionLevel() <= 9
+ && decisionLevel() >= 2
+ ) {
+ for(int i = (int)trail_lim.size()-1; i >= 0; i--) {
+ Lit l = ~trail[trail_lim[i]];
+ if (!seen[l.toInt()]) {
+ decision_clause.push_back(l);
+ seen[l.toInt()] = 1;
+ }
+ }
+ for(Lit l: decision_clause) {
+ seen[l.toInt()] = 0;
+ }
+ }
+
+ if (!update_bogoprops) {
+ update_history_stats(backtrack_level, glue);
+ }
+ uint32_t old_decision_level = decisionLevel();
+ cancelUntil<true, update_bogoprops>(backtrack_level);
+
+ add_otf_subsume_long_clauses();
+ add_otf_subsume_implicit_clause();
+ print_learning_debug_info();
+ assert(value(learnt_clause[0]) == l_Undef);
+ glue = std::min<uint32_t>(glue, std::numeric_limits<uint32_t>::max());
+ Clause* cl = handle_last_confl_otf_subsumption(subsumed_cl, glue, old_decision_level);
+ assert(learnt_clause.size() <= 2 || cl != NULL);
+ attach_and_enqueue_learnt_clause<update_bogoprops>(cl);
+
+ //Add decision-based clause
+ if (!update_bogoprops
+ && decision_clause.size() > 0
+ ) {
+ int i = decision_clause.size();
+ while(--i >= 0) {
+ if (value(decision_clause[i]) == l_True
+ || value(decision_clause[i]) == l_Undef
+ ) {
+ break;
+ }
+ }
+ std::swap(decision_clause[0], decision_clause[i]);
+ learnt_clause = decision_clause;
+ cl = handle_last_confl_otf_subsumption(NULL, learnt_clause.size(), decisionLevel());
+ attach_and_enqueue_learnt_clause<update_bogoprops>(cl, false);
+ }
+
+ if (!update_bogoprops) {
+ if (VSIDS) {
+ varDecayActivity();
+ }
+ decayClauseAct<update_bogoprops>();
+ }
+
+ return true;
+}
+template bool Searcher::handle_conflict<true>(const PropBy confl);
+template bool Searcher::handle_conflict<false>(const PropBy confl);
+
+void Searcher::resetStats()
+{
+ startTime = cpuTime();
+
+ //Rest solving stats
+ stats.clear();
+ propStats.clear();
+ #ifdef STATS_NEEDED
+ lastSQLPropStats = propStats;
+ lastSQLGlobalStats = stats;
+ #endif
+
+ lastCleanZeroDepthAssigns = trail.size();
+}
+
+void Searcher::check_calc_features()
+{
+ if (last_feature_calc_confl == 0 || (last_feature_calc_confl + 100000) < sumConflicts) {
+ last_feature_calc_confl = sumConflicts+1;
+ if (nVars() > 2
+ && longIrredCls.size() > 1
+ && (binTri.irredBins + binTri.redBins) > 1
+ ) {
+ solver->last_solve_feature = solver->calculate_features();
+ }
+ }
+}
+
+void Searcher::print_restart_header()
+{
+ //Print restart output header
+ if ((lastRestartPrintHeader == 0 || (lastRestartPrintHeader + 1600000) < sumConflicts)
+ && conf.verbosity
+ ) {
+ cout
+ << "c"
+ << " " << std::setw(6) << "type"
+ << " " << std::setw(5) << "VSIDS"
+ << " " << std::setw(5) << "rest"
+ << " " << std::setw(5) << "conf"
+ << " " << std::setw(5) << "freevar"
+ << " " << std::setw(5) << "IrrL"
+ << " " << std::setw(5) << "IrrB"
+ << " " << std::setw(7) << "l/longC"
+ << " " << std::setw(7) << "l/allC";
+
+ for(size_t i = 0; i < longRedCls.size(); i++) {
+ cout << " " << std::setw(4) << "RedL" << i;
+ }
+
+ cout
+ << " " << std::setw(5) << "RedB"
+ << " " << std::setw(7) << "l/longC"
+ << " " << std::setw(7) << "l/allC"
+ << endl;
+ lastRestartPrintHeader = sumConflicts;
+ }
+}
+
+void Searcher::print_restart_stat_line() const
+{
+ print_restart_stats_base();
+ if (conf.print_full_restart_stat) {
+ solver->print_clause_stats();
+ hist.print();
+ } else {
+ solver->print_clause_stats();
+ }
+
+ cout << endl;
+}
+
+void Searcher::print_restart_stats_base() const
+{
+ cout << "c"
+ << " " << std::setw(6) << restart_type_to_short_string(params.rest_type);
+ cout << " " << std::setw(5) << (int)VSIDS;
+ cout << " " << std::setw(5) << sumRestarts();
+
+ if (sumConflicts > 20000) {
+ cout << " " << std::setw(4) << sumConflicts/1000 << "K";
+ } else {
+ cout << " " << std::setw(5) << sumConflicts;
+ }
+
+ cout << " " << std::setw(7) << solver->get_num_free_vars();
+}
+
+struct MyInvSorter {
+ bool operator()(size_t num, size_t num2)
+ {
+ return num > num2;
+ }
+};
+
+struct MyPolarData
+{
+ MyPolarData (size_t _pos, size_t _neg, size_t _flipped) :
+ pos(_pos)
+ , neg(_neg)
+ , flipped(_flipped)
+ {}
+
+ size_t pos;
+ size_t neg;
+ size_t flipped;
+
+ bool operator<(const MyPolarData& other) const
+ {
+ return (pos + neg) > (other.pos + other.neg);
+ }
+};
+
+#ifdef STATS_NEEDED
+inline void Searcher::dump_restart_sql()
+{
+ //Propagation stats
+ PropStats thisPropStats = propStats - lastSQLPropStats;
+ SearchStats thisStats = stats - lastSQLGlobalStats;
+ thisStats.clauseID_at_start_inclusive = stats.clauseID_at_start_inclusive;
+ thisStats.clauseID_at_end_exclusive = clauseID;
+
+ solver->sqlStats->restart(
+ restart_type_to_short_string(params.rest_type)
+ , thisPropStats
+ , thisStats
+ , solver
+ , this
+ );
+
+ lastSQLPropStats = propStats;
+ lastSQLGlobalStats = stats;
+}
+#endif
+
+void Searcher::print_restart_stat()
+{
+ //Print restart stat
+ if (conf.verbosity
+ && !conf.print_all_restarts
+ && ((lastRestartPrint + conf.print_restart_line_every_n_confl)
+ < sumConflicts)
+ ) {
+ print_restart_stat_line();
+ lastRestartPrint = sumConflicts;
+ }
+}
+
+void Searcher::reset_temp_cl_num()
+{
+ cur_max_temp_red_lev2_cls = conf.max_temp_lev2_learnt_clauses;
+}
+
+void Searcher::reduce_db_if_needed()
+{
+ if (conf.every_lev1_reduce != 0
+ && sumConflicts >= next_lev1_reduce
+ ) {
+ if (solver->sqlStats) {
+ solver->reduceDB->dump_sql_cl_data();
+ }
+ solver->reduceDB->handle_lev1();
+ next_lev1_reduce = sumConflicts + conf.every_lev1_reduce;
+ }
+
+ if (conf.every_lev2_reduce != 0) {
+ if (sumConflicts >= next_lev2_reduce) {
+ solver->reduceDB->handle_lev2();
+ cl_alloc.consolidate(solver);
+ next_lev2_reduce = sumConflicts + conf.every_lev2_reduce;
+ }
+ } else {
+ if (longRedCls[2].size() > cur_max_temp_red_lev2_cls) {
+ solver->reduceDB->handle_lev2();
+ cur_max_temp_red_lev2_cls *= conf.inc_max_temp_lev2_red_cls;
+ cl_alloc.consolidate(solver);
+ }
+ }
+}
+
+bool Searcher::clean_clauses_if_needed()
+{
+ assert(decisionLevel() == 0);
+
+ if (!ok || !propagate_any_order_fast().isNULL()) {
+ return ok = false;
+ }
+
+ const size_t newZeroDepthAss = trail.size() - lastCleanZeroDepthAssigns;
+ if (newZeroDepthAss > 0
+ && simpDB_props < 0
+ && newZeroDepthAss > ((double)nVars()*0.05)
+ ) {
+ if (conf.verbosity >= 2) {
+ cout << "c newZeroDepthAss : " << newZeroDepthAss
+ << " -- "
+ << (double)newZeroDepthAss/(double)nVars()*100.0
+ << " % of active vars"
+ << endl;
+ }
+ lastCleanZeroDepthAssigns = trail.size();
+ solver->clauseCleaner->remove_and_clean_all();
+
+ cl_alloc.consolidate(solver);
+ rebuildOrderHeap(); //TODO only filter is needed!
+ simpDB_props = (litStats.redLits + litStats.irredLits)<<5;
+ }
+
+ return true;
+}
+
+void Searcher::rebuildOrderHeap()
+{
+ vector<uint32_t> vs;
+ for (uint32_t v = 0; v < nVars(); v++) {
+ if (varData[v].removed == Removed::none
+ && value(v) == l_Undef
+ ) {
+ vs.push_back(v);
+ }
+ }
+ order_heap_vsids.build(vs);
+ order_heap_maple.build(vs);
+}
+
+inline void Searcher::dump_search_loop_stats(double myTime)
+{
+ if (solver->sqlStats)
+ check_calc_features();
+
+ print_restart_header();
+ dump_search_sql(myTime);
+ if (conf.verbosity && conf.print_all_restarts)
+ print_restart_stat_line();
+ #ifdef STATS_NEEDED
+ if (sqlStats
+ && conf.dump_individual_restarts_and_clauses
+ ) {
+ dump_restart_sql();
+ }
+ #endif
+}
+
+bool Searcher::must_abort(const lbool status) {
+ if (status != l_Undef) {
+ if (conf.verbosity >= 6) {
+ cout
+ << "c Returned status of search() is non-l_Undef at confl:"
+ << sumConflicts
+ << endl;
+ }
+ return true;
+ }
+
+ if (stats.conflStats.numConflicts >= max_confl_per_search_solve_call) {
+ if (conf.verbosity >= 3) {
+ cout
+ << "c search over max conflicts"
+ << endl;
+ }
+ return true;
+ }
+
+ if (cpuTime() >= conf.maxTime) {
+ if (conf.verbosity >= 3) {
+ cout
+ << "c search over max time"
+ << endl;
+ }
+ return true;
+ }
+
+ if (solver->must_interrupt_asap()) {
+ if (conf.verbosity >= 3) {
+ cout
+ << "c search interrupting as requested"
+ << endl;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+lbool Searcher::solve(
+ const uint64_t _max_confls
+ , const unsigned upper_level_iteration_num
+) {
+ assert(ok);
+ assert(qhead == trail.size());
+ max_confl_per_search_solve_call = _max_confls;
+ num_search_called++;
+ #ifdef SLOW_DEBUG
+ //When asking for a lot of simple soluitons, search() gets called a lot
+ check_no_removed_or_freed_cl_in_watch();
+ #endif
+
+ if (solver->conf.verbosity >= 6) {
+ cout
+ << "c Searcher::solve() called"
+ << endl;
+ }
+
+ resetStats();
+ lbool status = l_Undef;
+ if (VSIDS) {
+ if (conf.restartType == Restart::geom) {
+ max_confl_phase = conf.restart_first;
+ max_confl_this_phase = conf.restart_first;
+ params.rest_type = Restart::geom;
+ }
+
+ if (conf.restartType == Restart::glue_geom) {
+ max_confl_phase = conf.restart_first;
+ max_confl_this_phase = conf.restart_first;
+ params.rest_type = Restart::glue;
+ }
+
+ if (conf.restartType == Restart::luby) {
+ max_confl_this_phase = conf.restart_first;
+ params.rest_type = Restart::luby;
+ }
+
+ if (conf.restartType == Restart::glue) {
+ params.rest_type = Restart::glue;
+ }
+ } else {
+ max_confl_this_phase = conf.restart_first;
+ params.rest_type = Restart::luby;
+ }
+
+ #ifdef USE_GAUSS
+ clearEnGaussMatrixes();
+ {
+ MatrixFinder finder(solver);
+ ok = finder.findMatrixes();
+ if (!ok) {
+ status = l_False;
+ goto end;
+ }
+ }
+ if (!solver->init_all_matrixes()) {
+ return l_False;
+ }
+ #endif //USE_GAUSS
+
+ assert(solver->check_order_heap_sanity());
+ while(stats.conflStats.numConflicts < max_confl_per_search_solve_call
+ && status == l_Undef
+ ) {
+ #ifdef SLOW_DEBUG
+ assert(solver->check_order_heap_sanity());
+ #endif
+
+ assert(watches.get_smudged_list().empty());
+
+ lastRestartConfl = sumConflicts;
+ params.clear();
+ params.max_confl_to_do = max_confl_per_search_solve_call-stats.conflStats.numConflicts;
+ status = search<false>();
+ if (status == l_Undef) {
+ adjust_phases_restarts();
+ }
+
+ if (must_abort(status)) {
+ goto end;
+ }
+
+ if (status == l_Undef &&
+ solver->conf.do_distill_clauses &&
+ sumConflicts > next_distill
+ ) {
+ if (!solver->distill_long_cls->distill(true)) {
+ status = l_False;
+ goto end;
+ }
+ next_distill = std::min<double>(sumConflicts * 0.2 + sumConflicts + 3000,
+ sumConflicts + 50000);
+ }
+ }
+
+ end:
+ finish_up_solve(status);
+
+ return status;
+}
+
+void Searcher::adjust_phases_restarts()
+{
+ //Haven't finished the phase. Keep rolling.
+ if (max_confl_this_phase > 0)
+ return;
+
+ //Note that all of this will be overridden by params.max_confl_to_do
+ if (!VSIDS) {
+ assert(params.rest_type == Restart::luby);
+ max_confl_this_phase = luby(2, luby_loop_num) * (double)conf.restart_first;
+ luby_loop_num++;
+ } else {
+ if (conf.verbosity >= 3) {
+ cout << "c doing VSIDS" << endl;
+ }
+ switch(conf.restartType) {
+ case Restart::never:
+ case Restart::glue:
+ assert(params.rest_type == Restart::glue);
+ //nothing special
+ break;
+ case Restart::geom:
+ assert(params.rest_type == Restart::geom);
+ max_confl_phase *= conf.restart_inc;
+ max_confl_this_phase = max_confl_phase;
+ break;
+
+ case Restart::luby:
+ max_confl_this_phase = luby(conf.restart_inc*1.5, luby_loop_num)
+ * (double)conf.restart_first/2.0;
+
+ luby_loop_num++;
+ break;
+
+ case Restart::glue_geom:
+ if (params.rest_type == Restart::geom) {
+ params.rest_type = Restart::glue;
+ } else {
+ params.rest_type = Restart::geom;
+ }
+ switch (params.rest_type) {
+ case Restart::geom:
+ max_confl_phase = (double)max_confl_phase * conf.restart_inc;
+ max_confl_this_phase = max_confl_phase;
+ break;
+
+ case Restart::glue:
+ max_confl_this_phase = conf.ratio_glue_geom *max_confl_phase;
+ break;
+
+ default:
+ release_assert(false);
+ }
+ if (conf.verbosity >= 3) {
+ cout << "Phase is now "
+ << std::setw(10) << getNameOfRestartType(params.rest_type)
+ << " this phase size: " << max_confl_this_phase
+ << " global phase size: " << max_confl_phase << endl;
+ }
+ break;
+ }
+ }
+}
+
+void Searcher::print_solution_varreplace_status() const
+{
+ for(size_t var = 0; var < nVarsOuter(); var++) {
+ if (varData[var].removed == Removed::replaced
+ || varData[var].removed == Removed::elimed
+ ) {
+ assert(value(var) == l_Undef || varData[var].level == 0);
+ }
+
+ if (conf.verbosity >= 6
+ && varData[var].removed == Removed::replaced
+ && value(var) != l_Undef
+ ) {
+ cout
+ << "var: " << var
+ << " value: " << value(var)
+ << " level:" << varData[var].level
+ << " type: " << removed_type_to_string(varData[var].removed)
+ << endl;
+ }
+ }
+}
+
+void Searcher::print_solution_type(const lbool status) const
+{
+ if (conf.verbosity >= 6) {
+ if (status == l_True) {
+ cout << "Solution from Searcher is SAT" << endl;
+ } else if (status == l_False) {
+ cout << "Solution from Searcher is UNSAT" << endl;
+ cout << "OK is: " << okay() << endl;
+ } else {
+ cout << "Solutions from Searcher is UNKNOWN" << endl;
+ }
+ }
+}
+
+void Searcher::finish_up_solve(const lbool status)
+{
+ print_solution_type(status);
+
+ if (status == l_True) {
+ double myTime = cpuTime();
+ #ifdef SLOW_DEBUG
+ check_order_heap_sanity();
+ #endif
+ model = assigns;
+ full_model = assigns;
+ if (conf.greedy_undef) {
+ assert(false && "Greedy undef is broken");
+ vector<uint32_t> trail_lim_vars;
+ for(size_t i = 0; i < decisionLevel(); i++) {
+ uint32_t at = trail_lim[i];
+
+ //Yes, it can be equal -- when dummy decision levels are added
+ //and a solution is found
+ if (at < trail.size()) {
+ uint32_t v = trail[at].var();
+ trail_lim_vars.push_back(v);
+ //cout << "var at " << i << " of trail_lim : "<< v+1 << endl;
+ }
+ }
+ cancelUntil(0);
+ const uint32_t unset = solver->undefine(trail_lim_vars);
+
+ if (conf.verbosity) {
+ cout << "c [undef] Freed up " << unset << " var(s)"
+ << conf.print_times(cpuTime()-myTime)
+ << endl;
+ }
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ solver
+ , "greedy undefine"
+ , cpuTime()-myTime
+ );
+ }
+ } else {
+ cancelUntil(0);
+ }
+ print_solution_varreplace_status();
+ } else if (status == l_False) {
+ if (conflict.size() == 0) {
+ ok = false;
+ }
+ cancelUntil(0);
+ }
+
+ stats.cpu_time = cpuTime() - startTime;
+ if (conf.verbosity >= 4) {
+ cout << "c Searcher::solve() finished"
+ << " status: " << status
+ << " numConflicts : " << stats.conflStats.numConflicts
+ << " SumConfl: " << sumConflicts
+ << " max_confl_per_search_solve_call:" << max_confl_per_search_solve_call
+ << endl;
+ }
+
+ print_iteration_solving_stats();
+}
+
+void Searcher::print_iteration_solving_stats()
+{
+ if (conf.verbosity >= 3) {
+ cout << "c ------ THIS ITERATION SOLVING STATS -------" << endl;
+ stats.print(propStats.propagations, conf.do_print_times);
+ propStats.print(stats.cpu_time);
+ print_stats_line("c props/decision"
+ , float_div(propStats.propagations, stats.decisions)
+ );
+ print_stats_line("c props/conflict"
+ , float_div(propStats.propagations, stats.conflStats.numConflicts)
+ );
+ cout << "c ------ THIS ITERATION SOLVING STATS -------" << endl;
+ }
+}
+
+Lit Searcher::pickBranchLit()
+{
+ #ifdef VERBOSE_DEBUG
+ cout << "picking decision variable, dec. level: " << decisionLevel() << " ";
+ #endif
+
+ Lit next = lit_Undef;
+
+ // Random decision:
+ Heap<VarOrderLt> &order_heap = VSIDS ? order_heap_vsids : order_heap_maple;
+ if (conf.random_var_freq > 0) {
+ double rand = mtrand.randDblExc();
+ double frq = conf.random_var_freq;
+ if (rand < frq && !order_heap.empty()) {
+ const uint32_t next_var = order_heap.random_element(mtrand);
+
+ if (value(next_var) == l_Undef
+ && solver->varData[next_var].removed == Removed::none
+ ) {
+ stats.decisionsRand++;
+ next = Lit(next_var, !pick_polarity(next_var));
+ }
+ }
+ }
+
+ if (next == lit_Undef) {
+ uint32_t v = var_Undef;
+ while (v == var_Undef || value(v) != l_Undef) {
+ //There is no more to branch on. Satisfying assignment found.
+ if (order_heap.empty()) {
+ return lit_Undef;
+ }
+
+ if (!VSIDS) {
+ uint32_t v2 = order_heap_maple[0];
+ uint32_t age = sumConflicts - varData[v2].cancelled;
+ while (age > 0) {
+ double decay = pow(0.95, age);
+ var_act_maple[v2] *= decay;
+ if (order_heap_maple.inHeap(v2)) {
+ order_heap_maple.increase(v2);
+ }
+
+ varData[v2].cancelled = sumConflicts;
+ v2 = order_heap_maple[0];
+ age = sumConflicts - varData[v2].cancelled;
+ }
+ }
+ v = order_heap.removeMin();
+ }
+ next = Lit(v, !pick_polarity(v));
+ }
+
+ //No vars in heap: solution found
+ #ifdef SLOW_DEBUG
+ if (next != lit_Undef) {
+ assert(solver->varData[next.var()].removed == Removed::none);
+ }
+ #endif
+ return next;
+}
+
+void Searcher::cache_based_morem_minim(vector<Lit>& cl)
+{
+ int64_t limit = more_red_minim_limit_cache_actual;
+ const size_t first_n_lits_of_cl =
+ std::min<size_t>(conf.max_num_lits_more_more_red_min, cl.size());
+ for (size_t at_lit = 0; at_lit < first_n_lits_of_cl; at_lit++) {
+ Lit lit = cl[at_lit];
+
+ //Timeout
+ if (limit < 0)
+ break;
+
+ //Already removed this literal
+ if (seen[lit.toInt()] == 0)
+ continue;
+
+ assert(solver->implCache.size() > lit.toInt());
+ const TransCache& cache1 = solver->implCache[lit];
+ limit -= (int64_t)cache1.lits.size()/2;
+ for (const LitExtra litExtra: cache1.lits) {
+ assert(seen.size() > litExtra.getLit().toInt());
+ if (seen[(~(litExtra.getLit())).toInt()]) {
+ stats.cacheShrinkedClause++;
+ seen[(~(litExtra.getLit())).toInt()] = 0;
+ }
+ }
+ }
+}
+
+void Searcher::binary_based_morem_minim(vector<Lit>& cl)
+{
+ int64_t limit = more_red_minim_limit_binary_actual;
+ const size_t first_n_lits_of_cl =
+ std::min<size_t>(conf.max_num_lits_more_more_red_min, cl.size());
+ for (size_t at_lit = 0; at_lit < first_n_lits_of_cl; at_lit++) {
+ Lit lit = cl[at_lit];
+ //Already removed this literal
+ if (seen[lit.toInt()] == 0)
+ continue;
+
+ //Watchlist-based minimisation
+ watch_subarray_const ws = watches[lit];
+ for (const Watched* i = ws.begin() , *end = ws.end()
+ ; i != end && limit > 0
+ ; i++
+ ) {
+ limit--;
+ if (i->isBin()) {
+ if (seen[(~i->lit2()).toInt()]) {
+ stats.binTriShrinkedClause++;
+ seen[(~i->lit2()).toInt()] = 0;
+ }
+ continue;
+ }
+ break;
+ }
+ }
+}
+
+void Searcher::minimise_redundant_more_more(vector<Lit>& cl)
+{
+ /*if (conf.doStamp&& conf.more_more_with_stamp) {
+ stamp_based_morem_minim(learnt_clause);
+ }*/
+
+ stats.furtherShrinkAttempt++;
+ for (const Lit lit: cl) {
+ seen[lit.toInt()] = 1;
+ }
+
+ if (conf.doCache && conf.more_more_with_cache) {
+ cache_based_morem_minim(cl);
+ }
+
+ binary_based_morem_minim(cl);
+
+ //Finally, remove the literals that have seen[literal] = 0
+ //Here, we can count do stats, etc.
+ bool changedClause = false;
+ vector<Lit>::iterator i = cl.begin();
+ vector<Lit>::iterator j= i;
+
+ //never remove the 0th literal -- TODO this is a bad thing
+ //we should be able to remove this, but I can't figure out how to
+ //reorder the clause then
+ seen[cl[0].toInt()] = 1;
+ for (vector<Lit>::iterator end = cl.end(); i != end; i++) {
+ if (seen[i->toInt()]) {
+ *j++ = *i;
+ } else {
+ changedClause = true;
+ }
+ seen[i->toInt()] = 0;
+ }
+ stats.furtherShrinkedSuccess += changedClause;
+ cl.resize(cl.size() - (i-j));
+}
+
+void Searcher::stamp_based_morem_minim(vector<Lit>& cl)
+{
+ //Stamp-based minimization
+ stats.stampShrinkAttempt++;
+ const size_t origSize = cl.size();
+
+ Lit firstLit = cl[0];
+ std::pair<size_t, size_t> tmp;
+ tmp = stamp.stampBasedLitRem(cl, STAMP_RED);
+ if (tmp.first || tmp.second) {
+ //cout << "Rem RED: " << tmp.first + tmp.second << endl;
+ }
+ tmp = stamp.stampBasedLitRem(cl, STAMP_IRRED);
+ if (tmp.first || tmp.second) {
+ //cout << "Rem IRRED: " << tmp.first + tmp.second << endl;
+ }
+
+ //Handle removal or moving of the first literal
+ size_t at = std::numeric_limits<size_t>::max();
+ for(size_t i = 0; i < cl.size(); i++) {
+ if (cl[i] == firstLit) {
+ at = i;
+ break;
+ }
+ }
+ if (at != std::numeric_limits<size_t>::max()) {
+ //Make original first lit first in the final clause, too
+ std::swap(cl[0], cl[at]);
+ } else {
+ //Re-add first lit
+ cl.push_back(lit_Undef);
+ std::swap(cl[0], cl[cl.size()-1]);
+ cl[0] = firstLit;
+ }
+
+ stats.stampShrinkCl += ((origSize - cl.size()) > 0);
+ stats.stampShrinkLit += origSize - cl.size();
+}
+
+bool Searcher::VarFilter::operator()(uint32_t var) const
+{
+ return (cc->value(var) == l_Undef && solver->varData[var].removed == Removed::none);
+}
+
+uint64_t Searcher::sumRestarts() const
+{
+ return stats.numRestarts + solver->get_stats().numRestarts;
+}
+
+size_t Searcher::hyper_bin_res_all(const bool check_for_set_values)
+{
+ size_t added = 0;
+
+ for(std::set<BinaryClause>::const_iterator
+ it = solver->needToAddBinClause.begin()
+ , end = solver->needToAddBinClause.end()
+ ; it != end
+ ; ++it
+ ) {
+ lbool val1 = value(it->getLit1());
+ lbool val2 = value(it->getLit2());
+
+ if (conf.verbosity >= 6) {
+ cout
+ << "c Attached hyper-bin: "
+ << it->getLit1() << "(val: " << val1 << " )"
+ << ", " << it->getLit2() << "(val: " << val2 << " )"
+ << endl;
+ }
+
+ //If binary is satisfied, skip
+ if (check_for_set_values
+ && (val1 == l_True || val2 == l_True)
+ ) {
+ continue;
+ }
+
+ if (check_for_set_values) {
+ assert(val1 == l_Undef && val2 == l_Undef);
+ }
+
+ solver->attach_bin_clause(it->getLit1(), it->getLit2(), true, false);
+ added++;
+ }
+ solver->needToAddBinClause.clear();
+
+ return added;
+}
+
+#ifdef USE_GAUSS
+llbool Searcher::Gauss_elimination()
+{
+ if (decisionLevel() > solver->conf.gaussconf.decision_until ||
+ gqueuedata.size() == 0
+ ) {
+ return l_Nothing;
+ }
+
+ for(auto& gqd: gqueuedata) {
+ gqd.reset();
+
+ if (gqd.engaus_disable) {
+ //TODO
+ return l_Nothing;
+ }
+
+ if (solver->conf.gaussconf.autodisable &&
+ (gqd.big_gaussnum > 1000 && gqd.big_conflict*2+gqd.big_propagate < (uint32_t)((double)gqd.big_gaussnum*0.01))
+ ) {
+ const double perc = stats_line_percent(gqd.big_conflict*2+gqd.big_propagate, gqd.big_gaussnum);
+ if (solver->conf.verbosity) {
+ cout << "c [matrix] Disabling ALL GJ-elim in this round. "
+ " Usefulness was: " << std::setprecision(2) << std::fixed << perc << "%" << endl;
+ }
+ gqd.engaus_disable = true;
+ }
+ }
+ assert(qhead == trail.size());
+ assert(gqhead <= qhead);
+
+ while (gqhead < qhead) {
+ const Lit p = trail[gqhead++];
+ vec<GaussWatched>& ws = gwatches[p.var()];
+ GaussWatched* i = ws.begin();
+ GaussWatched* j = i;
+ const GaussWatched* end = ws.end();
+
+ if (i == end)
+ continue;
+
+ for (; i != end; i++) {
+ gqueuedata[i->matrix_num].enter_matrix = true;
+ if (gmatrixes[i->matrix_num]->find_truths2(
+ i, j, p.var(), i->row_id, gqueuedata[i->matrix_num])
+ ) {
+ continue;
+ } else {
+ // only in conflict two variable
+ break;
+ }
+ }
+
+ if (i != end) { // must conflict two variable
+ i++;
+ //copy remaining watches
+ GaussWatched* j2 = j;
+ GaussWatched* i2 = i;
+ for(; i2 != end; i2++) {
+ *j2 = *i2;
+ j2++;
+ }
+ }
+ ws.shrink_(i-j);
+
+ for (size_t g = 0; g < gqueuedata.size(); g++) {
+ if (gqueuedata[g].do_eliminate) {
+ gmatrixes[g]->eliminate_col2(p.var(), gqueuedata[g]);
+ }
+ }
+ }
+
+ llbool finret = l_Nothing;
+ for (GaussQData& gqd: gqueuedata) {
+ if (gqd.enter_matrix) {
+ gqueuedata[0].big_gaussnum++;
+ sum_EnGauss++;
+ }
+ switch (gqd.ret_gauss) {
+ case 1:{ // unit conflict
+ //assert(confl.getType() == PropByType::binary_t && "this should hold, right?");
+ bool ret = handle_conflict<false>(gqd.confl);
+
+ gqd.big_conflict++;
+ sum_Enconflict++;
+
+ if (!ret) return l_False;
+ return l_Continue;
+ }
+ case 0:{ // conflict
+ gqd.big_conflict++;
+ sum_Enconflict++;
+
+ Clause* conflPtr = solver->cl_alloc.Clause_new(
+ gqd.conflict_clause_gauss,
+ gqd.xorEqualFalse_gauss
+ #ifdef STATS_NEEDED
+ , clauseID++
+ #endif
+ );
+
+ conflPtr->set_gauss_temp_cl();
+ gqd.confl = PropBy(solver->cl_alloc.get_offset(conflPtr));
+ gqhead = qhead = trail.size();
+
+ bool ret = handle_conflict<false>(gqd.confl);
+ solver->cl_alloc.clauseFree(gqd.confl.get_offset());
+ if (!ret) return l_False;
+ return l_Continue;
+ }
+
+ case 2: // propagation
+ case 3: // unit propagation
+ gqd.big_propagate++;
+ sum_Enpropagate++;
+ finret = l_Continue;
+
+ case 4:
+ //nothing
+ break;
+
+ default:
+ assert(false);
+ return l_Nothing;
+ }
+ }
+ return finret;
+}
+#endif //USE_GAUSS
+
+std::pair<size_t, size_t> Searcher::remove_useless_bins(bool except_marked)
+{
+ size_t removedIrred = 0;
+ size_t removedRed = 0;
+
+ if (conf.doTransRed) {
+ for(std::set<BinaryClause>::iterator
+ it = uselessBin.begin()
+ , end = uselessBin.end()
+ ; it != end
+ ; ++it
+ ) {
+ propStats.otfHyperTime += 2;
+ if (solver->conf.verbosity >= 10) {
+ cout << "Removing binary clause: " << *it << endl;
+ }
+ propStats.otfHyperTime += solver->watches[it->getLit1()].size()/2;
+ propStats.otfHyperTime += solver->watches[it->getLit2()].size()/2;
+ bool removed;
+ if (except_marked) {
+ bool rem1 = removeWBin_except_marked(solver->watches, it->getLit1(), it->getLit2(), it->isRed());
+ bool rem2 = removeWBin_except_marked(solver->watches, it->getLit2(), it->getLit1(), it->isRed());
+ assert(rem1 == rem2);
+ removed = rem1;
+ } else {
+ removeWBin(solver->watches, it->getLit1(), it->getLit2(), it->isRed());
+ removeWBin(solver->watches, it->getLit2(), it->getLit1(), it->isRed());
+ removed = true;
+ }
+
+ if (!removed) {
+ continue;
+ }
+
+ //Update stats
+ if (it->isRed()) {
+ solver->binTri.redBins--;
+ removedRed++;
+ } else {
+ solver->binTri.irredBins--;
+ removedIrred++;
+ }
+ *drat << del << it->getLit1() << it->getLit2() << fin;
+
+ #ifdef VERBOSE_DEBUG_FULLPROP
+ cout << "Removed bin: "
+ << it->getLit1() << " , " << it->getLit2()
+ << " , red: " << it->isRed() << endl;
+ #endif
+ }
+ }
+ uselessBin.clear();
+
+ return std::make_pair(removedIrred, removedRed);
+}
+
+template<bool update_bogoprops>
+PropBy Searcher::propagate() {
+ const size_t origTrailSize = trail.size();
+
+ PropBy ret;
+ ret = propagate_any_order<update_bogoprops>();
+
+ //Drat -- If declevel 0 propagation, we have to add the unitaries
+ if (decisionLevel() == 0 &&
+ (drat->enabled() || solver->conf.simulate_drat)
+ ) {
+ for(size_t i = origTrailSize; i < trail.size(); i++) {
+ #ifdef DEBUG_DRAT
+ if (conf.verbosity >= 6) {
+ cout
+ << "c 0-level enqueue:"
+ << trail[i]
+ << endl;
+ }
+ #endif
+ *drat << add << trail[i]
+ #ifdef STATS_NEEDED
+ << clauseID++ << sumConflicts
+ #endif
+ << fin;
+ }
+ if (!ret.isNULL()) {
+ *drat << add
+ #ifdef STATS_NEEDED
+ << clauseID++ << sumConflicts
+ #endif
+ << fin;
+ }
+ }
+
+ return ret;
+}
+template PropBy Searcher::propagate<true>();
+template PropBy Searcher::propagate<false>();
+
+size_t Searcher::mem_used() const
+{
+ size_t mem = HyperEngine::mem_used();
+ mem += otf_subsuming_short_cls.capacity()*sizeof(OTFClause);
+ mem += otf_subsuming_long_cls.capacity()*sizeof(ClOffset);
+ mem += var_act_vsids.capacity()*sizeof(uint32_t);
+ mem += var_act_maple.capacity()*sizeof(uint32_t);
+ mem += order_heap_vsids.mem_used();
+ mem += order_heap_maple.mem_used();
+ mem += learnt_clause.capacity()*sizeof(Lit);
+ mem += hist.mem_used();
+ mem += conflict.capacity()*sizeof(Lit);
+ mem += model.capacity()*sizeof(lbool);
+ mem += analyze_stack.mem_used();
+ mem += assumptions.capacity()*sizeof(Lit);
+ mem += assumptionsSet.capacity()*sizeof(char);
+
+ if (conf.verbosity >= 3) {
+ cout
+ << "c otfMustAttach bytes: "
+ << otf_subsuming_short_cls.capacity()*sizeof(OTFClause)
+ << endl;
+
+ cout
+ << "c toAttachLater bytes: "
+ << otf_subsuming_long_cls.capacity()*sizeof(ClOffset)
+ << endl;
+
+ cout
+ << "c toclear bytes: "
+ << toClear.capacity()*sizeof(Lit)
+ << endl;
+
+ cout
+ << "c trail bytes: "
+ << trail.capacity()*sizeof(Lit)
+ << endl;
+
+ cout
+ << "c trail_lim bytes: "
+ << trail_lim.capacity()*sizeof(Lit)
+ << endl;
+
+ cout
+ << "c order_heap_vsids bytes: "
+ << order_heap_vsids.mem_used()
+ << endl;
+
+ cout
+ << "c order_heap_maple bytes: "
+ << order_heap_maple.mem_used()
+ << endl;
+
+ cout
+ << "c learnt clause bytes: "
+ << learnt_clause.capacity()*sizeof(Lit)
+ << endl;
+
+ cout
+ << "c hist bytes: "
+ << hist.mem_used()
+ << endl;
+
+ cout
+ << "c conflict bytes: "
+ << conflict.capacity()*sizeof(Lit)
+ << endl;
+
+ cout
+ << "c Stack bytes: "
+ << analyze_stack.capacity()*sizeof(Lit)
+ << endl;
+ }
+
+ return mem;
+}
+
+void Searcher::fill_assumptions_set_from(const vector<AssumptionPair>& fill_from)
+{
+ #ifdef SLOW_DEBUG
+ for(auto x: assumptionsSet) {
+ assert(!x);
+ }
+ #endif
+
+ if (fill_from.empty()) {
+ return;
+ }
+
+ for(const AssumptionPair lit_pair: assumptions) {
+ const Lit lit = lit_pair.lit_inter;
+ if (lit.var() < assumptionsSet.size()) {
+ if (assumptionsSet[lit.var()]) {
+ //Assumption contains the same literal twice. Shouldn't really be allowed...
+ //assert(false && "Either the assumption set contains the same literal twice, or something is very wrong in the solver.");
+ } else {
+ assumptionsSet[lit.var()] = true;
+ }
+ } else {
+ if (value(lit) == l_Undef) {
+ std::cerr
+ << "ERROR: Lit " << lit
+ << " varData[lit.var()].removed: " << removed_type_to_string(varData[lit.var()].removed)
+ << " value: " << value(lit)
+ << " -- value should NOT be l_Undef"
+ << endl;
+ }
+ assert(value(lit) != l_Undef);
+ }
+ }
+}
+
+void Searcher::unfill_assumptions_set_from(const vector<AssumptionPair>& unfill_from)
+{
+ if (unfill_from.empty()) {
+ goto end;
+ }
+
+ //First check -- can't unset at the same time since the same
+ //internal variable may be inside 'assumptions' -- in case the variables
+ //have been replaced with each other.
+ for(const AssumptionPair lit_pair: unfill_from) {
+ const Lit lit = lit_pair.lit_inter;
+ if (lit.var() < assumptionsSet.size()) {
+ #ifdef SLOW_DEBUG
+ if (!assumptionsSet[lit.var()]) {
+ cout << "ERROR: var " << lit.var() + 1 << " is in assumptions but not in assumptionsSet" << endl;
+ }
+ #endif
+ assert(assumptionsSet[lit.var()]);
+ }
+ }
+
+ //Then unset
+ for(const AssumptionPair lit_pair: unfill_from) {
+ const Lit lit = lit_pair.lit_inter;
+ if (lit.var() < assumptionsSet.size()) {
+ assumptionsSet[lit.var()] = false;
+ }
+ }
+
+ end:;
+ #ifdef SLOW_DEBUG
+ for(auto x: assumptionsSet) {
+ assert(!x);
+ }
+ #endif
+}
+
+inline void Searcher::varDecayActivity()
+{
+ assert(VSIDS);
+ var_inc_vsids *= (1.0 / var_decay_vsids);
+}
+
+void Searcher::update_var_decay_vsids()
+{
+ if (var_decay_vsids >= conf.var_decay_vsids_max) {
+ var_decay_vsids = conf.var_decay_vsids_max;
+ }
+}
+
+void Searcher::consolidate_watches()
+{
+ double t = cpuTime();
+ watches.consolidate();
+ double time_used = cpuTime() - t;
+
+ if (conf.verbosity) {
+ cout
+ << "c [consolidate]"
+ << conf.print_times(time_used)
+ << endl;
+ }
+
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ solver
+ , "consolidate watches"
+ , time_used
+ );
+ }
+}
+
+void Searcher::write_long_cls(
+ const vector<ClOffset>& clauses
+ , SimpleOutFile& f
+ , const bool red
+) const {
+ f.put_uint64_t(clauses.size());
+ for(ClOffset c: clauses)
+ {
+ Clause& cl = *cl_alloc.ptr(c);
+ assert(cl.size() > 2);
+ f.put_uint32_t(cl.size());
+ for(const Lit l: cl)
+ {
+ f.put_lit(l);
+ }
+ if (red) {
+ assert(cl.red());
+ f.put_struct(cl.stats);
+ }
+ }
+}
+
+void Searcher::read_long_cls(
+ SimpleInFile& f
+ , const bool red
+) {
+ uint64_t num_cls = f.get_uint64_t();
+
+ vector<Lit> tmp_cl;
+ for(size_t i = 0; i < num_cls; i++)
+ {
+ tmp_cl.clear();
+
+ uint32_t sz = f.get_uint32_t();
+ for(size_t j = 0; j < sz; j++)
+ {
+ tmp_cl.push_back(f.get_lit());
+ }
+ ClauseStats cl_stats;
+ if (red) {
+ f.get_struct(cl_stats);
+ }
+
+ Clause* cl = cl_alloc.Clause_new(tmp_cl
+ , cl_stats.last_touched
+ #ifdef STATS_NEEDED
+ , cl_stats.ID
+ #endif
+ );
+ if (red) {
+ cl->makeRed(cl_stats.glue, cla_inc);
+ }
+ cl->stats = cl_stats;
+ attachClause(*cl);
+ const ClOffset offs = cl_alloc.get_offset(cl);
+ if (red) {
+ cl->stats.which_red_array = 2;
+ if (cl->stats.glue <= conf.glue_put_lev0_if_below_or_eq) {
+ cl->stats.which_red_array = 0;
+ } else if (cl->stats.glue <= conf.glue_put_lev1_if_below_or_eq
+ && conf.glue_put_lev1_if_below_or_eq != 0
+ ) {
+ cl->stats.which_red_array = 1;
+ }
+
+ longRedCls[0].push_back(cl->stats.which_red_array);
+ litStats.redLits += cl->size();
+ } else {
+ longIrredCls.push_back(offs);
+ litStats.irredLits += cl->size();
+ }
+ }
+}
+
+unsigned Searcher::guess_clause_array(
+ const ClauseStats& /*cl_stats*/
+ , uint32_t /*backtrack_lev*/
+) const {
+ /*
+ uint32_t votes = 0;
+ //double trail_depth_rel = (double)trail.size()/hist.trailDepthHistLT.avg();
+ double dec_lev_rel = (double)decisionLevel()/hist.decisionLevelHistLT.avg();
+ if (dec_lev_rel < 0.10) {
+ votes++;
+ }
+
+ double backtrack_lev_rel = (double)backtrack_lev/hist.decisionLevelHistLT.avg();
+ if (backtrack_lev_rel < 0.10) {
+ votes++;
+ }
+
+ if (antec_data.glue_long_reds.avg() > 12) {
+ votes += 1;
+ }
+
+ if (votes > 2) {
+ return true;
+ }*/
+ return false;
+}
+
+void Searcher::write_binary_cls(
+ SimpleOutFile& f
+ , bool red
+) const {
+ if (red) {
+ f.put_uint64_t(binTri.redBins);
+ } else {
+ f.put_uint64_t(binTri.irredBins);
+ }
+
+ size_t at = 0;
+ for(watch_subarray_const ws: watches)
+ {
+ Lit lit1 = Lit::toLit(at);
+ at++;
+ for(Watched w: ws)
+ {
+ if (w.isBin() && w.red() == red) {
+ assert(lit1 != w.lit2());
+ if (lit1 < w.lit2()) {
+ f.put_lit(lit1);
+ f.put_lit(w.lit2());
+ }
+ }
+ }
+ }
+}
+
+uint64_t Searcher::read_binary_cls(
+ SimpleInFile& f
+ , bool red
+) {
+ uint64_t num = f.get_uint64_t();
+ for(uint64_t i = 0; i < num; i++)
+ {
+ const Lit lit1 = f.get_lit();
+ const Lit lit2 = f.get_lit();
+ attach_bin_clause(lit1, lit2, red);
+ }
+ return num;
+}
+
+void Searcher::save_state(SimpleOutFile& f, const lbool status) const
+{
+ assert(decisionLevel() == 0);
+ PropEngine::save_state(f);
+
+ f.put_vector(var_act_vsids);
+ f.put_vector(var_act_maple);
+ f.put_vector(model);
+ f.put_vector(full_model);
+ f.put_vector(conflict);
+
+ //Clauses
+ if (status == l_Undef) {
+ write_binary_cls(f, false);
+ write_binary_cls(f, true);
+ write_long_cls(longIrredCls, f, false);
+ for(auto& lredcls: longRedCls) {
+ write_long_cls(lredcls, f, true);
+ }
+ }
+}
+
+void Searcher::load_state(SimpleInFile& f, const lbool status)
+{
+ assert(decisionLevel() == 0);
+ PropEngine::load_state(f);
+
+ f.get_vector(var_act_vsids);
+ f.get_vector(var_act_maple);
+ for(size_t i = 0; i < nVars(); i++) {
+ if (varData[i].removed == Removed::none
+ && value(i) == l_Undef
+ ) {
+ insert_var_order_all(i);
+ }
+ }
+ f.get_vector(model);
+ f.get_vector(full_model);
+ f.get_vector(conflict);
+
+ //Clauses
+ if (status == l_Undef) {
+ binTri.irredBins = read_binary_cls(f, false);
+ binTri.redBins =read_binary_cls(f, true);
+ read_long_cls(f, false);
+ for(size_t i = 0; i < longRedCls.size(); i++) {
+ read_long_cls(f, true);
+ }
+ }
+}
+
+
+//Normal running
+template
+void Searcher::cancelUntil<true, false>(uint32_t level);
+
+//During inprocessing, dont update anyting really (probing, distilling)
+template
+void Searcher::cancelUntil<false, true>(uint32_t level);
+
+template<bool do_insert_var_order, bool update_bogoprops>
+void Searcher::cancelUntil(uint32_t level)
+{
+ #ifdef VERBOSE_DEBUG
+ cout << "Canceling until level " << level;
+ if (level > 0) cout << " sublevel: " << trail_lim[level];
+ cout << endl;
+ #endif
+
+ if (decisionLevel() > level) {
+ #ifdef USE_GAUSS
+ for (EGaussian* gauss: gmatrixes)
+ gauss->canceling(trail_lim[level]);
+ #endif //USE_GAUSS
+
+ //Go through in reverse order, unassign & insert then
+ //back to the vars to be branched upon
+ for (int sublevel = trail.size()-1
+ ; sublevel >= (int)trail_lim[level]
+ ; sublevel--
+ ) {
+ #ifdef VERBOSE_DEBUG
+ cout
+ << "Canceling lit " << trail[sublevel]
+ << " sublevel: " << sublevel
+ << endl;
+ #endif
+
+ #ifdef ANIMATE3D
+ std:cerr << "u " << var << endl;
+ #endif
+
+ const uint32_t var = trail[sublevel].var();
+ assert(value(var) != l_Undef);
+
+ if (!update_bogoprops && !VSIDS) {
+ assert(sumConflicts >= varData[var].last_picked);
+ uint32_t age = sumConflicts - varData[var].last_picked;
+ if (age > 0) {
+ //adjusted reward -> higher if conflicted more or quicker
+ double adjusted_reward = ((double)(varData[var].conflicted)) / ((double)age);
+
+ double old_activity = var_act_maple[var];
+ var_act_maple[var] = step_size * adjusted_reward + ((1.0 - step_size) * old_activity);
+ if (order_heap_maple.inHeap(var)) {
+ if (var_act_maple[var] > old_activity)
+ order_heap_maple.decrease(var);
+ else
+ order_heap_maple.increase(var);
+ }
+ }
+ varData[var].cancelled = sumConflicts;
+ }
+
+ assigns[var] = l_Undef;
+ if (do_insert_var_order) {
+ insert_var_order(var);
+ }
+ }
+ qhead = trail_lim[level];
+ trail.resize(trail_lim[level]);
+ trail_lim.resize(level);
+ }
+
+ #ifdef VERBOSE_DEBUG
+ cout
+ << "Canceling finished. Now at level: " << decisionLevel()
+ << " sublevel: " << trail.size()-1
+ << endl;
+ #endif
+}
+
+inline bool Searcher::check_order_heap_sanity() const
+{
+ if (conf.independent_vars) {
+ for(uint32_t outside_var: *conf.independent_vars) {
+ uint32_t outer_var = map_to_with_bva(outside_var);
+ outer_var = solver->varReplacer->get_var_replaced_with_outer(outer_var);
+ uint32_t int_var = map_outer_to_inter(outer_var);
+
+ assert(varData[int_var].removed == Removed::none ||
+ varData[int_var].removed == Removed::decomposed);
+
+ if (int_var < nVars() &&
+ varData[int_var].removed == Removed::none &&
+ value(int_var) == l_Undef
+ ) {
+ order_heap_vsids.inHeap(int_var);
+ order_heap_maple.inHeap(int_var);
+ }
+ }
+ }
+
+ for(size_t i = 0; i < nVars(); i++)
+ {
+ if (varData[i].removed == Removed::none
+ && value(i) == l_Undef)
+ {
+ if (!order_heap_vsids.inHeap(i)) {
+ cout << "ERROR var " << i+1 << " not in VSIDS heap."
+ << " value: " << value(i)
+ << " removed: " << removed_type_to_string(varData[i].removed)
+ << endl;
+ return false;
+ }
+ if (!order_heap_maple.inHeap(i)) {
+ cout << "ERROR var " << i+1 << " not in !VSIDS heap."
+ << " value: " << value(i)
+ << " removed: " << removed_type_to_string(varData[i].removed)
+ << endl;
+ return false;
+ }
+ }
+ }
+ assert(order_heap_vsids.heap_property());
+ assert(order_heap_maple.heap_property());
+
+ return true;
+}
+
+#ifdef USE_GAUSS
+void Searcher::clearEnGaussMatrixes()
+{
+ for (auto& gqd: gqueuedata) {
+ if (solver->conf.verbosity && gqd.big_gaussnum > 0) {
+ cout << "c [gauss] big_conflict/big_gaussnum:" << (double)gqd.big_conflict/(double)gqd.big_gaussnum*100.0 << " %" <<endl;
+ cout << "c [gauss] big_propagate/big_gaussnum:" << (double)gqd.big_propagate/(double)gqd.big_gaussnum*100.0 << " %" <<endl;
+ }
+
+ if (solver->conf.verbosity >= 2 && gqd.big_gaussnum > 0) {
+ cout << "c [gauss] big_propagate : "; print_value_kilo_mega(gqd.big_propagate); cout << endl;
+ cout << "c [gauss] big_conflict : "; print_value_kilo_mega(gqd.big_conflict); cout << endl;
+ cout << "c [gauss] big_gaussnum : "; print_value_kilo_mega(gqd.big_gaussnum); cout << endl;
+
+ cout << "c [gauss] - sumstats -" << endl;
+ cout << "c [gauss] sum_Enpropagate: "; print_value_kilo_mega(sum_Enpropagate); cout << endl;
+ cout << "c [gauss] sum_Enconflict : "; print_value_kilo_mega(sum_Enconflict); cout << endl;
+ cout << "c [gauss] sum_EnGauss : "; print_value_kilo_mega(sum_EnGauss); cout << endl;
+ }
+ gqd.reset_stats();
+ }
+
+ //cout << "Clearing matrixes" << endl;
+ for(EGaussian* g: gmatrixes) {
+ delete g;
+ }
+ for(auto& w: gwatches) {
+ w.clear();
+ }
+ gmatrixes.clear();
+ gqueuedata.clear();
+}
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/searcher.h b/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
new file mode 100644
index 000000000..aa16b2b30
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/searcher.h
@@ -0,0 +1,642 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SEARCHER_H__
+#define __SEARCHER_H__
+
+#include <array>
+
+#include "propengine.h"
+#include "solvertypes.h"
+#include "time_mem.h"
+#include "hyperengine.h"
+#include "MersenneTwister.h"
+#include "simplefile.h"
+#include "searchstats.h"
+#include "gqueuedata.h"
+
+#ifdef CMS_TESTING_ENABLED
+#include "gtest/gtest_prod.h"
+#endif
+
+
+namespace CMSat {
+
+class Solver;
+class SQLStats;
+class VarReplacer;
+class EGaussian;
+class DistillerLong;
+
+using std::string;
+using std::cout;
+using std::endl;
+
+struct OTFClause
+{
+ Lit lits[3];
+ unsigned size;
+};
+
+struct VariableVariance
+{
+ double avgDecLevelVarLT = 0;
+ double avgTrailLevelVarLT= 0;
+ double avgDecLevelVar = 0;
+ double avgTrailLevelVar = 0;
+};
+
+class Searcher : public HyperEngine
+{
+ public:
+ Searcher(const SolverConf* _conf, Solver* solver, std::atomic<bool>* _must_interrupt_inter);
+ virtual ~Searcher();
+ ///////////////////////////////
+ // Solving
+ //
+ lbool solve(
+ uint64_t max_confls
+ , const unsigned upper_level_iteration_num
+ );
+ void finish_up_solve(lbool status);
+ void reduce_db_if_needed();
+ bool clean_clauses_if_needed();
+ void check_calc_features();
+ void dump_search_loop_stats(double myTime);
+ bool must_abort(lbool status);
+ uint64_t luby_loop_num = 0;
+ MTRand mtrand; ///< random number generator
+
+
+ vector<lbool> model;
+ vector<lbool> full_model;
+ vector<Lit> conflict; ///<If problem is unsatisfiable (possibly under assumptions), this vector represent the final conflict clause expressed in the assumptions.
+ template<bool update_bogoprops>
+ PropBy propagate();
+
+ ///////////////////////////////
+ // Stats
+ //Restart print status
+ uint64_t lastRestartPrint = 0;
+ uint64_t lastRestartPrintHeader = 0;
+ void print_restart_stat();
+ void print_iteration_solving_stats();
+ void print_restart_header();
+ void print_restart_stat_line() const;
+ void print_restart_stats_base() const;
+ void print_clause_stats() const;
+ uint64_t sumRestarts() const;
+ const SearchHist& getHistory() const;
+
+ size_t hyper_bin_res_all(const bool check_for_set_values = true);
+ std::pair<size_t, size_t> remove_useless_bins(bool except_marked = false);
+ bool var_inside_assumptions(const uint32_t var) const
+ {
+ #ifdef SLOW_DEBUG
+ assert(var < nVars());
+ assert(var < assumptionsSet.size());
+ #endif
+ return assumptionsSet.at(var);
+ }
+ template<bool do_insert_var_order = true, bool update_bogoprops = false>
+ void cancelUntil(uint32_t level); ///<Backtrack until a certain level.
+ bool check_order_heap_sanity() const;
+
+ SQLStats* sqlStats = NULL;
+ void consolidate_watches();
+
+ //Gauss
+ #ifdef USE_GAUSS
+ void clearEnGaussMatrixes(); // clear Gaussian matrixes
+ llbool Gauss_elimination(); // gaussian elimination in DPLL
+ vector<EGaussian*> gmatrixes; // enhance gaussian matrix
+ vector<GaussQData> gqueuedata;
+
+ uint32_t sum_gauss_called;
+ uint32_t sum_gauss_confl;
+ uint32_t sum_gauss_prop;
+ uint32_t sum_gauss_unit_truths;
+ uint32_t get_sum_gauss_called() const;
+ uint32_t get_sum_gauss_confl() const;
+ uint32_t get_sum_gauss_prop() const;
+ uint32_t get_sum_gauss_unit_truths() const;
+ #endif
+
+ // stats
+ uint32_t sum_initEnGauss; // the total sum of time calling "full_init"
+ uint32_t sum_initUnit; // the total sum of number getting unit xor clasue in initial gaussian matrix
+ uint32_t sum_initTwo; // the total sum of number getting two-variable xor clasue in initial gaussian matrix
+ uint32_t sum_Enconflict; // the total sum of conflict in gaussian matrix
+ uint32_t sum_Enpropagate; // the total sum of propagation in gaussian matrx
+ uint32_t sum_Enunit; // the total sum of number getting two-variable xor clasue in gaussian matrix
+ uint32_t sum_EnGauss; // the total sum of time entering gaussian matrix
+
+ void testing_fill_assumptions_set()
+ {
+ assumptionsSet.clear();
+ assumptionsSet.resize(nVars(), false);
+ }
+ double get_cla_inc() const
+ {
+ return cla_inc;
+ }
+
+ //Needed for tests around renumbering
+ void rebuildOrderHeap();
+ void clear_order_heap()
+ {
+ order_heap_vsids.clear();
+ order_heap_maple.clear();
+ }
+ template<bool update_bogoprops>
+ void bump_cl_act(Clause* cl);
+ void simple_create_learnt_clause(
+ PropBy confl,
+ vector<Lit>& out_learnt,
+ bool True_confl
+ );
+
+ protected:
+ void new_var(const bool bva, const uint32_t orig_outer) override;
+ void new_vars(const size_t n) override;
+ void save_on_var_memory();
+ void reset_temp_cl_num();
+ void updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+ );
+ void save_state(SimpleOutFile& f, const lbool status) const;
+ void load_state(SimpleInFile& f, const lbool status);
+ void write_long_cls(
+ const vector<ClOffset>& clauses
+ , SimpleOutFile& f
+ , const bool red
+ ) const;
+ void read_long_cls(
+ SimpleInFile& f
+ , const bool red
+ );
+ uint64_t read_binary_cls(
+ SimpleInFile& f
+ , bool red
+ );
+ void write_binary_cls(
+ SimpleOutFile& f
+ , bool red
+ ) const;
+
+ //Misc
+ void update_var_decay_vsids();
+ void add_in_partial_solving_stats();
+
+
+ struct AssumptionPair {
+ AssumptionPair(const Lit _inter, const Lit _outer):
+ lit_inter(_inter)
+ , lit_orig_outside(_outer)
+ {
+ }
+
+ Lit lit_inter;
+ Lit lit_orig_outside; //not outer, but outside(!)
+
+ bool operator<(const AssumptionPair& other) const
+ {
+ //Yes, we need reverse in terms of inverseness
+ return ~lit_inter < ~other.lit_inter;
+ }
+ };
+ void fill_assumptions_set_from(const vector<AssumptionPair>& fill_from);
+ void unfill_assumptions_set_from(const vector<AssumptionPair>& unfill_from);
+ void renumber_assumptions(const vector<uint32_t>& outerToInter);
+ //we cannot eliminate / component-handle such vars
+ //Needed so checking is fast
+ vector<char> assumptionsSet;
+
+ //Note that this array can have the same internal variable more than
+ //once, in case one has been replaced with the other. So if var 1 = var 2
+ //and var 1 was set to TRUE and var 2 to be FALSE, then we'll have var 1
+ //insided this array twice, once it needs to be set to TRUE and once FALSE
+ vector<AssumptionPair> assumptions;
+
+ void update_assump_conflict_to_orig_outside(vector<Lit>& out_conflict);
+
+
+ //For connection with Solver
+ void resetStats();
+
+ SearchHist hist;
+
+ /////////////////
+ //Settings
+ Solver* solver; ///< Thread control class
+ double step_size;
+
+ /////////////////
+ // Searching
+ /// Search for a given number of conflicts.
+ template<bool update_bogoprops>
+ lbool search();
+ template<bool update_bogoprops>
+ bool handle_conflict(PropBy confl);// Handles the conflict clause
+ void update_history_stats(size_t backtrack_level, uint32_t glue);
+ template<bool update_bogoprops>
+ void attach_and_enqueue_learnt_clause(Clause* cl, bool enq = true);
+ void print_learning_debug_info() const;
+ void print_learnt_clause() const;
+ void add_otf_subsume_long_clauses();
+ void add_otf_subsume_implicit_clause();
+ Clause* handle_last_confl_otf_subsumption(
+ Clause* cl
+ , const uint32_t glue
+ , const uint32_t old_decision_level
+ );
+ template<bool update_bogoprops>
+ lbool new_decision(); // Handles the case when decision must be made
+ void check_need_restart(); // Helper function to decide if we need to restart during search
+ Lit pickBranchLit();
+
+ ///////////////
+ // Conflicting
+ struct SearchParams
+ {
+ SearchParams()
+ {
+ clear();
+ }
+
+ void clear()
+ {
+ needToStopSearch = false;
+ conflictsDoneThisRestart = 0;
+ }
+
+ bool needToStopSearch;
+ uint64_t conflictsDoneThisRestart;
+ uint64_t max_confl_to_do;
+ Restart rest_type = Restart::never;
+ };
+ SearchParams params;
+ vector<Lit> learnt_clause;
+ vector<Lit> decision_clause;
+ template<bool update_bogoprops>
+ Clause* analyze_conflict(
+ PropBy confl //The conflict that we are investigating
+ , uint32_t& out_btlevel //backtrack level
+ , uint32_t &glue //glue of the learnt clause
+ );
+ void update_clause_glue_from_analysis(Clause* cl);
+ template<bool update_bogoprops>
+ void minimize_learnt_clause();
+ void watch_based_learnt_minim();
+ void minimize_using_permdiff();
+ void print_fully_minimized_learnt_clause() const;
+ size_t find_backtrack_level_of_learnt();
+ template<bool update_bogoprops>
+ void bump_var_activities_based_on_implied_by_learnts(const uint32_t backtrack_level);
+ Clause* otf_subsume_last_resolved_clause(Clause* last_resolved_long_cl);
+ void print_debug_resolution_data(const PropBy confl);
+ template<bool update_bogoprops>
+ Clause* create_learnt_clause(PropBy confl);
+ int pathC;
+ #ifdef STATS_NEEDED
+ AtecedentData<uint16_t> antec_data;
+ #endif
+
+ vector<uint32_t> implied_by_learnts; //for glue-based extra var activity bumping
+
+ /////////////////
+ // Variable activity
+ double var_inc_vsids;
+ void insert_var_order(const uint32_t x); ///< Insert a variable in current heap
+ void insert_var_order_all(const uint32_t x); ///< Insert a variable in all heaps
+
+
+ uint64_t more_red_minim_limit_binary_actual;
+ uint64_t more_red_minim_limit_cache_actual;
+ const SearchStats& get_stats() const;
+ size_t mem_used() const;
+
+ int64_t max_confl_phase;
+ int64_t max_confl_this_phase;
+
+ uint64_t next_lev1_reduce;
+ uint64_t next_lev2_reduce;
+ double var_decay_vsids;
+
+ private:
+ //////////////
+ // Conflict minimisation
+ bool litRedundant(Lit p, uint32_t abstract_levels);
+ void recursiveConfClauseMin();
+ void normalClMinim();
+ MyStack<Lit> analyze_stack;
+ uint32_t abstractLevel(const uint32_t x) const;
+
+ //OTF subsumption during learning
+ vector<ClOffset> otf_subsuming_long_cls;
+ vector<OTFClause> otf_subsuming_short_cls;
+ void check_otf_subsume(const ClOffset offset, Clause& cl);
+ void create_otf_subsuming_implicit_clause(const Clause& cl);
+ void create_otf_subsuming_long_clause(Clause& cl, ClOffset offset);
+ template<bool update_bogoprops>
+ Clause* add_literals_from_confl_to_learnt(const PropBy confl, const Lit p);
+ void debug_print_resolving_clause(const PropBy confl) const;
+ template<bool update_bogoprops>
+ void add_lit_to_learnt(Lit lit);
+ void analyze_final_confl_with_assumptions(const Lit p, vector<Lit>& out_conflict);
+ size_t tmp_learnt_clause_size;
+ cl_abst_type tmp_learnt_clause_abst;
+
+ //Restarts
+ uint64_t max_confl_per_search_solve_call;
+ bool blocked_restart = false;
+ void check_blocking_restart();
+ uint32_t num_search_called = 0;
+ uint64_t lastRestartConfl;
+ double luby(double y, int x);
+ void adjust_phases_restarts();
+
+ void print_solution_varreplace_status() const;
+
+ ////////////
+ // Transitive on-the-fly self-subsuming resolution
+ void minimise_redundant_more_more(vector<Lit>& cl);
+ void binary_based_morem_minim(vector<Lit>& cl);
+ void cache_based_morem_minim(vector<Lit>& cl);
+ void stamp_based_morem_minim(vector<Lit>& cl);
+
+ //Variable activities
+ struct VarFilter { ///Filter out vars that have been set or is not decision from heap
+ const Searcher* cc;
+ const Solver* solver;
+ VarFilter(const Searcher* _cc, Solver* _solver) :
+ cc(_cc)
+ ,solver(_solver)
+ {}
+ bool operator()(uint32_t var) const;
+ };
+ friend class Gaussian;
+ friend class DistillerLong;
+ #ifdef CMS_TESTING_ENABLED
+ FRIEND_TEST(SearcherTest, pickpolar_rnd);
+ FRIEND_TEST(SearcherTest, pickpolar_pos);
+ FRIEND_TEST(SearcherTest, pickpolar_neg);
+ FRIEND_TEST(SearcherTest, pickpolar_auto);
+ FRIEND_TEST(SearcherTest, pickpolar_auto_not_changed_by_simp);
+ #endif
+
+ ///Decay all variables with the specified factor. Implemented by increasing the 'bump' value instead.
+ void varDecayActivity ();
+ ///Increase a variable with the current 'bump' value.
+ template<bool update_bogoprops>
+ void bump_vsids_var_act(uint32_t v, double mult = 1.0);
+
+ //Clause activites
+ double cla_inc;
+
+ template<bool update_bogoprops> void decayClauseAct();
+ unsigned guess_clause_array(
+ const ClauseStats& glue
+ , const uint32_t backtrack_lev
+ ) const;
+
+ //SQL
+ void dump_search_sql(const double myTime);
+ #ifdef STATS_NEEDED
+ void dump_restart_sql();
+ PropStats lastSQLPropStats;
+ SearchStats lastSQLGlobalStats;
+ void dump_sql_clause_data(
+ const uint32_t glue
+ , const uint32_t old_decision_level
+ );
+ int dump_this_many_cldata_in_stream = 0;
+ #endif
+
+
+ //Other
+ void print_solution_type(const lbool status) const;
+ uint64_t next_distill = 0;
+ bool DISTANCE = true;
+
+ //Picking polarity when doing decision
+ bool pick_polarity(const uint32_t var);
+
+ //Last time we clean()-ed the clauses, the number of zero-depth assigns was this many
+ size_t lastCleanZeroDepthAssigns;
+
+ //Used for on-the-fly subsumption. Does A subsume B?
+ //Uses 'seen' to do its work
+ bool subset(const vector<Lit>& A, const Clause& B);
+
+ double startTime; ///<When solve() was started
+ SearchStats stats;
+};
+
+inline uint32_t Searcher::abstractLevel(const uint32_t x) const
+{
+ return ((uint32_t)1) << (varData[x].level & 31);
+}
+
+inline const SearchStats& Searcher::get_stats() const
+{
+ return stats;
+}
+
+inline const SearchHist& Searcher::getHistory() const
+{
+ return hist;
+}
+
+inline void Searcher::add_in_partial_solving_stats()
+{
+ stats.cpu_time = cpuTime() - startTime;
+}
+
+inline void Searcher::insert_var_order(const uint32_t x)
+{
+ Heap<VarOrderLt> &order_heap = VSIDS ? order_heap_vsids : order_heap_maple;
+ if (!order_heap.inHeap(x)) {
+ #ifdef SLOW_DEUG
+ assert(varData[x].removed == Removed::none
+ && "All variables should be decision vars unless removed");
+ #endif
+
+ order_heap.insert(x);
+ }
+}
+
+inline void Searcher::insert_var_order_all(const uint32_t x)
+{
+ if (!order_heap_vsids.inHeap(x)) {
+ #ifdef SLOW_DEUG
+ assert(varData[x].removed == Removed::none
+ && "All variables should be decision vars unless removed");
+ #endif
+
+ order_heap_vsids.insert(x);
+ }
+ if (!order_heap_maple.inHeap(x)) {
+ #ifdef SLOW_DEUG
+ assert(varData[x].removed == Removed::none
+ && "All variables should be decision vars unless removed");
+ #endif
+
+ order_heap_maple.insert(x);
+ }
+}
+
+template<bool update_bogoprops>
+inline void Searcher::bump_cl_act(Clause* cl)
+{
+ if (update_bogoprops)
+ return;
+
+ assert(!cl->getRemoved());
+
+ double new_val = cla_inc + (double)cl->stats.activity;
+ cl->stats.activity = (float)new_val;
+ if (cl->stats.activity > 1e20F ) {
+ // Rescale. For STATS_NEEDED we rescale ALL
+ #ifndef STATS_NEEDED
+ for(ClOffset offs: longRedCls[2]) {
+ cl_alloc.ptr(offs)->stats.activity *= static_cast<float>(1e-20);
+ }
+ #else
+ for(auto& lrcs: longRedCls) {
+ for(ClOffset offs: lrcs) {
+ cl_alloc.ptr(offs)->stats.activity *= static_cast<float>(1e-20);
+ }
+ }
+ #endif
+ cla_inc *= 1e-20;
+ assert(cla_inc != 0);
+ }
+}
+
+template<bool update_bogoprops>
+inline void Searcher::decayClauseAct()
+{
+ if (update_bogoprops)
+ return;
+
+ cla_inc *= (1 / conf.clause_decay);
+}
+
+inline bool Searcher::pick_polarity(const uint32_t var)
+{
+ switch(conf.polarity_mode) {
+ case PolarityMode::polarmode_neg:
+ return false;
+
+ case PolarityMode::polarmode_pos:
+ return true;
+
+ case PolarityMode::polarmode_rnd:
+ return mtrand.randInt(1);
+
+ case PolarityMode::polarmode_automatic:
+ return varData[var].polarity;
+
+ default:
+ assert(false);
+ }
+
+ return true;
+}
+
+template<bool update_bogoprops>
+void Searcher::bump_var_activities_based_on_implied_by_learnts(uint32_t backtrack_level) {
+ assert(!update_bogoprops);
+
+ for (const uint32_t var :implied_by_learnts) {
+ if ((int32_t)varData[var].level >= (int32_t)backtrack_level-1L) {
+ bump_vsids_var_act<update_bogoprops>(var, 1.0);
+ }
+ }
+}
+
+template<bool update_bogoprops>
+inline void Searcher::bump_vsids_var_act(uint32_t var, double mult)
+{
+ if (update_bogoprops) {
+ return;
+ }
+
+ var_act_vsids[var] += var_inc_vsids * mult;
+
+ #ifdef SLOW_DEBUG
+ bool rescaled = false;
+ #endif
+ if (var_act_vsids[var] > 1e100) {
+ // Rescale:
+ for (double& act : var_act_vsids) {
+ act *= 1e-100;
+ }
+ #ifdef SLOW_DEBUG
+ rescaled = true;
+ #endif
+
+ //Reset var_inc
+ var_inc_vsids *= 1e-100;
+ }
+
+ // Update order_heap with respect to new activity:
+ if (order_heap_vsids.inHeap(var)) {
+ order_heap_vsids.decrease(var);
+ }
+
+ #ifdef SLOW_DEBUG
+ if (rescaled) {
+ assert(order_heap_vsids.heap_property());
+ }
+ #endif
+}
+
+#ifdef USE_GAUSS
+inline uint32_t Searcher::get_sum_gauss_unit_truths() const
+{
+ return sum_gauss_unit_truths;
+}
+
+inline uint32_t Searcher::get_sum_gauss_called() const
+{
+ return sum_gauss_called;
+}
+
+inline uint32_t Searcher::get_sum_gauss_confl() const
+{
+ return sum_gauss_confl;
+}
+
+inline uint32_t Searcher::get_sum_gauss_prop() const
+{
+ return sum_gauss_prop;
+}
+#endif
+
+
+
+} //end namespace
+
+#endif //__SEARCHER_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h b/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
new file mode 100644
index 000000000..5f91a5818
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/searchhist.h
@@ -0,0 +1,158 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef _SEARCHHIST_H_
+#define _SEARCHHIST_H_
+
+#include <cstdint>
+#include "avgcalc.h"
+#include "boundedqueue.h"
+#include <iostream>
+using std::cout;
+using std::endl;
+
+namespace CMSat {
+
+//History
+struct SearchHist {
+ //About the search
+ AvgCalc<uint32_t> branchDepthHist; ///< Avg branch depth in current restart
+ AvgCalc<uint32_t> branchDepthDeltaHist;
+
+ AvgCalc<uint32_t> backtrackLevelHistLT;
+ AvgCalc<uint32_t> trailDepthHistLT;
+ AvgCalc<uint32_t> vsidsVarsAvgLT; //vsids_vars.avg()
+
+ bqueue<uint32_t> trailDepthHistLonger; ///<total depth, incl. props, decisions and assumps
+ AvgCalc<uint32_t> trailDepthDeltaHist; ///<for THIS restart only
+
+ //About the confl generated
+ bqueue<uint32_t> glueHist; ///< Set of last decision levels in (glue of) conflict clauses
+ AvgCalc<uint32_t> glueHistLTLimited; //LIMITED, only glue-based restart, max 50 glue
+ AvgCalc<uint32_t> glueHistLTAll;
+
+ AvgCalc<uint32_t> conflSizeHist; ///< Conflict size history
+ AvgCalc<uint32_t> conflSizeHistLT;
+ AvgCalc<uint32_t> numResolutionsHistLT;
+
+ #ifdef STATS_NEEDED
+ bqueue<uint32_t> backtrackLevelHist;
+ AvgCalc<uint32_t> overlapHistLT;
+ AvgCalc<uint32_t> antec_data_sum_sizeHistLT;
+ AvgCalc<uint32_t> numResolutionsHist; ///< Number of resolutions during conflict analysis of THIS restart
+ AvgCalc<uint32_t> decisionLevelHistLT;
+ bqueue<uint32_t> branchDepthHistQueue;
+ bqueue<uint32_t> trailDepthHist;
+ #endif
+
+ size_t mem_used() const
+ {
+ uint64_t used = sizeof(SearchHist);
+ used += sizeof(AvgCalc<uint32_t>)*16;
+ used += sizeof(AvgCalc<bool>)*4;
+ used += sizeof(AvgCalc<size_t>)*2;
+ used += sizeof(AvgCalc<double, double>)*2;
+ used += glueHist.usedMem();
+ used += trailDepthHistLonger.usedMem();
+ #ifdef STATS_NEEDED
+ used += backtrackLevelHist.usedMem();
+ used += branchDepthHistQueue.usedMem();
+ #endif
+
+ return used;
+ }
+
+ void clear()
+ {
+ //About the search
+ branchDepthHist.clear();
+ branchDepthDeltaHist.clear();
+ trailDepthDeltaHist.clear();
+
+ //conflict generated
+ glueHist.clear();
+ conflSizeHist.clear();
+
+ #ifdef STATS_NEEDED
+ numResolutionsHist.clear();
+ trailDepthHist.clear();
+ branchDepthHistQueue.clear();
+ #endif
+ }
+
+ void reset_glue_hist_size(size_t shortTermHistorySize)
+ {
+ glueHist.clearAndResize(shortTermHistorySize);
+ #ifdef STATS_NEEDED
+ backtrackLevelHist.clearAndResize(shortTermHistorySize);
+ trailDepthHist.clearAndResize(shortTermHistorySize);
+ branchDepthHistQueue.clearAndResize(shortTermHistorySize);
+ #endif
+ }
+
+ void setSize(const size_t shortTermHistorySize, const size_t blocking_trail_hist_size)
+ {
+ glueHist.clearAndResize(shortTermHistorySize);
+ trailDepthHistLonger.clearAndResize(blocking_trail_hist_size);
+ #ifdef STATS_NEEDED
+ backtrackLevelHist.clearAndResize(shortTermHistorySize);
+ trailDepthHist.clearAndResize(shortTermHistorySize);
+ branchDepthHistQueue.clearAndResize(shortTermHistorySize);
+ #endif
+ }
+
+ void print() const
+ {
+ cout
+ << " glue"
+ << " "
+ #ifdef STATS_NEEDED
+ << std::right << glueHist.getLongtTerm().avgPrint(1, 5)
+ #endif
+ << "/" << std::left << glueHistLTAll.avgPrint(1, 5)
+
+ << " confllen"
+ << " " << std::right << conflSizeHist.avgPrint(1, 5)
+ << "/" << std::left << conflSizeHistLT.avgPrint(1, 5)
+
+ << " branchd"
+ << " " << std::right << branchDepthHist.avgPrint(1, 5)
+ << " branchdd"
+
+ << " " << std::right << branchDepthDeltaHist.avgPrint(1, 4)
+
+ #ifdef STATS_NEEDED
+ << " traild"
+ << " " << std::right << trailDepthHist.getLongtTerm().avgPrint(0, 7)
+ #endif
+
+ << " traildd"
+ << " " << std::right << trailDepthDeltaHist.avgPrint(0, 5)
+ ;
+
+ cout << std::right;
+ }
+};
+
+} //end namespace
+
+#endif //_SEARCHHIST_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp b/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
new file mode 100644
index 000000000..d6d9ee417
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/searchstats.cpp
@@ -0,0 +1,376 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "searchstats.h"
+
+using namespace CMSat;
+
+SearchStats& SearchStats::operator+=(const SearchStats& other)
+{
+ numRestarts += other.numRestarts;
+ blocked_restart += other.blocked_restart;
+ blocked_restart_same += other.blocked_restart_same;
+
+ //Decisions
+ decisions += other.decisions;
+ decisionsAssump += other.decisionsAssump;
+ decisionsRand += other.decisionsRand;
+ decisionFlippedPolar += other.decisionFlippedPolar;
+
+ //Conflict minimisation stats
+ litsRedNonMin += other.litsRedNonMin;
+ litsRedFinal += other.litsRedFinal;
+ recMinCl += other.recMinCl;
+ recMinLitRem += other.recMinLitRem;
+
+ permDiff_attempt += other.permDiff_attempt;
+ permDiff_rem_lits += other.permDiff_rem_lits;
+ permDiff_success += other.permDiff_success;
+
+ furtherShrinkAttempt += other.furtherShrinkAttempt;
+ binTriShrinkedClause += other.binTriShrinkedClause;
+ cacheShrinkedClause += other.cacheShrinkedClause;
+ furtherShrinkedSuccess += other.furtherShrinkedSuccess;
+
+
+ stampShrinkAttempt += other.stampShrinkAttempt;
+ stampShrinkCl += other.stampShrinkCl;
+ stampShrinkLit += other.stampShrinkLit;
+ moreMinimLitsStart += other.moreMinimLitsStart;
+ moreMinimLitsEnd += other.moreMinimLitsEnd;
+ recMinimCost += other.recMinimCost;
+
+ //Red stats
+ learntUnits += other.learntUnits;
+ learntBins += other.learntBins;
+ learntLongs += other.learntLongs;
+ otfSubsumed += other.otfSubsumed;
+ otfSubsumedImplicit += other.otfSubsumedImplicit;
+ otfSubsumedLong += other.otfSubsumedLong;
+ otfSubsumedRed += other.otfSubsumedRed;
+ otfSubsumedLitsGained += other.otfSubsumedLitsGained;
+ cache_hit += other.cache_hit;
+ red_cl_in_which0 += other.red_cl_in_which0;
+
+ //Hyper-bin & transitive reduction
+ advancedPropCalled += other.advancedPropCalled;
+ hyperBinAdded += other.hyperBinAdded;
+ transReduRemIrred += other.transReduRemIrred;
+ transReduRemRed += other.transReduRemRed;
+
+ //Stat structs
+ resolvs += other.resolvs;
+ conflStats += other.conflStats;
+
+ //Time
+ cpu_time += other.cpu_time;
+
+ return *this;
+}
+
+SearchStats& SearchStats::operator-=(const SearchStats& other)
+{
+ numRestarts -= other.numRestarts;
+ blocked_restart -= other.blocked_restart;
+ blocked_restart_same -= other.blocked_restart_same;
+
+ //Decisions
+ decisions -= other.decisions;
+ decisionsAssump -= other.decisionsAssump;
+ decisionsRand -= other.decisionsRand;
+ decisionFlippedPolar -= other.decisionFlippedPolar;
+
+ //Conflict minimisation stats
+ litsRedNonMin -= other.litsRedNonMin;
+ litsRedFinal -= other.litsRedFinal;
+ recMinCl -= other.recMinCl;
+ recMinLitRem -= other.recMinLitRem;
+
+ permDiff_attempt -= other.permDiff_attempt;
+ permDiff_rem_lits -= other.permDiff_rem_lits;
+ permDiff_success -= other.permDiff_success;
+
+ furtherShrinkAttempt -= other.furtherShrinkAttempt;
+ binTriShrinkedClause -= other.binTriShrinkedClause;
+ cacheShrinkedClause -= other.cacheShrinkedClause;
+ furtherShrinkedSuccess -= other.furtherShrinkedSuccess;
+
+ stampShrinkAttempt -= other.stampShrinkAttempt;
+ stampShrinkCl -= other.stampShrinkCl;
+ stampShrinkLit -= other.stampShrinkLit;
+ moreMinimLitsStart -= other.moreMinimLitsStart;
+ moreMinimLitsEnd -= other.moreMinimLitsEnd;
+ recMinimCost -= other.recMinimCost;
+
+ //Red stats
+ learntUnits -= other.learntUnits;
+ learntBins -= other.learntBins;
+ learntLongs -= other.learntLongs;
+ otfSubsumed -= other.otfSubsumed;
+ otfSubsumedImplicit -= other.otfSubsumedImplicit;
+ otfSubsumedLong -= other.otfSubsumedLong;
+ otfSubsumedRed -= other.otfSubsumedRed;
+ otfSubsumedLitsGained -= other.otfSubsumedLitsGained;
+ cache_hit -= other.cache_hit;
+ red_cl_in_which0 -= other.red_cl_in_which0;
+
+ //Hyper-bin & transitive reduction
+ advancedPropCalled -= other.advancedPropCalled;
+ hyperBinAdded -= other.hyperBinAdded;
+ transReduRemIrred -= other.transReduRemIrred;
+ transReduRemRed -= other.transReduRemRed;
+
+ //Stat structs
+ resolvs -= other.resolvs;
+ conflStats -= other.conflStats;
+
+ //Time
+ cpu_time -= other.cpu_time;
+
+ return *this;
+}
+
+SearchStats SearchStats::operator-(const SearchStats& other) const
+{
+ SearchStats result = *this;
+ result -= other;
+ return result;
+}
+
+void SearchStats::printCommon(uint64_t props, bool do_print_times) const
+{
+ print_stats_line("c restarts"
+ , numRestarts
+ , float_div(conflStats.numConflicts, numRestarts)
+ , "confls per restart"
+
+ );
+ print_stats_line("c blocked restarts"
+ , blocked_restart
+ , float_div(blocked_restart, numRestarts)
+ , "per normal restart"
+
+ );
+ if (do_print_times)
+ print_stats_line("c time", cpu_time);
+ print_stats_line("c decisions", decisions
+ , stats_line_percent(decisionsRand, decisions)
+ , "% random"
+ );
+
+ print_stats_line("c propagations", props);
+
+ print_stats_line("c decisions/conflicts"
+ , float_div(decisions, conflStats.numConflicts)
+ );
+}
+
+void SearchStats::print_short(uint64_t props, bool do_print_times) const
+{
+ //Restarts stats
+ printCommon(props, do_print_times);
+ conflStats.print_short(cpu_time, do_print_times);
+
+ print_stats_line("c conf lits non-minim"
+ , litsRedNonMin
+ , float_div(litsRedNonMin, conflStats.numConflicts)
+ , "lit/confl"
+ );
+
+ print_stats_line("c conf lits final"
+ , float_div(litsRedFinal, conflStats.numConflicts)
+ );
+
+ print_stats_line("c cache hit re-learnt cl"
+ , cache_hit
+ , stats_line_percent(cache_hit, conflStats.numConflicts)
+ , "% of confl"
+ );
+
+ print_stats_line("c red which0"
+ , red_cl_in_which0
+ , stats_line_percent(red_cl_in_which0, conflStats.numConflicts)
+ , "% of confl"
+ );
+}
+
+void SearchStats::print(uint64_t props, bool do_print_times) const
+{
+ printCommon(props, do_print_times);
+ conflStats.print(cpu_time, do_print_times);
+
+ /*assert(numConflicts
+ == conflsBin + conflsTri + conflsLongIrred + conflsLongRed);*/
+
+ cout << "c LEARNT stats" << endl;
+ print_stats_line("c units learnt"
+ , learntUnits
+ , stats_line_percent(learntUnits, conflStats.numConflicts)
+ , "% of conflicts");
+
+ print_stats_line("c bins learnt"
+ , learntBins
+ , stats_line_percent(learntBins, conflStats.numConflicts)
+ , "% of conflicts");
+
+ print_stats_line("c long learnt"
+ , learntLongs
+ , stats_line_percent(learntLongs, conflStats.numConflicts)
+ , "% of conflicts"
+ );
+
+ print_stats_line("c otf-subs"
+ , otfSubsumed
+ , ratio_for_stat(otfSubsumed, conflStats.numConflicts)
+ , "/conflict"
+ );
+
+ print_stats_line("c otf-subs implicit"
+ , otfSubsumedImplicit
+ , stats_line_percent(otfSubsumedImplicit, otfSubsumed)
+ , "%"
+ );
+
+ print_stats_line("c otf-subs long"
+ , otfSubsumedLong
+ , stats_line_percent(otfSubsumedLong, otfSubsumed)
+ , "%"
+ );
+
+ print_stats_line("c otf-subs learnt"
+ , otfSubsumedRed
+ , stats_line_percent(otfSubsumedRed, otfSubsumed)
+ , "% otf subsumptions"
+ );
+
+ print_stats_line("c otf-subs lits gained"
+ , otfSubsumedLitsGained
+ , ratio_for_stat(otfSubsumedLitsGained, otfSubsumed)
+ , "lits/otf subsume"
+ );
+
+ print_stats_line("c cache hit re-learnt cl"
+ , cache_hit
+ , stats_line_percent(cache_hit, conflStats.numConflicts)
+ , "% of confl"
+ );
+
+ print_stats_line("c red which0"
+ , red_cl_in_which0
+ , stats_line_percent(red_cl_in_which0, conflStats.numConflicts)
+ , "% of confl"
+ );
+
+ cout << "c SEAMLESS HYPERBIN&TRANS-RED stats" << endl;
+ print_stats_line("c advProp called"
+ , advancedPropCalled
+ );
+ print_stats_line("c hyper-bin add bin"
+ , hyperBinAdded
+ , ratio_for_stat(hyperBinAdded, advancedPropCalled)
+ , "bin/call"
+ );
+ print_stats_line("c trans-red rem irred bin"
+ , transReduRemIrred
+ , ratio_for_stat(transReduRemIrred, advancedPropCalled)
+ , "bin/call"
+ );
+ print_stats_line("c trans-red rem red bin"
+ , transReduRemRed
+ , ratio_for_stat(transReduRemRed, advancedPropCalled)
+ , "bin/call"
+ );
+
+ cout << "c CONFL LITS stats" << endl;
+ print_stats_line("c orig "
+ , litsRedNonMin
+ , ratio_for_stat(litsRedNonMin, conflStats.numConflicts)
+ , "lit/confl"
+ );
+
+ print_stats_line("c recurs-min effective"
+ , recMinCl
+ , stats_line_percent(recMinCl, conflStats.numConflicts)
+ , "% attempt successful"
+ );
+
+ print_stats_line("c recurs-min lits"
+ , recMinLitRem
+ , stats_line_percent(recMinLitRem, litsRedNonMin)
+ , "% less overall"
+ );
+
+ print_stats_line("c permDiff call%"
+ , stats_line_percent(permDiff_attempt, conflStats.numConflicts)
+ , stats_line_percent(permDiff_success, permDiff_attempt)
+ , "% attempt successful"
+ );
+
+ print_stats_line("c permDiff lits-rem"
+ , permDiff_rem_lits
+ , ratio_for_stat(permDiff_rem_lits, permDiff_attempt)
+ , "less lits/cl on attempts"
+ );
+
+
+ print_stats_line("c further-min call%"
+ , stats_line_percent(furtherShrinkAttempt, conflStats.numConflicts)
+ , stats_line_percent(furtherShrinkedSuccess, furtherShrinkAttempt)
+ , "% attempt successful"
+ );
+
+ print_stats_line("c bintri-min lits"
+ , binTriShrinkedClause
+ , stats_line_percent(binTriShrinkedClause, litsRedNonMin)
+ , "% less overall"
+ );
+
+ print_stats_line("c cache-min lits"
+ , cacheShrinkedClause
+ , stats_line_percent(cacheShrinkedClause, litsRedNonMin)
+ , "% less overall"
+ );
+
+ print_stats_line("c stamp-min call%"
+ , stats_line_percent(stampShrinkAttempt, conflStats.numConflicts)
+ , stats_line_percent(stampShrinkCl, stampShrinkAttempt)
+ , "% attempt successful"
+ );
+
+ print_stats_line("c stamp-min lits"
+ , stampShrinkLit
+ , stats_line_percent(stampShrinkLit, litsRedNonMin)
+ , "% less overall"
+ );
+
+ print_stats_line("c final avg"
+ , ratio_for_stat(litsRedFinal, conflStats.numConflicts)
+ );
+
+ //General stats
+ //print_stats_line("c Memory used", (double)mem_used / 1048576.0, " MB");
+ #if !defined(_MSC_VER) && defined(RUSAGE_THREAD)
+ print_stats_line("c single-thread CPU time", cpu_time, " s");
+ #else
+ print_stats_line("c all-threads sum CPU time", cpu_time, " s");
+ #endif
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h b/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
new file mode 100644
index 000000000..1c6ce2fff
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/searchstats.h
@@ -0,0 +1,116 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SEARCHSTATS_H__
+#define __SEARCHSTATS_H__
+
+#include <cstdint>
+
+#include "solvertypes.h"
+#include "clause.h"
+
+namespace CMSat {
+
+class SearchStats
+{
+public:
+ void clear()
+ {
+ SearchStats tmp;
+ *this = tmp;
+ }
+
+ SearchStats& operator+=(const SearchStats& other);
+ SearchStats& operator-=(const SearchStats& other);
+ SearchStats operator-(const SearchStats& other) const;
+ void printCommon(uint64_t props, bool do_print_times) const;
+ void print_short(uint64_t props, bool do_print_times) const;
+ void print(uint64_t props, bool do_print_times) const;
+
+ //Restart stats
+ uint64_t blocked_restart = 0;
+ uint64_t blocked_restart_same = 0;
+ uint64_t numRestarts = 0;
+
+ //Decisions
+ uint64_t decisions = 0;
+ uint64_t decisionsAssump = 0;
+ uint64_t decisionsRand = 0;
+ uint64_t decisionFlippedPolar = 0;
+
+ //Clause shrinking
+ uint64_t litsRedNonMin = 0;
+ uint64_t litsRedFinal = 0;
+ uint64_t recMinCl = 0;
+ uint64_t recMinLitRem = 0;
+ uint64_t permDiff_attempt = 0;
+ uint64_t permDiff_success = 0;
+ uint64_t permDiff_rem_lits = 0;
+
+ uint64_t furtherShrinkAttempt = 0;
+ uint64_t binTriShrinkedClause = 0;
+ uint64_t cacheShrinkedClause = 0;
+ uint64_t furtherShrinkedSuccess = 0;
+ uint64_t stampShrinkAttempt = 0;
+ uint64_t stampShrinkCl = 0;
+ uint64_t stampShrinkLit = 0;
+ uint64_t moreMinimLitsStart = 0;
+ uint64_t moreMinimLitsEnd = 0;
+ uint64_t recMinimCost = 0;
+
+ //Learnt clause stats
+ uint64_t learntUnits = 0;
+ uint64_t learntBins = 0;
+ uint64_t learntLongs = 0;
+ uint64_t otfSubsumed = 0;
+ uint64_t otfSubsumedImplicit = 0;
+ uint64_t otfSubsumedLong = 0;
+ uint64_t otfSubsumedRed = 0;
+ uint64_t otfSubsumedLitsGained = 0;
+ uint64_t cache_hit = 0;
+ uint64_t red_cl_in_which0 = 0;
+
+ //Hyper-bin & transitive reduction
+ uint64_t advancedPropCalled = 0;
+ uint64_t hyperBinAdded = 0;
+ uint64_t transReduRemIrred = 0;
+ uint64_t transReduRemRed = 0;
+
+ //SolveFeatures
+ uint64_t num_xors_found_last = 0;
+ uint64_t num_gates_found_last = 0;
+ uint64_t clauseID_at_start_inclusive = 0;
+ uint64_t clauseID_at_end_exclusive = 0;
+
+ //Resolution Stats
+ AtecedentData<uint64_t> resolvs;
+
+ //Stat structs
+ ConflStats conflStats;
+
+ //Time
+ double cpu_time = 0.0;
+};
+
+}
+
+#endif //__SEARCHSTATS_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h b/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
new file mode 100644
index 000000000..9ecd249a0
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/shareddata.h
@@ -0,0 +1,93 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SHARED_DATA_H
+#define SHARED_DATA_H
+
+#include "cryptominisat5/solvertypesmini.h"
+
+#include <vector>
+#include <mutex>
+using std::vector;
+using std::mutex;
+
+namespace CMSat {
+
+class SharedData
+{
+ public:
+ SharedData(const uint32_t _num_threads) :
+ num_threads(_num_threads)
+ {}
+
+ struct Spec {
+ Spec() :
+ data(new vector<Lit>)
+ {}
+
+ Spec(const Spec&) {
+ assert(false);
+ }
+ Spec(Spec&& other)
+ #ifndef _MSC_VER
+ noexcept
+ #endif
+ :
+ data(std::move(other.data))
+ {
+ other.data = NULL;
+ }
+ ~Spec() {
+ clear();
+ }
+ vector<Lit>* data = NULL;
+
+ void clear()
+ {
+ delete data;
+ data = NULL;
+ }
+ };
+ vector<lbool> value;
+ vector<Spec> bins;
+ std::mutex unit_mutex;
+ std::mutex bin_mutex;
+
+ uint32_t num_threads;
+
+ size_t calc_memory_use_bins()
+ {
+ size_t mem = 0;
+ mem += bins.capacity()*sizeof(Spec);
+ for(size_t i = 0; i < bins.size(); i++) {
+ if (bins[i].data) {
+ mem += bins[i].data->capacity()*sizeof(Lit);
+ mem += sizeof(vector<Lit>);
+ }
+ }
+ return mem;
+ }
+};
+
+}
+
+#endif //SHARED_DATA_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/signalcode.cpp b/cryptominisat5/cryptominisat-5.6.3/src/signalcode.cpp
new file mode 100644
index 000000000..475185536
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/signalcode.cpp
@@ -0,0 +1,69 @@
+/*
+Copyright (c) 2010-2015 Mate Soos
+Copyright (c) Kuldeep S. Meel, Daniel J. Fremont
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#include "signalcode.h"
+#include "cryptominisat5/cryptominisat.h"
+#if !defined (_MSC_VER)
+#include <unistd.h>
+#endif
+
+
+using namespace CMSat;
+
+SATSolver* solverToInterrupt;
+int need_clean_exit;
+std::string redDumpFname;
+std::string irredDumpFname;
+
+using std::cout;
+using std::endl;
+
+void SIGINT_handler(int)
+{
+ SATSolver* solver = solverToInterrupt;
+ cout << "c " << endl;
+ std::cerr << "*** INTERRUPTED ***" << endl;
+ if (!redDumpFname.empty() || !irredDumpFname.empty() || need_clean_exit) {
+ solver->interrupt_asap();
+ std::cerr
+ << "*** Please wait. We need to interrupt cleanly" << endl
+ << "*** This means we might need to finish some calculations"
+ << endl;
+ } else {
+ if (solver->nVars() > 0) {
+ //if (conf.verbosity) {
+ solver->add_in_partial_solving_stats();
+ solver->print_stats();
+ //}
+ } else {
+ cout
+ << "No clauses or variables were put into the solver, exiting without stats"
+ << endl;
+ }
+ #if defined (_MSC_VER)
+ exit(1);
+ #else
+ _exit(1);
+ #endif
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/signalcode.h b/cryptominisat5/cryptominisat-5.6.3/src/signalcode.h
new file mode 100644
index 000000000..11f2b1fce
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/signalcode.h
@@ -0,0 +1,40 @@
+/*
+Copyright (c) 2010-2015 Mate Soos
+Copyright (c) Kuldeep S. Meel, Daniel J. Fremont
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#ifndef SIGNALCODE_H_
+#define SIGNALCODE_H_
+
+#include <string>
+
+namespace CMSat {
+ class SATSolver;
+}
+using namespace CMSat;
+
+extern SATSolver* solverToInterrupt;
+extern int need_clean_exit;
+extern std::string redDumpFname;
+extern std::string irredDumpFname;
+void SIGINT_handler(int);
+
+#endif //SIGNALCODE_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h b/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
new file mode 100644
index 000000000..43af2ad06
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/simplefile.h
@@ -0,0 +1,173 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SIMPLEFILE_H__
+#define __SIMPLEFILE_H__
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <cstdint>
+using std::ios;
+
+#include "solvertypes.h"
+
+namespace CMSat {
+
+class SimpleOutFile
+{
+public:
+ void start(const string& fname)
+ {
+ outf = new std::ofstream(fname.c_str(), ios::out | ios::binary);
+ outf->exceptions(~std::ios::goodbit);
+ //buffer.resize(100000000);
+ //outf->rdbuf()->pubsetbuf(&buffer.front(), buffer.size());
+ }
+
+ ~SimpleOutFile()
+ {
+ delete outf;
+ }
+
+ void put_uint32_t(const uint32_t val)
+ {
+ put(&val, 4);
+ }
+
+ void put_lbool(const lbool val)
+ {
+ put(&val, sizeof(lbool));
+ }
+
+ void put_uint64_t(const uint64_t val)
+ {
+ put(&val, 8);
+ }
+
+ void put_lit(const Lit l)
+ {
+ put_uint32_t(l.toInt());
+ }
+
+ template<class T>
+ void put_vector(const vector<T>& d)
+ {
+ put_uint64_t(d.size());
+ if (d.size() == 0)
+ return;
+
+ put(&d[0], d.size() * sizeof(T));
+ }
+
+ template<class T>
+ void put_struct(const T& d)
+ {
+ put(&d, sizeof(T));
+ }
+
+private:
+ std::ofstream* outf = NULL;
+ //vector<char> buffer;
+
+ void put(const void* ptr, size_t num)
+ {
+ outf->write((const char*)ptr, num);
+ }
+};
+
+class SimpleInFile
+{
+public:
+ void start(const string& fname)
+ {
+ try {
+ inf = new std::ifstream(fname.c_str(), ios::in | ios::binary);
+ inf->exceptions(~std::ios::goodbit);
+ } catch (...) {
+ cout << "Error opening file " << fname.c_str() << endl;
+ exit(-1);
+ }
+ }
+
+ ~SimpleInFile()
+ {
+ delete inf;
+ }
+
+ uint32_t get_uint32_t()
+ {
+ uint32_t val = 0;
+ inf->read((char*)&val, 4);
+ return val;
+ }
+
+ uint64_t get_uint64_t()
+ {
+ uint64_t val = 0;
+ inf->read((char*)&val, 8);
+ return val;
+ }
+
+ Lit get_lit()
+ {
+ uint32_t l = get_uint32_t();
+ return Lit::toLit(l);
+ }
+
+ lbool get_lbool()
+ {
+ lbool l;
+ inf->read((char*)&l, sizeof(lbool));
+ return l;
+ }
+
+ template<class T>
+ void get_vector(vector<T>& d)
+ {
+ assert(d.empty());
+ uint64_t sz = get_uint64_t();
+ if (sz == 0)
+ return;
+
+ d.resize(sz);
+ get_raw(&d[0], d.size(), sizeof(T));
+ }
+
+ template<class T>
+ void get_struct(T& d)
+ {
+ inf->read((char*)&d, sizeof(T));
+ }
+
+private:
+ std::ifstream* inf = NULL;
+
+ void get_raw(void* ptr, size_t num, size_t elem_sz)
+ {
+ inf->read((char*)ptr, num*elem_sz);
+ }
+};
+
+}
+
+#endif //__SIMPLEFILE_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
new file mode 100644
index 000000000..0f3e436ff
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.cpp
@@ -0,0 +1,214 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solutionextender.h"
+#include "solver.h"
+#include "varreplacer.h"
+#include "occsimplifier.h"
+
+//#define VERBOSE_DEBUG_SOLUTIONEXTENDER
+
+using namespace CMSat;
+
+SolutionExtender::SolutionExtender(Solver* _solver, OccSimplifier* _simplifier) :
+ solver(_solver)
+ , simplifier(_simplifier)
+{
+}
+
+void SolutionExtender::extend()
+{
+ if (solver->conf.verbosity >= 10) {
+ cout << "c Exteding solution -- SolutionExtender::extend()" << endl;
+ }
+
+ //Extend variables already set
+ solver->varReplacer->extend_model_already_set();
+
+ if (simplifier) {
+ simplifier->extend_model(this);
+ }
+
+ //cout << "aft simp unset : " << count_num_unset_model() << endl;
+
+ //clause has been added with "lit, ~lit" so var must be set
+ for(size_t i = 0; i < solver->undef_must_set_vars.size(); i++) {
+ if (solver->undef_must_set_vars[i]
+ && solver->model_value(i) == l_Undef
+ ) {
+ //any setting would work, let's set to l_False (MiniSat default)
+ solver->model[i] = l_False;
+ }
+ }
+
+ //All variables, not just those set
+ solver->varReplacer->extend_model_set_undef();
+}
+
+inline bool SolutionExtender::satisfied(const vector< Lit >& lits) const
+{
+ for(const Lit lit: lits) {
+ if (solver->model_value(lit) == l_True)
+ return true;
+ }
+
+ return false;
+}
+
+void SolutionExtender::dummyBlocked(const uint32_t blockedOn)
+{
+ #ifdef VERBOSE_DEBUG_SOLUTIONEXTENDER
+ cout
+ << "dummy blocked lit (outer) "
+ << blockedOn + 1
+ << endl;
+ #endif
+
+ #ifdef SLOW_DEBUG
+ const uint32_t blockedOn_inter = solver->map_outer_to_inter(blockedOn);
+ assert(solver->varData[blockedOn_inter].removed == Removed::elimed);
+ #endif
+
+ //Blocked clauses set its value already
+ if (solver->model_value(blockedOn) != l_Undef)
+ return;
+
+
+ //If var is replacing something else, it MUST be set.
+ if (solver->varReplacer->var_is_replacing(blockedOn)) {
+ //Picking l_False because MiniSat likes False solutions. Could pick anything.
+ solver->model[blockedOn] = l_False;
+ solver->varReplacer->extend_model(blockedOn);
+ }
+
+ solver->model[blockedOn] = l_False;
+}
+
+bool SolutionExtender::addClause(const vector<Lit>& lits, const uint32_t blockedOn)
+{
+ #ifdef VERBOSE_DEBUG_SOLUTIONEXTENDER
+ cout
+ << "outer clause: "
+ << lits
+ << endl;
+ #endif
+
+ #ifdef SLOW_DEBUG
+ const uint32_t blocked_on_inter = solver->map_outer_to_inter(blockedOn);
+ assert(solver->varData[blocked_on_inter].removed == Removed::elimed);
+ assert(contains_var(lits, blockedOn));
+ #endif
+
+ //Note: we need to do this even if solver->conf.greedy_undef is FALSE
+ //because the solution we are given (when used as a preprocessor)
+ //may not be full
+
+ //Try to extend through setting variables that have been blocked but
+ //were not required to be set until now
+ /*for(Lit l: lits) {
+ if (solver->model_value(l) == l_Undef
+ && var_has_been_blocked[l.var()]
+ ) {
+ solver->model[l.var()] = l.sign() ? l_False : l_True;
+ solver->varReplacer->extend_model(l.var());
+ return false;
+ }
+ }*/
+
+ //Try to set var that hasn't been set
+// for(Lit l: lits) {
+// uint32_t v_inter = solver->map_outer_to_inter(l.var());
+// if (solver->model_value(l) == l_Undef
+// && solver->varData[v_inter].removed == Removed::none
+// ) {
+// solver->model[l.var()] = l.sign() ? l_False : l_True;
+// solver->varReplacer->extend_model(l.var());
+// return false;
+// }
+// }
+
+ if (solver->conf.verbosity >= 10) {
+ for(Lit lit: lits) {
+ Lit lit_inter = solver->map_outer_to_inter(lit);
+ cout
+ << lit << ": " << solver->model_value(lit)
+ << "(elim: " << removed_type_to_string(solver->varData[lit_inter.var()].removed) << ")"
+ << ", ";
+ }
+ cout << "blocked on: " << blockedOn+1 << endl;
+ }
+
+ if (solver->model_value(blockedOn) != l_Undef) {
+ cout << "ERROR: Model value for var " << blockedOn+1 << " is "
+ << solver->model_value(blockedOn)
+ << " but that doesn't satisfy a v-elim clause on the stack!"
+ << " clause is: " << lits
+ << endl;
+
+ for(Lit l: lits) {
+ uint32_t v_inter = solver->map_outer_to_inter(l.var());
+ cout << "Value of " << l << " : " << solver-> model_value(l)
+ << " removed: " << removed_type_to_string(solver->varData[v_inter].removed)
+ << endl;
+ }
+ }
+ assert(solver->model_value(blockedOn) == l_Undef);
+ Lit actual_lit = lit_Undef;
+ for(Lit l: lits) {
+ if (l.var() == blockedOn) {
+ actual_lit = l;
+ break;
+ }
+ }
+ assert(actual_lit != lit_Undef);
+ solver->model[blockedOn] = actual_lit.sign() ? l_False : l_True;
+ if (solver->conf.verbosity >= 10) {
+ cout << "Extending VELIM cls. -- setting model for var "
+ << blockedOn + 1 << " to " << solver->model[blockedOn] << endl;
+ }
+ solver->varReplacer->extend_model(blockedOn);
+
+ assert(satisfied(lits));
+
+ //it's been set now
+ return true;
+}
+
+size_t SolutionExtender::count_num_unset_model() const
+{
+ size_t num_unset = 0;
+ if (solver->conf.independent_vars) {
+ for(size_t i = 0; i < solver->conf.independent_vars->size(); i++) {
+ uint32_t var = (*solver->conf.independent_vars)[i];
+ if (solver->model_value(var) == l_Undef) {
+ num_unset++;
+ }
+ }
+ } else {
+ for(size_t i = 0; i < solver->nVars(); i++) {
+ if (solver->model_value(i) == l_Undef) {
+ num_unset++;
+ }
+ }
+ }
+ return num_unset;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
new file mode 100644
index 000000000..03b8b1b82
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender.h
@@ -0,0 +1,73 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SOLUTIONEXTENDER_H__
+#define __SOLUTIONEXTENDER_H__
+
+#include "solvertypes.h"
+#include "clause.h"
+#include "watcharray.h"
+
+namespace CMSat {
+
+#ifdef VERBOSE_DEBUG
+#define VERBOSE_DEBUG_RECONSTRUCT
+#endif
+
+class Solver;
+class OccSimplifier;
+
+class SolutionExtender
+{
+ public:
+ SolutionExtender(Solver* _solver, OccSimplifier* simplifier);
+ void extend();
+ bool addClause(const vector<Lit>& lits, const uint32_t blockedOn);
+ void dummyBlocked(const uint32_t blockedOn);
+
+ private:
+ Solver* solver;
+ OccSimplifier* simplifier;
+
+ size_t count_num_unset_model() const;
+ bool satisfied(const vector<Lit>& lits) const;
+ bool contains_var(
+ const vector<Lit>& lits
+ , const uint32_t tocontain
+ ) const;
+};
+
+inline bool SolutionExtender::contains_var(
+ const vector<Lit>& lits
+ , const uint32_t tocontain
+) const {
+ for(const Lit lit: lits) {
+ if (lit.var() == tocontain)
+ return true;
+ }
+
+ return false;
+}
+
+} //end namespace
+
+#endif //__SOLUTIONEXTENDER_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-cpp b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-cpp
new file mode 100644
index 000000000..b4ed45cca
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-cpp
@@ -0,0 +1,389 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solutionextender.h"
+#include "varreplacer.h"
+#include "occsimplifier.h"
+#include "solver.h"
+#include "completedetachreattacher.h"
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+SolutionExtender::SolutionExtender(
+ Solver* _solver
+ , const vector<lbool>& _solution
+) :
+ solver(_solver)
+ , qhead (0)
+ , assigns(_solution)
+{
+ solver->model.resize(nVarsOuter(), l_Undef);
+ for (uint32_t var = 0; var < nVarsOuter(); var++) {
+ solver->model[var] = value(var);
+ }
+ release_assert(solver->verify_model());
+}
+
+/**
+@brief Extends a SAT solution to the full solution
+
+variable elimination, variable replacement, sub-part solving, etc. all need to
+be handled correctly to arrive at a solution that is a solution to ALL of the
+original problem, not just of what remained of it at the end inside this class
+(i.e. we need to combine things from the helper classes)
+*/
+void SolutionExtender::extend()
+{
+ if (solver->conf.verbosity >= 3) {
+ cout << "c Extending solution" << endl;
+ }
+
+ assert(clausesToFree.empty());
+
+ //First detach all long clauses
+ CompleteDetachReatacher detachReattach(solver);
+ detachReattach.detach_nonbins_nontris();
+
+ //Make watches large enough to fit occur of all
+ solver->watches.resize(nVarsOuter()*2);
+
+ //Sanity check
+ if (solver->occsimplifier) {
+ solver->occsimplifier->check_elimed_vars_are_unassignedAndStats();
+ }
+
+ //Adding binary clauses representing equivalent literals
+ if (solver->conf.verbosity >= 3) {
+ cout << "c Adding equivalent literals" << endl;
+ }
+ solver->varReplacer->extend_model(this);
+
+ if (solver->conf.verbosity >= 3) {
+ cout << "c Picking braches and propagating" << endl;
+ }
+
+ //Pick branches as long as we can
+ for (uint32_t var = 0; var < nVarsOuter(); var++) {
+ if (value(var) == l_Undef
+ //Don't pick replaced variables
+ && solver->varData[var].removed != Removed::replaced
+ ) {
+ Lit toEnqueue = Lit(var, false);
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "c Picking lit for reconstruction: " << toEnqueue << endl;
+ #endif
+ enqueue(toEnqueue);
+
+ const bool OK = propagate();
+ if (!OK) {
+ cout
+ << "Error while picking lit " << toEnqueue
+ << " and propagating after solution reconstruction"
+ << endl;
+ assert(false);
+
+ std::exit(-1);
+ }
+ }
+ }
+
+ if (solver->conf.verbosity >= 3) {
+ cout << "c Adding blocked clauses" << endl;
+ }
+ if (solver->occsimplifier) {
+ solver->occsimplifier->extend_model(this);
+ }
+
+ //Copy&check model
+ solver->model.resize(nVarsOuter(), l_Undef);
+ for (uint32_t var = 0; var < nVarsOuter(); var++) {
+ solver->model[var] = value(var);
+ }
+
+ release_assert(solver->verify_model());
+
+ //free clauses
+ for (vector<ClOffset>::iterator
+ it = clausesToFree.begin(), end = clausesToFree.end()
+ ; it != end
+ ; ++it
+ ) {
+ solver->cl_alloc.clauseFree(*it);
+ }
+ clausesToFree.clear();
+
+ //Reset watch size to smaller one
+ solver->watches.resize(solver->nVars()*2);
+
+ //Remove occur, go back to 0, and
+ detachReattach.detach_nonbins_nontris();
+ solver->cancelUntil(0);
+ detachReattach.reattachLongs();
+}
+
+bool SolutionExtender::satisfiedNorm(const vector<Lit>& lits) const
+{
+ for (vector<Lit>::const_iterator
+ it = lits.begin(), end = lits.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (value(*it) == l_True)
+ return true;
+ }
+
+ return false;
+}
+
+bool SolutionExtender::satisfiedXor(const vector<Lit>& lits, const bool rhs) const
+{
+ bool val = false;
+ uint32_t undef = 0;
+ for (vector<Lit>::const_iterator it = lits.begin(), end = lits.end(); it != end; ++it) {
+ assert(it->unsign() == *it);
+ if (value(it->var()) == l_True) val ^= true;
+ if (value(it->var()) == l_Undef) undef++;
+ }
+ return (undef > 0 || val == rhs);
+}
+
+bool SolutionExtender::addClause(
+ const vector< Lit >& givenLits
+ , const Lit blockedOn
+) {
+ tmpLits = givenLits;
+
+ //Remove lits set at 0-level or return TRUE if any is set to TRUE at 0-level
+ vector<Lit>::iterator i = tmpLits.begin();
+ vector<Lit>::iterator j = i;
+ for (vector<Lit>::iterator end = tmpLits.end(); i != end; i++) {
+ if (value(*i) == l_True && solver->varData[i->var()].level == 0) {
+ return true;
+ }
+
+ if (value(*i) == l_False && solver->varData[i->var()].level == 0) {
+ continue;
+ }
+
+ *j++ = *i;
+ }
+ tmpLits.resize(tmpLits.size()-(i-j));
+
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "c Adding extend clause: " << tmpLits << " blocked on: " << blockedOn << endl;
+ #endif
+
+ //Empty clause, oops!
+ if (tmpLits.empty())
+ return false;
+
+ //Create new clause, and add it
+ Clause* cl = solver->cl_alloc.Clause_new(
+ tmpLits //the literals
+ , 0 //the time it was created -- useless, ignoring
+ );
+ ClOffset offset = solver->cl_alloc.get_offset(cl);
+ clausesToFree.push_back(offset);
+ for (vector<Lit>::const_iterator
+ it = tmpLits.begin(), end = tmpLits.end()
+ ; it != end
+ ; ++it
+ ) {
+ //Special used of blocked Lit -- for blocking, but not in the same
+ //sense as the original
+ solver->watches[it->toInt()].push(Watched(offset, blockedOn));
+ }
+
+ propagateCl(cl, blockedOn);
+ if (!propagate()) {
+ assert(false);
+ return false;
+ }
+
+ return true;
+}
+
+inline bool SolutionExtender::prop_bin_cl(
+ Watched*& i
+ , const Lit p
+) {
+ const lbool val = value(i->lit2());
+ if (val == l_Undef) {
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout
+ << "c Due to cl "
+ << ~p << ", " << i->lit2()
+ << " propagate enqueueing "
+ << i->lit2() << endl;
+ #endif
+ enqueue(i->lit2());
+ } else if (val == l_False){
+ return false;
+ }
+
+ return true;
+}
+
+bool SolutionExtender::propagate()
+{
+ bool ret = true;
+ while(qhead < trail.size()) {
+ const Lit p = trail[qhead++];
+ watch_subarray_const ws = solver->watches[~p];
+ for(const Watched*
+ it = ws.begin(), end = ws.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (it->isBin() && !it->red()) {
+ bool thisret = prop_bin_cl(it, p);
+ ret &= thisret;
+ if (!thisret) {
+ cout
+ << "Problem with implicit binary clause: "
+ << ~p
+ << ", " << it->lit2()
+ << endl;
+ }
+
+ continue;
+ }
+
+ if (it->isClause()) {
+ ClOffset offset = it->get_offset();
+ const Clause* cl = solver->cl_alloc.ptr(offset);
+ const Lit blockedOn = it->getBlockedLit();
+ const bool thisRet = propagateCl(cl, blockedOn);
+ if (!thisRet) {
+ cout << "Problem with clause: " << (*it) << endl;
+ }
+ ret &= thisRet;
+ }
+ }
+ }
+
+ return ret;
+}
+
+bool SolutionExtender::propagateCl(
+ const Clause* cl
+ , const Lit blockedOn
+) {
+ size_t numUndef = 0;
+ Lit lastUndef = lit_Undef;
+ for (const Lit
+ *it = cl->begin(), *end = cl->end()
+ ; it != end
+ ; ++it
+ ) {
+ if (value(*it) == l_True) return true;
+ if (value(*it) == l_False) continue;
+
+ assert(value(*it) == l_Undef);
+ numUndef++;
+
+ //Doesn't propagate anything
+ if (numUndef > 1)
+ break;
+
+ lastUndef = *it;
+ }
+
+ //Must set this one value
+ if (numUndef == 1) {
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "c Due to cl " << *cl << " propagate enqueueing " << lastUndef << endl;
+ #endif
+ enqueue(lastUndef);
+ }
+
+ if (numUndef >= 1)
+ return true;
+
+ //Must flip
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout
+ << "Flipping lit " << blockedOn
+ << " due to clause " << *cl << endl;
+ #endif
+ assert(blockedOn != lit_Undef);
+
+ if (solver->varData[blockedOn.var()].level == 0) {
+ cout
+ << "!! Flip 0-level var:"
+ << solver->map_inter_to_outer(blockedOn.var()) + 1
+ << endl;
+ }
+
+ assert(
+ (solver->varData[blockedOn.var()].level != 0
+ //|| solver->varData[blockedOn.var()].removed == Removed::decomposed
+ )
+ && "We cannot flip 0-level vars"
+ );
+ enqueue(blockedOn);
+ replaceSet(blockedOn);
+ return true;
+}
+
+void SolutionExtender::enqueue(const Lit lit)
+{
+ assigns[lit.var()] = boolToLBool(!lit.sign());
+ trail.push_back(lit);
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "c Enqueueing lit " << lit << " during solution reconstruction" << endl;
+ #endif
+ solver->varData[lit.var()].level = std::numeric_limits< uint32_t >::max();
+}
+
+void SolutionExtender::replaceSet(Lit toSet)
+{
+ //set forward equivalent
+ if (solver->varReplacer->isReplaced(toSet)) {
+ assert(false && "Cannot use isReplaced from outside of solver!!!!");
+ toSet = solver->varReplacer->get_lit_replaced_with(toSet);
+ enqueue(toSet);
+ }
+ replaceBackwardSet(toSet);
+
+ #ifdef VERBOSE_DEBUG_RECONSTRUCT
+ cout << "c recursive set(s) done." << endl;
+ #endif
+}
+
+void SolutionExtender::replaceBackwardSet(const Lit toSet)
+{
+ //set backward equiv
+ map<uint32_t, vector<uint32_t> >::const_iterator revTable = solver->varReplacer->getReverseTable().find(toSet.var());
+ if (revTable != solver->varReplacer->getReverseTable().end()) {
+ const vector<uint32_t>& toGoThrough = revTable->second;
+ for (size_t i = 0; i < toGoThrough.size(); i++) {
+ //Get sign of replacement
+ const Lit lit = Lit(toGoThrough[i], false);
+ Lit tmp = solver->varReplacer->get_lit_replaced_with(lit);
+
+ //Set var
+ enqueue(lit ^ tmp.sign() ^ toSet.sign());
+ }
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-h b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-h
new file mode 100644
index 000000000..83f3c0d22
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solutionextender_old-h
@@ -0,0 +1,87 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SOLUTIONEXTENDER_H__
+#define __SOLUTIONEXTENDER_H__
+
+#include "solvertypes.h"
+#include "clause.h"
+#include "watcharray.h"
+
+namespace CMSat {
+
+#ifdef VERBOSE_DEBUG
+#define VERBOSE_DEBUG_RECONSTRUCT
+#endif
+
+class Solver;
+
+class SolutionExtender
+{
+ public:
+ SolutionExtender(Solver* _solver, const vector<lbool>& _assigns);
+ void extend();
+ bool addClause(const vector<Lit>& lits, const Lit blockedOn = lit_Undef);
+ void enqueue(const Lit lit);
+
+ lbool value(const Lit lit) const
+ {
+ return assigns[lit.var()] ^ lit.sign();
+ }
+
+ lbool value(const uint32_t var) const
+ {
+ return assigns[var];
+ }
+
+ private:
+ void replaceSet(Lit toSet);
+ void replaceBackwardSet(const Lit toSet);
+ bool propagateCl(const Clause* cl, const Lit blockedOn);
+ bool propagate();
+ bool prop_bin_cl(
+ Watched*& i
+ , const Lit p
+ );
+ bool satisfiedNorm(const vector<Lit>& lits) const;
+ bool satisfiedXor(const vector<Lit>& lits, const bool rhs) const;
+ Lit pickBranchLit();
+
+ uint32_t nVarsOuter() const
+ {
+ return assigns.size();
+ }
+
+ //To reduce mem alloc overhead
+ vector<Lit> tmpLits;
+
+
+ Solver* solver;
+ vector<ClOffset> clausesToFree;
+ uint32_t qhead;
+ vector<Lit> trail;
+ vector<lbool> assigns;
+};
+
+} //end namespace
+
+#endif //__SOLUTIONEXTENDER_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp b/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
new file mode 100644
index 000000000..6998f82d2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.cpp
@@ -0,0 +1,117 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solvefeatures.h"
+#include <iostream>
+using std::string;
+using std::cout;
+using std::endl;
+
+using namespace CMSat;
+
+
+void SolveFeatures::print_stats() const
+{
+ cout << "c [features] ";
+ cout << "numVars " << numVars << ", ";
+ cout << "numClauses " << numClauses << ", ";
+ cout << "var_cl_ratio " << var_cl_ratio << ", ";
+
+
+ //Clause distribution
+ cout << "binary " << binary << ", ";
+
+ cout << "horn " << horn << ", ";
+ cout << "horn_mean " << horn_mean << ", ";
+ cout << "horn_std " << horn_std << ", ";
+ cout << "horn_min " << horn_min << ", ";
+ cout << "horn_max " << horn_max << ", ";
+ cout << "horn_spread " << horn_spread << ", ";
+
+ cout << "vcg_var_mean " << vcg_var_mean << ", ";
+ cout << "vcg_var_std " << vcg_var_std << ", ";
+ cout << "vcg_var_min " << vcg_var_min << ", ";
+ cout << "vcg_var_max " << vcg_var_max << ", ";
+ cout << "vcg_var_spread " << vcg_var_spread << ", ";
+
+ cout << "vcg_cls_mean " << vcg_cls_mean << ", ";
+ cout << "vcg_cls_std " << vcg_cls_std << ", ";
+ cout << "vcg_cls_min " << vcg_cls_min << ", ";
+ cout << "vcg_cls_max " << vcg_cls_max << ", ";
+ cout << "vcg_cls_spread " << vcg_cls_spread << ", ";
+
+ cout << "pnr_var_mean " << pnr_var_mean << ", ";
+ cout << "pnr_var_std " << pnr_var_std << ", ";
+ cout << "pnr_var_min " << pnr_var_min << ", ";
+ cout << "pnr_var_max " << pnr_var_max << ", ";
+ cout << "pnr_var_spread " << pnr_var_spread << ", ";
+
+ cout << "pnr_cls_mean " << pnr_cls_mean << ", ";
+ cout << "pnr_cls_std " << pnr_cls_std << ", ";
+ cout << "pnr_cls_min " << pnr_cls_min << ", ";
+ cout << "pnr_cls_max " << pnr_cls_max << ", ";
+ cout << "pnr_cls_spread " << pnr_cls_spread << ", ";
+
+ //Conflicts
+ cout << "avg_confl_size " << avg_confl_size << ", ";
+ cout << "confl_size_min " << confl_size_min << ", ";
+ cout << "confl_size_max " << confl_size_max << ", ";
+ cout << "avg_confl_glue " << avg_confl_glue << ", ";
+ cout << "confl_glue_min " << confl_glue_min << ", ";
+ cout << "confl_glue_max " << confl_glue_max << ", ";
+ cout << "avg_num_resolutions " << avg_num_resolutions << ", ";
+ cout << "num_resolutions_min " << num_resolutions_min << ", ";
+ cout << "num_resolutions_max " << num_resolutions_max << ", ";
+ cout << "learnt_bins_per_confl " << learnt_bins_per_confl << ", ";
+
+ //Search
+ cout << "avg_branch_depth " << avg_branch_depth << ", ";
+ cout << "branch_depth_min " << branch_depth_min << ", ";
+ cout << "branch_depth_max " << branch_depth_max << ", ";
+ cout << "avg_trail_depth_delta " << avg_trail_depth_delta << ", ";
+ cout << "trail_depth_delta_min " << trail_depth_delta_min << ", ";
+ cout << "trail_depth_delta_max " << trail_depth_delta_max << ", ";
+ cout << "avg_branch_depth_delta " << avg_branch_depth_delta << ", ";
+ cout << "props_per_confl " << props_per_confl << ", ";
+ cout << "confl_per_restart " << confl_per_restart << ", ";
+ cout << "decisions_per_conflict " << decisions_per_conflict << ", ";
+
+ //distributions
+ irred_cl_distrib.print("irred_cl_distrib.");
+ red_cl_distrib.print("red_cl_distrib.");
+
+ cout << "num_gates_found_last " << num_gates_found_last << ", ";
+ cout << "num_xors_found_last " << num_xors_found_last;
+ cout << endl;
+}
+
+void SolveFeatures::Distrib::print(const string& pre_print) const
+{
+ cout << pre_print <<"glue_distr_mean " << glue_distr_mean << ", ";
+ cout << pre_print <<"glue_distr_var " << glue_distr_var << ", ";
+ cout << pre_print <<"size_distr_mean " << size_distr_mean << ", ";
+ cout << pre_print <<"size_distr_var " << size_distr_var << ", ";
+ cout << pre_print <<"uip_use_distr_mean " << 0 << ", ";
+ cout << pre_print <<"uip_use_distr_var " << 0 << ", ";
+ cout << pre_print <<"activity_distr_mean " << activity_distr_mean << ", ";
+ cout << pre_print <<"activity_distr_var " << activity_distr_var << ", ";
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h b/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
new file mode 100644
index 000000000..2bff24f4a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solvefeatures.h
@@ -0,0 +1,121 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SOLVE_FEATURES_H_
+#define SOLVE_FEATURES_H_
+
+#include <limits>
+#include <cstdint>
+#include <string>
+
+namespace CMSat {
+
+struct SolveFeatures
+{
+ void print_stats() const;
+
+ //Some parameter
+ double eps = 0.00001;
+
+ int numVars;
+ int numClauses;
+ double var_cl_ratio;
+
+ //Clause distribution
+ double binary = 0;
+ double horn = 0;
+ double horn_mean = 0;
+ double horn_std = 0;
+ double horn_min = std::numeric_limits<double>::max();
+ double horn_max = std::numeric_limits<double>::min();
+ double horn_spread;
+
+ double vcg_var_mean = 0;
+ double vcg_var_std = 0;
+ double vcg_var_min = std::numeric_limits<double>::max();
+ double vcg_var_max = std::numeric_limits<double>::min();
+ double vcg_var_spread;
+
+ double vcg_cls_mean = 0;
+ double vcg_cls_std = 0;
+ double vcg_cls_min = std::numeric_limits<double>::max();
+ double vcg_cls_max = std::numeric_limits<double>::min();
+ double vcg_cls_spread;
+
+ double pnr_var_mean = 0;
+ double pnr_var_std = 0;
+ double pnr_var_min = std::numeric_limits<double>::max();
+ double pnr_var_max = std::numeric_limits<double>::min();
+ double pnr_var_spread;
+
+ double pnr_cls_mean = 0;
+ double pnr_cls_std = 0;
+ double pnr_cls_min = std::numeric_limits<double>::max();
+ double pnr_cls_max = std::numeric_limits<double>::min();
+ double pnr_cls_spread;
+
+ //Conflict clauses
+ double avg_confl_size = 0.0;
+ double confl_size_min = 0.0;
+ double confl_size_max = 0.0;
+ double avg_confl_glue = 0.0;
+ double confl_glue_min = 0.0;
+ double confl_glue_max = 0.0;
+ double avg_num_resolutions = 0.0;
+ double num_resolutions_min = 0.0;
+ double num_resolutions_max = 0.0;
+ double learnt_bins_per_confl = 0;
+
+ //Search
+ double avg_branch_depth = 0.0;
+ double branch_depth_min = 0.0;
+ double branch_depth_max = 0.0;
+ double avg_trail_depth_delta = 0.0;
+ double trail_depth_delta_min = 0.0;
+ double trail_depth_delta_max = 0.0;
+ double avg_branch_depth_delta = 0.0;
+ double props_per_confl = 0.0;
+ double confl_per_restart = 0.0;
+ double decisions_per_conflict = 0.0;
+
+ //learnt distributions
+ struct Distrib {
+ double glue_distr_mean = 0;
+ double glue_distr_var = 0;
+ double size_distr_mean = 0;
+ double size_distr_var = 0;
+ double activity_distr_mean = 0;
+ double activity_distr_var = 0;
+
+ void print(const std::string& pre_print) const;
+ };
+ Distrib irred_cl_distrib;
+ Distrib red_cl_distrib;
+
+ //High-level features
+ uint64_t num_gates_found_last;
+ uint64_t num_xors_found_last;
+};
+
+}
+
+#endif //SOLVE_FEATURES_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp b/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
new file mode 100644
index 000000000..bd14ebbaf
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solver.cpp
@@ -0,0 +1,4082 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "solver.h"
+
+#include <fstream>
+#include <cmath>
+#include <fcntl.h>
+#include <functional>
+#include <limits>
+#include <string>
+#include <algorithm>
+#include <vector>
+#include <complex>
+#include <locale>
+
+#include "varreplacer.h"
+#include "time_mem.h"
+#include "searcher.h"
+#include "occsimplifier.h"
+#include "prober.h"
+#include "distillerlong.h"
+#include "clausecleaner.h"
+#include "solutionextender.h"
+#include "varupdatehelper.h"
+#include "completedetachreattacher.h"
+#include "compfinder.h"
+#include "comphandler.h"
+#include "subsumestrengthen.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "subsumeimplicit.h"
+#include "distillerlongwithimpl.h"
+#include "str_impl_w_impl_stamp.h"
+#include "datasync.h"
+#include "reducedb.h"
+#include "clausedumper.h"
+#include "sccfinder.h"
+#include "intree.h"
+#include "features_calc.h"
+#include "GitSHA1.h"
+#include "features_to_reconf.h"
+#include "trim.h"
+#include "streambuffer.h"
+#include "EGaussian.h"
+#include "sqlstats.h"
+#include "drat.h"
+#include "xorfinder.h"
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+#ifdef USE_SQLITE3
+#include "sqlitestats.h"
+#endif
+
+//#define DRAT_DEBUG
+
+//#define DEBUG_RENUMBER
+
+//#define DEBUG_IMPLICIT_PAIRS_TRIPLETS
+
+Solver::Solver(const SolverConf *_conf, std::atomic<bool>* _must_interrupt_inter) :
+ Searcher(_conf, this, _must_interrupt_inter)
+{
+ sqlStats = NULL;
+
+ if (conf.doProbe) {
+ prober = new Prober(this);
+ }
+ intree = new InTree(this);
+ if (conf.perform_occur_based_simp) {
+ occsimplifier = new OccSimplifier(this);
+ }
+ distill_long_cls = new DistillerLong(this);
+ dist_long_with_impl = new DistillerLongWithImpl(this);
+ dist_impl_with_impl = new StrImplWImplStamp(this);
+ clauseCleaner = new ClauseCleaner(this);
+ varReplacer = new VarReplacer(this);
+ if (conf.doCompHandler) {
+ compHandler = new CompHandler(this);
+ }
+ if (conf.doStrSubImplicit) {
+ subsumeImplicit = new SubsumeImplicit(this);
+ }
+ datasync = new DataSync(this, NULL);
+ Searcher::solver = this;
+ reduceDB = new ReduceDB(this);
+
+ set_up_sql_writer();
+ next_lev1_reduce = conf.every_lev1_reduce;
+ next_lev2_reduce = conf.every_lev2_reduce;
+
+ check_xor_cut_config_sanity();
+}
+
+Solver::~Solver()
+{
+ delete compHandler;
+ delete sqlStats;
+ delete prober;
+ delete intree;
+ delete occsimplifier;
+ delete distill_long_cls;
+ delete dist_long_with_impl;
+ delete dist_impl_with_impl;
+ delete clauseCleaner;
+ delete varReplacer;
+ delete subsumeImplicit;
+ delete datasync;
+ delete reduceDB;
+}
+
+void Solver::set_sqlite(string
+ #ifdef USE_SQLITE3
+ filename
+ #endif
+) {
+ #ifdef USE_SQLITE3
+ sqlStats = new SQLiteStats(filename);
+ if (!sqlStats->setup(this)) {
+ exit(-1);
+ }
+ if (conf.verbosity >= 4) {
+ cout << "c Connected to SQLite server" << endl;
+ }
+ #else
+ std::cerr << "SQLite support was not compiled in, cannot use it. Exiting."
+ << endl;
+ std::exit(-1);
+ #endif
+}
+
+void Solver::set_shared_data(SharedData* shared_data)
+{
+ delete datasync;
+ datasync = new DataSync(this, shared_data);
+}
+
+bool Solver::add_xor_clause_inter(
+ const vector<Lit>& lits
+ , bool rhs
+ , const bool attach
+ , bool addDrat
+) {
+ assert(ok);
+ assert(!attach || qhead == trail.size());
+ assert(decisionLevel() == 0);
+
+ vector<Lit> ps(lits);
+ for(Lit& lit: ps) {
+ if (lit.sign()) {
+ rhs ^= true;
+ lit ^= true;
+ }
+ }
+ clean_xor_no_prop(ps, rhs);
+
+ if (ps.size() >= (0x01UL << 28)) {
+ throw CMSat::TooLongClauseError();
+ }
+ //cout << "Cleaned ps is: " << ps << endl;
+
+ if (!ps.empty()) {
+ if (ps.size() > 2) {
+ xorclauses.push_back(Xor(ps, rhs));
+ }
+ ps[0] ^= rhs;
+ } else {
+ if (rhs) {
+ *drat << add
+ #ifdef STATS_NEEDED
+ << clauseID++ << sumConflicts
+ #endif
+ << fin;
+ ok = false;
+ }
+ return ok;
+ }
+
+ //cout << "without rhs is: " << ps << endl;
+ add_every_combination_xor(ps, attach, addDrat);
+
+ return ok;
+}
+
+void Solver::add_every_combination_xor(
+ const vector<Lit>& lits
+ , const bool attach
+ , const bool addDrat
+) {
+ //cout << "add_every_combination got: " << lits << endl;
+
+ size_t at = 0;
+ size_t num = 0;
+ vector<Lit> xorlits;
+ Lit lastlit_added = lit_Undef;
+ while(at != lits.size()) {
+ xorlits.clear();
+ size_t last_at = at;
+ for(; at < last_at+conf.xor_var_per_cut && at < lits.size(); at++) {
+ xorlits.push_back(lits[at]);
+ }
+
+ //Connect to old cut
+ if (lastlit_added != lit_Undef) {
+ xorlits.push_back(lastlit_added);
+ } else if (at < lits.size()) {
+ xorlits.push_back(lits[at]);
+ at++;
+ }
+
+ if (at + 1 == lits.size()) {
+ xorlits.push_back(lits[at]);
+ at++;
+ }
+
+ //New lit to connect to next cut
+ if (at != lits.size()) {
+ new_var(true);
+ const uint32_t newvar = nVars()-1;
+ varData[newvar].added_for_xor = true;
+ const Lit toadd = Lit(newvar, false);
+ xorlits.push_back(toadd);
+ lastlit_added = toadd;
+ }
+
+ add_xor_clause_inter_cleaned_cut(xorlits, attach, addDrat);
+ if (!ok)
+ break;
+
+ num++;
+ }
+}
+
+void Solver::add_xor_clause_inter_cleaned_cut(
+ const vector<Lit>& lits
+ , const bool attach
+ , const bool addDrat
+) {
+ //cout << "xor_inter_cleaned_cut got: " << lits << endl;
+ vector<Lit> new_lits;
+ for(size_t i = 0; i < (1ULL<<lits.size()); i++) {
+ unsigned bits_set = num_bits_set(i, lits.size());
+ if (bits_set % 2 == 0) {
+ continue;
+ }
+
+ new_lits.clear();
+ for(size_t at = 0; at < lits.size(); at++) {
+ bool xorwith = (i >> at)&1;
+ new_lits.push_back(lits[at] ^ xorwith);
+ }
+ //cout << "Added. " << new_lits << endl;
+ Clause* cl = add_clause_int(new_lits, false, ClauseStats(), attach, NULL, addDrat);
+ if (cl) {
+ cl->set_used_in_xor(true);
+ longIrredCls.push_back(cl_alloc.get_offset(cl));
+ }
+
+ if (!ok)
+ return;
+ }
+}
+
+unsigned Solver::num_bits_set(const size_t x, const unsigned max_size) const
+{
+ unsigned bits_set = 0;
+ for(size_t i = 0; i < max_size; i++) {
+ if ((x>>i)&1) {
+ bits_set++;
+ }
+ }
+
+ return bits_set;
+}
+
+
+bool Solver::sort_and_clean_clause(
+ vector<Lit>& ps
+ , const vector<Lit>& origCl
+ , const bool red
+) {
+ std::sort(ps.begin(), ps.end());
+ Lit p = lit_Undef;
+ uint32_t i, j;
+ for (i = j = 0; i != ps.size(); i++) {
+ if (value(ps[i]) == l_True) {
+ return false;
+ } else if (ps[i] == ~p) {
+ if (!red) {
+ uint32_t var = p.var();
+ var = map_inter_to_outer(var);
+ if (undef_must_set_vars.size() < var+1) {
+ undef_must_set_vars.resize(var+1, false);
+ }
+ undef_must_set_vars[var] = true;
+ }
+ return false;
+ } else if (value(ps[i]) != l_False && ps[i] != p) {
+ ps[j++] = p = ps[i];
+
+ if (varData[p.var()].removed != Removed::none) {
+ cout << "ERROR: clause " << origCl << " contains literal "
+ << p << " whose variable has been removed (removal type: "
+ << removed_type_to_string(varData[p.var()].removed)
+ << " var-updated lit: "
+ << varReplacer->get_var_replaced_with(p)
+ << ")"
+ << endl;
+ }
+
+ //Variables that have been eliminated cannot be added internally
+ //as part of a clause. That's a bug
+ assert(varData[p.var()].removed == Removed::none);
+ }
+ }
+ ps.resize(ps.size() - (i - j));
+ return true;
+}
+
+/**
+@brief Adds a clause to the problem. Should ONLY be called internally
+
+This code is very specific in that it must NOT be called with varibles in
+"ps" that have been replaced, eliminated, etc. Also, it must not be called
+when the wer are in an UNSAT (!ok) state, for example. Use it carefully,
+and only internally
+*/
+Clause* Solver::add_clause_int(
+ const vector<Lit>& lits
+ , const bool red
+ , ClauseStats cl_stats
+ , const bool attach_long
+ , vector<Lit>* finalLits
+ , bool addDrat
+ , const Lit drat_first
+) {
+ assert(ok);
+ assert(decisionLevel() == 0);
+ assert(!attach_long || qhead == trail.size());
+ #ifdef VERBOSE_DEBUG
+ cout << "add_clause_int clause " << lits << endl;
+ #endif //VERBOSE_DEBUG
+
+ //Make cl_stats sane
+ #ifdef STATS_NEEDED
+ uint64_t introduced_at_conflict =
+ std::min<uint64_t>(Searcher::sumConflicts, cl_stats.introduced_at_conflict);
+ #endif
+
+ vector<Lit> ps = lits;
+ if (!sort_and_clean_clause(ps, lits, red)) {
+ if (finalLits) {
+ finalLits->clear();
+ }
+ return NULL;
+ }
+
+ #ifdef VERBOSE_DEBUG
+ cout << "add_clause_int final clause " << ps << endl;
+ #endif
+
+ //If caller required final set of lits, return it.
+ if (finalLits) {
+ *finalLits = ps;
+ }
+
+ if (addDrat) {
+ size_t i = 0;
+ if (drat_first != lit_Undef) {
+ for(i = 0; i < ps.size(); i++) {
+ if (ps[i] == drat_first) {
+ break;
+ }
+ }
+ }
+ std::swap(ps[0], ps[i]);
+ *drat << add << ps
+ #ifdef STATS_NEEDED
+ << cl_stats.ID << sumConflicts
+ #endif
+ << fin;
+ std::swap(ps[0], ps[i]);
+
+ if (ps.size() == 2) {
+ datasync->signalNewBinClause(ps);
+ }
+ }
+
+ //Handle special cases
+ switch (ps.size()) {
+ case 0:
+ ok = false;
+ if (conf.verbosity >= 6) {
+ cout
+ << "c solver received clause through addClause(): "
+ << lits
+ << " that became an empty clause at toplevel --> UNSAT"
+ << endl;
+ }
+ return NULL;
+ case 1:
+ enqueue(ps[0]);
+ #ifdef STATS_NEEDED
+ propStats.propsUnit++;
+ #endif
+ if (attach_long) {
+ ok = (propagate<true>().isNULL());
+ }
+
+ return NULL;
+ case 2:
+ attach_bin_clause(ps[0], ps[1], red);
+ return NULL;
+
+ default:
+ Clause* c = cl_alloc.Clause_new(ps
+ , sumConflicts
+ #ifdef STATS_NEEDED
+ , cl_stats.ID
+ #endif
+ );
+ if (red) {
+ c->makeRed(cl_stats.glue);
+ }
+ c->stats = cl_stats;
+ #ifdef STATS_NEEDED
+ c->stats.introduced_at_conflict = introduced_at_conflict;
+ #endif
+
+ //In class 'OccSimplifier' we don't need to attach normall
+ if (attach_long) {
+ attachClause(*c);
+ } else {
+ if (red)
+ litStats.redLits += ps.size();
+ else
+ litStats.irredLits += ps.size();
+ }
+
+ return c;
+ }
+}
+
+void Solver::attachClause(
+ const Clause& cl
+ , const bool checkAttach
+) {
+ #if defined(DRAT_DEBUG) && defined(DRAT)
+ if (drat) {
+ *drat << add << cl << fin;
+ }
+ #endif
+
+ //Update stats
+ if (cl.red())
+ litStats.redLits += cl.size();
+ else
+ litStats.irredLits += cl.size();
+
+ //Call Solver's function for heavy-lifting
+ PropEngine::attachClause(cl, checkAttach);
+}
+
+void Solver::attach_bin_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const bool red
+ , const bool checkUnassignedFirst
+) {
+ #if defined(DRAT_DEBUG)
+ *drat << add << lit1 << lit2 << fin;
+ #endif
+
+ //Update stats
+ if (red) {
+ binTri.redBins++;
+ } else {
+ binTri.irredBins++;
+ }
+
+ //Call Solver's function for heavy-lifting
+ PropEngine::attach_bin_clause(lit1, lit2, red, checkUnassignedFirst);
+}
+
+void Solver::detachClause(const Clause& cl, const bool removeDrat)
+{
+ if (removeDrat) {
+ *drat << del << cl << fin;
+ }
+
+ assert(cl.size() > 2);
+ detach_modified_clause(cl[0], cl[1], cl.size(), &cl);
+}
+
+void Solver::detachClause(const ClOffset offset, const bool removeDrat)
+{
+ Clause* cl = cl_alloc.ptr(offset);
+ detachClause(*cl, removeDrat);
+}
+
+void Solver::detach_modified_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const uint32_t origSize
+ , const Clause* address
+) {
+ //Update stats
+ if (address->red())
+ litStats.redLits -= origSize;
+ else
+ litStats.irredLits -= origSize;
+
+ //Call heavy-lifter
+ PropEngine::detach_modified_clause(lit1, lit2, address);
+}
+
+bool Solver::addClauseHelper(vector<Lit>& ps)
+{
+ //If already UNSAT, just return
+ if (!ok)
+ return false;
+
+ //Sanity checks
+ assert(decisionLevel() == 0);
+ assert(qhead == trail.size());
+
+ //Check for too long clauses
+ if (ps.size() > (0x01UL << 28)) {
+ cout << "Too long clause!" << endl;
+ throw CMSat::TooLongClauseError();
+ }
+
+ //Check for too large variable number
+ for (Lit& lit: ps) {
+ if (lit.var() >= nVarsOuter()) {
+ std::cerr
+ << "ERROR: Variable " << lit.var() + 1
+ << " inserted, but max var is "
+ << nVarsOuter()
+ << endl;
+ assert(false);
+ std::exit(-1);
+ }
+ assert(lit.var() < nVarsOuter()
+ && "Clause inserted, but variable inside has not been declared with new_var() !");
+
+ //Undo var replacement
+ const Lit updated_lit = varReplacer->get_lit_replaced_with_outer(lit);
+ if (conf.verbosity >= 12
+ && lit != updated_lit
+ ) {
+ cout
+ << "EqLit updating outer lit " << lit
+ << " to outer lit " << updated_lit
+ << endl;
+ }
+ lit = updated_lit;
+
+ //Map outer to inter, and add re-variable if need be
+ if (map_outer_to_inter(lit).var() >= nVars()) {
+ new_var(false, lit.var());
+ }
+ }
+
+ renumber_outer_to_inter_lits(ps);
+
+ #ifdef SLOW_DEBUG
+ //Check renumberer
+ for (const Lit lit: ps) {
+ const Lit updated_lit = varReplacer->get_lit_replaced_with(lit);
+ assert(lit == updated_lit);
+ }
+ #endif
+
+ //Undo comp handler
+ if (compHandler) {
+ bool readd = false;
+ for (Lit lit: ps) {
+ if (varData[lit.var()].removed == Removed::decomposed) {
+ readd = true;
+ break;
+ }
+ }
+
+ if (readd) {
+ compHandler->readdRemovedClauses();
+ }
+ }
+
+ //Uneliminate vars
+ for (const Lit lit: ps) {
+ if (conf.perform_occur_based_simp
+ && varData[lit.var()].removed == Removed::elimed
+ ) {
+ if (!occsimplifier->uneliminate(lit.var()))
+ return false;
+ }
+ }
+
+ #ifdef SLOW_DEBUG
+ //Check
+ for (Lit& lit: ps) {
+ const Lit updated_lit = varReplacer->get_lit_replaced_with(lit);
+ assert(lit == updated_lit);
+ }
+ #endif
+
+ return true;
+}
+
+bool Solver::addClause(const vector<Lit>& lits, bool red)
+{
+ if (conf.perform_occur_based_simp && occsimplifier->getAnythingHasBeenBlocked()) {
+ std::cerr
+ << "ERROR: Cannot add new clauses to the system if blocking was"
+ << " enabled. Turn it off from conf.doBlockClauses"
+ << endl;
+ std::exit(-1);
+ }
+
+ #ifdef VERBOSE_DEBUG
+ cout << "Adding clause " << lits << endl;
+ #endif //VERBOSE_DEBUG
+ const size_t origTrailSize = trail.size();
+
+ vector<Lit> ps = lits;
+
+ if (!addClauseHelper(ps)) {
+ return false;
+ }
+
+ finalCl_tmp.clear();
+ std::sort(ps.begin(), ps.end());
+ Clause* cl = add_clause_int(
+ ps
+ , red
+ , ClauseStats() //default stats
+ , true //yes, attach
+ , &finalCl_tmp
+ , false //add drat?
+ );
+
+ //Drat -- We manipulated the clause, delete
+ if ((drat->enabled() || conf.simulate_drat)
+ && ps != finalCl_tmp
+ ) {
+ //Dump only if non-empty (UNSAT handled later)
+ if (!finalCl_tmp.empty()) {
+ *drat << add << finalCl_tmp
+ #ifdef STATS_NEEDED
+ << clauseID++ << sumConflicts
+ #endif
+ << fin;
+ }
+
+ //Empty clause, it's UNSAT
+ if (!okay()) {
+ *drat << add
+ #ifdef STATS_NEEDED
+ << clauseID++ << sumConflicts
+ #endif
+ << fin;
+ }
+ *drat << del << ps << fin;
+ }
+
+ if (cl != NULL) {
+ ClOffset offset = cl_alloc.get_offset(cl);
+ if (!red) {
+ longIrredCls.push_back(offset);
+ } else {
+ cl->stats.which_red_array = 2;
+ if (cl->stats.glue <= conf.glue_put_lev0_if_below_or_eq) {
+ cl->stats.which_red_array = 0;
+ } else if (cl->stats.glue <= conf.glue_put_lev1_if_below_or_eq
+ && conf.glue_put_lev1_if_below_or_eq != 0
+ ) {
+ cl->stats.which_red_array = 1;
+ }
+ longRedCls[cl->stats.which_red_array].push_back(offset);
+ }
+ }
+
+ zeroLevAssignsByCNF += trail.size() - origTrailSize;
+
+ return ok;
+}
+
+void Solver::test_renumbering() const
+{
+ //Check if we renumbered the varibles in the order such as to make
+ //the unknown ones first and the known/eliminated ones second
+ bool uninteresting = false;
+ bool problem = false;
+ for(size_t i = 0; i < nVars(); i++) {
+ //cout << "val[" << i << "]: " << value(i);
+
+ if (value(i) != l_Undef)
+ uninteresting = true;
+
+ if (varData[i].removed == Removed::elimed
+ || varData[i].removed == Removed::replaced
+ || varData[i].removed == Removed::decomposed
+ ) {
+ uninteresting = true;
+ //cout << " removed" << endl;
+ } else {
+ //cout << " non-removed" << endl;
+ }
+
+ if (value(i) == l_Undef
+ && varData[i].removed != Removed::elimed
+ && varData[i].removed != Removed::replaced
+ && varData[i].removed != Removed::decomposed
+ && uninteresting
+ ) {
+ problem = true;
+ }
+ }
+ assert(!problem && "We renumbered the variables in the wrong order!");
+}
+
+void Solver::renumber_clauses(const vector<uint32_t>& outerToInter)
+{
+ //Clauses' abstractions have to be re-calculated
+ for(ClOffset offs: longIrredCls) {
+ Clause* cl = cl_alloc.ptr(offs);
+ updateLitsMap(*cl, outerToInter);
+ cl->setStrenghtened();
+ }
+
+ for(auto& lredcls: longRedCls) {
+ for(ClOffset off: lredcls) {
+ Clause* cl = cl_alloc.ptr(off);
+ updateLitsMap(*cl, outerToInter);
+ cl->setStrenghtened();
+ }
+ }
+
+ //Clauses' abstractions have to be re-calculated
+ for(Xor& x: xorclauses) {
+ updateVarsMap(x, outerToInter);
+ }
+}
+
+size_t Solver::calculate_interToOuter_and_outerToInter(
+ vector<uint32_t>& outerToInter
+ , vector<uint32_t>& interToOuter
+) {
+ size_t at = 0;
+ vector<uint32_t> useless;
+ size_t numEffectiveVars = 0;
+ for(size_t i = 0; i < nVars(); i++) {
+ if (value(i) != l_Undef
+ || varData[i].removed == Removed::elimed
+ || varData[i].removed == Removed::replaced
+ || varData[i].removed == Removed::decomposed
+ ) {
+ useless.push_back(i);
+ continue;
+ }
+
+ outerToInter[i] = at;
+ interToOuter[at] = i;
+ at++;
+ numEffectiveVars++;
+ }
+
+ //Fill the rest with variables that have been removed/eliminated/set
+ for(vector<uint32_t>::const_iterator
+ it = useless.begin(), end = useless.end()
+ ; it != end
+ ; ++it
+ ) {
+ outerToInter[*it] = at;
+ interToOuter[at] = *it;
+ at++;
+ }
+ assert(at == nVars());
+
+ //Extend to nVarsOuter() --> these are just the identity transformation
+ for(size_t i = nVars(); i < nVarsOuter(); i++) {
+ outerToInter[i] = i;
+ interToOuter[i] = i;
+ }
+
+ return numEffectiveVars;
+}
+
+double Solver::calc_renumber_saving()
+{
+ uint32_t num_used = 0;
+ for(size_t i = 0; i < nVars(); i++) {
+ if (value(i) != l_Undef
+ || varData[i].removed == Removed::elimed
+ || varData[i].removed == Removed::replaced
+ || varData[i].removed == Removed::decomposed
+ ) {
+ continue;
+ }
+ num_used++;
+ }
+ double saving = 1.0-(double)num_used/(double)nVars();
+ return saving;
+}
+
+bool Solver::clean_xor_clauses_from_duplicate_and_set_vars()
+{
+ assert(decisionLevel() == 0);
+ double myTime = cpuTime();
+ XorFinder f(NULL, this);
+ for(Xor& x: xorclauses) {
+ solver->clean_xor_vars_no_prop(x.get_vars(), x.rhs);
+ if (x.size() == 0 && x.rhs == true) {
+ ok = false;
+ break;
+ }
+ }
+
+ const double time_used = cpuTime() - myTime;
+ if (conf.verbosity) {
+ cout
+ << "c [xor-clean]"
+ << conf.print_times(time_used)
+ << endl;
+ }
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ solver
+ , "xor-clean"
+ , time_used
+ );
+ }
+
+ return okay();
+}
+
+//Beware. Cannot be called while Searcher is running.
+bool Solver::renumber_variables(bool must_renumber)
+{
+ assert(decisionLevel() == 0);
+ if (nVars() == 0) {
+ return true;
+ }
+
+ #ifdef USE_GAUSS
+ solver->clearEnGaussMatrixes();
+ #endif
+
+ if (!must_renumber
+ && calc_renumber_saving() < 0.2
+ ) {
+ return true;
+ }
+
+ double myTime = cpuTime();
+ clauseCleaner->remove_and_clean_all();
+ if (!xorclauses.empty()) {
+ if (!clean_xor_clauses_from_duplicate_and_set_vars())
+ return false;
+ }
+
+ //outerToInter[10] = 0 ---> what was 10 is now 0.
+ vector<uint32_t> outerToInter(nVarsOuter());
+ vector<uint32_t> interToOuter(nVarsOuter());
+
+ size_t numEffectiveVars =
+ calculate_interToOuter_and_outerToInter(outerToInter, interToOuter);
+
+ //Create temporary outerToInter2
+ vector<uint32_t> interToOuter2(nVarsOuter()*2);
+ for(size_t i = 0; i < nVarsOuter(); i++) {
+ interToOuter2[i*2] = interToOuter[i]*2;
+ interToOuter2[i*2+1] = interToOuter[i]*2+1;
+ }
+
+ renumber_clauses(outerToInter);
+ CNF::updateVars(outerToInter, interToOuter);
+ PropEngine::updateVars(outerToInter, interToOuter, interToOuter2);
+ Searcher::updateVars(outerToInter, interToOuter);
+
+ if (conf.doStamp) {
+ stamp.updateVars(outerToInter, interToOuter2, seen);
+ }
+
+ //Update sub-elements' vars
+ varReplacer->updateVars(outerToInter, interToOuter);
+ if (conf.doCache) {
+ implCache.updateVars(seen, outerToInter, interToOuter2, numEffectiveVars);
+ }
+ datasync->updateVars(outerToInter, interToOuter);
+
+ //Tests
+ test_renumbering();
+ test_reflectivity_of_renumbering();
+
+ //Print results
+ const double time_used = cpuTime() - myTime;
+ if (conf.verbosity) {
+ cout
+ << "c [renumber]"
+ << conf.print_times(time_used)
+ << endl;
+ }
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ solver
+ , "renumber"
+ , time_used
+ );
+ }
+
+ if (conf.doSaveMem) {
+ save_on_var_memory(numEffectiveVars);
+ }
+
+ //NOTE order heap is now wrong, but that's OK, it will be restored from
+ //backed up activities and then rebuilt at the start of Searcher
+
+ return okay();
+}
+
+void Solver::check_switchoff_limits_newvar(size_t n)
+{
+ if (conf.doStamp
+ && nVars() + n > 15ULL*1000ULL*1000ULL*conf.var_and_mem_out_mult //~1 GB of RAM
+ ) {
+ conf.doStamp = false;
+ stamp.freeMem();
+ if (conf.verbosity) {
+ cout
+ << "c Switching off stamping due to excessive number of variables"
+ << " (it would take too much memory)"
+ << endl;
+ }
+ }
+
+ if (conf.doCache
+ && nVars() + n > 5ULL*1000ULL*1000ULL*conf.var_and_mem_out_mult
+ ) {
+ conf.doCache = false;
+ implCache.free();
+
+ if (conf.verbosity) {
+ cout
+ << "c Switching off caching due to excessive number of variables"
+ << " (it would take too much memory)"
+ << endl;
+ }
+ }
+}
+
+void Solver::new_vars(size_t n)
+{
+ if (n == 0) {
+ return;
+ }
+
+ check_switchoff_limits_newvar(n);
+ Searcher::new_vars(n);
+ varReplacer->new_vars(n);
+
+ if (conf.perform_occur_based_simp) {
+ occsimplifier->new_vars(n);
+ }
+
+ if (compHandler) {
+ compHandler->new_vars(n);
+ }
+ datasync->new_vars(n);
+}
+
+void Solver::new_var(const bool bva, const uint32_t orig_outer)
+{
+ check_switchoff_limits_newvar();
+ Searcher::new_var(bva, orig_outer);
+
+ varReplacer->new_var(orig_outer);
+
+ if (conf.perform_occur_based_simp) {
+ occsimplifier->new_var(orig_outer);
+ }
+
+ if (compHandler) {
+ compHandler->new_var(orig_outer);
+ }
+ if (orig_outer == std::numeric_limits<uint32_t>::max()) {
+ datasync->new_var(bva);
+ }
+
+ if (bva) {
+ assumptionsSet.push_back(false);
+ }
+
+ //Too expensive
+ //test_reflectivity_of_renumbering();
+}
+
+void Solver::save_on_var_memory(const uint32_t newNumVars)
+{
+ //print_mem_stats();
+
+ const double myTime = cpuTime();
+ minNumVars = newNumVars;
+ Searcher::save_on_var_memory();
+
+ varReplacer->save_on_var_memory();
+ if (occsimplifier) {
+ occsimplifier->save_on_var_memory();
+ }
+ if (compHandler) {
+ compHandler->save_on_var_memory();
+ }
+ datasync->save_on_var_memory();
+ assumptionsSet.resize(nVars(), false);
+ assumptionsSet.shrink_to_fit();
+
+ const double time_used = cpuTime() - myTime;
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ this
+ , "save var mem"
+ , time_used
+ );
+ }
+ //print_mem_stats();
+}
+
+//Uneliminates, readds components, fills assumptionsSet, all the good stuff
+void Solver::set_assumptions()
+{
+ assert(okay());
+
+ unfill_assumptions_set_from(assumptions);
+ conflict.clear();
+ assumptions.clear();
+
+ back_number_from_outside_to_outer(outside_assumptions);
+ vector<Lit> inter_assumptions = back_number_from_outside_to_outer_tmp;
+ addClauseHelper(inter_assumptions);
+ assumptionsSet.resize(nVars(), false);
+ if (outside_assumptions.empty()) {
+ return;
+ }
+
+ assert(inter_assumptions.size() == outside_assumptions.size());
+ for(size_t i = 0; i < inter_assumptions.size(); i++) {
+ const Lit inter_lit = inter_assumptions[i];
+ const Lit outside_lit = outside_assumptions[i];
+ assumptions.push_back(AssumptionPair(inter_lit, outside_lit));
+ }
+
+ fill_assumptions_set_from(assumptions);
+}
+
+void Solver::check_model_for_assumptions() const
+{
+ for(const AssumptionPair lit_pair: assumptions) {
+ const Lit outside_lit = lit_pair.lit_orig_outside;
+ assert(outside_lit.var() < model.size());
+
+ if (model_value(outside_lit) == l_Undef) {
+ std::cerr
+ << "ERROR, lit " << outside_lit
+ << " was in the assumptions, but it wasn't set at all!"
+ << endl;
+ }
+ assert(model_value(outside_lit) != l_Undef);
+
+ if (model_value(outside_lit) != l_True) {
+ std::cerr
+ << "ERROR, lit " << outside_lit
+ << " was in the assumptions, but it was set to its opposite value!"
+ << endl;
+ }
+ assert(model_value(outside_lit) == l_True);
+ }
+}
+
+void Solver::check_recursive_minimization_effectiveness(const lbool status)
+{
+ const SearchStats& srch_stats = Searcher::get_stats();
+ if (status == l_Undef
+ && conf.doRecursiveMinim
+ && srch_stats.recMinLitRem + srch_stats.litsRedNonMin > 100000
+ ) {
+ double remPercent =
+ float_div(srch_stats.recMinLitRem, srch_stats.litsRedNonMin)*100.0;
+
+ double costPerGained = float_div(srch_stats.recMinimCost, remPercent);
+ if (costPerGained > 200ULL*1000ULL*1000ULL) {
+ conf.doRecursiveMinim = false;
+ if (conf.verbosity) {
+ cout
+ << "c recursive minimization too costly: "
+ << std::fixed << std::setprecision(0) << (costPerGained/1000.0)
+ << "Kcost/(% lits removed) --> disabling"
+ << std::setprecision(2)
+ << endl;
+ }
+ } else {
+ if (conf.verbosity) {
+ cout
+ << "c recursive minimization cost OK: "
+ << std::fixed << std::setprecision(0) << (costPerGained/1000.0)
+ << "Kcost/(% lits removed)"
+ << std::setprecision(2)
+ << endl;
+ }
+ }
+ }
+}
+
+void Solver::check_minimization_effectiveness(const lbool status)
+{
+ const SearchStats& search_stats = Searcher::get_stats();
+ if (status == l_Undef
+ && conf.doMinimRedMore
+ && search_stats.moreMinimLitsStart > 100000
+ ) {
+ double remPercent = float_div(
+ search_stats.moreMinimLitsStart-search_stats.moreMinimLitsEnd,
+ search_stats.moreMinimLitsStart)*100.0;
+
+ //TODO take into account the limit on the number of first literals, too
+ if (remPercent < 1.0) {
+ conf.doMinimRedMore = false;
+ if (conf.verbosity) {
+ cout
+ << "c more minimization effectiveness low: "
+ << std::fixed << std::setprecision(2) << remPercent
+ << " % lits removed --> disabling"
+ << endl;
+ }
+ } else if (remPercent > 7.0) {
+ more_red_minim_limit_binary_actual = 3*conf.more_red_minim_limit_binary;
+ more_red_minim_limit_cache_actual = 3*conf.more_red_minim_limit_cache;
+ if (conf.verbosity) {
+ cout
+ << "c more minimization effectiveness good: "
+ << std::fixed << std::setprecision(2) << remPercent
+ << " % --> increasing limit to 3x"
+ << endl;
+ }
+ } else {
+ more_red_minim_limit_binary_actual = conf.more_red_minim_limit_binary;
+ more_red_minim_limit_cache_actual = conf.more_red_minim_limit_cache;
+ if (conf.verbosity) {
+ cout
+ << "c more minimization effectiveness OK: "
+ << std::fixed << std::setprecision(2) << remPercent
+ << " % --> setting limit to norm"
+ << endl;
+ }
+ }
+ }
+}
+
+void Solver::extend_solution(const bool only_indep_solution)
+{
+ #ifdef DEBUG_IMPLICIT_STATS
+ check_stats();
+ #endif
+
+ #ifdef SLOW_DEBUG
+ //Check that independent vars are all assigned
+ if (conf.independent_vars) {
+ for(uint32_t outside_var: *conf.independent_vars) {
+ uint32_t outer_var = map_to_with_bva(outside_var);
+ outer_var = varReplacer->get_var_replaced_with_outer(outer_var);
+ uint32_t int_var = map_outer_to_inter(outer_var);
+
+ assert(varData[int_var].removed == Removed::none ||
+ varData[int_var].removed == Removed::decomposed);
+
+ if (int_var < nVars() && varData[int_var].removed == Removed::none) {
+ assert(model[int_var] != l_Undef);
+ }
+ }
+ }
+ #endif
+
+ const double myTime = cpuTime();
+ model = back_number_solution_from_inter_to_outer(model);
+ full_model = back_number_solution_from_inter_to_outer(full_model);
+
+ //Extend solution to stored solution in component handler
+ if (compHandler) {
+ compHandler->addSavedState(model);
+ compHandler->addSavedState(full_model);
+ }
+
+ if (!only_indep_solution) {
+ SolutionExtender extender(this, occsimplifier);
+ extender.extend();
+ } else {
+ solver->varReplacer->extend_model_already_set();
+ }
+
+ model = map_back_to_without_bva(model);
+ if (only_indep_solution) {
+ assert(conf.independent_vars);
+ for(uint32_t var: *conf.independent_vars) {
+ if (model[var] == l_Undef) {
+ cout << "ERROR: varible " << var+1 << " is set as independent but is unset!" << endl;
+ cout << "NOTE: var " << var + 1 << " has removed value: "
+ << removed_type_to_string(varData[var].removed)
+ << " and is set to " << value(var) << endl;
+ }
+ assert(model[var] != l_Undef);
+ }
+ }
+
+ check_model_for_assumptions();
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ this
+ , "extend solution"
+ , cpuTime()-myTime
+ );
+ }
+}
+
+void Solver::set_up_sql_writer()
+{
+ if (!sqlStats) {
+ return;
+ }
+
+ bool ret = sqlStats->setup(this);
+ if (!ret) {
+ std::cerr
+ << "c ERROR: SQL was required (with option '--sql 2'), but couldn't connect to SQL server." << endl;
+ std::exit(-1);
+ }
+}
+
+void Solver::check_xor_cut_config_sanity() const
+{
+ if (conf.xor_var_per_cut < 1) {
+ std::cerr << "ERROR: Too low cutting number: " << conf.xor_var_per_cut << ". Needs to be at least 1." << endl;
+ exit(-1);
+ }
+
+ if (conf.xor_var_per_cut > 10) {
+ std::cerr << "ERROR: Too high cutting number. High numbers entail huge memory use." << endl;
+ exit(-1);
+ }
+}
+
+void Solver::check_config_parameters() const
+{
+ if (conf.max_confl < 0) {
+ std::cerr << "ERROR: Maximum number conflicts set must be greater or equal to 0" << endl;
+ exit(-1);
+ }
+
+ if (conf.shortTermHistorySize <= 0) {
+ std::cerr << "ERROR: You MUST give a short term history size (\"--gluehist\") greater than 0!" << endl;
+ exit(-1);
+ }
+
+ #ifdef USE_GAUSS
+ if ((drat->enabled() || solver->conf.simulate_drat) &&
+ conf.gaussconf.decision_until > 0
+ ) {
+ std::cerr << "ERROR: Cannot have both DRAT and GAUSS on at the same time!" << endl;
+ exit(-1);
+ }
+ #endif
+
+ if (conf.greedy_undef) {
+ std::cerr << "ERROR: Unfortunately, greedy undef is broken" << endl;
+ exit(-1);
+ }
+
+ if (conf.modulo_maple_iter == 0) {
+ std::cerr << "ERROR: Modulo maper iteration must be non-zero" << endl;
+ exit(-1);
+ }
+
+ #ifdef SLOW_DEBUG
+ if (solver->conf.independent_vars)
+ {
+ for(uint32_t v: *solver->conf.independent_vars) {
+ assert(v < nVarsOutside());
+ }
+ }
+ #endif
+
+ check_xor_cut_config_sanity();
+}
+
+lbool Solver::simplify_problem_outside()
+{
+ #ifdef SLOW_DEBUG
+ if (ok) {
+ assert(check_order_heap_sanity());
+ check_implicit_stats();
+ check_wrong_attach();
+ find_all_attach();
+ test_all_clause_attached();
+ }
+ #endif
+
+ conf.global_timeout_multiplier = conf.orig_global_timeout_multiplier;
+
+ if (!ok) {
+ return l_False;
+ }
+ conflict.clear();
+ check_config_parameters();
+ datasync->rebuild_bva_map();
+ set_assumptions();
+
+ lbool status = l_Undef;
+ if (nVars() > 0 && conf.do_simplify_problem) {
+ status = simplify_problem(false);
+ }
+ unfill_assumptions_set_from(assumptions);
+ assumptions.clear();
+ return status;
+}
+
+lbool Solver::solve_with_assumptions(
+ const vector<Lit>* _assumptions,
+ const bool only_indep_solution
+) {
+ move_to_outside_assumps(_assumptions);
+ #ifdef SLOW_DEBUG
+ if (ok) {
+ check_clid_correct();
+ assert(check_order_heap_sanity());
+ check_implicit_stats();
+ find_all_attach();
+ check_no_duplicate_lits_anywhere();
+ }
+ #endif
+
+ solveStats.num_solve_calls++;
+ conflict.clear();
+ check_config_parameters();
+ luby_loop_num = 0;
+
+ //Reset parameters
+ max_confl_phase = conf.restart_first;
+ max_confl_this_phase = max_confl_phase;
+ VSIDS = true;
+ var_decay_vsids = conf.var_decay_vsids_start;
+ step_size = conf.orig_step_size;
+ conf.global_timeout_multiplier = conf.orig_global_timeout_multiplier;
+ params.rest_type = conf.restartType;
+ if (params.rest_type == Restart::glue_geom) {
+ params.rest_type = Restart::geom;
+ }
+
+ if (conf.verbosity >= 6) {
+ cout << "c " << __func__ << " called" << endl;
+ }
+
+ //Check if adding the clauses caused UNSAT
+ lbool status = l_Undef;
+ if (!ok) {
+ assert(conflict.empty());
+ status = l_False;
+ if (conf.verbosity >= 6) {
+ cout << "c Solver status " << status << " on startup of solve()" << endl;
+ }
+ goto end;
+ }
+ assert(prop_at_head());
+ assert(okay());
+
+ //Clean up as a startup
+ datasync->rebuild_bva_map();
+ set_assumptions();
+
+ if (conf.preprocess == 2) {
+ //can't do greedy undef on preproc
+ conf.greedy_undef = false;
+ status = load_state(conf.saved_state_file);
+ if (status != l_False) {
+ model = assigns;
+ status = load_solution_from_file(conf.solution_file);
+ if (status == l_Undef) {
+ cout << "ERROR loading in solution from file '" << conf.solution_file << "'. Please check solution file for correctness" << endl;
+ exit(-1);
+ }
+ full_model = model;
+ }
+ }
+
+ if (status == l_Undef) {
+ check_reconfigure();
+ }
+
+ //If still unknown, simplify
+ if (status == l_Undef
+ && nVars() > 0
+ && conf.do_simplify_problem
+ && conf.simplify_at_startup
+ && (solveStats.numSimplify == 0 || conf.simplify_at_every_startup)
+ ) {
+ status = simplify_problem(!conf.full_simplify_at_startup);
+ }
+
+ if (status == l_Undef
+ && conf.preprocess == 0
+ ) {
+ status = iterate_until_solved();
+ }
+
+ end:
+ if (sqlStats) {
+ sqlStats->finishup(status);
+ }
+
+ if (conf.preprocess == 1) {
+ cancelUntil(0);
+ if (status != l_False) {
+ //So no set variables end up in the clauses
+ clauseCleaner->remove_and_clean_all();
+ }
+
+ if (status == l_True) {
+ cout << "WARN: Solution found during preprocessing,"
+ "but putting simplified CNF to file" << endl;
+ }
+ save_state(conf.saved_state_file, status);
+ ClauseDumper dumper(this);
+ if (status == l_False) {
+ dumper.open_file_and_write_unsat(conf.simplified_cnf);
+ } else {
+ dumper.open_file_and_dump_irred_clauses_preprocessor(conf.simplified_cnf);
+ }
+ cout << "Wrote solver state to file " << conf.saved_state_file
+ << " and simplified CNF to file " << conf.simplified_cnf
+ << endl;
+ }
+
+ handle_found_solution(status, only_indep_solution);
+ unfill_assumptions_set_from(assumptions);
+ assumptions.clear();
+ conf.max_confl = std::numeric_limits<long>::max();
+ conf.maxTime = std::numeric_limits<double>::max();
+ drat->flush();
+ return status;
+}
+
+void Solver::check_reconfigure()
+{
+ if (nVars() > 2
+ && longIrredCls.size() > 1
+ && (binTri.irredBins + binTri.redBins) > 1
+ ) {
+ if (solveStats.numSimplify == conf.reconfigure_at &&
+ !already_reconfigured
+ ) {
+ check_calc_features();
+ if (conf.reconfigure_val == 100) {
+ conf.reconfigure_val = get_reconf_from_features(last_solve_feature, conf.verbosity);
+ }
+ if (conf.reconfigure_val != 0) {
+ reconfigure(conf.reconfigure_val);
+ already_reconfigured = true;
+ }
+ }
+ }
+
+}
+
+void Solver::dump_memory_stats_to_sql()
+{
+ if (!sqlStats) {
+ return;
+ }
+
+ const double my_time = cpuTime();
+
+ sqlStats->mem_used(
+ this
+ , "solver"
+ , my_time
+ , mem_used()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "vardata"
+ , my_time
+ , mem_used_vardata()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "stamp"
+ , my_time
+ , Searcher::mem_used_stamp()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "cache"
+ , my_time
+ , implCache.mem_used()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "longclauses"
+ , my_time
+ , CNF::mem_used_longclauses()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "watch-alloc"
+ , my_time
+ , watches.mem_used_alloc()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "watch-array"
+ , my_time
+ , watches.mem_used_array()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "renumber"
+ , my_time
+ , CNF::mem_used_renumberer()/(1024*1024)
+ );
+
+
+ if (compHandler) {
+ sqlStats->mem_used(
+ this
+ , "component"
+ , my_time
+ , compHandler->mem_used()/(1024*1024)
+ );
+ }
+
+ if (occsimplifier) {
+ sqlStats->mem_used(
+ this
+ , "occsimplifier"
+ , my_time
+ , occsimplifier->mem_used()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "xor"
+ , my_time
+ , occsimplifier->mem_used_xor()/(1024*1024)
+ );
+
+ sqlStats->mem_used(
+ this
+ , "bva"
+ , my_time
+ , occsimplifier->mem_used_bva()/(1024*1024)
+ );
+ }
+
+ sqlStats->mem_used(
+ this
+ , "varreplacer"
+ , my_time
+ , varReplacer->mem_used()/(1024*1024)
+ );
+
+ if (prober) {
+ sqlStats->mem_used(
+ this
+ , "prober"
+ , my_time
+ , prober->mem_used()/(1024*1024)
+ );
+ }
+
+ double vm_mem_used = 0;
+ const uint64_t rss_mem_used = memUsedTotal(vm_mem_used);
+ sqlStats->mem_used(
+ this
+ , "rss"
+ , my_time
+ , rss_mem_used/(1024*1024)
+ );
+ sqlStats->mem_used(
+ this
+ , "vm"
+ , my_time
+ , vm_mem_used/(1024*1024)
+ );
+}
+
+long Solver::calc_num_confl_to_do_this_iter(const size_t iteration_num) const
+{
+ double iter_num = std::min<size_t>(iteration_num, 100ULL);
+ double mult = std::pow(conf.num_conflicts_of_search_inc, iter_num);
+ mult = std::min(mult, conf.num_conflicts_of_search_inc_max);
+ long num_conflicts_of_search = (double)conf.num_conflicts_of_search*mult;
+ if (conf.never_stop_search) {
+ num_conflicts_of_search = 500ULL*1000ULL*1000ULL;
+ }
+ num_conflicts_of_search = std::min<long>(
+ num_conflicts_of_search
+ , (long)conf.max_confl - (long)sumConflicts
+ );
+
+ return num_conflicts_of_search;
+}
+
+lbool Solver::iterate_until_solved()
+{
+ size_t iteration_num = 0;
+ VSIDS = true;
+
+ lbool status = l_Undef;
+ while (status == l_Undef
+ && !must_interrupt_asap()
+ && cpuTime() < conf.maxTime
+ && sumConflicts < (uint64_t)conf.max_confl
+ ) {
+ #ifdef SLOW_DEBUG
+ check_clid_correct();
+ #endif
+
+ iteration_num++;
+ if (conf.verbosity && iteration_num >= 2) {
+ print_clause_size_distrib();
+ }
+ dump_memory_stats_to_sql();
+
+ const long num_confl = calc_num_confl_to_do_this_iter(iteration_num);
+ if (num_confl <= 0) {
+ break;
+ }
+ status = Searcher::solve(num_confl, iteration_num);
+
+ //Check for effectiveness
+ check_recursive_minimization_effectiveness(status);
+ check_minimization_effectiveness(status);
+
+ //Update stats
+ sumSearchStats += Searcher::get_stats();
+ sumPropStats += propStats;
+ propStats.clear();
+ Searcher::resetStats();
+ check_too_many_low_glues();
+
+ //Solution has been found
+ if (status != l_Undef) {
+ break;
+ }
+
+ //If we are over the limit, exit
+ if (sumConflicts >= (uint64_t)conf.max_confl
+ || cpuTime() > conf.maxTime
+ || must_interrupt_asap()
+ ) {
+ break;
+ }
+
+ if (conf.do_simplify_problem) {
+ status = simplify_problem(false);
+ }
+ if (status == l_Undef) {
+ check_reconfigure();
+ }
+
+ //Iterate between VSIDS and Maple
+ if (conf.maple) {
+ //The 1st of every modulo N is VSIDS otherwise Maple
+ long modulo = ((long)iteration_num-1) % conf.modulo_maple_iter;
+ if (modulo < ((long)conf.modulo_maple_iter-1)) {
+ VSIDS = false;
+ } else {
+ VSIDS = true;
+ }
+ } else {
+ //so that in case of reconfiguration, VSIDS is correctly set
+ VSIDS = true;
+ }
+ }
+ #ifdef USE_GAUSS
+ clearEnGaussMatrixes();
+ #endif
+ return status;
+}
+
+void Solver::check_too_many_low_glues()
+{
+ if (conf.glue_put_lev0_if_below_or_eq == 2
+ || sumConflicts < conf.min_num_confl_adjust_glue_cutoff
+ || adjusted_glue_cutoff_if_too_many
+ || conf.adjust_glue_if_too_many_low >= 1.0
+ ) {
+ return;
+ }
+
+ double perc = float_div(sumSearchStats.red_cl_in_which0, sumConflicts);
+ if (perc > conf.adjust_glue_if_too_many_low) {
+ conf.glue_put_lev0_if_below_or_eq--;
+ adjusted_glue_cutoff_if_too_many = true;
+ if (conf.verbosity) {
+ cout << "c Adjusted glue cutoff to " << conf.glue_put_lev0_if_below_or_eq
+ << " due to too many low glues: " << perc*100.0 << " %" << endl;
+ }
+ }
+}
+
+void Solver::handle_found_solution(const lbool status, const bool only_indep_solution)
+{
+ if (status == l_True) {
+ extend_solution(only_indep_solution);
+ cancelUntil(0);
+
+ #ifdef DEBUG_ATTACH_MORE
+ find_all_attach();
+ test_all_clause_attached();
+ #endif
+ } else if (status == l_False) {
+ cancelUntil(0);
+
+ for(const Lit lit: conflict) {
+ if (value(lit) == l_Undef) {
+ assert(var_inside_assumptions(lit.var()));
+ }
+ }
+ update_assump_conflict_to_orig_outside(conflict);
+ }
+
+ //Too slow when running lots of small queries
+ #ifdef DEBUG_IMPLICIT_STATS
+ check_implicit_stats();
+ #endif
+}
+
+bool Solver::execute_inprocess_strategy(
+ const bool startup
+ , const string& strategy
+) {
+ //std::string input = "abc,def,ghi";
+ std::istringstream ss(strategy + ", ");
+ std::string token;
+ std::string occ_strategy_tokens;
+
+ while(std::getline(ss, token, ',')) {
+ if (sumConflicts >= (uint64_t)conf.max_confl
+ || cpuTime() > conf.maxTime
+ || must_interrupt_asap()
+ || nVars() == 0
+ || !okay()
+ ) {
+ return ok;
+ }
+ assert(watches.get_smudged_list().empty());
+ assert(prop_at_head());
+ assert(okay());
+ check_wrong_attach();
+ #ifdef SLOW_DEBUG
+ check_stats();
+ check_clid_correct();
+ check_no_duplicate_lits_anywhere();
+ #endif
+
+ token = trim(token);
+ std::transform(token.begin(), token.end(), token.begin(), ::tolower);
+ if (!occ_strategy_tokens.empty() && token.substr(0,3) != "occ") {
+ if (conf.perform_occur_based_simp
+ && occsimplifier
+ ) {
+ occ_strategy_tokens = trim(occ_strategy_tokens);
+ if (conf.verbosity) {
+ cout << "c --> Executing OCC strategy token(s): '"
+ << occ_strategy_tokens << "'\n";
+ }
+ occsimplifier->simplify(startup, occ_strategy_tokens);
+ }
+ occ_strategy_tokens.clear();
+ if (sumConflicts >= (uint64_t)conf.max_confl
+ || cpuTime() > conf.maxTime
+ || must_interrupt_asap()
+ || nVars() == 0
+ || !ok
+ ) {
+ return ok;
+ }
+ #ifdef SLOW_DEBUG
+ solver->check_stats();
+ #endif
+ }
+
+ if (conf.verbosity && token.substr(0,3) != "occ" && token != "") {
+ cout << "c --> Executing strategy token: " << token << '\n';
+ }
+
+ if (token == "find-comps" &&
+ conf.independent_vars == NULL //no point finding, cannot be handled
+ ) {
+ if (get_num_free_vars() < conf.compVarLimit*solver->conf.var_and_mem_out_mult) {
+ CompFinder findParts(this);
+ findParts.find_components();
+ }
+ } else if (token == "handle-comps") {
+ if (compHandler
+ && conf.doCompHandler
+ && conf.independent_vars == NULL
+ && get_num_free_vars() < conf.compVarLimit*solver->conf.var_and_mem_out_mult
+ && solveStats.numSimplify >= conf.handlerFromSimpNum
+ //Only every 2nd, since it can be costly to find parts
+ && solveStats.numSimplify % 2 == 0 //TODO
+ ) {
+ compHandler->handle();
+ }
+ } else if (token == "scc-vrepl") {
+ if (conf.doFindAndReplaceEqLits) {
+ varReplacer->replace_if_enough_is_found(
+ std::floor((double)get_num_free_vars()*0.001));
+ }
+ } else if (token == "cache-clean") {
+ if (conf.doCache) {
+ implCache.clean(this);
+ }
+ } else if (token == "cache-tryboth") {
+ if (conf.doCache) {
+ implCache.tryBoth(this);
+ }
+ } else if (token == "sub-impl") {
+ //subsume BIN with BIN
+ if (conf.doStrSubImplicit) {
+ subsumeImplicit->subsume_implicit();
+ }
+ } else if (token == "intree-probe") {
+ if (conf.doIntreeProbe) {
+ intree->intree_probe();
+ }
+ } else if (token == "probe") {
+ if (conf.doProbe)
+ prober->probe();
+ } else if (token == "sub-str-cls-with-bin") {
+ //Subsumes and strengthens long clauses with binary clauses
+ if (conf.do_distill_clauses) {
+ dist_long_with_impl->distill_long_with_implicit(true);
+ }
+ } else if (token == "sub-cls-with-bin") {
+ //Subsumes and strengthens long clauses with binary clauses
+ if (conf.do_distill_clauses) {
+ dist_long_with_impl->distill_long_with_implicit(false);
+ }
+ } else if (token == "distill-cls") {
+ //Enqueues literals in long + tri clauses two-by-two and propagates
+ if (conf.do_distill_clauses) {
+ distill_long_cls->distill(false);
+ }
+ } else if (token == "str-impl") {
+ //Strengthens BIN&TRI with BIN&TRI
+ if (conf.doStrSubImplicit) {
+ dist_impl_with_impl->str_impl_w_impl_stamp();
+ }
+ } else if (token == "check-cache-size") {
+ //Delete and disable cache if too large
+ if (conf.doCache) {
+ const size_t memUsedMB = implCache.mem_used()/(1024UL*1024UL);
+ if (memUsedMB > conf.maxCacheSizeMB) {
+ if (conf.verbosity) {
+ cout
+ << "c Turning off cache, memory used, "
+ << memUsedMB << " MB"
+ << " is over limit of " << conf.maxCacheSizeMB << " MB"
+ << endl;
+ }
+ implCache.free();
+ conf.doCache = false;
+ }
+ }
+ } else if (token == "renumber" || token == "must-renumber") {
+ if (conf.doRenumberVars) {
+ //Clean cache before renumber -- very important, otherwise
+ //we will be left with lits inside the cache that are out-of-bounds
+ if (conf.doCache) {
+ bool setSomething = true;
+ while(setSomething) {
+ if (!implCache.clean(this, &setSomething))
+ return false;
+ }
+ }
+
+ if (!renumber_variables(token == "must-renumber")) {
+ return false;
+ }
+ }
+ } else if (token == "") {
+ //Nothing, just an empty comma, ignore
+ } else if (token.substr(0,3) == "occ") {
+ occ_strategy_tokens += token + ", ";
+ //cout << "occ_strategy_tokens now: " << occ_strategy_tokens << endl;
+ } else {
+ cout << "ERROR: strategy '" << token << "' not recognised!" << endl;
+ exit(-1);
+ }
+
+ #ifdef SLOW_DEBUG
+ check_stats();
+ #endif
+
+ if (!ok) {
+ return ok;
+ }
+ check_wrong_attach();
+ }
+
+ return ok;
+}
+
+/**
+@brief The function that brings together almost all CNF-simplifications
+*/
+lbool Solver::simplify_problem(const bool startup)
+{
+ assert(ok);
+ #ifdef DEBUG_IMPLICIT_STATS
+ check_stats();
+ #endif
+ #ifdef DEBUG_ATTACH_MORE
+ test_all_clause_attached();
+ find_all_attach();
+ assert(check_order_heap_sanity());
+ #endif
+ #ifdef DEBUG_MARKED_CLAUSE
+ assert(solver->no_marked_clauses());
+ #endif
+
+ clear_order_heap();
+ #ifdef USE_GAUSS
+ clearEnGaussMatrixes();
+ #endif
+
+ if (conf.verbosity >= 6) {
+ cout
+ << "c " << __func__ << " called"
+ << endl;
+ }
+
+ if (startup) {
+ execute_inprocess_strategy(startup, conf.simplify_schedule_startup);
+ } else {
+ execute_inprocess_strategy(startup, conf.simplify_schedule_nonstartup);
+ }
+
+ //Free unused watch memory
+ free_unused_watches();
+
+ if (conf.verbosity >= 6) {
+ cout << "c " << __func__ << " finished" << endl;
+ }
+ conf.global_timeout_multiplier *= conf.global_timeout_multiplier_multiplier;
+ conf.global_timeout_multiplier =
+ std::min<double>(
+ conf.global_timeout_multiplier,
+ conf.orig_global_timeout_multiplier*conf.global_multiplier_multiplier_max
+ );
+ if (conf.verbosity)
+ cout << "c global_timeout_multiplier: " << conf. global_timeout_multiplier << endl;
+
+ solveStats.numSimplify++;
+
+ if (!ok) {
+ return l_False;
+ } else {
+ check_stats();
+ check_implicit_propagated();
+ rebuildOrderHeap();
+ #ifdef DEBUG_ATTACH_MORE
+ find_all_attach();
+ test_all_clause_attached();
+ #endif
+ check_wrong_attach();
+
+ return l_Undef;
+ }
+}
+
+void Solver::print_prop_confl_stats(
+ std::string name
+ , const vector<ClauseUsageStats>& cl_usage_stats
+) const {
+ for(size_t i = 0; i < cl_usage_stats.size(); i++) {
+ //Nothing to do here, no stats really
+ if (cl_usage_stats[i].num == 0)
+ continue;
+
+ cout
+ << name << " : " << std::setw(4) << i
+ << " Avg. props: " << std::setw(6) << std::fixed << std::setprecision(2)
+ << float_div(cl_usage_stats[i].sumProp, cl_usage_stats[i].num);
+
+ cout
+ << name << " : " << std::setw(4) << i
+ << " Avg. confls: " << std::setw(6) << std::fixed << std::setprecision(2)
+ << float_div(cl_usage_stats[i].sumConfl, cl_usage_stats[i].num);
+
+ if (cl_usage_stats[i].sumLookedAt > 0) {
+ cout
+ << " Props&confls/looked at: " << std::setw(6) << std::fixed << std::setprecision(2)
+ << float_div(cl_usage_stats[i].sumPropAndConfl(), cl_usage_stats[i].sumLookedAt);
+ }
+
+ cout << endl;
+ }
+}
+
+void Solver::print_stats(const double cpu_time) const
+{
+ cout << "c ------- FINAL TOTAL SEARCH STATS ---------" << endl;
+ if (conf.do_print_times)
+ print_stats_line("c UIP search time"
+ , sumSearchStats.cpu_time
+ , stats_line_percent(sumSearchStats.cpu_time, cpu_time)
+ , "% time"
+ );
+
+ if (conf.verbStats >= 2) {
+ print_full_restart_stat(cpu_time);
+ } else if (conf.verbStats == 1) {
+ print_norm_stats(cpu_time);
+ } else {
+ print_min_stats(cpu_time);
+ }
+}
+
+
+void Solver::print_min_stats(const double cpu_time) const
+{
+ sumSearchStats.print_short(sumPropStats.propagations, conf.do_print_times);
+ print_stats_line("c props/decision"
+ , float_div(propStats.propagations, sumSearchStats.decisions)
+ );
+ print_stats_line("c props/conflict"
+ , float_div(propStats.propagations, sumConflicts)
+ );
+
+ print_stats_line("c 0-depth assigns", trail.size()
+ , stats_line_percent(trail.size(), nVars())
+ , "% vars"
+ );
+
+ //Failed lit stats
+ if (conf.doProbe) {
+ if (conf.do_print_times)
+ print_stats_line("c probing time"
+ , prober->get_stats().cpu_time
+ , stats_line_percent(prober->get_stats().cpu_time, cpu_time)
+ , "% time"
+ );
+ }
+ //OccSimplifier stats
+ if (conf.perform_occur_based_simp) {
+ if (conf.do_print_times)
+ print_stats_line("c OccSimplifier time"
+ , occsimplifier->get_stats().total_time()
+ , stats_line_percent(occsimplifier->get_stats().total_time() ,cpu_time)
+ , "% time"
+ );
+ }
+ if (conf.do_print_times)
+ print_stats_line("c SCC time"
+ , varReplacer->get_scc_finder()->get_stats().cpu_time
+ , stats_line_percent(varReplacer->get_scc_finder()->get_stats().cpu_time, cpu_time)
+ , "% time"
+ );
+ varReplacer->get_scc_finder()->get_stats().print_short(NULL);
+
+ //varReplacer->get_stats().print_short(nVars());
+ if (conf.do_print_times)
+ print_stats_line("c distill time"
+ , distill_long_cls->get_stats().time_used
+ , stats_line_percent(distill_long_cls->get_stats().time_used, cpu_time)
+ , "% time"
+ );
+ if (conf.do_print_times)
+ print_stats_line("c strength cache-irred time"
+ , dist_long_with_impl->get_stats().irredCacheBased.cpu_time
+ , stats_line_percent(dist_long_with_impl->get_stats().irredCacheBased.cpu_time, cpu_time)
+ , "% time"
+ );
+ if (conf.do_print_times)
+ print_stats_line("c strength cache-red time"
+ , dist_long_with_impl->get_stats().redCacheBased.cpu_time
+ , stats_line_percent(dist_long_with_impl->get_stats().redCacheBased.cpu_time, cpu_time)
+ , "% time"
+ );
+
+ if (conf.do_print_times) {
+ print_stats_line("c Conflicts in UIP"
+ , sumConflicts
+ , float_div(sumConflicts, cpu_time)
+ , "confl/TOTAL_TIME_SEC"
+ );
+ } else {
+ print_stats_line("c Conflicts in UIP", sumConflicts);
+ }
+ if (conf.do_print_times)
+ print_stats_line("c Total time", cpu_time);
+ double vm_usage;
+ print_stats_line("c Mem used"
+ , (double)memUsedTotal(vm_usage)/(1024UL*1024UL)
+ , "MB"
+ );
+}
+
+void Solver::print_norm_stats(const double cpu_time) const
+{
+ sumSearchStats.print_short(sumPropStats.propagations, conf.do_print_times);
+ print_stats_line("c props/decision"
+ , float_div(propStats.propagations, sumSearchStats.decisions)
+ );
+ print_stats_line("c props/conflict"
+ , float_div(propStats.propagations, sumConflicts)
+ );
+
+ print_stats_line("c 0-depth assigns", trail.size()
+ , stats_line_percent(trail.size(), nVars())
+ , "% vars"
+ );
+ print_stats_line("c 0-depth assigns by CNF"
+ , zeroLevAssignsByCNF
+ , stats_line_percent(zeroLevAssignsByCNF, nVars())
+ , "% vars"
+ );
+
+ print_stats_line("c reduceDB time"
+ , reduceDB->get_total_time()
+ , stats_line_percent(reduceDB->get_total_time(), cpu_time)
+ , "% time"
+ );
+
+ //Failed lit stats
+ if (conf.doProbe
+ && prober
+ ) {
+ prober->get_stats().print_short(this, 0, 0);
+ if (conf.do_print_times)
+ print_stats_line("c probing time"
+ , prober->get_stats().cpu_time
+ , stats_line_percent(prober->get_stats().cpu_time, cpu_time)
+ , "% time"
+ );
+
+ prober->get_stats().print_short(this, 0, 0);
+ }
+ //OccSimplifier stats
+ if (conf.perform_occur_based_simp) {
+ if (conf.do_print_times)
+ print_stats_line("c OccSimplifier time"
+ , occsimplifier->get_stats().total_time()
+ , stats_line_percent(occsimplifier->get_stats().total_time() ,cpu_time)
+ , "% time"
+ );
+ occsimplifier->get_stats().print_short();
+ }
+ print_stats_line("c SCC time"
+ , varReplacer->get_scc_finder()->get_stats().cpu_time
+ , stats_line_percent(varReplacer->get_scc_finder()->get_stats().cpu_time, cpu_time)
+ , "% time"
+ );
+ varReplacer->get_scc_finder()->get_stats().print_short(NULL);
+ varReplacer->print_some_stats(cpu_time);
+
+ //varReplacer->get_stats().print_short(nVars());
+ print_stats_line("c distill time"
+ , distill_long_cls->get_stats().time_used
+ , stats_line_percent(distill_long_cls->get_stats().time_used, cpu_time)
+ , "% time"
+ );
+ print_stats_line("c strength cache-irred time"
+ , dist_long_with_impl->get_stats().irredCacheBased.cpu_time
+ , stats_line_percent(dist_long_with_impl->get_stats().irredCacheBased.cpu_time, cpu_time)
+ , "% time"
+ );
+ print_stats_line("c strength cache-red time"
+ , dist_long_with_impl->get_stats().redCacheBased.cpu_time
+ , stats_line_percent(dist_long_with_impl->get_stats().redCacheBased.cpu_time, cpu_time)
+ , "% time"
+ );
+ if (conf.doCache) {
+ implCache.print_statsSort(this);
+ }
+
+ if (conf.do_print_times) {
+ print_stats_line("c Conflicts in UIP"
+ , sumConflicts
+ , float_div(sumConflicts, cpu_time)
+ , "confl/TOTAL_TIME_SEC"
+ );
+ } else {
+ print_stats_line("c Conflicts in UIP", sumConflicts);
+ }
+ double vm_usage;
+ print_stats_line("c Mem used"
+ , (double)memUsedTotal(vm_usage)/(1024UL*1024UL)
+ , "MB"
+ );
+ if (conf.do_print_times)
+ print_stats_line("c Total time", cpu_time);
+}
+
+void Solver::print_full_restart_stat(const double cpu_time) const
+{
+ sumSearchStats.print(sumPropStats.propagations, conf.do_print_times);
+ sumPropStats.print(sumSearchStats.cpu_time);
+ print_stats_line("c props/decision"
+ , float_div(propStats.propagations, sumSearchStats.decisions)
+ );
+ print_stats_line("c props/conflict"
+ , float_div(propStats.propagations, sumConflicts)
+ );
+ cout << "c ------- FINAL TOTAL SOLVING STATS END ---------" << endl;
+ //reduceDB->get_total_time().print(cpu_time);
+
+ print_stats_line("c 0-depth assigns", trail.size()
+ , stats_line_percent(trail.size(), nVars())
+ , "% vars"
+ );
+ print_stats_line("c 0-depth assigns by CNF"
+ , zeroLevAssignsByCNF
+ , stats_line_percent(zeroLevAssignsByCNF, nVars())
+ , "% vars"
+ );
+
+ //Failed lit stats
+ if (conf.doProbe) {
+ if (conf.do_print_times)
+ print_stats_line("c probing time"
+ , prober->get_stats().cpu_time
+ , stats_line_percent(prober->get_stats().cpu_time, cpu_time)
+ , "% time"
+ );
+
+ prober->get_stats().print(nVars(), conf.do_print_times);
+ }
+
+ //OccSimplifier stats
+ if (conf.perform_occur_based_simp) {
+ if (conf.do_print_times)
+ print_stats_line("c OccSimplifier time"
+ , occsimplifier->get_stats().total_time()
+ , stats_line_percent(occsimplifier->get_stats().total_time(), cpu_time)
+ , "% time"
+ );
+
+ occsimplifier->get_stats().print(nVars());
+ }
+
+ //TODO after TRI to LONG conversion
+ /*if (occsimplifier && conf.doGateFind) {
+ occsimplifier->print_gatefinder_stats();
+ }*/
+
+ //VarReplacer stats
+ if (conf.do_print_times)
+ print_stats_line("c SCC time"
+ , varReplacer->get_scc_finder()->get_stats().cpu_time
+ , stats_line_percent(varReplacer->get_scc_finder()->get_stats().cpu_time, cpu_time)
+ , "% time"
+ );
+ varReplacer->get_scc_finder()->get_stats().print();
+
+ varReplacer->get_stats().print(nVars());
+ varReplacer->print_some_stats(cpu_time);
+
+ //DistillerAllWithAll stats
+ if (conf.do_print_times)
+ print_stats_line("c distill time"
+ , distill_long_cls->get_stats().time_used
+ , stats_line_percent(distill_long_cls->get_stats().time_used, cpu_time)
+ , "% time");
+ distill_long_cls->get_stats().print(nVars());
+
+ if (conf.do_print_times)
+ print_stats_line("c strength cache-irred time"
+ , dist_long_with_impl->get_stats().irredCacheBased.cpu_time
+ , stats_line_percent(dist_long_with_impl->get_stats().irredCacheBased.cpu_time, cpu_time)
+ , "% time");
+ if (conf.do_print_times)
+ print_stats_line("c strength cache-red time"
+ , dist_long_with_impl->get_stats().redCacheBased.cpu_time
+ , stats_line_percent(dist_long_with_impl->get_stats().redCacheBased.cpu_time, cpu_time)
+ , "% time");
+ dist_long_with_impl->get_stats().print();
+
+ if (conf.doStrSubImplicit) {
+ subsumeImplicit->get_stats().print();
+ }
+
+ if (conf.doCache) {
+ implCache.print_stats(this);
+ }
+
+ //Other stats
+ if (conf.do_print_times) {
+ print_stats_line("c Conflicts in UIP"
+ , sumConflicts
+ , float_div(sumConflicts, cpu_time)
+ , "confl/TOTAL_TIME_SEC"
+ );
+ } else {
+ print_stats_line("c Conflicts in UIP", sumConflicts);
+ }
+ if (conf.do_print_times)
+ print_stats_line("c Total time", cpu_time);
+ print_mem_stats();
+}
+
+uint64_t Solver::print_watch_mem_used(const uint64_t rss_mem_used) const
+{
+ size_t alloc = watches.mem_used_alloc();
+ print_stats_line("c Mem for watch alloc"
+ , alloc/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(alloc, rss_mem_used)
+ , "%"
+ );
+
+ size_t array = watches.mem_used_array();
+ print_stats_line("c Mem for watch array"
+ , array/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(array, rss_mem_used)
+ , "%"
+ );
+
+ return alloc + array;
+}
+
+size_t Solver::mem_used() const
+{
+ size_t mem = 0;
+ mem += Searcher::mem_used();
+ mem += outside_assumptions.capacity()*sizeof(Lit);
+
+ return mem;
+}
+
+uint64_t Solver::mem_used_vardata() const
+{
+ uint64_t mem = 0;
+ mem += assigns.capacity()*sizeof(lbool);
+ mem += varData.capacity()*sizeof(VarData);
+
+ return mem;
+}
+
+void Solver::print_mem_stats() const
+{
+ double vm_mem_used = 0;
+ const uint64_t rss_mem_used = memUsedTotal(vm_mem_used);
+ print_stats_line("c Mem used"
+ , rss_mem_used/(1024UL*1024UL)
+ , "MB"
+ );
+ uint64_t account = 0;
+
+ account += print_mem_used_longclauses(rss_mem_used);
+ account += print_watch_mem_used(rss_mem_used);
+
+ size_t mem = 0;
+ mem += mem_used_vardata();
+ print_stats_line("c Mem for assings&vardata"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ mem = implCache.mem_used();
+ print_stats_line("c Mem for implication cache"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ account += print_stamp_mem(rss_mem_used);
+
+ mem = mem_used();
+ print_stats_line("c Mem for search&solve"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ mem = CNF::mem_used_renumberer();
+ print_stats_line("c Mem for renumberer"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ if (compHandler) {
+ mem = compHandler->mem_used();
+ print_stats_line("c Mem for component handler"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+ }
+
+ if (occsimplifier) {
+ mem = occsimplifier->mem_used();
+ print_stats_line("c Mem for occsimplifier"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ mem = occsimplifier->mem_used_xor();
+ print_stats_line("c Mem for xor-finder"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+ }
+
+ mem = varReplacer->mem_used();
+ print_stats_line("c Mem for varReplacer&SCC"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ if (subsumeImplicit) {
+ mem = subsumeImplicit->mem_used();
+ print_stats_line("c Mem for impl subsume"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+ }
+
+
+ mem = distill_long_cls->mem_used();
+ mem += dist_long_with_impl->mem_used();
+ mem += dist_impl_with_impl->mem_used();
+ print_stats_line("c Mem for 3 distills"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+
+ if (prober) {
+ mem = prober->mem_used() + intree->mem_used();
+ print_stats_line("c Mem for prober+intree"
+ , mem/(1024UL*1024UL)
+ , "MB"
+ , stats_line_percent(mem, rss_mem_used)
+ , "%"
+ );
+ account += mem;
+ }
+
+ print_stats_line("c Accounted for mem (rss)"
+ , stats_line_percent(account, rss_mem_used)
+ , "%"
+ );
+ print_stats_line("c Accounted for mem (vm)"
+ , stats_line_percent(account, vm_mem_used)
+ , "%"
+ );
+}
+
+void Solver::print_clause_size_distrib()
+{
+ size_t size3 = 0;
+ size_t size4 = 0;
+ size_t size5 = 0;
+ size_t sizeLarge = 0;
+ for(vector<ClOffset>::const_iterator
+ it = longIrredCls.begin(), end = longIrredCls.end()
+ ; it != end
+ ; ++it
+ ) {
+ Clause* cl = cl_alloc.ptr(*it);
+ switch(cl->size()) {
+ case 0:
+ case 1:
+ case 2:
+ assert(false);
+ break;
+ case 3:
+ size3++;
+ break;
+ case 4:
+ size4++;
+ break;
+ case 5:
+ size5++;
+ break;
+ default:
+ sizeLarge++;
+ break;
+ }
+ }
+
+ cout
+ << "c clause size stats."
+ << " size3: " << size3
+ << " size4: " << size4
+ << " size5: " << size5
+ << " larger: " << sizeLarge << endl;
+}
+
+
+vector<Lit> Solver::get_zero_assigned_lits(const bool backnumber,
+ const bool only_nvars) const
+{
+ vector<Lit> lits;
+ assert(decisionLevel() == 0);
+ size_t until;
+ if (only_nvars) {
+ until = nVars();
+ } else {
+ until = assigns.size();
+ }
+ for(size_t i = 0; i < until; i++) {
+ if (assigns[i] != l_Undef) {
+ Lit lit(i, assigns[i] == l_False);
+
+ //Update to higher-up
+ lit = varReplacer->get_lit_replaced_with(lit);
+ if (varData[lit.var()].is_bva == false) {
+ if (backnumber) {
+ lits.push_back(map_inter_to_outer(lit));
+ } else {
+ lits.push_back(lit);
+ }
+
+ }
+
+ //Everything it repaces has also been set
+ const vector<uint32_t> vars = varReplacer->get_vars_replacing(lit.var());
+ for(const uint32_t var: vars) {
+ if (varData[var].is_bva)
+ continue;
+
+ Lit tmp_lit = Lit(var, false);
+ assert(varReplacer->get_lit_replaced_with(tmp_lit).var() == lit.var());
+ if (lit != varReplacer->get_lit_replaced_with(tmp_lit)) {
+ tmp_lit ^= true;
+ }
+ assert(lit == varReplacer->get_lit_replaced_with(tmp_lit));
+
+ if (backnumber) {
+ lits.push_back(map_inter_to_outer(tmp_lit));
+ } else {
+ lits.push_back(tmp_lit);
+ }
+ }
+ }
+ }
+
+ //Remove duplicates. Because of above replacing-mimicing algo
+ //multipe occurrences of literals can be inside
+ std::sort(lits.begin(), lits.end());
+ vector<Lit>::iterator it = std::unique (lits.begin(), lits.end());
+ lits.resize( std::distance(lits.begin(),it) );
+
+ //Update to outer without BVA
+ if (backnumber) {
+ vector<uint32_t> my_map = build_outer_to_without_bva_map();
+ updateLitsMap(lits, my_map);
+ for(const Lit lit: lits) {
+ assert(lit.var() < nVarsOutside());
+ }
+ }
+
+ return lits;
+}
+
+bool Solver::verify_model_implicit_clauses() const
+{
+ uint32_t wsLit = 0;
+ for (watch_array::const_iterator
+ it = watches.begin(), end = watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ Lit lit = Lit::toLit(wsLit);
+ watch_subarray_const ws = *it;
+
+ for (Watched w: ws) {
+ if (w.isBin()
+ && model_value(lit) != l_True
+ && model_value(w.lit2()) != l_True
+ ) {
+ cout
+ << "bin clause: "
+ << lit << " , " << w.lit2()
+ << " not satisfied!"
+ << endl;
+
+ cout
+ << "value of unsat bin clause: "
+ << value(lit) << " , " << value(w.lit2())
+ << endl;
+
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+bool Solver::verify_model_long_clauses(const vector<ClOffset>& cs) const
+{
+ #ifdef VERBOSE_DEBUG
+ cout << "Checking clauses whether they have been properly satisfied." << endl;
+ #endif
+
+ bool verificationOK = true;
+
+ for (vector<ClOffset>::const_iterator
+ it = cs.begin(), end = cs.end()
+ ; it != end
+ ; ++it
+ ) {
+ Clause& cl = *cl_alloc.ptr(*it);
+ for (uint32_t j = 0; j < cl.size(); j++)
+ if (model_value(cl[j]) == l_True)
+ goto next;
+
+ cout << "unsatisfied clause: " << cl << endl;
+ verificationOK = false;
+ next:
+ ;
+ }
+
+ return verificationOK;
+}
+
+bool Solver::verify_model() const
+{
+ bool verificationOK = true;
+ verificationOK &= verify_model_long_clauses(longIrredCls);
+ for(auto& lredcls: longRedCls) {
+ verificationOK &= verify_model_long_clauses(lredcls);
+ }
+ verificationOK &= verify_model_implicit_clauses();
+
+ if (conf.verbosity && verificationOK) {
+ cout
+ << "c Verified "
+ << longIrredCls.size() + longRedCls.size()
+ + binTri.irredBins + binTri.redBins
+ << " clause(s)."
+ << endl;
+ }
+
+ return verificationOK;
+}
+
+size_t Solver::get_num_nonfree_vars() const
+{
+ size_t nonfree = 0;
+ if (decisionLevel() == 0) {
+ nonfree += trail.size();
+ } else {
+ nonfree += trail_lim[0];
+ }
+
+ if (occsimplifier) {
+ if (conf.perform_occur_based_simp) {
+ nonfree += occsimplifier->get_num_elimed_vars();
+ }
+ }
+ nonfree += varReplacer->get_num_replaced_vars();
+
+
+ if (compHandler) {
+ nonfree += compHandler->get_num_vars_removed();
+ }
+ return nonfree;
+}
+
+size_t Solver::get_num_free_vars() const
+{
+ return nVarsOuter() - get_num_nonfree_vars();
+}
+
+void Solver::print_clause_stats() const
+{
+ //Irredundant
+ print_value_kilo_mega(longIrredCls.size());
+ print_value_kilo_mega(binTri.irredBins);
+ cout
+ << " " << std::setw(7) << std::fixed << std::setprecision(2)
+ << ratio_for_stat(litStats.irredLits, longIrredCls.size())
+ << " " << std::setw(7) << std::fixed << std::setprecision(2)
+ << ratio_for_stat(litStats.irredLits + binTri.irredBins*2
+ , longIrredCls.size() + binTri.irredBins)
+ ;
+
+ //Redundant
+ size_t tot = 0;
+ for(auto& lredcls: longRedCls) {
+ print_value_kilo_mega(lredcls.size());
+ tot += lredcls.size();
+ }
+
+ print_value_kilo_mega(binTri.redBins);
+ cout
+ << " " << std::setw(7) << std::fixed << std::setprecision(2)
+ << ratio_for_stat(litStats.redLits, tot)
+ << " " << std::setw(7) << std::fixed << std::setprecision(2)
+ << ratio_for_stat(litStats.redLits + binTri.redBins*2
+ , tot + binTri.redBins)
+ ;
+}
+
+const char* Solver::get_version_sha1()
+{
+ return CMSat::get_version_sha1();
+}
+
+const char* Solver::get_version_tag()
+{
+ return CMSat::get_version_tag();
+}
+
+const char* Solver::get_compilation_env()
+{
+ return CMSat::get_compilation_env();
+}
+
+void Solver::print_watch_list(watch_subarray_const ws, const Lit lit) const
+{
+ for (const Watched *it = ws.begin(), *end = ws.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (it->isClause()) {
+ cout
+ << "Clause: " << *cl_alloc.ptr(it->get_offset());
+ }
+
+ if (it->isBin()) {
+ cout
+ << "BIN: " << lit << ", " << it->lit2()
+ << " (l: " << it->red() << ")";
+ }
+
+ cout << endl;
+ }
+ cout << endl;
+}
+
+void Solver::check_implicit_propagated() const
+{
+ const double myTime = cpuTime();
+ size_t wsLit = 0;
+ for(watch_array::const_iterator
+ it = watches.begin(), end = watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ const Lit lit = Lit::toLit(wsLit);
+ watch_subarray_const ws = *it;
+ for(const Watched *it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ //Satisfied, or not implicit, skip
+ if (value(lit) == l_True
+ || it2->isClause()
+ ) {
+ continue;
+ }
+
+ const lbool val1 = value(lit);
+ const lbool val2 = value(it2->lit2());
+
+ //Handle binary
+ if (it2->isBin()) {
+ if (val1 == l_False) {
+ if (val2 != l_True) {
+ cout << "not prop BIN: "
+ << lit << ", " << it2->lit2()
+ << " (red: " << it2->red()
+ << endl;
+ }
+ assert(val2 == l_True);
+ }
+
+ if (val2 == l_False)
+ assert(val1 == l_True);
+ }
+ }
+ }
+ const double time_used = cpuTime() - myTime;
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ this
+ , "check implicit propagated"
+ , time_used
+ );
+ }
+}
+
+size_t Solver::get_num_vars_elimed() const
+{
+ if (conf.perform_occur_based_simp) {
+ return occsimplifier->get_num_elimed_vars();
+ } else {
+ return 0;
+ }
+}
+
+void Solver::free_unused_watches()
+{
+ size_t wsLit = 0;
+ for (watch_array::iterator
+ it = watches.begin(), end = watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ Lit lit = Lit::toLit(wsLit);
+ if (varData[lit.var()].removed == Removed::elimed
+ || varData[lit.var()].removed == Removed::replaced
+ || varData[lit.var()].removed == Removed::decomposed
+ ) {
+ watch_subarray ws = *it;
+ assert(ws.empty());
+ ws.clear();
+ }
+ }
+
+ consolidate_watches();
+}
+
+bool Solver::fully_enqueue_these(const vector<Lit>& toEnqueue)
+{
+ assert(ok);
+ assert(decisionLevel() == 0);
+ for(const Lit lit: toEnqueue) {
+ if (!fully_enqueue_this(lit)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool Solver::fully_enqueue_this(const Lit lit)
+{
+ const lbool val = value(lit);
+ if (val == l_Undef) {
+ assert(varData[lit.var()].removed == Removed::none);
+ enqueue(lit);
+ ok = propagate<true>().isNULL();
+
+ if (!ok) {
+ return false;
+ }
+ } else if (val == l_False) {
+ ok = false;
+ return false;
+ }
+ return true;
+}
+
+void Solver::new_external_var()
+{
+ new_var(false);
+}
+
+void Solver::new_external_vars(size_t n)
+{
+ new_vars(n);
+}
+
+void Solver::add_in_partial_solving_stats()
+{
+ Searcher::add_in_partial_solving_stats();
+ sumSearchStats += Searcher::get_stats();
+ sumPropStats += propStats;
+}
+
+unsigned long Solver::get_sql_id() const
+{
+ if (sqlStats == NULL) {
+ return 0;
+ }
+
+ return sqlStats->get_runID();
+}
+
+bool Solver::add_clause_outer(const vector<Lit>& lits, bool red)
+{
+ if (!ok) {
+ return false;
+ }
+ check_too_large_variable_number(lits);
+ back_number_from_outside_to_outer(lits);
+ return addClause(back_number_from_outside_to_outer_tmp, red);
+}
+
+bool Solver::add_xor_clause_outer(const vector<uint32_t>& vars, bool rhs)
+{
+ if (!ok) {
+ return false;
+ }
+
+ vector<Lit> lits(vars.size());
+ for(size_t i = 0; i < vars.size(); i++) {
+ lits[i] = Lit(vars[i], false);
+ }
+ check_too_large_variable_number(lits);
+
+ back_number_from_outside_to_outer(lits);
+ addClauseHelper(back_number_from_outside_to_outer_tmp);
+ add_xor_clause_inter(back_number_from_outside_to_outer_tmp, rhs, true, false);
+
+ return ok;
+}
+
+void Solver::check_too_large_variable_number(const vector<Lit>& lits) const
+{
+ for (const Lit lit: lits) {
+ if (lit.var() >= nVarsOutside()) {
+ std::cerr
+ << "ERROR: Variable " << lit.var() + 1
+ << " inserted, but max var is "
+ << nVarsOutside()
+ << endl;
+ assert(false);
+ std::exit(-1);
+ }
+ release_assert(lit.var() < nVarsOutside()
+ && "Clause inserted, but variable inside has not been declared with PropEngine::new_var() !");
+
+ if (lit.var() >= var_Undef) {
+ std::cerr << "ERROR: Variable number " << lit.var()
+ << "too large. PropBy is limiting us, sorry" << endl;
+ assert(false);
+ std::exit(-1);
+ }
+ }
+}
+
+void Solver::bva_changed()
+{
+ datasync->rebuild_bva_map();
+}
+
+vector<pair<Lit, Lit> > Solver::get_all_binary_xors() const
+{
+ vector<pair<Lit, Lit> > bin_xors = varReplacer->get_all_binary_xors_outer();
+
+ //Update to outer without BVA
+ vector<pair<Lit, Lit> > ret;
+ const vector<uint32_t> my_map = build_outer_to_without_bva_map();
+ for(std::pair<Lit, Lit> p: bin_xors) {
+ if (p.first.var() < my_map.size()
+ && p.second.var() < my_map.size()
+ ) {
+ ret.push_back(std::make_pair(
+ getUpdatedLit(p.first, my_map)
+ , getUpdatedLit(p.second, my_map)
+ ));
+ }
+ }
+
+ for(const std::pair<Lit, Lit> val: ret) {
+ assert(val.first.var() < nVarsOutside());
+ assert(val.second.var() < nVarsOutside());
+ }
+
+ return ret;
+}
+
+void Solver::update_assumptions_after_varreplace()
+{
+ //Update assumptions
+ for(AssumptionPair& lit_pair: assumptions) {
+ if (assumptionsSet.size() > lit_pair.lit_inter.var()) {
+ assumptionsSet[lit_pair.lit_inter.var()] = false;
+ } else {
+ assert(value(lit_pair.lit_inter) != l_Undef
+ && "There can be NO other reason -- vars in assumptions cannot be elimed or decomposed");
+ }
+
+ Lit orig = lit_pair.lit_inter;
+ lit_pair.lit_inter = varReplacer->get_lit_replaced_with(lit_pair.lit_inter);
+ //remove old from set
+ if (orig != lit_pair.lit_inter && assumptionsSet.size() > orig.var()) {
+ assumptionsSet[orig.var()] = false;
+ }
+
+ //add new to set
+ if (assumptionsSet.size() > lit_pair.lit_inter.var()) {
+ assumptionsSet[lit_pair.lit_inter.var()] = true;
+ }
+ }
+}
+
+//TODO later, this can be removed, get_num_free_vars() is MUCH cheaper to
+//compute but may have some bugs here-and-there
+uint32_t Solver::num_active_vars() const
+{
+ uint32_t numActive = 0;
+ uint32_t removed_decomposed = 0;
+ uint32_t removed_replaced = 0;
+ uint32_t removed_set = 0;
+ uint32_t removed_elimed = 0;
+ uint32_t removed_non_decision = 0;
+ for(uint32_t var = 0; var < nVarsOuter(); var++) {
+ if (value(var) != l_Undef) {
+ if (varData[var].removed != Removed::none)
+ {
+ cout << "ERROR: var " << var + 1 << " has removed: "
+ << removed_type_to_string(varData[var].removed)
+ << " but is set to " << value(var) << endl;
+ assert(varData[var].removed == Removed::none);
+ exit(-1);
+ }
+ removed_set++;
+ continue;
+ }
+ switch(varData[var].removed) {
+ case Removed::decomposed :
+ removed_decomposed++;
+ continue;
+ case Removed::elimed :
+ removed_elimed++;
+ continue;
+ case Removed::replaced:
+ removed_replaced++;
+ continue;
+ case Removed::none:
+ break;
+ }
+ if (varData[var].removed != Removed::none) {
+ removed_non_decision++;
+ }
+ numActive++;
+ }
+ assert(removed_non_decision == 0);
+ if (occsimplifier) {
+ assert(removed_elimed == occsimplifier->get_num_elimed_vars());
+ } else {
+ assert(removed_elimed == 0);
+ }
+
+ if (compHandler) {
+ assert(removed_decomposed == compHandler->get_num_vars_removed());
+ } else {
+ assert(removed_decomposed == 0);
+ }
+
+ assert(removed_set == ((decisionLevel() == 0) ? trail.size() : trail_lim[0]));
+
+ assert(removed_replaced == varReplacer->get_num_replaced_vars());
+ assert(numActive == get_num_free_vars());
+
+ return numActive;
+}
+
+SolveFeatures Solver::calculate_features()
+{
+ latest_feature_calc++;
+ SolveFeaturesCalc extract(this);
+ SolveFeatures feat = extract.extract();
+ feat.avg_confl_size = hist.conflSizeHistLT.avg();
+ feat.avg_confl_glue = hist.glueHistLTAll.avg();
+ feat.avg_num_resolutions = hist.numResolutionsHistLT.avg();
+ feat.avg_trail_depth_delta = hist.trailDepthDeltaHist.avg();
+ feat.avg_branch_depth = hist.branchDepthHist.avg();
+ feat.avg_branch_depth_delta = hist.branchDepthDeltaHist.avg();
+
+ feat.confl_size_min = hist.conflSizeHistLT.getMin();
+ feat.confl_size_max = hist.conflSizeHistLT.getMax();
+ feat.confl_glue_min = hist.glueHistLTAll.getMin();
+ feat.confl_glue_max = hist.glueHistLTAll.getMax();
+ feat.branch_depth_min = hist.branchDepthHist.getMin();
+ feat.branch_depth_max = hist.branchDepthHist.getMax();
+ feat.trail_depth_delta_min = hist.trailDepthDeltaHist.getMin();
+ feat.trail_depth_delta_max = hist.trailDepthDeltaHist.getMax();
+ feat.num_resolutions_min = hist.numResolutionsHistLT.getMin();
+ feat.num_resolutions_max = hist.numResolutionsHistLT.getMax();
+
+ if (sumPropStats.propagations != 0
+ && sumConflicts != 0
+ && sumSearchStats.numRestarts != 0
+ ) {
+ feat.props_per_confl = (double)sumConflicts / (double)sumPropStats.propagations;
+ feat.confl_per_restart = (double)sumConflicts / (double)sumSearchStats.numRestarts;
+ feat.decisions_per_conflict = (double)sumSearchStats.decisions / (double)sumConflicts;
+ feat.learnt_bins_per_confl = (double)sumSearchStats.learntBins / (double)sumConflicts;
+ }
+
+ feat.num_gates_found_last = sumSearchStats.num_gates_found_last;
+ feat.num_xors_found_last = sumSearchStats.num_xors_found_last;
+
+ if (conf.verbosity) {
+ feat.print_stats();
+ }
+
+ if (sqlStats) {
+ sqlStats->features(this, this, feat);
+ }
+
+ return feat;
+}
+
+void Solver::reconfigure(int val)
+{
+ //TODO adjust distill_queue_by !!
+
+ assert(val > 0);
+ switch (val) {
+ case 3: {
+ //Glue clause cleaning
+ conf.maple = 0;
+ VSIDS = true;
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.glue_put_lev1_if_below_or_eq = 0;
+
+ conf.adjust_glue_if_too_many_low = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0.5;
+ conf.inc_max_temp_lev2_red_cls = 1.03;
+
+ reset_temp_cl_num();
+ break;
+ }
+
+ case 4: {
+ conf.maple = 0;
+ VSIDS = true;
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.glue_put_lev1_if_below_or_eq = 0;
+ conf.max_temp_lev2_learnt_clauses = 10000;
+ reset_temp_cl_num();
+ break;
+ }
+
+ case 6: {
+ //No more simplifying
+ conf.maple = 0;
+ VSIDS = true;
+ conf.never_stop_search = true;
+ break;
+ }
+
+ case 7: {
+ //Geom restart, but keep low glue clauses
+ conf.maple = 0;
+ VSIDS = true;
+ conf.varElimRatioPerIter = 0.2;
+ conf.restartType = Restart::geom;
+ conf.polarity_mode = CMSat::PolarityMode::polarmode_neg;
+
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.glue_put_lev1_if_below_or_eq = 0;
+ conf.inc_max_temp_lev2_red_cls = 1.02;
+
+ reset_temp_cl_num();
+ break;
+ }
+
+ case 12: {
+ //Mix of keeping clauses
+ conf.maple = 0;
+ VSIDS = true;
+ conf.do_bva = false;
+ conf.varElimRatioPerIter = 1;
+ conf.every_lev1_reduce = 0;
+ conf.every_lev2_reduce = 0;
+ conf.glue_put_lev1_if_below_or_eq = 0;
+
+ conf.glue_put_lev0_if_below_or_eq = 2;
+ conf.glue_put_lev1_if_below_or_eq = 4;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0.1;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.3;
+ conf.inc_max_temp_lev2_red_cls = 1.04;
+
+ conf.var_decay_vsids_max = 0.90; //more 'slow' in adjusting activities
+ update_var_decay_vsids();
+ reset_temp_cl_num();
+ break;
+ }
+
+ case 13: {
+ conf.maple = 0;
+ VSIDS = true;
+ conf.orig_global_timeout_multiplier = 5;
+ conf.global_timeout_multiplier = conf.orig_global_timeout_multiplier;
+ conf.global_multiplier_multiplier_max = 5;
+
+ conf.num_conflicts_of_search_inc = 1.15;
+ conf.more_red_minim_limit_cache = 1200;
+ conf.more_red_minim_limit_binary = 600;
+ conf.max_num_lits_more_more_red_min = 20;
+
+ conf.max_temp_lev2_learnt_clauses = 10000;
+ conf.var_decay_vsids_max = 0.99; //more 'fast' in adjusting activities
+ update_var_decay_vsids();
+ break;
+ }
+
+ case 14: {
+ conf.maple = 0;
+ VSIDS = true;
+ conf.shortTermHistorySize = 600;
+ conf.doAlwaysFMinim = true;
+ break;
+ }
+
+ case 15: {
+ conf.maple = 0;
+ VSIDS = true;
+ //Like OLD-OLD minisat
+ conf.varElimRatioPerIter = 1;
+ conf.restartType = Restart::geom;
+ conf.polarity_mode = CMSat::PolarityMode::polarmode_neg;
+
+ //conf.every_lev1_reduce = 0;
+ //conf.every_lev2_reduce = 0;
+ //conf.glue_put_lev1_if_below_or_eq = 0;
+ //conf.glue_put_lev0_if_below_or_eq = 0;
+ conf.inc_max_temp_lev2_red_cls = 1.01;
+
+ conf.update_glues_on_analyze = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ conf.ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.5;
+ reset_temp_cl_num();
+ break;
+ }
+
+ case 16: {
+ conf.maple = 1;
+ conf.modulo_maple_iter = 100;
+ VSIDS = false;
+ break;
+ }
+
+ default: {
+ cout << "ERROR: Only reconfigure values of 3,4,6,7,12,13,14,15,16 are supported" << endl;
+ exit(-1);
+ }
+ }
+
+ if (conf.verbosity) {
+ cout << "c [features] reconfigured solver to config " << val << endl;
+ }
+
+ /*Note to self: change
+ * inc_max_temp_red_cls 1.1 -> 1.3
+ * numCleanBetweenSimplify 2->4
+ * bva: 1->0
+ */
+}
+
+void Solver::save_state(const string& fname, const lbool status) const
+{
+ SimpleOutFile f;
+ f.start(fname);
+
+ f.put_lbool(status);
+ Searcher::save_state(f, status);
+ //f.put_struct(sumStats);
+ //f.put_struct(sumPropStats);
+ //f.put_vector(outside_assumptions);
+
+ varReplacer->save_state(f);
+ if (occsimplifier) {
+ occsimplifier->save_state(f);
+ }
+}
+
+lbool Solver::load_state(const string& fname)
+{
+ SimpleInFile f;
+ f.start(fname);
+
+ const lbool status = f.get_lbool();
+ Searcher::load_state(f, status);
+ //f.get_struct(sumStats);
+ //f.get_struct(sumPropStats);
+ //f.get_vector(outside_assumptions);
+
+ varReplacer->load_state(f);
+ if (occsimplifier) {
+ occsimplifier->load_state(f);
+ }
+
+ return status;
+}
+
+lbool Solver::load_solution_from_file(const string& fname)
+{
+ //At this point, model is set up, we just need to fill the l_Undef in
+ //from assigns
+ lbool status = l_Undef;
+ FILE* input_stream = fopen(fname.c_str(), "r");
+ if (input_stream == NULL) {
+ std::cerr << "ERROR: could not open solution file "
+ << fname
+ << endl;
+ std::exit(-1);
+ }
+ StreamBuffer<FILE*, FN> in(input_stream);
+
+ unsigned lineNum = 0;
+ std::string str;
+ bool sol_already_seen = false;
+ for (;;) {
+ in.skipWhitespace();
+ switch (*in) {
+ case EOF:
+ goto end;
+ case 's': {
+ if (sol_already_seen) {
+ std::cerr << "ERROR: The input file you gave for solution extension contains more than one line starting with 's', which indicates more than one solution! That is not supported!" << endl;
+ exit(-1);
+ }
+ sol_already_seen = true;
+ ++in;
+ in.skipWhitespace();
+ in.parseString(str);
+ if (str == "SATISFIABLE") {
+ status = l_True;
+ } else if (str == "UNSATISFIABLE") {
+ status = l_False;
+ goto end;
+ } else if (str == "INDETERMINATE") {
+ std::cerr << "The solution given for preproc extension is INDETERMINATE -- we cannot extend it!" << endl;
+ exit(-1);
+ } else {
+ std::cerr << "ERROR: Cannot parse solution line starting with 's'"
+ << endl;
+ std::exit(-1);
+ }
+ in.skipLine();
+ lineNum++;
+ break;
+ }
+ case 'v': {
+ if (status == l_False) {
+ std::cerr << "ERROR: The solution you gave is UNSAT but it has 'v' lines. This is definietely wrong." << endl;
+ exit(-1);
+ }
+ ++in;
+ parse_v_line(&in, lineNum);
+ in.skipLine();
+ lineNum++;
+ break;
+ }
+ case '\n':
+ std::cerr
+ << "c WARNING: Empty line at line number " << lineNum+1
+ << " -- this is not part of the DIMACS specifications. Ignoring."
+ << endl;
+ in.skipLine();
+ lineNum++;
+ break;
+ default:
+ in.skipLine();
+ lineNum++;
+ break;
+ }
+ }
+
+ end:
+ fclose(input_stream);
+ return status;
+}
+
+template<typename A>
+void Solver::parse_v_line(A* in, const size_t lineNum)
+{
+ model.resize(nVarsOuter(), l_Undef);
+
+ int32_t parsed_lit;
+ uint32_t var;
+ for (;;) {
+ if (!in->parseInt(parsed_lit, lineNum, true)) {
+ exit(-1);
+ }
+ if (parsed_lit == std::numeric_limits<int32_t>::max()) {
+ break;
+ }
+ if (parsed_lit == 0) break;
+ var = abs(parsed_lit)-1;
+ if (var >= nVars()
+ || var >= model.size()
+ || var >= varData.size()
+ ) {
+ std::cerr
+ << "ERROR! "
+ << "Variable in solution is too large: " << var +1 << endl
+ << "--> At line " << lineNum+1
+ << endl;
+ std::exit(-1);
+ }
+
+ //Don't overwrite previously computed values
+ if (model[var] == l_Undef
+ && varData[var].removed == Removed::none
+ ) {
+ model[var] = parsed_lit < 0 ? l_False : l_True;
+ if (conf.verbosity >= 10) {
+ uint32_t outer_var = map_inter_to_outer(var);
+ cout << "Read V line: model for inter var " << (var+1)
+ << " (outer ver for this is: " << outer_var+1 << ")"
+ << " set to " << model[var] << endl;
+ }
+ }
+ }
+}
+
+
+void Solver::check_implicit_stats(const bool onlypairs) const
+{
+ //Don't check if in crazy mode
+ #ifdef NDEBUG
+ return;
+ #endif
+ const double myTime = cpuTime();
+
+ //Check number of red & irred binary clauses
+ uint64_t thisNumRedBins = 0;
+ uint64_t thisNumIrredBins = 0;
+
+ size_t wsLit = 0;
+ for(watch_array::const_iterator
+ it = watches.begin(), end = watches.end()
+ ; it != end
+ ; ++it, wsLit++
+ ) {
+ watch_subarray_const ws = *it;
+ for(const Watched* it2 = ws.begin(), *end2 = ws.end()
+ ; it2 != end2
+ ; it2++
+ ) {
+ if (it2->isBin()) {
+ #ifdef DEBUG_IMPLICIT_PAIRS_TRIPLETS
+ Lit lits[2];
+ lits[0] = Lit::toLit(wsLit);
+ lits[1] = it2->lit2();
+ std::sort(lits, lits + 2);
+ findWatchedOfBin(watches, lits[0], lits[1], it2->red());
+ findWatchedOfBin(watches, lits[1], lits[0], it2->red());
+ #endif
+
+ if (it2->red())
+ thisNumRedBins++;
+ else
+ thisNumIrredBins++;
+
+ continue;
+ }
+ }
+ }
+
+ if (onlypairs) {
+ goto end;
+ }
+
+ if (thisNumIrredBins/2 != binTri.irredBins) {
+ std::cerr
+ << "ERROR:"
+ << " thisNumIrredBins/2: " << thisNumIrredBins/2
+ << " thisNumIrredBins: " << thisNumIrredBins
+ << " binTri.irredBins: " << binTri.irredBins
+ << endl;
+ }
+ assert(thisNumIrredBins % 2 == 0);
+ assert(thisNumIrredBins/2 == binTri.irredBins);
+
+ if (thisNumRedBins/2 != binTri.redBins) {
+ std::cerr
+ << "ERROR:"
+ << " thisNumRedBins/2: " << thisNumRedBins/2
+ << " thisNumRedBins: " << thisNumRedBins
+ << " binTri.redBins: " << binTri.redBins
+ << endl;
+ }
+ assert(thisNumRedBins % 2 == 0);
+ assert(thisNumRedBins/2 == binTri.redBins);
+
+ end:
+
+ const double time_used = cpuTime() - myTime;
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ this
+ , "check implicit stats"
+ , time_used
+ );
+ }
+}
+
+void Solver::check_stats(const bool allowFreed) const
+{
+ //If in crazy mode, don't check
+ #ifdef NDEBUG
+ return;
+ #endif
+
+ check_implicit_stats();
+
+ const double myTime = cpuTime();
+ uint64_t numLitsIrred = count_lits(longIrredCls, false, allowFreed);
+ if (numLitsIrred != litStats.irredLits) {
+ std::cerr << "ERROR: " << endl
+ << "->numLitsIrred: " << numLitsIrred << endl
+ << "->litStats.irredLits: " << litStats.irredLits << endl;
+ }
+
+ uint64_t numLitsRed = 0;
+ for(auto& lredcls: longRedCls) {
+ numLitsRed += count_lits(lredcls, true, allowFreed);
+ }
+ if (numLitsRed != litStats.redLits) {
+ std::cerr << "ERROR: " << endl
+ << "->numLitsRed: " << numLitsRed << endl
+ << "->litStats.redLits: " << litStats.redLits << endl;
+ }
+ assert(numLitsRed == litStats.redLits);
+ assert(numLitsIrred == litStats.irredLits);
+
+ const double time_used = cpuTime() - myTime;
+ if (sqlStats) {
+ sqlStats->time_passed_min(
+ this
+ , "check literal stats"
+ , time_used
+ );
+ }
+}
+
+void Solver::add_sql_tag(const string& tagname, const string& tag)
+{
+ if (sqlStats) {
+ sqlStats->add_tag(std::make_pair(tagname, tag));
+ }
+}
+
+uint32_t Solver::undefine(vector<uint32_t>& trail_lim_vars)
+{
+ assert(undef == NULL);
+ undef = new FindUndef;
+ undef->trail_lim_vars = &trail_lim_vars;
+ undef->can_be_unsetSum = 0;
+ undef->num_fixed = 0;
+ undef->verbose = conf.verbosity > 15;
+
+ undef->dontLookAtClause.clear();
+ undef->dontLookAtClause.resize(longIrredCls.size(), false);
+ undef->can_be_unset.clear();
+ undef->can_be_unset.resize(nVarsOuter(), 0);
+ undef->satisfies.clear();
+ undef->satisfies.resize(nVarsOuter(), 0);
+
+ undef_fill_potentials();
+
+ if (undef->verbose) {
+ cout << "NUM Can be unset: " << undef->can_be_unsetSum << endl;
+ cout << "--" << endl;
+ for(size_t i = 0; i < undef->can_be_unset.size(); i++) {
+ if (undef->can_be_unset[i]) {
+ cout << "Can be unset var " << i+1 << endl;
+ }
+ }
+ cout << "--" << endl;
+ }
+
+ while(undef_must_fix_var() && undef->can_be_unsetSum > 0) {
+ //Find variable to fix.
+ int32_t maximum = -1;
+ uint32_t v = var_Undef;
+ for (uint32_t i = 0; i < undef->can_be_unset.size(); i++) {
+ if (undef->can_be_unset[i]) {
+ if (undef->verbose) {
+ cout << "Var " << i+1 << " can be unset"
+ << ", it satisfies: " << undef->satisfies[i] << " clauses" << endl;
+ }
+
+ if ((int32_t)undef->satisfies[i] > maximum) {
+ maximum = (int32_t)undef->satisfies[i];
+ v = i;
+ if (undef->verbose) {
+ cout << "v to set is now:" << v+1 << endl;
+ }
+ }
+ }
+ }
+ assert(maximum >= 0);
+ if (undef->verbose)
+ cout << "--" << endl;
+
+ assert(v != var_Undef && "maximum satisfied by this var is zero? Then can_be_unsetSum was wrongly calculated!");
+
+ //Fix 'v' to be set to curent value
+ assert(undef->can_be_unset[v]);
+ undef->can_be_unset[v] = 0;
+ undef->can_be_unsetSum--;
+ undef->num_fixed++;
+
+ if (undef->verbose) {
+ cout << "Fixed var " << v+1 << endl;
+ }
+
+ //reset count
+ std::fill(undef->satisfies.begin(), undef->satisfies.end(), 0);
+ }
+
+ //Everything that hasn't been fixed and can be unset, is now unset
+ undef_unset_potentials();
+
+ int toret = undef->can_be_unsetSum;
+ delete undef;
+ undef = NULL;
+
+ verify_model();
+ return toret;
+}
+
+void Solver::undef_fill_potentials()
+{
+ int trail_at = ((int)undef->trail_lim_vars->size())-1;
+ if (undef->verbose) cout << "trail_at: " << trail_at << endl;
+
+ while(trail_at >= (int)assumptions.size()) {
+ uint32_t v = (*undef->trail_lim_vars)[trail_at];
+ if (undef->verbose) {
+ cout << "Examining trail_at: " << trail_at << " v: "
+ << Lit(v, false) << endl;
+ }
+
+ assert(varData[v].removed == Removed::none);
+ assert(assumptionsSet.size() > v);
+ if (model_value(v) != l_Undef && assumptionsSet[v] == false) {
+ assert(undef->can_be_unset[v] == 0);
+ undef->can_be_unset[v] ++;
+ if (conf.independent_vars == NULL) {
+ undef->can_be_unset[v] ++;
+ undef->can_be_unsetSum++;
+ }
+ }
+
+ trail_at--;
+ }
+ if (undef->verbose) {
+ cout << "-" << endl;
+ }
+
+ //If independent_vars is set, only care about those, nothing else.
+ if (conf.independent_vars) {
+ for(uint32_t v: *conf.independent_vars) {
+ if (v > nVarsOutside()) {
+ cout << "ERROR: Variabe in independent set, " << v+1
+ << " is bigger than any variable inside the solver! " << endl
+ << " Please examine the call set_independent_vars or the CNF"
+ " lines starting with 'c ind'"
+ << endl;
+ std::exit(-1);
+ }
+
+ v = map_to_with_bva(v);
+ v = map_outer_to_inter(v);
+ if (v < nVars()) {
+ undef->can_be_unset[v]++;
+ if (undef->can_be_unset[v] == 2) {
+ undef->can_be_unsetSum++;
+ }
+ }
+ }
+
+ //Only those with a setting of both independent_vars and in trail
+ //can be unset
+ for(auto& v: undef->can_be_unset) {
+ if (v < 2) {
+ v = false;
+ }
+ }
+ }
+
+ //Mark variables replacing others as non-eligible
+ vector<uint32_t> replacingVars = varReplacer->get_vars_replacing_others();
+ for (const uint32_t v: replacingVars) {
+ if (undef->can_be_unset[v]) {
+ undef->can_be_unset[v] = false;
+ undef->can_be_unsetSum--;
+ }
+ }
+}
+
+void Solver::undef_unset_potentials()
+{
+ for (uint32_t i = 0; i < undef->can_be_unset.size(); i++) {
+ if (undef->can_be_unset[i]) {
+ model[i] = l_Undef;
+ if (undef->verbose)
+ cout << "Unset variable " << i+1 << endl;
+ }
+ }
+}
+
+template<class C>
+bool Solver::undef_clause_surely_satisfied(const C c)
+{
+ if (undef->verbose) {
+ cout << "Check called on clause: ";
+ for(Lit l: *c) {
+ cout << l << " ";
+ assert(l.var() < model.size());
+ }
+ cout << endl;
+ }
+
+ uint32_t v = var_Undef;
+ uint32_t numTrue_can_be_unset = 0;
+ for (const Lit l: *c) {
+ if (model_value(l) == l_True) {
+ if (undef->can_be_unset[l.var()]) {
+ numTrue_can_be_unset ++;
+ v = l.var();
+ } else {
+ return true;
+ }
+ }
+ }
+
+ //Greedy
+ if (numTrue_can_be_unset == 1) {
+ assert(v != var_Undef);
+ assert(undef->can_be_unset[v]);
+
+ undef->can_be_unset[v] = false;
+ if (undef->verbose) cout << "Setting " << v+1 << " as fixed" << endl;
+ undef->can_be_unsetSum--;
+ //clause definitely satisfied
+ return true;
+ }
+
+ assert(numTrue_can_be_unset > 1);
+ undef->must_fix_at_least_one_var = true;
+ for (const Lit l: *c) {
+ if (model_value(l) == l_True)
+ undef->satisfies[l.var()]++;
+ }
+
+ //Clause is not definitely satisfied
+ return false;
+}
+
+bool Solver::undef_must_fix_var()
+{
+ undef->must_fix_at_least_one_var = false;
+
+ //Long clauses
+ for (uint32_t i = 0
+ ; i < longIrredCls.size()
+ ; i++
+ ) {
+ if (undef->dontLookAtClause[i])
+ continue;
+
+ Clause* c = cl_alloc.ptr(longIrredCls[i]);
+ if (undef_clause_surely_satisfied(c)) {
+ //clause definitely satisfied
+ undef->dontLookAtClause[i] = true;
+ }
+ }
+
+ //Binary clauses
+ for(size_t i = 0; i < nVars()*2; i++) {
+ const Lit l = Lit::toLit(i);
+ if (!undef->can_be_unset[l.var()] && model_value(l) == l_True) {
+ continue;
+ }
+ for(const Watched& w: watches[l]) {
+ if (w.isBin()
+ && l < w.lit2()
+ ) {
+ std::array<Lit, 2> c;
+ c[0] = l;
+ c[1] = w.lit2();
+ undef_clause_surely_satisfied(&c);
+ }
+ }
+ }
+
+ //There is hope
+ return undef->must_fix_at_least_one_var;
+}
+
+vector<Lit> Solver::get_toplevel_units_internal(bool outer_numbering) const
+{
+ assert(!outer_numbering);
+ vector<Lit> units;
+ for(size_t i = 0; i < nVars(); i++) {
+ if (value(i) != l_Undef) {
+ Lit l = Lit(i, value(i) == l_False);
+ units.push_back(l);
+ }
+ }
+
+ return units;
+}
+
+
+void Solver::open_file_and_dump_irred_clauses(string fname) const
+{
+ ClauseDumper dumper(this);
+ dumper.open_file_and_dump_irred_clauses(fname);
+}
+
+void Solver::open_file_and_dump_red_clauses(string fname) const
+{
+ ClauseDumper dumper(this);
+ dumper.open_file_and_dump_red_clauses(fname);
+}
+
+vector<Xor> Solver::get_recovered_xors(bool elongate)
+{
+ vector<Xor> xors_ret;
+ if (elongate && solver->okay()) {
+ XorFinder finder(NULL, this);
+ auto xors = xorclauses;
+
+ //YEP -- the solver state can turn to OK=false
+ finder.xor_together_xors(xors);
+ //YEP -- the solver state can turn to OK=false
+ if (solver->okay()) {
+ finder.add_new_truths_from_xors(xors);
+ }
+ //YEP -- the solver state can turn to OK=false
+
+ renumber_xors_to_outside(xors, xors_ret);
+ return xors_ret;
+ } else {
+ renumber_xors_to_outside(xorclauses, xors_ret);
+ return xors_ret;
+ }
+}
+
+void Solver::renumber_xors_to_outside(const vector<Xor>& xors, vector<Xor>& xors_ret)
+{
+ const vector<uint32_t> outer_to_without_bva_map = solver->build_outer_to_without_bva_map();
+
+ if (conf.verbosity >= 5) {
+ cout << "XORs before outside numbering:" << endl;
+ for(auto& x: xors) {
+ cout << x << endl;
+ }
+ }
+
+ for(auto& x: xors) {
+ bool OK = true;
+ for(const auto v: x.get_vars()) {
+ if (varData[v].is_bva) {
+ OK = false;
+ break;
+ }
+ }
+ if (!OK) {
+ continue;
+ }
+
+ vector<uint32_t> t = xor_outer_numbered(x.get_vars());
+ for(auto& v: t) {
+ v = outer_to_without_bva_map[v];
+ }
+ xors_ret.push_back(Xor(t, x.rhs));
+ }
+}
+
+#ifdef USE_GAUSS
+bool Solver::init_all_matrixes()
+{
+ assert(ok);
+
+ vector<EGaussian*>::iterator i = gmatrixes.begin();
+ vector<EGaussian*>::iterator j = i;
+ vector<EGaussian*>::iterator gend = gmatrixes.end();
+ for (; i != gend; i++) {
+ EGaussian* g = *i;
+
+ bool created = false;
+ // initial arrary. return true is fine , return false means solver already false;
+ if (!g->full_init(created)) {
+ return false;
+ }
+ if (!ok) {
+ break;
+ }
+ if (created) {
+ *j++=*i;
+ } else {
+ delete g;
+ }
+ }
+ while(i != gend) {
+ *j++ = *i++;
+ }
+ gmatrixes.resize(solver->gmatrixes.size()-(i-j));
+ gqueuedata.resize(gmatrixes.size());
+ for(auto& gqd: gqueuedata) {
+ gqd.reset_stats();
+ }
+
+ return solver->okay();
+}
+#endif //USE_GAUSS
+
+
+void Solver::start_getting_small_clauses(const uint32_t max_len, const uint32_t max_glue)
+{
+ if (!ok) {
+ std::cerr << "ERROR: the system is in UNSAT state, learnt clauses are meaningless!" <<endl;
+ exit(-1);
+ }
+ if (!learnt_clause_query_outer_to_without_bva_map.empty()) {
+ std::cerr << "ERROR: You forgot to call end_getting_small_clauses() last time!" <<endl;
+ exit(-1);
+ }
+
+ assert(learnt_clause_query_at == std::numeric_limits<uint32_t>::max());
+ assert(learnt_clause_query_watched_at == std::numeric_limits<uint32_t>::max());
+ assert(learnt_clause_query_watched_at_sub == std::numeric_limits<uint32_t>::max());
+ assert(max_len >= 2);
+
+ learnt_clause_query_at = 0;
+ learnt_clause_query_watched_at = 0;
+ learnt_clause_query_watched_at_sub = 0;
+ learnt_clause_query_max_len = max_len;
+ learnt_clause_query_max_glue = max_glue;
+ learnt_clause_query_outer_to_without_bva_map = solver->build_outer_to_without_bva_map();
+}
+
+bool Solver::get_next_small_clause(vector<Lit>& out)
+{
+ assert(ok);
+
+ while(learnt_clause_query_watched_at < solver->nVars()*2) {
+ Lit l = Lit::toLit(learnt_clause_query_watched_at);
+ watch_subarray_const ws = watches[l];
+ while(learnt_clause_query_watched_at_sub < ws.size()) {
+ const Watched& w = ws[learnt_clause_query_watched_at_sub];
+ if (w.isBin() && w.lit2() < l && w.red()) {
+ out.clear();
+ out.push_back(l);
+ out.push_back(w.lit2());
+ out = clause_outer_numbered(out);
+ if (all_vars_outside(out)) {
+ learnt_clausee_query_map_without_bva(out);
+ learnt_clause_query_watched_at_sub++;
+ return true;
+ }
+ }
+ learnt_clause_query_watched_at_sub++;
+ }
+ learnt_clause_query_watched_at++;
+ learnt_clause_query_watched_at_sub = 0;
+ }
+
+ while(learnt_clause_query_at < longRedCls[0].size()) {
+ const ClOffset offs = longRedCls[0][learnt_clause_query_at];
+ const Clause* cl = cl_alloc.ptr(offs);
+ if (cl->size() <= learnt_clause_query_max_len
+ && cl->stats.glue <= learnt_clause_query_max_glue
+ ) {
+ out = clause_outer_numbered(*cl);
+ if (all_vars_outside(out)) {
+ learnt_clausee_query_map_without_bva(out);
+ learnt_clause_query_at++;
+ return true;
+ }
+ }
+ learnt_clause_query_at++;
+ }
+
+ assert(learnt_clause_query_at >= longRedCls[0].size());
+ uint32_t at_lev1 = learnt_clause_query_at-longRedCls[0].size();
+ while(at_lev1 < longRedCls[1].size()) {
+ const ClOffset offs = longRedCls[1][at_lev1];
+ const Clause* cl = cl_alloc.ptr(offs);
+ if (cl->size() <= learnt_clause_query_max_len) {
+ out = clause_outer_numbered(*cl);
+ if (all_vars_outside(out)) {
+ learnt_clausee_query_map_without_bva(out);
+ learnt_clause_query_at++;
+ return true;
+ }
+ }
+ learnt_clause_query_at++;
+ at_lev1++;
+ }
+ return false;
+}
+
+void Solver::end_getting_small_clauses()
+{
+ if (!ok) {
+ std::cerr << "ERROR: the system is in UNSAT state, learnt clauses are meaningless!" <<endl;
+ exit(-1);
+ }
+
+ learnt_clause_query_at = std::numeric_limits<uint32_t>::max();
+ learnt_clause_query_watched_at = std::numeric_limits<uint32_t>::max();
+ learnt_clause_query_watched_at_sub = std::numeric_limits<uint32_t>::max();
+ learnt_clause_query_outer_to_without_bva_map.clear();
+ learnt_clause_query_outer_to_without_bva_map.shrink_to_fit();
+}
+
+bool Solver::all_vars_outside(const vector<Lit>& cl) const
+{
+ for(const auto& l: cl) {
+ if (varData[map_outer_to_inter(l.var())].is_bva)
+ return false;
+ }
+ return true;
+}
+
+void Solver::learnt_clausee_query_map_without_bva(vector<Lit>& cl)
+{
+ for(auto& l: cl) {
+ l = Lit(learnt_clause_query_outer_to_without_bva_map[l.var()], l.sign());
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solver.h b/cryptominisat5/cryptominisat-5.6.3/src/solver.h
new file mode 100644
index 000000000..f4309f8b5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solver.h
@@ -0,0 +1,601 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SOLVER_H
+#define SOLVER_H
+
+#include "constants.h"
+#include <vector>
+#include <fstream>
+#include <iostream>
+#include <utility>
+#include <string>
+
+#include "constants.h"
+#include "solvertypes.h"
+#include "implcache.h"
+#include "propengine.h"
+#include "searcher.h"
+#include "clauseusagestats.h"
+#include "solvefeatures.h"
+#include "searchstats.h"
+#ifdef CMS_TESTING_ENABLED
+#include "gtest/gtest_prod.h"
+#endif
+
+namespace CMSat {
+
+using std::vector;
+using std::pair;
+using std::string;
+
+class VarReplacer;
+class ClauseCleaner;
+class Prober;
+class OccSimplifier;
+class SCCFinder;
+class DistillerLong;
+class DistillerLongWithImpl;
+class StrImplWImplStamp;
+class CalcDefPolars;
+class SolutionExtender;
+class ImplCache;
+class CompFinder;
+class CompHandler;
+class SubsumeStrengthen;
+class SubsumeImplicit;
+class DataSync;
+class SharedData;
+class ReduceDB;
+class InTree;
+
+struct SolveStats
+{
+ uint64_t numSimplify = 0;
+ uint32_t num_solve_calls = 0;
+};
+
+class Solver : public Searcher
+{
+ public:
+ Solver(const SolverConf *_conf = NULL, std::atomic<bool>* _must_interrupt_inter = NULL);
+ ~Solver() override;
+
+ void add_sql_tag(const string& tagname, const string& tag);
+ const vector<std::pair<string, string> >& get_sql_tags() const;
+ void new_external_var();
+ void new_external_vars(size_t n);
+ bool add_clause_outer(const vector<Lit>& lits, bool red = false);
+ bool add_xor_clause_outer(const vector<uint32_t>& vars, bool rhs);
+
+ lbool solve_with_assumptions(const vector<Lit>* _assumptions, bool only_indep_solution);
+ lbool simplify_with_assumptions(const vector<Lit>* _assumptions = NULL);
+ void set_shared_data(SharedData* shared_data);
+
+ //Querying model
+ lbool model_value (const Lit p) const; ///<Found model value for lit
+ lbool model_value (const uint32_t p) const; ///<Found model value for var
+ lbool full_model_value (const Lit p) const; ///<Found model value for lit
+ lbool full_model_value (const uint32_t p) const; ///<Found model value for var
+ const vector<lbool>& get_model() const;
+ const vector<Lit>& get_final_conflict() const;
+ vector<pair<Lit, Lit> > get_all_binary_xors() const;
+ vector<Xor> get_recovered_xors(bool elongate);
+
+ //get learnt clauses
+ void start_getting_small_clauses(uint32_t max_len, uint32_t max_glue);
+ bool get_next_small_clause(std::vector<Lit>& out);
+ void end_getting_small_clauses();
+
+ void open_file_and_dump_irred_clauses(string fname) const;
+ void open_file_and_dump_red_clauses(string fname) const;
+
+ static const char* get_version_tag();
+ static const char* get_version_sha1();
+ static const char* get_compilation_env();
+
+ vector<Lit> get_zero_assigned_lits(const bool backnumber = true, bool only_nvars = false) const;
+ void print_stats(const double cpu_time) const;
+ void print_clause_stats() const;
+ size_t get_num_free_vars() const;
+ size_t get_num_nonfree_vars() const;
+ const SolverConf& getConf() const;
+ void setConf(const SolverConf& conf);
+ const BinTriStats& getBinTriStats() const;
+ size_t get_num_long_irred_cls() const;
+ size_t get_num_long_red_cls() const;
+ size_t get_num_vars_elimed() const;
+ uint32_t num_active_vars() const;
+ void print_mem_stats() const;
+ uint64_t print_watch_mem_used(uint64_t totalMem) const;
+ unsigned long get_sql_id() const;
+ const SolveStats& get_solve_stats() const;
+ const SearchStats& get_stats() const;
+ void add_in_partial_solving_stats();
+ void check_implicit_stats(const bool onlypairs = false) const;
+ void check_stats(const bool allowFreed = false) const;
+
+
+ //Checks
+ void check_implicit_propagated() const;
+ bool find_with_stamp_a_or_b(Lit a, Lit b) const;
+ bool find_with_cache_a_or_b(Lit a, Lit b, int64_t* limit) const;
+ bool find_with_watchlist_a_or_b(Lit a, Lit b, int64_t* limit) const;
+
+ //Systems that are used to accompilsh the tasks
+ ClauseCleaner* clauseCleaner = NULL;
+ VarReplacer* varReplacer = NULL;
+ SubsumeImplicit* subsumeImplicit = NULL;
+ DataSync* datasync = NULL;
+ ReduceDB* reduceDB = NULL;
+ Prober* prober = NULL;
+ InTree* intree = NULL;
+ OccSimplifier* occsimplifier = NULL;
+ DistillerLong* distill_long_cls = NULL;
+ DistillerLongWithImpl* dist_long_with_impl = NULL;
+ StrImplWImplStamp* dist_impl_with_impl = NULL;
+ CompHandler* compHandler = NULL;
+
+ SearchStats sumSearchStats;
+ PropStats sumPropStats;
+
+ bool prop_at_head() const;
+ void set_decision_var(const uint32_t var);
+ bool fully_enqueue_these(const vector<Lit>& toEnqueue);
+ bool fully_enqueue_this(const Lit lit);
+ void update_assumptions_after_varreplace();
+
+ //State load/unload
+ void save_state(const string& fname, const lbool status) const;
+ lbool load_state(const string& fname);
+ template<typename A>
+ void parse_v_line(A* in, const size_t lineNum);
+ lbool load_solution_from_file(const string& fname);
+
+ uint64_t getNumLongClauses() const;
+ bool addClause(const vector<Lit>& ps, const bool red = false);
+ bool add_xor_clause_inter(
+ const vector< Lit >& lits
+ , bool rhs
+ , bool attach
+ , bool addDrat = true
+ );
+ void new_var(const bool bva = false, const uint32_t orig_outer = std::numeric_limits<uint32_t>::max()) override;
+ void new_vars(const size_t n) override;
+ void bva_changed();
+
+ //Attaching-detaching clauses
+ void attachClause(
+ const Clause& c
+ , const bool checkAttach = true
+ );
+ void attach_bin_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const bool red
+ , const bool checkUnassignedFirst = true
+ );
+ void detach_bin_clause(
+ Lit lit1
+ , Lit lit2
+ , bool red
+ , bool allow_empty_watch = false
+ , bool allow_change_order = false
+ ) {
+ if (red) {
+ binTri.redBins--;
+ } else {
+ binTri.irredBins--;
+ }
+
+ PropEngine::detach_bin_clause(lit1, lit2, red, allow_empty_watch, allow_change_order);
+ }
+ void detachClause(const Clause& c, const bool removeDrat = true);
+ void detachClause(const ClOffset offset, const bool removeDrat = true);
+ void detach_modified_clause(
+ const Lit lit1
+ , const Lit lit2
+ , const uint32_t origSize
+ , const Clause* address
+ );
+ Clause* add_clause_int(
+ const vector<Lit>& lits
+ , const bool red = false
+ , const ClauseStats stats = ClauseStats()
+ , const bool attach = true
+ , vector<Lit>* finalLits = NULL
+ , bool addDrat = true
+ , const Lit drat_first = lit_Undef
+ );
+ template<class T> vector<Lit> clause_outer_numbered(const T& cl) const;
+ template<class T> vector<uint32_t> xor_outer_numbered(const T& cl) const;
+ size_t mem_used() const;
+ void dump_memory_stats_to_sql();
+ void set_sqlite(string filename);
+ //Not Private for testing (maybe could be called from outside)
+ bool renumber_variables(bool must_renumber = true);
+ SolveFeatures calculate_features();
+ SolveFeatures last_solve_feature;
+
+ uint32_t undefine(vector<uint32_t>& trail_lim_vars);
+ vector<Lit> get_toplevel_units_internal(bool outer_numbering) const;
+
+ #ifdef USE_GAUSS
+ bool init_all_matrixes();
+ #endif
+
+
+ //if set to TRUE, a clause has been removed during add_clause_int
+ //that contained "lit, ~lit". So "lit" must be set to a value
+ //Contains _outer_ variables
+ vector<bool> undef_must_set_vars;
+
+ //Helper
+ void renumber_xors_to_outside(const vector<Xor>& xors, vector<Xor>& xors_ret);
+
+ private:
+ friend class Prober;
+ friend class ClauseDumper;
+ #ifdef CMS_TESTING_ENABLED
+ FRIEND_TEST(SearcherTest, pickpolar_auto_not_changed_by_simp);
+ #endif
+
+ lbool iterate_until_solved();
+ uint64_t mem_used_vardata() const;
+ void check_reconfigure();
+ void reconfigure(int val);
+ bool already_reconfigured = false;
+ long calc_num_confl_to_do_this_iter(const size_t iteration_num) const;
+
+ vector<Lit> finalCl_tmp;
+ bool sort_and_clean_clause(vector<Lit>& ps, const vector<Lit>& origCl, const bool red);
+ void set_up_sql_writer();
+ vector<std::pair<string, string> > sql_tags;
+
+ void check_config_parameters() const;
+ void check_xor_cut_config_sanity() const;
+ void handle_found_solution(const lbool status, const bool only_indep_solution);
+ void add_every_combination_xor(const vector<Lit>& lits, bool attach, bool addDrat);
+ void add_xor_clause_inter_cleaned_cut(const vector<Lit>& lits, bool attach, bool addDrat);
+ unsigned num_bits_set(const size_t x, const unsigned max_size) const;
+ void check_too_large_variable_number(const vector<Lit>& lits) const;
+ void set_assumptions();
+
+ lbool simplify_problem_outside();
+ void move_to_outside_assumps(const vector<Lit>* assumps);
+ vector<Lit> back_number_from_outside_to_outer_tmp;
+ void back_number_from_outside_to_outer(const vector<Lit>& lits)
+ {
+ back_number_from_outside_to_outer_tmp.clear();
+ for (const Lit lit: lits) {
+ assert(lit.var() < nVarsOutside());
+ back_number_from_outside_to_outer_tmp.push_back(map_to_with_bva(lit));
+ assert(back_number_from_outside_to_outer_tmp.back().var() < nVarsOuter());
+ }
+ }
+ void check_switchoff_limits_newvar(size_t n = 1);
+ vector<Lit> outside_assumptions;
+
+ //Stats printing
+ void print_norm_stats(const double cpu_time) const;
+ void print_min_stats(const double cpu_time) const;
+ void print_full_restart_stat(const double cpu_time) const;
+
+ lbool simplify_problem(const bool startup);
+ bool execute_inprocess_strategy(const bool startup, const string& strategy);
+ SolveStats solveStats;
+ void check_minimization_effectiveness(lbool status);
+ void check_recursive_minimization_effectiveness(const lbool status);
+ void extend_solution(const bool only_indep_solution);
+ void check_too_many_low_glues();
+ bool adjusted_glue_cutoff_if_too_many = false;
+
+ /////////////////////////////
+ // Temporary datastructs -- must be cleared before use
+ mutable std::vector<Lit> tmpCl;
+ mutable std::vector<uint32_t> tmpXor;
+
+
+ //learnt clause querying
+ uint32_t learnt_clause_query_max_len = std::numeric_limits<uint32_t>::max();
+ uint32_t learnt_clause_query_max_glue = std::numeric_limits<uint32_t>::max();
+ uint32_t learnt_clause_query_at = std::numeric_limits<uint32_t>::max();
+ uint32_t learnt_clause_query_watched_at = std::numeric_limits<uint32_t>::max();
+ uint32_t learnt_clause_query_watched_at_sub = std::numeric_limits<uint32_t>::max();
+ vector<uint32_t> learnt_clause_query_outer_to_without_bva_map;
+ bool all_vars_outside(const vector<Lit>& cl) const;
+ void learnt_clausee_query_map_without_bva(vector<Lit>& cl);
+
+ /////////////////////////////
+ //Renumberer
+ double calc_renumber_saving();
+ void free_unused_watches();
+ void save_on_var_memory(uint32_t newNumVars);
+ void unSaveVarMem();
+ size_t calculate_interToOuter_and_outerToInter(
+ vector<uint32_t>& outerToInter
+ , vector<uint32_t>& interToOuter
+ );
+ void renumber_clauses(const vector<uint32_t>& outerToInter);
+ void test_renumbering() const;
+ bool clean_xor_clauses_from_duplicate_and_set_vars();
+
+ //Value Unsetter
+ struct FindUndef {
+ //If set to TRUE, then that clause already has only 1 lit that is true,
+ //so it can be skipped during updateFixNeed()
+ vector<char> dontLookAtClause;
+
+ vector<uint32_t> satisfies;
+ vector<unsigned char> can_be_unset;
+ vector<uint32_t>* trail_lim_vars;
+ int64_t can_be_unsetSum;
+ bool must_fix_at_least_one_var;
+ uint32_t num_fixed;
+ bool verbose = false;
+ };
+ FindUndef* undef = NULL;
+ bool undef_must_fix_var();
+ void undef_fill_potentials();
+ void undef_unset_potentials();
+ template<class C> bool undef_clause_surely_satisfied(const C c);
+
+
+
+ /////////////////////////////
+ // SAT solution verification
+ bool verify_model() const;
+ bool verify_model_implicit_clauses() const;
+ bool verify_model_long_clauses(const vector<ClOffset>& cs) const;
+
+
+ /////////////////////
+ // Data
+ size_t zeroLevAssignsByCNF = 0;
+
+ /////////////////////
+ // Clauses
+ bool addClauseHelper(vector<Lit>& ps);
+
+ /////////////////
+ // Debug
+
+ void print_watch_list(watch_subarray_const ws, const Lit lit) const;
+ void print_clause_size_distrib();
+ void print_prop_confl_stats(
+ std::string name
+ , const vector<ClauseUsageStats>& stats
+ ) const;
+ void check_model_for_assumptions() const;
+};
+
+inline void Solver::set_decision_var(const uint32_t var)
+{
+ insert_var_order_all(var);
+}
+
+inline uint64_t Solver::getNumLongClauses() const
+{
+ return longIrredCls.size() + longRedCls.size();
+}
+
+inline const SearchStats& Solver::get_stats() const
+{
+ return sumSearchStats;
+}
+
+inline const SolveStats& Solver::get_solve_stats() const
+{
+ return solveStats;
+}
+
+inline size_t Solver::get_num_long_irred_cls() const
+{
+ return longIrredCls.size();
+}
+
+inline size_t Solver::get_num_long_red_cls() const
+{
+ return longRedCls.size();
+}
+
+inline const SolverConf& Solver::getConf() const
+{
+ return conf;
+}
+
+inline const vector<std::pair<string, string> >& Solver::get_sql_tags() const
+{
+ return sql_tags;
+}
+
+inline const BinTriStats& Solver::getBinTriStats() const
+{
+ return binTri;
+}
+
+template<class T>
+inline vector<Lit> Solver::clause_outer_numbered(const T& cl) const
+{
+ tmpCl.clear();
+ for(size_t i = 0; i < cl.size(); i++) {
+ tmpCl.push_back(map_inter_to_outer(cl[i]));
+ }
+
+ return tmpCl;
+}
+
+template<class T>
+inline vector<uint32_t> Solver::xor_outer_numbered(const T& cl) const
+{
+ tmpXor.clear();
+ for(size_t i = 0; i < cl.size(); i++) {
+ tmpXor.push_back(map_inter_to_outer(cl[i]));
+ }
+
+ return tmpXor;
+}
+
+inline void Solver::move_to_outside_assumps(const vector<Lit>* assumps)
+{
+ outside_assumptions.clear();
+ if (assumps) {
+ for(const Lit lit: *assumps) {
+ if (lit.var() >= nVarsOutside()) {
+ std::cerr << "ERROR: Assumption variable " << (lit.var()+1)
+ << " is too large, you never"
+ << " inserted that variable into the solver. Exiting."
+ << endl;
+ exit(-1);
+ }
+ outside_assumptions.push_back(lit);
+ }
+ }
+}
+
+inline lbool Solver::simplify_with_assumptions(
+ const vector<Lit>* _assumptions
+) {
+ move_to_outside_assumps(_assumptions);
+ return simplify_problem_outside();
+}
+
+inline bool Solver::find_with_stamp_a_or_b(Lit a, const Lit b) const
+{
+ //start STAMP of A < start STAMP of B
+ //end STAMP of A > start STAMP of B
+ //means: ~A V B is inside
+ //so, invert A
+ a = ~a;
+
+ const uint64_t start_inv_other = solver->stamp.tstamp[(a).toInt()].start[STAMP_IRRED];
+ const uint64_t start_eqLit = solver->stamp.tstamp[b.toInt()].end[STAMP_IRRED];
+ if (start_inv_other < start_eqLit) {
+ const uint64_t end_inv_other = solver->stamp.tstamp[(a).toInt()].end[STAMP_IRRED];
+ const uint64_t end_eqLit = solver->stamp.tstamp[b.toInt()].end[STAMP_IRRED];
+ if (end_inv_other > end_eqLit) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+inline bool Solver::find_with_cache_a_or_b(Lit a, Lit b, int64_t* limit) const
+{
+ const vector<LitExtra>& cache = solver->implCache[a].lits;
+ *limit -= cache.size();
+ for (LitExtra cacheLit: cache) {
+ if (cacheLit.getOnlyIrredBin()
+ && cacheLit.getLit() == b
+ ) {
+ return true;
+ }
+ }
+
+ std::swap(a,b);
+
+ const vector<LitExtra>& cache2 = solver->implCache[a].lits;
+ *limit -= cache2.size();
+ for (LitExtra cacheLit: cache) {
+ if (cacheLit.getOnlyIrredBin()
+ && cacheLit.getLit() == b
+ ) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+inline bool Solver::find_with_watchlist_a_or_b(Lit a, Lit b, int64_t* limit) const
+{
+ if (watches[a].size() > watches[b].size()) {
+ std::swap(a,b);
+ }
+
+ watch_subarray_const ws = watches[a];
+ *limit -= ws.size();
+ for (const Watched w: ws) {
+ if (!w.isBin())
+ continue;
+
+ if (!w.red()
+ && w.lit2() == b
+ ) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+inline const vector<lbool>& Solver::get_model() const
+{
+ return model;
+}
+
+inline const vector<Lit>& Solver::get_final_conflict() const
+{
+ return conflict;
+}
+
+inline void Solver::setConf(const SolverConf& _conf)
+{
+ conf = _conf;
+}
+
+inline bool Solver::prop_at_head() const
+{
+ return qhead == trail.size()
+// #ifdef USE_GAUSS
+// && gqhead == trail.size()
+// #endif
+ ;
+}
+
+inline lbool Solver::model_value (const Lit p) const
+{
+ if (model[p.var()] == l_Undef)
+ return l_Undef;
+
+ return model[p.var()] ^ p.sign();
+}
+
+inline lbool Solver::model_value (const uint32_t p) const
+{
+ return model[p];
+}
+
+inline lbool Solver::full_model_value (const Lit p) const
+{
+ return full_model[p.var()] ^ p.sign();
+}
+
+inline lbool Solver::full_model_value (const uint32_t p) const
+{
+ return full_model[p];
+}
+
+} //end namespace
+
+#endif //SOLVER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp b/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
new file mode 100644
index 000000000..131eb3dea
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solverconf.cpp
@@ -0,0 +1,324 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "constants.h"
+#include "solverconf.h"
+#include <limits>
+#include <iomanip>
+#include <sstream>
+using namespace CMSat;
+
+DLL_PUBLIC SolverConf::SolverConf() :
+ //Variable activities
+ var_inc_vsids_start(1)
+ , var_decay_vsids_start(0.8) // 1/0.8 = 1.2 -- large is better for frequent restarts
+ , var_decay_vsids_max(0.95) // 1/0.95 = 1.05 -- smaller is better for hard instances
+ , random_var_freq(0)
+ , polarity_mode(PolarityMode::polarmode_automatic)
+
+ //Clause cleaning
+ , every_lev1_reduce(10000) // kept for a while then moved to lev2
+ , every_lev2_reduce(15000) // cleared regularly
+ , must_touch_lev1_within(30000)
+
+ , max_temp_lev2_learnt_clauses(30000) //only used if every_lev2_reduce==0
+ , inc_max_temp_lev2_red_cls(1.0) //only used if every_lev2_reduce==0
+ , protect_cl_if_improved_glue_below_this_glue_for_one_turn(30)
+ , glue_put_lev0_if_below_or_eq(3) // never removed
+ , glue_put_lev1_if_below_or_eq(6) // kept for a while then moved to lev2
+
+ , clause_decay(0.999)
+ , adjust_glue_if_too_many_low(0.7)
+ , min_num_confl_adjust_glue_cutoff(150ULL*1000ULL)
+ , guess_cl_effectiveness(0)
+
+ //maple
+ , maple(true)
+ , modulo_maple_iter(3)
+ , more_maple_bump_high_glue(false)
+
+ //Restarting
+ , restart_first(100)
+ , restart_inc(1.1)
+ , restartType(Restart::glue_geom)
+ , do_blocking_restart(1)
+ , blocking_restart_trail_hist_length(5000)
+ , blocking_restart_multip(1.4)
+ , broken_glue_restart(true)
+ , local_glue_multiplier(0.80)
+ , shortTermHistorySize (50)
+ , lower_bound_for_blocking_restart(10000)
+ , ratio_glue_geom(5)
+ , more_more_with_cache(false)
+ , more_more_with_stamp(false)
+ , doAlwaysFMinim(false)
+
+ //Clause minimisation
+ , doRecursiveMinim (true)
+ , doMinimRedMore(true)
+ , doMinimRedMoreMore(false)
+ , max_glue_more_minim(6)
+ , max_size_more_minim(30)
+ , more_red_minim_limit_cache(400)
+ , more_red_minim_limit_binary(200)
+ , max_num_lits_more_more_red_min(1)
+
+ //Verbosity
+ , verbosity (0)
+ , doPrintGateDot (false)
+ , print_full_restart_stat (false)
+ , print_all_restarts (false)
+ , verbStats (0)
+ , do_print_times(1)
+ , print_restart_line_every_n_confl(4096)
+
+ //Limits
+ , maxTime (std::numeric_limits<double>::max())
+ , max_confl (std::numeric_limits<long>::max())
+
+ //Glues
+ , update_glues_on_analyze(true)
+
+ //OTF
+ , otfHyperbin (true)
+ , doOTFSubsume (false)
+ , doOTFSubsumeOnlyAtOrBelowGlue(5)
+
+ //SQL
+ , dump_individual_restarts_and_clauses(true)
+ , dump_individual_cldata_ratio(0.005)
+
+ //Var-elim
+ , doVarElim (true)
+ , varelim_cutoff_too_many_clauses(2000)
+ , do_empty_varelim (true)
+ , empty_varelim_time_limitM(300LL)
+ , varelim_time_limitM(350)
+ , varelim_sub_str_limit(600)
+ , varElimRatioPerIter(1.60)
+ , skip_some_bve_resolvents(true) //based on gates
+ , velim_resolvent_too_large(20)
+
+ //Subs, str limits for simplifier
+ , subsumption_time_limitM(300)
+ , strengthening_time_limitM(300)
+ , aggressive_elim_time_limitM(300)
+
+ //Bounded variable addition
+ , do_bva(false)
+ #ifdef USE_GAUSS
+ , min_bva_gain(2)
+ #else
+ , min_bva_gain(32)
+ #endif
+ , bva_limit_per_call(150000)
+ , bva_also_twolit_diff(true)
+ , bva_extra_lit_and_red_start(0)
+ , bva_time_limitM(100)
+
+ //Probing
+ , doProbe (false)
+ , doIntreeProbe (true)
+ , probe_bogoprops_time_limitM (800ULL)
+ , intree_time_limitM(1200ULL)
+ , intree_scc_varreplace_time_limitM(30ULL)
+ , doBothProp (true)
+ , doTransRed (true)
+ , doStamp (false)
+ , doCache (false)
+ , cacheUpdateCutoff(2000)
+ , maxCacheSizeMB (2048)
+ , otf_hyper_time_limitM(340)
+ , otf_hyper_ratio_limit(0.5) //if higher(closer to 1), we allow for less hyper-bin addition, i.e. we are stricter
+ , single_probe_time_limit_perc(0.5)
+
+ //XOR
+ , doFindXors (true)
+ , maxXorToFind (5)
+ , useCacheWhenFindingXors(false)
+ , doEchelonizeXOR (true)
+ , maxXORMatrix (400ULL)
+ #ifndef USE_GAUSS
+ , xor_finder_time_limitM(50)
+ #else
+ , xor_finder_time_limitM(400)
+ #endif
+ , allow_elim_xor_vars(1)
+ , xor_var_per_cut(2)
+
+ //Var-replacer
+ , doFindAndReplaceEqLits(true)
+ , doExtendedSCC (true)
+ , max_scc_depth (10000)
+
+ //Iterative Alo Scheduling
+ , simplify_at_startup(false)
+ , simplify_at_every_startup(false)
+ , do_simplify_problem(true)
+ , full_simplify_at_startup(false)
+ , never_stop_search(false)
+ , num_conflicts_of_search(50ULL*1000ULL)
+ , num_conflicts_of_search_inc(1.4)
+ , num_conflicts_of_search_inc_max(10)
+ , simplify_schedule_startup(
+ "sub-impl,"
+ "occ-backw-sub-str, occ-clean-implicit, occ-bve,"
+ "occ-backw-sub-str, occ-xor,"
+ "scc-vrepl,"
+ "sub-cls-with-bin,"
+ )
+ , simplify_schedule_nonstartup(
+ "handle-comps,"
+ "scc-vrepl, cache-clean, cache-tryboth,"
+ "sub-impl, intree-probe, probe,"
+ "sub-str-cls-with-bin, distill-cls,"
+ "scc-vrepl, sub-impl, str-impl, sub-impl,"
+ "occ-backw-sub-str, occ-clean-implicit, occ-bve, occ-bva, "//occ-gates,"
+ "occ-xor,"
+ "str-impl, cache-clean, sub-str-cls-with-bin, distill-cls,"
+ "scc-vrepl, check-cache-size, renumber,"
+ )
+ , simplify_schedule_preproc(
+ "handle-comps,"
+ "scc-vrepl, cache-clean, cache-tryboth,"
+ "sub-impl,"
+ "sub-str-cls-with-bin, distill-cls, scc-vrepl, sub-impl,"
+ "occ-backw-sub-str, occ-xor, occ-clean-implicit, occ-bve, occ-bva,"
+ //"occ-gates,"
+ "str-impl, cache-clean, sub-str-cls-with-bin, distill-cls, scc-vrepl, sub-impl,"
+ "str-impl, sub-impl, sub-str-cls-with-bin,"
+ "intree-probe, probe,"
+ "must-renumber"
+ )
+
+ //Occur based simplification
+ , perform_occur_based_simp(true)
+ , do_strengthen_with_occur (true)
+ , maxRedLinkInSize (200)
+ , maxOccurIrredMB (2500)
+ , maxOccurRedMB (600)
+ , maxOccurRedLitLinkedM(50)
+ , subsume_gothrough_multip(2.0)
+
+ //Distillation
+ , do_distill_clauses(true)
+ , distill_long_cls_time_limitM(20ULL)
+ , watch_cache_stamp_based_str_time_limitM(30LL)
+ , distill_time_limitM(120LL)
+
+ //Memory savings
+ , doRenumberVars (true)
+ , doSaveMem (true)
+
+ //Component finding
+ , doCompHandler (false)
+ , handlerFromSimpNum (0)
+ , compVarLimit (1ULL*1000ULL*1000ULL)
+ , comp_find_time_limitM (500)
+
+ //Misc optimisations
+ , doStrSubImplicit (true)
+ , subsume_implicit_time_limitM(100LL)
+ , distill_implicit_with_implicit_time_limitM(200LL)
+
+ //Gates
+ , doGateFind (false)
+ , maxGateBasedClReduceSize(20)
+ , doShortenWithOrGates(true)
+ , doRemClWithAndGates(true)
+ , doFindEqLitsWithGates(true)
+ , gatefinder_time_limitM(200)
+ , shorten_with_gates_time_limitM(200)
+ , remove_cl_with_gates_time_limitM(100)
+
+ //Greedy Undef
+ , greedy_undef(false)
+ , independent_vars (NULL)
+
+ //Timeouts
+ , orig_global_timeout_multiplier(4.0)
+ , global_timeout_multiplier(1.0) // WILL BE UNSET, NOT RELEVANT
+ , global_timeout_multiplier_multiplier(1.1)
+ , global_multiplier_multiplier_max(3)
+ , var_and_mem_out_mult(1.0)
+
+ //misc
+ , origSeed(0)
+ , sync_every_confl(20000)
+ , reconfigure_val(0)
+ , reconfigure_at(2)
+ , preprocess(0)
+ , simulate_drat(false)
+ , saved_state_file("savedstate.dat")
+{
+ ratio_keep_clauses[clean_to_int(ClauseClean::glue)] = 0;
+ ratio_keep_clauses[clean_to_int(ClauseClean::activity)] = 0.44;
+}
+
+
+DLL_PUBLIC std::string SolverConf::print_times(
+ const double time_used
+ , const bool time_out
+ , const double time_remain
+) const {
+ if (do_print_times) {
+ std::stringstream ss;
+ ss
+ << " T: " << std::setprecision(2) << std::fixed << time_used
+ << " T-out: " << (time_out ? "Y" : "N")
+ << " T-r: " << time_remain*100.0 << "%";
+
+ return ss.str();
+ }
+
+ return std::string();
+}
+
+DLL_PUBLIC std::string SolverConf::print_times(
+ const double time_used
+ , const bool time_out
+) const {
+ if (do_print_times) {
+ std::stringstream ss;
+ ss
+ << " T: " << std::setprecision(2) << std::fixed << time_used
+ << " T-out: " << (time_out ? "Y" : "N");
+
+ return ss.str();
+ }
+
+ return std::string();
+}
+
+DLL_PUBLIC std::string SolverConf::print_times(
+ const double time_used
+) const {
+ if (do_print_times) {
+ std::stringstream ss;
+ ss
+ << " T: " << std::setprecision(2) << std::fixed << time_used;
+
+ return ss.str();
+ }
+
+ return std::string();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h b/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
new file mode 100644
index 000000000..daf02530d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solverconf.h
@@ -0,0 +1,386 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SOLVERCONF_H
+#define SOLVERCONF_H
+
+#include <string>
+#include <vector>
+#include <cstdlib>
+#include <cassert>
+#include "constants.h"
+#include "cryptominisat5/solvertypesmini.h"
+
+using std::string;
+
+namespace CMSat {
+
+enum class ClauseClean {
+ glue = 0
+ , activity = 1
+};
+
+inline unsigned clean_to_int(ClauseClean t)
+{
+ switch(t)
+ {
+ case ClauseClean::glue:
+ return 0;
+
+ case ClauseClean::activity:
+ return 1;
+ }
+
+ assert(false);
+}
+
+enum class PolarityMode {
+ polarmode_pos
+ , polarmode_neg
+ , polarmode_rnd
+ , polarmode_automatic
+};
+
+enum class Restart {
+ glue
+ , geom
+ , glue_geom
+ , luby
+ , never
+};
+
+inline std::string getNameOfRestartType(Restart rest_type)
+{
+ switch(rest_type) {
+ case Restart::glue :
+ return "glue";
+
+ case Restart::geom:
+ return "geometric";
+
+ case Restart::glue_geom:
+ return "regularly switch between glue and geometric";
+
+ case Restart::luby:
+ return "luby";
+
+ case Restart::never:
+ return "never";
+
+ default:
+ assert(false && "Unknown clause cleaning type?");
+ };
+}
+
+inline std::string getNameOfCleanType(ClauseClean clauseCleaningType)
+{
+ switch(clauseCleaningType) {
+ case ClauseClean::glue :
+ return "glue";
+
+ case ClauseClean::activity:
+ return "activity";
+
+ default:
+ assert(false && "Unknown clause cleaning type?");
+ std::exit(-1);
+ };
+}
+
+class GaussConf
+{
+ public:
+
+ GaussConf() :
+ decision_until(700)
+ , autodisable(true)
+ , max_matrix_rows(5000)
+ , min_matrix_rows(2)
+ , max_num_matrixes(5)
+ {
+ }
+
+ uint32_t decision_until; //do Gauss until this level
+ bool autodisable;
+ uint32_t max_matrix_rows; //The maximum matrix size -- no. of rows
+ uint32_t min_matrix_rows; //The minimum matrix size -- no. of rows
+ uint32_t max_num_matrixes; //Maximum number of matrixes
+
+ //Matrix extraction config
+ bool doMatrixFind = true;
+ uint32_t min_gauss_xor_clauses = 2;
+ uint32_t max_gauss_xor_clauses = 500000;
+};
+
+class DLL_PUBLIC SolverConf
+{
+ public:
+ SolverConf();
+ std::string print_times(
+ const double time_used
+ , const bool time_out
+ , const double time_remain
+ ) const;
+ std::string print_times(
+ const double time_used
+ , const bool time_out
+ ) const;
+ std::string print_times(
+ const double time_used
+ ) const;
+
+ //Variable activities
+ double var_inc_vsids_start;
+ double var_decay_vsids_start;
+ double var_decay_vsids_max;
+ double random_var_freq;
+ PolarityMode polarity_mode;
+
+ //Clause cleaning
+
+ //if non-zero, we reduce at every X conflicts.
+ //Reduced according to whether it's been used recently
+ //Otherwise, we *never* reduce
+ unsigned every_lev1_reduce;
+
+ //if non-zero, we reduce at every X conflicts.
+ //Otherwise we geometrically keep around max_temp_lev2_learnt_clauses*(inc**N)
+ unsigned every_lev2_reduce;
+
+ uint32_t must_touch_lev1_within;
+ unsigned max_temp_lev2_learnt_clauses;
+ double inc_max_temp_lev2_red_cls;
+
+ unsigned protect_cl_if_improved_glue_below_this_glue_for_one_turn;
+ unsigned glue_put_lev0_if_below_or_eq;
+ unsigned glue_put_lev1_if_below_or_eq;
+ double ratio_keep_clauses[2]; ///< Remove this ratio of clauses at every database reduction round
+
+ double clause_decay;
+
+ //If too many (in percentage) low glues after min_num_confl_adjust_glue_cutoff, adjust glue lower
+ double adjust_glue_if_too_many_low;
+ uint64_t min_num_confl_adjust_glue_cutoff;
+
+ int guess_cl_effectiveness;
+
+ //maple
+ int maple;
+ unsigned modulo_maple_iter;
+ bool more_maple_bump_high_glue;
+
+ //For restarting
+ unsigned restart_first; ///<The initial restart limit. (default 100)
+ double restart_inc; ///<The factor with which the restart limit is multiplied in each restart. (default 1.5)
+ Restart restartType; ///<If set, the solver will always choose the given restart strategy
+ int do_blocking_restart;
+ unsigned blocking_restart_trail_hist_length;
+ double blocking_restart_multip;
+ int broken_glue_restart;
+
+ double local_glue_multiplier;
+ unsigned shortTermHistorySize; ///< Rolling avg. glue window size
+ unsigned lower_bound_for_blocking_restart;
+ double ratio_glue_geom; //higher the number, the more glue will be done. 2 is 2x glue 1x geom
+ int more_more_with_cache;
+ int more_more_with_stamp;
+ int doAlwaysFMinim;
+
+ //Clause minimisation
+ int doRecursiveMinim;
+ int doMinimRedMore; ///<Perform learnt clause minimisation using watchists' binary and tertiary clauses? ("strong minimization" in PrecoSat)
+ int doMinimRedMoreMore;
+ unsigned max_glue_more_minim;
+ unsigned max_size_more_minim;
+ unsigned more_red_minim_limit_cache;
+ unsigned more_red_minim_limit_binary;
+ unsigned max_num_lits_more_more_red_min;
+
+ //Verbosity
+ int verbosity; ///<Verbosity level. 0=silent, 1=some progress report, 2=lots of report, 3 = all report (default 2) preferentiality is turned off (i.e. picked randomly between [0, all])
+ int doPrintGateDot; ///< Print DOT file of gates
+ int print_full_restart_stat;
+ int print_all_restarts;
+ int verbStats;
+ int do_print_times; ///Print times during verbose output
+ int print_restart_line_every_n_confl;
+
+ //Limits
+ double maxTime;
+ long max_confl;
+
+ //Glues
+ int update_glues_on_analyze;
+
+ //OTF stuff
+ int otfHyperbin;
+ int doOTFSubsume;
+ int doOTFSubsumeOnlyAtOrBelowGlue;
+
+ //SQL
+ bool dump_individual_restarts_and_clauses;
+ double dump_individual_cldata_ratio;
+
+ //Steps
+ double orig_step_size = 0.40;
+ double step_size_dec = 0.000001;
+ double min_step_size = 0.06;
+
+ //Var-elim
+ int doVarElim; ///<Perform variable elimination
+ uint64_t varelim_cutoff_too_many_clauses;
+ int do_empty_varelim;
+ long long empty_varelim_time_limitM;
+ long long varelim_time_limitM;
+ long long varelim_sub_str_limit;
+ double varElimRatioPerIter;
+ int skip_some_bve_resolvents;
+ int velim_resolvent_too_large; //-1 == no limit
+
+ //Subs, str limits for simplifier
+ long long subsumption_time_limitM;
+ long long strengthening_time_limitM;
+ long long aggressive_elim_time_limitM;
+
+ //BVA
+ int do_bva;
+ int min_bva_gain;
+ unsigned bva_limit_per_call;
+ int bva_also_twolit_diff;
+ long bva_extra_lit_and_red_start;
+ long long bva_time_limitM;
+
+ //Probing
+ int doProbe;
+ int doIntreeProbe;
+ unsigned long long probe_bogoprops_time_limitM;
+ unsigned long long intree_time_limitM;
+ unsigned long long intree_scc_varreplace_time_limitM;
+ int doBothProp;
+ int doTransRed; ///<Should carry out transitive reduction
+ int doStamp;
+ int doCache;
+ unsigned cacheUpdateCutoff;
+ unsigned maxCacheSizeMB;
+ unsigned long long otf_hyper_time_limitM;
+ double otf_hyper_ratio_limit;
+ double single_probe_time_limit_perc;
+
+ //XORs
+ int doFindXors;
+ unsigned maxXorToFind;
+ int useCacheWhenFindingXors;
+ int doEchelonizeXOR;
+ uint64_t maxXORMatrix;
+ uint64_t xor_finder_time_limitM;
+ int allow_elim_xor_vars;
+ unsigned xor_var_per_cut;
+
+ //Var-replacement
+ int doFindAndReplaceEqLits;
+ int doExtendedSCC;
+ int max_scc_depth;
+
+ //Iterative Alo Scheduling
+ int simplify_at_startup; //simplify at 1st startup (only)
+ int simplify_at_every_startup; //always simplify at startup, not only at 1st startup
+ int do_simplify_problem;
+ int full_simplify_at_startup;
+ int never_stop_search;
+ uint64_t num_conflicts_of_search;
+ double num_conflicts_of_search_inc;
+ double num_conflicts_of_search_inc_max;
+ string simplify_schedule_startup;
+ string simplify_schedule_nonstartup;
+ string simplify_schedule_preproc;
+
+ //Simplification
+ int perform_occur_based_simp;
+ int do_strengthen_with_occur; ///<Perform self-subsuming resolution
+ unsigned maxRedLinkInSize;
+ double maxOccurIrredMB;
+ double maxOccurRedMB;
+ double maxOccurRedLitLinkedM;
+ double subsume_gothrough_multip;
+
+ //Distillation
+ int do_distill_clauses;
+ unsigned long long distill_long_cls_time_limitM;
+ long watch_cache_stamp_based_str_time_limitM;
+ long long distill_time_limitM;
+
+ //Memory savings
+ int doRenumberVars;
+ int doSaveMem;
+
+ //Component handling
+ int doCompHandler;
+ unsigned handlerFromSimpNum;
+ size_t compVarLimit;
+ unsigned long long comp_find_time_limitM;
+
+
+ //Misc Optimisations
+ int doStrSubImplicit;
+ long long subsume_implicit_time_limitM;
+ long long distill_implicit_with_implicit_time_limitM;
+
+ //Gates
+ int doGateFind; ///< Find OR gates
+ unsigned maxGateBasedClReduceSize;
+ int doShortenWithOrGates; ///<Shorten clauses with or gates during subsumption
+ int doRemClWithAndGates; ///<Remove clauses using and gates during subsumption
+ int doFindEqLitsWithGates; ///<Find equivalent literals using gates during subsumption
+ long long gatefinder_time_limitM;
+ long long shorten_with_gates_time_limitM;
+ long long remove_cl_with_gates_time_limitM;
+
+ //Gauss
+ GaussConf gaussconf;
+ bool dont_elim_xor_vars;
+
+ //Greedy undef
+ int greedy_undef;
+ std::vector<uint32_t>* independent_vars;
+
+ //Timeouts
+ double orig_global_timeout_multiplier;
+ double global_timeout_multiplier;
+ double global_timeout_multiplier_multiplier;
+ double global_multiplier_multiplier_max;
+ double var_and_mem_out_mult;
+
+ //Misc
+ unsigned origSeed;
+ unsigned long long sync_every_confl;
+ unsigned reconfigure_val;
+ unsigned reconfigure_at;
+ unsigned preprocess;
+ int simulate_drat;
+ std::string simplified_cnf;
+ std::string solution_file;
+ std::string saved_state_file;
+};
+
+} //end namespace
+
+#endif //SOLVERCONF_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h b/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
new file mode 100644
index 000000000..ecbb6786a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solvertypes.h
@@ -0,0 +1,607 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+
+#ifndef SOLVERTYPES_H
+#define SOLVERTYPES_H
+
+#include "constants.h"
+
+#include <sstream>
+#include <algorithm>
+#include <limits>
+#include <vector>
+#include <iostream>
+#include <iomanip>
+#include <string>
+#include <limits>
+#include <cassert>
+#include "solverconf.h"
+#include "cryptominisat5/solvertypesmini.h"
+
+namespace CMSat {
+
+using std::vector;
+using std::cout;
+using std::endl;
+using std::string;
+
+enum class gret{confl, unit_confl, prop, unit_prop, nothing, nothing_fnewwatch};
+
+inline std::string restart_type_to_string(const Restart type)
+{
+ switch(type) {
+ case Restart::glue:
+ return "glue-based";
+
+ case Restart::geom:
+ return "geometric";
+
+ case Restart::luby:
+ return "luby";
+
+ case Restart::glue_geom:
+ return "switch-glue-geom";
+
+ case Restart::never:
+ return "never restart";
+ }
+
+ assert(false && "oops, one of the restart types has no string name");
+
+ return "Ooops, undefined!";
+}
+
+inline std::string restart_type_to_short_string(const Restart type)
+{
+ switch(type) {
+ case Restart::glue:
+ return "glue";
+
+ case Restart::geom:
+ return "geom";
+
+ case Restart::luby:
+ return "luby";
+
+ case Restart::glue_geom:
+ return "gl/geo";
+
+ case Restart::never:
+ return "never";
+ }
+
+ assert(false && "oops, one of the restart types has no string name");
+
+ return "ERR: undefined!";
+}
+
+//Removed by which algorithm. NONE = not eliminated
+enum class Removed : unsigned char {
+ none
+ , elimed
+ , replaced
+ , decomposed
+};
+
+inline std::string removed_type_to_string(const Removed removed) {
+ switch(removed) {
+ case Removed::none:
+ return "not removed";
+
+ case Removed::elimed:
+ return "variable elimination";
+
+ case Removed::replaced:
+ return "variable replacement";
+
+ case Removed::decomposed:
+ return "decomposed into another component";
+ }
+
+ assert(false && "oops, one of the elim types has no string name");
+ return "Oops, undefined!";
+}
+
+class BinaryClause {
+ public:
+ BinaryClause(const Lit _lit1, const Lit _lit2, const bool _red) :
+ lit1(_lit1)
+ , lit2(_lit2)
+ , red(_red)
+ {
+ if (lit1 > lit2) std::swap(lit1, lit2);
+ }
+
+ bool operator<(const BinaryClause& other) const
+ {
+ if (lit1 < other.lit1) return true;
+ if (lit1 > other.lit1) return false;
+
+ if (lit2 < other.lit2) return true;
+ if (lit2 > other.lit2) return false;
+ return (red && !other.red);
+ }
+
+ bool operator==(const BinaryClause& other) const
+ {
+ return (lit1 == other.lit1
+ && lit2 == other.lit2
+ && red == other.red);
+ }
+
+ const Lit getLit1() const
+ {
+ return lit1;
+ }
+
+ const Lit getLit2() const
+ {
+ return lit2;
+ }
+
+ bool isRed() const
+ {
+ return red;
+ }
+
+ private:
+ Lit lit1;
+ Lit lit2;
+ bool red;
+};
+
+
+inline std::ostream& operator<<(std::ostream& os, const BinaryClause val)
+{
+ os << val.getLit1() << " , " << val.getLit2()
+ << " red: " << std::boolalpha << val.isRed() << std::noboolalpha;
+ return os;
+}
+
+inline double ratio_for_stat(double a, double b)
+{
+ if (b == 0)
+ return 0;
+ return a/b;
+}
+
+inline double stats_line_percent(double num, double total)
+{
+ if (total == 0) {
+ return 0;
+ } else {
+ return num/total*100.0;
+ }
+}
+
+inline void print_value_kilo_mega(const uint64_t value)
+{
+ if (value > 20*1000ULL*1000ULL) {
+ cout << " " << std::setw(4) << value/(1000ULL*1000ULL) << "M";
+ } else if (value > 20ULL*1000ULL) {
+ cout << " " << std::setw(4) << value/1000 << "K";
+ } else {
+ cout << " " << std::setw(5) << value;
+ }
+}
+
+template<class T, class T2> void print_stats_line(
+ string left
+ , T value
+ , T2 value2
+ , string extra
+) {
+ cout
+ << std::fixed << std::left << std::setw(27) << left
+ << ": " << std::setw(11) << std::setprecision(2) << value
+ << " (" << std::left << std::setw(9) << std::setprecision(2) << value2
+ << " " << extra << ")"
+ << std::right
+ << endl;
+}
+
+inline void print_stats_line(
+ string left
+ , uint64_t value
+ , uint64_t value2
+ , uint64_t value3
+) {
+ cout
+ << std::fixed << std::left << std::setw(27) << left
+ << ": " << std::setw(11) << std::setprecision(2) << value
+ << "/" << value2
+ << "/" << value3
+ << std::right
+ << endl;
+}
+
+template<class T, class T2> void print_stats_line(
+ string left
+ , T value
+ , string extra1
+ , T2 value2
+ , string extra2
+) {
+ cout
+ << std::fixed << std::left << std::setw(27) << left
+ << ": " << std::setw(11) << std::setprecision(2) << value
+ << " " << extra1
+ << " (" << std::left << std::setw(9) << std::setprecision(2) << value2
+ << " " << extra2 << ")"
+ << std::right
+ << endl;
+}
+
+template<class T> void print_stats_line(
+ string left
+ , T value
+ , string extra = ""
+) {
+ cout
+ << std::fixed << std::left << std::setw(27) << left
+ << ": " << std::setw(11) << std::setprecision(2)
+ << value
+ << " " << extra
+ << std::right
+ << endl;
+}
+
+struct AssignStats
+{
+ AssignStats() :
+ sumAssignPos(0)
+ , sumAssignNeg(0)
+ , sumFlippedPolar(0)
+ , sumFlippedPolarByDecider(0)
+ {}
+
+ uint64_t sumAssignPos;
+ uint64_t sumAssignNeg;
+ uint64_t sumFlippedPolar;
+ uint64_t sumFlippedPolarByDecider;
+
+};
+
+struct PropStats
+{
+ void clear()
+ {
+ PropStats tmp;
+ *this = tmp;
+ }
+
+ PropStats& operator+=(const PropStats& other)
+ {
+ propagations += other.propagations;
+ bogoProps += other.bogoProps;
+ otfHyperTime += other.otfHyperTime;
+ otfHyperPropCalled += other.otfHyperPropCalled;
+ #ifdef STATS_NEEDED
+ propsUnit += other.propsUnit;
+ propsBinIrred += other.propsBinIrred;
+ propsBinRed += other.propsBinRed;
+ propsLongIrred += other.propsLongIrred;
+ propsLongRed += other.propsLongRed;
+
+ //Var settings
+ varSetPos += other.varSetPos;
+ varSetNeg += other.varSetNeg;
+ varFlipped += other.varFlipped;
+ #endif
+
+ return *this;
+ }
+
+ PropStats& operator-=(const PropStats& other)
+ {
+ propagations -= other.propagations;
+ bogoProps -= other.bogoProps;
+ otfHyperTime -= other.otfHyperTime;
+ otfHyperPropCalled -= other.otfHyperPropCalled;
+ #ifdef STATS_NEEDED
+ propsUnit -= other.propsUnit;
+ propsBinIrred -= other.propsBinIrred;
+ propsBinRed -= other.propsBinRed;
+ propsLongIrred -= other.propsLongIrred;
+ propsLongRed -= other.propsLongRed;
+
+ //Var settings
+ varSetPos -= other.varSetPos;
+ varSetNeg -= other.varSetNeg;
+ varFlipped -= other.varFlipped;
+ #endif
+
+ return *this;
+ }
+
+ PropStats operator-(const PropStats& other) const
+ {
+ PropStats result = *this;
+ result -= other;
+ return result;
+ }
+
+ PropStats operator+(const PropStats& other) const
+ {
+ PropStats result = *this;
+ result += other;
+ return result;
+ }
+
+ void print(const double cpu_time) const
+ {
+ cout << "c PROP stats" << endl;
+ print_stats_line("c Mbogo-props", (double)bogoProps/(1000.0*1000.0)
+ , ratio_for_stat(bogoProps, cpu_time*1000.0*1000.0)
+ , "/ sec"
+ );
+
+ print_stats_line("c MHyper-props", (double)otfHyperTime/(1000.0*1000.0)
+ , ratio_for_stat(otfHyperTime, cpu_time*1000.0*1000.0)
+ , "/ sec"
+ );
+
+ print_stats_line("c Mprops", (double)propagations/(1000.0*1000.0)
+ , ratio_for_stat(propagations, cpu_time*1000.0*1000.0)
+ , "/ sec"
+ );
+
+ #ifdef STATS_NEEDED
+ print_stats_line("c propsUnit", propsUnit
+ , stats_line_percent(propsUnit, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c propsBinIrred", propsBinIrred
+ , stats_line_percent(propsBinIrred, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c propsBinRed", propsBinRed
+ , stats_line_percent(propsBinRed, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c propsLongIrred", propsLongIrred
+ , stats_line_percent(propsLongIrred, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c propsLongRed", propsLongRed
+ , stats_line_percent(propsLongRed, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c varSetPos", varSetPos
+ , stats_line_percent(varSetPos, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c varSetNeg", varSetNeg
+ , stats_line_percent(varSetNeg, propagations)
+ , "% of propagations"
+ );
+
+ print_stats_line("c flipped", varFlipped
+ , stats_line_percent(varFlipped, propagations)
+ , "% of propagations"
+ );
+ #endif
+
+ }
+
+ uint64_t propagations = 0; ///<Number of propagations made
+ uint64_t bogoProps = 0; ///<An approximation of time
+ uint64_t otfHyperTime = 0;
+ uint32_t otfHyperPropCalled = 0;
+
+ #ifdef STATS_NEEDED
+ //Stats for propagations
+ uint64_t propsUnit = 0;
+ uint64_t propsBinIrred = 0;
+ uint64_t propsBinRed = 0;
+ uint64_t propsLongIrred = 0;
+ uint64_t propsLongRed = 0;
+
+ //Var settings
+ uint64_t varSetPos = 0;
+ uint64_t varSetNeg = 0;
+ uint64_t varFlipped = 0;
+ #endif
+};
+
+enum class ConflCausedBy {
+ longirred
+ , longred
+ , binred
+ , binirred
+};
+
+struct ConflStats
+{
+ void clear()
+ {
+ ConflStats tmp;
+ *this = tmp;
+ }
+
+ ConflStats& operator+=(const ConflStats& other)
+ {
+ conflsBinIrred += other.conflsBinIrred;
+ conflsBinRed += other.conflsBinRed;
+ conflsLongIrred += other.conflsLongIrred;
+ conflsLongRed += other.conflsLongRed;
+
+ numConflicts += other.numConflicts;
+
+ return *this;
+ }
+
+ ConflStats& operator-=(const ConflStats& other)
+ {
+ conflsBinIrred -= other.conflsBinIrred;
+ conflsBinRed -= other.conflsBinRed;
+ conflsLongIrred -= other.conflsLongIrred;
+ conflsLongRed -= other.conflsLongRed;
+
+ numConflicts -= other.numConflicts;
+
+ return *this;
+ }
+
+ void update(const ConflCausedBy lastConflictCausedBy)
+ {
+ switch(lastConflictCausedBy) {
+ case ConflCausedBy::binirred :
+ conflsBinIrred++;
+ break;
+ case ConflCausedBy::binred :
+ conflsBinRed++;
+ break;
+ case ConflCausedBy::longirred :
+ conflsLongIrred++;
+ break;
+ case ConflCausedBy::longred :
+ conflsLongRed++;
+ break;
+ default:
+ assert(false);
+ }
+ }
+
+ void print_short(double cpu_time, bool do_print_times) const
+ {
+ //Search stats
+ if (!do_print_times) {
+ print_stats_line("c conflicts", numConflicts);
+ } else {
+ print_stats_line("c conflicts", numConflicts
+ , ratio_for_stat(numConflicts, cpu_time)
+ , "/ sec"
+ );
+ }
+ }
+
+ void print(double cpu_time, bool do_print_times) const
+ {
+ //Search stats
+ cout << "c CONFLS stats" << endl;
+ print_short(cpu_time, do_print_times);
+
+ print_stats_line("c conflsBinIrred", conflsBinIrred
+ , stats_line_percent(conflsBinIrred, numConflicts)
+ , "%"
+ );
+
+ print_stats_line("c conflsBinRed", conflsBinRed
+ , stats_line_percent(conflsBinRed, numConflicts)
+ , "%"
+ );
+
+ print_stats_line("c conflsLongIrred" , conflsLongIrred
+ , stats_line_percent(conflsLongIrred, numConflicts)
+ , "%"
+ );
+
+ print_stats_line("c conflsLongRed", conflsLongRed
+ , stats_line_percent(conflsLongRed, numConflicts)
+ , "%"
+ );
+
+ long diff = (long)numConflicts
+ - (long)(conflsBinIrred + (long)conflsBinRed
+ + (long)conflsLongIrred + (long)conflsLongRed
+ );
+
+ if (diff != 0) {
+ cout
+ << "c DEBUG"
+ << "((int)numConflicts - (int)(conflsBinIrred + conflsBinRed"
+ << endl
+ << "c + conflsLongIrred + conflsLongRed)"
+ << " = "
+ << (((int)numConflicts - (int)(conflsBinIrred + conflsBinRed
+ + conflsLongIrred + conflsLongRed)))
+ << endl;
+
+ //assert(diff == 0);
+ }
+ }
+
+ uint64_t conflsBinIrred = 0;
+ uint64_t conflsBinRed = 0;
+ uint64_t conflsLongIrred = 0;
+ uint64_t conflsLongRed = 0;
+
+ ///Number of conflicts
+ uint64_t numConflicts = 0;
+};
+
+inline void orderLits(
+ Lit& lit1
+ , Lit& lit2
+ , Lit& lit3
+ ) {
+ if (lit1 > lit3)
+ std::swap(lit1, lit3);
+
+ if (lit1 > lit2)
+ std::swap(lit1, lit2);
+
+ if (lit2 > lit3)
+ std::swap(lit2, lit3);
+
+ //They are now ordered
+ assert(lit1 < lit2);
+ assert(lit2 < lit3);
+}
+
+inline vector<Lit> sortLits(const vector<Lit>& lits)
+{
+ vector<Lit> tmp(lits);
+
+ std::sort(tmp.begin(), tmp.end());
+ return tmp;
+}
+
+template<typename T>
+inline vector<Lit> vars_to_lits(const T& vars)
+{
+ vector<Lit> ret;
+ for(uint32_t var: vars) {
+ ret.push_back(Lit(var, false));
+ }
+ return ret;
+}
+
+inline double float_div(const double a, const double b)
+{
+ if (b != 0)
+ return a/b;
+
+ return 0;
+}
+
+} //end namespace
+
+#endif //SOLVERTYPES_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/solvertypesmini.h.in b/cryptominisat5/cryptominisat-5.6.3/src/solvertypesmini.h.in
new file mode 100644
index 000000000..571cb3510
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/solvertypesmini.h.in
@@ -0,0 +1,215 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SOLVERTYPESMINI_H__
+#define __SOLVERTYPESMINI_H__
+
+#include <cstdint>
+#include <iostream>
+#include <cassert>
+#include <vector>
+
+namespace CMSat {
+
+#define var_Undef (0xffffffffU >> 4)
+
+class TooManyVarsError {};
+class TooLongClauseError {};
+
+class Lit
+{
+ uint32_t x;
+ explicit Lit(uint32_t i) : x(i) { }
+public:
+ Lit() : x(var_Undef<<1) {} // (lit_Undef)
+ explicit Lit(uint32_t var, bool is_inverted) :
+ x(var + var + is_inverted)
+ {}
+
+ const uint32_t& toInt() const { // Guarantees small, positive integers suitable for array indexing.
+ return x;
+ }
+ Lit operator~() const {
+ return Lit(x ^ 1);
+ }
+ Lit operator^(const bool b) const {
+ return Lit(x ^ (uint32_t)b);
+ }
+ Lit& operator^=(const bool b) {
+ x ^= (uint32_t)b;
+ return *this;
+ }
+ bool sign() const {
+ return x & 1;
+ }
+ uint32_t var() const {
+ return x >> 1;
+ }
+ Lit unsign() const {
+ return Lit(x & ~1U);
+ }
+ bool operator==(const Lit& p) const {
+ return x == p.x;
+ }
+ bool operator!= (const Lit& p) const {
+ return x != p.x;
+ }
+ /**
+ @brief ONLY to be used for ordering such as: a, b, ~b, etc.
+ */
+ bool operator < (const Lit& p) const {
+ return x < p.x; // '<' guarantees that p, ~p are adjacent in the ordering.
+ }
+ bool operator > (const Lit& p) const {
+ return x > p.x;
+ }
+ bool operator >= (const Lit& p) const {
+ return x >= p.x;
+ }
+ static Lit toLit(uint32_t data)
+ {
+ return Lit(data);
+ }
+};
+
+static const Lit lit_Undef(var_Undef, false); // Useful special constants.
+static const Lit lit_Error(var_Undef, true ); //
+
+inline std::ostream& operator<<(std::ostream& os, const Lit lit)
+{
+ if (lit == lit_Undef) {
+ os << "lit_Undef";
+ } else {
+ os << (lit.sign() ? "-" : "") << (lit.var() + 1);
+ }
+ return os;
+}
+
+inline std::ostream& operator<<(std::ostream& co, const std::vector<Lit>& lits)
+{
+ for (uint32_t i = 0; i < lits.size(); i++) {
+ co << lits[i];
+
+ if (i != lits.size()-1)
+ co << " ";
+ }
+
+ return co;
+}
+
+#define l_True lbool((uint8_t)0) // gcc does not do constant propagation if these are real constants.
+#define l_False lbool((uint8_t)1)
+#define l_Undef lbool((uint8_t)2)
+
+
+class llbool;
+
+class lbool {
+ uint8_t value;
+
+public:
+ explicit lbool(uint8_t v) : value(v) { }
+
+ lbool() : value(0) { }
+ explicit lbool(bool x) : value(!x) { }
+ inline lbool(llbool b);
+
+ bool operator == (lbool b) const {
+ return ((b.value & 2) & (value & 2)) | (!(b.value & 2) & (value == b.value));
+ }
+ bool operator != (lbool b) const {
+ return !(*this == b);
+ }
+ lbool operator ^ (bool b) const {
+ return lbool((uint8_t)(value ^ (uint8_t)b));
+ }
+
+ lbool operator && (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xF7F755F4 >> sel) & 3;
+ return lbool(v);
+ }
+
+ lbool operator || (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xFCFCF400 >> sel) & 3;
+ return lbool(v);
+ }
+
+ uint8_t getValue() const { return value; }
+
+ friend int toInt (lbool l);
+ friend lbool toLbool(int v);
+ friend class llbool;
+};
+
+inline lbool boolToLBool(const bool b)
+{
+ if (b)
+ return l_True;
+ else
+ return l_False;
+}
+
+
+/**
+@brief A very hackish lbool that also supports l_Nothing and l_Continue
+*/
+class llbool
+{
+ char value;
+
+public:
+ llbool(): value(0) {}
+ llbool(lbool v) :
+ value(v.value) {}
+ llbool(char a) :
+ value(a) {}
+
+ inline bool operator!=(const llbool& v) const {
+ return (v.value != value);
+ }
+
+ inline bool operator==(const llbool& v) const {
+ return (v.value == value);
+ }
+
+ friend class lbool;
+};
+static const llbool l_Nothing = llbool(2);
+static const llbool l_Continue = llbool(3);
+inline lbool::lbool(llbool b): value(b.value) {
+ assert(b != l_Nothing);
+ assert(b != l_Continue);
+}
+
+inline std::ostream& operator<<(std::ostream& cout, const lbool val)
+{
+ if (val == l_True) cout << "l_True";
+ if (val == l_False) cout << "l_False";
+ if (val == l_Undef) cout << "l_Undef";
+ return cout;
+}
+
+}
+
+#endif //__SOLVERTYPESMINI_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sql_tablestructure.h b/cryptominisat5/cryptominisat-5.6.3/src/sql_tablestructure.h
new file mode 100644
index 000000000..43bee8b2e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sql_tablestructure.h
@@ -0,0 +1,28 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#ifndef __SQL_TABLESTRUCTURE_H__
+#define __SQL_TABLESTRUCTURE_H__
+extern char cmsat_tablestructure_sql[];
+extern unsigned int cmsat_tablestructure_sql_len;
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.cpp b/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.cpp
new file mode 100644
index 000000000..37022758f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.cpp
@@ -0,0 +1,1187 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "sqlitestats.h"
+#include "solvertypes.h"
+#include "solver.h"
+#include "time_mem.h"
+#include <sstream>
+#include "varreplacer.h"
+#include "occsimplifier.h"
+#include <string>
+#include <cmath>
+#include <time.h>
+#include "constants.h"
+#include "reducedb.h"
+#include "sql_tablestructure.h"
+#include "varreplacer.h"
+
+using namespace CMSat;
+using std::cout;
+using std::cerr;
+using std::endl;
+using std::string;
+
+SQLiteStats::~SQLiteStats()
+{
+ if (!setup_ok)
+ return;
+
+ //Free all the prepared statements
+ int ret = sqlite3_finalize(stmtRst);
+ if (ret != SQLITE_OK) {
+ cout << "Error closing prepared statement" << endl;
+ std::exit(-1);
+ }
+
+ ret = sqlite3_finalize(stmtFeat);
+ if (ret != SQLITE_OK) {
+ cout << "Error closing prepared statement" << endl;
+ std::exit(-1);
+ }
+ ret = sqlite3_finalize(stmtReduceDB);
+ if (ret != SQLITE_OK) {
+ cout << "Error closing prepared statement" << endl;
+ std::exit(-1);
+ }
+
+ ret = sqlite3_finalize(stmtTimePassed);
+ if (ret != SQLITE_OK) {
+ cout << "Error closing prepared statement" << endl;
+ std::exit(-1);
+ }
+
+ ret = sqlite3_finalize(stmtMemUsed);
+ if (ret != SQLITE_OK) {
+ cout << "Error closing prepared statement" << endl;
+ std::exit(-1);
+ }
+
+ ret = sqlite3_finalize(stmt_clause_stats);
+ if (ret != SQLITE_OK) {
+ cout << "Error closing prepared statement" << endl;
+ std::exit(-1);
+ }
+
+ //Close clonnection
+ sqlite3_close(db);
+}
+
+bool SQLiteStats::setup(const Solver* solver)
+{
+ setup_ok = connectServer(solver->conf.verbosity);
+ if (!setup_ok) {
+ return false;
+ }
+
+ getID(solver);
+ addStartupData();
+ initRestartSTMT();
+ initReduceDBSTMT();
+ initTimePassedSTMT();
+ initMemUsedSTMT();
+ init_features();
+ init_clause_stats_STMT();
+
+ return true;
+}
+
+bool SQLiteStats::connectServer(const int verbosity)
+{
+ int rc = sqlite3_open(filename.c_str(), &db);
+ if(rc) {
+ cout << "c Cannot open sqlite database: " << sqlite3_errmsg(db) << endl;
+ sqlite3_close(db);
+ return false;
+ }
+
+ if (sqlite3_exec(db, "PRAGMA synchronous = OFF", NULL, NULL, NULL)) {
+ cerr << "ERROR: Problem setting pragma to SQLite DB" << endl;
+ cerr << "c " << sqlite3_errmsg(db) << endl;
+ std::exit(-1);
+ }
+
+ if (verbosity) {
+ cout << "c writing to SQLite file: " << filename << endl;
+ }
+
+ return true;
+}
+
+bool SQLiteStats::tryIDInSQL(const Solver* solver)
+{
+ std::stringstream ss;
+ ss
+ << "INSERT INTO solverRun (runID, `runtime`, `gitrev`) values ("
+ << runID
+ << ", " << time(NULL)
+ << ", '" << solver->get_version_sha1() << "'"
+ << ");";
+
+ //Inserting element into solverruns to get unique ID
+ const int rc = sqlite3_exec(db, ss.str().c_str(), NULL, NULL, NULL);
+ if (rc) {
+ if (solver->getConf().verbosity >= 6) {
+ cerr << "c ERROR Couldn't insert into table 'solverruns'" << endl;
+ cerr << "c " << sqlite3_errmsg(db) << endl;
+ }
+
+ return false;
+ }
+
+ return true;
+}
+
+void SQLiteStats::getID(const Solver* solver)
+{
+ bool created_tablestruct = false;
+ size_t numTries = 0;
+ getRandomID();
+ while(!tryIDInSQL(solver)) {
+ getRandomID();
+ numTries++;
+
+ //Check if we have been in this loop for too long
+ if (numTries > 15) {
+ if (created_tablestruct) {
+ cerr << "ERROR: Couldn't get random runID. "
+ << "Something is probably off with your sqlite database. "
+ << "Try deleting it."
+ << endl;
+ std::exit(-1);
+ }
+ if (sqlite3_exec(db, cmsat_tablestructure_sql, NULL, NULL, NULL)) {
+ cerr << "ERROR: Couln't create table structure for SQLite: "
+ << sqlite3_errmsg(db)
+ << endl;
+ std::exit(-1);
+ }
+ created_tablestruct = true;
+ }
+ }
+
+ if (solver->getConf().verbosity) {
+ cout << "c SQL runID is " << runID << endl;
+ }
+}
+
+void SQLiteStats::add_tag(const std::pair<string, string>& tag)
+{
+ std::stringstream ss;
+ ss
+ << "INSERT INTO `tags` (`runID`, `tagname`, `tag`) VALUES("
+ << runID
+ << ", '" << tag.first << "'"
+ << ", '" << tag.second << "'"
+ << ");";
+
+ //Inserting element into solverruns to get unique ID
+ if (sqlite3_exec(db, ss.str().c_str(), NULL, NULL, NULL)) {
+ cerr << "SQLite: ERROR Couldn't insert into table 'tags'" << endl;
+ assert(false);
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::addStartupData()
+{
+ std::stringstream ss;
+ ss
+ << "INSERT INTO `startup` (`runID`, `startTime`) VALUES ("
+ << runID << ","
+ << "datetime('now')"
+ << ");";
+
+ if (sqlite3_exec(db, ss.str().c_str(), NULL, NULL, NULL)) {
+ cerr << "ERROR Couldn't insert into table 'startup' : "
+ << sqlite3_errmsg(db) << endl;
+
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::finishup(const lbool status)
+{
+ std::stringstream ss;
+ ss
+ << "INSERT INTO `finishup` (`runID`, `endTime`, `status`) VALUES ("
+ << runID << ","
+ << "datetime('now') , "
+ << "'" << status << "'"
+ << ");";
+
+ if (sqlite3_exec(db, ss.str().c_str(), NULL, NULL, NULL)) {
+ cerr << "ERROR Couldn't insert into table 'finishup'" << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::writeQuestionMarks(
+ size_t num
+ , std::stringstream& ss
+) {
+ ss << "(";
+ for(size_t i = 0
+ ; i < num
+ ; i++
+ ) {
+ if (i < num-1)
+ ss << "?,";
+ else
+ ss << "?";
+ }
+ ss << ")";
+}
+
+
+void SQLiteStats::initMemUsedSTMT()
+{
+ const size_t numElems = 6;
+
+ std::stringstream ss;
+ ss << "insert into `memused`"
+ << "("
+ //Position
+ << " `runID`, `simplifications`, `conflicts`, `runtime`"
+
+ //memory stats
+ << ", `name`, `MB`"
+ << ") values ";
+ writeQuestionMarks(
+ numElems
+ , ss
+ );
+ ss << ";";
+
+ //Prepare the statement
+ const int rc = sqlite3_prepare(db, ss.str().c_str(), -1, &stmtMemUsed, NULL);
+ if (rc) {
+ cerr << "ERROR in sqlite_stmt_prepare(), INSERT failed"
+ << endl
+ << sqlite3_errmsg(db)
+ << " error code: " << rc
+ << endl
+ << "Query was: " << ss.str()
+ << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::mem_used(
+ const Solver* solver
+ , const string& name
+ , double given_time
+ , uint64_t mem_used_mb
+) {
+ int bindAt = 1;
+ //Position
+ sqlite3_bind_int64(stmtMemUsed, bindAt++, runID);
+ sqlite3_bind_int64(stmtMemUsed, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmtMemUsed, bindAt++, solver->sumConflicts);
+ sqlite3_bind_double(stmtMemUsed, bindAt++, given_time);
+ //memory stats
+ sqlite3_bind_text(stmtMemUsed, bindAt++, name.c_str(), -1, NULL);
+ sqlite3_bind_int(stmtMemUsed, bindAt++, mem_used_mb);
+
+ int rc = sqlite3_step(stmtMemUsed);
+ if (rc != SQLITE_DONE) {
+ cerr << "ERROR while executing mem_used prepared statement"
+ << endl
+ << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << " error code: " << rc
+ << endl;
+
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmtMemUsed)) {
+ cerr << "Error calling sqlite3_reset on stmtMemUsed" << endl;
+ std::exit(-1);
+ }
+ /*if (sqlite3_clear_bindings(stmtMemUsed)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmtMemUsed" << endl;
+ std::exit(-1);
+ }*/
+}
+
+void SQLiteStats::initTimePassedSTMT()
+{
+ const size_t numElems = 8;
+
+ std::stringstream ss;
+ ss << "insert into `timepassed`"
+ << "("
+ //Position
+ << " `runID`, `simplifications`, `conflicts`, `runtime`"
+
+ //Clause stats
+ << ", `name`, `elapsed`, `timeout`, `percenttimeremain`"
+ << ") values ";
+ writeQuestionMarks(
+ numElems
+ , ss
+ );
+ ss << ";";
+
+ //Prepare the statement
+ const int rc = sqlite3_prepare(db, ss.str().c_str(), -1, &stmtTimePassed, NULL);
+ if (rc) {
+ cerr << "ERROR in sqlite_stmt_prepare(), INSERT failed"
+ << endl
+ << sqlite3_errmsg(db)
+ << " error code: " << rc
+ << endl
+ << "Query was: " << ss.str()
+ << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::time_passed(
+ const Solver* solver
+ , const string& name
+ , double time_passed
+ , bool time_out
+ , double percent_time_remain
+) {
+
+ int bindAt = 1;
+ sqlite3_bind_int64(stmtTimePassed, bindAt++, runID);
+ sqlite3_bind_int64(stmtTimePassed, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmtTimePassed, bindAt++, solver->sumConflicts);
+ sqlite3_bind_double(stmtTimePassed, bindAt++, cpuTime());
+ sqlite3_bind_text(stmtTimePassed, bindAt++, name.c_str(), -1, NULL);
+ sqlite3_bind_double(stmtTimePassed, bindAt++, time_passed);
+ sqlite3_bind_int(stmtTimePassed, bindAt++, time_out);
+ sqlite3_bind_double(stmtTimePassed, bindAt++, percent_time_remain);
+
+ int rc = sqlite3_step(stmtTimePassed);
+ if (rc != SQLITE_DONE) {
+ cerr << "ERROR while executing time_passed prepared statement"
+ << endl
+ << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << " error code: " << rc
+ << endl;
+
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmtTimePassed)) {
+ cerr << "Error calling sqlite3_reset on stmtTimePassed" << endl;
+ std::exit(-1);
+ }
+ /*if (sqlite3_clear_bindings(stmtTimePassed)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmtTimePassed" << endl;
+ std::exit(-1);
+ }*/
+}
+
+void SQLiteStats::time_passed_min(
+ const Solver* solver
+ , const string& name
+ , double time_passed
+) {
+ int bindAt = 1;
+ sqlite3_bind_int64(stmtTimePassed, bindAt++, runID);
+ sqlite3_bind_int64(stmtTimePassed, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmtTimePassed, bindAt++, solver->sumConflicts);
+ sqlite3_bind_double(stmtTimePassed, bindAt++, cpuTime());
+ sqlite3_bind_text(stmtTimePassed, bindAt++, name.c_str(), -1, NULL);
+ sqlite3_bind_double(stmtTimePassed, bindAt++, time_passed);
+ sqlite3_bind_null(stmtTimePassed, bindAt++);
+ sqlite3_bind_null(stmtTimePassed, bindAt++);
+
+ int rc = sqlite3_step(stmtTimePassed);
+ if (rc != SQLITE_DONE) {
+ cerr << "ERROR while executing time_passed prepared statement (time_passed_min function)"
+ << endl
+ << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << " error code: " << rc
+ << endl;
+
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmtTimePassed)) {
+ cerr << "Error calling sqlite3_reset on stmtTimePassed" << endl;
+ std::exit(-1);
+ }
+ if (sqlite3_clear_bindings(stmtTimePassed)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmtTimePassed" << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::init_features() {
+ const size_t numElems = 67;
+
+ std::stringstream ss;
+ ss << "insert into `features`"
+ << "("
+ //Position
+ << " `runID`, `simplifications`, `restarts`, `conflicts`, `latest_feature_calc`"
+
+ //Base data
+ << ", `numVars`"
+ << ", `numClauses`"
+ << ", `var_cl_ratio`"
+
+ //Clause distribution
+ << ", `binary`"
+ << ", `horn`"
+ << ", `horn_mean`"
+ << ", `horn_std`"
+ << ", `horn_min`"
+ << ", `horn_max`"
+ << ", `horn_spread`"
+//14
+ << ", `vcg_var_mean`"
+ << ", `vcg_var_std`"
+ << ", `vcg_var_min`"
+ << ", `vcg_var_max`"
+ << ", `vcg_var_spread`"
+
+ << ", `vcg_cls_mean`"
+ << ", `vcg_cls_std`"
+ << ", `vcg_cls_min`"
+ << ", `vcg_cls_max`"
+ << ", `vcg_cls_spread`"
+
+ << ", `pnr_var_mean`"
+ << ", `pnr_var_std`"
+ << ", `pnr_var_min`"
+ << ", `pnr_var_max`"
+ << ", `pnr_var_spread`"
+
+ << ", `pnr_cls_mean`"
+ << ", `pnr_cls_std`"
+ << ", `pnr_cls_min`"
+ << ", `pnr_cls_max`"
+ << ", `pnr_cls_spread`"
+//34
+ //Conflict clauses
+ << ", `avg_confl_size`"
+ << ", `confl_size_min`"
+ << ", `confl_size_max`"
+ << ", `avg_confl_glue`"
+ << ", `confl_glue_min`"
+ << ", `confl_glue_max`"
+ << ", `avg_num_resolutions`"
+ << ", `num_resolutions_min`"
+ << ", `num_resolutions_max`"
+ << ", `learnt_bins_per_confl`"
+//44
+ //Search
+ << ", `avg_branch_depth`"
+ << ", `branch_depth_min`"
+ << ", `branch_depth_max`"
+ << ", `avg_trail_depth_delta`"
+ << ", `trail_depth_delta_min`"
+ << ", `trail_depth_delta_max`"
+ << ", `avg_branch_depth_delta`"
+ << ", `props_per_confl`"
+ << ", `confl_per_restart`"
+ << ", `decisions_per_conflict`"
+//54
+ //clause distributions
+ << ", `red_glue_distr_mean`"
+ << ", `red_glue_distr_var`"
+ << ", `red_size_distr_mean`"
+ << ", `red_size_distr_var`"
+ << ", `red_activity_distr_mean`"
+ << ", `red_activity_distr_var`"
+//60
+ << ", `irred_glue_distr_mean`"
+ << ", `irred_glue_distr_var`"
+ << ", `irred_size_distr_mean`"
+ << ", `irred_size_distr_var`"
+ << ", `irred_activity_distr_mean`"
+ << ", `irred_activity_distr_var`"
+//66
+ << ") values ";
+ writeQuestionMarks(
+ numElems
+ , ss
+ );
+ ss << ";";
+
+ //Prepare the statement
+ if (sqlite3_prepare(db, ss.str().c_str(), -1, &stmtFeat, NULL)) {
+ cerr << "ERROR in sqlite_stmt_prepare(), INSERT failed"
+ << endl
+ << sqlite3_errmsg(db)
+ << endl
+ << "Query was: " << ss.str()
+ << endl;
+ std::exit(-1);
+ }
+}
+
+//Prepare statement for restart
+void SQLiteStats::initRestartSTMT()
+{
+ const size_t numElems = 67;
+
+ std::stringstream ss;
+ ss << "insert into `restart`"
+ << "("
+ //Position
+ << " `runID`, `simplifications`, `restarts`, `conflicts`, `latest_feature_calc`"
+ << ", `runtime` "
+
+ //Clause stats
+ << ", numIrredBins, numIrredLongs"
+ << ", numRedBins, numRedLongs"
+ << ", numIrredLits, numRedLits"
+
+ //Conflict stats
+ << ", `restart_type`"
+ << ", `glue`, `glueSD`, `glueMin`, `glueMax`"
+ << ", `size`, `sizeSD`, `sizeMin`, `sizeMax`"
+ << ", `resolutions`, `resolutionsSD`, `resolutionsMin`, `resolutionsMax`"
+
+ //Search stats
+ << ", `branchDepth`, `branchDepthSD`, `branchDepthMin`, `branchDepthMax`"
+ << ", `branchDepthDelta`, `branchDepthDeltaSD`, `branchDepthDeltaMin`, `branchDepthDeltaMax`"
+ << ", `trailDepth`, `trailDepthSD`, `trailDepthMin`, `trailDepthMax`"
+ << ", `trailDepthDelta`, `trailDepthDeltaSD`, `trailDepthDeltaMin`,`trailDepthDeltaMax`"
+
+ //Propagations
+ << ", `propBinIrred` , `propBinRed` "
+ << ", `propLongIrred` , `propLongRed`"
+
+ //Conflicts
+ << ", `conflBinIrred`, `conflBinRed`"
+ << ", `conflLongIrred`, `conflLongRed`"
+
+ //Reds
+ << ", `learntUnits`, `learntBins`, `learntLongs`"
+
+ //Resolutions
+ << ", `resolBinIrred`, `resolBinRed`, `resolLIrred`, `resolLRed`"
+
+ //Var stats
+ << ", `propagations`"
+ << ", `decisions`"
+ << ", `flipped`, `varSetPos`, `varSetNeg`"
+ << ", `free`, `replaced`, `eliminated`, `set`"
+ << ", `clauseIDstartInclusive`, `clauseIDendExclusive`"
+ << ") values ";
+ writeQuestionMarks(
+ numElems
+ , ss
+ );
+ ss << ";";
+
+ //Prepare the statement
+ if (sqlite3_prepare(db, ss.str().c_str(), -1, &stmtRst, NULL)) {
+ cerr << "ERROR in sqlite_stmt_prepare(), INSERT failed"
+ << endl
+ << sqlite3_errmsg(db)
+ << endl
+ << "Query was: " << ss.str()
+ << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::features(
+ const Solver* solver
+ , const Searcher* search
+ , const SolveFeatures& feat
+) {
+ int bindAt = 1;
+ sqlite3_bind_int64(stmtFeat, bindAt++, runID);
+ sqlite3_bind_int64(stmtFeat, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmtFeat, bindAt++, search->sumRestarts());
+ sqlite3_bind_int64(stmtFeat, bindAt++, solver->sumConflicts);
+ sqlite3_bind_int(stmtFeat, bindAt++, solver->latest_feature_calc);
+
+ sqlite3_bind_int64(stmtFeat, bindAt++, feat.numVars);
+ sqlite3_bind_int64(stmtFeat, bindAt++, feat.numClauses);
+ sqlite3_bind_int64(stmtFeat, bindAt++, feat.var_cl_ratio);
+
+ //Clause distribution
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.binary);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.horn);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.horn_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.horn_std);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.horn_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.horn_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.horn_spread);
+
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_var_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_var_std);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_var_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_var_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_var_spread);
+
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_cls_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_cls_std);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_cls_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_cls_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.vcg_cls_spread);
+
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_var_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_var_std);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_var_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_var_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_var_spread);
+
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_cls_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_cls_std);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_cls_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_cls_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.pnr_cls_spread);
+
+ //Conflict clauses
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.avg_confl_size);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.confl_size_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.confl_size_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.avg_confl_glue);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.confl_glue_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.confl_glue_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.avg_num_resolutions);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.num_resolutions_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.num_resolutions_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.learnt_bins_per_confl);
+
+ //Search
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.avg_branch_depth);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.branch_depth_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.branch_depth_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.avg_trail_depth_delta);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.trail_depth_delta_min);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.trail_depth_delta_max);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.avg_branch_depth_delta);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.props_per_confl);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.confl_per_restart);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.decisions_per_conflict);
+
+ //red stats
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.red_cl_distrib.glue_distr_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.red_cl_distrib.glue_distr_var);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.red_cl_distrib.size_distr_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.red_cl_distrib.size_distr_var);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.red_cl_distrib.activity_distr_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.red_cl_distrib.activity_distr_var);
+
+ //irred stats
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.irred_cl_distrib.glue_distr_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.irred_cl_distrib.glue_distr_var);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.irred_cl_distrib.size_distr_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.irred_cl_distrib.size_distr_var);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.irred_cl_distrib.activity_distr_mean);
+ sqlite3_bind_double(stmtFeat, bindAt++, feat.irred_cl_distrib.activity_distr_var);
+
+ int rc = sqlite3_step(stmtFeat);
+ if (rc != SQLITE_DONE) {
+ cerr << "ERROR while executing restart insertion SQLite prepared statement"
+ << endl
+ << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << endl;
+
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmtFeat)) {
+ cerr << "Error calling sqlite3_reset on stmtFeat" << endl;
+ std::exit(-1);
+ }
+ if (sqlite3_clear_bindings(stmtFeat)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmtFeat" << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::restart(
+ const std::string& restart_type
+ , const PropStats& thisPropStats
+ , const SearchStats& thisStats
+ , const Solver* solver
+ , const Searcher* search
+) {
+ const SearchHist& searchHist = search->getHistory();
+ const BinTriStats& binTri = solver->getBinTriStats();
+
+ int bindAt = 1;
+ sqlite3_bind_int64(stmtRst, bindAt++, runID);
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmtRst, bindAt++, search->sumRestarts());
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->sumConflicts);
+ sqlite3_bind_int(stmtRst, bindAt++, solver->latest_feature_calc);
+ sqlite3_bind_double(stmtRst, bindAt++, cpuTime());
+
+
+ sqlite3_bind_int64(stmtRst, bindAt++, binTri.irredBins);
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->get_num_long_irred_cls());
+
+ sqlite3_bind_int64(stmtRst, bindAt++, binTri.redBins);
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->get_num_long_red_cls());
+
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->litStats.irredLits);
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->litStats.redLits);
+
+ //Conflict stats
+ sqlite3_bind_text(stmtRst, bindAt++, restart_type.c_str(), -1, NULL);
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.glueHist.getLongtTerm().avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.glueHist.getLongtTerm().var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.glueHist.getLongtTerm().getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.glueHist.getLongtTerm().getMax());
+
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.conflSizeHist.avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.conflSizeHist.var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.conflSizeHist.getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.conflSizeHist.getMax());
+
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.numResolutionsHist.avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.numResolutionsHist.var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.numResolutionsHist.getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.numResolutionsHist.getMax());
+
+ //Search stats
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.branchDepthHist.avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.branchDepthHist.var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.branchDepthHist.getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.branchDepthHist.getMax());
+
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.branchDepthDeltaHist.avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.branchDepthDeltaHist.var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.branchDepthDeltaHist.getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.branchDepthDeltaHist.getMax());
+
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.trailDepthHist.getLongtTerm().avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.trailDepthHist.getLongtTerm().var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.trailDepthHist.getLongtTerm().getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.trailDepthHist.getLongtTerm().getMax());
+
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.trailDepthDeltaHist.avg());
+ sqlite3_bind_double(stmtRst, bindAt++, std:: sqrt(searchHist.trailDepthDeltaHist.var()));
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.trailDepthDeltaHist.getMin());
+ sqlite3_bind_double(stmtRst, bindAt++, searchHist.trailDepthDeltaHist.getMax());
+
+ //Prop
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.propsBinIrred);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.propsBinRed);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.propsLongIrred);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.propsLongRed);
+
+ //Confl
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.conflStats.conflsBinIrred);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.conflStats.conflsBinRed);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.conflStats.conflsLongIrred);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.conflStats.conflsLongRed);
+
+ //Red
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.learntUnits);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.learntBins);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.learntLongs);
+
+ //Resolv stats
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.resolvs.binIrred);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.resolvs.binRed);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.resolvs.longIrred);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.resolvs.longRed);
+
+
+ //Var stats
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.propagations);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.decisions);
+
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.varFlipped);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.varSetPos);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisPropStats.varSetNeg);
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->get_num_free_vars());
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->varReplacer->get_num_replaced_vars());
+ sqlite3_bind_int64(stmtRst, bindAt++, solver->get_num_vars_elimed());
+ sqlite3_bind_int64(stmtRst, bindAt++, search->getTrailSize());
+
+ //ClauseID
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.clauseID_at_start_inclusive);
+ sqlite3_bind_int64(stmtRst, bindAt++, thisStats.clauseID_at_end_exclusive);
+
+ int rc = sqlite3_step(stmtRst);
+ if (rc != SQLITE_DONE) {
+ cerr << "ERROR while executing restart insertion SQLite prepared statement"
+ << endl
+ << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << endl;
+
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmtRst)) {
+ cerr << "Error calling sqlite3_reset on stmtRst" << endl;
+ std::exit(-1);
+ }
+ if (sqlite3_clear_bindings(stmtRst)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmtRst" << endl;
+ std::exit(-1);
+ }
+}
+
+
+//Prepare statement for restart
+void SQLiteStats::initReduceDBSTMT()
+{
+ const size_t numElems = 19;
+
+ std::stringstream ss;
+ ss << "insert into `reduceDB`"
+ << "("
+ //Position
+ << " `runID`, `simplifications`, `restarts`, `conflicts`, `runtime`"
+
+ //data
+ << ", `clauseID`"
+ << ", `dump_no`"
+ << ", `conflicts_made`"
+ << ", `sum_of_branch_depth_conflict`"
+ << ", `propagations_made`"
+ << ", `clause_looked_at`"
+ << ", `used_for_uip_creation`"
+ << ", `last_touched_diff`"
+ << ", `activity_rel`"
+ << ", `locked`"
+ << ", `in_xor`"
+ << ", `glue`"
+ << ", `size`"
+ << ", `ttl`"
+ << ") values ";
+ writeQuestionMarks(
+ numElems
+ , ss
+ );
+ ss << ";";
+
+ //Prepare the statement
+ int rc = sqlite3_prepare(db, ss.str().c_str(), -1, &stmtReduceDB, NULL);
+ if (rc) {
+ cout
+ << "Error in sqlite_prepare(), INSERT failed"
+ << endl
+ << sqlite3_errmsg(db)
+ << endl
+ << "Query was: " << ss.str()
+ << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::reduceDB(
+ const Solver* solver
+ , const bool locked
+ , const Clause* cl
+) {
+ assert(cl->stats.dump_number != std::numeric_limits<uint32_t>::max());
+
+ int bindAt = 1;
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, runID);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, solver->sumRestarts());
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, solver->sumConflicts);
+ sqlite3_bind_double(stmtReduceDB, bindAt++, cpuTime());
+
+ //data
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.ID);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.dump_number);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.conflicts_made);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.sum_of_branch_depth_conflict);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.propagations_made);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.clause_looked_at);
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, cl->stats.used_for_uip_creation);
+
+ uint64_t last_touched_diff;
+ if (cl->stats.last_touched == 0) {
+ last_touched_diff = solver->sumConflicts-cl->stats.introduced_at_conflict;
+ } else {
+ last_touched_diff = solver->sumConflicts-cl->stats.last_touched;
+ }
+ sqlite3_bind_int64(stmtReduceDB, bindAt++, last_touched_diff);
+
+ sqlite3_bind_double(stmtReduceDB, bindAt++, (double)cl->stats.activity/(double)solver->get_cla_inc());
+ sqlite3_bind_int(stmtReduceDB, bindAt++, locked);
+ sqlite3_bind_int(stmtReduceDB, bindAt++, cl->used_in_xor());
+ sqlite3_bind_int(stmtReduceDB, bindAt++, cl->stats.glue);
+ sqlite3_bind_int(stmtReduceDB, bindAt++, cl->size());
+ sqlite3_bind_int(stmtReduceDB, bindAt++, cl->stats.ttl);
+
+ int rc = sqlite3_step(stmtReduceDB);
+ if (rc != SQLITE_DONE) {
+ cout
+ << "ERROR: while executing clause DB cleaning SQLite prepared statement"
+ << endl;
+
+ cout << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << endl;
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmtReduceDB)) {
+ cerr << "Error calling sqlite3_reset on stmtReduceDB" << endl;
+ std::exit(-1);
+ }
+
+ if (sqlite3_clear_bindings(stmtReduceDB)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmtReduceDB" << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::init_clause_stats_STMT()
+{
+ const size_t numElems = 67;
+
+ std::stringstream ss;
+ ss << "insert into `clauseStats`"
+ << "("
+ << " `runID`,"
+ << " `simplifications`,"
+ << " `restarts`,"
+ << " `prev_restart`,"
+ << " `conflicts`,"
+ << " `latest_feature_calc`,"
+ << " `clauseID`,"
+ << ""
+ << " `glue`,"
+ << " `size`,"
+ << " `conflicts_this_restart`,"
+ << " `num_overlap_literals`,"
+ << " `num_antecedents`,"
+ << " `num_total_lits_antecedents`,"
+ << " `antecedents_avg_size`,"
+
+ << " `last_dec_var_act_vsids_0`,"
+ << " `last_dec_var_act_vsids_1`,"
+ << " `first_dec_var_act_vsids_0`,"
+ << " `first_dec_var_act_vsids_1`,"
+
+ << " `backtrack_level`,"
+ << " `decision_level`,"
+ << " `decision_level_pre1`,"
+ << " `decision_level_pre2`,"
+ << " `trail_depth_level`,"
+ << " `cur_restart_type` ,"
+
+ << " `atedecents_binIrred`,"
+ << " `atedecents_binRed`,"
+ << " `atedecents_longIrred`,"
+ << " `atedecents_longRed`,"
+
+ << " `vsids_vars_avg`,"
+ << " `vsids_vars_var`,"
+ << " `vsids_vars_min`,"
+ << " `vsids_vars_max`,"
+
+ << " `antecedents_glue_long_reds_avg`,"
+ << " `antecedents_glue_long_reds_var`,"
+ << " `antecedents_glue_long_reds_min`,"
+ << " `antecedents_glue_long_reds_max`,"
+
+ << " `antecedents_long_red_age_avg`,"
+ << " `antecedents_long_red_age_var`,"
+ << " `antecedents_long_red_age_min`,"
+ << " `antecedents_long_red_age_max`,"
+
+ << " `vsids_of_resolving_literals_avg`,"
+ << " `vsids_of_resolving_literals_var`,"
+ << " `vsids_of_resolving_literals_min`,"
+ << " `vsids_of_resolving_literals_max`,"
+
+ << " `vsids_of_all_incoming_lits_avg`,"
+ << " `vsids_of_all_incoming_lits_var`,"
+ << " `vsids_of_all_incoming_lits_min`,"
+ << " `vsids_of_all_incoming_lits_max`,"
+
+ << " `antecedents_antecedents_vsids_avg`,"
+
+ << " `decision_level_hist`,"
+ << " `backtrack_level_hist_lt`,"
+ << " `trail_depth_level_hist`,"
+ << " `vsids_vars_hist`,"
+ << " `size_hist`,"
+ << " `glue_hist`,"
+ << " `num_antecedents_hist`,"
+ << " `antec_sum_size_hist`,"
+ << " `antec_overlap_hist`,"
+ << " `branch_depth_hist_queue`,"
+ << " `trail_depth_hist`,"
+ << " `trail_depth_hist_longer`,"
+ << " `num_resolutions_hist`,"
+ << " `confl_size_hist`,"
+ << " `trail_depth_delta_hist`,"
+ << " `backtrack_level_hist`,"
+ << " `glue_hist_queue`,"
+ << " `glue_hist_long`"
+ << ") values ";
+ writeQuestionMarks(
+ numElems
+ , ss
+ );
+ ss << ";";
+
+ //Prepare the statement
+ int rc = sqlite3_prepare(db, ss.str().c_str(), -1, &stmt_clause_stats, NULL);
+ if (rc) {
+ cout
+ << "Error in sqlite_prepare(), INSERT failed"
+ << endl
+ << sqlite3_errmsg(db)
+ << endl
+ << "Query was: " << ss.str()
+ << endl;
+ std::exit(-1);
+ }
+}
+
+void SQLiteStats::dump_clause_stats(
+ const Solver* solver
+ , uint64_t clauseID
+ , uint32_t glue
+ , uint32_t backtrack_level
+ , uint32_t size
+ , AtecedentData<uint16_t> antec_data
+ , size_t decision_level
+ , size_t trail_depth
+ , uint64_t conflicts_this_restart
+ , const std::string& restart_type
+ , const SearchHist& hist
+ , const double last_dec_var_act_vsids_0
+ , const double last_dec_var_act_vsids_1
+ , const double first_dec_var_act_vsids_0
+ , const double first_dec_var_act_vsids_1
+) {
+ uint32_t num_overlap_literals = antec_data.sum_size()-(antec_data.num()-1)-size;
+
+ int bindAt = 1;
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, runID);
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, solver->get_solve_stats().numSimplify);
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, solver->sumRestarts());
+ if (solver->sumRestarts() == 0) {
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, 0);
+ } else {
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, solver->sumRestarts()-1);
+ }
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, solver->sumConflicts);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, solver->latest_feature_calc);
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, clauseID);
+
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, glue);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, size);
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, conflicts_this_restart);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, num_overlap_literals);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.num());
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.sum_size());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, (double)antec_data.sum_size()/(double)antec_data.num() );
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, last_dec_var_act_vsids_0);
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, last_dec_var_act_vsids_1);
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, first_dec_var_act_vsids_0);
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, first_dec_var_act_vsids_1);
+
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, backtrack_level);
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, decision_level);
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, hist.branchDepthHistQueue.prev(1));
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, hist.branchDepthHistQueue.prev(2));
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, trail_depth);
+ sqlite3_bind_text(stmt_clause_stats, bindAt++, restart_type.c_str(), -1, NULL);
+
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.binIrred);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.binRed);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.longIrred);
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.longRed);
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_vars.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_vars.var());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_vars.getMin());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_vars.getMax());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.glue_long_reds.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.glue_long_reds.var());
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.glue_long_reds.getMin());
+ sqlite3_bind_int(stmt_clause_stats, bindAt++, antec_data.glue_long_reds.getMax());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.age_long_reds.avg() );
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.age_long_reds.var() );
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, antec_data.age_long_reds.getMin() );
+ sqlite3_bind_int64(stmt_clause_stats, bindAt++, antec_data.age_long_reds.getMax() );
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_of_resolving_literals.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_of_resolving_literals.var());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_of_resolving_literals.getMin());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_of_resolving_literals.getMax());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_all_incoming_vars.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_all_incoming_vars.var());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_all_incoming_vars.getMin());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_all_incoming_vars.getMax());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, antec_data.vsids_of_ants.avg());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.decisionLevelHistLT.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.backtrackLevelHistLT.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.trailDepthHistLT.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.vsidsVarsAvgLT.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.conflSizeHistLT.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.glueHistLTAll.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.numResolutionsHistLT.avg());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.antec_data_sum_sizeHistLT.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.overlapHistLT.avg());
+
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.branchDepthHistQueue.avg_nocheck());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.trailDepthHist.avg_nocheck());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.trailDepthHistLonger.avg_nocheck());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.numResolutionsHist.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.conflSizeHist.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.trailDepthDeltaHist.avg());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.backtrackLevelHist.avg_nocheck());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.glueHist.avg_nocheck());
+ sqlite3_bind_double(stmt_clause_stats, bindAt++, hist.glueHist.getLongtTerm().avg());
+
+ int rc = sqlite3_step(stmt_clause_stats);
+ if (rc != SQLITE_DONE) {
+ cout
+ << "ERROR: while executing clause DB cleaning SQLite prepared statement"
+ << endl;
+
+ cout << "Error from sqlite: "
+ << sqlite3_errmsg(db)
+ << endl;
+ std::exit(-1);
+ }
+
+ if (sqlite3_reset(stmt_clause_stats)) {
+ cerr << "Error calling sqlite3_reset on stmt_clause_stats" << endl;
+ std::exit(-1);
+ }
+
+ if (sqlite3_clear_bindings(stmt_clause_stats)) {
+ cerr << "Error calling sqlite3_clear_bindings on stmt_clause_stats" << endl;
+ std::exit(-1);
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h b/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h
new file mode 100644
index 000000000..81f067ca8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sqlitestats.h
@@ -0,0 +1,131 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "sqlstats.h"
+#include "solvefeatures.h"
+#include <sqlite3.h>
+
+namespace CMSat {
+
+
+class SQLiteStats: public SQLStats
+{
+public:
+ ~SQLiteStats() override;
+ explicit SQLiteStats(std::string _filename) :
+ filename(_filename)
+ {
+ }
+
+ void restart(
+ const std::string& restart_type
+ , const PropStats& thisPropStats
+ , const SearchStats& thisStats
+ , const Solver* solver
+ , const Searcher* searcher
+ ) override;
+
+ void reduceDB(
+ const Solver* solver
+ , const bool locked
+ , const Clause* cl
+ ) override;
+
+ void time_passed(
+ const Solver* solver
+ , const string& name
+ , double time_passed
+ , bool time_out
+ , double percent_time_remain
+ ) override;
+
+ void time_passed_min(
+ const Solver* solver
+ , const string& name
+ , double time_passed
+ ) override;
+
+
+ void features(
+ const Solver* solver
+ , const Searcher* search
+ , const SolveFeatures& feat
+ ) override;
+
+ void mem_used(
+ const Solver* solver
+ , const string& name
+ , double given_time
+ , uint64_t mem_used_mb
+ ) override;
+
+ void dump_clause_stats(
+ const Solver* solver
+ , uint64_t clauseID
+ , uint32_t glue
+ , const uint32_t backtrack_level
+ , uint32_t size
+ , AtecedentData<uint16_t> resoltypes
+ , size_t decision_level
+ , size_t trail_depth
+ , uint64_t conflicts_this_restart
+ , const std::string& rest_type
+ , const SearchHist& hist
+ , const double last_dec_var_act_0
+ , const double last_dec_var_act_1
+ , const double first_dec_var_act_0
+ , const double first_dec_var_act_1
+ ) override;
+
+ bool setup(const Solver* solver) override;
+ void finishup(lbool status) override;
+ void add_tag(const std::pair<std::string, std::string>& tag) override;
+
+private:
+
+ bool connectServer(const int verbosity);
+ void getID(const Solver* solver);
+ bool tryIDInSQL(const Solver* solver);
+
+ void addStartupData();
+ void initRestartSTMT();
+ void initTimePassedSTMT();
+ void initMemUsedSTMT();
+ void init_clause_stats_STMT();
+ void init_features();
+
+ void writeQuestionMarks(size_t num, std::stringstream& ss);
+ void initReduceDBSTMT();
+
+ sqlite3_stmt *stmtTimePassed = NULL;
+ sqlite3_stmt *stmtMemUsed = NULL;
+ sqlite3_stmt *stmtReduceDB = NULL;
+ sqlite3_stmt *stmtRst = NULL;
+ sqlite3_stmt *stmtFeat = NULL;
+ sqlite3_stmt *stmt_clause_stats = NULL;
+
+ sqlite3 *db = NULL;
+ bool setup_ok = false;
+ const string filename;
+};
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp b/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
new file mode 100644
index 000000000..50f7d0d58
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.cpp
@@ -0,0 +1,63 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "sqlstats.h"
+using namespace CMSat;
+
+
+#ifndef _MSC_VER
+#include <fcntl.h>
+#include <unistd.h>
+void SQLStats::getRandomID()
+{
+ //Generate random ID for SQL
+ int randomData = open("/dev/urandom", O_RDONLY);
+ if (randomData == -1) {
+ cout << "Error reading from /dev/urandom !" << endl;
+ std::exit(-1);
+ }
+ ssize_t ret = read(randomData, &runID, sizeof(runID));
+
+ //Can only be <8 bytes long, some PHP-related limit
+ //Make it 6-byte long then (good chance to collide after 2^24 entries)
+ runID &= 0xffffffULL;
+
+ if (ret != sizeof(runID)) {
+ cout << "Couldn't read from /dev/urandom!" << endl;
+ std::exit(-1);
+ }
+ close(randomData);
+
+ if (runID == 0)
+ runID = 1;
+}
+#else
+#include <ctime>
+void SQLStats::getRandomID()
+{
+ srand((unsigned) time(NULL));
+ runID = rand();
+ if (runID == 0) {
+ runID = 1;
+ }
+}
+#endif
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h b/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
new file mode 100644
index 000000000..c58e38fd6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/sqlstats.h
@@ -0,0 +1,118 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SQLSTATS_H__
+#define __SQLSTATS_H__
+
+#include "clauseusagestats.h"
+#include "solvefeatures.h"
+#include "searchstats.h"
+
+namespace CMSat {
+
+class Solver;
+class Searcher;
+class Clause;
+
+class SQLStats
+{
+public:
+
+ virtual ~SQLStats()
+ {}
+
+ virtual void restart(
+ const std::string& restart_type
+ , const PropStats& thisPropStats
+ , const SearchStats& thisStats
+ , const Solver* solver
+ , const Searcher* searcher
+ ) = 0;
+
+ virtual void time_passed(
+ const Solver* solver
+ , const string& name
+ , double time_passed
+ , bool time_out
+ , double percent_time_remain
+ ) = 0;
+
+ virtual void time_passed_min(
+ const Solver* solver
+ , const string& name
+ , double time_passed
+ ) = 0;
+
+ virtual void features(
+ const Solver* solver
+ , const Searcher* search
+ , const SolveFeatures& feat
+ ) = 0;
+
+ virtual void mem_used(
+ const Solver* solver
+ , const string& name
+ , const double given_time
+ , uint64_t mem_used_mb
+ ) = 0;
+
+ virtual void reduceDB(
+ const Solver* solver
+ , const bool locked
+ , const Clause* cl
+ ) = 0;
+
+ virtual void dump_clause_stats(
+ const Solver* solver
+ , uint64_t clauseID
+ , uint32_t glue
+ , uint32_t backtrack_level
+ , uint32_t size
+ , AtecedentData<uint16_t> resoltypes
+ , size_t decision_level
+ , size_t trail_depth
+ , uint64_t conflicts_this_restart
+ , const std::string& rest_type
+ , const SearchHist& hist
+ , const double last_dec_var_act_0
+ , const double last_dec_var_act_1
+ , const double first_dec_var_act_0
+ , const double first_dec_var_act_1
+ ) = 0;
+
+ virtual bool setup(const Solver* solver) = 0;
+ virtual void finishup(lbool status) = 0;
+ uint64_t get_runID() const
+ {
+ return runID;
+ }
+ virtual void add_tag(const std::pair<std::string, std::string>& tag) = 0;
+
+protected:
+
+ void getRandomID();
+ unsigned long runID;
+};
+
+} //end namespace
+
+#endif //__SQLSTATS_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp b/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
new file mode 100644
index 000000000..4cb9babb2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/stamp.cpp
@@ -0,0 +1,211 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "stamp.h"
+#include "varupdatehelper.h"
+
+using namespace CMSat;
+
+void Stamp::save_on_var_memory(const uint32_t newNumVars)
+{
+ tstamp.resize(newNumVars*2);
+ tstamp.shrink_to_fit();
+}
+
+bool Stamp::stampBasedClRem(
+ const vector<Lit>& lits
+) const {
+ StampSorter sortNorm(tstamp, STAMP_IRRED, false);
+ StampSorterInv sortInv(tstamp, STAMP_IRRED, false);
+
+ stampNorm = lits;
+ stampInv = lits;
+
+ std::sort(stampNorm.begin(), stampNorm.end(), sortNorm);
+ std::sort(stampInv.begin(), stampInv.end(), sortInv);
+
+ #ifdef DEBUG_STAMPING
+ cout << "NORM sorted clause: " << stampNorm << endl;
+ cout << "Timestamps: ";
+ for(Lit l: stampNorm) {
+ cout
+ << " " << tstamp[l.toInt()].start[STAMP_IRRED]
+ << "," << tstamp[l.toInt()].end[STAMP_IRRED];
+ }
+ cout << endl;
+
+ cout << "INV sorted clause: " << stampInv << endl;
+ cout << "Timestamps: ";
+ for(Lit l: stampInv) {
+ cout
+ << " " << tstamp[l.toInt()].start[STAMP_IRRED]
+ << "," << tstamp[l.toInt()].end[STAMP_IRRED];
+ }
+ cout << endl;
+ #endif
+
+ assert(lits.size() > 0);
+ vector<Lit>::const_iterator lpos = stampNorm.begin();
+ vector<Lit>::const_iterator lneg = stampInv.begin();
+
+ while(true) {
+ if (tstamp[(~*lneg).toInt()].start[STAMP_IRRED]
+ >= tstamp[lpos->toInt()].start[STAMP_IRRED]
+ ) {
+ lpos++;
+
+ if (lpos == stampNorm.end())
+ return false;
+ } else if (tstamp[(~*lneg).toInt()].end[STAMP_IRRED]
+ <= tstamp[lpos->toInt()].end[STAMP_IRRED]
+ ) {
+ lneg++;
+
+ if (lneg == stampInv.end())
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ assert(false);
+}
+
+void Stamp::updateVars(
+ const vector<uint32_t>& /*outerToInter*/
+ , const vector<uint32_t>& interToOuter2
+ , vector<uint16_t>& seen
+) {
+ //Update the stamp. Stamp can be very large, so update by swapping
+ updateBySwap(tstamp, seen, interToOuter2);
+}
+
+std::pair<size_t, size_t> Stamp::stampBasedLitRem(
+ vector<Lit>& lits
+ , StampType stampType
+) const {
+ size_t remLitTimeStamp = 0;
+ StampSorter sorter(tstamp, stampType, true);
+
+ #ifdef DEBUG_STAMPING
+ cout << "Ori clause: " << lits << endl;
+ #endif
+
+ std::sort(lits.begin(), lits.end(), sorter);
+
+ #ifdef DEBUG_STAMPING
+ cout << "sorted clause: " << lits << endl;
+ cout << "Timestamps: ";
+ for(size_t i = 0; i < lits.size(); i++) {
+ cout
+ << " " << tstamp[lits[i].toInt()].start[stampType]
+ << "," << tstamp[lits[i].toInt()].end[stampType];
+ }
+ cout << endl;
+ #endif
+
+ assert(!lits.empty());
+ Lit lastLit = lits[0];
+ for(size_t i = 1; i < lits.size(); i++) {
+ if (tstamp[lastLit.toInt()].end[stampType]
+ < tstamp[lits[i].toInt()].end[stampType]
+ ) {
+ lits[i] = lit_Undef;
+ remLitTimeStamp++;
+ } else {
+ lastLit = lits[i];
+ }
+ }
+
+ if (remLitTimeStamp) {
+ //First literal cannot be removed
+ assert(lits.front() != lit_Undef);
+
+ //At least 1 literal must remain
+ assert(remLitTimeStamp < lits.size());
+
+ //Remove lit_Undef-s
+ size_t at = 0;
+ for(size_t i = 0; i < lits.size(); i++) {
+ if (lits[i] != lit_Undef) {
+ lits[at++] = lits[i];
+ }
+ }
+ lits.resize(lits.size()-remLitTimeStamp);
+
+ #ifdef DEBUG_STAMPING
+ cout << "New clause: " << lits << endl;
+ #endif
+ }
+
+ size_t remLitTimeStampInv = 0;
+ StampSorterInv sorterInv(tstamp, stampType, false);
+ std::sort(lits.begin(), lits.end(), sorterInv);
+ assert(!lits.empty());
+ lastLit = lits[0];
+
+ for(size_t i = 1; i < lits.size(); i++) {
+ if (tstamp[(~lastLit).toInt()].end[stampType]
+ > tstamp[(~lits[i]).toInt()].end[stampType]
+ ) {
+ lits[i] = lit_Undef;
+ remLitTimeStampInv++;
+ } else {
+ lastLit = lits[i];
+ }
+ }
+
+ if (remLitTimeStampInv) {
+ //First literal cannot be removed
+ assert(lits.front() != lit_Undef);
+
+ //At least 1 literal must remain
+ assert(remLitTimeStampInv < lits.size());
+
+ //Remove lit_Undef-s
+ size_t at = 0;
+ for(size_t i = 0; i < lits.size(); i++) {
+ if (lits[i] != lit_Undef) {
+ lits[at++] = lits[i];
+ }
+ }
+ lits.resize(lits.size()-remLitTimeStampInv);
+
+ #ifdef DEBUG_STAMPING
+ cout << "New clause: " << lits << endl;
+ #endif
+ }
+
+
+ return std::make_pair(remLitTimeStamp, remLitTimeStampInv);
+}
+
+void Stamp::clearStamps()
+{
+ for(vector<Timestamp>::iterator
+ it = tstamp.begin(), end = tstamp.end()
+ ; it != end
+ ; ++it
+ ) {
+ *it = Timestamp();
+ }
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/stamp.h b/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
new file mode 100644
index 000000000..3f89aa012
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/stamp.h
@@ -0,0 +1,157 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __STAMP_H__
+#define __STAMP_H__
+
+#include <vector>
+#include <algorithm>
+#include "solvertypes.h"
+#include "clause.h"
+#include "constants.h"
+
+namespace CMSat {
+
+using std::vector;
+
+enum StampType {
+ STAMP_IRRED = 0
+ , STAMP_RED = 1
+};
+
+struct Timestamp
+{
+ Timestamp()
+ {
+ start[STAMP_IRRED] = 0;
+ start[STAMP_RED] = 0;
+
+ end[STAMP_IRRED] = 0;
+ end[STAMP_RED] = 0;
+ }
+
+ uint64_t start[2];
+ uint64_t end[2];
+};
+
+class Stamp
+{
+public:
+ bool stampBasedClRem(const vector<Lit>& lits) const;
+ std::pair<size_t, size_t> stampBasedLitRem(
+ vector<Lit>& lits
+ , StampType stampType
+ ) const;
+ void updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter2
+ , vector<uint16_t>& seen
+ );
+ void clearStamps();
+ void save_on_var_memory(const uint32_t newNumVars);
+
+ uint64_t stampingTime = 0;
+ vector<Timestamp> tstamp;
+ void new_var()
+ {
+ tstamp.push_back(Timestamp());
+ tstamp.push_back(Timestamp());
+ }
+ void new_vars(const size_t n)
+ {
+ tstamp.insert(tstamp.end(), 2*n, Timestamp());
+ }
+ size_t mem_used() const
+ {
+ return tstamp.capacity()*sizeof(Timestamp);
+ }
+
+ void freeMem()
+ {
+ vector<Timestamp> tmp;
+ tstamp.swap(tmp);
+ }
+
+private:
+ struct StampSorter
+ {
+ StampSorter(
+ const vector<Timestamp>& _timestamp
+ , const StampType _stampType
+ , const bool _rev
+ ) :
+ timestamp(_timestamp)
+ , stampType(_stampType)
+ , rev(_rev)
+ {}
+
+ const vector<Timestamp>& timestamp;
+ const StampType stampType;
+ const bool rev;
+
+ bool operator()(const Lit lit1, const Lit lit2) const
+ {
+ if (!rev) {
+ return timestamp[lit1.toInt()].start[stampType]
+ < timestamp[lit2.toInt()].start[stampType];
+ } else {
+ return timestamp[lit1.toInt()].start[stampType]
+ > timestamp[lit2.toInt()].start[stampType];
+ }
+ }
+ };
+
+ struct StampSorterInv
+ {
+ StampSorterInv(
+ const vector<Timestamp>& _timestamp
+ , const StampType _stampType
+ , const bool _rev
+ ) :
+ timestamp(_timestamp)
+ , stampType(_stampType)
+ , rev(_rev)
+ {}
+
+ const vector<Timestamp>& timestamp;
+ const StampType stampType;
+ const bool rev;
+
+ bool operator()(const Lit lit1, const Lit lit2) const
+ {
+ if (!rev) {
+ return timestamp[(~lit1).toInt()].start[stampType]
+ < timestamp[(~lit2).toInt()].start[stampType];
+ } else {
+ return timestamp[(~lit1).toInt()].start[stampType]
+ > timestamp[(~lit2).toInt()].start[stampType];
+ }
+ }
+ };
+
+ mutable vector<Lit> stampNorm;
+ mutable vector<Lit> stampInv;
+};
+
+} //end namespace
+
+#endif //__STAMP_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp b/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
new file mode 100644
index 000000000..fee6683d9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.cpp
@@ -0,0 +1,239 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "str_impl_w_impl_stamp.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+
+using namespace CMSat;
+
+bool StrImplWImplStamp::str_impl_w_impl_stamp()
+{
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_stats();
+ #endif
+
+ str_impl_data.clear();
+
+ const size_t origTrailSize = solver->trail_size();
+ timeAvailable =
+ solver->conf.distill_implicit_with_implicit_time_limitM*1000LL*1000LL
+ *solver->conf.global_timeout_multiplier;
+ const int64_t orig_time = timeAvailable;
+ double myTime = cpuTime();
+
+ //Cannot handle empty
+ if (solver->watches.size() == 0)
+ return solver->okay();
+
+ //Randomize starting point
+ size_t upI = solver->mtrand.randInt(solver->watches.size()-1);
+ size_t numDone = 0;
+ for (; numDone < solver->watches.size() && timeAvailable > 0
+ ; upI = (upI +1) % solver->watches.size(), numDone++
+
+ ) {
+ str_impl_data.numWatchesLooked++;
+ const Lit lit = Lit::toLit(upI);
+ distill_implicit_with_implicit_lit(lit);
+ }
+
+ //Enqueue delayed values
+ if (!solver->fully_enqueue_these(str_impl_data.toEnqueue))
+ goto end;
+
+ //Add delayed binary clauses
+ for(const BinaryClause& bin: str_impl_data.binsToAdd) {
+ lits.clear();
+ lits.push_back(bin.getLit1());
+ lits.push_back(bin.getLit2());
+ timeAvailable -= 5;
+ solver->add_clause_int(lits, bin.isRed());
+ if (!solver->okay())
+ goto end;
+ }
+
+end:
+
+ if (solver->conf.verbosity) {
+ str_impl_data.print(
+ solver->trail_size() - origTrailSize
+ , cpuTime() - myTime
+ , timeAvailable
+ , orig_time
+ , solver
+ );
+ }
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_stats();
+ #endif
+
+ return solver->okay();
+}
+
+void StrImplWImplStamp::distill_implicit_with_implicit_lit(const Lit lit)
+{
+ watch_subarray ws = solver->watches[lit];
+
+ Watched* i = ws.begin();
+ Watched* j = i;
+ for (const Watched* end = ws.end()
+ ; i != end
+ ; i++
+ ) {
+ timeAvailable -= 2;
+ if (timeAvailable < 0) {
+ *j++ = *i;
+ continue;
+ }
+
+ switch(i->getType()) {
+ case CMSat::watch_clause_t:
+ *j++ = *i;
+ break;
+
+ case CMSat::watch_binary_t:
+ timeAvailable -= 20;
+ strengthen_bin_with_bin(lit, i, j, end);
+ break;
+
+ default:
+ assert(false);
+ break;
+ }
+ }
+ ws.shrink(i-j);
+}
+
+void StrImplWImplStamp::strengthen_bin_with_bin(
+ const Lit lit
+ , Watched* i
+ , Watched*& j
+ , const Watched* end
+) {
+ lits.clear();
+ lits.push_back(lit);
+ lits.push_back(i->lit2());
+ if (solver->conf.doStamp) {
+ timeAvailable -= 10;
+ std::pair<size_t, size_t> tmp = solver->stamp.stampBasedLitRem(lits, STAMP_RED);
+ str_impl_data.stampRem += tmp.first;
+ str_impl_data.stampRem += tmp.second;
+ assert(!lits.empty());
+ if (lits.size() == 1) {
+ str_impl_data.toEnqueue.push_back(lits[0]);
+ (*solver->drat) << add << lits[0]
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ str_impl_data.remLitFromBin++;
+ str_impl_data.stampRem++;
+ *j++ = *i;
+ return;
+ }
+ }
+
+ //If inverted, then the inverse will never be found, because
+ //watches are sorted
+ if (i->lit2().sign()) {
+ *j++ = *i;
+ return;
+ }
+
+ //Try to look for a binary in this same watchlist
+ //that has ~i->lit2() inside. Everything is sorted, so we are
+ //lucky, this is speedy
+ bool rem = false;
+ const Watched* i2 = i;
+ while(i2 != end
+ && i2->isBin()
+ && i->lit2().var() == i2->lit2().var()
+ ) {
+ timeAvailable -= 2;
+ //Yay, we have found what we needed!
+ if (i2->lit2() == ~i->lit2()) {
+ rem = true;
+ break;
+ }
+
+ i2++;
+ }
+
+ //Enqeue literal
+ if (rem) {
+ str_impl_data.remLitFromBin++;
+ str_impl_data.toEnqueue.push_back(lit);
+ (*solver->drat) << add << lit
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ }
+ *j++ = *i;
+}
+
+void StrImplWImplStamp::StrImplicitData::print(
+ const size_t trail_diff
+ , const double time_used
+ , const int64_t timeAvailable
+ , const int64_t orig_time
+ , Solver* _solver
+) const {
+ bool time_out = timeAvailable <= 0;
+ const double time_remain = float_div(timeAvailable, orig_time);
+
+ cout
+ << "c [impl str]"
+ << " lit bin: " << remLitFromBin
+ << " (by stamp: " << stampRem << ")"
+ << " set-var: " << trail_diff
+ << _solver->conf.print_times(time_used, time_out, time_remain)
+ << " w-visit: " << numWatchesLooked
+ << endl;
+
+ if (_solver->sqlStats) {
+ _solver->sqlStats->time_passed(
+ _solver
+ , "implicit str"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+}
+
+double StrImplWImplStamp::mem_used() const
+{
+ double mem = sizeof(StrImplWImplStamp);
+ mem += lits.size()*sizeof(Lit);
+
+ return mem;
+
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h b/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
new file mode 100644
index 000000000..9fdf0ee84
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/str_impl_w_impl_stamp.h
@@ -0,0 +1,93 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __DISTILLER_IMPL_WITH_IMP__
+#define __DISTILLER_IMPL_WITH_IMP__
+
+#include <vector>
+#include "clause.h"
+#include "constants.h"
+#include "solvertypes.h"
+#include "cloffset.h"
+#include "watcharray.h"
+using std::vector;
+
+namespace CMSat {
+
+class Solver;
+class Clause;
+
+class StrImplWImplStamp {
+public:
+ explicit StrImplWImplStamp(Solver* _solver) :
+ solver(_solver)
+ {}
+
+ bool str_impl_w_impl_stamp();
+ double mem_used() const;
+
+private:
+ Solver* solver;
+ void distill_implicit_with_implicit_lit(const Lit lit);
+
+ void strengthen_bin_with_bin(
+ const Lit lit
+ , Watched* i
+ , Watched*& j
+ , const Watched* end
+ );
+
+ //Vars for strengthen implicit
+ struct StrImplicitData
+ {
+ uint64_t remLitFromBin = 0;
+ uint64_t stampRem = 0;
+
+ uint64_t numWatchesLooked = 0;
+
+ //For delayed enqueue and binary adding
+ //Used for strengthening
+ vector<Lit> toEnqueue;
+ vector<BinaryClause> binsToAdd;
+
+ void clear()
+ {
+ StrImplicitData tmp;
+ *this = tmp;
+ }
+
+ void print(
+ const size_t trail_diff
+ , const double time_used
+ , const int64_t timeAvailable
+ , const int64_t orig_time
+ , Solver* solver
+ ) const;
+ };
+ StrImplicitData str_impl_data;
+ int64_t timeAvailable;
+ vector<Lit> lits;
+};
+
+}
+
+#endif // __DISTILLER_IMPL_WITH_IMP__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h b/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
new file mode 100644
index 000000000..6b4fea34e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/streambuffer.h
@@ -0,0 +1,208 @@
+/*******************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*******************************************************************************/
+
+#ifndef STREAMBUFFER_H
+#define STREAMBUFFER_H
+
+static const unsigned chunk_limit = 148576;
+
+#include <stdio.h>
+#include <iostream>
+#include <iomanip>
+#include <limits>
+#include <string>
+#include <memory>
+
+#ifdef USE_ZLIB
+#include <zlib.h>
+struct GZ {
+ static inline int read(void* buf, size_t num, size_t count, gzFile f)
+ {
+ return gzread(f, buf, num*count);
+ }
+};
+#endif
+
+struct FN {
+ static inline int read(void* buf, size_t num, size_t count, FILE* f)
+ {
+ return fread(buf, num, count, f);
+ }
+};
+
+struct CH {
+ static inline int read(void* buf, size_t num, size_t count, const char*& f)
+ {
+ int toread = num*count;
+ char* mybuf = (char*)buf;
+
+ int read = 0;
+ while(*f != 0 && read < toread) {
+ *mybuf = *f;
+ mybuf++;
+ f++;
+ read++;
+ }
+ return read;
+ }
+};
+
+template<typename A, typename B>
+class StreamBuffer
+{
+ A in;
+ void assureLookahead() {
+ if (pos >= size) {
+ pos = 0;
+ size = B::read(buf.get(), 1, chunk_limit, in);
+ }
+ }
+ int pos;
+ int size;
+ std::unique_ptr<char[]> buf;
+
+ void advance()
+ {
+ operator++();
+ }
+ int value()
+ {
+ return operator*();
+ }
+
+public:
+ StreamBuffer(A i) :
+ in(i)
+ , pos(0)
+ , size(0)
+ , buf(new char[chunk_limit]())
+ {
+ assureLookahead();
+ }
+
+ int operator * () {
+ return (pos >= size) ? EOF : buf[pos];
+ }
+ void operator ++ () {
+ pos++;
+ assureLookahead();
+ }
+
+ void skipWhitespace()
+ {
+ char c = value();
+ while (c == '\t' || c == '\r' || c == ' ') {
+ advance();
+ c = value();
+ }
+ }
+
+ void skipLine()
+ {
+ for (;;) {
+ if (value() == EOF || value() == '\0') return;
+ if (value() == '\n') {
+ advance();
+ return;
+ }
+ advance();
+ }
+ }
+
+ bool skipEOL(const size_t lineNum)
+ {
+ for (;;) {
+ if (value() == EOF || value() == '\0') return true;
+ if (value() == '\n') {
+ advance();
+ return true;
+ }
+ if (value() != '\r') {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (hex: " << std::hex
+ << std::setw(2)
+ << std::setfill('0')
+ << "0x" << value()
+ << std::setfill(' ')
+ << std::dec
+ << ")"
+ << " At line " << lineNum+1
+ << " we expected an end of line character (\\n or \\r + \\n)"
+ << std::endl;
+ return false;
+ }
+ advance();
+ }
+ exit(-1);
+ }
+
+ inline bool parseInt(int32_t& ret, size_t lineNum, bool allow_eol = false)
+ {
+ int32_t val = 0;
+ int32_t mult = 1;
+ skipWhitespace();
+ if (value() == '-') {
+ mult = -1;
+ advance();
+ } else if (value() == '+') {
+ advance();
+ }
+
+ char c = value();
+ if (allow_eol && c == '\n') {
+ ret = std::numeric_limits<int32_t>::max();
+ return true;
+ }
+ if (c < '0' || c > '9') {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (dec: '" << c << ")"
+ << " At line " << lineNum
+ << " we expected a number"
+ << std::endl;
+ return false;
+ }
+
+ while (c >= '0' && c <= '9') {
+ int32_t val2 = val*10 + (c - '0');
+ if (val2 < val) {
+ std::cerr << "PARSE ERROR! At line " << lineNum
+ << " the variable number is to high"
+ << std::endl;
+ return false;
+ }
+ val = val2;
+ advance();
+ c = value();
+ }
+ ret = mult*val;
+ return true;
+ }
+
+ void parseString(std::string& str)
+ {
+ str.clear();
+ skipWhitespace();
+ while (value() != ' ' && value() != '\n' && value() != EOF) {
+ str.push_back(value());
+ advance();
+ }
+ }
+};
+
+#endif //STREAMBUFFER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp b/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
new file mode 100644
index 000000000..19de7c971
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
@@ -0,0 +1,228 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "subsumeimplicit.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+
+#include <cmath>
+#include <iomanip>
+using std::cout;
+using std::endl;
+using namespace CMSat;
+
+SubsumeImplicit::SubsumeImplicit(Solver* _solver) :
+ solver(_solver)
+{
+}
+
+void SubsumeImplicit::try_subsume_bin(
+ const Lit lit
+ , Watched* i
+ , Watched*& j
+ , int64_t *timeAvail
+ , TouchList* touched
+) {
+ //Subsume bin with bin
+ if (i->lit2() == lastLit2) {
+ //The sorting algorithm prefers irred to red, so it is
+ //impossible to have irred before red
+ assert(!(i->red() == false && lastRed == true));
+
+ runStats.remBins++;
+ assert(i->lit2().var() != lit.var());
+ *timeAvail -= 30;
+ *timeAvail -= solver->watches[i->lit2()].size();
+ removeWBin(solver->watches, i->lit2(), lit, i->red());
+ if (touched) {
+ touched->touch(i->lit2());
+ }
+ if (i->red()) {
+ solver->binTri.redBins--;
+ } else {
+ solver->binTri.irredBins--;
+ }
+ (*solver->drat) << del << lit << i->lit2() << fin;
+
+ return;
+ } else {
+ lastBin = j;
+ lastLit2 = i->lit2();
+ lastRed = i->red();
+ *j++ = *i;
+ }
+}
+
+uint32_t SubsumeImplicit::subsume_at_watch(const uint32_t at,
+ int64_t* timeAvail,
+ TouchList* touched)
+{
+ runStats.numWatchesLooked++;
+ const Lit lit = Lit::toLit(at);
+ watch_subarray ws = solver->watches[lit];
+
+ if (ws.size() > 1) {
+ *timeAvail -= (int64_t)(ws.size()*std::ceil(std::log((double)ws.size())) + 20);
+ std::sort(ws.begin(), ws.end(), WatchSorterBinTriLong());
+ }
+ /*cout << "---> Before" << endl;
+ print_watch_list(ws, lit);*/
+
+ Watched* i = ws.begin();
+ Watched* j = i;
+ clear();
+
+ for (Watched* end = ws.end(); i != end; i++) {
+ if (*timeAvail < 0) {
+ *j++ = *i;
+ continue;
+ }
+
+ switch(i->getType()) {
+ case CMSat::watch_clause_t:
+ *j++ = *i;
+ break;
+
+ case CMSat::watch_binary_t:
+ try_subsume_bin(lit, i, j, timeAvail, touched);
+ break;
+
+ default:
+ assert(false);
+ break;
+ }
+ }
+ ws.shrink(i-j);
+ return i-j;
+}
+
+void SubsumeImplicit::subsume_implicit(const bool check_stats)
+{
+ assert(solver->okay());
+ const double myTime = cpuTime();
+ const uint64_t orig_timeAvailable =
+ 1000LL*1000LL*solver->conf.subsume_implicit_time_limitM
+ *solver->conf.global_timeout_multiplier;
+ timeAvailable = orig_timeAvailable;
+ runStats.clear();
+
+ //For randomization, we must have at least 1
+ if (solver->watches.size() == 0) {
+ return;
+ }
+
+ //Randomize starting point
+ const size_t rnd_start = solver->mtrand.randInt(solver->watches.size()-1);
+ size_t numDone = 0;
+ for (;numDone < solver->watches.size() && timeAvailable > 0 && !solver->must_interrupt_asap()
+ ;numDone++
+ ) {
+ const size_t at = (rnd_start + numDone) % solver->watches.size();
+ subsume_at_watch(at, &timeAvailable);
+ }
+
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (timeAvailable <= 0);
+ const double time_remain = float_div(timeAvailable, orig_timeAvailable);
+ runStats.numCalled++;
+ runStats.time_used += time_used;
+ runStats.time_out += time_out;
+ if (solver->conf.verbosity) {
+ runStats.print_short(solver);
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "subsume implicit"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ if (check_stats) {
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_stats();
+ #endif
+ }
+
+ globalStats += runStats;
+}
+
+SubsumeImplicit::Stats SubsumeImplicit::Stats::operator+=(const SubsumeImplicit::Stats& other)
+{
+ numCalled+= other.numCalled;
+ time_out += other.time_out;
+ time_used += other.time_used;
+ remBins += other.remBins;
+ numWatchesLooked += other.numWatchesLooked;
+
+ return *this;
+}
+
+void SubsumeImplicit::Stats::print_short(const Solver* _solver) const
+{
+ cout
+ << "c [impl sub]"
+ << " bin: " << remBins
+ << _solver->conf.print_times(time_used, time_out)
+ << " w-visit: " << numWatchesLooked
+ << endl;
+}
+
+void SubsumeImplicit::Stats::print() const
+{
+ cout << "c -------- IMPLICIT SUB STATS --------" << endl;
+ print_stats_line("c time"
+ , time_used
+ , float_div(time_used, numCalled)
+ , "per call"
+ );
+
+ print_stats_line("c timed out"
+ , time_out
+ , stats_line_percent(time_out, numCalled)
+ , "% of calls"
+ );
+
+ print_stats_line("c rem bins"
+ , remBins
+ );
+ cout << "c -------- IMPLICIT SUB STATS END --------" << endl;
+}
+
+SubsumeImplicit::Stats SubsumeImplicit::get_stats() const
+{
+ return globalStats;
+}
+
+double SubsumeImplicit::mem_used() const
+{
+ double mem = sizeof(SubsumeImplicit);
+ mem += tmplits.size()*sizeof(Lit);
+
+ return mem;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h b/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
new file mode 100644
index 000000000..de57cf6af
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.h
@@ -0,0 +1,98 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef SUBSUMEIMPLICIT_H
+#define SUBSUMEIMPLICIT_H
+
+#include <vector>
+#include "clause.h"
+#include "constants.h"
+#include "solvertypes.h"
+#include "cloffset.h"
+#include "watcharray.h"
+#include "touchlist.h"
+
+namespace CMSat {
+
+using std::vector;
+
+class Solver;
+class Clause;
+
+class SubsumeImplicit
+{
+public:
+ explicit SubsumeImplicit(Solver* solver);
+ void subsume_implicit(bool check_stats = true);
+ uint32_t subsume_at_watch(const uint32_t at,
+ int64_t *timeAvail,
+ TouchList* touched = NULL);
+
+ struct Stats {
+ void clear()
+ {
+ *this = Stats();
+ }
+ Stats operator+=(const Stats& other);
+ void print_short(const Solver* solver) const;
+ void print() const;
+
+ double time_used = 0.0;
+ uint64_t numCalled = 0;
+ uint64_t time_out = 0;
+ uint64_t remBins = 0;
+ uint64_t numWatchesLooked = 0;
+ };
+ Stats get_stats() const;
+ double mem_used() const;
+
+private:
+ Solver* solver;
+ int64_t timeAvailable;
+
+ Lit lastLit2;
+ Watched* lastBin;
+ bool lastRed;
+ vector<Lit> tmplits;
+ Stats runStats;
+ Stats globalStats;
+
+ void clear()
+ {
+ lastLit2 = lit_Undef;
+ lastBin = NULL;
+ lastRed = false;
+ }
+
+ //ImplSubsumeData impl_subs_dat;
+ void try_subsume_bin(
+ const Lit lit
+ , Watched* i
+ , Watched*& j
+ , int64_t* timeAvail
+ , TouchList* touched = NULL
+ );
+};
+
+} //end namespace
+
+#endif //SUBSUMEIMPLICIT_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp b/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
new file mode 100644
index 000000000..09705442a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.cpp
@@ -0,0 +1,1030 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "subsumestrengthen.h"
+#include "occsimplifier.h"
+#include "solver.h"
+#include "watchalgos.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+#include "solver.h"
+#include "solvertypes.h"
+#include "subsumeimplicit.h"
+#include <array>
+
+//#define VERBOSE_DEBUG
+
+using namespace CMSat;
+
+SubsumeStrengthen::SubsumeStrengthen(
+ OccSimplifier* _simplifier
+ , Solver* _solver
+) :
+ simplifier(_simplifier)
+ , solver(_solver)
+{
+}
+
+uint32_t SubsumeStrengthen::subsume_and_unlink_and_markirred(const ClOffset offset)
+{
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ assert(!cl.getRemoved());
+ assert(!cl.freed());
+
+ #ifdef VERBOSE_DEBUG
+ cout << "subsume-ing with clause: " << cl << endl;
+ #endif
+
+ Sub0Ret ret = subsume_and_unlink(
+ offset
+ , cl
+ , cl.abst
+ );
+
+ //If irred is subsumed by redundant, make the redundant into irred
+ if (cl.red()
+ && ret.subsumedIrred
+ ) {
+ cl.makeIrred();
+ solver->litStats.redLits -= cl.size();
+ solver->litStats.irredLits += cl.size();
+ if (!cl.getOccurLinked()) {
+ simplifier->linkInClause(cl);
+ } else {
+ for(const Lit l: cl) {
+ simplifier->n_occurs[l.toInt()]++;
+ }
+ }
+ }
+
+ //Combine stats
+ cl.combineStats(ret.stats);
+
+ return ret.numSubsumed;
+}
+template SubsumeStrengthen::Sub0Ret SubsumeStrengthen::subsume_and_unlink(
+ const ClOffset offset
+ , const vector<Lit>& ps
+ , const cl_abst_type abs
+ , const bool removeImplicit
+);
+
+uint32_t SubsumeStrengthen::backw_sub_long_with_implicit(
+ const vector<Lit>& lits
+) {
+ Sub0Ret ret = subsume_and_unlink(
+ CL_OFFSET_MAX
+ , lits
+ , calcAbstraction(lits)
+ , false
+ );
+ return ret.numSubsumed;
+}
+
+/**
+@brief Backward-subsumption using given clause
+*/
+template<class T>
+SubsumeStrengthen::Sub0Ret SubsumeStrengthen::subsume_and_unlink(
+ const ClOffset offset
+ , const T& ps
+ , const cl_abst_type abs
+ , const bool removeImplicit
+) {
+ Sub0Ret ret;
+
+ subs.clear();
+ find_subsumed(offset, ps, abs, subs, removeImplicit);
+
+ //Go through each clause that can be subsumed
+ for (const ClOffset offs: subs) {
+ Clause *tmp = solver->cl_alloc.ptr(offs);
+ ret.stats = ClauseStats::combineStats(tmp->stats, ret.stats);
+ #ifdef VERBOSE_DEBUG
+ cout << "-> subsume removing:" << *tmp << endl;
+ #endif
+
+ if (!tmp->red()) {
+ ret.subsumedIrred = true;
+ }
+
+ simplifier->unlink_clause(offs, true, false, true);
+ ret.numSubsumed++;
+
+ //If we are waaay over time, just exit
+ if (*simplifier->limit_to_decrease < -20LL*1000LL*1000LL)
+ break;
+ }
+
+ return ret;
+}
+
+SubsumeStrengthen::Sub1Ret SubsumeStrengthen::strengthen_subsume_and_unlink_and_markirred(const ClOffset offset)
+{
+ subs.clear();
+ subsLits.clear();
+ Sub1Ret ret;
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ assert(!cl.getRemoved());
+ assert(!cl.freed());
+
+ if (solver->conf.verbosity >= 6)
+ cout << "strengthen_subsume_and_unlink_and_markirred-ing with clause:" << cl << endl;
+
+ findStrengthened(
+ offset
+ , cl
+ , cl.abst
+ , subs
+ , subsLits
+ );
+
+ for (size_t j = 0
+ ; j < subs.size() && solver->okay()
+ ; j++
+ ) {
+ ClOffset offset2 = subs[j];
+ Clause& cl2 = *solver->cl_alloc.ptr(offset2);
+ #ifdef USE_GAUSS
+ if (cl2.used_in_xor()) {
+ continue;
+ }
+ #endif
+
+ if (subsLits[j] == lit_Undef) { //Subsume
+ #ifdef VERBOSE_DEBUG
+ if (solver->conf.verbosity >= 6)
+ cout << "subsumed clause " << cl2 << endl;
+ #endif
+
+ //If subsumes a irred, and is redundant, make it irred
+ if (cl.red()
+ && !cl2.red()
+ ) {
+ cl.makeIrred();
+ solver->litStats.redLits -= cl.size();
+ solver->litStats.irredLits += cl.size();
+ if (!cl.getOccurLinked()) {
+ simplifier->linkInClause(cl);
+ } else {
+ for(const Lit l: cl) {
+ simplifier->n_occurs[l.toInt()]++;
+ }
+ }
+ }
+
+ //Update stats
+ cl.combineStats(cl2.stats);
+
+ simplifier->unlink_clause(offset2, true, false, true);
+ ret.sub++;
+ } else { //Strengthen
+ #ifdef VERBOSE_DEBUG
+ if (solver->conf.verbosity >= 6) {
+ cout << "strenghtened clause " << cl2 << endl;
+ }
+ #endif
+ #ifdef USE_GAUSS
+ if (cl2.used_in_xor()) {
+ continue;
+ }
+ #endif
+ remove_literal(offset2, subsLits[j]);
+
+ ret.str++;
+ if (!solver->ok)
+ return ret;
+
+ //If we are waaay over time, just exit
+ if (*simplifier->limit_to_decrease < -20LL*1000LL*1000LL)
+ break;
+ }
+ }
+
+ return ret;
+}
+
+void SubsumeStrengthen::randomise_clauses_order()
+{
+ const size_t sz = simplifier->clauses.size();
+ for (size_t i = 0
+ ; i + 1 < sz
+ ; i++
+ ) {
+ std::swap(
+ simplifier->clauses[i]
+ , simplifier->clauses[i+solver->mtrand.randInt(simplifier->clauses.size()-1-i)]
+ );
+ }
+}
+
+void SubsumeStrengthen::backw_sub_long_with_long()
+{
+ //If clauses are empty, the system below segfaults
+ if (simplifier->clauses.empty())
+ return;
+
+ double myTime = cpuTime();
+ size_t wenThrough = 0;
+ size_t subsumed = 0;
+ const int64_t orig_limit = simplifier->subsumption_time_limit;
+ randomise_clauses_order();
+ while (*simplifier->limit_to_decrease > 0
+ && (double)wenThrough < solver->conf.subsume_gothrough_multip*(double)simplifier->clauses.size()
+ ) {
+ *simplifier->limit_to_decrease -= 3;
+ wenThrough++;
+
+ //Print status
+ if (solver->conf.verbosity >= 5
+ && wenThrough % 10000 == 0
+ ) {
+ cout << "toDecrease: " << *simplifier->limit_to_decrease << endl;
+ }
+
+ const size_t at = wenThrough % simplifier->clauses.size();
+ const ClOffset offset = simplifier->clauses[at];
+ Clause* cl = solver->cl_alloc.ptr(offset);
+
+ //Has already been removed
+ if (cl->freed() || cl->getRemoved())
+ continue;
+
+
+ *simplifier->limit_to_decrease -= 10;
+ subsumed += subsume_and_unlink_and_markirred(offset);
+ }
+
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = (*simplifier->limit_to_decrease <= 0);
+ const double time_remain = float_div(*simplifier->limit_to_decrease, orig_limit);
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ-sub-long-w-long] rem cl: " << subsumed
+ << " tried: " << wenThrough << "/" << simplifier->clauses.size()
+ << " (" << std::setprecision(1) << std::fixed
+ << stats_line_percent(wenThrough, simplifier->clauses.size())
+ << "%)"
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "occ-sub-long-w-long"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ //Update time used
+ runStats.subsumedBySub += subsumed;
+ runStats.subsumeTime += cpuTime() - myTime;
+}
+
+bool SubsumeStrengthen::backw_str_long_with_long()
+{
+ assert(solver->ok);
+
+ double myTime = cpuTime();
+ size_t wenThrough = 0;
+ const int64_t orig_limit = *simplifier->limit_to_decrease;
+ Sub1Ret ret;
+
+ randomise_clauses_order();
+ while(*simplifier->limit_to_decrease > 0
+ && wenThrough < 1.5*(double)2*simplifier->clauses.size()
+ && solver->okay()
+ ) {
+ *simplifier->limit_to_decrease -= 10;
+ wenThrough++;
+
+ //Print status
+ if (solver->conf.verbosity >= 5
+ && wenThrough % 10000 == 0
+ ) {
+ cout << "toDecrease: " << *simplifier->limit_to_decrease << endl;
+ }
+
+ const size_t at = wenThrough % simplifier->clauses.size();
+ ClOffset offset = simplifier->clauses[at];
+ Clause* cl = solver->cl_alloc.ptr(offset);
+
+ //Has already been removed
+ if (cl->freed() || cl->getRemoved())
+ continue;
+
+ ret += strengthen_subsume_and_unlink_and_markirred(offset);
+
+ }
+
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = *simplifier->limit_to_decrease <= 0;
+ const double time_remain = float_div(*simplifier->limit_to_decrease, orig_limit);
+
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ-sub-str-long-w-long] sub: " << ret.sub
+ << " str: " << ret.str
+ << " tried: " << wenThrough << "/" << simplifier->clauses.size()
+ << " ("
+ << stats_line_percent(wenThrough, simplifier->clauses.size())
+ << ") "
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "occ-sub-str-long-w-long"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ //Update time used
+ runStats.subsumedByStr += ret.sub;
+ runStats.litsRemStrengthen += ret.str;
+ runStats.strengthenTime += cpuTime() - myTime;
+
+ return solver->okay();
+}
+
+/**
+@brief Helper function for findStrengthened
+
+Used to avoid duplication of code
+*/
+template<class T>
+void inline SubsumeStrengthen::fillSubs(
+ const ClOffset offset
+ , const T& cl
+ , const cl_abst_type abs
+ , vector<ClOffset>& out_subsumed
+ , vector<Lit>& out_lits
+ , const Lit lit
+) {
+ Lit litSub;
+ watch_subarray_const cs = solver->watches[lit];
+ *simplifier->limit_to_decrease -= (long)cs.size()*2+ 40;
+ for (const Watched *it = cs.begin(), *end = cs.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (!it->isClause())
+ continue;
+
+ if (it->get_offset() == offset
+ || !subsetAbst(abs, it->getAbst())
+ ) {
+ continue;
+ }
+
+ ClOffset offset2 = it->get_offset();
+ const Clause& cl2 = *solver->cl_alloc.ptr(offset2);
+ if (cl2.getRemoved()
+ || cl.size() > cl2.size())
+ {
+ continue;
+ }
+
+ *simplifier->limit_to_decrease -= (long)((cl.size() + cl2.size())/4);
+ litSub = subset1(cl, cl2);
+ if (litSub != lit_Error) {
+ out_subsumed.push_back(it->get_offset());
+ out_lits.push_back(litSub);
+
+ #ifdef VERBOSE_DEBUG
+ if (litSub == lit_Undef) cout << "subsume-d: ";
+ else cout << "strengthen_subsume_and_unlink_and_markirred-ed (lit: "
+ << litSub
+ << ") clause offset: "
+ << it->get_offset()
+ << endl;
+ #endif
+ }
+ }
+}
+
+/**
+@brief Checks if clauses are subsumed or could be strenghtened with given clause
+
+Checks if:
+* any clause is subsumed with given clause
+* the given clause could perform self-subsuming resolution on any other clause
+
+@param[in] ps The clause to perform the above listed algos with
+@param[in] abs The abstraction of clause ps
+@param[out] out_subsumed The clauses that could be modified by ps
+@param[out] out_lits Defines HOW these clauses could be modified. By removing
+literal, or by subsumption (in this case, there is lit_Undef here)
+*/
+template<class T>
+void SubsumeStrengthen::findStrengthened(
+ ClOffset offset
+ , const T& cl
+ , const cl_abst_type abs
+ , vector<ClOffset>& out_subsumed
+ , vector<Lit>& out_lits
+)
+{
+ #ifdef VERBOSE_DEBUG
+ cout << "findStrengthened: " << cl << endl;
+ #endif
+
+ uint32_t minVar = var_Undef;
+ uint32_t bestSize = std::numeric_limits<uint32_t>::max();
+ for (uint32_t i = 0; i < cl.size(); i++){
+ uint32_t newSize =
+ solver->watches[cl[i]].size()
+ + solver->watches[~cl[i]].size();
+
+ if (newSize < bestSize) {
+ minVar = cl[i].var();
+ bestSize = newSize;
+ }
+ }
+ assert(minVar != var_Undef);
+ *simplifier->limit_to_decrease -= (long)cl.size();
+
+ fillSubs(offset, cl, abs, out_subsumed, out_lits, Lit(minVar, true));
+ fillSubs(offset, cl, abs, out_subsumed, out_lits, Lit(minVar, false));
+}
+
+bool SubsumeStrengthen::handle_added_long_cl(
+ int64_t* limit_to_decrease, const bool main_run)
+{
+ int64_t orig_limit = *limit_to_decrease;
+ size_t origTrailSize = solver->trail_size();
+ const double start_time = cpuTime();
+ Sub1Ret stat;
+ bool interrupted = false;
+
+ //NOTE added_long_cl CAN CHANGE while the below is running!
+ for(size_t i = 0
+ ; i < simplifier->added_long_cl.size()
+ && *simplifier->limit_to_decrease >= 0
+ ; i++
+ ) {
+ const ClOffset offs = simplifier->added_long_cl[i];
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->freed() || cl->getRemoved())
+ continue;
+
+ cl->stats.marked_clause = 0;
+ auto ret = strengthen_subsume_and_unlink_and_markirred(offs);
+ stat += ret;
+ if (!solver->ok) {
+ goto end;
+ }
+
+ if ((i&0xfff) == 0xfff
+ && solver->must_interrupt_asap()
+ ) {
+ interrupted = true;
+ goto end;
+ }
+ }
+ if (*simplifier->limit_to_decrease < 0) {
+ interrupted = true;
+ }
+
+ end:
+
+ //we still have to clear the marks
+ if (interrupted) {
+ for(const ClOffset offs: simplifier->added_long_cl) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ if (cl->freed() || cl->getRemoved())
+ continue;
+
+ cl->stats.marked_clause = 0;
+ }
+ }
+
+ if (main_run) {
+ const bool time_out = *limit_to_decrease <= 0;
+ const double time_used = cpuTime() - start_time;
+ const double time_remain = float_div(*limit_to_decrease, orig_limit);
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ-sub-str-w-added-long] "
+ << " sub: " << stat.sub
+ << " str: " << stat.str
+ << " 0-depth ass: " << solver->trail_size() - origTrailSize
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "occ-sub-str-w-added-long"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+ }
+
+ return solver->okay();
+}
+
+void SubsumeStrengthen::remove_literal(ClOffset offset, const Lit toRemoveLit)
+{
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ #ifdef VERBOSE_DEBUG
+ cout << "-> Strenghtening clause :" << cl;
+ cout << " with lit: " << toRemoveLit << endl;
+ #endif
+
+ *simplifier->limit_to_decrease -= 5;
+
+ (*solver->drat) << deldelay << cl << fin;
+ cl.strengthen(toRemoveLit);
+ simplifier->added_cl_to_var.touch(toRemoveLit.var());
+ cl.recalc_abst_if_needed();
+ (*solver->drat) << add << cl
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+ if (!cl.red()) {
+ simplifier->n_occurs[toRemoveLit.toInt()]--;
+ simplifier->elim_calc_need_update.touch(toRemoveLit.var());
+ simplifier->removed_cl_with_var.touch(toRemoveLit.var());
+ }
+
+ runStats.litsRemStrengthen++;
+ removeWCl(solver->watches[toRemoveLit], offset);
+ if (cl.red())
+ solver->litStats.redLits--;
+ else
+ solver->litStats.irredLits--;
+
+ simplifier->clean_clause(offset);
+}
+/**
+@brief Decides only using abstraction if clause A could subsume clause B
+
+@note: It can give false positives. Never gives false negatives.
+
+For A to subsume B, everything that is in A MUST be in B. So, if (A & ~B)
+contains even one bit, it means that A contains something that B doesn't. So
+A may be a subset of B only if (A & ~B) == 0
+*/
+bool SubsumeStrengthen::subsetAbst(const cl_abst_type A, const cl_abst_type B)
+{
+ return ((A & ~B) == 0);
+}
+
+//A subsumes B (A <= B)
+template<class T1, class T2>
+bool SubsumeStrengthen::subset(const T1& A, const T2& B)
+{
+ #ifdef MORE_DEUBUG
+ cout << "A:" << A << endl;
+ for(size_t i = 1; i < A.size(); i++) {
+ assert(A[i-1] < A[i]);
+ }
+
+ cout << "B:" << B << endl;
+ for(size_t i = 1; i < B.size(); i++) {
+ assert(B[i-1] < B[i]);
+ }
+ #endif
+
+ bool ret;
+ uint32_t i = 0;
+ uint32_t i2;
+ Lit lastB = lit_Undef;
+ for (i2 = 0; i2 < B.size(); i2++) {
+ if (lastB != lit_Undef)
+ assert(lastB < B[i2]);
+
+ lastB = B[i2];
+ //Literals are ordered
+ if (A[i] < B[i2]) {
+ ret = false;
+ goto end;
+ }
+ else if (A[i] == B[i2]) {
+ i++;
+
+ //went through the whole of A now, so A subsumes B
+ if (i == A.size()) {
+ ret = true;
+ goto end;
+ }
+ }
+ }
+ ret = false;
+
+ end:
+ *simplifier->limit_to_decrease -= (long)i2*4 + (long)i*4;
+ return ret;
+}
+
+/**
+@brief Decides if A subsumes B, or if not, if A could strenghten B
+
+@note: Assumes 'seen' is cleared (will leave it cleared)
+
+Helper function for strengthening. Does two things in one go:
+1) decides if clause A could subsume clause B
+2) decides if clause A could be used to perform self-subsuming resoltuion on
+clause B
+
+@return lit_Error, if neither (1) or (2) is true. Returns lit_Undef (1) is true,
+and returns the literal to remove if (2) is true
+*/
+template<class T1, class T2>
+Lit SubsumeStrengthen::subset1(const T1& A, const T2& B)
+{
+ Lit retLit = lit_Undef;
+
+ uint32_t i = 0;
+ uint32_t i2;
+ for (i2 = 0; i2 < B.size(); i2++) {
+ if (A[i] == ~B[i2] && retLit == lit_Undef) {
+ retLit = B[i2];
+ i++;
+ if (i == A.size())
+ goto end;
+
+ continue;
+ }
+
+ //Literals are ordered
+ if (A[i] < B[i2]) {
+ retLit = lit_Error;
+ goto end;
+ }
+
+ if (A[i] == B[i2]) {
+ i++;
+
+ if (i == A.size())
+ goto end;
+ }
+ }
+ retLit = lit_Error;
+
+ end:
+ *simplifier->limit_to_decrease -= (long)i2*4 + (long)i*4;
+ return retLit;
+}
+
+template<class T>
+size_t SubsumeStrengthen::find_smallest_watchlist_for_clause(const T& ps) const
+{
+ size_t min_i = 0;
+ size_t min_num = solver->watches[ps[min_i]].size();
+ for (uint32_t i = 1; i < ps.size(); i++){
+ const size_t this_num = solver->watches[ps[i]].size();
+ if (this_num < min_num) {
+ min_i = i;
+ min_num = this_num;
+ }
+ }
+ *simplifier->limit_to_decrease -= (long)ps.size();
+
+ return min_i;
+}
+
+/**
+@brief Finds clauses that are backward-subsumed by given clause
+
+Only handles backward-subsumption. Uses occurrence lists
+@param[out] out_subsumed The set of clauses subsumed by the given
+*/
+template<class T> void SubsumeStrengthen::find_subsumed(
+ const ClOffset offset //Will not match with index of the name value
+ , const T& ps //Literals in clause
+ , const cl_abst_type abs //Abstraction of literals in clause
+ , vector<ClOffset>& out_subsumed //List of clause indexes subsumed
+ , bool removeImplicit
+) {
+ #ifdef VERBOSE_DEBUG
+ cout << "find_subsumed: ";
+ for (const Lit lit: ps) {
+ cout << lit << " , ";
+ }
+ cout << endl;
+ #endif
+
+ const size_t smallest = find_smallest_watchlist_for_clause(ps);
+
+ //Go through the occur list of the literal that has the smallest occur list
+ watch_subarray occ = solver->watches[ps[smallest]];
+ *simplifier->limit_to_decrease -= (long)occ.size()*8 + 40;
+
+ Watched* it = occ.begin();
+ Watched* it2 = occ.begin();
+ size_t numBinFound = 0;
+ for (const Watched* end = occ.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (removeImplicit) {
+ if (it->isBin()
+ && ps.size() == 2
+ && ps[!smallest] == it->lit2()
+ && !it->red()
+ ) {
+ /*cout
+ << "ps " << ps << " could subsume this bin: "
+ << ps[smallest] << ", " << it->lit2()
+ << endl;*/
+ numBinFound++;
+
+ //We cannot remove ourselves
+ if (numBinFound > 1) {
+ removeWBin(solver->watches, it->lit2(), ps[smallest], it->red());
+ solver->binTri.irredBins--;
+ continue;
+ }
+ }
+ }
+ *it2++ = *it;
+
+ if (!it->isClause()) {
+ continue;
+ }
+
+ *simplifier->limit_to_decrease -= 15;
+
+ if (it->get_offset() == offset
+ || !subsetAbst(abs, it->getAbst())
+ ) {
+ continue;
+ }
+
+ const ClOffset offset2 = it->get_offset();
+ Clause& cl2 = *solver->cl_alloc.ptr(offset2);
+
+ if (ps.size() > cl2.size() || cl2.getRemoved())
+ continue;
+
+ *simplifier->limit_to_decrease -= 50;
+ if (subset(ps, cl2)) {
+ out_subsumed.push_back(offset2);
+ #ifdef VERBOSE_DEBUG
+ cout << "subsumed cl offset: " << offset2 << endl;
+ #endif
+ }
+ }
+ occ.shrink(it-it2);
+}
+template void SubsumeStrengthen::find_subsumed(
+ const ClOffset offset
+ , const std::array<Lit, 2>& ps
+ , const cl_abst_type abs //Abstraction of literals in clause
+ , vector<ClOffset>& out_subsumed //List of clause indexes subsumed
+ , bool removeImplicit
+);
+
+size_t SubsumeStrengthen::mem_used() const
+{
+ size_t b = 0;
+ b += subs.capacity()*sizeof(ClOffset);
+ b += subsLits.capacity()*sizeof(Lit);
+
+ return b;
+}
+
+void SubsumeStrengthen::finishedRun()
+{
+ globalstats += runStats;
+}
+
+void SubsumeStrengthen::Stats::print_short(const Solver* solver) const
+{
+ cout << "c [subs] long"
+ << " subBySub: " << subsumedBySub
+ << " subByStr: " << subsumedByStr
+ << " lits-rem-str: " << litsRemStrengthen
+ << solver->conf.print_times(subsumeTime+strengthenTime)
+ << endl;
+}
+
+void SubsumeStrengthen::Stats::print() const
+{
+ cout << "c -------- SubsumeStrengthen STATS ----------" << endl;
+ print_stats_line("c cl-subs"
+ , subsumedBySub + subsumedByStr
+ , " Clauses"
+ );
+ print_stats_line("c cl-str rem lit"
+ , litsRemStrengthen
+ , " Lits"
+ );
+ print_stats_line("c cl-sub T"
+ , subsumeTime
+ , " s"
+ );
+ print_stats_line("c cl-str T"
+ , strengthenTime
+ , " s"
+ );
+ cout << "c -------- SubsumeStrengthen STATS END ----------" << endl;
+}
+
+SubsumeStrengthen::Stats& SubsumeStrengthen::Stats::operator+=(const Stats& other)
+{
+ subsumedBySub += other.subsumedBySub;
+ subsumedByStr += other.subsumedByStr;
+ litsRemStrengthen += other.litsRemStrengthen;
+
+ subsumeTime += other.subsumeTime;
+ strengthenTime += other.strengthenTime;
+
+ return *this;
+}
+
+SubsumeStrengthen::Sub1Ret SubsumeStrengthen::backw_sub_str_long_with_implicit(
+ const vector<Lit>& lits
+) {
+ subs.clear();
+ subsLits.clear();
+
+ findStrengthened(
+ CL_OFFSET_MAX
+ , lits
+ , calcAbstraction(lits)
+ , subs
+ , subsLits
+ );
+
+ Sub1Ret ret;
+
+ for (size_t j = 0
+ ; j < subs.size() && solver->okay()
+ ; j++
+ ) {
+ ClOffset offset2 = subs[j];
+ Clause& cl2 = *solver->cl_alloc.ptr(offset2);
+ if (subsLits[j] == lit_Undef) { //Subsume
+ #ifdef VERBOSE_DEBUG
+ if (solver->conf.verbosity >= 6)
+ cout << "subsumed clause " << cl2 << endl;
+ #endif
+ #ifdef USE_GAUSS
+ if (cl2.used_in_xor()) {
+ continue;
+ }
+ #endif
+
+ if (!cl2.red()) {
+ ret.subsumedIrred = true;
+ }
+
+ simplifier->unlink_clause(offset2, true, false, true);
+ ret.sub++;
+ } else { //Strengthen
+ #ifdef VERBOSE_DEBUG
+ if (solver->conf.verbosity >= 6) {
+ cout << "strenghtened clause " << cl2 << endl;
+ }
+ #endif
+ #ifdef USE_GAUSS
+ if (cl2.used_in_xor()) {
+ //cout << "str-ing used in XOR with bin" << endl;
+ continue;
+ }
+ #endif
+ remove_literal(offset2, subsLits[j]);
+
+ ret.str++;
+ if (!solver->ok)
+ return ret;
+
+ //If we are waaay over time, just exit
+ if (*simplifier->limit_to_decrease < -20LL*1000LL*1000LL)
+ break;
+ }
+ }
+
+ return ret;
+}
+
+bool SubsumeStrengthen::backw_sub_str_long_with_bins_watch(
+ const Lit lit
+ , const bool redundant_too
+) {
+ watch_subarray ws = solver->watches[lit];
+ for (size_t i = 0
+ ; i < ws.size() && *simplifier->limit_to_decrease > 0
+ ; i++
+ ) {
+ //Each BIN only once
+ if (ws[i].isBin()
+ && (redundant_too || lit < ws[i].lit2())
+ ) {
+ const bool red = ws[i].red();
+ tried_bin_tri++;
+ tmpLits.resize(2);
+ tmpLits[0] = lit;
+ tmpLits[1] = ws[i].lit2();
+ std::sort(tmpLits.begin(), tmpLits.end());
+
+ Sub1Ret ret = backw_sub_str_long_with_implicit(tmpLits);
+ subsumedBin += ret.sub;
+ strBin += ret.str;
+ if (!solver->ok)
+ return false;
+
+ if (red
+ && ret.subsumedIrred
+ ) {
+ solver->binTri.redBins--;
+ solver->binTri.irredBins++;
+ simplifier->n_occurs[tmpLits[0].toInt()]++;
+ simplifier->n_occurs[tmpLits[1].toInt()]++;
+ findWatchedOfBin(solver->watches, tmpLits[1], tmpLits[0], true).setRed(false);
+ findWatchedOfBin(solver->watches, tmpLits[0], tmpLits[1], true).setRed(false);
+ }
+ continue;
+ }
+
+ //Must be a longer clause, break
+ //assert(ws[i].isClause());
+ //break;
+ }
+
+ return true;
+}
+
+bool SubsumeStrengthen::backw_sub_str_long_with_bins()
+{
+ //Stats
+ int64_t orig_time_limit = *simplifier->limit_to_decrease;
+ const size_t origTrailSize = solver->trail_size();
+ double myTime = cpuTime();
+ subsumedBin = 0;
+ strBin = 0;
+
+ //Randomize start in the watchlist
+ size_t upI;
+ upI = solver->mtrand.randInt(solver->watches.size()-1);
+
+ size_t numDone = 0;
+ for (; numDone < solver->watches.size() && *simplifier->limit_to_decrease > 0
+ ; upI = (upI +1) % solver->watches.size(), numDone++
+
+ ) {
+ Lit lit = Lit::toLit(upI);
+ if (!backw_sub_str_long_with_bins_watch(lit, true)) {
+ break;
+ }
+ }
+
+ const double time_used = cpuTime() - myTime;
+ const bool time_out = *simplifier->limit_to_decrease <= 0;
+ const double time_remain = float_div(*simplifier->limit_to_decrease, orig_time_limit);
+ if (solver->conf.verbosity) {
+ cout
+ << "c [occ-backw-sub-str-long-w-bins]"
+ << " subs: " << subsumedBin
+ << " str: " << strBin
+ << " tried: " << tried_bin_tri
+ << " 0-depth ass: " << solver->trail_size() - origTrailSize
+ << solver->conf.print_times(time_used, time_out, time_remain)
+ << endl;
+ }
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "occ-backw-sub-str-long-w-bins"
+ , time_used
+ , time_out
+ , time_remain
+ );
+ }
+
+ //runStats.zeroDepthAssigns = solver->trail_size() - origTrailSize;
+
+ return solver->okay();
+}
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h b/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
new file mode 100644
index 000000000..a691cc1ba
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/subsumestrengthen.h
@@ -0,0 +1,176 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SUBSUMESTRENGTHEN_H__
+#define __SUBSUMESTRENGTHEN_H__
+
+#include "cloffset.h"
+#include "cryptominisat5/solvertypesmini.h"
+#include "clabstraction.h"
+#include "clause.h"
+#include <vector>
+using std::vector;
+
+namespace CMSat {
+
+class OccSimplifier;
+class GateFinder;
+class Solver;
+
+class SubsumeStrengthen
+{
+public:
+ SubsumeStrengthen(OccSimplifier* simplifier, Solver* solver);
+ size_t mem_used() const;
+
+ void backw_sub_long_with_long();
+ bool backw_str_long_with_long();
+ bool backw_sub_str_long_with_bins();
+
+ //Called from simplifier at resolvent-adding of var-elim
+ uint32_t subsume_and_unlink_and_markirred(const ClOffset offset);
+ uint32_t backw_sub_long_with_implicit(const vector<Lit>& lits);
+ bool backw_sub_str_long_with_bins_watch(
+ const Lit lit
+ , const bool redundant_too = false
+ );
+ bool handle_added_long_cl(int64_t* limit, const bool main_run);
+
+ struct Sub0Ret {
+ ClauseStats stats;
+ bool subsumedIrred = 0;
+ uint32_t numSubsumed = 0;
+ };
+
+ struct Sub1Ret {
+ Sub1Ret& operator+=(const Sub1Ret& other)
+ {
+ sub += other.sub;
+ str += other.str;
+
+ return *this;
+ }
+
+ size_t sub = 0;
+ size_t str = 0;
+ bool subsumedIrred = false;
+ };
+
+ Sub1Ret backw_sub_str_long_with_implicit(const vector<Lit>& lits);
+ Sub1Ret strengthen_subsume_and_unlink_and_markirred(ClOffset offset);
+
+ struct Stats
+ {
+ Stats& operator+=(const Stats& other);
+ void print_short(const Solver* solver) const;
+ void print() const;
+
+ uint64_t subsumedBySub = 0;
+ uint64_t subsumedByStr = 0;
+ uint64_t litsRemStrengthen = 0;
+
+ double subsumeTime = 0.0;
+ double strengthenTime = 0.0;
+ };
+
+ void finishedRun();
+ const Stats& get_stats() const;
+ const Stats& getRunStats() const;
+
+ template<class T>
+ void find_subsumed(
+ const ClOffset offset
+ , const T& ps
+ , const cl_abst_type abs
+ , vector<ClOffset>& out_subsumed
+ , const bool removeImplicit = false
+ );
+
+private:
+ Stats globalstats;
+ Stats runStats;
+
+ OccSimplifier* simplifier;
+ Solver* solver;
+
+ //Called from simplifier at resolvent-adding of var-elim
+ template<class T>
+ Sub0Ret subsume_and_unlink(
+ const ClOffset offset
+ , const T& ps
+ , const cl_abst_type abs
+ , const bool removeImplicit = false
+ );
+
+ void randomise_clauses_order();
+ void remove_literal(ClOffset c, const Lit toRemoveLit);
+
+ template<class T>
+ size_t find_smallest_watchlist_for_clause(const T& ps) const;
+
+ template<class T>
+ void findStrengthened(
+ const ClOffset offset
+ , const T& ps
+ , const cl_abst_type abs
+ , vector<ClOffset>& out_subsumed
+ , vector<Lit>& out_lits
+ );
+
+ template<class T>
+ void fillSubs(
+ const ClOffset offset
+ , const T& ps
+ , cl_abst_type abs
+ , vector<ClOffset>& out_subsumed
+ , vector<Lit>& out_lits
+ , const Lit lit
+ );
+
+ template<class T1, class T2>
+ bool subset(const T1& A, const T2& B);
+
+ template<class T1, class T2>
+ Lit subset1(const T1& A, const T2& B);
+ bool subsetAbst(const cl_abst_type A, const cl_abst_type B);
+
+ vector<ClOffset> subs;
+ vector<Lit> subsLits;
+ vector<Lit> tmpLits;
+ size_t tried_bin_tri = 0;
+ uint64_t subsumedBin = 0;
+ uint64_t strBin = 0;
+};
+
+inline const SubsumeStrengthen::Stats& SubsumeStrengthen::getRunStats() const
+{
+ return runStats;
+}
+
+inline const SubsumeStrengthen::Stats& SubsumeStrengthen::get_stats() const
+{
+ return globalstats;
+}
+
+} //end namespace
+
+#endif //__SUBSUMESTRENGTHEN_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h b/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
new file mode 100644
index 000000000..83f830bde
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/time_mem.h
@@ -0,0 +1,144 @@
+/*********************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat -- Copyright (c) 2009 Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************************/
+
+#ifndef TIME_MEM_H
+#define TIME_MEM_H
+#include "constants.h"
+#include <cassert>
+#include <time.h>
+
+#include <ios>
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <signal.h>
+
+// note: MinGW64 defines both __MINGW32__ and __MINGW64__
+#if defined (_MSC_VER) || defined (__MINGW32__) || defined(_WIN32)
+#include <ctime>
+static inline double cpuTime(void)
+{
+ return (double)clock() / CLOCKS_PER_SEC;
+}
+static inline double cpuTimeTotal(void)
+{
+ return (double)clock() / CLOCKS_PER_SEC;
+}
+
+#else //_MSC_VER
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <unistd.h>
+
+static inline double cpuTime(void)
+{
+ struct rusage ru;
+ #ifdef RUSAGE_THREAD
+ int ret = getrusage(RUSAGE_THREAD, &ru);
+ #else
+ int ret = getrusage(RUSAGE_SELF, &ru);
+ #endif
+
+ //NOTE: This is needed because Windows' Linux subsystem returns non-zero
+ //and I can't figure out a way to detect Windows.
+ if (ret != 0) {
+ return (double)clock() / CLOCKS_PER_SEC;
+ }
+
+ return (double)ru.ru_utime.tv_sec + (double)ru.ru_utime.tv_usec / 1000000.0;
+}
+
+static inline double cpuTimeTotal(void)
+{
+ struct rusage ru;
+ int ret = getrusage(RUSAGE_SELF, &ru);
+ assert(ret == 0);
+
+ return (double)ru.ru_utime.tv_sec + (double)ru.ru_utime.tv_usec / 1000000.0;
+}
+
+#endif
+
+#if defined(__linux__)
+// process_mem_usage(double &, double &) - takes two doubles by reference,
+// attempts to read the system-dependent data for a process' virtual memory
+// size and resident set size, and return the results in KB.
+//
+// On failure, returns 0.0, 0.0
+static inline uint64_t memUsedTotal(double& vm_usage)
+{
+ //double& vm_usage
+ using std::ios_base;
+ using std::ifstream;
+ using std::string;
+
+ vm_usage = 0.0;
+
+ // 'file' stat seems to give the most reliable results
+ //
+ ifstream stat_stream("/proc/self/stat",ios_base::in);
+
+ // dummy vars for leading entries in stat that we don't care about
+ //
+ string pid, comm, state, ppid, pgrp, session, tty_nr;
+ string tpgid, flags, minflt, cminflt, majflt, cmajflt;
+ string utime, stime, cutime, cstime, priority, nice;
+ string O, itrealvalue, starttime;
+
+ // the two fields we want
+ //
+ unsigned long vsize;
+ long rss;
+
+ stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
+ >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
+ >> utime >> stime >> cutime >> cstime >> priority >> nice
+ >> O >> itrealvalue >> starttime >> vsize >> rss; // don't care about the rest
+
+ stat_stream.close();
+
+ long page_size_kb = sysconf(_SC_PAGE_SIZE); // in case x86-64 is configured to use 2MB pages
+ vm_usage = vsize;
+ double resident_set = (double)rss * (double)page_size_kb;
+
+ return resident_set;
+}
+#elif defined(__FreeBSD__)
+#include <sys/types.h>
+inline uint64_t memUsedTotal(double& vm_usage)
+{
+ vm_usage = 0;
+
+ struct rusage ru;
+ getrusage(RUSAGE_SELF, &ru);
+ return ru.ru_maxrss*1024;
+}
+#else //Windows
+static inline size_t memUsedTotal(double& vm_usage)
+{
+ vm_usage = 0;
+ return 0;
+}
+#endif
+
+#endif //TIME_MEM_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.cpp b/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.cpp
new file mode 100644
index 000000000..d6609fbde
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.cpp
@@ -0,0 +1,471 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "toplevelgauss.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "occsimplifier.h"
+#include "clauseallocator.h"
+#include <m4ri/m4ri.h>
+#include <limits>
+#include <cstddef>
+#include "sqlstats.h"
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+TopLevelGauss::TopLevelGauss(Solver* _solver) :
+ solver(_solver)
+{
+ //NOT THREAD SAFE BUG
+ m4ri_build_all_codes();
+}
+
+bool TopLevelGauss::toplevelgauss(const vector<Xor>& _xors, vector<Lit>* _out_changed_occur)
+{
+ out_changed_occur = _out_changed_occur;
+ runStats.clear();
+ runStats.numCalls = 1;
+ xors = _xors;
+
+ size_t origTrailSize = solver->trail_size();
+ extractInfo();
+
+ if (solver->conf.verbosity) {
+ runStats.print_short(solver);
+ }
+ runStats.zeroDepthAssigns = solver->trail_size() - origTrailSize;
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "toplevelgauss"
+ , runStats.total_time()
+ );
+ }
+ globalStats += runStats;
+
+ return solver->okay();
+}
+
+struct XorSorter{
+ bool operator()(const Xor& a, const Xor& b) const
+ {
+ return a.size() > b.size();
+ }
+};
+
+bool TopLevelGauss::extractInfo()
+{
+ double myTime = cpuTime();
+
+ //Order XORs so that larger are first. this way, putting them into blocks
+ //will be faster
+ std::sort(xors.begin(), xors.end(), XorSorter());
+
+ //Pre-filter XORs -- don't use any XOR which is not connected to ANY
+ //other XOR. These cannot be XOR-ed with anything anyway
+ vector<uint32_t> varsIn(solver->nVars(), 0);
+ for(const Xor& x: xors) {
+ for(const uint32_t v: x) {
+ varsIn[v]++;
+ }
+ }
+
+ size_t i = 0;
+ vector<size_t> xorsToUse;
+ for(vector<Xor>::const_iterator
+ it = xors.begin(), end = xors.end()
+ ; it != end
+ ; ++it, i++
+ ) {
+ const Xor& thisXor = *it;
+ bool makeItIn = false;
+ for(uint32_t v: thisXor) {
+ if (varsIn[v] > 1) {
+ makeItIn = true;
+ break;
+ }
+ }
+ //If this clause is not connected to ANY other, skip
+ if (!makeItIn)
+ continue;
+
+ xorsToUse.push_back(i);
+ }
+
+ //Cut above-filtered XORs into blocks
+ cutIntoBlocks(xorsToUse);
+ move_xors_into_blocks();
+ runStats.blockCutTime += cpuTime() -myTime;
+ myTime = cpuTime();
+
+ //These mappings will be needed for the matrixes, which will have far less
+ //variables than solver->nVars()
+ outerToInterVarMap.clear();
+ outerToInterVarMap.resize(solver->nVars(), std::numeric_limits<uint32_t>::max());
+ interToOUterVarMap.clear();
+ interToOUterVarMap.resize(solver->nVars(), std::numeric_limits<uint32_t>::max());
+
+ //Go through all blocks, and extract info
+ i = 0;
+ for(vector<vector<uint32_t> >::const_iterator
+ it = blocks.begin(), end = blocks.end()
+ ; it != end
+ ; ++it, i++
+ ) {
+ //If block is already merged, skip
+ if (it->empty())
+ continue;
+
+ double t = cpuTime();
+ const uint64_t oldNewUnits = runStats.newUnits;
+ const uint64_t oldNewBins = runStats.newBins;
+
+ if (!extractInfoFromBlock(*it, i))
+ goto end;
+
+ if (solver->conf.verbosity >= 5) {
+ cout << "Block size: " << it->size() << endl;
+ cout << "New units this round: " << (runStats.newUnits - oldNewUnits) << endl;
+ cout << "New bins this round: " << (runStats.newBins - oldNewBins) << endl;
+ cout << "Time: " << std::setprecision(3) << std::fixed << (cpuTime() - t) << endl;
+ }
+ }
+
+end:
+ runStats.extractTime += cpuTime() - myTime;
+
+ return solver->okay();
+}
+
+bool TopLevelGauss::extractInfoFromBlock(
+ const vector<uint32_t>& block
+ , const size_t blockNum
+) {
+ assert(solver->okay());
+ if (block.empty()) {
+ return solver->okay();
+ }
+
+ //Outer-inner var mapping is needed because not all vars are in the matrix
+ size_t num = 0;
+ for(vector<uint32_t>::const_iterator
+ it2 = block.begin(), end2 = block.end()
+ ; it2 != end2
+ ; it2++, num++
+ ) {
+ //Used to put XOR into matrix
+ outerToInterVarMap[*it2] = num;
+
+ //Used to transform new data in matrix to solver
+ interToOUterVarMap[num] = *it2;
+ }
+
+ //Get corresponding XORs
+ const vector<uint32_t>& thisXors = xors_in_blocks[blockNum];
+ assert(thisXors.size() > 1 && "We pre-filter the set such that *every* block contains at least 2 xors");
+
+ //Set up matrix
+ uint64_t numCols = block.size()+1; //we need augmented column
+ uint64_t matSize = numCols*thisXors.size();
+ matSize /= 1000ULL*1000ULL;
+ if (matSize > solver->conf.maxXORMatrix) {
+ //this matrix is way too large, skip :(
+ if (solver->conf.verbosity) {
+ cout << "c skipping matrix " << thisXors.size() << " x " << numCols << " size:" << matSize << endl;
+ }
+ return solver->okay();
+ }
+ mzd_t *mat = mzd_init(thisXors.size(), numCols);
+ assert(mzd_is_zero(mat));
+
+ //Fill row-by-row
+ size_t row = 0;
+ for(vector<uint32_t>::const_iterator
+ it = thisXors.begin(), end2 = thisXors.end()
+ ; it != end2
+ ; ++it, row++
+ ) {
+ const Xor& thisXor = xors[*it];
+ assert(thisXor.size() > 2 && "All XORs must be larger than 2-long");
+ //Put XOR into the matrix
+ for(uint32_t v: thisXor) {
+ const uint32_t var = outerToInterVarMap[v];
+ assert(var < numCols-1);
+ mzd_write_bit(mat, row, var, 1);
+ }
+
+ //Add RHS to the augmented columns
+ if (thisXor.rhs)
+ mzd_write_bit(mat, row, numCols-1, 1);
+ }
+
+ //Fully echelonize
+ mzd_echelonize_pluq(mat, true);
+
+ //Examine every row if it gives some new short truth
+ vector<Lit> lits;
+ for(size_t i = 0; i < row; i++) {
+ //Extract places where it's '1'
+ lits.clear();
+ for(size_t c = 0; c < numCols-1; c++) {
+ if (mzd_read_bit(mat, i, c))
+ lits.push_back(Lit(interToOUterVarMap[c], false));
+
+ //No point in going on, we cannot do anything with >2-long XORs
+ if (lits.size() > 2)
+ break;
+ }
+
+ //Extract RHS
+ const bool rhs = mzd_read_bit(mat, i, numCols-1);
+
+ switch(lits.size()) {
+ case 0:
+ //0-long XOR clause is equal to 1? If so, it's UNSAT
+ if (rhs) {
+ solver->add_xor_clause_inter(lits, 1, false);
+ assert(!solver->okay());
+ goto end;
+ }
+ break;
+
+ case 1: {
+ runStats.newUnits++;
+ solver->add_xor_clause_inter(lits, rhs, false);
+ if (!solver->okay())
+ goto end;
+ break;
+ }
+
+ case 2: {
+ runStats.newBins++;
+ out_changed_occur->insert(out_changed_occur->end(), lits.begin(), lits.end());
+ solver->add_xor_clause_inter(lits, rhs, false);
+ if (!solver->okay())
+ goto end;
+ break;
+ }
+
+ default:
+ //if resulting xor is larger than 2-long, we cannot extract anything.
+ break;
+ }
+ }
+
+ //Free mat, and return what need to be returned
+ end:
+ mzd_free(mat);
+
+ return solver->okay();
+}
+
+void TopLevelGauss::move_xors_into_blocks()
+{
+ xors_in_blocks.clear();
+ xors_in_blocks.resize(blocks.size());
+
+ for(size_t i = 0; i < xors.size(); i++) {
+ const Xor& thisXor = xors[i];
+ assert(thisXor.size() > 2 && "XORs are always at least 3-long!");
+
+ uint32_t block = varToBlock[thisXor[0]];
+ if (block != std::numeric_limits<uint32_t>::max()) {
+ assert(block < xors_in_blocks.size());
+ xors_in_blocks[block].push_back(i);
+ }
+ }
+}
+
+void TopLevelGauss::cutIntoBlocks(const vector<size_t>& xorsToUse)
+{
+ //Clearing data we will fill below
+ varToBlock.clear();
+ varToBlock.resize(solver->nVars(), std::numeric_limits<uint32_t>::max());
+ blocks.clear();
+
+ //Go through each XOR, and either make a new block for it
+ //or merge it into an existing block
+ //or merge it into an existing block AND merge blocks it joins together
+ for(size_t i: xorsToUse) {
+ const Xor& thisXor = xors[i];
+
+ //Calc blocks for this XOR
+ set<size_t> blocksBelongTo;
+ for(uint32_t v: thisXor) {
+ assert(solver->varData[v].removed == Removed::none);
+ if (varToBlock[v] != std::numeric_limits<uint32_t>::max())
+ blocksBelongTo.insert(varToBlock[v]);
+ }
+
+ switch(blocksBelongTo.size()) {
+ case 0: {
+ //Create new block
+ vector<uint32_t> block;
+ for(uint32_t v: thisXor) {
+ varToBlock[v] = blocks.size();
+ block.push_back(v);
+ }
+ blocks.push_back(block);
+ runStats.numBlocks++;
+
+ continue;
+ }
+
+ case 1: {
+ //Add to existing block
+ const size_t blockNum = *blocksBelongTo.begin();
+ vector<uint32_t>& block = blocks[blockNum];
+ for(uint32_t v :thisXor) {
+ if (varToBlock[v] == std::numeric_limits<uint32_t>::max()) {
+ block.push_back(v);
+ varToBlock[v] = blockNum;
+ }
+ }
+ continue;
+ }
+
+ default: {
+ //Merge blocks into first block
+ const size_t blockNum = *blocksBelongTo.begin();
+ set<size_t>::const_iterator it2 = blocksBelongTo.begin();
+ vector<uint32_t>& finalBlock = blocks[blockNum];
+ it2++; //don't merge the first into the first
+ for(set<size_t>::const_iterator end2 = blocksBelongTo.end(); it2 != end2; it2++) {
+ for(vector<uint32_t>::const_iterator
+ it3 = blocks[*it2].begin(), end3 = blocks[*it2].end()
+ ; it3 != end3
+ ; it3++
+ ) {
+ finalBlock.push_back(*it3);
+ varToBlock[*it3] = blockNum;
+ }
+ blocks[*it2].clear();
+ runStats.numBlocks--;
+ }
+
+ //add remaining vars
+ for(uint32_t v: thisXor) {
+ if (varToBlock[v] == std::numeric_limits<uint32_t>::max()) {
+ finalBlock.push_back(v);
+ varToBlock[v] = blockNum;
+ }
+ }
+ }
+ }
+ }
+
+ //caclulate stats
+ vector<uint32_t> new_block_num;
+ uint32_t i = 0;
+ for(vector<vector<uint32_t> >::const_iterator
+ it = blocks.begin(), end = blocks.end()
+ ; it != end
+ ; ++it, i++
+ ) {
+ //this set has been merged into another set. Skip
+ if (it->empty())
+ continue;
+
+ //cout << "Block vars: " << it->size() << endl;
+ runStats.numVarsInBlocks += it->size();
+ }
+
+ if (solver->conf.verbosity) {
+ cout << "c [xor-m4ri] Sum vars in blocks: " << runStats.numVarsInBlocks << endl;
+ }
+}
+
+size_t TopLevelGauss::mem_used() const
+{
+ size_t mem = 0;
+ mem += xors.capacity()*sizeof(Xor);
+ mem += blocks.capacity()*sizeof(vector<uint32_t>);
+ for(size_t i = 0; i< blocks.size(); i++) {
+ mem += blocks[i].capacity()*sizeof(uint32_t);
+ }
+ mem += varToBlock.capacity()*sizeof(size_t);
+
+ //Temporaries for putting xors into matrix, and extracting info from matrix
+ mem += outerToInterVarMap.capacity()*sizeof(size_t);
+ mem += interToOUterVarMap.capacity()*sizeof(size_t);
+
+ return mem;
+}
+
+void TopLevelGauss::Stats::print_short(const Solver* solver) const
+{
+ cout
+ << "c [xor-m4ri] cut into " << numBlocks << " blcks. "
+ << " Vars in blcks: " << numVarsInBlocks
+ << solver->conf.print_times(blockCutTime)
+ << endl;
+
+ cout
+ << "c [xor-m4ri] extr info. "
+ << " unit: " << newUnits
+ << " bin: " << newBins
+ << " 0-depth-ass: " << zeroDepthAssigns
+ << solver->conf.print_times(extractTime)
+ << endl;
+}
+
+void TopLevelGauss::Stats::print() const
+{
+ cout << "c --------- XOR STATS ----------" << endl;
+
+ print_stats_line("c XOR Num calls"
+ , numCalls
+ );
+
+ print_stats_line("c XOR 0-depth assings"
+ , zeroDepthAssigns
+ );
+
+ print_stats_line("c XOR unit found"
+ , newUnits
+ );
+
+ print_stats_line("c XOR bin found"
+ , newBins
+ );
+
+ cout << "c --------- XOR STATS END ----------" << endl;
+}
+
+TopLevelGauss::Stats& TopLevelGauss::Stats::operator+=(const TopLevelGauss::Stats& other)
+{
+ numCalls += other.numCalls;
+ extractTime += other.numCalls;
+ blockCutTime += other.numCalls;
+
+ numVarsInBlocks += other.numCalls;
+ numBlocks += other.numCalls;
+
+ time_outs += other.numCalls;
+ newUnits += other.numCalls;
+ newBins += other.numCalls;
+
+ zeroDepthAssigns += other.zeroDepthAssigns;
+ return *this;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h b/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h
new file mode 100644
index 000000000..72fce697a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/toplevelgauss.h
@@ -0,0 +1,104 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef _TOPLEVELGAUSS_H_
+#define _TOPLEVELGAUSS_H_
+
+#include "xor.h"
+#include "toplevelgaussabst.h"
+#include <vector>
+#include <set>
+using std::vector;
+using std::set;
+
+namespace CMSat {
+
+class Solver;
+
+class TopLevelGauss: public TopLevelGaussAbst
+{
+public:
+ explicit TopLevelGauss(Solver* _solver);
+ bool toplevelgauss(const vector<Xor>& _xors, vector<Lit>* _out_changed_occur) override;
+
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ double total_time() const
+ {
+ return extractTime + blockCutTime;
+ }
+
+ Stats& operator+=(const Stats& other);
+ void print_short(const Solver* solver) const;
+ void print() const;
+
+ //Time
+ uint32_t numCalls = 0;
+ double extractTime = 0.0;
+ double blockCutTime = 0.0;
+
+ //XOR stats
+ uint64_t numVarsInBlocks = 0;
+ uint64_t numBlocks = 0;
+
+ //Usefulness stats
+ uint64_t time_outs = 0;
+ uint64_t newUnits = 0;
+ uint64_t newBins = 0;
+
+ size_t zeroDepthAssigns = 0;
+ };
+
+ Stats runStats;
+ Stats globalStats;
+ size_t mem_used() const override;
+
+private:
+ Solver* solver;
+ vector<Lit>* out_changed_occur; // may have changed the occur count of these literals
+
+ bool extractInfo();
+ void cutIntoBlocks(const vector<size_t>& xorsToUse);
+ bool extractInfoFromBlock(const vector<uint32_t>& block, const size_t blockNum);
+ void move_xors_into_blocks();
+
+ //Major calculated data and indexes to this data
+ vector<vector<uint32_t> > blocks; ///<Blocks of vars that are in groups of XORs
+ vector<uint32_t> varToBlock; ///<variable-> block index map
+
+ //Temporaries for putting xors into matrix, and extracting info from matrix
+ vector<uint32_t> outerToInterVarMap;
+ vector<uint32_t> interToOUterVarMap;
+
+ vector<Xor> xors;
+ vector<vector<uint32_t> > xors_in_blocks;
+};
+
+}
+
+#endif // _TOPLEVELGAUSS_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h b/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
new file mode 100644
index 000000000..074441962
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/toplevelgaussabst.h
@@ -0,0 +1,52 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __TOPLEVELABST_H__
+#define __TOPLEVELABST_H__
+
+#include "xor.h"
+#include <vector>
+using std::vector;
+
+namespace CMSat {
+
+class OccSimplifier;
+class Solver;
+
+class TopLevelGaussAbst
+{
+ public:
+ virtual bool toplevelgauss(const vector<Xor>& /*_xors*/, vector<Lit>* /*out_changed_occur*/)
+ {
+ return true;
+ }
+ virtual ~TopLevelGaussAbst()
+ {}
+ virtual size_t mem_used() const
+ {
+ return 0;
+ }
+};
+
+}
+
+#endif //__TOPLEVELABST_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h b/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
new file mode 100644
index 000000000..0fa94616b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/touchlist.h
@@ -0,0 +1,183 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __TOUCHLIST_H__
+#define __TOUCHLIST_H__
+
+#include <vector>
+#include "solvertypes.h"
+
+namespace CMSat {
+
+class TouchList
+{
+public:
+ void touch(const Lit lit)
+ {
+ touch(lit.var());
+ }
+
+ template<typename T, typename... Targs>
+ void touch(T value, Targs... Fargs) // recursive variadic function
+ {
+ touch(value);
+ touch(Fargs...);
+ }
+
+ void touch(const vector<Lit>& lits)
+ {
+ for(const Lit lit: lits)
+ touch(lit.var());
+ }
+
+ void touch(const uint32_t var)
+ {
+ if (touchedBitset.size() <= var)
+ touchedBitset.resize(var+1, 0);
+
+ if (touchedBitset[var] == 0) {
+ touched.push_back(var);
+ touchedBitset[var] = 1;
+ }
+ }
+
+ const vector<uint32_t>& getTouchedList() const
+ {
+ return touched;
+ }
+
+ void clear()
+ {
+ //Clear touchedBitset
+ for(vector<uint32_t>::const_iterator
+ it = touched.begin(), end = touched.end()
+ ; it != end
+ ; ++it
+ ) {
+ touchedBitset[*it] = 0;
+ }
+
+ //Clear touched
+ touched.clear();
+ }
+
+ size_t mem_used() const
+ {
+ uint64_t mem = 0;
+ mem += touched.capacity()*sizeof(uint32_t);
+ mem += touchedBitset.capacity()*sizeof(char);
+
+ return mem;
+ }
+
+ void shrink_to_fit()
+ {
+ touched.clear();
+ touched.shrink_to_fit();
+ touchedBitset.clear();
+ touchedBitset.shrink_to_fit();
+ }
+
+private:
+ vector<uint32_t> touched;
+ vector<char> touchedBitset;
+};
+
+
+class TouchListLit
+{
+public:
+ void touch(const Lit lit)
+ {
+ touch(lit.toInt());
+ }
+
+ template<typename T, typename... Targs>
+ void touch(T value, Targs... Fargs) // recursive variadic function
+ {
+ touch(value);
+ touch(Fargs...);
+ }
+
+ void touch(const vector<Lit>& lits)
+ {
+ for(const Lit lit: lits)
+ touch(lit);
+ }
+
+ void touch(const uint32_t var)
+ {
+ if (touchedBitset.size() <= var)
+ touchedBitset.resize(var+1, 0);
+
+ if (touchedBitset[var] == 0) {
+ touched.push_back(var);
+ touchedBitset[var] = 1;
+ }
+ }
+
+ const vector<uint32_t>& getTouchedList() const
+ {
+ return touched;
+ }
+
+ void clear()
+ {
+ //Clear touchedBitset
+ for(vector<uint32_t>::const_iterator
+ it = touched.begin(), end = touched.end()
+ ; it != end
+ ; ++it
+ ) {
+ touchedBitset[*it] = 0;
+ }
+
+ //Clear touched
+ touched.clear();
+ }
+
+ size_t mem_used() const
+ {
+ uint64_t mem = 0;
+ mem += touched.capacity()*sizeof(uint32_t);
+ mem += touchedBitset.capacity()*sizeof(char);
+
+ return mem;
+ }
+
+ void shrink_to_fit()
+ {
+ touched.clear();
+ touched.shrink_to_fit();
+ touchedBitset.clear();
+ touchedBitset.shrink_to_fit();
+ }
+
+private:
+ vector<uint32_t> touched;
+ vector<char> touchedBitset;
+};
+
+
+} //end namespace
+
+#endif //__TOUCHLIST_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/trim.h b/cryptominisat5/cryptominisat-5.6.3/src/trim.h
new file mode 100644
index 000000000..efb968b85
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/trim.h
@@ -0,0 +1,44 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef TRIM_H
+#define TRIM_H
+
+#include <string.h>
+
+static inline std::string trim(const std::string& str)
+{
+ std::string ret;
+ for(const char c: str)
+ {
+ if (c != ' '
+ && c != '\n'
+ && c != '\r'
+ ) {
+ ret += c;
+ }
+ }
+
+ return ret;
+}
+
+#endif //TRIM_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/vardata.h b/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
new file mode 100644
index 000000000..739adccee
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/vardata.h
@@ -0,0 +1,56 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __VARDATA_H__
+#define __VARDATA_H__
+
+#include "constants.h"
+#include "propby.h"
+#include "avgcalc.h"
+
+namespace CMSat
+{
+
+struct VarData
+{
+ ///contains the decision level at which the assignment was made.
+ uint32_t level = 0;
+
+ uint32_t cancelled = 0;
+ uint32_t last_picked = 0;
+ uint32_t conflicted = 0;
+
+ //Reason this got propagated. NULL means decision/toplevel
+ PropBy reason = PropBy();
+
+ ///The preferred polarity of each variable.
+ bool polarity = false;
+
+ ///Whether var has been eliminated (var-elim, different component, etc.)
+ Removed removed = Removed::none;
+ bool is_bva = false;
+ bool added_for_xor = false;
+};
+
+}
+
+#endif //__VARDATA_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp b/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
new file mode 100644
index 000000000..b3e8af5fe
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.cpp
@@ -0,0 +1,1302 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "varreplacer.h"
+#include "varupdatehelper.h"
+#include "solver.h"
+#include "clausecleaner.h"
+#include "time_mem.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+#include "sccfinder.h"
+#include <iostream>
+#include <iomanip>
+#include <set>
+using std::cout;
+using std::endl;
+
+#ifdef VERBOSE_DEBUG
+#define REPLACE_STATISTICS
+#define VERBOSE_DEBUG_BIN_REPLACER
+#endif
+
+using namespace CMSat;
+
+//#define VERBOSE_DEBUG
+//#define REPLACE_STATISTICS
+//#define DEBUG_BIN_REPLACER
+//#define VERBOSE_DEBUG_BIN_REPLACER
+
+VarReplacer::VarReplacer(Solver* _solver) :
+ solver(_solver)
+{
+ scc_finder = new SCCFinder(_solver);
+ ps_tmp.resize(2);
+}
+
+VarReplacer::~VarReplacer()
+{
+ delete scc_finder;
+}
+
+void VarReplacer::new_var(const uint32_t orig_outer)
+{
+ if (orig_outer == std::numeric_limits<uint32_t>::max()) {
+ table.push_back(Lit(table.size(), false));
+ }
+}
+
+void VarReplacer::check_no_replaced_var_set() const
+{
+ for(uint32_t var = 0; var < solver->nVarsOuter(); var++) {
+ if (solver->value(var) != l_Undef) {
+ if (solver->varData[var].removed != Removed::none)
+ {
+ cout << "ERROR: var " << var + 1 << " has removed: "
+ << removed_type_to_string(solver->varData[var].removed)
+ << " but is set to " << solver->value(var) << endl;
+ assert(solver->varData[var].removed == Removed::none);
+ exit(-1);
+ }
+ }
+ }
+}
+
+void VarReplacer::new_vars(const size_t n)
+{
+ size_t oldsize = table.size();
+ table.insert(table.end(), n, lit_Undef);
+ for(size_t i = oldsize; i < table.size(); i++) {
+ table[i] = Lit(i, false);
+ }
+}
+
+void VarReplacer::save_on_var_memory()
+{
+}
+
+void VarReplacer::updateVars(
+ const std::vector< uint32_t >& /*outerToInter*/
+ , const std::vector< uint32_t >& /*interToOuter*/
+) {
+
+ /*updateArray(table, interToOuter);
+ updateLitsMap(table, outerToInter);
+ map<uint32_t, vector<uint32_t> > newReverseTable;
+ for(map<uint32_t, vector<uint32_t> >::iterator
+ it = reverseTable.begin(), end = reverseTable.end()
+ ; it != end
+ ; ++it
+ ) {
+ updateArrayMapCopy(it->second, outerToInter);
+ newReverseTable[outerToInter.at(it->first)] = it->second;
+ }
+ reverseTable.swap(newReverseTable);*/
+}
+
+void VarReplacer::printReplaceStats() const
+{
+ uint32_t i = 0;
+ for (vector<Lit>::const_iterator
+ it = table.begin(); it != table.end()
+ ; ++it, i++
+ ) {
+ if (it->var() == i) continue;
+ cout << "Replacing var " << i+1 << " with Lit " << *it << endl;
+ }
+}
+
+void VarReplacer::update_vardata_and_activities(
+ const uint32_t orig
+ , const uint32_t replaced_with
+) {
+ //Not replaced_with, or not replaceable, so skip
+ if (orig == replaced_with
+ || solver->varData[replaced_with].removed == Removed::decomposed
+ || solver->varData[replaced_with].removed == Removed::elimed
+ ) {
+ return;
+ }
+
+ //Has already been handled previously, just skip
+ if (solver->varData[orig].removed == Removed::replaced) {
+ return;
+ }
+
+ //Okay, so unset decision, and set the other one decision
+ assert(orig != replaced_with);
+ solver->varData[orig].removed = Removed::replaced;
+ assert(solver->varData[replaced_with].removed == Removed::none);
+ assert(solver->value(replaced_with) == l_Undef);
+
+ double orig_act_vsids = solver->var_act_vsids[orig];
+ double repl_with_act_vsids = solver->var_act_vsids[replaced_with];
+ if (orig_act_vsids + repl_with_act_vsids >= orig_act_vsids) {
+ solver->var_act_vsids[replaced_with] += orig_act_vsids;
+ }
+
+ double repl_with_act_maple = solver->var_act_maple[replaced_with];
+ double orig_act_maple = solver->var_act_maple[orig];
+ if (orig_act_maple + repl_with_act_maple >= orig_act_maple) {
+ solver->var_act_maple[replaced_with] += orig_act_maple;
+ }
+}
+
+bool VarReplacer::enqueueDelayedEnqueue()
+{
+ for(Lit lit: delayedEnqueue) {
+ lit = get_lit_replaced_with(lit);
+ if (solver->value(lit) == l_Undef) {
+ solver->enqueue(lit);
+ #ifdef STATS_NEEDED
+ solver->propStats.propsUnit++;
+ #endif
+ } else if (solver->value(lit) == l_False) {
+ solver->ok = false;
+ break;
+ }
+ }
+ delayedEnqueue.clear();
+
+ if (!solver->ok)
+ return false;
+
+ solver->ok = solver->propagate<false>().isNULL();
+ return solver->okay();
+}
+
+void VarReplacer::attach_delayed_attach()
+{
+ for(Clause* c: delayed_attach_or_free) {
+ if (c->size() <= 2) {
+ solver->cl_alloc.clauseFree(c);
+ } else {
+ c->unset_removed();
+ solver->attachClause(*c);
+ }
+ }
+ delayed_attach_or_free.clear();
+}
+
+void VarReplacer::update_all_vardata_activities()
+{
+ uint32_t var = 0;
+ for (vector<Lit>::const_iterator
+ it = table.begin(); it != table.end()
+ ; ++it, var++
+ ) {
+ const uint32_t orig = solver->map_outer_to_inter(var);
+ const uint32_t repl = solver->map_outer_to_inter(it->var());
+ update_vardata_and_activities(orig, repl);
+ }
+}
+
+bool VarReplacer::perform_replace()
+{
+ assert(solver->ok);
+ checkUnsetSanity();
+
+ //Set up stats
+ runStats.clear();
+ runStats.numCalls = 1;
+ const double myTime = cpuTime();
+ const size_t origTrailSize = solver->trail_size();
+
+ solver->clauseCleaner->remove_and_clean_all();
+ #ifdef DEBUG_ATTACH_MORE
+ solver->test_all_clause_attached();
+ #endif
+
+ //Printing stats
+ if (solver->conf.verbosity >= 5)
+ printReplaceStats();
+
+ update_all_vardata_activities();
+ check_no_replaced_var_set();
+
+ runStats.actuallyReplacedVars = replacedVars -lastReplacedVars;
+ lastReplacedVars = replacedVars;
+
+ #ifdef DEBUG_ATTACH_MORE
+ solver->test_all_clause_attached();
+ #endif
+ assert(solver->prop_at_head());
+
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_implicit_stats();
+ #endif
+ build_fast_inter_replace_lookup();
+
+ //Replace implicits
+ if (!replaceImplicit()) {
+ goto end;
+ }
+
+ //Replace longs
+ assert(solver->watches.get_smudged_list().empty());
+ assert(delayed_attach_or_free.empty());
+ if (!replace_set(solver->longIrredCls)) {
+ goto end;
+ }
+ for(auto& lredcls: solver->longRedCls) {
+ if (!replace_set(lredcls)) {
+ goto end;
+ }
+ }
+ solver->clean_occur_from_removed_clauses_only_smudged();
+ attach_delayed_attach();
+ if (!replace_xor_clauses()) {
+ goto end;
+ }
+
+ //While replacing the clauses
+ //we cannot(for implicits) and/or shouldn't (for implicit & long cls) enqueue
+ //* We cannot because we are going through a struct and we might change it
+ //* We shouldn't because then non-dominators would end up in the 'trail'
+ if (!enqueueDelayedEnqueue()) {
+ goto end;
+ }
+
+ solver->update_assumptions_after_varreplace();
+
+end:
+ delayed_attach_or_free.clear();
+ destroy_fast_inter_replace_lookup();
+ assert(solver->prop_at_head() || !solver->ok);
+
+ //Update stats
+ const double time_used = cpuTime() - myTime;
+ runStats.zeroDepthAssigns += solver->trail_size() - origTrailSize;
+ runStats.cpu_time = time_used;
+ globalStats += runStats;
+ if (solver->conf.verbosity) {
+ if (solver->conf.verbosity >= 3)
+ runStats.print(solver->nVars());
+ else
+ runStats.print_short(solver);
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "vrep"
+ , time_used
+ );
+ }
+
+ if (solver->okay()) {
+ #ifdef DEBUG_ATTACH_MORE
+ solver->test_all_clause_attached();
+ #endif
+ solver->check_wrong_attach();
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_stats();
+ #endif
+ checkUnsetSanity();
+ }
+
+ return solver->okay();
+}
+
+bool VarReplacer::replace_xor_clauses()
+{
+ for(Xor& x: solver->xorclauses) {
+ for(uint32_t i = 0, end = x.size(); i < end; i++) {
+ assert(x[i] < solver->nVars());
+ Lit l = Lit(x[i], false);
+ if (get_lit_replaced_with_fast(l) != l) {
+ l = get_lit_replaced_with_fast(l);
+ x.rhs ^= l.sign();
+ x[i] = l.var();
+ runStats.replacedLits++;
+ }
+ }
+
+ solver->clean_xor_vars_no_prop(x.get_vars(), x.rhs);
+ if (x.size() == 0 && x.rhs == true) {
+ solver->ok = false;
+ }
+ }
+
+ return solver->okay();
+}
+
+void VarReplacer::newBinClause(
+ Lit origLit1
+ , Lit origLit2
+ , Lit origLit3
+ , Lit lit1
+ , Lit lit2
+ , bool red
+) {
+ //Only attach once
+ if (origLit1 < origLit2
+ && origLit2 < origLit3
+ ){
+ delayed_attach_bin.push_back(BinaryClause(lit1, lit2, red));
+ (*solver->drat) << add << lit1 << lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ }
+}
+
+inline void VarReplacer::updateBin(
+ Watched* i
+ , Watched*& j
+ , const Lit origLit1
+ , const Lit origLit2
+ , Lit lit1
+ , Lit lit2
+) {
+ bool remove = false;
+
+ //Two lits are the same in BIN
+ if (lit1 == lit2) {
+ delayedEnqueue.push_back(lit2);
+ (*solver->drat) << add << lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+ remove = true;
+ }
+
+ //Tautology
+ if (lit1 == ~lit2)
+ remove = true;
+
+ if (remove) {
+ impl_tmp_stats.remove(*i);
+
+ //Drat -- Delete only once
+ if (origLit1 < origLit2) {
+ (*solver->drat) << del << origLit1 << origLit2 << fin;
+ }
+
+ return;
+ }
+
+ //Drat
+ if (//Changed
+ (lit1 != origLit1
+ || lit2 != origLit2)
+ //Delete&attach only once
+ && (origLit1 < origLit2)
+ ) {
+ (*solver->drat)
+ << add << lit1 << lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin
+ << del << origLit1 << origLit2 << fin;
+ }
+
+ if (lit1 != origLit1) {
+ solver->watches[lit1].push(*i);
+ } else {
+ *j++ = *i;
+ }
+}
+
+void VarReplacer::updateStatsFromImplStats()
+{
+ assert(impl_tmp_stats.removedRedBin % 2 == 0);
+ solver->binTri.redBins -= impl_tmp_stats.removedRedBin/2;
+
+ assert(impl_tmp_stats.removedIrredBin % 2 == 0);
+ solver->binTri.irredBins -= impl_tmp_stats.removedIrredBin/2;
+
+ #ifdef DEBUG_IMPLICIT_STATS
+ solver->check_implicit_stats();
+ #endif
+
+ runStats.removedBinClauses += impl_tmp_stats.removedRedBin/2 + impl_tmp_stats.removedIrredBin/2;
+
+ impl_tmp_stats.clear();
+}
+
+bool VarReplacer::replaceImplicit()
+{
+ impl_tmp_stats.clear();
+ delayedEnqueue.clear();
+ delayed_attach_bin.clear();
+ assert(solver->watches.get_smudged_list().empty());
+
+ for(size_t i = 0; i < solver->nVars()*2; i++) {
+ const Lit lit = Lit::toLit(i);
+ if (get_lit_replaced_with_fast(lit) != lit) {
+ solver->watches.smudge(lit);
+ }
+ }
+
+ for(size_t at = 0; at < solver->watches.get_smudged_list().size(); at++) {
+ const Lit origLit1 = solver->watches.get_smudged_list()[at];
+ //const Lit origLit1 = Lit::toLit(at);
+ watch_subarray ws = solver->watches[origLit1];
+
+ Watched* i = ws.begin();
+ Watched* j = i;
+ for (Watched *end2 = ws.end(); i != end2; i++) {
+ //Don't bother clauses
+ if (i->isClause()) {
+ *j++ = *i;
+ continue;
+ }
+ runStats.bogoprops += 1;
+
+ const Lit origLit2 = i->lit2();
+ assert(solver->value(origLit1) == l_Undef);
+ assert(solver->value(origLit2) == l_Undef);
+ assert(origLit1.var() != origLit2.var());
+
+ //Update main lit
+ Lit lit1 = origLit1;
+ if (get_lit_replaced_with_fast(lit1) != lit1) {
+ lit1 = get_lit_replaced_with_fast(lit1);
+ runStats.replacedLits++;
+ solver->watches.smudge(origLit2);
+ }
+
+ //Update lit2
+ Lit lit2 = origLit2;
+ if (get_lit_replaced_with_fast(lit2) != lit2) {
+ lit2 = get_lit_replaced_with_fast(lit2);
+ i->setLit2(lit2);
+ runStats.replacedLits++;
+ }
+
+ assert(i->isBin());
+ updateBin(i, j, origLit1, origLit2, lit1, lit2);
+ }
+ ws.shrink_(i-j);
+ }
+
+ for(const BinaryClause& bincl : delayed_attach_bin) {
+ solver->attach_bin_clause(bincl.getLit1(), bincl.getLit2(), bincl.isRed());
+ }
+ delayed_attach_bin.clear();
+
+ #ifdef VERBOSE_DEBUG_BIN_REPLACER
+ cout << "c debug bin replacer start" << endl;
+ cout << "c debug bin replacer end" << endl;
+ #endif
+
+ updateStatsFromImplStats();
+ solver->watches.clear_smudged();
+
+ return solver->okay();
+}
+
+/**
+@brief Replaces variables in long clauses
+*/
+bool VarReplacer::replace_set(vector<ClOffset>& cs)
+{
+ assert(!solver->drat->something_delayed());
+ vector<ClOffset>::iterator i = cs.begin();
+ vector<ClOffset>::iterator j = i;
+ for (vector<ClOffset>::iterator end = cs.end(); i != end; i++) {
+ runStats.bogoprops += 3;
+ assert(!solver->drat->something_delayed());
+
+ Clause& c = *solver->cl_alloc.ptr(*i);
+ assert(!c.getRemoved());
+ assert(c.size() > 2);
+
+ bool changed = false;
+ (*solver->drat) << deldelay << c << fin;
+
+ const Lit origLit1 = c[0];
+ const Lit origLit2 = c[1];
+
+ for (Lit& l: c) {
+ if (isReplaced_fast(l)) {
+ changed = true;
+ l = get_lit_replaced_with_fast(l);
+ runStats.replacedLits++;
+ }
+ }
+
+ if (changed && handleUpdatedClause(c, origLit1, origLit2)) {
+ runStats.removedLongClauses++;
+ if (!solver->ok) {
+ return false;
+ }
+ } else {
+ *j++ = *i;
+ solver->drat->forget_delay();
+ }
+
+ }
+ cs.resize(cs.size() - (i-j));
+ assert(!solver->drat->something_delayed());
+
+ return solver->okay();
+}
+
+Lit* my_lit_find(Clause& cl, const Lit lit)
+{
+ for(Lit* a = cl.begin(); a != cl.end(); a++) {
+ if (*a == lit)
+ return a;
+ }
+ return NULL;
+}
+
+/**
+@brief Helper function for replace_set()
+*/
+bool VarReplacer::handleUpdatedClause(
+ Clause& c
+ , const Lit origLit1
+ , const Lit origLit2
+) {
+ assert(!c.getRemoved());
+ bool satisfied = false;
+ std::sort(c.begin(), c.end());
+ Lit p;
+ uint32_t i, j;
+ const uint32_t origSize = c.size();
+ for (i = j = 0, p = lit_Undef; i != origSize; i++) {
+ assert(solver->varData[c[i].var()].removed == Removed::none);
+ if (solver->value(c[i]) == l_True || c[i] == ~p) {
+ satisfied = true;
+ break;
+ }
+ else if (solver->value(c[i]) != l_False && c[i] != p) {
+ c[j++] = p = c[i];
+ }
+ }
+ c.shrink(i - j);
+ c.setStrenghtened();
+
+ runStats.bogoprops += 10;
+ if (c.red()) {
+ solver->litStats.redLits -= origSize;
+ } else {
+ solver->litStats.irredLits -= origSize;
+ }
+ delayed_attach_or_free.push_back(&c);
+
+ #ifdef VERBOSE_DEBUG
+ cout << "clause after replacing: " << c << endl;
+ #endif
+
+ if (satisfied) {
+ (*solver->drat) << findelay;
+ c.shrink(c.size()); //so we free() it
+ solver->watches.smudge(origLit1);
+ solver->watches.smudge(origLit2);
+ c.setRemoved();
+ return true;
+ }
+ (*solver->drat) << add << c
+ #ifdef STATS_NEEDED
+ << solver->sumConflicts
+ #endif
+ << fin << findelay;
+
+ runStats.bogoprops += 3;
+ switch(c.size()) {
+ case 0:
+ c.setRemoved();
+ solver->ok = false;
+ return true;
+ case 1 :
+ c.setRemoved();
+ solver->watches.smudge(origLit1);
+ solver->watches.smudge(origLit2);
+
+ delayedEnqueue.push_back(c[0]);
+ runStats.removedLongLits += origSize;
+ return true;
+ case 2:
+ c.setRemoved();
+ solver->watches.smudge(origLit1);
+ solver->watches.smudge(origLit2);
+
+ solver->attach_bin_clause(c[0], c[1], c.red());
+ runStats.removedLongLits += origSize;
+ return true;
+
+ default:
+ Lit* at = my_lit_find(c, origLit1);
+ if (at != NULL) {
+ std::swap(c[0], *at);
+ }
+ Lit* at2 = my_lit_find(c, origLit2);
+ if (at2 != NULL) {
+ std::swap(c[1], *at2);
+ }
+ if (at != NULL && at2 != NULL) {
+ delayed_attach_or_free.pop_back();
+ if (c.red()) {
+ solver->litStats.redLits += c.size();
+ } else {
+ solver->litStats.irredLits += c.size();
+ }
+ } else {
+ c.setRemoved();
+ solver->watches.smudge(origLit1);
+ solver->watches.smudge(origLit2);
+ }
+
+ runStats.removedLongLits += origSize - c.size();
+ return false;
+ }
+
+ release_assert(false);
+}
+
+void VarReplacer::set_sub_var_during_solution_extension(uint32_t var, const uint32_t sub_var)
+{
+ const lbool to_set = solver->model[var] ^ table[sub_var].sign();
+ const uint32_t sub_var_inter = solver->map_outer_to_inter(sub_var);
+ assert(solver->varData[sub_var_inter].removed == Removed::replaced);
+ assert(solver->model_value(sub_var) == l_Undef);
+
+ if (solver->conf.verbosity > 10) {
+ cout << "Varreplace-extend: setting outer " << sub_var+1
+ << " to " << to_set << " because of " << var+1 << endl;
+ }
+ solver->model[sub_var] = to_set;
+}
+
+//NOTE: 'var' is OUTER
+void VarReplacer::extend_model(const uint32_t var)
+{
+ assert(solver->model[var] != l_Undef);
+ auto it = reverseTable.find(var);
+ if (it == reverseTable.end())
+ return;
+
+ assert(it->first == var);
+ for(const uint32_t sub_var: it->second)
+ {
+ set_sub_var_during_solution_extension(var, sub_var);
+ }
+}
+
+void VarReplacer::extend_model_already_set()
+{
+ assert(solver->model.size() == solver->nVarsOuter());
+ for (auto it = reverseTable.begin() , end = reverseTable.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (solver->model_value(it->first) == l_Undef) {
+ continue;
+ }
+
+ for(const uint32_t sub_var: it->second)
+ {
+ set_sub_var_during_solution_extension(it->first, sub_var);
+ }
+ }
+}
+
+void VarReplacer::extend_model_set_undef()
+{
+ assert(solver->model.size() == solver->nVarsOuter());
+ for (auto it = reverseTable.begin() , end = reverseTable.end()
+ ; it != end
+ ; ++it
+ ) {
+ if (solver->model_value(it->first) == l_Undef) {
+ solver->model[it->first] = l_False;
+ for(const uint32_t sub_var: it->second)
+ {
+ set_sub_var_during_solution_extension(it->first, sub_var);
+ }
+ }
+ }
+}
+
+void VarReplacer::replaceChecks(const uint32_t var1, const uint32_t var2) const
+{
+
+ assert(solver->ok);
+ assert(solver->decisionLevel() == 0);
+ assert(solver->value(var1) == l_Undef);
+ assert(solver->value(var2) == l_Undef);
+
+ assert(solver->varData[var1].removed == Removed::none);
+ assert(solver->varData[var2].removed == Removed::none);
+}
+
+bool VarReplacer::handleAlreadyReplaced(const Lit lit1, const Lit lit2)
+{
+ //OOps, already inside, but with inverse polarity, UNSAT
+ if (lit1.sign() != lit2.sign()) {
+ (*solver->drat)
+ << add << ~lit1 << lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin
+
+ << add << lit1 << ~lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin
+
+ << add << lit1
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin
+
+ << add << ~lit1
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ solver->ok = false;
+ return false;
+ }
+
+ //Already inside in the correct way, return
+ return true;
+}
+
+bool VarReplacer::replace_vars_already_set(
+ const Lit lit1
+ , const lbool val1
+ , const Lit /*lit2*/
+ , const lbool val2
+) {
+ if (val1 != val2) {
+ (*solver->drat)
+ << add << ~lit1
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin
+
+ << add << lit1
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ solver->ok = false;
+ }
+
+ //Already set, return with correct code
+ return solver->okay();
+}
+
+bool VarReplacer::handleOneSet(
+ const Lit lit1
+ , const lbool val1
+ , const Lit lit2
+ , const lbool val2
+) {
+ if (solver->ok) {
+ Lit toEnqueue;
+ if (val1 != l_Undef) {
+ toEnqueue = lit2 ^ (val1 == l_False);
+ } else {
+ toEnqueue = lit1 ^ (val2 == l_False);
+ }
+ solver->enqueue(toEnqueue);
+ (*solver->drat) << add << toEnqueue
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ #ifdef STATS_NEEDED
+ solver->propStats.propsUnit++;
+ #endif
+
+ solver->ok = (solver->propagate<false>().isNULL());
+ }
+ return solver->okay();
+}
+
+/**
+@brief Replaces two two lits with one another
+*/
+bool VarReplacer::replace(
+ uint32_t var1
+ , uint32_t var2
+ , const bool xor_is_true
+)
+{
+ #ifdef VERBOSE_DEBUG
+ cout
+ << "replace() called with var " << Lit(var1, false)
+ << " and var " << Lit(var2, false)
+ << " with xor_is_true " << xor_is_true << endl;
+ #endif
+
+ replaceChecks(var1, var2);
+
+ #ifdef DRAT_DEBUG
+ (*solver->drat)
+ << add << Lit(var1, true) << (Lit(var2, false) ^ xor_is_true) << fin
+ << add << Lit(var1, false) << (Lit(var2, true) ^ xor_is_true) << fin
+ ;
+ #endif
+
+ //Move forward
+ const Lit lit1 = get_lit_replaced_with(Lit(var1, false));
+ const Lit lit2 = get_lit_replaced_with(Lit(var2, false)) ^ xor_is_true;
+
+ //Already inside?
+ if (lit1.var() == lit2.var()) {
+ return handleAlreadyReplaced(lit1, lit2);
+ }
+ (*solver->drat)
+ << add << ~lit1 << lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin
+ << add << lit1 << ~lit2
+ #ifdef STATS_NEEDED
+ << solver->clauseID++
+ << solver->sumConflicts
+ #endif
+ << fin;
+
+ //None should be removed, only maybe queued for replacement
+ assert(solver->varData[lit1.var()].removed == Removed::none);
+ assert(solver->varData[lit2.var()].removed == Removed::none);
+
+ const lbool val1 = solver->value(lit1);
+ const lbool val2 = solver->value(lit2);
+
+ //Both are set
+ if (val1 != l_Undef && val2 != l_Undef) {
+ return replace_vars_already_set(lit1, val1, lit2, val2);
+ }
+
+ //exactly one set
+ if ((val1 != l_Undef && val2 == l_Undef)
+ || (val2 != l_Undef && val1 == l_Undef)
+ ) {
+ return handleOneSet(lit1, val1, lit2, val2);
+ }
+
+ assert(val1 == l_Undef && val2 == l_Undef);
+
+ const Lit lit1_outer = solver->map_inter_to_outer(lit1);
+ const Lit lit2_outer = solver->map_inter_to_outer(lit2);
+ return update_table_and_reversetable(lit1_outer, lit2_outer);
+}
+
+bool VarReplacer::update_table_and_reversetable(const Lit lit1, const Lit lit2)
+{
+ if (reverseTable.find(lit1.var()) == reverseTable.end()) {
+ reverseTable[lit2.var()].push_back(lit1.var());
+ table[lit1.var()] = lit2 ^ lit1.sign();
+ replacedVars++;
+ return true;
+ }
+
+ if (reverseTable.find(lit2.var()) == reverseTable.end()) {
+ reverseTable[lit1.var()].push_back(lit2.var());
+ table[lit2.var()] = lit1 ^ lit2.sign();
+ replacedVars++;
+ return true;
+ }
+
+ //both have children
+ setAllThatPointsHereTo(lit1.var(), lit2 ^ lit1.sign());
+ replacedVars++;
+ return true;
+}
+
+/**
+@brief Changes internal graph to set everything that pointed to var to point to lit
+*/
+void VarReplacer::setAllThatPointsHereTo(const uint32_t var, const Lit lit)
+{
+ map<uint32_t, vector<uint32_t> >::iterator it = reverseTable.find(var);
+ if (it != reverseTable.end()) {
+ for(const uint32_t var2: it->second) {
+ assert(table[var2].var() == var);
+ if (lit.var() != var2) {
+ table[var2] = lit ^ table[var2].sign();
+ reverseTable[lit.var()].push_back(var2);
+ }
+ }
+ reverseTable.erase(it);
+ }
+ table[var] = lit;
+ reverseTable[lit.var()].push_back(var);
+}
+
+void VarReplacer::checkUnsetSanity()
+{
+ for(size_t i = 0; i < solver->nVarsOuter(); i++) {
+ const Lit repLit = get_lit_replaced_with(Lit(i, false));
+ const uint32_t repVar = get_var_replaced_with(i);
+
+ if (solver->varData[i].removed == Removed::none
+ && solver->varData[repVar].removed == Removed::none
+ && solver->value(i) != solver->value(repLit)
+ ) {
+ cout
+ << "Variable " << (i+1)
+ << " has been set to " << solver->value(i)
+ << " but it has been replaced with lit "
+ << get_lit_replaced_with(Lit(i, false))
+ << " and that has been set to "
+ << solver->value(get_lit_replaced_with(Lit(i, false)))
+ << endl;
+
+ assert(solver->value(i) == solver->value(repLit));
+ std::exit(-1);
+ }
+ }
+
+ #ifdef SLOW_DEBUG
+ check_no_replaced_var_set();
+ #endif
+}
+
+bool VarReplacer::add_xor_as_bins(const BinaryXor& bin_xor)
+{
+ ps_tmp[0] = Lit(bin_xor.vars[0], false);
+ ps_tmp[1] = Lit(bin_xor.vars[1], true ^ bin_xor.rhs);
+ solver->add_clause_int(ps_tmp);
+ if (!solver->ok) {
+ return false;
+ }
+
+ ps_tmp[0] = Lit(bin_xor.vars[0], true);
+ ps_tmp[1] = Lit(bin_xor.vars[1], false ^ bin_xor.rhs);
+ solver->add_clause_int(ps_tmp);
+ if (!solver->ok) {
+ return false;
+ }
+
+ return true;
+}
+
+bool VarReplacer::replace_if_enough_is_found(const size_t limit, uint64_t* bogoprops_given, bool *replaced)
+{
+ if (replaced)
+ *replaced = false;
+
+ scc_finder->performSCC(bogoprops_given);
+ if (scc_finder->get_num_binxors_found() < limit) {
+ scc_finder->clear_binxors();
+ return solver->okay();
+ }
+
+ #ifdef USE_GAUSS
+ solver->clearEnGaussMatrixes();
+ #endif
+
+ if (replaced)
+ *replaced = true;
+
+ const set<BinaryXor>& xors_found = scc_finder->get_binxors();
+ for(BinaryXor bin_xor: xors_found) {
+ if (!add_xor_as_bins(bin_xor)) {
+ return false;
+ }
+
+ if (solver->value(bin_xor.vars[0]) == l_Undef
+ && solver->value(bin_xor.vars[1]) == l_Undef
+ ) {
+ replace(bin_xor.vars[0], bin_xor.vars[1], bin_xor.rhs);
+ if (!solver->okay()) {
+ return false;
+ }
+ }
+ }
+
+ const bool ret = perform_replace();
+ if (bogoprops_given) {
+ *bogoprops_given += runStats.bogoprops;
+ }
+ scc_finder->clear_binxors();
+
+ return ret;
+}
+
+size_t VarReplacer::mem_used() const
+{
+ size_t b = 0;
+ b += scc_finder->mem_used();
+ b += delayedEnqueue.capacity()*sizeof(Lit);
+ b += table.capacity()*sizeof(Lit);
+ for(map<uint32_t, vector<uint32_t> >::const_iterator
+ it = reverseTable.begin(), end = reverseTable.end()
+ ; it != end
+ ; ++it
+ ) {
+ b += it->second.capacity()*sizeof(Lit);
+ }
+ //TODO under-counting
+ b += reverseTable.size()*(sizeof(uint32_t) + sizeof(vector<uint32_t>));
+
+ return b;
+}
+
+uint32_t VarReplacer::print_equivalent_literals(bool outer_numbering, std::ostream *os) const
+{
+ uint32_t num = 0;
+ vector<Lit> tmpCl;
+ for (uint32_t var = 0; var < table.size(); var++) {
+ const Lit lit = table[var];
+ if (lit.var() == var)
+ continue;
+
+ //They have been renumbered in a way that cannot be dumped
+ Lit lit1;
+ Lit lit2;
+ if (outer_numbering) {
+ lit1 = lit;
+ lit2 = Lit(var, false);
+ } else {
+ lit1 = solver->map_outer_to_inter(lit);
+ lit2 = solver->map_outer_to_inter(Lit(var, false));
+
+ if (lit1.var() >= solver->nVars() ||
+ lit2.var() >= solver->nVars()
+ ) {
+ continue;
+ }
+ }
+
+ if (os) {
+ tmpCl.clear();
+ tmpCl.push_back(~lit1);
+ tmpCl.push_back(lit2);
+ std::sort(tmpCl.begin(), tmpCl.end());
+
+ *os
+ << tmpCl[0] << " "
+ << tmpCl[1]
+ << " 0\n";
+
+ tmpCl[0] ^= true;
+ tmpCl[1] ^= true;
+
+ *os
+ << tmpCl[0] << " "
+ << tmpCl[1]
+ << " 0\n";
+ }
+ num++;
+ }
+ return num;
+}
+
+void VarReplacer::print_some_stats(const double global_cpu_time) const
+{
+ print_stats_line("c vrep replace time"
+ , globalStats.cpu_time
+ , stats_line_percent(globalStats.cpu_time, global_cpu_time)
+ , "% time"
+ );
+
+ print_stats_line("c vrep tree roots"
+ , getNumTrees()
+ );
+
+ print_stats_line("c vrep trees' crown"
+ , get_num_replaced_vars()
+ , float_div(get_num_replaced_vars(), getNumTrees())
+ , "leafs/tree"
+ );
+}
+
+void VarReplacer::Stats::print(const size_t nVars) const
+{
+ cout << "c --------- VAR REPLACE STATS ----------" << endl;
+ print_stats_line("c time"
+ , cpu_time
+ , float_div(cpu_time, numCalls)
+ , "per call"
+ );
+
+ print_stats_line("c trees' crown"
+ , actuallyReplacedVars
+ , stats_line_percent(actuallyReplacedVars, nVars)
+ , "% of vars"
+ );
+
+ print_stats_line("c 0-depth assigns"
+ , zeroDepthAssigns
+ , stats_line_percent(zeroDepthAssigns, nVars)
+ , "% vars"
+ );
+
+ print_stats_line("c lits replaced"
+ , replacedLits
+ );
+
+ print_stats_line("c bin cls removed"
+ , removedBinClauses
+ );
+
+ print_stats_line("c long cls removed"
+ , removedLongClauses
+ );
+
+ print_stats_line("c long lits removed"
+ , removedLongLits
+ );
+
+ print_stats_line("c bogoprops"
+ , bogoprops
+ );
+ cout << "c --------- VAR REPLACE STATS END ----------" << endl;
+}
+
+void VarReplacer::Stats::print_short(const Solver* solver) const
+{
+ cout
+ << "c [vrep]"
+ << " vars " << actuallyReplacedVars
+ << " lits " << replacedLits
+ << " rem-bin-cls " << removedBinClauses
+ << " rem-long-cls " << removedLongClauses
+ << " BP " << bogoprops/(1000*1000) << "M"
+ << solver->conf.print_times(cpu_time)
+ << endl;
+}
+
+VarReplacer::Stats& VarReplacer::Stats::operator+=(const Stats& other)
+{
+ numCalls += other.numCalls;
+ cpu_time += other.cpu_time;
+ replacedLits += other.replacedLits;
+ zeroDepthAssigns += other.zeroDepthAssigns;
+ actuallyReplacedVars += other.actuallyReplacedVars;
+ removedBinClauses += other.removedBinClauses;
+ removedLongClauses += other.removedLongClauses;
+ removedLongLits += other.removedLongLits;
+ bogoprops += other.bogoprops;
+
+ return *this;
+}
+
+void VarReplacer::build_fast_inter_replace_lookup()
+{
+ fast_inter_replace_lookup.clear();
+ fast_inter_replace_lookup.reserve(solver->nVars());
+ for(uint32_t var = 0; var < solver->nVars(); var++) {
+ fast_inter_replace_lookup.push_back(get_lit_replaced_with(Lit(var, false)));
+ }
+}
+
+void VarReplacer::destroy_fast_inter_replace_lookup()
+{
+ vector<Lit> tmp;
+ fast_inter_replace_lookup.swap(tmp);
+}
+
+Lit VarReplacer::get_lit_replaced_with(Lit lit) const
+{
+ lit = solver->map_inter_to_outer(lit);
+ Lit lit2 = get_lit_replaced_with_outer(lit);
+ return solver->map_outer_to_inter(lit2);
+}
+
+uint32_t VarReplacer::get_var_replaced_with(uint32_t var) const
+{
+ var = solver->map_inter_to_outer(var);
+ uint32_t var2 = table[var].var();
+ return solver->map_outer_to_inter(var2);
+}
+
+vector<uint32_t> VarReplacer::get_vars_replacing(uint32_t var) const
+{
+ vector<uint32_t> ret;
+ var = solver->map_inter_to_outer(var);
+ map<uint32_t, vector<uint32_t> >::const_iterator it = reverseTable.find(var);
+ if (it != reverseTable.end()) {
+ for(uint32_t v: it->second) {
+ ret.push_back(solver->map_outer_to_inter(v));
+ }
+ }
+
+ return ret;
+}
+
+vector<pair<Lit, Lit> > VarReplacer::get_all_binary_xors_outer() const
+{
+ vector<pair<Lit, Lit> > ret;
+ for(size_t i = 0; i < table.size(); i++) {
+ if (table[i] != Lit(i, false)) {
+ ret.push_back(std::make_pair(Lit(i, false), table[i]));
+ }
+ }
+
+ return ret;
+}
+
+void VarReplacer::save_state(SimpleOutFile& f) const
+{
+ f.put_vector(table);
+ f.put_uint32_t(replacedVars);
+
+ f.put_uint32_t(reverseTable.size());
+ for(const std::pair<uint32_t, vector<uint32_t> >& elem: reverseTable)
+ {
+ f.put_uint32_t(elem.first);
+ f.put_vector(elem.second);
+ }
+}
+void VarReplacer::load_state(SimpleInFile& f)
+{
+ f.get_vector(table);
+ replacedVars = f.get_uint32_t();
+
+ vector<uint32_t> point_to;
+ uint32_t num = f.get_uint32_t();
+ for(uint32_t i = 0; i < num; i++)
+ {
+ uint32_t v = f.get_uint32_t();
+ point_to.clear();
+ f.get_vector(point_to);
+ reverseTable[v] = point_to;
+ }
+}
+
+bool VarReplacer::get_scc_depth_warning_triggered() const
+{
+ return scc_finder->depth_warning_triggered();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h b/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
new file mode 100644
index 000000000..5435cae45
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/varreplacer.h
@@ -0,0 +1,314 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef VARREPLACER_H
+#define VARREPLACER_H
+
+#include <map>
+#include <vector>
+#include <utility>
+
+#include "constants.h"
+#include "solvertypes.h"
+#include "clause.h"
+#include "watcharray.h"
+#include "simplefile.h"
+
+namespace CMSat {
+
+//#define VERBOSE_DEBUG
+
+using std::map;
+using std::vector;
+class Solver;
+class SCCFinder;
+
+/**
+@brief Replaces variables with their anti/equivalents
+*/
+class VarReplacer
+{
+ public:
+ explicit VarReplacer(Solver* solver);
+ ~VarReplacer();
+ void new_var(const uint32_t orig_outer);
+ void new_vars(const size_t n);
+ void save_on_var_memory();
+ bool replace_if_enough_is_found(const size_t limit = 0, uint64_t* bogoprops = NULL, bool* replaced = NULL);
+ uint32_t print_equivalent_literals(bool outer_numbering, std::ostream *os = NULL) const;
+ void print_some_stats(const double global_cpu_time) const;
+ const SCCFinder* get_scc_finder() const;
+
+ void extend_model_already_set();
+ void extend_model_set_undef();
+ void extend_model(const uint32_t var);
+
+ uint32_t get_var_replaced_with(const uint32_t var) const;
+ uint32_t get_var_replaced_with(const Lit lit) const;
+ Lit get_lit_replaced_with(Lit lit) const;
+ Lit get_lit_replaced_with_outer(Lit lit) const;
+ uint32_t get_var_replaced_with_outer(uint32_t var) const;
+ bool var_is_replacing(const uint32_t var);
+
+ vector<uint32_t> get_vars_replacing(uint32_t var) const;
+ void updateVars(
+ const vector<uint32_t>& outerToInter
+ , const vector<uint32_t>& interToOuter
+ );
+
+ //Stats
+ size_t get_num_replaced_vars() const;
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ Stats& operator+=(const Stats& other);
+ void print(const size_t nVars) const;
+ void print_short(const Solver* solver) const;
+
+ uint64_t numCalls = 0;
+ double cpu_time = 0;
+ uint64_t replacedLits = 0;
+ uint64_t zeroDepthAssigns = 0;
+ uint64_t actuallyReplacedVars = 0;
+ uint64_t removedBinClauses = 0;
+ uint64_t removedLongClauses = 0;
+ uint64_t removedLongLits = 0;
+ uint64_t bogoprops = 0;
+ };
+ const Stats& get_stats() const;
+ size_t mem_used() const;
+ vector<std::pair<Lit, Lit> > get_all_binary_xors_outer() const;
+ vector<uint32_t> get_vars_replacing_others() const;
+ bool get_scc_depth_warning_triggered() const;
+
+ void save_state(SimpleOutFile& f) const;
+ void load_state(SimpleInFile& f);
+
+ private:
+ Solver* solver;
+ SCCFinder* scc_finder;
+ vector<Clause*> delayed_attach_or_free;
+
+ void check_no_replaced_var_set() const;
+ vector<Lit> fast_inter_replace_lookup;
+ void build_fast_inter_replace_lookup();
+ void destroy_fast_inter_replace_lookup();
+ Lit get_lit_replaced_with_fast(const Lit lit) const {
+ return fast_inter_replace_lookup[lit.var()] ^ lit.sign();
+ }
+ uint32_t get_var_replaced_with_fast(const uint32_t var) const {
+ return fast_inter_replace_lookup[var].var();
+ }
+ bool replace_xor_clauses();
+
+ vector<Lit> ps_tmp;
+ bool perform_replace();
+ bool add_xor_as_bins(const BinaryXor& bin_xor);
+ bool replace(
+ uint32_t lit1
+ , uint32_t lit2
+ , bool xor_is_true
+ );
+
+ bool isReplaced(const uint32_t var) const;
+ bool isReplaced(const Lit lit) const;
+ bool isReplaced_fast(const uint32_t var) const;
+ bool isReplaced_fast(const Lit lit) const;
+
+ size_t getNumTrees() const;
+ void set_sub_var_during_solution_extension(uint32_t var, uint32_t sub_var);
+ void checkUnsetSanity();
+
+ bool replace_set(vector<ClOffset>& cs);
+ void attach_delayed_attach();
+ void update_all_vardata_activities();
+ void update_vardata_and_activities(
+ const uint32_t orig
+ , const uint32_t replaced
+ );
+ bool enqueueDelayedEnqueue();
+
+ //Helpers for replace()
+ void replaceChecks(const uint32_t var1, const uint32_t var2) const;
+ bool handleAlreadyReplaced(const Lit lit1, const Lit lit2);
+ bool replace_vars_already_set(
+ const Lit lit1
+ , const lbool val1
+ , const Lit lit2
+ , const lbool val2
+ );
+ bool handleOneSet(
+ const Lit lit1
+ , const lbool val1
+ , const Lit lit2
+ , const lbool val2
+ );
+
+ //Temporary used in replaceImplicit
+ vector<BinaryClause> delayed_attach_bin;
+ bool replaceImplicit();
+ struct ImplicitTmpStats
+ {
+ ImplicitTmpStats() :
+ removedRedBin(0)
+ , removedIrredBin(0)
+ {
+ }
+
+ void remove(const Watched& ws)
+ {
+ if (ws.isBin()) {
+ if (ws.red()) {
+ removedRedBin++;
+ } else {
+ removedIrredBin++;
+ }
+ } else {
+ assert(false);
+ }
+ }
+
+ void clear()
+ {
+ *this = ImplicitTmpStats();
+ }
+
+ size_t removedRedBin;
+ size_t removedIrredBin;
+ };
+ ImplicitTmpStats impl_tmp_stats;
+ void updateBin(
+ Watched* i
+ , Watched*& j
+ , const Lit origLit1
+ , const Lit origLit2
+ , Lit lit1
+ , Lit lit2
+ );
+ void newBinClause(
+ Lit origLit1
+ , Lit origLit2
+ , Lit origLit3
+ , Lit lit1
+ , Lit lit2
+ , bool red
+ );
+ void updateStatsFromImplStats();
+
+ bool handleUpdatedClause(Clause& c, const Lit origLit1, const Lit origLit2);
+
+ //While replacing the implicit clauses we cannot enqeue
+ vector<Lit> delayedEnqueue;
+ bool update_table_and_reversetable(const Lit lit1, const Lit lit2);
+ void setAllThatPointsHereTo(const uint32_t var, const Lit lit);
+
+ //Mapping tables
+ vector<Lit> table; ///<Stores which variables have been replaced by which literals. Index by: table[VAR]
+ map<uint32_t, vector<uint32_t> > reverseTable; ///<mapping of variable to set of variables it replaces
+
+ //Stats
+ void printReplaceStats() const;
+ uint64_t replacedVars = 0; ///<Num vars replaced during var-replacement
+ uint64_t lastReplacedVars = 0;
+ Stats runStats;
+ Stats globalStats;
+};
+
+inline size_t VarReplacer::get_num_replaced_vars() const
+{
+ return replacedVars;
+}
+
+inline bool VarReplacer::isReplaced(const uint32_t var) const
+{
+ return get_var_replaced_with(var) != var;
+}
+
+inline bool VarReplacer::isReplaced_fast(const uint32_t var) const
+{
+ return get_var_replaced_with_fast(var) != var;
+}
+
+inline uint32_t VarReplacer::get_var_replaced_with(const Lit lit) const
+{
+ return get_var_replaced_with(lit.var());
+}
+
+inline bool VarReplacer::isReplaced(const Lit lit) const
+{
+ return isReplaced(lit.var());
+}
+
+inline bool VarReplacer::isReplaced_fast(const Lit lit) const
+{
+ return isReplaced_fast(lit.var());
+}
+
+inline size_t VarReplacer::getNumTrees() const
+{
+ return reverseTable.size();
+}
+
+inline vector<uint32_t> VarReplacer::get_vars_replacing_others() const
+{
+ vector<uint32_t> replacingVars;
+ for(const auto& it: reverseTable) {
+ replacingVars.push_back(it.first);
+ }
+ return replacingVars;
+}
+
+inline bool VarReplacer::var_is_replacing(const uint32_t var)
+{
+ auto it = reverseTable.find(var);
+ return it != reverseTable.end();
+}
+
+inline const VarReplacer::Stats& VarReplacer::get_stats() const
+{
+ return globalStats;
+}
+
+inline const SCCFinder* VarReplacer::get_scc_finder() const
+{
+ return scc_finder;
+}
+
+inline Lit VarReplacer::get_lit_replaced_with_outer(Lit lit) const
+{
+ Lit lit2 = table[lit.var()] ^ lit.sign();
+ return lit2;
+}
+
+inline uint32_t VarReplacer::get_var_replaced_with_outer(uint32_t var) const
+{
+ return table[var].var();
+}
+
+} //end namespace
+
+#endif //VARREPLACER_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h b/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
new file mode 100644
index 000000000..35726ae4a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/varupdatehelper.h
@@ -0,0 +1,134 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __VARUPDATE_HELPER_H__
+#define __VARUPDATE_HELPER_H__
+
+#include "solvertypes.h"
+#include <iostream>
+#include <set>
+
+namespace CMSat {
+
+uint32_t getUpdatedVar(uint32_t toUpdate, const vector< uint32_t >& mapper);
+Lit getUpdatedLit(Lit toUpdate, const vector< uint32_t >& mapper);
+
+template<typename T>
+void updateArray(T& toUpdate, const vector< uint32_t >& mapper)
+{
+ T backup = toUpdate;
+ for(size_t i = 0; i < toUpdate.size(); i++) {
+ toUpdate.at(i) = backup.at(mapper.at(i));
+ }
+}
+
+template<typename T>
+void updateArrayRev(T& toUpdate, const vector< uint32_t >& mapper)
+{
+ assert(toUpdate.size() >= mapper.size());
+ T backup = toUpdate;
+ for(size_t i = 0; i < mapper.size(); i++) {
+ toUpdate[mapper[i]] = backup[i];
+ }
+}
+
+template<typename T>
+void updateArrayMapCopy(T& toUpdate, const vector< uint32_t >& mapper)
+{
+ //assert(toUpdate.size() == mapper.size());
+ T backup = toUpdate;
+ for(size_t i = 0; i < toUpdate.size(); i++) {
+ if (backup[i] < mapper.size()) {
+ toUpdate[i] = mapper[backup[i]];
+ }
+ }
+}
+
+template<typename T>
+void updateLitsMap(T& toUpdate, const vector< uint32_t >& mapper)
+{
+ for(size_t i = 0; i < toUpdate.size(); i++) {
+ if (toUpdate[i].var() < mapper.size()) {
+ toUpdate[i] = getUpdatedLit(toUpdate[i], mapper);
+ }
+ }
+}
+
+template<typename T>
+void updateVarsMap(T& toUpdate, const vector< uint32_t >& mapper)
+{
+ for(size_t i = 0; i < toUpdate.size(); i++) {
+ if (toUpdate[i] < mapper.size()) {
+ toUpdate[i] = getUpdatedVar(toUpdate[i], mapper);
+ }
+ }
+}
+
+inline Lit getUpdatedLit(Lit toUpdate, const vector< uint32_t >& mapper)
+{
+ return Lit(getUpdatedVar(toUpdate.var(), mapper), toUpdate.sign());
+}
+
+inline uint32_t getUpdatedVar(uint32_t toUpdate, const vector< uint32_t >& mapper)
+{
+ return mapper.at(toUpdate);
+}
+
+template<typename T, typename T2>
+inline void updateBySwap(T& toUpdate, T2& seen, const vector< uint32_t >& mapper)
+{
+ for(size_t i = 0; i < toUpdate.size(); i++) {
+ if (seen.at(i)) {
+ //Already updated, skip
+ continue;
+ }
+
+ //Swap circularly until we reach full circle
+ uint32_t var = i;
+ const uint32_t origStart = var;
+ while(true) {
+ uint32_t swapwith = mapper.at(var);
+ assert(seen.at(swapwith) == 0);
+ //std::cout << "Swapping " << var << " with " << swapwith << std::endl;
+ using std::swap;
+ swap(toUpdate.at(var), toUpdate.at(swapwith));
+ seen.at(swapwith) = 1;
+ var = swapwith;
+
+ //Full circle
+ if (mapper.at(var) == origStart) {
+ seen.at(mapper.at(var)) = 1;
+ break;
+ }
+ };
+ }
+
+ //clear seen
+ for(size_t i = 0; i < toUpdate.size(); i++) {
+ assert(seen.at(i) == 1);
+ seen.at(i) = 0;
+ }
+}
+
+} //end namespace
+
+#endif //__VARUPDATE_HELPER_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h b/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
new file mode 100644
index 000000000..f959ff21a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/watchalgos.h
@@ -0,0 +1,173 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __WATCHALGOS_H__
+#define __WATCHALGOS_H__
+
+#include "watched.h"
+#include "watcharray.h"
+#include "clauseallocator.h"
+
+namespace CMSat {
+
+//////////////////
+// NORMAL Clause
+//////////////////
+static inline bool findWCl(watch_subarray_const ws, const ClOffset c)
+{
+ const Watched* i = ws.begin(), *end = ws.end();
+ for (; i != end && (!i->isClause() || i->get_offset() != c); i++);
+ return i != end;
+}
+
+static inline void removeWCl(watch_subarray ws, const ClOffset c)
+{
+ Watched* i = ws.begin(), *end = ws.end();
+ for (; i != end && (!i->isClause() || i->get_offset() != c); i++);
+ assert(i != end);
+ Watched* j = i;
+ i++;
+ for (; i != end; j++, i++) *j = *i;
+ ws.shrink_(1);
+}
+
+//////////////////
+// BINARY Clause
+//////////////////
+
+inline void removeWBin(
+ watch_array &wsFull
+ , const Lit lit1
+ , const Lit lit2
+ , const bool red
+) {
+ watch_subarray ws = wsFull[lit1];
+ Watched *i = ws.begin(), *end = ws.end();
+ for (; i != end && (
+ !i->isBin()
+ || i->lit2() != lit2
+ || i->red() != red
+ ); i++);
+
+ assert(i != end);
+ Watched *j = i;
+ i++;
+ for (; i != end; j++, i++) *j = *i;
+ ws.shrink_(1);
+}
+
+inline void removeWBin_change_order(
+ watch_array &wsFull
+ , const Lit lit1
+ , const Lit lit2
+ , const bool red
+) {
+ watch_subarray ws = wsFull[lit1];
+ Watched *i = ws.begin(), *end = ws.end();
+ for (; i != end && (
+ !i->isBin()
+ || i->lit2() != lit2
+ || i->red() != red
+ ); i++);
+
+ assert(i != end);
+ *i = ws[ws.size()-1];
+ ws.shrink_(1);
+}
+
+inline bool removeWBin_except_marked(
+ watch_array &wsFull
+ , const Lit lit1
+ , const Lit lit2
+ , const bool red
+) {
+ watch_subarray ws = wsFull[lit1];
+ Watched *i = ws.begin(), *end = ws.end();
+ for (; i != end && (
+ !i->isBin()
+ || i->lit2() != lit2
+ || i->red() != red
+ ); i++);
+ assert(i != end);
+
+ if (i->bin_cl_marked()) {
+ return false;
+ }
+
+ Watched *j = i;
+ i++;
+ for (; i != end; j++, i++) *j = *i;
+ ws.shrink_(1);
+
+ return true;
+}
+
+inline const Watched& findWatchedOfBin(
+ const watch_array& wsFull
+ , const Lit lit1
+ , const Lit lit2
+ , const bool red
+) {
+ watch_subarray_const ws = wsFull[lit1];
+ for (const Watched *i = ws.begin(), *end = ws.end(); i != end; i++) {
+ if (i->isBin() && i->lit2() == lit2 && i->red() == red)
+ return *i;
+ }
+
+ assert(false);
+ return *ws.begin();
+}
+
+inline Watched& findWatchedOfBin(
+ watch_array& wsFull
+ , const Lit lit1
+ , const Lit lit2
+ , const bool red
+) {
+ watch_subarray ws = wsFull[lit1];
+ for (Watched *i = ws.begin(), *end = ws.end(); i != end; i++) {
+ if (i->isBin() && i->lit2() == lit2 && i->red() == red)
+ return *i;
+ }
+
+ assert(false);
+ return *ws.begin();
+}
+
+static inline void removeWXCl(watch_array& wsFull
+ , const Lit lit
+ , const ClOffset offs
+) {
+ watch_subarray ws = wsFull[lit];
+ Watched *i = ws.begin(), *end = ws.end();
+ for (; i != end && (!i->isClause() || i->get_offset() != offs); i++);
+ assert(i != end);
+ Watched *j = i;
+ i++;
+ for (; i != end; j++, i++) *j = *i;
+ ws.shrink_(1);
+}
+
+} //end namespace
+
+
+#endif //__WATCHALGOS_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h b/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
new file mode 100644
index 000000000..32e76b10e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/watcharray.h
@@ -0,0 +1,186 @@
+/*************************************************************
+MiniSat --- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat --- Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***************************************************************/
+
+#ifndef __WATCHARRAY_H__
+#define __WATCHARRAY_H__
+
+#include "watched.h"
+#include "Vec.h"
+#include <vector>
+
+namespace CMSat {
+using std::vector;
+
+typedef vec<Watched>& watch_subarray;
+typedef const vec<Watched>& watch_subarray_const;
+
+class watch_array
+{
+public:
+ vec<vec<Watched> > watches;
+ vector<Lit> smudged_list;
+ vector<char> smudged;
+
+ void smudge(const Lit lit) {
+ if (!smudged[lit.toInt()]) {
+ smudged_list.push_back(lit);
+ smudged[lit.toInt()] = true;
+ }
+ }
+
+ const vector<Lit>& get_smudged_list() const {
+ return smudged_list;
+ }
+
+ void clear_smudged()
+ {
+ for(const Lit lit: smudged_list) {
+ assert(smudged[lit.toInt()]);
+ smudged[lit.toInt()] = false;
+ }
+ smudged_list.clear();
+ }
+
+ watch_subarray operator[](Lit pos)
+ {
+ return watches[pos.toInt()];
+ }
+
+ watch_subarray at(size_t pos)
+ {
+ assert(watches.size() > pos);
+ return watches[pos];
+ }
+
+ watch_subarray_const operator[](Lit at) const
+ {
+ return watches[at.toInt()];
+ }
+
+ watch_subarray_const at(size_t pos) const
+ {
+ assert(watches.size() > pos);
+ return watches[pos];
+ }
+
+ void resize(const size_t new_size)
+ {
+ assert(smudged_list.empty());
+ if (watches.size() < new_size) {
+ watches.growTo(new_size);
+ } else {
+ watches.shrink(watches.size()-new_size);
+ }
+ smudged.resize(new_size, false);
+ }
+
+ void insert(uint32_t num)
+ {
+ smudged.insert(smudged.end(), num, false);
+ watches.insert(num);
+ }
+
+ size_t mem_used() const
+ {
+ double mem = watches.capacity()*sizeof(vec<Watched>);
+ for(size_t i = 0; i < watches.size(); i++) {
+ //1.2 is overhead
+ mem += (double)watches[i].capacity()*(double)sizeof(Watched)*1.2;
+ }
+ mem += smudged.capacity()*sizeof(char);
+ mem += smudged_list.capacity()*sizeof(Lit);
+ return mem;
+ }
+
+ size_t size() const
+ {
+ return watches.size();
+ }
+
+ void prefetch(const size_t at) const
+ {
+ __builtin_prefetch(watches[at].data);
+ }
+ typedef vec<Watched>* iterator;
+ typedef const vec<Watched>* const_iterator;
+
+ iterator begin()
+ {
+ return watches.begin();
+ }
+
+ iterator end()
+ {
+ return watches.end();
+ }
+
+ const_iterator begin() const
+ {
+ return watches.begin();
+ }
+
+ const_iterator end() const
+ {
+ return watches.end();
+ }
+
+ void consolidate()
+ {
+ /*for(auto& ws: watches) {
+ ws.shrink_to_fit();
+ }*/
+ watches.shrink_to_fit();
+ }
+
+ void print_stat()
+ {
+ }
+
+ size_t mem_used_alloc() const
+ {
+ size_t mem = 0;
+ for(auto& ws: watches) {
+ mem += ws.capacity()*sizeof(Watched);
+ }
+
+ return mem;
+ }
+
+ size_t mem_used_array() const
+ {
+ size_t mem = 0;
+ mem += watches.capacity()*sizeof(vector<Watched>);
+ mem += sizeof(watch_array);
+ return mem;
+ }
+};
+
+inline void swap(watch_subarray a, watch_subarray b)
+{
+ a.swap(b);
+}
+
+
+} //End of namespace
+
+#endif //__WATCHARRAY_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.cpp b/cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.cpp
new file mode 100644
index 000000000..be79db303
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.cpp
@@ -0,0 +1,122 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "watcharray.h"
+#include <algorithm>
+using namespace CMSat;
+
+void watch_array::consolidate()
+{
+ size_t total_needed = total_needed_during_consolidate();
+
+ vector<Mem> newmems;
+ size_t at_watches = 0;
+ //size_t last_needed = 0;
+ while(total_needed > 0) {
+ Mem newmem;
+ size_t needed = std::min<size_t>(total_needed, WATCH_MAX_SIZE_ONE_ALLOC);
+ assert(needed > 0);
+
+ //If last one was larger than this, let's take the last one
+ //needed = std::max<size_t>(needed, last_needed/2);
+ //last_needed = needed;
+ total_needed -= needed;
+
+ newmem.alloc = needed;
+ newmem.base_ptr = (Watched*)malloc(newmem.alloc*sizeof(Watched));
+ for(; at_watches < watches.size(); at_watches++) {
+ //Not used
+ if (watches[at_watches].size == 0) {
+ watches[at_watches] = Elem();
+ continue;
+ }
+
+ Elem& ws = watches[at_watches];
+
+ //Allow for some space to breathe
+ size_t toalloc = extra_space_during_consolidate(ws.size);
+
+ //Does not fit into this 'newmem'
+ if (newmem.next_space_offset + toalloc > newmem.alloc) {
+ break;
+ }
+
+ ws.alloc = toalloc;
+ Watched* orig_ptr = mems[ws.num].base_ptr + ws.offset;
+ Watched* new_ptr = newmem.base_ptr + newmem.next_space_offset;
+ memmove(new_ptr, orig_ptr, ws.size * sizeof(Watched));
+ ws.num = newmems.size();
+ ws.offset = newmem.next_space_offset;
+ //ws.accessed = 0;
+ newmem.next_space_offset += ws.alloc;
+ }
+ newmems.push_back(newmem);
+ }
+ assert(at_watches == watches.size());
+ assert(total_needed == 0);
+
+ for(size_t i = 0; i < mems.size(); i++) {
+ free(mems[i].base_ptr);
+ }
+
+ mems = newmems;
+ for(auto& mem: free_mem) {
+ mem.clear();
+ }
+ free_mem_used = 0;
+ free_mem_not_used = 0;
+}
+
+void watch_array::print_stat(bool detailed) const
+{
+ cout
+ << "c [watch] mems.size(): " << mems.size()
+ << " free mem used/unused:"
+ << free_mem_used << "/" << free_mem_not_used
+ << " ("
+ << std::fixed << std::setprecision(2)
+ << stats_line_percent(free_mem_used, free_mem_not_used+free_mem_used)
+ << "%)"
+ << endl;
+
+ if (detailed) {
+ for(size_t i = 0; i < mems.size(); i++) {
+ const Mem& mem = mems[i];
+ cout
+ << " c [watch] mem " << i
+ << " alloc: " << mem.alloc
+ << " next_space_offset: " << mem.next_space_offset
+ << " base_ptr: " << mem.base_ptr
+ << endl;
+ }
+
+ cout << "c [watch] free stats:" << endl;
+ for(size_t i = 0; i < free_mem.size(); i++)
+ {
+ cout << "c [watch] ->free_mem[" << i << "]: " << free_mem[i].size() << endl;
+ }
+ }
+
+ /*for(size_t i = 0; i < watches.size(); i++) {
+ cout << "ws[" << i << "] accessed: " << watches[i].accessed << " size: " << watches[i].size << endl;
+ }*/
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.h b/cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.h
new file mode 100644
index 000000000..40ae3e3ba
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/watcharray_handrolled.h
@@ -0,0 +1,551 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __WATCHARRAY_H__
+#define __WATCHARRAY_H__
+
+#include <stdlib.h>
+#include "watched.h"
+#include <vector>
+
+namespace CMSat {
+using std::vector;
+
+struct watch_array;
+
+struct Elem
+{
+ Elem() :
+ num(0)
+ , offset(0)
+ {}
+
+ uint32_t num:8;
+ uint32_t offset:24;
+ uint32_t size = 0;
+ uint32_t alloc = 0;
+ //uint32_t accessed = 0;
+
+ void print_stat() const
+ {
+ cout
+ << "c elem."
+ << " num: " << num
+ << " offset:" << offset
+ << " size" << size
+ << " alloc" << alloc
+ << endl;
+ }
+};
+
+struct Mem
+{
+ uint32_t alloc = 0;
+ Watched* base_ptr = NULL;
+ uint32_t next_space_offset = 0;
+};
+
+struct OffsAndNum
+{
+ OffsAndNum() :
+ offset(0)
+ , num(0)
+ {}
+
+ OffsAndNum(uint32_t _offset, uint32_t _num) :
+ offset(_offset)
+ , num(_num)
+ {}
+
+ uint32_t offset;
+ uint32_t num;
+};
+
+struct watch_subarray
+{
+ vector<Elem>::iterator base_at;
+ watch_array* base;
+ explicit watch_subarray(vector<Elem>::iterator _base_at, watch_array* _base) :
+ base_at(_base_at)
+ , base(_base)
+ {}
+
+ Watched& operator[](const uint32_t at);
+ void clear();
+ uint32_t size() const;
+ bool empty() const;
+ Watched* begin();
+ Watched* end();
+ const Watched* begin() const;
+ const Watched* end() const;
+ void shrink(const uint32_t num);
+ void shrink_(const uint32_t num);
+ void push(const Watched& watched);
+ void get_space_for_push();
+
+ typedef Watched* iterator;
+ typedef const Watched* const_iterator;
+};
+
+struct watch_subarray_const
+{
+ vector<Elem>::const_iterator base_at;
+ const watch_array* base;
+ explicit watch_subarray_const(vector<Elem>::const_iterator _base_at, const watch_array* _base) :
+ base_at(_base_at)
+ , base(_base)
+ {}
+
+ watch_subarray_const(const watch_subarray& other) :
+ base_at(other.base_at)
+ , base(other.base)
+ {}
+
+ void print_stat() const;
+ const Watched& operator[](const uint32_t at) const;
+ uint32_t size() const;
+ bool empty() const;
+ const Watched* begin() const;
+ const Watched* end() const;
+ typedef const Watched* const_iterator;
+};
+
+struct watch_array
+{
+ const static size_t WATCH_MIN_SIZE_ONE_ALLOC_FIRST = 1ULL*1000ULL*1000ULL;
+ const static size_t WATCH_MIN_SIZE_ONE_ALLOC_LATER = 50ULL*1000ULL*1000ULL;
+ const static size_t WATCH_MAX_SIZE_ONE_ALLOC = (1ULL<<24)-1;
+
+ vector<Elem> watches;
+ vector<Mem> mems;
+ size_t free_mem_used = 0;
+ size_t free_mem_not_used = 0;
+
+ //at least 2**N elements in there
+ vector<vector<OffsAndNum> > free_mem;
+
+ watch_array()
+ {
+ //We need at least 1
+ Mem new_mem;
+ size_t elems = WATCH_MIN_SIZE_ONE_ALLOC_FIRST;
+ new_mem.base_ptr = (Watched*)malloc(elems*sizeof(Watched));
+ new_mem.alloc = elems;
+ mems.push_back(new_mem);
+
+ free_mem.resize(20);
+ }
+
+ ~watch_array()
+ {
+ for(size_t i = 0; i < mems.size(); i++) {
+ free(mems[i].base_ptr);
+ }
+ }
+
+ uint32_t get_suitable_base(uint32_t elems)
+ {
+ //print_stat();
+
+ assert(mems.size() > 0);
+ size_t last_alloc = mems[0].alloc;
+ for(size_t i = 0; i < mems.size(); i++) {
+ if (mems[i].next_space_offset + elems < mems[i].alloc) {
+ return i;
+ }
+ last_alloc = mems[i].alloc;
+ }
+ assert(mems.size() < 255);
+
+ Mem new_mem;
+ new_mem.alloc = std::max<size_t>(3*last_alloc, WATCH_MIN_SIZE_ONE_ALLOC_LATER);
+ new_mem.alloc = std::min<size_t>(3*last_alloc, WATCH_MAX_SIZE_ONE_ALLOC);
+ new_mem.base_ptr = (Watched*)malloc(new_mem.alloc*sizeof(Watched));
+ assert(new_mem.base_ptr != NULL);
+ mems.push_back(new_mem);
+ return mems.size()-1;
+ }
+
+ bool find_free_space(OffsAndNum& toret, uint32_t size)
+ {
+ size_t bucket = get_bucket(size);
+ if (free_mem.size() <= bucket
+ || free_mem[bucket].empty()
+ ) {
+ free_mem_not_used++;
+ return false;
+ }
+
+ toret = free_mem[bucket].back();
+ free_mem[bucket].pop_back();
+ free_mem_used++;
+ return true;
+ }
+
+ OffsAndNum get_space(uint32_t elems)
+ {
+ OffsAndNum toret;
+ if (find_free_space(toret, elems))
+ return toret;
+
+ uint32_t num = get_suitable_base(elems);
+ Mem& mem = mems[num];
+ assert(mem.next_space_offset + elems < mem.alloc);
+
+ uint32_t off_to_ret = mem.next_space_offset;
+ mem.next_space_offset += elems;
+
+ toret = OffsAndNum(off_to_ret, num);
+ return toret;
+ }
+
+ size_t extra_space_during_consolidate(size_t orig_size)
+ {
+ if (orig_size == 1)
+ return 2;
+
+ unsigned bucket = get_bucket(orig_size);
+ if (2U<<bucket == orig_size)
+ return orig_size;
+ else
+ return 2U<<(bucket+1);
+ }
+
+ size_t total_needed_during_consolidate()
+ {
+ size_t total_needed = 0;
+ for(size_t i = 0; i < watches.size(); i++) {
+ if (watches[i].size != 0) {
+ total_needed += extra_space_during_consolidate(watches[i].size);
+ }
+ }
+ total_needed *= 1.2;
+ total_needed = std::max<size_t>(total_needed, WATCH_MIN_SIZE_ONE_ALLOC_FIRST);
+
+ return total_needed;
+ }
+
+ void consolidate();
+ void print_stat(bool detailed = false) const;
+
+ unsigned get_bucket(unsigned size)
+ {
+ //assert(size >= 2);
+ int at = ((int)((sizeof(unsigned)*8))-__builtin_clz(size))-2;
+ //assert(at >= 0);
+ return at;
+ }
+
+ void delete_offset(uint32_t num, uint32_t offs, uint32_t size)
+ {
+ size_t bucket = get_bucket(size);
+ //assert(size == 2U<<bucket);
+
+ if (bucket >= free_mem.size()) {
+ return;
+ }
+
+ free_mem[bucket].push_back(OffsAndNum(offs, num));
+ }
+
+ size_t mem_used_alloc() const
+ {
+ size_t total = 0;
+ for(size_t i = 0; i < mems.size(); i++) {
+ total += mems[i].alloc*sizeof(Watched);
+ }
+ return total;
+ }
+
+ size_t mem_used_array() const
+ {
+ size_t total = 0;
+ total += watches.capacity() * sizeof(Elem);
+ total += mems.capacity() * sizeof(Mem);
+ return total;
+ }
+
+ watch_subarray operator[](size_t at)
+ {
+ assert(watches.size() > at);
+ return watch_subarray(watches.begin() + at, this);
+ }
+
+ watch_subarray_const operator[](size_t at) const
+ {
+ assert(watches.size() > at);
+ return watch_subarray_const(watches.begin() + at, this);
+ }
+
+ void resize(const size_t new_size)
+ {
+ watches.resize(new_size);
+ }
+
+ uint32_t size() const
+ {
+ return watches.size();
+ }
+
+ void shrink_to_fit()
+ {
+ watches.shrink_to_fit();
+ }
+
+ void prefetch(const size_t at) const
+ {
+ __builtin_prefetch(mems[watches[at].num].base_ptr + watches[at].offset);
+ }
+
+ struct iterator
+ {
+ vector<Elem>::iterator it;
+ watch_array* base;
+ explicit iterator(vector<Elem>::iterator _it, watch_array* _base) :
+ it(_it)
+ , base(_base)
+ {}
+
+ iterator operator++()
+ {
+ ++it;
+ return *this;
+ }
+
+ watch_subarray operator*()
+ {
+ return watch_subarray(it, base);
+ }
+
+ bool operator==(const iterator& it2) const
+ {
+ return it == it2.it;
+ }
+
+ bool operator!=(const iterator& it2) const
+ {
+ return it != it2.it;
+ }
+
+ friend size_t operator-(const iterator& lhs, const iterator& rhs);
+ };
+
+ struct const_iterator
+ {
+ vector<Elem>::const_iterator it;
+ const watch_array* base;
+ explicit const_iterator(vector<Elem>::const_iterator _it, const watch_array* _base) :
+ it(_it)
+ , base(_base)
+ {}
+
+ const_iterator(const iterator& other) :
+ it(other.it)
+ , base(other.base)
+ {}
+
+ const_iterator operator++()
+ {
+ ++it;
+ return *this;
+ }
+
+ const watch_subarray_const operator*() const
+ {
+ return watch_subarray_const(it, base);
+ }
+
+ bool operator==(const const_iterator& it2) const
+ {
+ return it == it2.it;
+ }
+
+ bool operator!=(const const_iterator& it2) const
+ {
+ return it != it2.it;
+ }
+
+ friend size_t operator-(const const_iterator& lhs, const const_iterator& rhs);
+ };
+
+ iterator begin()
+ {
+ return iterator(watches.begin(), this);
+ }
+
+ iterator end()
+ {
+ return iterator(watches.end(), this);
+ }
+
+ const_iterator begin() const
+ {
+ return const_iterator(watches.begin(), this);
+ }
+
+ const_iterator end() const
+ {
+ return const_iterator(watches.end(), this);
+ }
+
+ void fitToSize()
+ {
+ //TODO shirnk
+ }
+};
+
+inline size_t operator-(const watch_array::iterator& lhs, const watch_array::iterator& rhs)
+{
+ return lhs.it-rhs.it;
+}
+
+inline size_t operator-(const watch_array::const_iterator& lhs, const watch_array::const_iterator& rhs)
+{
+ return lhs.it-rhs.it;
+}
+
+inline Watched& watch_subarray::operator[](const uint32_t at)
+{
+ //base_at->accessed++;
+ return *(begin() + at);
+}
+
+inline void watch_subarray::clear()
+{
+ base_at->size = 0;
+}
+
+inline uint32_t watch_subarray::size() const
+{
+ return base_at->size;
+}
+
+inline bool watch_subarray::empty() const
+{
+ return size() == 0;
+}
+
+inline Watched* watch_subarray::begin()
+{
+ return base->mems[base_at->num].base_ptr + base_at->offset;
+}
+
+inline Watched* watch_subarray::end()
+{
+ return begin() + size();
+}
+
+inline const Watched* watch_subarray::begin() const
+{
+ return base->mems[base_at->num].base_ptr + base_at->offset;
+}
+
+inline const Watched* watch_subarray::end() const
+{
+ return begin() + size();
+}
+
+inline void watch_subarray::shrink(const uint32_t num)
+{
+ base_at->size -= num;
+}
+
+inline void watch_subarray::shrink_(const uint32_t num)
+{
+ shrink(num);
+}
+
+inline void watch_subarray::get_space_for_push()
+{
+ uint32_t new_alloc = std::max<uint32_t>(base_at->alloc*2, 2U);
+ OffsAndNum off_and_num = base->get_space(new_alloc);
+
+ //Copy
+ if (base_at->size > 0) {
+ Watched* newptr = base->mems[off_and_num.num].base_ptr + off_and_num.offset;
+ Watched* oldptr = begin();
+ memmove(newptr, oldptr, size() * sizeof(Watched));
+ base->delete_offset(base_at->num, base_at->offset, base_at->alloc);
+ }
+
+ //Update
+ base_at->num = off_and_num.num;
+ base_at->offset = off_and_num.offset;
+ base_at->alloc = new_alloc;
+}
+
+inline void watch_subarray::push(const Watched& watched)
+{
+ //Make space
+ if (base_at->alloc <= base_at->size) {
+ get_space_for_push();
+ }
+
+ //There is enough space
+ //assert(base_at->alloc > base_at->size);
+
+ //Append to the end
+ operator[](size()) = watched;
+ base_at->size++;
+}
+
+inline const Watched& watch_subarray_const::operator[](const uint32_t at) const
+{
+ return *(begin() + at);
+}
+inline uint32_t watch_subarray_const::size() const
+{
+ return base_at->size;
+}
+
+inline bool watch_subarray_const::empty() const
+{
+ return size() == 0;
+}
+inline const Watched* watch_subarray_const::begin() const
+{
+ return base->mems[base_at->num].base_ptr + base_at->offset;
+}
+
+inline const Watched* watch_subarray_const::end() const
+{
+ return begin() + size();
+}
+
+inline void watch_subarray_const::print_stat() const
+{
+ base->print_stat();
+ base_at->print_stat();
+}
+
+inline void swap(watch_subarray a, watch_subarray b)
+{
+ Elem tmp;
+ tmp = *(a.base_at);
+ *(a.base_at) = *(b.base_at);
+ *(b.base_at) = tmp;
+}
+
+
+} //End of namespace
+
+#endif //__WATCHARRAY_H__
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/watched.h b/cryptominisat5/cryptominisat-5.6.3/src/watched.h
new file mode 100644
index 000000000..bf75c5b1e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/watched.h
@@ -0,0 +1,321 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef WATCHED_H
+#define WATCHED_H
+
+//#define DEBUG_WATCHED
+
+#include "clabstraction.h"
+#include "constants.h"
+#include "cloffset.h"
+#include "solvertypes.h"
+
+#include <limits>
+#include <string.h>
+
+
+namespace CMSat {
+
+enum WatchType {
+ watch_clause_t = 0
+ , watch_binary_t = 1
+ , watch_idx_t = 3
+};
+
+/**
+@brief An element in the watchlist. Natively contains 2- and 3-long clauses, others are referenced by pointer
+
+This class contains two 32-bit datapieces. They are either used as:
+\li One literal, in the case of binary clauses
+\li Two literals, in the case of tertiary clauses
+\li One blocking literal (i.e. an example literal from the clause) and a clause
+offset (as per ClauseAllocator ), in the case of long clauses
+*/
+class Watched {
+ public:
+ /**
+ @brief Constructor for a long (>3) clause
+ */
+ Watched(const ClOffset offset, Lit blockedLit) :
+ data1(blockedLit.toInt())
+ , type(watch_clause_t)
+ , data2(offset)
+ {
+ }
+
+ /**
+ @brief Constructor for a long (>3) clause
+ */
+ Watched(const ClOffset offset, cl_abst_type abst) :
+ data1(abst)
+ , type(watch_clause_t)
+ , data2(offset)
+ {
+ }
+
+ Watched() :
+ data1 (std::numeric_limits<uint32_t>::max())
+ , type(watch_clause_t) // initialize type with most generic type of clause
+ , data2(std::numeric_limits<uint32_t>::max() >> 2)
+ {}
+
+ /**
+ @brief Constructor for a binary clause
+ */
+ Watched(const Lit lit, const bool red) :
+ data1(lit.toInt())
+ , type(watch_binary_t)
+ , data2(red)
+ {
+ }
+
+ /**
+ @brief Constructor for an Index value
+ */
+ explicit Watched(const uint32_t idx) :
+ data1(idx)
+ , type(watch_idx_t)
+ {
+ }
+
+ /**
+ @brief To update the blocked literal of a >3-long normal clause
+ */
+ void setBlockedLit(const Lit blockedLit)
+ {
+ #ifdef DEBUG_WATCHED
+ assert(type == watch_clause_t);
+ #endif
+ data1 = blockedLit.toInt();
+ }
+
+ WatchType getType() const
+ {
+ // we rely that WatchType enum is in [0-3] range and fits into type field two bits
+ return static_cast<WatchType>(type);
+ }
+
+ bool isBin() const
+ {
+ return (type == watch_binary_t);
+ }
+
+ bool isClause() const
+ {
+ return (type == watch_clause_t);
+ }
+
+ bool isIdx() const
+ {
+ return (type == watch_idx_t);
+ }
+
+ uint32_t get_idx() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(type == watch_idx_t);
+ #endif
+ return data1;
+ }
+
+ /**
+ @brief Get the sole other lit of the binary clause, or get lit2 of the tertiary clause
+ */
+ Lit lit2() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ return Lit::toLit(data1);
+ }
+
+ /**
+ @brief Set the sole other lit of the binary clause
+ */
+ void setLit2(const Lit lit)
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ data1 = lit.toInt();
+ }
+
+ bool red() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ return data2 & 1;
+ }
+
+ void setRed(const bool toSet)
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ assert(red());
+ #endif
+ assert(toSet == false);
+ data2 &= (~(1U));
+ }
+
+ void mark_bin_cl()
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ data2 |= 2;
+ }
+
+ void unmark_bin_cl()
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ data2 &= 1;
+ }
+
+ bool bin_cl_marked() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ return data2&2;
+ }
+
+ /**
+ @brief Get example literal (blocked lit) of a normal >3-long clause
+ */
+ Lit getBlockedLit() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isClause());
+ #endif
+ return Lit::toLit(data1);
+ }
+
+ cl_abst_type getAbst() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isClause());
+ #endif
+ return data1;
+ }
+
+ /**
+ @brief Get offset of a >3-long normal clause or of an xor clause (which may be 3-long)
+ */
+ ClOffset get_offset() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isClause());
+ #endif
+ return data2;
+ }
+
+ bool operator==(const Watched& other) const
+ {
+ return data1 == other.data1 && data2 == other.data2 && type == other.type;
+ }
+
+ bool operator!=(const Watched& other) const
+ {
+ return !(*this == other);
+ }
+
+ private:
+ uint32_t data1;
+ // binary, tertiary or long, as per WatchType
+ // currently WatchType is enum with range [0..3] and fits in type
+ // in case if WatchType extended type size won't be enough.
+ ClOffset type:2;
+ ClOffset data2:EFFECTIVELY_USEABLE_BITS;
+};
+
+inline std::ostream& operator<<(std::ostream& os, const Watched& ws)
+{
+
+ if (ws.isClause()) {
+ os << "Clause offset " << ws.get_offset();
+ }
+
+ if (ws.isBin()) {
+ os << "Bin lit " << ws.lit2() << " (red: " << ws.red() << " )";
+ }
+
+ return os;
+}
+
+struct OccurClause {
+ OccurClause(const Lit _lit, const Watched _ws) :
+ lit(_lit)
+ , ws(_ws)
+ {}
+
+ OccurClause() :
+ lit(lit_Undef)
+ {}
+
+ bool operator==(const OccurClause& other) const
+ {
+ return lit == other.lit && ws == other.ws;
+ }
+
+ Lit lit;
+ Watched ws;
+};
+
+struct WatchSorterBinTriLong {
+ bool operator()(const Watched& a, const Watched& b)
+ {
+ assert(!a.isIdx());
+ assert(!b.isIdx());
+
+ //Anything but clause!
+ if (a.isClause()) {
+ //A is definitely not better than B
+ return false;
+ }
+ if (b.isClause()) {
+ //B is clause, A is NOT a clause. So A is better than B.
+ return true;
+ }
+
+ //Both are BIN
+ assert(a.isBin());
+ assert(b.isBin());
+
+ if (a.lit2() != b.lit2()) {
+ return a.lit2() < b.lit2();
+ }
+
+ if (a.red() != b.red()) {
+ return !a.red();
+ }
+ return false;
+ }
+ };
+
+
+} //end namespace
+
+#endif //WATCHED_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/watched_backup.h b/cryptominisat5/cryptominisat-5.6.3/src/watched_backup.h
new file mode 100644
index 000000000..d56b691f6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/watched_backup.h
@@ -0,0 +1,347 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef WATCHED_H
+#define WATCHED_H
+
+//#define DEBUG_WATCHED
+
+#include "clabstraction.h"
+#include "constants.h"
+#include "cloffset.h"
+#include "solvertypes.h"
+
+#include <limits>
+
+namespace CMSat {
+
+enum WatchType {
+ watch_clause_t = 0
+ , watch_binary_t = 1
+ , watch_idx_t = 3
+};
+
+/**
+@brief An element in the watchlist. Natively contains 2- and 3-long clauses, others are referenced by pointer
+
+This class contains two 32-bit datapieces. They are either used as:
+\li One literal, in the case of binary clauses
+\li Two literals, in the case of tertiary clauses
+\li One blocking literal (i.e. an example literal from the clause) and a clause
+offset (as per ClauseAllocator ), in the case of long clauses
+*/
+class Watched {
+ public:
+ /**
+ @brief Constructor for a long (>3) clause
+ */
+ Watched(const ClOffset offset, Lit blockedLit) :
+ data1(blockedLit.toInt())
+ , data2(offset)
+ , type(watch_clause_t)
+ {
+ }
+
+ /**
+ @brief Constructor for a long (>3) clause
+ */
+ Watched(const ClOffset offset, cl_abst_type abst) :
+ data1(abst)
+ , data2(offset)
+ , type(watch_clause_t)
+ {
+ }
+
+ Watched(){}
+
+ /**
+ @brief Constructor for a binary clause
+ */
+ Watched(const Lit lit, const bool red) :
+ data1(lit.toInt())
+ , type(watch_binary_t)
+ , _red(red)
+ {
+ }
+
+ /**
+ @brief Constructor for an Index value
+ */
+ Watched(const uint32_t idx) :
+ data1(idx)
+ , type(watch_idx_t)
+ {
+ }
+
+ /**
+ @brief To update the blocked literal of a >3-long normal clause
+ */
+ void setBlockedLit(const Lit blockedLit)
+ {
+ #ifdef DEBUG_WATCHED
+ assert(type == watch_clause_t);
+ #endif
+ data1 = blockedLit.toInt();
+ }
+
+ WatchType getType() const
+ {
+ // we rely that WatchType enum is in [0-3] range and fits into type field two bits
+ return static_cast<WatchType>(type);
+ }
+
+ bool isBin() const
+ {
+ return (type == watch_binary_t);
+ }
+
+ bool isClause() const
+ {
+ return (type == watch_clause_t);
+ }
+
+ bool isIdx() const
+ {
+ return (type == watch_idx_t);
+ }
+
+ uint32_t get_idx() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(type == watch_idx_t);
+ #endif
+ return data1;
+ }
+
+ /**
+ @brief Get the sole other lit of the binary clause, or get lit2 of the tertiary clause
+ */
+ Lit lit2() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ return Lit::toLit(data1);
+ }
+
+ /**
+ @brief Set the sole other lit of the binary clause
+ */
+ void setLit2(const Lit lit)
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ data1 = lit.toInt();
+ }
+
+ bool red() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ return _red;
+ }
+
+ void setRed(const bool
+ #ifdef DEBUG_WATCHED
+ toSet
+ #endif
+ )
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ assert(red());
+ assert(toSet == false);
+ #endif
+ _red = true;
+ }
+
+ void mark_bin_cl()
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ marked = 1;
+ }
+
+ void unmark_bin_cl()
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ marked= 0;
+ }
+
+ bool bin_cl_marked() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isBin());
+ #endif
+ return marked;
+ }
+
+ /**
+ @brief Get example literal (blocked lit) of a normal >3-long clause
+ */
+ Lit getBlockedLit() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isClause());
+ #endif
+ return Lit::toLit(data1);
+ }
+
+ cl_abst_type getAbst() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isClause());
+ #endif
+ return data1;
+ }
+
+ /**
+ @brief Get offset of a >3-long normal clause or of an xor clause (which may be 3-long)
+ */
+ ClOffset get_offset() const
+ {
+ #ifdef DEBUG_WATCHED
+ assert(isClause());
+ #endif
+ return data2;
+ }
+
+ bool operator==(const Watched& other) const
+ {
+ return data1 == other.data1 && data2 == other.data2 && type == other.type
+ && _red == other._red;
+ }
+
+ bool operator!=(const Watched& other) const
+ {
+ return !(*this == other);
+ }
+
+ Watched(Watched&& o) noexcept {
+ data1 = o.data1;
+ data2 = o.data2;
+ type = o.type;
+ _red = o._red;
+ marked = o.marked;
+ }
+
+ Watched(const Watched& o) noexcept {
+ data1 = o.data1;
+ data2 = o.data2;
+ type = o.type;
+ _red = o._red;
+ marked = o.marked;
+ }
+
+ Watched& operator=(const Watched& o) noexcept {
+ data1 = o.data1;
+ data2 = o.data2;
+ type = o.type;
+ _red = o._red;
+ marked = o.marked;
+ return *this;
+ }
+
+ private:
+ uint32_t data1;
+ // binary, tertiary or long, as per WatchType
+ // currently WatchType is enum with range [0..3] and fits in type
+ // in case if WatchType extended type size won't be enough.
+ uint32_t data2;
+ char type;
+ char _red;
+ char marked;
+};
+
+inline std::ostream& operator<<(std::ostream& os, const Watched& ws)
+{
+
+ if (ws.isClause()) {
+ os << "Clause offset " << ws.get_offset();
+ }
+
+ if (ws.isBin()) {
+ os << "Bin lit " << ws.lit2() << " (red: " << ws.red() << " )";
+ }
+
+ return os;
+}
+
+struct OccurClause {
+ OccurClause(const Lit _lit, const Watched _ws) :
+ lit(_lit)
+ , ws(_ws)
+ {}
+
+ OccurClause() :
+ lit(lit_Undef)
+ {}
+
+ bool operator==(const OccurClause& other) const
+ {
+ return lit == other.lit && ws == other.ws;
+ }
+
+ Lit lit;
+ Watched ws;
+};
+
+struct WatchSorterBinTriLong {
+ bool operator()(const Watched& a, const Watched& b)
+ {
+ assert(!a.isIdx());
+ assert(!b.isIdx());
+
+ //Anything but clause!
+ if (a.isClause()) {
+ //A is definitely not better than B
+ return false;
+ }
+ if (b.isClause()) {
+ //B is clause, A is NOT a clause. So A is better than B.
+ return true;
+ }
+
+ //Both are BIN
+ assert(a.isBin());
+ assert(b.isBin());
+
+ if (a.lit2() != b.lit2()) {
+ return a.lit2() < b.lit2();
+ }
+
+ if (a.red() != b.red()) {
+ return !a.red();
+ }
+ return false;
+ }
+ };
+
+
+} //end namespace
+
+#endif //WATCHED_H
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/xor.h b/cryptominisat5/cryptominisat-5.6.3/src/xor.h
new file mode 100644
index 000000000..c6737a22d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/xor.h
@@ -0,0 +1,158 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef _XOR_H_
+#define _XOR_H_
+
+#include "solvertypes.h"
+
+#include <vector>
+#include <set>
+#include <iostream>
+#include <algorithm>
+
+using std::vector;
+
+namespace CMSat {
+
+class Xor
+{
+public:
+ Xor() : rhs(false)
+ {}
+ template<typename T>
+ Xor(const T& cl, const bool _rhs) :
+ rhs(_rhs)
+ {
+ for (uint32_t i = 0; i < cl.size(); i++) {
+ vars.push_back(cl[i].var());
+ }
+ }
+
+ Xor(const vector<uint32_t>& _vars, const bool _rhs) :
+ rhs(_rhs)
+ , vars(_vars)
+ {
+ }
+
+ void sort()
+ {
+ std::sort(vars.begin(), vars.end());
+ }
+
+ vector<uint32_t>::const_iterator begin() const
+ {
+ return vars.begin();
+ }
+
+ vector<uint32_t>::const_iterator end() const
+ {
+ return vars.end();
+ }
+
+ vector<uint32_t>::iterator begin()
+ {
+ return vars.begin();
+ }
+
+ vector<uint32_t>::iterator end()
+ {
+ return vars.end();
+ }
+
+ bool operator==(const Xor& other) const
+ {
+ return (rhs == other.rhs && vars == other.vars);
+ }
+
+ bool operator!=(const Xor& other) const
+ {
+ return !operator==(other);
+ }
+
+ bool operator<(const Xor& other) const
+ {
+ uint64_t i = 0;
+ while(i < other.size() && i < size()) {
+ if (other[i] != vars[i]) {
+ return (other[i] > vars[i]);
+ }
+ i++;
+ }
+
+ if (other.size() != size()) {
+ return size() < other.size();
+ }
+ return false;
+ }
+
+ const uint32_t& operator[](const uint32_t at) const
+ {
+ return vars[at];
+ }
+
+ uint32_t& operator[](const uint32_t at)
+ {
+ return vars[at];
+ }
+
+ void resize(const uint32_t newsize)
+ {
+ vars.resize(newsize);
+ }
+
+ vector<uint32_t>& get_vars()
+ {
+ return vars;
+ }
+
+ const vector<uint32_t>& get_vars() const
+ {
+ return vars;
+ }
+
+ size_t size() const
+ {
+ return vars.size();
+ }
+ bool rhs;
+
+private:
+ vector<uint32_t> vars;
+};
+
+inline std::ostream& operator<<(std::ostream& os, const Xor& thisXor)
+{
+ for (uint32_t i = 0; i < thisXor.size(); i++) {
+ os << Lit(thisXor[i], false);
+
+ if (i+1 < thisXor.size())
+ os << " + ";
+ }
+ os << " = " << std::boolalpha << thisXor.rhs << std::noboolalpha;
+
+ return os;
+}
+
+}
+
+#endif //_XOR_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp b/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
new file mode 100644
index 000000000..5f050d152
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.cpp
@@ -0,0 +1,873 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "xorfinder.h"
+#include "time_mem.h"
+#include "solver.h"
+#include "occsimplifier.h"
+#include "clauseallocator.h"
+#include "sqlstats.h"
+
+#include <limits>
+//#define XOR_DEBUG
+
+using namespace CMSat;
+using std::cout;
+using std::endl;
+
+XorFinder::XorFinder(OccSimplifier* _occsimplifier, Solver* _solver) :
+ occsimplifier(_occsimplifier)
+ , solver(_solver)
+ , toClear(_solver->toClear)
+{
+}
+
+void XorFinder::find_xors_based_on_long_clauses()
+{
+ #ifdef DEBUG_MARKED_CLAUSE
+ assert(solver->no_marked_clauses());
+ #endif
+
+ vector<Lit> lits;
+ for (vector<ClOffset>::iterator
+ it = occsimplifier->clauses.begin()
+ , end = occsimplifier->clauses.end()
+ ; it != end && xor_find_time_limit > 0
+ ; ++it
+ ) {
+ ClOffset offset = *it;
+ Clause* cl = solver->cl_alloc.ptr(offset);
+ xor_find_time_limit -= 1;
+
+ //Already freed
+ if (cl->freed() || cl->getRemoved()) {
+ continue;
+ }
+
+ //Too large -> too expensive
+ if (cl->size() > solver->conf.maxXorToFind) {
+ continue;
+ }
+
+ //If not tried already, find an XOR with it
+ if (!cl->stats.marked_clause ) {
+ cl->stats.marked_clause = true;
+ assert(!cl->getRemoved());
+
+ size_t needed_per_ws = 1ULL << (cl->size()-2);
+ //let's allow shortened clauses
+ needed_per_ws >>= 1;
+
+ for(const Lit lit: *cl) {
+ if (solver->watches[lit].size() < needed_per_ws) {
+ goto next;
+ }
+ if (solver->watches[~lit].size() < needed_per_ws) {
+ goto next;
+ }
+ }
+
+ lits.resize(cl->size());
+ std::copy(cl->begin(), cl->end(), lits.begin());
+ findXor(lits, offset, cl->abst);
+ next:;
+ }
+ }
+}
+
+void XorFinder::clean_equivalent_xors(vector<Xor>& txors)
+{
+ if (!txors.empty()) {
+ for(Xor& x: txors) {
+ std::sort(x.begin(), x.end());
+ }
+ std::sort(txors.begin(), txors.end());
+
+ vector<Xor>::iterator i = txors.begin();
+ vector<Xor>::iterator j = i;
+ i++;
+ uint64_t size = 1;
+ for(vector<Xor>::iterator end = txors.end(); i != end; i++) {
+ if (*j != *i) {
+ j++;
+ *j = *i;
+ size++;
+ }
+ }
+ txors.resize(size);
+ }
+}
+
+void XorFinder::find_xors()
+{
+ runStats.clear();
+ runStats.numCalls = 1;
+ grab_mem();
+ if ((solver->conf.xor_var_per_cut + 2) > solver->conf.maxXorToFind) {
+ if (solver->conf.verbosity) {
+ cout << "c WARNING updating max XOR to find to "
+ << (solver->conf.xor_var_per_cut + 2)
+ << " as the current number was lower than the cutting number" << endl;
+ }
+ solver->conf.maxXorToFind = solver->conf.xor_var_per_cut + 2;
+ }
+
+ xors.clear();
+ double myTime = cpuTime();
+ const int64_t orig_xor_find_time_limit =
+ 1000LL*1000LL*solver->conf.xor_finder_time_limitM
+ *solver->conf.global_timeout_multiplier;
+
+ xor_find_time_limit = orig_xor_find_time_limit;
+
+ occsimplifier->sort_occurs_and_set_abst();
+ if (solver->conf.verbosity) {
+ cout << "c [occ-xor] sort occur list T: " << (cpuTime()-myTime) << endl;
+ }
+
+ #ifdef DEBUG_MARKED_CLAUSE
+ assert(solver->no_marked_clauses());
+ #endif
+
+ find_xors_based_on_long_clauses();
+ assert(runStats.foundXors == xors.size());
+
+ //clean them of equivalent XORs
+ clean_equivalent_xors(xors);
+
+ //Cleanup
+ for(ClOffset offset: occsimplifier->clauses) {
+ Clause* cl = solver->cl_alloc.ptr(offset);
+ cl->stats.marked_clause = false;
+ }
+
+ //Print stats
+ const bool time_out = (xor_find_time_limit < 0);
+ const double time_remain = float_div(xor_find_time_limit, orig_xor_find_time_limit);
+ runStats.findTime = cpuTime() - myTime;
+ runStats.time_outs += time_out;
+ solver->sumSearchStats.num_xors_found_last = xors.size();
+ print_found_xors();
+
+ if (solver->conf.verbosity) {
+ runStats.print_short(solver, time_remain);
+ }
+ globalStats += runStats;
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed(
+ solver
+ , "xor-find"
+ , cpuTime() - myTime
+ , time_out
+ , time_remain
+ );
+ }
+}
+
+void XorFinder::print_found_xors()
+{
+ if (solver->conf.verbosity >= 5) {
+ cout << "c Found XORs: " << endl;
+ for(vector<Xor>::const_iterator
+ it = xors.begin(), end = xors.end()
+ ; it != end
+ ; ++it
+ ) {
+ cout << "c " << *it << endl;
+ }
+ }
+}
+
+void XorFinder::add_xors_to_solver()
+{
+ solver->xorclauses = xors;
+ #if defined(SLOW_DEBUG) || defined(XOR_DEBUG)
+ for(const Xor& x: xors) {
+ for(uint32_t v: x) {
+ assert(solver->varData[v].removed == Removed::none);
+ }
+ }
+ #endif
+}
+
+void XorFinder::findXor(vector<Lit>& lits, const ClOffset offset, cl_abst_type abst)
+{
+ //Set this clause as the base for the XOR, fill 'seen'
+ xor_find_time_limit -= lits.size()/4+1;
+ poss_xor.setup(lits, offset, abst, occcnt);
+
+ //Run findXorMatch for the 2 smallest watchlists
+ Lit slit = lit_Undef;
+ Lit slit2 = lit_Undef;
+ uint32_t smallest = std::numeric_limits<uint32_t>::max();
+ uint32_t smallest2 = std::numeric_limits<uint32_t>::max();
+ for (size_t i = 0, end = lits.size(); i < end; i++) {
+ const Lit lit = lits[i];
+ uint32_t num = solver->watches[lit].size();
+ num += solver->watches[~lit].size();
+ if (num < smallest) {
+ slit2 = slit;
+ smallest2 = smallest;
+
+ slit = lit;
+ smallest = num;
+ } else if (num < smallest2) {
+ slit2 = lit;
+ smallest2 = num;
+ }
+ }
+ findXorMatch(solver->watches[slit], slit);
+ findXorMatch(solver->watches[~slit], ~slit);
+ findXorMatch(solver->watches[slit2], slit2);
+ findXorMatch(solver->watches[~slit2], ~slit2);
+
+ if (poss_xor.foundAll()) {
+ std::sort(lits.begin(), lits.end());
+ Xor found_xor(lits, poss_xor.getRHS());
+ #if defined(SLOW_DEBUG) || defined(XOR_DEBUG)
+ for(Lit lit: lits) {
+ assert(solver->varData[lit.var()].removed == Removed::none);
+ }
+ #endif
+
+ add_found_xor(found_xor);
+ for(ClOffset offs: poss_xor.get_offsets()) {
+ Clause* cl = solver->cl_alloc.ptr(offs);
+ assert(!cl->getRemoved());
+ cl->set_used_in_xor(true);
+ }
+ }
+ poss_xor.clear_seen(occcnt);
+}
+
+void XorFinder::add_found_xor(const Xor& found_xor)
+{
+ xors.push_back(found_xor);
+ runStats.foundXors++;
+ runStats.sumSizeXors += found_xor.size();
+}
+
+void XorFinder::findXorMatch(watch_subarray_const occ, const Lit wlit)
+{
+ xor_find_time_limit -= (int64_t)occ.size()/8+1;
+ for (const Watched& w: occ) {
+ if (w.isIdx()) {
+ continue;
+ }
+ assert(poss_xor.getSize() > 2);
+
+ if (w.isBin()) {
+ #ifdef SLOW_DEBUG
+ assert(occcnt[wlit.var()]);
+ #endif
+ if (!occcnt[w.lit2().var()]) {
+ goto end;
+ }
+
+ binvec.clear();
+ binvec.resize(2);
+ binvec[0] = w.lit2();
+ binvec[1] = wlit;
+ if (binvec[0] > binvec[1]) {
+ std::swap(binvec[0], binvec[1]);
+ }
+
+ xor_find_time_limit -= 1;
+ poss_xor.add(binvec, std::numeric_limits<ClOffset>::max(), varsMissing);
+ if (poss_xor.foundAll())
+ break;
+ } else {
+ if (w.getBlockedLit().toInt() == lit_Undef.toInt())
+ //Clauses are ordered, lit_Undef means it's larger than maxXorToFind
+ break;
+
+ if (w.getBlockedLit().toInt() == lit_Error.toInt())
+ //lit_Error means it's freed or removed, and it's ordered so no more
+ break;
+
+ if ((w.getBlockedLit().toInt() | poss_xor.getAbst()) != poss_xor.getAbst())
+ continue;
+
+ xor_find_time_limit -= 3;
+ const ClOffset offset = w.get_offset();
+ Clause& cl = *solver->cl_alloc.ptr(offset);
+ if (cl.freed() || cl.getRemoved()) {
+ //Clauses are ordered!!
+ break;
+ }
+
+ //Allow the clause to be smaller or equal in size
+ if (cl.size() > poss_xor.getSize()) {
+ //clauses are ordered!!
+ break;
+ }
+
+ //Doesn't contain variables not in the original clause
+ #if defined(SLOW_DEBUG) || defined(XOR_DEBUG)
+ assert(cl.abst == calcAbstraction(cl));
+ #endif
+ if ((cl.abst | poss_xor.getAbst()) != poss_xor.getAbst())
+ continue;
+
+ //Check RHS, vars inside
+ bool rhs = true;
+ for (const Lit cl_lit :cl) {
+ //early-abort, contains literals not in original clause
+ if (!occcnt[cl_lit.var()])
+ goto end;
+
+ rhs ^= cl_lit.sign();
+ }
+ //either the invertedness has to match, or the size must be smaller
+ if (rhs != poss_xor.getRHS() && cl.size() == poss_xor.getSize())
+ continue;
+
+ //If the size of this clause is the same of the base clause, then
+ //there is no point in using this clause as a base for another XOR
+ //because exactly the same things will be found.
+ if (cl.size() == poss_xor.getSize()) {
+ cl.stats.marked_clause = true;;
+ }
+
+ xor_find_time_limit -= cl.size()/4+1;
+ poss_xor.add(cl, offset, varsMissing);
+ if (poss_xor.foundAll())
+ break;
+ }
+ end:;
+ }
+
+ if (solver->conf.doCache &&
+ solver->conf.useCacheWhenFindingXors &&
+ !poss_xor.foundAll()
+ ) {
+ const TransCache& cache1 = solver->implCache[wlit];
+ for (const LitExtra litExtra: cache1.lits) {
+ const Lit otherlit = litExtra.getLit();
+ if (!occcnt[otherlit.var()]) {
+ continue;
+ }
+
+ binvec.clear();
+ binvec.resize(2);
+ binvec[0] = otherlit;
+ binvec[1] = wlit;
+ if (binvec[0] > binvec[1]) {
+ std::swap(binvec[0], binvec[1]);
+ }
+
+ xor_find_time_limit -= 1;
+ poss_xor.add(binvec, std::numeric_limits<ClOffset>::max(), varsMissing);
+ if (poss_xor.foundAll())
+ break;
+ }
+ }
+}
+
+vector<Xor> XorFinder::remove_xors_without_connecting_vars(const vector<Xor>& this_xors)
+{
+ if (this_xors.empty())
+ return this_xors;
+
+ double myTime = cpuTime();
+ vector<Xor> ret;
+ assert(toClear.empty());
+
+ //Fill seen with vars used
+ uint32_t non_empty = 0;
+ for(const Xor& x: this_xors) {
+ if (x.size() != 0) {
+ non_empty++;
+ }
+
+ for(uint32_t v: x) {
+ if (solver->seen[v] == 0) {
+ toClear.push_back(Lit(v, false));
+ }
+
+ if (solver->seen[v] < 2) {
+ solver->seen[v]++;
+ }
+ }
+ }
+
+ vector<Xor>::const_iterator i = this_xors.begin();
+ for(vector<Xor>::const_iterator end = this_xors.end()
+ ; i != end
+ ; i++
+ ) {
+ if (xor_has_interesting_var(*i)) {
+ ret.push_back(*i);
+ }
+ }
+
+ for(Lit l: toClear) {
+ solver->seen[l.var()] = 0;
+ }
+ toClear.clear();
+
+ double time_used = cpuTime() - myTime;
+ if (solver->conf.verbosity) {
+ cout << "c [xor-rem-unconnected] left with " << ret.size()
+ << " xors from " << non_empty << " non-empty xors"
+ << solver->conf.print_times(time_used)
+ << endl;
+ }
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "xor-rem-no-connecting-vars"
+ , time_used
+ );
+ }
+
+ return ret;
+}
+
+bool XorFinder::xor_together_xors(vector<Xor>& this_xors)
+{
+ if (occcnt.size() != solver->nVars())
+ grab_mem();
+
+ if (this_xors.empty())
+ return solver->okay();
+
+ #ifdef SLOW_DEBUG
+ for(auto x: occcnt) {
+ assert(x == 0);
+ }
+ #endif
+
+ assert(solver->okay());
+ assert(solver->decisionLevel() == 0);
+ assert(solver->watches.get_smudged_list().empty());
+ const size_t origsize = this_xors.size();
+
+ uint32_t xored = 0;
+ const double myTime = cpuTime();
+ assert(toClear.empty());
+
+ //Link in xors into watchlist
+ for(size_t i = 0; i < this_xors.size(); i++) {
+ const Xor& x = this_xors[i];
+ for(uint32_t v: x) {
+ if (occcnt[v] == 0) {
+ toClear.push_back(Lit(v, false));
+ }
+ occcnt[v]++;
+
+ Lit l(v, false);
+ assert(solver->watches.size() > l.toInt());
+ solver->watches[l].push(Watched(i)); //Idx watch
+ solver->watches.smudge(l);
+ }
+ }
+
+ //until fixedpoint
+ bool changed = true;
+ while(changed) {
+ changed = false;
+ interesting.clear();
+ for(const Lit l: toClear) {
+ if (occcnt[l.var()] == 2) {
+ interesting.push_back(l.var());
+ }
+ }
+
+ while(!interesting.empty()) {
+ #ifdef SLOW_DEBUG
+ {
+ vector<uint32_t> check;
+ check.resize(solver->nVars(), 0);
+ for(size_t i = 0; i < this_xors.size(); i++) {
+ const Xor& x = this_xors[i];
+ for(uint32_t v: x) {
+ check[v]++;
+ }
+ }
+ for(size_t i = 0; i < solver->nVars(); i++) {
+ assert(check[i] == occcnt[i]);
+ }
+ }
+ #endif
+
+ const uint32_t v = interesting.back();
+ interesting.resize(interesting.size()-1);
+ if (occcnt[v] != 2)
+ continue;
+
+ size_t idxes[2];
+ unsigned at = 0;
+ size_t i2 = 0;
+ assert(solver->watches.size() > Lit(v, false).toInt());
+ watch_subarray ws = solver->watches[Lit(v, false)];
+
+ for(size_t i = 0; i < ws.size(); i++) {
+ const Watched& w = ws[i];
+ if (!w.isIdx()) {
+ ws[i2++] = ws[i];
+ } else if (this_xors[w.get_idx()] != Xor()) {
+ assert(at < 2);
+ idxes[at] = w.get_idx();
+ at++;
+ }
+ }
+ assert(at == 2);
+ ws.resize(i2);
+
+ if (this_xors[idxes[0]] == this_xors[idxes[1]]) {
+ //Equivalent, so delete one
+ this_xors[idxes[0]] = Xor();
+
+ //Re-attach the other, remove the occur of the one we deleted
+ const Xor& x = this_xors[idxes[1]];
+ solver->watches[Lit(v, false)].push(Watched(idxes[1]));
+ for(uint32_t v2: x) {
+ Lit l(v2, false);
+ assert(occcnt[l.var()] >= 2);
+ occcnt[l.var()]--;
+ if (occcnt[l.var()] == 2) {
+ interesting.push_back(l.var());
+ }
+ }
+ } else {
+ uint32_t clash_num;
+ vector<uint32_t> vars = xor_two(this_xors[idxes[0]], this_xors[idxes[1]], clash_num);
+ if (clash_num > 1) {
+ //add back to ws
+ ws.push(Watched(idxes[0]));
+ ws.push(Watched(idxes[1]));
+ continue;
+ }
+ occcnt[v] -= 2;
+ assert(occcnt[v] == 0);
+
+ Xor x_new(vars, this_xors[idxes[0]].rhs ^ this_xors[idxes[1]].rhs);
+ changed = true;
+ this_xors.push_back(x_new);
+ for(uint32_t v2: x_new) {
+ Lit l(v2, false);
+ solver->watches[l].push(Watched(this_xors.size()-1));
+ assert(occcnt[l.var()] >= 1);
+ if (occcnt[l.var()] == 2) {
+ interesting.push_back(l.var());
+ }
+ }
+ this_xors[idxes[0]] = Xor();
+ this_xors[idxes[1]] = Xor();
+ xored++;
+ }
+ }
+ }
+
+ for(const Lit l: toClear) {
+ occcnt[l.var()] = 0;
+ }
+ toClear.clear();
+
+ solver->clean_occur_from_idx_types_only_smudged();
+ clean_xors_from_empty();
+ double recur_time = cpuTime() - myTime;
+ if (solver->conf.verbosity) {
+ cout
+ << "c [xor-together] xored together " << xored << " xors"
+ << " orig num xors: " << origsize
+ << solver->conf.print_times(recur_time)
+ << endl;
+ }
+
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "xor-xor-together"
+ , recur_time
+ );
+ }
+
+ #if defined(SLOW_DEBUG) || defined(XOR_DEBUG)
+ //Make sure none is 2.
+ assert(toClear.empty());
+ for(const Xor& x: this_xors) {
+ for(uint32_t v: x) {
+ if (occcnt[v] == 0) {
+ toClear.push_back(Lit(v, false));
+ }
+
+ //Don't roll around
+ occcnt[v]++;
+ }
+ }
+
+ for(const Lit c: toClear) {
+ /*This is now possible because we don't XOR them together
+ in case they clash on more than 1 variable */
+ //assert(occcnt[c.var()] != 2);
+
+ occcnt[c.var()] = 0;
+ }
+ toClear.clear();
+ #endif
+
+ return solver->okay();
+}
+
+void XorFinder::clean_xors_from_empty()
+{
+ size_t i2 = 0;
+ for(size_t i = 0;i < xors.size(); i++) {
+ Xor& x = xors[i];
+ if (x.size() == 0
+ && x.rhs == false
+ ) {
+ //nothing, skip
+ } else {
+ xors[i2] = xors[i];
+ i2++;
+ }
+ }
+ xors.resize(i2);
+}
+
+bool XorFinder::add_new_truths_from_xors(vector<Xor>& this_xors, vector<Lit>* out_changed_occur)
+{
+ size_t origTrailSize = solver->trail_size();
+ size_t origBins = solver->binTri.redBins;
+ double myTime = cpuTime();
+
+ assert(solver->ok);
+ size_t i2 = 0;
+ for(size_t i = 0;i < this_xors.size(); i++) {
+ Xor& x = this_xors[i];
+ solver->clean_xor_vars_no_prop(x.get_vars(), x.rhs);
+ if (x.size() > 2) {
+ this_xors[i2] = this_xors[i];
+ i2++;
+ continue;
+ }
+
+ switch(x.size() ) {
+ case 0: {
+ if (x.rhs == true) {
+ solver->ok = false;
+ return false;
+ }
+ break;
+ }
+
+ case 1: {
+ Lit lit = Lit(x[0], !x.rhs);
+ if (solver->value(lit) == l_False) {
+ solver->ok = false;
+ } else if (solver->value(lit) == l_Undef) {
+ solver->enqueue(lit);
+ if (out_changed_occur)
+ solver->ok = solver->propagate_occur();
+ else
+ solver->ok = solver->propagate<true>().isNULL();
+ }
+ if (!solver->ok) {
+ goto end;
+ }
+ break;
+ }
+
+ case 2: {
+ //RHS == 1 means both same is not allowed
+ vector<Lit> lits{Lit(x[0], false), Lit(x[1], true^x.rhs)};
+ solver->add_clause_int(lits, true, ClauseStats(), out_changed_occur != NULL);
+ if (!solver->ok) {
+ goto end;
+ }
+ lits = {Lit(x[0], true), Lit(x[1], false^x.rhs)};
+ solver->add_clause_int(lits, true, ClauseStats(), out_changed_occur != NULL);
+ if (!solver->ok) {
+ goto end;
+ }
+ if (out_changed_occur) {
+ solver->ok = solver->propagate_occur();
+ } else {
+ solver->ok = solver->propagate<true>().isNULL();
+ }
+
+ if (out_changed_occur) {
+ out_changed_occur->push_back(Lit(x[0], false));
+ out_changed_occur->push_back(Lit(x[1], false));
+ }
+ break;
+ }
+
+ default: {
+ assert(false && "Not possible");
+ }
+ }
+ }
+ this_xors.resize(i2);
+ end:
+
+ double add_time = cpuTime() - myTime;
+ uint32_t num_bins_added = solver->binTri.redBins - origBins;
+ uint32_t num_units_added = solver->trail_size() - origTrailSize;
+
+ if (solver->conf.verbosity) {
+ cout
+ << "c [xor-add-lem] added unit " << num_units_added
+ << " bin " << num_bins_added
+ << solver->conf.print_times(add_time)
+ << endl;
+ }
+
+
+ if (solver->sqlStats) {
+ solver->sqlStats->time_passed_min(
+ solver
+ , "xor-add-new-bin-unit"
+ , add_time
+ );
+ }
+
+ return solver->okay();
+}
+
+vector<uint32_t> XorFinder::xor_two(Xor& x1, Xor& x2, uint32_t& clash_num)
+{
+ clash_num = 0;
+ x1.sort();
+ x2.sort();
+ vector<uint32_t> ret;
+ size_t x1_at = 0;
+ size_t x2_at = 0;
+ while(x1_at < x1.size() || x2_at < x2.size()) {
+ if (x1_at == x1.size()) {
+ ret.push_back(x2[x2_at]);
+ x2_at++;
+ continue;
+ }
+
+ if (x2_at == x2.size()) {
+ ret.push_back(x1[x1_at]);
+ x1_at++;
+ continue;
+ }
+
+ const uint32_t a = x1[x1_at];
+ const uint32_t b = x2[x2_at];
+ if (a == b) {
+ clash_num++;
+ x1_at++;
+ x2_at++;
+ continue;
+ }
+
+ if (a < b) {
+ ret.push_back(a);
+ x1_at++;
+ continue;
+ } else {
+ ret.push_back(b);
+ x2_at++;
+ continue;
+ }
+ }
+
+ return ret;
+}
+
+bool XorFinder::xor_has_interesting_var(const Xor& x)
+{
+ for(uint32_t v: x) {
+ if (solver->seen[v] > 1) {
+ return true;
+ }
+ }
+ return false;
+}
+
+size_t XorFinder::mem_used() const
+{
+ size_t mem = 0;
+ mem += xors.capacity()*sizeof(Xor);
+
+ //Temporary
+ mem += tmpClause.capacity()*sizeof(Lit);
+ mem += varsMissing.capacity()*sizeof(uint32_t);
+
+ return mem;
+}
+
+void XorFinder::grab_mem()
+{
+ occcnt.clear();
+ occcnt.resize(solver->nVars(), 0);
+}
+
+void XorFinder::free_mem()
+{
+ occcnt.clear();
+ occcnt.shrink_to_fit();
+}
+
+void XorFinder::Stats::print_short(const Solver* solver, double time_remain) const
+{
+ cout
+ << "c [occ-xor] found " << std::setw(6) << foundXors
+ << " avg sz " << std::setw(4) << std::fixed << std::setprecision(1)
+ << float_div(sumSizeXors, foundXors)
+ << solver->conf.print_times(findTime, time_outs, time_remain)
+ << endl;
+}
+
+void XorFinder::Stats::print() const
+{
+ cout << "c --------- XOR STATS ----------" << endl;
+ print_stats_line("c num XOR found on avg"
+ , float_div(foundXors, numCalls)
+ , "avg size"
+ );
+
+ print_stats_line("c XOR avg size"
+ , float_div(sumSizeXors, foundXors)
+ );
+
+ print_stats_line("c XOR finding time"
+ , findTime
+ , float_div(time_outs, numCalls)*100.0
+ , "time-out"
+ );
+ cout << "c --------- XOR STATS END ----------" << endl;
+}
+
+XorFinder::Stats& XorFinder::Stats::operator+=(const XorFinder::Stats& other)
+{
+ //Time
+ findTime += other.findTime;
+
+ //XOR
+ foundXors += other.foundXors;
+ sumSizeXors += other.sumSizeXors;
+
+ //Usefulness
+ time_outs += other.time_outs;
+
+ return *this;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h b/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
new file mode 100644
index 000000000..cab38d580
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/xorfinder.h
@@ -0,0 +1,359 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef _XORFINDER_H_
+#define _XORFINDER_H_
+
+#include <vector>
+#include <set>
+#include <iostream>
+#include <algorithm>
+#include <set>
+#include "xor.h"
+#include "cset.h"
+#include "watcharray.h"
+
+using std::vector;
+using std::set;
+
+namespace CMSat {
+
+//#define VERBOSE_DEBUG_XOR_FINDER
+
+class Solver;
+class OccSimplifier;
+
+class PossibleXor
+{
+ public:
+ PossibleXor()
+ {
+ }
+
+ void setup(
+ const vector<Lit>& cl
+ , const ClOffset offset
+ , cl_abst_type _abst
+ , vector<uint32_t>& seen
+ ) {
+ abst = _abst;
+ size = cl.size();
+ offsets.clear();
+ #ifdef VERBOSE_DEBUG_XOR_FINDER
+ cout << "Trying to create XOR from clause: " << cl << endl;
+ #endif
+
+ assert(cl.size() <= sizeof(origCl)/sizeof(Lit));
+ for(size_t i = 0; i < size; i++) {
+ origCl[i] = cl[i];
+ if (i > 0)
+ assert(cl[i-1] < cl[i]);
+ }
+ setup_seen_rhs_foundcomb(seen);
+ if (offset != std::numeric_limits<ClOffset>::max()) {
+ offsets.push_back(offset);
+ }
+ }
+
+ void clear_seen(vector<uint32_t>& seen)
+ {
+ for (uint32_t i = 0; i < size; i++) {
+ seen[origCl[i].var()] = 0;
+ }
+ }
+
+ //GET-type functions
+ cl_abst_type getAbst() const;
+ uint32_t getSize() const;
+ bool getRHS() const;
+ bool foundAll() const;
+
+ //Add
+ template<class T>
+ void add(const T& cl, const ClOffset offset, vector<uint32_t>& varsMissing);
+
+ const vector<ClOffset>& get_offsets() const
+ {
+ return offsets;
+ }
+
+ private:
+ void setup_seen_rhs_foundcomb(vector<uint32_t>& seen)
+ {
+ //Calculate parameters of base clause.
+ //Also set 'seen' for easy check in 'findXorMatch()'
+ rhs = true;
+ uint32_t whichOne = 0;
+ for (uint32_t i = 0; i < size; i++) {
+ rhs ^= origCl[i].sign();
+ whichOne += ((uint32_t)origCl[i].sign()) << i;
+ seen[origCl[i].var()] = 1;
+ }
+
+ foundComb.clear();
+ foundComb.resize(1ULL<<size, false);
+ foundComb[whichOne] = true;
+ }
+ uint32_t NumberOfSetBits(uint32_t i) const;
+ bool bit(const uint32_t a, const uint32_t b) const;
+
+ //bitfield to indicate which of the following is already set
+ //-1 -2 -3
+ //-1 2 3
+ // 1 -2 3
+ // 1 2 -3
+ //order the above according to sign: if sign:
+ //LSB ... MSB
+ // 1 1 1
+ // 1 0 0
+ // 0 1 0
+ // 0 0 1
+ vector<char> foundComb;
+ Lit origCl[8];
+ cl_abst_type abst;
+ uint32_t size;
+ bool rhs;
+ vector<ClOffset> offsets;
+};
+
+class XorFinder
+{
+public:
+ XorFinder(OccSimplifier* occsimplifier, Solver* solver);
+ void find_xors();
+
+ struct Stats
+ {
+ void clear()
+ {
+ Stats tmp;
+ *this = tmp;
+ }
+
+ Stats& operator+=(const Stats& other);
+ void print_short(const Solver* solver, const double time_remain) const;
+ void print() const;
+
+ //Time
+ uint32_t numCalls = 0;
+ double findTime = 0.0;
+ uint32_t time_outs = 0;
+
+ //XOR stats
+ uint64_t foundXors = 0;
+ uint64_t sumSizeXors = 0;
+ };
+
+ const Stats& get_stats() const;
+ size_t mem_used() const;
+ void free_mem();
+ void grab_mem();
+ void add_xors_to_solver();
+ vector<Xor> remove_xors_without_connecting_vars(const vector<Xor>& this_xors);
+ bool xor_together_xors(vector<Xor>& xors);
+ bool add_new_truths_from_xors(vector<Xor>& xors, vector<Lit>* out_changed_occur = NULL);
+ void clean_equivalent_xors(vector<Xor>& txors);
+
+ vector<Xor> xors;
+
+private:
+ PossibleXor poss_xor;
+ void add_found_xor(const Xor& found_xor);
+ void find_xors_based_on_long_clauses();
+ void print_found_xors();
+ bool xor_has_interesting_var(const Xor& x);
+ vector<uint32_t> xor_two(Xor& x1, Xor& x2, uint32_t& clash_num);
+ void clean_xors_from_empty();
+
+ int64_t xor_find_time_limit;
+
+ //Find XORs
+ void findXor(vector<Lit>& lits, const ClOffset offset, cl_abst_type abst);
+
+ ///Normal finding of matching clause for XOR
+ void findXorMatch(watch_subarray_const occ, const Lit wlit);
+
+ OccSimplifier* occsimplifier;
+ Solver *solver;
+
+ //Stats
+ Stats runStats;
+ Stats globalStats;
+
+ //Temporary
+ vector<Lit> tmpClause;
+ vector<uint32_t> varsMissing;
+ vector<Lit> binvec;
+
+ //Other temporaries
+ vector<uint32_t> occcnt;
+ vector<Lit>& toClear;
+ vector<uint32_t> interesting;
+};
+
+
+inline cl_abst_type PossibleXor::getAbst() const
+{
+ return abst;
+}
+
+inline uint32_t PossibleXor::getSize() const
+{
+ return size;
+}
+
+inline bool PossibleXor::getRHS() const
+{
+ return rhs;
+}
+
+template<class T> void PossibleXor::add(
+ const T& cl
+ , const ClOffset offset
+ , vector<uint32_t>& varsMissing
+) {
+ #ifdef VERBOSE_DEBUG_XOR_FINDER
+ cout << "Adding to XOR: " << cl << endl;
+
+ cout << "FoundComb before:" << endl;
+ for(size_t i = 0; i < foundComb.size(); i++) {
+ cout << "foundComb[" << i << "]: " << foundComb[i] << endl;
+ }
+ cout << "----" << endl;
+ #endif
+
+ //It's the base clause, skip.
+ if (!offsets.empty() && offset == offsets[0])
+ return;
+
+ assert(cl.size() <= size);
+
+ //If clause covers more than one combination, this is used to calculate which ones
+ varsMissing.clear();
+
+ //Position of literal in the ORIGINAL clause.
+ //This may be larger than the position in the current clause (as some literals could be missing)
+ uint32_t origI = 0;
+
+ //Position in current clause
+ uint32_t i = 0;
+
+ //Used to calculate this clause covers which combination(s)
+ uint32_t whichOne = 0;
+
+ bool thisRhs = true;
+
+ for (typename T::const_iterator
+ l = cl.begin(), end = cl.end()
+ ; l != end
+ ; l++, i++, origI++
+ ) {
+ thisRhs ^= l->sign();
+
+ //some variables might be missing in the middle
+ while(cl[i].var() != origCl[origI].var()) {
+ varsMissing.push_back(origI);
+ origI++;
+ assert(origI < size && "cl must be sorted");
+ }
+ if (i > 0) {
+ assert(cl[i-1] < cl[i] && "Must be sorted");
+ }
+ whichOne |= ((uint32_t)l->sign()) << origI;
+ }
+
+ //if vars are missing from the end
+ while(origI < size) {
+ varsMissing.push_back(origI);
+ origI++;
+ }
+
+ assert(cl.size() < size || rhs == thisRhs);
+
+ //set to true every combination for the missing variables
+ for (uint32_t j = 0; j < 1UL<<(varsMissing.size()); j++) {
+ uint32_t thisWhichOne = whichOne;
+ for (uint32_t i2 = 0; i2 < varsMissing.size(); i2++) {
+ if (bit(j, i2)) thisWhichOne+= 1<<(varsMissing[i2]);
+ }
+ foundComb[thisWhichOne] = true;
+ }
+ if (offset != std::numeric_limits<ClOffset>::max()) {
+ offsets.push_back(offset);
+ }
+
+ #ifdef VERBOSE_DEBUG_XOR_FINDER
+ cout << "whichOne was:" << whichOne << endl;
+ cout << "FoundComb after:" << endl;
+ for(size_t i = 0; i < foundComb.size(); i++) {
+ cout << "foundComb[" << i << "]: " << foundComb[i] << endl;
+ }
+ cout << "----" << endl;
+ #endif
+}
+
+inline bool PossibleXor::foundAll() const
+{
+ bool OK = true;
+ for (uint32_t i = 0; i < foundComb.size(); i++) {
+ //Only count combinations with the correct RHS
+ if ((NumberOfSetBits(i)%2) == (uint32_t)rhs) {
+ continue;
+ }
+
+ //If this combination hasn't been found yet, then the XOR is not complete
+ if (!foundComb[i]) {
+ OK = false;
+ break;
+ }
+ }
+
+ #ifdef VERBOSE_DEBUG_XOR_FINDER
+ if (OK) {
+ cout << "Found all for this clause" << endl;
+ }
+ #endif
+
+ return OK;
+}
+
+inline uint32_t PossibleXor::NumberOfSetBits(uint32_t i) const
+{
+ //Magic is coming! (copied from some book.... never trust code like this!)
+ i = i - ((i >> 1) & 0x55555555);
+ i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
+ return (((i + (i >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
+}
+
+inline bool PossibleXor::bit(const uint32_t a, const uint32_t b) const
+{
+ return (((a)>>(b))&1);
+}
+
+inline const XorFinder::Stats& XorFinder::get_stats() const
+{
+ return globalStats;
+}
+
+} //end namespace
+
+#endif //_XORFINDER_H_
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/tests/CMakeLists.txt
new file mode 100644
index 000000000..9a9fe5d47
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/CMakeLists.txt
@@ -0,0 +1,198 @@
+# Copyright (c) 2017, Mate Soos
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+
+find_program(LIT_TOOL
+ lit
+ DOC "Path to lit tool"
+)
+
+if(NOT LIT_TOOL)
+ message(FATAL_ERROR "Could not find 'lit' tool. You need to install it by e.g. 'pip install lit' If it's already installed, set LIT_TOOL to the full path for lit")
+endif()
+
+# Checking absolute path because if(EXISTS ...) behaviour only well
+# defined if path is absolute
+IF(NOT IS_ABSOLUTE "${LIT_TOOL}")
+ message(FATAL_ERROR "LIT_TOOL must be set to an absolute PATH")
+endif()
+
+if(NOT EXISTS "${LIT_TOOL}")
+ # Can happen if users environment changes after initial configure
+ message(FATAL_ERROR "LIT_TOOL is set but the path does not seem to exist. Try deleting the LIT_TOOL cache variable and reconfiguring")
+endif()
+
+set(LIT_ARGS -v CACHE STRING "Arguments to pass to lit")
+
+# -----------------------------------------------------------------------------
+# Find GTest library which will be used to drive tests
+# -----------------------------------------------------------------------------
+# GoogleTest devs don't recommend using a pre-built GTest library
+# ( https://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog ).
+# Because of this, distros like Ubuntu don't provide a pre-built GTest library
+# so ``find_package(GTest REQUIRED)`` fails.
+#
+# Instead it is recommended that projects build their own copy of GTest. Detecting
+# the location of GTest source code is probably error prone so using a copy in the
+# repository seems like the easiest thing to do. This also has the added benefit that
+# everyone uses the same version of GTest.
+set(GTEST_PREFIX ${PROJECT_SOURCE_DIR}/utils/gtest)
+message(STATUS "NOTE: if adding the 'gtest' subdirectory fails, you need to issue 'git submodule init' and 'git submodule update'")
+add_subdirectory(${GTEST_PREFIX} gtest)
+set(GTEST_BOTH_LIBRARIES gtest gtest_main)
+
+include_directories(${GTEST_PREFIX}/include)
+add_definitions( -DCMS_TESTING_ENABLED )
+
+# Add handy macros/functions
+include(AddSTPGTest)
+include(AddGTestSuite)
+
+# -----------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+
+if(NOT ONLY_SIMPLE)
+ # Tests that drive cryptominisat by using cnf files (e.g. smt2, smt and cvc files)
+ add_subdirectory(${PROJECT_SOURCE_DIR}/tests/cnf-files)
+
+ # Needed for fuzz-testing
+ add_subdirectory(${PROJECT_SOURCE_DIR}/utils/cnf-utils cnf-utils)
+ add_subdirectory(${PROJECT_SOURCE_DIR}/utils/drat-trim drat-trim)
+ add_subdirectory(${PROJECT_SOURCE_DIR}/utils/sha1-sat sha1-sat)
+ add_subdirectory(${PROJECT_SOURCE_DIR}/utils/minisat minisat)
+endif()
+
+add_sanitize_flags()
+if (PYTHON_EXECUTABLE AND ZLIB_FOUND AND NOT STATS_NEEDED AND NOT ONLY_SIMPLE)
+ add_subdirectory(${PROJECT_SOURCE_DIR}/utils/minisat_only_elim_and_subsume minisat_only_elim_and_subsume)
+ add_subdirectory(simp-checks)
+endif()
+
+
+include_directories(
+ ${PROJECT_SOURCE_DIR}
+)
+include_directories(
+ ${PROJECT_BINARY_DIR}/cmsat5-src
+)
+
+# README test
+add_executable(readme_test
+ readme_test.cpp
+)
+target_link_libraries(readme_test
+ libcryptominisat5
+)
+add_test (
+ NAME readme_test
+ COMMAND readme_test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+# C bindings test
+if (NOT SANITIZE)
+ add_executable(c_test
+ c_test.c
+ )
+ target_link_libraries(c_test
+ libcryptominisat5
+ )
+ add_test (
+ NAME c_test
+ COMMAND c_test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+endif()
+
+# Multisol test
+add_executable(multisol_test
+ multisol_test.cpp
+)
+target_link_libraries(multisol_test
+ libcryptominisat5
+)
+add_test (
+ NAME multisol_test
+ COMMAND multisol_test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+
+if (IPASIR)
+ add_executable(ipasir_test
+ ipasir_test.cpp
+ )
+ target_link_libraries(ipasir_test
+ ${GTEST_BOTH_LIBRARIES}
+ ipasircryptominisat5
+ )
+ add_test (
+ NAME ipasir_test
+ COMMAND ipasir_test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+endif()
+
+#google test harness
+set (MY_TESTS
+# clause_alloc_test
+ basic_test
+ assump_test
+ heap_test
+ clause_test
+ stp_test
+ scc_test
+ vrepl_test
+ clause_cleaner_test
+ probe_test
+ distiller_all_with_all_test
+ distill_long_with_implicit_test
+ subsume_impl_test
+ comp_find_test
+ intree_test
+ xorfinder_test
+ comphandler_test
+ dump_test
+ searcher_test
+ solver_test
+# undefine_test
+)
+
+if (USE_GAUSS)
+ set (MY_TESTS ${MY_TESTS}
+ # gauss_test
+ matrixfinder_test
+ )
+endif()
+
+foreach(F ${MY_TESTS})
+ add_executable(${F}
+ ${F}.cpp
+ )
+ target_link_libraries(${F}
+ ${GTEST_BOTH_LIBRARIES}
+ libcryptominisat5
+ )
+ add_test (
+ NAME ${F}
+ COMMAND ${F}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+endforeach()
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/assump_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/assump_test.cpp
new file mode 100644
index 000000000..8276cf1a8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/assump_test.cpp
@@ -0,0 +1,214 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include "cryptominisat5/cryptominisat.h"
+#include "src/solverconf.h"
+#include <vector>
+using std::vector;
+using namespace CMSat;
+
+struct assump_interf : public ::testing::Test {
+ assump_interf()
+ {
+ SolverConf conf;
+ s = new SATSolver(&conf);
+ }
+ ~assump_interf()
+ {
+ delete s;
+ }
+ SATSolver* s = NULL;
+ vector<Lit> assumps;
+};
+
+TEST_F(assump_interf, empty)
+{
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false)});
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s->okay(), true);
+}
+
+TEST_F(assump_interf, single_true)
+{
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false)});
+ assumps.push_back(Lit(0, false));
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s->okay(), true);
+}
+
+TEST_F(assump_interf, single_false)
+{
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false)});
+ assumps.push_back(Lit(0, true));
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s->get_conflict().size(), 1u);
+ EXPECT_EQ( s->get_conflict()[0], Lit(0, false));
+}
+
+
+TEST_F(assump_interf, single_false_then_true)
+{
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false)});
+ assumps.push_back(Lit(0, true));
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s->okay(), true);
+
+ ret = s->solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s->okay(), true);
+
+}
+
+TEST_F(assump_interf, binclause_true)
+{
+ s->new_var();
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false), Lit(1, false)});
+ assumps.push_back(Lit(0, true));
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_True );
+ EXPECT_EQ( s->get_model()[0], l_False );
+ EXPECT_EQ( s->get_model()[1], l_True );
+}
+
+TEST_F(assump_interf, binclause_false)
+{
+ s->new_var();
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false), Lit(1, false)});
+ assumps.push_back(Lit(0, true));
+ assumps.push_back(Lit(1, true));
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s->get_conflict().size(), 2u);
+
+ vector<Lit> tmp = s->get_conflict();
+ std::sort(tmp.begin(), tmp.end());
+ EXPECT_EQ( tmp[0], Lit(0, false) );
+ EXPECT_EQ( tmp[1], Lit(1, false) );
+}
+
+TEST_F(assump_interf, replace_true)
+{
+ s->new_var();
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false), Lit(1, true)});
+ s->add_clause(vector<Lit>{Lit(0, true), Lit(1, false)});
+ assumps.push_back(Lit(0, true));
+ assumps.push_back(Lit(1, true));
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s->get_model()[0], l_False );
+ EXPECT_EQ( s->get_model()[1], l_False );
+
+ assumps.clear();
+ assumps.push_back(Lit(0, true));
+ assumps.push_back(Lit(1, false));
+ ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+}
+
+TEST_F(assump_interf, replace_false)
+{
+ s->new_var();
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false), Lit(1, true)}); //a V -b
+ s->add_clause(vector<Lit>{Lit(0, true), Lit(1, false)}); //-a V b
+ //a == b
+
+ assumps.push_back(Lit(0, false));
+ assumps.push_back(Lit(1, true));
+ //a = 1, b = 0
+
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s->okay(), true);
+
+ EXPECT_EQ( s->get_conflict().size(), 2u);
+
+ vector<Lit> tmp = s->get_conflict();
+ std::sort(tmp.begin(), tmp.end());
+ EXPECT_EQ( tmp[0], Lit(0, true) );
+ EXPECT_EQ( tmp[1], Lit(1, false) );
+}
+
+TEST_F(assump_interf, set_var_by_prop)
+{
+ s->new_var();
+ s->new_var();
+ s->add_clause(vector<Lit>{Lit(0, false)}); //a = 1
+ s->add_clause(vector<Lit>{Lit(0, true), Lit(1, false)}); //-a V b
+ //-> b = 1
+
+ assumps.push_back(Lit(1, true));
+ //b = 0
+
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s->okay(), true);
+
+ EXPECT_EQ( s->get_conflict().size(), 1u);
+
+ vector<Lit> tmp = s->get_conflict();
+ EXPECT_EQ( tmp[0], Lit(1, false) );
+}
+
+TEST_F(assump_interf, only_assump)
+{
+ s->new_var();
+ s->new_var();
+
+ assumps.push_back(Lit(1, true));
+ assumps.push_back(Lit(1, false));
+
+ lbool ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s->okay(), true);
+ EXPECT_EQ( s->get_conflict().size(), 2u);
+
+ vector<Lit> tmp = s->get_conflict();
+ std::sort(tmp.begin(), tmp.end());
+ EXPECT_EQ( tmp[0] , Lit(1, false) );
+ EXPECT_EQ( tmp[1], Lit(1, true) );
+
+ ret = s->solve(NULL);
+ EXPECT_EQ( ret, l_True );
+
+ ret = s->solve(&assumps);
+ EXPECT_EQ( ret, l_False);
+}
+
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp
new file mode 100644
index 000000000..4a52a2a2a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp
@@ -0,0 +1,1109 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "cryptominisat5/cryptominisat.h"
+#include "src/solverconf.h"
+#include "test_helper.h"
+using namespace CMSat;
+#include <vector>
+using std::vector;
+
+
+TEST(normal_interface, start)
+{
+ SATSolver s;
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.okay(), true);
+}
+
+TEST(normal_interface, onelit)
+{
+ SATSolver s;
+ s.new_var();
+ s.add_clause(str_to_cl("1"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.okay(), true);
+}
+
+TEST(normal_interface, twolit)
+{
+ SATSolver s;
+ s.new_var();
+ s.add_clause(str_to_cl("1"));
+ s.add_clause(str_to_cl("-1"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.okay(), false);
+}
+
+TEST(normal_interface, multi_solve_unsat)
+{
+ SATSolver s;
+ s.new_var();
+ s.add_clause(str_to_cl("1"));
+ s.add_clause(str_to_cl("-1"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.okay(), false);
+ for(size_t i = 0;i < 10; i++) {
+ ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.okay(), false);
+ }
+}
+
+TEST(normal_interface, multi_solve_unsat_multi_thread)
+{
+ SATSolver s;
+ s.set_num_threads(2);
+ s.new_var();
+ s.add_clause(str_to_cl("1"));
+ s.add_clause(str_to_cl("-1"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.okay(), false);
+ for(size_t i = 0;i < 10; i++) {
+ ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.okay(), false);
+ }
+}
+
+TEST(normal_interface, solve_multi_thread)
+{
+ SATSolver s;
+ s.set_num_threads(2);
+ s.new_vars(2);
+ s.add_clause(str_to_cl("1, 2"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ s.add_clause(str_to_cl("-1"));
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_False);
+ EXPECT_EQ(s.get_model()[1], l_True);
+}
+
+TEST(normal_interface, logfile)
+{
+ SATSolver* s = new SATSolver();
+ s->log_to_file("testfile");
+ s->new_vars(2);
+ s->add_clause(str_to_cl("1, 2"));
+ lbool ret = s->solve();
+ EXPECT_EQ( ret, l_True);
+ delete s;
+
+ std::ifstream infile("testfile");
+ std::string line;
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::new_vars( 2 )");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "1 2 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::solve( )");
+}
+
+TEST(normal_interface, logfile2)
+{
+ SATSolver* s = new SATSolver();
+ s->log_to_file("testfile");
+ s->new_vars(2);
+ s->add_clause(str_to_cl("1"));
+ s->add_clause(str_to_cl("1, 2"));
+ lbool ret = s->solve();
+ s->add_clause(vector<Lit>{Lit(1, false)});
+ ret = s->solve();
+ delete s;
+
+ std::ifstream infile("testfile");
+ std::string line;
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::new_vars( 2 )");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "1 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "1 2 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::solve( )");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "2 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::solve( )");
+}
+
+TEST(normal_interface, logfile2_assumps)
+{
+ SATSolver* s = new SATSolver();
+ s->log_to_file("testfile");
+ s->new_vars(2);
+ s->add_clause(str_to_cl("1"));
+ s->add_clause(str_to_cl("1, 2"));
+ std::vector<Lit> assumps {Lit(0, false), Lit(1, true)};
+ lbool ret = s->solve(&assumps);
+ s->add_clause(vector<Lit>{Lit(1, false)});
+ assumps.clear();
+ assumps.push_back(Lit(1, true));
+ ret = s->solve(&assumps);
+ delete s;
+
+ std::ifstream infile("testfile");
+ std::string line;
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::new_vars( 2 )");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "1 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "1 2 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::solve( 1 -2 )");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "2 0");
+ std::getline(infile, line);
+ EXPECT_EQ(line, "c Solver::solve( -2 )");
+}
+
+TEST(normal_interface, max_time)
+{
+ SATSolver* s = new SATSolver();
+ s->new_vars(200);
+ s->add_clause(str_to_cl("1"));
+ s->add_clause(str_to_cl("1, 2"));
+ s->set_max_time(3);
+ lbool ret = s->solve();
+ s->add_clause(vector<Lit>{Lit(1, false)});
+ ret = s->solve();
+ delete s;
+ EXPECT_EQ(ret, l_True);
+}
+
+bool is_critical(const std::range_error&) { return true; }
+
+TEST(xor_interface, xor_check_sat_solution)
+{
+ SATSolver s;
+ s.new_var();
+ s.add_xor_clause(vector<unsigned>{0U}, false);
+ s.add_xor_clause(vector<unsigned>{0U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ for(size_t i = 0;i < 10; i++) {
+ ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ }
+ EXPECT_EQ( s.nVars(), 1u);
+}
+
+TEST(xor_interface, xor_check_unsat_solution)
+{
+ SATSolver s;
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U}, true);
+ s.add_xor_clause(vector<uint32_t>{0U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ for(size_t i = 0;i < 10; i++) {
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.okay(), true);
+ }
+ EXPECT_EQ( s.nVars(), 1u);
+}
+
+TEST(xor_interface, xor_check_solution_values)
+{
+ SATSolver s;
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U}, true);
+ s.add_xor_clause(vector<uint32_t>{0U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ for(size_t i = 0;i < 10; i++) {
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.okay(), true);
+ }
+ EXPECT_EQ( s.nVars(), 1u);
+}
+
+TEST(xor_interface, xor_check_solution_values2)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U}, true);
+ s.add_xor_clause(vector<uint32_t>{1U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ for(size_t i = 0;i < 10; i++) {
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_True);
+ EXPECT_EQ(s.get_model()[1], l_True);
+ }
+ EXPECT_EQ( s.nVars(), 2u);
+}
+
+TEST(xor_interface, xor_check_solution_values3)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 0U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+}
+
+TEST(xor_interface, xor_check_solution_values4)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 0U}, false);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.nVars(), 2u);
+}
+
+
+TEST(xor_interface, xor_check_solution_values5)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U}, true);
+ vector<Lit> assump = {Lit(0, false)};
+ lbool ret = s.solve(&assump);
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.okay(), true);
+ EXPECT_EQ(s.get_model()[0], l_True);
+ EXPECT_EQ(s.get_model()[1], l_False);
+ EXPECT_EQ( s.nVars(), 2u);
+}
+
+TEST(xor_interface, xor_check_solution_values6)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U}, false);
+ vector<Lit> assump = {Lit(0, true)};
+ lbool ret = s.solve(&assump);
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_False);
+ EXPECT_EQ(s.get_model()[1], l_False);
+ EXPECT_EQ( s.nVars(), 2u);
+}
+
+TEST(xor_interface, xor_check_solution_values7)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
+ vector<Lit> assump = {Lit(0, false), Lit(1, false)};
+ lbool ret = s.solve(&assump);
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_True);
+ EXPECT_EQ(s.get_model()[1], l_True);
+ EXPECT_EQ(s.get_model()[2], l_False);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, xor_3_long)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
+ s.add_xor_clause(vector<uint32_t>{0}, true);
+ s.add_xor_clause(vector<uint32_t>{1}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_True);
+ EXPECT_EQ(s.get_model()[1], l_True);
+ EXPECT_EQ(s.get_model()[2], l_True);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, xor_3_long2)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
+ s.add_xor_clause(vector<uint32_t>{0U}, true);
+ s.add_xor_clause(vector<uint32_t>{1U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_True);
+ EXPECT_EQ(s.get_model()[1], l_True);
+ EXPECT_EQ(s.get_model()[2], l_False);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, xor_4_long)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U, 3U}, false);
+ s.add_xor_clause(vector<uint32_t>{0U}, false);
+ s.add_xor_clause(vector<uint32_t>{1U}, false);
+ s.add_xor_clause(vector<uint32_t>{2U}, false);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_False);
+ EXPECT_EQ(s.get_model()[1], l_False);
+ EXPECT_EQ(s.get_model()[2], l_False);
+ EXPECT_EQ(s.get_model()[3], l_False);
+ EXPECT_EQ( s.nVars(), 4u);
+}
+
+TEST(xor_interface, xor_4_long2)
+{
+ SATSolver s;
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.new_var();
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U, 3U}, true);
+ s.add_xor_clause(vector<uint32_t>{0U}, false);
+ s.add_xor_clause(vector<uint32_t>{1U}, false);
+ s.add_xor_clause(vector<uint32_t>{2U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_False);
+ EXPECT_EQ(s.get_model()[1], l_False);
+ EXPECT_EQ(s.get_model()[2], l_True);
+ EXPECT_EQ(s.get_model()[3], l_False);
+ EXPECT_EQ( s.nVars(), 4u);
+}
+
+TEST(xor_interface, xor_very_long)
+{
+ SATSolver s;
+ vector<uint32_t> vars;
+ for(unsigned i = 0; i < 30; i++) {
+ s.new_var();
+ vars.push_back(i);
+ }
+ s.add_xor_clause(vars, false);
+ for(unsigned i = 0; i < 29; i++) {
+ s.add_xor_clause(vector<uint32_t>{i}, false);
+ }
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ for(unsigned i = 0; i < 30; i++) {
+ EXPECT_EQ(s.get_model()[i], l_False);
+ }
+ EXPECT_EQ( s.nVars(), 30u);
+}
+
+TEST(xor_interface, xor_very_long2)
+{
+ for(size_t num = 3; num < 30; num++) {
+ SATSolver s;
+ vector<uint32_t> vars;
+ for(unsigned i = 0; i < num; i++) {
+ s.new_var();
+ vars.push_back(i);
+ }
+ s.add_xor_clause(vars, true);
+ for(unsigned i = 0; i < num-1; i++) {
+ s.add_xor_clause(vector<uint32_t>{i}, false);
+ }
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ for(unsigned i = 0; i < num-1; i++) {
+ EXPECT_EQ(s.get_model()[i], l_False);
+ }
+ EXPECT_EQ(s.get_model()[num-1], l_True);
+ EXPECT_EQ( s.nVars(), num);
+ }
+}
+
+TEST(xor_interface, xor_check_unsat)
+{
+ SATSolver s;
+ s.new_vars(3);
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, xor_check_unsat_multi_thread)
+{
+ SATSolver s;
+ s.set_num_threads(3);
+ s.new_vars(3);
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.okay(), false);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, xor_check_unsat_multi_solve_multi_thread)
+{
+ SATSolver s;
+ s.set_num_threads(3);
+ s.new_vars(3);
+ s.add_xor_clause(vector<uint32_t>{0U, 1U}, false);
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.nVars(), 3u);
+
+ s.add_xor_clause(vector<uint32_t>{0U}, false);
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ EXPECT_EQ( s.get_model()[0], l_False);
+ EXPECT_EQ( s.get_model()[1], l_False);
+ EXPECT_EQ( s.get_model()[2], l_True);
+ EXPECT_EQ( s.nVars(), 3u);
+
+ s.add_xor_clause(vector<uint32_t>{1U}, true);
+ ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, xor_norm_mix_unsat_multi_thread)
+{
+ SATSolver s;
+ //s.set_num_threads(3);
+ s.new_vars(3);
+ s.add_clause(str_to_cl("1"));
+ s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
+ s.add_clause(vector<Lit>{Lit(1, false)});
+ s.add_clause(vector<Lit>{Lit(2, false)});
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_False);
+ EXPECT_EQ( s.nVars(), 3u);
+}
+
+TEST(xor_interface, unit)
+{
+ SATSolver s;
+ s.new_vars(3);
+ s.add_clause(str_to_cl("1"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ vector<Lit> units = s.get_zero_assigned_lits();
+ EXPECT_EQ( units.size(), 1u);
+ EXPECT_EQ( units[0], Lit(0, false));
+}
+
+TEST(xor_interface, unit2)
+{
+ SATSolver s;
+ s.new_vars(3);
+ s.add_clause(str_to_cl("1"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ vector<Lit> units = s.get_zero_assigned_lits();
+ EXPECT_EQ( units.size(), 1u);
+ EXPECT_EQ( units[0], Lit(0, false));
+
+ s.add_clause(vector<Lit>{Lit(1, true)});
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ units = s.get_zero_assigned_lits();
+ EXPECT_EQ( units.size(), 2u);
+ EXPECT_EQ( units[0], Lit(0, false));
+ EXPECT_EQ( units[1], Lit(1, true));
+}
+
+TEST(xor_interface, unit3)
+{
+ SATSolver s;
+ s.new_vars(3);
+ s.add_clause(str_to_cl("1"));
+ s.add_clause(str_to_cl("-1, -2"));
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ vector<Lit> units = s.get_zero_assigned_lits();
+ EXPECT_EQ( units.size(), 2u);
+ EXPECT_EQ( units[0], Lit(0, false));
+ EXPECT_EQ( units[1], Lit(1, true));
+}
+
+TEST(xor_interface, xor1)
+{
+ SolverConf conf;
+ conf.simplify_at_startup = true;
+ conf.full_simplify_at_startup = true;
+ SATSolver s(&conf);
+
+ s.new_vars(3);
+ s.add_xor_clause(vector<uint32_t>{0, 1}, false);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ vector<std::pair<Lit, Lit> > pairs = s.get_all_binary_xors();
+ EXPECT_EQ( pairs.size(), 1u);
+}
+
+TEST(xor_interface, xor2)
+{
+ SolverConf conf;
+ conf.simplify_at_startup = true;
+ conf.full_simplify_at_startup = true;
+ SATSolver s(&conf);
+
+ s.new_vars(3);
+ s.add_xor_clause(vector<uint32_t>{0, 1}, false);
+ s.add_xor_clause(vector<uint32_t>{1, 2}, false);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ vector<std::pair<Lit, Lit> > pairs = s.get_all_binary_xors();
+ EXPECT_EQ( pairs.size(), 2u);
+}
+
+TEST(xor_interface, abort_early)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ s.set_no_equivalent_lit_replacement();
+
+ s.set_num_threads(2);
+ s.set_max_confl(0);
+ s.new_vars(2);
+
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("1, -2"));
+ s.add_clause(str_to_cl("-1, 2"));
+ s.add_clause(str_to_cl("-1, -2"));
+
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_Undef);
+}
+
+TEST(xor_interface, abort_once_continue_next)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ s.set_no_equivalent_lit_replacement();
+
+ s.set_num_threads(2);
+ s.set_max_confl(0);
+ s.new_vars(2);
+
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("1, -2"));
+ s.add_clause(str_to_cl("-1, 2"));
+ s.add_clause(str_to_cl("-1, -2"));
+
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_Undef);
+ lbool ret2 = s.solve();
+ EXPECT_EQ( ret2, l_False);
+}
+
+TEST(xor_interface, xor3)
+{
+ SolverConf conf;
+ conf.simplify_at_startup = true;
+ conf.simplify_at_every_startup = true;
+ conf.full_simplify_at_startup = true;
+ SATSolver s(&conf);
+
+ s.new_vars(3);
+ s.add_xor_clause(vector<uint32_t>{0, 1}, false);
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ vector<std::pair<Lit, Lit> > pairs = s.get_all_binary_xors();
+ EXPECT_EQ( pairs.size(), 1u);
+
+ s.add_xor_clause(vector<uint32_t>{1, 2}, false);
+ ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+ pairs = s.get_all_binary_xors();
+ EXPECT_EQ( pairs.size(), 2u);
+}
+
+TEST(error_throw, multithread_newvar)
+{
+ SATSolver s;
+
+ s.new_vars(3);
+ EXPECT_THROW({
+ s.set_num_threads(3);}
+ , std::runtime_error);
+}
+
+TEST(error_throw, multithread_0)
+{
+ SATSolver s;
+
+ EXPECT_THROW({
+ s.set_num_threads(0);}
+ , std::runtime_error);
+}
+
+TEST(error_throw, multithread_drat)
+{
+ SATSolver s;
+ std::ostream* os = NULL;
+ s.set_drat(os, false);
+
+ EXPECT_THROW({
+ s.set_num_threads(3);}
+ , std::runtime_error);
+}
+
+TEST(error_throw, toomany_vars)
+{
+ SATSolver s;
+
+ EXPECT_THROW({
+ s.new_vars(1ULL << 28);}
+ , CMSat::TooManyVarsError);
+}
+
+TEST(error_throw, toomany_vars2)
+{
+ SATSolver s;
+ s.new_vars(1ULL << 27);
+
+ EXPECT_THROW({
+ s.new_vars(1ULL << 27);}
+ , CMSat::TooManyVarsError);
+}
+
+TEST(error_throw, toomany_vars_single)
+{
+ SATSolver s;
+ s.new_vars((1ULL << 28) -1);
+
+ EXPECT_THROW({
+ s.new_var();}
+ , CMSat::TooManyVarsError);
+}
+
+TEST(no_error_throw, long_clause)
+{
+ SATSolver s;
+ s.new_vars(1ULL << 20);
+
+ vector<Lit> cl;
+ for(size_t i = 0; i < 1ULL << 20; i++) {
+ cl.push_back(Lit(i, false));
+ }
+ s.add_clause(cl);
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_True);
+}
+
+TEST(statistics, zero)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ s.new_vars(10);
+
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_True);;
+ EXPECT_EQ(s.get_sum_conflicts(), 0);
+ EXPECT_EQ(s.get_sum_propagations(), 10);
+ EXPECT_EQ(s.get_sum_decisions(), 10);
+}
+
+TEST(statistics, one_confl)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ s.new_vars(10);
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("1, -2"));
+ s.add_clause(str_to_cl("-1, 2"));
+
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_True);
+ EXPECT_EQ(s.get_sum_conflicts(), 1);
+ EXPECT_EQ(s.get_sum_propagations(), 11);
+}
+
+TEST(statistics, unsat)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ s.new_vars(10);
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("1, -2"));
+ s.add_clause(str_to_cl("-1, 2"));
+ s.add_clause(str_to_cl("-1, -2"));
+
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_False);
+ EXPECT_EQ(s.get_sum_conflicts(), 2);
+ EXPECT_EQ(s.get_sum_propagations(), 2);
+}
+
+TEST(statistics, last_vs_sum_conflicts)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ s.new_vars(10);
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("1, -2"));
+ s.add_clause(str_to_cl("-1, 2"));
+ s.add_clause(str_to_cl("-1, -2"));
+
+ s.set_max_confl(0);
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_Undef);
+ EXPECT_EQ(s.get_sum_conflicts(), 0);
+ EXPECT_EQ(s.get_last_conflicts(), 0);
+
+ s.set_max_confl(2);
+ ret = s.solve();
+ EXPECT_EQ(ret, l_False);
+ EXPECT_EQ(s.get_sum_conflicts(), 2);
+ EXPECT_EQ(s.get_last_conflicts(), 2);
+}
+
+TEST(propagate, trivial_1)
+{
+ SATSolver s;
+ s.new_vars(10);
+ s.add_clause(str_to_cl("-1"));
+
+ vector<Lit> lits = s.get_zero_assigned_lits();
+ vector<Lit>::iterator it;
+ it = std::find(lits.begin(), lits.end(), Lit(0, true));
+ EXPECT_NE(it, lits.end());
+ EXPECT_EQ(lits.size(), 1);
+}
+
+TEST(propagate, trivial_2)
+{
+ SATSolver s;
+ s.new_vars(10);
+ s.add_clause(str_to_cl("-1"));
+ s.add_clause(str_to_cl("-2"));
+
+ vector<Lit> lits = s.get_zero_assigned_lits();
+ vector<Lit>::iterator it;
+ it = std::find(lits.begin(), lits.end(), Lit(0, true));
+ EXPECT_NE(it, lits.end());
+ it = std::find(lits.begin(), lits.end(), Lit(1, true));
+ EXPECT_NE(it, lits.end());
+
+ EXPECT_EQ(lits.size(), 2);
+}
+
+TEST(propagate, prop_1)
+{
+ SATSolver s;
+ s.new_vars(10);
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("-1"));
+
+ vector<Lit> lits = s.get_zero_assigned_lits();
+ vector<Lit>::iterator it;
+ it = std::find(lits.begin(), lits.end(), Lit(0, true));
+ EXPECT_NE(it, lits.end());
+ it = std::find(lits.begin(), lits.end(), Lit(1, false));
+ EXPECT_NE(it, lits.end());
+
+ EXPECT_EQ(lits.size(), 2);
+}
+
+TEST(propagate, prop_1_alter)
+{
+ SATSolver s;
+ s.new_vars(10);
+ s.add_clause(str_to_cl("-1"));
+ s.add_clause(str_to_cl("1, 2"));
+
+ vector<Lit> lits = s.get_zero_assigned_lits();
+ vector<Lit>::iterator it;
+ it = std::find(lits.begin(), lits.end(), Lit(0, true));
+ EXPECT_NE(it, lits.end());
+ it = std::find(lits.begin(), lits.end(), Lit(1, false));
+ EXPECT_NE(it, lits.end());
+ EXPECT_EQ(lits.size(), 2);
+}
+
+TEST(propagate, prop_many)
+{
+ SATSolver s;
+ s.new_vars(30);
+ for(unsigned i = 0; i < 10; i++) {
+ s.add_clause(vector<Lit>{Lit(i*2, true), Lit(i*2+1, true)});
+ s.add_clause(vector<Lit>{Lit(i*2, false)});
+ }
+
+ vector<Lit> lits = s.get_zero_assigned_lits();
+ for(unsigned i = 0; i < 10; i++) {
+ vector<Lit>::iterator it;
+ it = std::find(lits.begin(), lits.end(), Lit(i*2, false));
+ EXPECT_NE(it, lits.end());
+ it = std::find(lits.begin(), lits.end(), Lit(i*2+1, true));
+ EXPECT_NE(it, lits.end());
+ }
+
+ EXPECT_EQ(lits.size(), 10*2);
+}
+
+TEST(propagate, prop_complex)
+{
+ SATSolver s;
+ s.new_vars(30);
+
+ s.add_clause(str_to_cl("-1"));
+ s.add_clause(str_to_cl("1, 2"));
+
+ s.add_clause(str_to_cl("-5, 6"));
+ s.add_clause(str_to_cl("5"));
+
+ s.add_clause(str_to_cl("1, -2, -5, -6, 7"));
+
+ vector<Lit> lits = s.get_zero_assigned_lits();
+ vector<Lit>::iterator it;
+ it = std::find(lits.begin(), lits.end(), Lit(6, true));
+ EXPECT_EQ(lits.size(), 5);
+}
+
+TEST(independent, indep1)
+{
+ SolverConf conf;
+ conf.simplify_at_startup = true;
+ SATSolver s(&conf);
+
+ s.new_vars(30);
+ s.add_clause(str_to_cl("1, 2, 3, 4"));
+ s.add_clause(str_to_cl("-5, 6"));
+
+ vector<uint32_t> x{4U};
+ s.set_independent_vars(&x);
+
+ lbool ret = s.solve(NULL, true);
+ EXPECT_EQ(ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_Undef);
+ EXPECT_EQ(s.get_model()[1], l_Undef);
+ EXPECT_NE(s.get_model()[4], l_Undef);
+
+ ret = s.solve();
+ EXPECT_EQ(ret, l_True);
+ EXPECT_NE(s.get_model()[0], l_Undef);
+ EXPECT_NE(s.get_model()[1], l_Undef);
+ EXPECT_NE(s.get_model()[4], l_Undef);
+}
+
+TEST(independent, indep2)
+{
+ SolverConf conf;
+ conf.simplify_at_startup = true;
+ SATSolver s(&conf);
+
+ s.new_vars(30);
+ s.add_clause(str_to_cl("1, 2, 3, 4"));
+ s.add_clause(str_to_cl("-5, 6"));
+
+ vector<uint32_t> x{0U,1U,2U,3U,4U,5U};
+ s.set_independent_vars(&x);
+
+ lbool ret = s.solve(NULL, true);
+ EXPECT_EQ(ret, l_True);
+ for(uint32_t i = 0; i < 6; i++) {
+ EXPECT_NE(s.get_model()[i], l_Undef);
+ }
+ EXPECT_EQ(s.get_model()[6], l_Undef);
+}
+
+
+
+TEST(xor_recovery, find_1_3_xor)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 1);
+}
+
+TEST(xor_recovery, find_1_3_xor2)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, true);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 1);
+}
+
+TEST(xor_recovery, find_2_3_xor)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_clause(str_to_cl("1,2,3,4,5"));
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
+ s.add_xor_clause(vector<unsigned>{0U, 2U, 3U}, false);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 2);
+}
+
+TEST(xor_recovery, find_2_3_xor_elongate)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_clause(str_to_cl("1,2,3,4,5"));
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
+ s.add_xor_clause(vector<unsigned>{0U, 3U, 4U}, false);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(true);
+ EXPECT_EQ(xors.size(), 1);
+ EXPECT_EQ(xors[0].first, (vector<uint32_t>{1U, 2U, 3U, 4U}));
+ EXPECT_EQ(xors[0].second, false);
+}
+
+TEST(xor_recovery, find_1_3_xor_exact)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 1);
+ EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U}));
+ EXPECT_EQ(xors[0].second, false);
+}
+
+TEST(xor_recovery, find_1_3_xor_exact2)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, true);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 1);
+ EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U}));
+ EXPECT_EQ(xors[0].second, true);
+}
+
+TEST(xor_recovery, find_1_4_xor_exact)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U}, false);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 1);
+ EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U, 3U}));
+}
+
+TEST(xor_recovery, find_xor_one_only)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U, 4U, 5U}, false);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(true);
+ EXPECT_EQ(xors.size(), 1);
+ EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U, 3U, 4U, 5U}));
+}
+
+TEST(xor_recovery, find_xor_none_because_internal_var)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U, 4U, 5U}, true);
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
+ EXPECT_EQ(xors.size(), 0);
+}
+
+//TODO the renubmering make 31 out of 3 and then it's not "outside" anymore...
+TEST(xor_recovery, DISABLED_find_xor_renumber)
+{
+ SATSolver s;
+ s.new_vars(30);
+ s.set_no_bve();
+ s.set_verbosity(5);
+
+ s.add_xor_clause(vector<unsigned>{0U, 1U}, false);
+ s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U}, true);
+ s.simplify();
+ s.simplify();
+
+ vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(true);
+ EXPECT_EQ(xors.size(), 1);
+ EXPECT_EQ(xors[0].first, (vector<uint32_t>{1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U}));
+}
+
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/c_test.c b/cryptominisat5/cryptominisat-5.6.3/tests/c_test.c
new file mode 100644
index 000000000..75b42f83b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/c_test.c
@@ -0,0 +1,62 @@
+/******************************************
+Copyright (c) 2016, @Storyyeller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+
+#include "cryptominisat5/cryptominisat_c.h"
+#include "assert.h"
+
+c_Lit new_lit(uint32_t var, bool neg) {
+ c_Lit x;
+ x.x = (var << 1) | neg;
+ return x;
+}
+
+int main(void) {
+ int new; // make sure this is actually compiled as C
+
+ SATSolver *solver = cmsat_new();
+ cmsat_set_num_threads(solver, 4);
+ cmsat_new_vars(solver, 3);
+
+ c_Lit clause[4];
+ clause[0] = new_lit(0, false);
+ cmsat_add_clause(solver, clause, 1);
+
+ clause[0] = new_lit(1, true);
+ cmsat_add_clause(solver, clause, 1);
+
+ clause[0] = new_lit(0, true);
+ clause[1] = new_lit(1, false);
+ clause[2] = new_lit(2, false);
+ cmsat_add_clause(solver, clause, 3);
+
+ c_lbool ret = cmsat_solve(solver);
+ assert(ret.x == L_TRUE);
+
+ slice_lbool model = cmsat_get_model(solver);
+ assert(model.vals[0].x == L_TRUE);
+ assert(model.vals[1].x == L_FALSE);
+ assert(model.vals[2].x == L_TRUE);
+
+ cmsat_free(solver);
+ return 0;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/clause_alloc_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/clause_alloc_test.cpp
new file mode 100644
index 000000000..6a1cdecaf
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/clause_alloc_test.cpp
@@ -0,0 +1,81 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+#include <stdlib.h>
+
+#include "src/solver.h"
+#include "src/clauseallocator.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct clause_allocator : public ::testing::Test {
+ clause_allocator()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.verbosity = 1;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(50000);
+ }
+ ~clause_allocator()
+ {
+ delete s;
+ }
+ Solver* s = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(clause_allocator, add_1)
+{
+ vector<Lit> cl;
+ srand(0);
+ double t = cpuTime();
+
+ uint64_t num = 10ULL*1000ULL*1000ULL;
+ for(size_t i = 0; i < num; i++) {
+ int size = 100 + rand()%10;
+ int start = rand() % 50000/size;
+ cl.resize(size);
+ for(int i2 = 0; i2 < size; i2++) {
+ int sign = rand() % 2;
+ cl[i2] = Lit(start, sign);
+ start += rand() % (50000/size);
+ }
+ s->add_clause_outer(cl);
+ if (i % (300ULL*1000ULL) == 0) {
+ cout << "Added " << i/(3000LL*1000ULL) << "M" << " T:" << (cpuTime()-t) << endl;
+ s->cl_alloc.consolidate(s, true);
+ }
+ }
+ s->cl_alloc.consolidate(s, true);
+ lbool ret = s->solve_with_assumptions(NULL);
+ EXPECT_EQ(ret, l_True);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/clause_cleaner_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/clause_cleaner_test.cpp
new file mode 100644
index 000000000..bc76e941f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/clause_cleaner_test.cpp
@@ -0,0 +1,139 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "src/solver.h"
+#include "src/clausecleaner.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct clause_clean_test : public ::testing::Test {
+ clause_clean_test()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCache = false;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(20);
+ cc = s->clauseCleaner;
+ }
+ ~clause_clean_test()
+ {
+ delete s;
+ }
+ Solver* s = NULL;
+ ClauseCleaner* cc = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(clause_clean_test, no_clean)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ s->add_clause_outer(str_to_cl("1, 2"));
+
+ cc->remove_and_clean_all();
+ EXPECT_EQ(s->binTri.irredBins, 1U);
+ std::string exp = "1, 2; 1, 2, 3";
+ check_irred_cls_eq(s, exp);
+}
+
+TEST_F(clause_clean_test, clean_bin_pos)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1"));
+ check_irred_cls_eq(s, "1, 2");
+
+ cc->remove_and_clean_all();
+ EXPECT_EQ(s->binTri.irredBins, 0U);
+}
+
+TEST_F(clause_clean_test, clean_bin_neg)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1"));
+ check_irred_cls_eq(s, "1, 2");
+
+ cc->remove_and_clean_all();
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(clause_clean_test, clean_tri_pos)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ s->add_clause_outer(str_to_cl("1"));
+ check_irred_cls_eq(s, "1, 2, 3");
+
+ cc->remove_and_clean_all();
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(clause_clean_test, clean_tri_neg)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ s->add_clause_outer(str_to_cl("-1"));
+ check_irred_cls_eq(s, "1, 2, 3");
+
+ cc->remove_and_clean_all();
+ EXPECT_EQ(s->binTri.irredBins, 1U);
+ check_irred_cls_eq(s, "2, 3");
+}
+
+TEST_F(clause_clean_test, clean_long_pos)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1"));
+ check_irred_cls_eq(s, "1, 2, 3, 4");
+
+ cc->remove_and_clean_all();
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(clause_clean_test, clean_long_neg)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("-1"));
+ check_irred_cls_eq(s, "1, 2, 3, 4");
+
+ cc->remove_and_clean_all();
+ check_irred_cls_eq(s, "2, 3, 4");
+}
+
+TEST_F(clause_clean_test, clean_mix)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ s->add_clause_outer(str_to_cl("1, 9"));
+ s->add_clause_outer(str_to_cl("-1"));
+ check_irred_cls_eq(s, "1, 2, 3, 4; 1, 2, 3; 1, 9");
+
+ cc->remove_and_clean_all();
+ check_irred_cls_eq(s, "2, 3, 4; 2, 3");
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/clause_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/clause_test.cpp
new file mode 100644
index 000000000..d8bd487b9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/clause_test.cpp
@@ -0,0 +1,86 @@
+/******************************************
+Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include "src/clause.h"
+#include <sstream>
+#include <stdlib.h>
+
+using namespace CMSat;
+
+struct F : public ::testing::Test {
+ F() {
+ }
+
+ ~F() {
+ }
+
+ Clause* allocate_space_for(size_t n, void*& tmp)
+ {
+ tmp = malloc(sizeof(Clause) + n*sizeof(Lit));
+ std::vector<Lit> lits;
+ for(size_t i = 0; i < n ; i++) {
+ lits.push_back(Lit(i, false));
+ }
+ Clause* c_ptr = new(tmp) Clause(lits
+ , 0
+ #ifdef STATS_NEEDED
+ , 0
+ #endif
+ );
+ return c_ptr;
+ }
+};
+
+TEST_F(F, convert_to_string)
+{
+ void* tmp;
+ Clause& cl = *allocate_space_for(3, tmp);
+ cl[0] = Lit(0, false);
+ cl[1] = Lit(1, false);
+ cl[2] = Lit(2, false);
+
+ std::stringstream ss;
+ ss << cl;
+ EXPECT_EQ( ss.str(), "1 2 3");
+ free(tmp);
+}
+
+TEST_F(F, convert_to_string2)
+{
+ void* tmp;
+ Clause& cl = *allocate_space_for(3, tmp);
+ cl[0] = Lit(0, false);
+ cl[1] = Lit(1, true);
+ cl[2] = Lit(2, false);
+
+ std::stringstream ss;
+ ss << cl;
+ EXPECT_EQ( ss.str(), "1 -2 3");
+ free(tmp);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/CMakeLists.txt
new file mode 100644
index 000000000..1aa3048e5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright (c) 2017, Mate Soos
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# Create llvm-lit configuration file
+configure_file(lit.site.cfg.in lit.site.cfg.in2 @ONLY)
+
+if (MSVC)
+ file(GENERATE
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/lit.site.cfg
+ INPUT ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.in2)
+
+
+ # Make sure this test-suite runs when "test" is target
+ add_test(NAME CNF
+ COMMAND ${LIT_TOOL} ${LIT_ARGS} .
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/"
+ )
+else()
+ file(GENERATE
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
+ INPUT ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.in2)
+
+
+ # Make sure this test-suite runs when "test" is target
+ add_test(NAME CNF
+ COMMAND ${LIT_TOOL} ${LIT_ARGS} .
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+ )
+endif()
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-1.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-1.cnf
new file mode 100644
index 000000000..0ea82049d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-1.cnf
@@ -0,0 +1,4 @@
+c RUN: %solver --onlyindep --indep 1 --presimp 1 --varelim 1 --verb=0 %s | %OutputCheck %s
+1 2 3 0
+4 5 6 0
+c CHECK: ^v .*1
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-2.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-2.cnf
new file mode 100644
index 000000000..7606969db
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-2.cnf
@@ -0,0 +1,6 @@
+c RUN: %solver --verb=0 %s | %OutputCheck %s
+c ind 1 0
+1 2 3 0
+2 0
+c CHECK: Independent .*1
+c CHECK: ^s SATISFIABLE$
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-3.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-3.cnf
new file mode 100644
index 000000000..c403c2d6d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep-3.cnf
@@ -0,0 +1,4 @@
+c RUN: %solver --onlyindep --indep 1 --presimp 1 --varelim 1 --verb=0 %s | %OutputCheck %s
+1 2 3 0
+4 5 6 0
+c CHECK-NOT: ^v .*4
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars.cnf
new file mode 100644
index 000000000..d4e0609f6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars.cnf
@@ -0,0 +1,10 @@
+c RUN: %solver --maxsol 20 --verb=0 %s | %OutputCheck %s
+c ind 1 0
+1 2 3 0
+-1 3 0
+-1 2 0
+2 3 0
+-2 -3 0
+c CHECK: ^s SATISFIABLE$
+c CHECK-NOT: ^s SATISFIABLE$
+c CHECK: UNSATISFIABLE
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars_2.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars_2.cnf
new file mode 100644
index 000000000..715211ef3
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/indep_vars_2.cnf
@@ -0,0 +1,11 @@
+c RUN: %solver --maxsol 20 --verb=0 %s | %OutputCheck %s
+c ind 1 2 3 0
+1 2 3 0
+-1 3 0
+-1 2 0
+2 3 0
+-2 -3 0
+c CHECK: ^s SATISFIABLE$
+c CHECK: ^s SATISFIABLE$
+c CHECK-NOT: ^s SATISFIABLE$
+c CHECK: UNSATISFIABLE
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.cfg b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.cfg
new file mode 100644
index 000000000..edbfc606e
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.cfg
@@ -0,0 +1,144 @@
+# -*- Python -*-
+
+# Configuration file for the 'lit' test runner.
+
+import os
+import sys
+import re
+import platform
+
+import lit.util
+import lit.formats
+
+# name: The name of this test suite.
+config.name = 'cryptominisat cnf-files'
+
+# Choose between lit's internal shell pipeline runner and a real shell. If
+# LIT_USE_INTERNAL_SHELL is in the environment, we use that as an override.
+use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
+if use_lit_shell:
+ # 0 is external, "" is default, and everything else is internal.
+ execute_external = (use_lit_shell == "0")
+else:
+ # Otherwise we default to internal on Windows and external elsewhere, as
+ # bash on Windows is usually very slow.
+ execute_external = (not sys.platform in ['win32'])
+
+# testFormat: The test format to use to interpret tests.
+config.test_format = lit.formats.ShTest(execute_external)
+
+# suffixes: A list of file extensions to treat as test files. This is overriden
+# by individual lit.local.cfg files in the test subdirectories.
+config.suffixes = ['.cnf']
+
+# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
+# subdirectories contain auxiliary inputs for various tests in their parent
+# directories.
+config.excludes = []
+
+# test_source_root: The root path where tests are located.
+config.test_source_root = os.path.dirname(os.path.abspath(__file__))
+
+# test_exec_root: The root path where tests should be run.
+cryptominisat_obj_root = getattr(config, 'cryptominisat_obj_root', None)
+if cryptominisat_obj_root is not None:
+ config.test_exec_root = os.path.join(cryptominisat_obj_root, 'tests', 'cnf-files')
+
+# Tweak the PATH to include the tools dir.
+#if llvm_obj_root is not None:
+# llvm_tools_dir = getattr(config, 'llvm_tools_dir', None)
+# if not llvm_tools_dir:
+# lit_config.fatal('No LLVM tools dir set!')
+# path = os.path.pathsep.join((llvm_tools_dir, config.environment['PATH']))
+# config.environment['PATH'] = path
+
+# Propagate 'HOME' through the environment.
+if 'HOME' in os.environ:
+ config.environment['HOME'] = os.environ['HOME']
+
+# Propagate 'INCLUDE' through the environment.
+if 'INCLUDE' in os.environ:
+ config.environment['INCLUDE'] = os.environ['INCLUDE']
+
+# Propagate 'LIB' through the environment.
+if 'LIB' in os.environ:
+ config.environment['LIB'] = os.environ['LIB']
+
+# Propagate the temp directory. Windows requires this because it uses \Windows\
+# if none of these are present.
+if 'TMP' in os.environ:
+ config.environment['TMP'] = os.environ['TMP']
+if 'TEMP' in os.environ:
+ config.environment['TEMP'] = os.environ['TEMP']
+
+# Check Python executable
+pythonExec = getattr(config, 'python_executable')
+if sys.executable != os.path.realpath(pythonExec):
+ lit_config.warning('Python executable mis-match: {} != {}'.format(sys.executable, os.path.realpath(pythonExec)))
+
+# Propagate PYTHON_EXECUTABLE into the environment
+config.environment['PYTHON_EXECUTABLE'] = pythonExec
+
+###
+
+import os
+
+# Check that the object root is known.
+if config.test_exec_root is None:
+ lit_config.fatal('Could not determine execution root for tests!')
+
+### Add cryptominisat specific substitutions
+
+# Allow user to override the solver
+solverExecutable = lit_config.params.get('solver', config.cryptominisat_executable)
+if not lit.util.which(solverExecutable):
+ lit_config.fatal('Cannot find solver: {solver}\n'.format(solver=solverExecutable))
+else:
+ solverExecutable = lit.util.which( solverExecutable )
+
+# Allow user to provide extra arguments to solver
+solverParams = lit_config.params.get('solver_params','')
+solverParams += ' --zero-exit-status '
+
+if config.simple == "" :
+ if config.sqlite != "" :
+ solverParams += ' --sql 2'
+ elif config.mysql != "" :
+ #database may not be set up :( TODO: auto-setup database
+ solverParams += ' --sql 0'
+
+if len(solverParams) > 0:
+ solverExecutable = solverExecutable + ' ' + solverParams
+
+# Inform user what solver is being used
+lit_config.note('Using solver: {solver}\n'.format(solver=solverExecutable))
+
+config.substitutions.append( ('%solver', solverExecutable) )
+
+# Find OutputCheck
+OutputCheckTool = os.path.join( os.path.dirname( os.path.dirname( config.test_source_root ) ),
+ 'utils',
+ 'OutputCheck',
+ 'bin',
+ 'OutputCheck'
+ )
+if not os.path.exists(OutputCheckTool):
+ lit_config.fatal('Cannot find OutputCheck executable: {OutputCheck}'.format(OutputCheck=OutputCheckTool))
+
+# Add OutputCheck bin directory to PATH (for not utility)
+path = os.path.pathsep.join(( os.path.dirname(OutputCheckTool), config.environment['PATH']))
+config.environment['PATH'] = path
+
+
+# Allow user to specify extra flags to OutputCheck (e.g. -l debug)
+OutputCheckFlags = lit_config.params.get('outputcheck_params','')
+OutputCheckFlags += " --comment='c'"
+if len(OutputCheckFlags) > 0:
+ OutputCheckTool += ' ' + OutputCheckFlags
+config.substitutions.append( ('%OutputCheck', pythonExec + ' ' +OutputCheckTool) )
+
+### Features
+
+# Shell execution
+if execute_external:
+ config.available_features.add('shell')
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.site.cfg.in b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.site.cfg.in
new file mode 100644
index 000000000..f7ff8a6ae
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/lit.site.cfg.in
@@ -0,0 +1,14 @@
+import sys
+
+## Autogenerated by cryptominisat configuration.
+# Do not edit!
+config.cryptominisat_src_root = "@cryptominisat5_SOURCE_DIR@"
+config.cryptominisat_obj_root = "@cryptominisat5_BINARY_DIR@"
+config.python_executable = "@PYTHON_EXECUTABLE@"
+config.cryptominisat_executable = "$<TARGET_FILE:cryptominisat5>"
+config.sqlite = "@USING_SQLITE@"
+config.mysql = "@USING_SQLITE@"
+config.simple = "@SIMPLE@"
+
+# Let the main config do the real work.
+lit_config.load_config(config, "@cryptominisat5_SOURCE_DIR@/tests/cnf-files/lit.cfg")
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/reconftest.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/reconftest.cnf
new file mode 100644
index 000000000..bcd7507cb
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/reconftest.cnf
@@ -0,0 +1,8 @@
+c RUN: %solver --reconfat 0 --reconf 15 %s | %OutputCheck %s
+1 2 0
+-1 2 0
+3 4 0
+1 2 3 4 0
+1 2 3 -4 0
+4 -2 0
+c CHECK: reconfigured solver to config 15
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest.cnf
new file mode 100644
index 000000000..6932e7348
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest.cnf
@@ -0,0 +1,5 @@
+c RUN: %solver %s | %OutputCheck %s
+p cnf 1 1
+1 0
+c CHECK: ^s SATISFIABLE$
+c CHECK-NEXT: ^v 1 0$ \ No newline at end of file
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest2.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest2.cnf
new file mode 100644
index 000000000..46a33c21a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/simptest2.cnf
@@ -0,0 +1,4 @@
+c RUN: %solver %s | %OutputCheck %s
+1 0
+c CHECK: ^s SATISFIABLE$
+c CHECK-NEXT: ^v 1 0$
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/verbosity.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/verbosity.cnf
new file mode 100644
index 000000000..9ee5dc9e9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/verbosity.cnf
@@ -0,0 +1,4 @@
+c RUN: %solver --verb=0 %s | %OutputCheck %s
+p cnf 1 1
+1 0
+c CHECK-NOT: ^c.*$ \ No newline at end of file
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor.cnf
new file mode 100644
index 000000000..cdd2f58fe
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor.cnf
@@ -0,0 +1,5 @@
+c RUN: %solver %s | %OutputCheck %s
+p cnf 1 1
+x1 0
+c CHECK: s SATISFIABLE
+c CHECK: v 1 0 \ No newline at end of file
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor_longer.cnf b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor_longer.cnf
new file mode 100644
index 000000000..47c4f5a0b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/cnf-files/xor_longer.cnf
@@ -0,0 +1,14 @@
+c RUN: %solver %s | %OutputCheck %s
+p cnf 10 10
+x1 2 3 4 5 6 7 8 9 10 0
+x-1 0
+x-2 0
+x-3 0
+x-4 0
+x-5 0
+x-6 0
+x-7 0
+x-8 0
+x-9 0
+c CHECK: s SATISFIABLE
+c CHECK: v -1 -2 -3 -4 -5 -6 -7 -8 -9 10 0$ \ No newline at end of file
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/comp_find_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/comp_find_test.cpp
new file mode 100644
index 000000000..373628ce4
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/comp_find_test.cpp
@@ -0,0 +1,130 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "src/solver.h"
+#include "src/compfinder.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct comp_finder : public ::testing::Test {
+ comp_finder()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCache = false;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(20);
+ finder = new CompFinder(s);
+ }
+ ~comp_finder()
+ {
+ delete finder;
+ delete s;
+ }
+ CompFinder *finder;
+ Solver* s = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(comp_finder, find_1_1)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, -2"));
+
+ finder->find_components();
+
+ EXPECT_EQ(finder->getNumComps(), 1U);
+}
+
+TEST_F(comp_finder, find_1_2)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("3, -4, 5"));
+ s->add_clause_outer(str_to_cl("7, -5"));
+ s->add_clause_outer(str_to_cl("7, 10, 15"));
+ s->add_clause_outer(str_to_cl("15, 4, 2"));
+
+ finder->find_components();
+
+ EXPECT_EQ(finder->getNumComps(), 1U);
+}
+
+TEST_F(comp_finder, find_2_1)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+
+ s->add_clause_outer(str_to_cl("3, -4, 5"));
+ s->add_clause_outer(str_to_cl("7, -5"));
+ s->add_clause_outer(str_to_cl("7, 10, 15"));
+ s->add_clause_outer(str_to_cl("15, 4"));
+
+ finder->find_components();
+
+ EXPECT_EQ(finder->getNumComps(), 2U);
+}
+
+TEST_F(comp_finder, find_2_2)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 14, 17"));
+
+ s->add_clause_outer(str_to_cl("3, -4, 5"));
+ s->add_clause_outer(str_to_cl("7, -5"));
+ s->add_clause_outer(str_to_cl("7, 10, 15"));
+ s->add_clause_outer(str_to_cl("15, 4"));
+
+ finder->find_components();
+
+ EXPECT_EQ(finder->getNumComps(), 2U);
+}
+
+TEST_F(comp_finder, find_5_1)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("3, 4, 5"));
+
+ s->add_clause_outer(str_to_cl("6, -7"));
+ s->add_clause_outer(str_to_cl("6, -8"));
+
+ s->add_clause_outer(str_to_cl("10, -12, 11"));
+ s->add_clause_outer(str_to_cl("10, -17, 9"));
+
+ s->add_clause_outer(str_to_cl("13, -14, 15, -16"));
+ s->add_clause_outer(str_to_cl("13, -14, -16"));
+
+ s->add_clause_outer(str_to_cl("-18, -17"));
+ s->add_clause_outer(str_to_cl("-18, 20"));
+
+ finder->find_components();
+
+ EXPECT_EQ(finder->getNumComps(), 5U);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/comphandler_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/comphandler_test.cpp
new file mode 100644
index 000000000..8f4b450bd
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/comphandler_test.cpp
@@ -0,0 +1,172 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/comphandler.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct comp_handle : public ::testing::Test {
+ comp_handle()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCompHandler = true;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ s->testing_fill_assumptions_set();
+ chandle = s->compHandler;
+ }
+ ~comp_handle()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ CompHandler* chandle = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(comp_handle, handle_1_comp)
+{
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+
+ chandle->handle();
+ EXPECT_TRUE(s->okay());
+ EXPECT_EQ(chandle->get_num_vars_removed(), 0u);
+}
+
+TEST_F(comp_handle, handle_2_comps)
+{
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+
+ s->add_clause_outer(str_to_cl("9, 4, 5"));
+ s->add_clause_outer(str_to_cl("5, 6, 7"));
+
+ chandle->handle();
+ EXPECT_TRUE(s->okay());
+ EXPECT_EQ(chandle->get_num_vars_removed(), 3u);
+ EXPECT_EQ(chandle->get_num_components_solved(), 1u);
+}
+
+TEST_F(comp_handle, handle_3_comps)
+{
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+
+ s->add_clause_outer(str_to_cl("9, 4, 5"));
+ s->add_clause_outer(str_to_cl("5, 6, 7"));
+
+ s->add_clause_outer(str_to_cl("19, 14, 15"));
+ s->add_clause_outer(str_to_cl("15, 16, 17"));
+
+ chandle->handle();
+ EXPECT_TRUE(s->okay());
+ EXPECT_EQ(chandle->get_num_components_solved(), 2u);
+ EXPECT_EQ(chandle->get_num_vars_removed(), 8u);
+}
+
+TEST_F(comp_handle, check_solution_zero_lev_assign)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+ s->add_clause_outer(str_to_cl("1, -2"));
+
+ s->add_clause_outer(str_to_cl("11, 12"));
+ s->add_clause_outer(str_to_cl("-11, 12"));
+ s->add_clause_outer(str_to_cl("11, -12"));
+
+ s->add_clause_outer(str_to_cl("19, 14, 15"));
+ s->add_clause_outer(str_to_cl("15, 16, 17"));
+ s->add_clause_outer(str_to_cl("17, 16, 18, 14"));
+ s->add_clause_outer(str_to_cl("17, 18, 13"));
+
+ chandle->handle();
+ EXPECT_TRUE(s->okay());
+ EXPECT_EQ(chandle->get_num_components_solved(), 2u);
+ EXPECT_EQ(chandle->get_num_vars_removed(), 0u);
+ vector<lbool> solution(s->nVarsOuter(), l_Undef);
+ chandle->addSavedState(solution);
+ check_zero_assigned_lits_contains(s, "1");
+ check_zero_assigned_lits_contains(s, "1");
+ check_zero_assigned_lits_contains(s, "11");
+ check_zero_assigned_lits_contains(s, "12");
+}
+
+TEST_F(comp_handle, check_solution_non_zero_lev_assign)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ s->add_clause_outer(str_to_cl("11, 12"));
+ s->add_clause_outer(str_to_cl("-11, 12"));
+
+ s->add_clause_outer(str_to_cl("20, 22"));
+ s->add_clause_outer(str_to_cl("-24, 22"));
+
+ s->add_clause_outer(str_to_cl("19, 14, 15"));
+ s->add_clause_outer(str_to_cl("15, 16, 17"));
+ s->add_clause_outer(str_to_cl("17, 16, 18, 14"));
+ s->add_clause_outer(str_to_cl("17, 18, 13"));
+
+ chandle->handle();
+ EXPECT_TRUE(s->okay());
+ EXPECT_EQ(chandle->get_num_components_solved(), 3u);
+ EXPECT_EQ(chandle->get_num_vars_removed(), 7u);
+ vector<lbool> solution(s->nVarsOuter(), l_Undef);
+ chandle->addSavedState(solution);
+ EXPECT_TRUE(clause_satisfied("1, 2", solution));
+ EXPECT_TRUE(clause_satisfied("-1, 2", solution));
+ EXPECT_TRUE(clause_satisfied("11, 12", solution));
+ EXPECT_TRUE(clause_satisfied("-11, 12", solution));
+ EXPECT_TRUE(clause_satisfied("20, 22", solution));
+ EXPECT_TRUE(clause_satisfied("-24, 22", solution));
+}
+
+TEST_F(comp_handle, check_unsat)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, -2"));
+
+ s->add_clause_outer(str_to_cl("19, 14, 15"));
+ s->add_clause_outer(str_to_cl("15, 16, 17"));
+ s->add_clause_outer(str_to_cl("17, 16, 18, 14"));
+ s->add_clause_outer(str_to_cl("17, 18, 13"));
+
+ bool ret = chandle->handle();
+ EXPECT_FALSE(ret);
+ EXPECT_FALSE(s->okay());
+ EXPECT_EQ(chandle->get_num_components_solved(), 1u);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/distill_klee.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/distill_klee.cpp
new file mode 100644
index 000000000..77ea4008b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/distill_klee.cpp
@@ -0,0 +1,54 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/distillerlongwithimpl.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+#include <klee/klee.h>
+
+int main(int argc, char **argv)
+{
+ Solver* s;
+ DistillerLongWithImpl* distillwbin;
+ std::atomic<bool> must_inter;
+ SolverConf conf;
+ //conf.verbosity = 20;
+ must_inter.store(false, std::memory_order_relaxed);
+ s = new Solver(&conf, &must_inter);
+ distillwbin = s->dist_long_with_impl;
+
+ s->new_vars(4);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ distillwbin->distill_long_with_implicit(false);
+ //check_irred_cls_eq(s, "1, 2");
+
+ delete s;
+
+ return 0;
+}
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/distill_long_with_implicit_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/distill_long_with_implicit_test.cpp
new file mode 100644
index 000000000..e06fc9dd2
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/distill_long_with_implicit_test.cpp
@@ -0,0 +1,267 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/distillerlongwithimpl.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct distill_long_with_impl : public ::testing::Test {
+ distill_long_with_impl()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doStamp = true;
+ conf.doCache = true;
+ conf.otfHyperbin - true;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ distillwbin = s->dist_long_with_impl;
+ }
+ ~distill_long_with_impl()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ DistillerLongWithImpl* distillwbin;
+ std::atomic<bool> must_inter;
+};
+
+//Subsume long with bin
+
+TEST_F(distill_long_with_impl, subsume_w_bin)
+{
+ s->new_vars(4);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "1, 2");
+}
+
+TEST_F(distill_long_with_impl, subsume_w_bin2)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, 4, -5"));
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "1, 2");
+}
+
+TEST_F(distill_long_with_impl, subsume_w_bin3)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("2, 3"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("2, 3, -4, 5"));
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "2, 3");
+}
+
+//No subsumption
+
+TEST_F(distill_long_with_impl, no_subsume)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5"));
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "1, 2; 2, 3, 4, 5");
+}
+
+TEST_F(distill_long_with_impl, no_subsume_tri)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5"));
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "1, 2; 2, 3, 4, 5");
+}
+
+//Strengthening long with bin
+
+TEST_F(distill_long_with_impl, str_w_bin)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_contains(s, "1, 3, 4");
+}
+
+TEST_F(distill_long_with_impl, str_w_bin2)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2, 3, 4"));
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_contains(s, "-1, 3, 4");
+}
+
+TEST_F(distill_long_with_impl, str_w_bin3)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-2, -3"));
+ s->add_clause_outer(str_to_cl("-2, 3, 4, 5"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_contains(s, "-2, 4, 5");
+ check_irred_cls_contains(s, "-1, -3, 4");
+}
+
+//Subsume with cache
+
+TEST_F(distill_long_with_impl, sub_w_cache)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ add_to_cache_irred(s, "2, -3");
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(distill_long_with_impl, sub_w_cache2)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ add_to_cache_irred(s, "2, 4");
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "");
+}
+
+//STR with cache
+
+TEST_F(distill_long_with_impl, str_w_cache)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ add_to_cache_irred(s, "-1, -2");
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_eq(s, "-1, -3, 4");
+}
+
+TEST_F(distill_long_with_impl, str_w_cache2)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("2, -3, 4, 5"));
+ add_to_cache_irred(s, "4, -5");
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_eq(s, "2, -3, 4");
+}
+
+TEST_F(distill_long_with_impl, str_w_cache_no)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("2, -3, 4, 5"));
+ add_to_cache_irred(s, "4, -1");
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_eq(s, "2, -3, 4, 5");
+}
+
+//SUB with stamp
+
+TEST_F(distill_long_with_impl, sub_w_stamp)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ add_to_stamp_irred(s, "-1, 2");
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(distill_long_with_impl, sub_w_stamp2)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 3, 4, 5"));
+ add_to_stamp_irred(s, "3, -1");
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(distill_long_with_impl, sub_w_stamp_no)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ add_to_stamp_irred(s, "-2, -1");
+
+ distillwbin->distill_long_with_implicit(false);
+ check_irred_cls_eq(s, "-1, 2, -3, 4");
+}
+
+// //STR with stamp
+
+TEST_F(distill_long_with_impl, str_w_stamp)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("2, -3, 4, 5"));
+ add_to_stamp_irred(s, "2, 3");
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_eq(s, "2, 4, 5");
+}
+
+TEST_F(distill_long_with_impl, str_w_stamp2)
+{
+ s->new_vars(10);
+ s->add_clause_outer(str_to_cl("-1, 7, 8, -9"));
+ add_to_stamp_irred(s, "1, 7");
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_eq(s, "7, 8, -9");
+}
+
+TEST_F(distill_long_with_impl, str_w_stamp_no)
+{
+ s->new_vars(10);
+ s->add_clause_outer(str_to_cl("-3, 6, 7, -9"));
+ add_to_stamp_irred(s, "3, -6");
+
+ distillwbin->distill_long_with_implicit(true);
+ check_irred_cls_eq(s, "-3, 6, 7, -9");
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/distiller_all_with_all_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/distiller_all_with_all_test.cpp
new file mode 100644
index 000000000..b5bb9cef6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/distiller_all_with_all_test.cpp
@@ -0,0 +1,133 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/distillerlong.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct distill_test : public ::testing::Test {
+ distill_test()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ distill_long_cls = s->distill_long_cls;
+ }
+ ~distill_test()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ DistillerLong* distill_long_cls;
+ std::atomic<bool> must_inter;
+};
+
+//BY-BY 1
+
+TEST_F(distill_test, long_by1)
+{
+ s->new_vars(4);
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 3, 4");
+}
+
+TEST_F(distill_test, long_by1_transitive)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, -5"));
+ s->add_clause_outer(str_to_cl("5, -2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 3, 4");
+}
+
+TEST_F(distill_test, long_by1_2)
+{
+ s->new_vars(4);
+ s->add_clause_outer(str_to_cl("2, -3"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 2, 4");
+}
+
+TEST_F(distill_test, long_by1_nodistill
+)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, 3"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 2, 3, 4");
+}
+
+TEST_F(distill_test, long_by1_nodistill2
+)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("-1, -2"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 2, 3, 4");
+}
+
+TEST_F(distill_test, tri)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, 2, -3"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 2");
+}
+
+TEST_F(distill_test, tri_transitive)
+{
+ s->new_vars(5);
+ s->add_clause_outer(str_to_cl("1, 2, 4"));
+ s->add_clause_outer(str_to_cl("-4, -3"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+
+ distill_long_cls->distill(false);
+ check_irred_cls_contains(s, "1, 2");
+}
+
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/dump_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/dump_test.cpp
new file mode 100644
index 000000000..de13a6197
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/dump_test.cpp
@@ -0,0 +1,150 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+#include <stdlib.h>
+
+#include "cryptominisat5/cryptominisat.h"
+#include "src/solverconf.h"
+#include "test_helper.h"
+using namespace CMSat;
+#include <vector>
+using std::vector;
+
+struct dump : public ::testing::Test {
+ dump() {
+ fname = string("test-cnf-dump");
+ }
+
+ ~dump() {
+ std::remove(fname.c_str());
+ }
+
+ void read_dat() {
+ s.open_file_and_dump_irred_clauses(fname);
+ dat = cnf_file_read(fname);
+ }
+
+ SATSolver s;
+ string fname;
+ cnfdata dat;
+};
+
+
+TEST_F(dump, empty_cnf)
+{
+ lbool ret = s.solve();
+ EXPECT_EQ( ret, l_True);
+
+ read_dat();
+ EXPECT_EQ(dat.num_vars, 0);
+ EXPECT_EQ(dat.cls.size(), 0);
+}
+
+TEST_F(dump, onelit)
+{
+ s.new_var();
+ s.add_clause(str_to_cl("1"));
+ s.solve();
+
+ read_dat();
+ EXPECT_EQ(dat.num_vars, 1);
+ EXPECT_EQ(dat.cls.size(), 1);
+ EXPECT_TRUE(cl_eq(dat.cls[0], str_to_cl("1")));
+}
+
+TEST_F(dump, twolit)
+{
+ s.new_vars(2);
+ s.add_clause(str_to_cl("1"));
+ s.add_clause(str_to_cl("1, 2"));
+ s.solve();
+
+
+ read_dat();
+ EXPECT_EQ(dat.num_vars, 1);
+ EXPECT_EQ(dat.cls.size(), 1);
+ EXPECT_TRUE(cl_eq(dat.cls[0], str_to_cl("1")));
+}
+
+TEST_F(dump, longcls)
+{
+ s.new_vars(4);
+ s.add_clause(str_to_cl("1, 2, 3, 4"));
+ s.add_clause(str_to_cl("-4"));
+ s.simplify();
+
+
+ read_dat();
+ EXPECT_EQ(dat.num_vars, 4);
+ EXPECT_EQ(dat.cls.size(), 2);
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("-4")));
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("1,2,3")));
+}
+
+TEST_F(dump, eqcls)
+{
+ s.new_vars(4);
+ s.add_clause(str_to_cl("1, 2"));
+ s.add_clause(str_to_cl("-1, -2"));
+ s.simplify();
+
+
+ read_dat();
+ EXPECT_EQ(dat.cls.size(), 2);
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("1,2")));
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("-1,-2")));
+}
+
+TEST_F(dump, eqcls2)
+{
+ s.new_vars(4);
+ s.add_clause(str_to_cl("-1, 2"));
+ s.add_clause(str_to_cl("1, -2"));
+ s.simplify();
+
+
+ read_dat();
+ EXPECT_EQ(dat.cls.size(), 2);
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("-1,2")));
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("1,-2")));
+}
+
+TEST_F(dump, subsume)
+{
+ s.new_vars(4);
+ s.add_clause(str_to_cl("-1, -2, 3"));
+ s.add_clause(str_to_cl("-1, -2"));
+ s.simplify();
+
+
+ read_dat();
+ EXPECT_EQ(dat.cls.size(), 1);
+ EXPECT_TRUE(cl_exists(dat.cls, str_to_cl("-1,-2")));
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/gauss_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/gauss_test.cpp
new file mode 100644
index 000000000..8b1c4909b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/gauss_test.cpp
@@ -0,0 +1,153 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/EGaussian.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct gauss : public ::testing::Test {
+ gauss()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ }
+ ~gauss()
+ {
+ delete g;
+ delete s;
+ }
+
+ Solver* s;
+ Gaussian* g = NULL;
+ std::vector<uint32_t> vars;
+ std::atomic<bool> must_inter;
+ vector<Xor> xs;
+ bool created;
+};
+
+//2 XORs inside
+
+TEST_F(gauss, propagate_1)
+{
+ s->conf.verbosity = 20;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("1, 2, 3, 4"), 0));
+
+ g = new Gaussian(s, xs, 0);
+ bool ret = g->init_until_fixedpoint(created);
+
+ EXPECT_EQ(ret, true);
+ EXPECT_EQ(s->ok, true);
+ check_zero_assigned_lits_eq(s, "-4");
+}
+
+TEST_F(gauss, propagate_2)
+{
+ //s->conf.verbosity = 20;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("1, 2, 3, 4"), 1));
+
+ g = new Gaussian(s, xs, 0);
+ bool ret = g->init_until_fixedpoint(created);
+
+ EXPECT_EQ(ret, true);
+ EXPECT_EQ(s->ok, true);
+ check_zero_assigned_lits_eq(s, "4");
+}
+
+TEST_F(gauss, propagate_3)
+{
+ //s->conf.verbosity = 20;
+ xs.push_back(Xor(str_to_vars("1, 3, 4, 5"), 0));
+ xs.push_back(Xor(str_to_vars("1, 3, 5"), 1));
+
+ g = new Gaussian(s, xs, 0);
+ bool ret = g->init_until_fixedpoint(created);
+
+ EXPECT_EQ(ret, true);
+ EXPECT_EQ(s->ok, true);
+ check_zero_assigned_lits_eq(s, "4");
+}
+
+TEST_F(gauss, propagate_4)
+{
+ //s->conf.verbosity = 20;
+ xs.push_back(Xor(str_to_vars("1, 3, 4, 5"), 0));
+ xs.push_back(Xor(str_to_vars("1, 3, 5"), 1));
+ xs.push_back(Xor(str_to_vars("1, 2, 4, 7"), 1));
+
+ g = new Gaussian(s, xs, 0);
+ bool ret = g->init_until_fixedpoint(created);
+
+ EXPECT_EQ(ret, true);
+ EXPECT_EQ(s->ok, true);
+ check_zero_assigned_lits_eq(s, "4");
+}
+
+//UNSAT
+
+TEST_F(gauss, unsat_4)
+{
+ //s->conf.verbosity = 20;
+ xs.push_back(Xor(str_to_vars("1, 3, 5"), 0));
+ xs.push_back(Xor(str_to_vars("1, 3, 5"), 1));
+
+ g = new Gaussian(s, xs, 0);
+ bool ret = g->init_until_fixedpoint(created);
+
+ EXPECT_EQ(ret, false);
+ EXPECT_EQ(s->ok, false);
+}
+
+//double prop
+
+TEST_F(gauss, propagate_unsat)
+{
+ //s->conf.verbosity = 20;
+ xs.push_back(Xor(str_to_vars("1, 3, 4, 5"), 0));
+ xs.push_back(Xor(str_to_vars("1, 3, 5"), 0));
+ //-> 4 = 0
+ xs.push_back(Xor(str_to_vars("5, 6, 7"), 1));
+ xs.push_back(Xor(str_to_vars("4, 5, 6, 7"), 0));
+ //-> unsat
+
+ g = new Gaussian(s, xs, 0);
+ bool ret = g->init_until_fixedpoint(created);
+
+ EXPECT_EQ(ret, false);
+ EXPECT_EQ(s->ok, false);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/heap_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/heap_test.cpp
new file mode 100644
index 000000000..c9eb2cd1d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/heap_test.cpp
@@ -0,0 +1,100 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include "cryptominisat5/cryptominisat.h"
+
+#include "src/heap.h"
+
+using CMSat::Heap;
+
+struct Comp
+{
+ bool operator()(uint32_t a, uint32_t b) const
+ {
+ return a < b;
+ }
+};
+
+TEST(heap_minim, simple)
+{
+ Comp cmp;
+ Heap<Comp> heap(cmp);
+ heap.insert(1);
+ heap.insert(2);
+ heap.insert(3);
+ EXPECT_EQ( heap.heap_property(), true);
+}
+
+TEST(heap_minim, empty)
+{
+ Comp cmp;
+ Heap<Comp> heap(cmp);
+ heap.insert(1);
+ heap.insert(2);
+ EXPECT_EQ(heap.removeMin(), 1);
+ EXPECT_EQ(heap.removeMin(), 2);
+ EXPECT_EQ( heap.heap_property(), true);
+}
+
+TEST(heap_minim, empty2)
+{
+ Comp cmp;
+ Heap<Comp> heap(cmp);
+ heap.insert(1);
+ heap.insert(2);
+ heap.insert(3);
+ EXPECT_EQ(heap.removeMin(), 1);
+ EXPECT_EQ(heap.removeMin(), 2);
+ EXPECT_EQ(heap.removeMin(), 3);
+ EXPECT_EQ( heap.heap_property(), true);
+}
+
+TEST(heap_minim, empty_lots)
+{
+ Comp cmp;
+ Heap<Comp> heap(cmp);
+ for(size_t i = 0; i < 100; i++) {
+ heap.insert(99-i);
+ EXPECT_EQ( heap.heap_property(), true);
+ }
+ for(int i = 0; i < 100; i++) {
+ EXPECT_EQ(heap.removeMin(), i);
+ EXPECT_EQ(heap.heap_property(), true);
+ }
+}
+
+TEST(heap_minim, inserted_inside)
+{
+ Comp cmp;
+ Heap<Comp> heap(cmp);
+ heap.insert(10);
+ heap.insert(20);
+ EXPECT_EQ(heap.inHeap(10), true);
+ EXPECT_EQ(heap.inHeap(20), true);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/intree_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/intree_test.cpp
new file mode 100644
index 000000000..04ced2bea
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/intree_test.cpp
@@ -0,0 +1,174 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/intree.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct intree : public ::testing::Test {
+ intree()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.otfHyperbin = true;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ inp = s->intree;
+ }
+ ~intree()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ InTree* inp;
+ std::atomic<bool> must_inter;
+};
+
+
+//Fails
+
+TEST_F(intree, fail_1)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, -3"));
+
+ inp->intree_probe();
+ check_zero_assigned_lits_contains(s, "-2");
+}
+
+
+TEST_F(intree, fail_2)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, 4"));
+ s->add_clause_outer(str_to_cl("-2, 5"));
+ s->add_clause_outer(str_to_cl("-3, -4, -5, 1"));
+
+ inp->intree_probe();
+ check_zero_assigned_lits_contains(s, "1");
+}
+
+TEST_F(intree, fail_3)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, 4"));
+ s->add_clause_outer(str_to_cl("-2, 5"));
+ s->add_clause_outer(str_to_cl("-3, -4, -5, 6"));
+ s->add_clause_outer(str_to_cl("-4, -5, -6"));
+
+ inp->intree_probe();
+ check_zero_assigned_lits_contains(s, "1");
+}
+
+//Hyper-binary resolution
+
+TEST_F(intree, hyper_bin_1)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, 4"));
+ s->add_clause_outer(str_to_cl("-3, -4, 5"));
+
+ inp->intree_probe();
+ check_red_cls_contains(s, "-2, 5");
+}
+
+TEST_F(intree, hyper_bin_2)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, 4"));
+ s->add_clause_outer(str_to_cl("-3, -4, 5"));
+ s->add_clause_outer(str_to_cl("-5, 6"));
+ s->add_clause_outer(str_to_cl("-5, 7"));
+ s->add_clause_outer(str_to_cl("-6, -7, 8"));
+
+ inp->intree_probe();
+ check_red_cls_contains(s, "-2, 5");
+ check_red_cls_contains(s, "-5, 8");
+}
+
+//Transitive reduction
+
+TEST_F(intree, trans_red_1)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, 4"));
+ s->add_clause_outer(str_to_cl("-3, -4, 5"));
+ s->add_clause_outer(str_to_cl("1, 5"), false);
+
+ inp->intree_probe();
+ check_red_cls_doesnt_contain(s, "1, 5");
+}
+
+TEST_F(intree, trans_red_2)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-3, 4"));
+ s->add_clause_outer(str_to_cl("-4, 5"));
+ s->add_clause_outer(str_to_cl("1, 5"));
+
+ inp->intree_probe();
+ check_irred_cls_doesnt_contain(s, "1, 5");
+}
+
+//Transitive reduction and hyper-binary resolution
+TEST_F(intree, trans_red_and_hyper_bin_1)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-3, 4"));
+ s->add_clause_outer(str_to_cl("-4, 5"));
+ s->add_clause_outer(str_to_cl("-3, -4, -5, 6"));
+ s->add_clause_outer(str_to_cl("1, 6"), false);
+
+ inp->intree_probe();
+ check_red_cls_doesnt_contain(s, "1, 6");
+ check_red_cls_contains(s, "-3, 6");
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/ipasir_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/ipasir_test.cpp
new file mode 100644
index 000000000..c55d048b7
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/ipasir_test.cpp
@@ -0,0 +1,183 @@
+/******************************************
+Copyright (c) 2017, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+extern "C" {
+#include "src/ipasir.h"
+}
+
+TEST(ipasir_interface, start)
+{
+ void* s = ipasir_init();
+ ipasir_release(s);
+}
+
+TEST(ipasir_interface, sat)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, 1);
+ ipasir_add(s, 0);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 10);
+
+ int val = ipasir_val(s, 1);
+ EXPECT_EQ(val, 1);
+
+ ipasir_release(s);
+}
+
+TEST(ipasir_interface, sat2)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, -1);
+ ipasir_add(s, 2);
+ ipasir_add(s, 0);
+
+ ipasir_add(s, 1);
+ ipasir_add(s, 0);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 10);
+
+ int val = ipasir_val(s, 1);
+ EXPECT_EQ(val, 1);
+ val = ipasir_val(s, 2);
+ EXPECT_EQ(val, 2);
+
+ ipasir_release(s);
+}
+
+TEST(ipasir_interface, sat3)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, -1);
+ ipasir_add(s, 2);
+ ipasir_add(s, 0);
+
+ ipasir_add(s, 1);
+ ipasir_add(s, 0);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 10);
+
+ int val = ipasir_val(s, -2);
+ EXPECT_EQ(val, -2);
+
+ ipasir_release(s);
+}
+
+
+TEST(ipasir_interface, unsat)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, 1);
+ ipasir_add(s, 0);
+ ipasir_add(s, -1);
+ ipasir_add(s, 0);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 20);
+
+ ipasir_release(s);
+}
+
+TEST(ipasir_interface, unsat_empty)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, 0);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 20);
+
+ ipasir_release(s);
+}
+
+
+TEST(ipasir_interface, assump)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, 1);
+ ipasir_add(s, 0);
+
+ ipasir_assume(s, -1);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 20);
+
+ int used = ipasir_failed(s, 1);
+ EXPECT_EQ(used, 1);
+
+ ipasir_release(s);
+}
+
+TEST(ipasir_interface, assump2)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, 1);
+ ipasir_add(s, 2);
+ ipasir_add(s, 3);
+ ipasir_add(s, 4);
+ ipasir_add(s, 0);
+
+ ipasir_assume(s, -1);
+ ipasir_assume(s, -2);
+ ipasir_assume(s, -3);
+ ipasir_assume(s, -4);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 20);
+
+ int used = ipasir_failed(s, 1);
+ EXPECT_EQ(used, 1);
+ int used2 = ipasir_failed(s, 2);
+ EXPECT_EQ(used2, 1);
+ int used3 = ipasir_failed(s, 3);
+ EXPECT_EQ(used3, 1);
+ int used4 = ipasir_failed(s, 4);
+ EXPECT_EQ(used4, 1);
+
+ ipasir_release(s);
+}
+
+TEST(ipasir_interface, assump_clears)
+{
+ void* s = ipasir_init();
+ ipasir_add(s, 1);
+ ipasir_add(s, 0);
+
+ ipasir_assume(s, -1);
+
+ int ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 20);
+
+ ret = ipasir_solve(s);
+ EXPECT_EQ(ret, 10);
+
+ ipasir_release(s);
+}
+
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/matrixfinder_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/matrixfinder_test.cpp
new file mode 100644
index 000000000..317e2138d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/matrixfinder_test.cpp
@@ -0,0 +1,139 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/matrixfinder.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct gauss : public ::testing::Test {
+ gauss()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(40);
+ s->conf.gaussconf.min_gauss_xor_clauses = 0;
+ mf = new MatrixFinder(s);
+ }
+ ~gauss()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ MatrixFinder* mf = NULL;
+ std::vector<uint32_t> vars;
+ std::atomic<bool> must_inter;
+ vector<Xor> xs;
+};
+
+TEST_F(gauss, min_rows)
+{
+ //s->conf.verbosity = 20;
+ s->conf.gaussconf.min_matrix_rows = 2;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("1, 2, 3, 4"), 0));
+ s->xorclauses = xs;
+
+ mf->findMatrixes(false);
+
+ EXPECT_EQ(s->gmatrixes.size(), 1);
+}
+
+TEST_F(gauss, min_rows_2)
+{
+ //s->conf.verbosity = 20;
+ s->conf.gaussconf.min_matrix_rows = 3;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("1, 2, 3, 4"), 0));
+ s->xorclauses = xs;
+
+ mf->findMatrixes(false);
+
+ EXPECT_EQ(s->gmatrixes.size(), 0);
+}
+
+TEST_F(gauss, separate_1)
+{
+ //s->conf.verbosity = 20;
+ s->conf.gaussconf.min_matrix_rows = 1;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("5, 6, 7, 8"), 0));
+ s->xorclauses = xs;
+
+ mf->findMatrixes(false);
+
+ EXPECT_EQ(s->gmatrixes.size(), 2);
+}
+
+TEST_F(gauss, separate_2)
+{
+ //s->conf.verbosity = 20;
+ s->conf.gaussconf.min_matrix_rows = 1;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("4, 5, 6"), 0));
+ xs.push_back(Xor(str_to_vars("3, 4, 10"), 0));
+
+ xs.push_back(Xor(str_to_vars("15, 16, 17, 18"), 0));
+ xs.push_back(Xor(str_to_vars("11, 15, 19"), 0));
+ xs.push_back(Xor(str_to_vars("19, 20, 12"), 0));
+ s->xorclauses = xs;
+
+ mf->findMatrixes(false);
+
+ EXPECT_EQ(s->gmatrixes.size(), 2);
+}
+
+TEST_F(gauss, separate_3)
+{
+ //s->conf.verbosity = 20;
+ s->conf.gaussconf.min_matrix_rows = 1;
+ xs.push_back(Xor(str_to_vars("1, 2, 3"), 0));
+ xs.push_back(Xor(str_to_vars("4, 5, 6"), 0));
+ xs.push_back(Xor(str_to_vars("3, 4, 10"), 0));
+
+ xs.push_back(Xor(str_to_vars("15, 16, 17, 18"), 0));
+ xs.push_back(Xor(str_to_vars("11, 15, 19"), 0));
+ xs.push_back(Xor(str_to_vars("19, 20, 12"), 0));
+
+ xs.push_back(Xor(str_to_vars("21, 22, 23, 29"), 0));
+ xs.push_back(Xor(str_to_vars("21, 28, 29"), 0));
+ xs.push_back(Xor(str_to_vars("25, 21, 27"), 0));
+ s->xorclauses = xs;
+
+ mf->findMatrixes(false);
+
+ EXPECT_EQ(s->gmatrixes.size(), 3);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/multisol_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/multisol_test.cpp
new file mode 100644
index 000000000..bd4fb4aeb
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/multisol_test.cpp
@@ -0,0 +1,84 @@
+/******************************************
+Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+// How To compile on Linux:
+// 1) compile cryptominsat
+// 2) install cryptominisat: sudo make install
+// 3) run ldconfig: sudo ldconfig
+// 4) build: g++ -std=c++11 readme_test.cpp -lcryptominisat5 -o readme_test
+// 5) run: ./readme_test
+
+#include <cryptominisat5/cryptominisat.h>
+#include <cassert>
+#include <vector>
+using std::vector;
+using namespace CMSat;
+
+int main()
+{
+ SATSolver solver;
+ vector<Lit> clause;
+
+ //We need 3 variables
+ solver.new_var();
+ solver.new_var();
+ solver.new_var();
+
+ //adds "1 0"
+ clause.push_back(Lit(0, false));
+ solver.add_clause(clause);
+
+ //adds "-1 2 3 0"
+ clause.clear();
+ clause.push_back(Lit(0, true));
+ clause.push_back(Lit(1, false));
+ clause.push_back(Lit(2, false));
+ solver.add_clause(clause);
+
+ lbool ret = l_True;
+ while(ret == l_True) {
+ ret = solver.solve();
+ if (ret == l_True) {
+ std::cout
+ << "Solution is: "
+ << solver.get_model()[0]
+ << ", " << solver.get_model()[1]
+ << ", " << solver.get_model()[2]
+ << std::endl;
+
+ clause.clear();
+ for(size_t i = 0; i < 3; i++) {
+ if (solver.get_model()[i] != l_Undef) {
+ clause.push_back(Lit(i, solver.get_model()[i] == l_True));
+ }
+ }
+ solver.add_clause(clause);
+ } else if (ret == l_False) {
+ std::cout << "No more solutions." << std::endl;
+ } else {
+ std::cout << "Solver returned that it didn't finish running."
+ "maybe you put a limit on its runtime?" << std::endl;
+ }
+ }
+
+ return 0;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/probe_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/probe_test.cpp
new file mode 100644
index 000000000..aae779a6a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/probe_test.cpp
@@ -0,0 +1,365 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/prober.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct probe : public ::testing::Test {
+ probe()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doProbe = true;
+ conf.otfHyperbin = true;
+ conf.doStamp = true;
+ conf.doCache = true;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ p = s->prober;
+ }
+ ~probe()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ Prober* p;
+ std::vector<uint32_t> vars;
+ std::atomic<bool> must_inter;
+};
+
+//Regular, 1UIP fails
+
+TEST_F(probe, uip_fail_1)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-2, -3"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = false;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ //1UIP is -2
+ check_zero_assigned_lits_contains(s, "-2");
+}
+
+TEST_F(probe, uip_fail_2)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, -3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("1, -5"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5, 6"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5, -6"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = false;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ //First UIP is 1
+ check_zero_assigned_lits_eq(s, "1");
+}
+
+//BFS, DFS fails
+
+TEST_F(probe, fail_dfs)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, -3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("1, -5"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5, 6"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5, -6"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->force_stamp = 1;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ //deepest common ancestor
+ check_zero_assigned_lits_eq(s, "1");
+}
+
+TEST_F(probe, fail_bfs)
+{
+ //s->conf.verbosity = 10;
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, -3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("1, -5"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5, 6"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5, -6"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->force_stamp = 0;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ //deepest common ancestor
+ check_zero_assigned_lits_eq(s, "1");
+}
+
+//Stamp correctness
+
+TEST_F(probe, stamp)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl("1, -2"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = true;
+ s->conf.otfHyperbin = true;
+ p->force_stamp = 2;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ check_stamp_contains(s, "1, -2", STAMP_IRRED);
+}
+
+TEST_F(probe, stamp_2)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("2, 3"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = true;
+ s->conf.otfHyperbin = true;
+ p->force_stamp = 2;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ check_stamp_contains(s, "1, 3", STAMP_IRRED);
+}
+
+TEST_F(probe, stamp_3)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("2, 3"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = true;
+ s->conf.otfHyperbin = true;
+ p->force_stamp = 1;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ check_stamp_contains(s, "1, 3", STAMP_RED);
+}
+
+
+TEST_F(probe, stamp_4)
+{
+ //s->conf.verbosity = 20;
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("2, 3"));
+ s->add_clause_outer(str_to_cl("2, 4"));
+
+ s->add_clause_outer(str_to_cl("-3, 5"));
+ s->add_clause_outer(str_to_cl("-4, 6"));
+
+ s->add_clause_outer(str_to_cl("-5, 7"));
+ s->add_clause_outer(str_to_cl("-6, 7"));
+
+ s->conf.doBothProp = false;
+ s->conf.doStamp = true;
+ s->conf.otfHyperbin = true;
+ p->force_stamp = 2;
+ vars = str_to_vars("1");
+ p->probe(&vars);
+
+ check_stamp_contains(s, "1, 7", STAMP_IRRED);
+ check_stamp_contains(s, "2, 7", STAMP_IRRED);
+}
+
+//transitive reduction
+
+TEST_F(probe, trans_red1)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-3, 4"));
+ s->add_clause_outer(str_to_cl("1, 4"));
+
+ vars = str_to_vars("1");
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->probe(&vars);
+ check_irred_cls_doesnt_contain(s, "1, 4");
+}
+
+TEST_F(probe, trans_red2)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-3, 4"));
+ s->add_clause_outer(str_to_cl("-4, 5"));
+ s->add_clause_outer(str_to_cl("-3, 5"));
+ s->add_clause_outer(str_to_cl("1, 5"));
+
+ vars = str_to_vars("1");
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->probe(&vars);
+ check_irred_cls_doesnt_contain(s, "-3, 5");
+ check_irred_cls_doesnt_contain(s, "1, 5");
+}
+
+//Hyper-binary resolution
+
+TEST_F(probe, hyper_bin)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("-2, -3, 4"));
+
+ vars = str_to_vars("1");
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->probe(&vars);
+ check_red_cls_contains(s, "1, 4");
+}
+
+TEST_F(probe, hyper_bin2)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("-2, -3, 4, 5"));
+
+ vars = str_to_vars("1");
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->probe(&vars);
+ check_red_cls_contains(s, "1, 5");
+}
+
+TEST_F(probe, hyper_bin3)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("-2, -3, 4, 5"));
+ s->add_clause_outer(str_to_cl("-5, 6"));
+ s->add_clause_outer(str_to_cl("-5, 7"));
+ s->add_clause_outer(str_to_cl("-5, 8"));
+ s->add_clause_outer(str_to_cl("-6, -7, -8, 9"));
+
+ vars = str_to_vars("1");
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->probe(&vars);
+ check_red_cls_contains(s, "1, 5");
+ check_red_cls_contains(s, "-5, 9");
+}
+
+
+//hyper-binary resolution and transitive reduction
+
+TEST_F(probe, hyper_bin_and_trans_red1)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("-2, -3, 4, 5"));
+ s->add_clause_outer(str_to_cl("-5, 6"));
+ s->add_clause_outer(str_to_cl("1, 6"), true);
+ s->add_clause_outer(str_to_cl("-5, 7"));
+ s->add_clause_outer(str_to_cl("-5, 8"));
+ s->add_clause_outer(str_to_cl("-6, -7, -8, 9"));
+
+ vars = str_to_vars("1");
+ s->conf.doBothProp = false;
+ s->conf.doStamp = false;
+ s->conf.otfHyperbin = true;
+ p->probe(&vars);
+ check_red_cls_contains(s, "1, 5");
+ check_red_cls_contains(s, "-5, 9");
+ check_red_cls_doesnt_contain(s, "1, 6");
+}
+
+
+//Implication cache
+
+TEST_F(probe, imp_cache)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+
+ vars = str_to_vars("1, 2, 3");
+ p->probe(&vars);
+ check_impl_cache_contains(s, "1, 3");
+}
+
+TEST_F(probe, imp_cache_2)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+
+ vars = str_to_vars("3, 2, 1");
+ p->probe(&vars);
+ check_impl_cache_contains(s, "3, 1");
+}
+
+TEST_F(probe, imp_cache_longer)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-2, 3"));
+ s->add_clause_outer(str_to_cl("-3, 4"));
+ s->add_clause_outer(str_to_cl("-4, 5"));
+
+ vars = str_to_vars("5, 4, 3, 2, 1");
+ p->probe(&vars);
+ check_impl_cache_contains(s, "5, 1");
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/readme_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/readme_test.cpp
new file mode 100644
index 000000000..4b972fab6
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/readme_test.cpp
@@ -0,0 +1,76 @@
+/******************************************
+Copyright (c) 2014, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+// How To compile on Linux:
+// 1) compile cryptominsat
+// 2) install cryptominisat: sudo make install
+// 3) run ldconfig: sudo ldconfig
+// 4) build: g++ -std=c++11 readme_test.cpp -lcryptominisat5 -o readme_test
+// 5) run: ./readme_test
+
+#include <cryptominisat5/cryptominisat.h>
+#include <cassert>
+#include <vector>
+using std::vector;
+using namespace CMSat;
+
+int main()
+{
+ SATSolver solver;
+ vector<Lit> clause;
+
+ //Let's use 4 threads
+ solver.set_num_threads(4);
+
+ //We need 3 variables
+ solver.new_vars(3);
+
+ //adds "1 0"
+ clause.push_back(Lit(0, false));
+ solver.add_clause(clause);
+
+ //adds "-2 0"
+ clause.clear();
+ clause.push_back(Lit(1, true));
+ solver.add_clause(clause);
+
+ //adds "-1 2 3 0"
+ clause.clear();
+ clause.push_back(Lit(0, true));
+ clause.push_back(Lit(1, false));
+ clause.push_back(Lit(2, false));
+ solver.add_clause(clause);
+
+ lbool ret = solver.solve();
+ assert(ret == l_True);
+ assert(solver.get_model()[0] == l_True);
+ assert(solver.get_model()[1] == l_False);
+ assert(solver.get_model()[2] == l_True);
+ std::cout
+ << "Solution is: "
+ << solver.get_model()[0]
+ << ", " << solver.get_model()[1]
+ << ", " << solver.get_model()[2]
+ << std::endl;
+
+ return 0;
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/scc_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/scc_test.cpp
new file mode 100644
index 000000000..f61cb6b77
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/scc_test.cpp
@@ -0,0 +1,196 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+#include <memory>
+
+#include "src/solver.h"
+#include "src/sccfinder.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+TEST(scc_test, find_1)
+{
+ SolverConf conf;
+ conf.doCache = false;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(2);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("-1, -2"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 1U);
+}
+
+TEST(scc_test, find_2)
+{
+ SolverConf conf;
+ conf.doCache = false;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(4);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("-1, -2"));
+
+ s.add_clause_outer(str_to_cl("3, 4"));
+ s.add_clause_outer(str_to_cl("-3, -4"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 2U);
+}
+
+TEST(scc_test, find_circle_3)
+{
+ SolverConf conf;
+ conf.doCache = false;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(4);
+ s.add_clause_outer(str_to_cl("1, -2"));
+ s.add_clause_outer(str_to_cl("2, -3"));
+ s.add_clause_outer(str_to_cl("3, -1"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 3U);
+}
+
+TEST(scc_test, find_two_circle2_3)
+{
+ SolverConf conf;
+ conf.doCache = false;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(6);
+ s.add_clause_outer(str_to_cl("1, -2"));
+ s.add_clause_outer(str_to_cl("2, -3"));
+ s.add_clause_outer(str_to_cl("3, -1"));
+
+ s.add_clause_outer(str_to_cl("4, -5"));
+ s.add_clause_outer(str_to_cl("5, -6"));
+ s.add_clause_outer(str_to_cl("6, -4"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 6U);
+}
+
+TEST(scc_test, find_1_diff)
+{
+ SolverConf conf;
+ conf.doCache = false;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(2);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("-1, -2"));
+ s.add_clause_outer(str_to_cl("1, -2"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 1U);
+}
+
+TEST(scc_test, find_0)
+{
+ SolverConf conf;
+ conf.doCache = false;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(4);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("1, -2"));
+ s.add_clause_outer(str_to_cl("3, -4"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 0U);
+}
+
+
+TEST(scc_test, limit_test4)
+{
+ SolverConf conf;
+ conf.max_scc_depth = 4;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(4);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("-2, 3"));
+ s.add_clause_outer(str_to_cl("-3, -1"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 3U);
+}
+
+TEST(scc_test, limit_test3)
+{
+ SolverConf conf;
+ conf.max_scc_depth = 3;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(4);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("-2, 3"));
+ s.add_clause_outer(str_to_cl("-3, -1"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 0U);
+}
+
+TEST(scc_test, limit_test2)
+{
+ SolverConf conf;
+ conf.max_scc_depth = 2;
+
+ std::unique_ptr<std::atomic<bool>> tmp(new std::atomic<bool>(false));
+ Solver s(&conf, tmp.get());
+ s.new_vars(4);
+ s.add_clause_outer(str_to_cl("1, 2"));
+ s.add_clause_outer(str_to_cl("-2, 3"));
+ s.add_clause_outer(str_to_cl("-3, -1"));
+
+ SCCFinder scc(&s);
+ scc.performSCC();
+ EXPECT_EQ(scc.get_binxors().size(), 0U);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/searcher_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/searcher_test.cpp
new file mode 100644
index 000000000..12da46635
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/searcher_test.cpp
@@ -0,0 +1,180 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+namespace CMSat {
+struct SearcherTest : public ::testing::Test {
+ SearcherTest()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ }
+ ~SearcherTest()
+ {
+ delete s;
+ }
+
+ void set_var_polar(uint32_t var, bool polarity)
+ {
+ s->new_decision_level();
+ //it must be inverted to set
+ s->enqueue<false>(Lit(var, !polarity));
+ s->cancelUntil(0);
+ }
+
+ SolverConf conf;
+ Solver* s = NULL;
+ Searcher* ss = NULL;
+ std::vector<uint32_t> vars;
+ std::atomic<bool> must_inter;
+};
+
+//Regular, 1UIP fails
+
+TEST_F(SearcherTest, pickpolar_rnd)
+{
+ conf.polarity_mode = PolarityMode::polarmode_rnd;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ss = (Searcher*)s;
+
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+
+ uint32_t num = 0;
+ for(uint32_t i = 0 ; i < 1000000; i++)
+ num += (unsigned)ss->pick_polarity(0);
+
+ //Not far off from avg
+ ASSERT_GT(num, 400000U);
+ ASSERT_LT(num, 600000U);
+}
+
+TEST_F(SearcherTest, pickpolar_pos)
+{
+ conf.polarity_mode = PolarityMode::polarmode_pos;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ss = (Searcher*)s;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+
+ uint32_t num = 0;
+ for(uint32_t i = 0 ; i < 100000; i++)
+ num += (unsigned)ss->pick_polarity(0);
+
+ ASSERT_EQ(num, 100000U);
+}
+
+TEST_F(SearcherTest, pickpolar_neg)
+{
+ conf.polarity_mode = PolarityMode::polarmode_neg;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ss = (Searcher*)s;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+
+ uint32_t num = 0;
+ for(uint32_t i = 0 ; i < 100000; i++)
+ num += (unsigned)ss->pick_polarity(0);
+
+ ASSERT_EQ(num, 0U);
+}
+
+TEST_F(SearcherTest, pickpolar_auto)
+{
+ conf.polarity_mode = PolarityMode::polarmode_automatic;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ss = (Searcher*)s;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+
+ s->new_decision_level();
+ set_var_polar(0, true);
+ //we expect TRUE
+ ASSERT_EQ(ss->pick_polarity(0), true);
+
+
+ set_var_polar(0, false);
+ //we expect FALSE
+ ASSERT_EQ(ss->pick_polarity(0), false);
+
+ //for unset variables, it must all be FALSE
+ for(uint32_t i = 1; i < 10; i++) {
+ ASSERT_EQ(ss->pick_polarity(i), false);
+ }
+}
+
+TEST_F(SearcherTest, pickpolar_auto_not_changed_by_simp)
+{
+ conf.polarity_mode = PolarityMode::polarmode_automatic;
+ conf.doVarElim = false;
+ //conf.verbosity = 2;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ss = (Searcher*)s;
+ s->add_clause_outer(str_to_cl(" 1, 2"));
+ s->add_clause_outer(str_to_cl(" -1, 2"));
+ s->add_clause_outer(str_to_cl(" 3, 4, 5"));
+ s->add_clause_outer(str_to_cl(" -3, 4, 5"));
+ s->add_clause_outer(str_to_cl(" -3, -4, 5"));
+ s->add_clause_outer(str_to_cl(" 2, -3, -4, 5"));
+ s->add_clause_outer(str_to_cl(" 2, -3, 4, 5"));
+ s->add_clause_outer(str_to_cl(" 4, 5"));
+ s->add_clause_outer(str_to_cl(" -4, 5"));
+ s->add_clause_outer(str_to_cl(" -4, -5"));
+
+
+ //The mod%3 is only to set it kinda randomly.
+ for(size_t i = 0; i < 30; i++) {
+ set_var_polar(i, i%3);
+ }
+
+ //for unset variables, it must all be FALSE
+ for(uint32_t i = 0; i < 30; i++) {
+ ASSERT_EQ(ss->pick_polarity(i), (bool)(i%3));
+ }
+
+ s->simplify_problem(true);
+ //for unset variables, it must all be FALSE
+ for(uint32_t i = 0; i < 30; i++) {
+ ASSERT_EQ(ss->pick_polarity(i), (bool)(i%3));
+ }
+
+ s->simplify_problem(false);
+ for(uint32_t i = 0; i < 30; i++) {
+ ASSERT_EQ(ss->pick_polarity(i), (bool)(i%3));
+ }
+}
+
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/CMakeLists.txt b/cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/CMakeLists.txt
new file mode 100644
index 000000000..c162daed9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright (c) 2017, Mate Soos
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+if (ENABLE_TESTING AND NOT MSVC AND NOT SLOW_DEBUG)
+ add_test (
+ NAME simp_checks
+ COMMAND "${PYTHON_EXECUTABLE}"
+ "${CMAKE_CURRENT_SOURCE_DIR}/check_bve.py"
+ "--minisat" $<TARGET_FILE:minisatoeas_simp>
+ "--cms" $<TARGET_FILE:cryptominisat5>
+ "--threads" "1"
+ "${CMAKE_CURRENT_SOURCE_DIR}/simplifiy_testfiles/"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+endif()
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/check_bve.py b/cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/check_bve.py
new file mode 100755
index 000000000..ec207681d
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/simp-checks/check_bve.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2014 Mate Soos
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+import os
+import optparse
+import subprocess
+import time
+import gzip
+import threading
+import glob
+
+
+class PlainHelpFormatter(optparse.IndentedHelpFormatter):
+
+ def format_description(self, description):
+ if description:
+ return description + "\n"
+ else:
+ return ""
+
+usage = "usage: %prog [options] cryptominisat5-binary testfile(s)"
+desc = """Test solver against some problems
+"""
+
+parser = optparse.OptionParser(usage=usage, description=desc,
+ formatter=PlainHelpFormatter())
+
+parser.add_option("--verbose", "-v", action="store_true", default=False,
+ dest="verbose", help="Print more output")
+parser.add_option("--threads", "-t", default=4, type=int,
+ dest="threads", help="Number of threads")
+parser.add_option("--minisat", type=str,
+ dest="minisat_exe", help="MiniSat location")
+parser.add_option("--cms", type=str,
+ dest="cms_exe", help="CryptoMiniSat location")
+
+
+(options, args) = parser.parse_args()
+print_lock = threading.Lock()
+todo_lock = threading.Lock()
+
+if len(args) < 1:
+ print("ERROR: You must call this script with at least one argument, a file to check")
+ exit(-1)
+
+
+def go_through_cnf(f):
+ for line in f:
+ line = line.decode('ascii').strip()
+ if len(line) == 0:
+ continue
+ if line[0] == "p":
+ line = line.split()
+ assert line[1].strip() == "cnf"
+ assert line[2].isdigit()
+ return int(line[2])
+
+ assert False
+
+
+def find_num_vars(fname):
+
+ try:
+ with gzip.open(fname, 'rb') as f:
+ maxvar = go_through_cnf(f)
+ except IOError:
+ with open(fname, 'rb') as f:
+ maxvar = go_through_cnf(f)
+
+ return maxvar
+
+todo = []
+exitnum = 0
+
+
+class MyThread(threading.Thread):
+ def __init__(self, threadID, extraopts):
+ threading.Thread.__init__(self)
+ self.threadID = threadID
+ self.extraopts = extraopts
+
+ def run(self):
+ global todo
+ global exitnum
+ while len(todo) > 0:
+ with todo_lock:
+ fname = todo[0]
+ todo = todo[1:]
+
+ if options.verbose:
+ with print_lock:
+ print("Thread %d pikced up %s" % (self.threadID, fname))
+
+ ret = self.test_velim_one_file(fname)
+
+ with todo_lock:
+ exitnum |= ret
+
+ if options.verbose:
+ with print_lock:
+ print("Finished thread %d" % self.threadID)
+
+ def test_velim_one_file(self, fname):
+ orig_num_vars = find_num_vars(fname)
+
+ simp_fname = "simp.out-%d" % self.threadID
+ try:
+ os.unlink(simp_fname)
+ except:
+ pass
+
+ toprint = ""
+
+ toexec = [options.cms_exe, "--zero-exit-status",
+ "--preproc", "1", "--verb", "0"]
+ toexec.extend(self.extraopts)
+ toexec.extend([fname, simp_fname])
+
+ toprint += "Executing: %s\n" % toexec
+ with print_lock:
+ print(toprint)
+ toprint = ""
+
+ start = time.time()
+ cms_out_fname = "cms-%s.out" % os.path.split(fname)[1]
+ try:
+ with open(cms_out_fname, "w") as f:
+ subprocess.check_call(" ".join(toexec), stdout=f, shell=True)
+ except subprocess.CalledProcessError:
+ toprint += "*** ERROR CryptoMiniSat errored out!\n"
+ with print_lock:
+ print(toprint)
+ exit(-1)
+ return -1
+ t_cms = time.time()-start
+ num_vars_after_cms_preproc = find_num_vars(simp_fname)
+
+ start = time.time()
+ toexec = [options.minisat_exe, fname]
+ toprint += "Executing: %s\n" % toexec
+ minisat_out_fname = "minisat_elim_data.out-%d" % self.threadID
+ try:
+ with open(minisat_out_fname, "w") as f:
+ subprocess.check_call(" ".join(toexec), stdout=f, shell=True)
+ except subprocess.CalledProcessError:
+ toprint += "** Minisat errored out...\n"
+ with print_lock:
+ print(toprint)
+ exit(-1)
+ return -1
+ t_msat = time.time()-start
+
+ var_elimed = None
+ num_vars_after_ms_preproc = None
+ with open(minisat_out_fname, "r") as f:
+ for line in f:
+ line = line.strip()
+ if "num-vars-eliminated" in line:
+ var_elimed = int(line.split()[1])
+ if "num-free-vars" in line:
+ num_vars_after_ms_preproc = int(line.split()[1])
+
+ assert var_elimed is not None, "Couldn't find var-elimed line, out: %s" % toprint
+ assert num_vars_after_ms_preproc is not None, "Couldn't find num-free-vars line, out: %s" % toprint
+
+ toprint += "-> orig num vars: %d\n" % orig_num_vars
+ toprint += "-> T-cms : %-4.2f free vars after: %-9d\n" % (t_cms, num_vars_after_cms_preproc)
+ toprint += "-> T-msat: %-4.2f free vars after: %-9d\n" % (t_msat, num_vars_after_ms_preproc)
+ diff = num_vars_after_cms_preproc - num_vars_after_ms_preproc
+ limit = float(orig_num_vars)*0.05
+ if diff < limit*8 and t_msat > t_cms*4 and t_msat > 20:
+ toprint += " * MiniSat didn't timeout, but we did, acceptable difference.\n"
+ with print_lock:
+ print(toprint)
+ return 0
+
+ if diff > limit:
+ toprint += "*** ERROR: No. vars difference %d is more than 5%% " % diff
+ toprint += "of original no. of vars, %d\n" % limit
+ with print_lock:
+ print(toprint)
+ return 1
+
+ toprint += "------------------[ thread %d ]------------------------" % self.threadID
+
+ with print_lock:
+ print(toprint)
+
+ return 0
+
+
+def test(extraopts):
+ global exitnum
+ exitnum = 0
+ global todo
+ assert os.path.isdir(args[0])
+ path = os.path.join(args[0], '')
+ todo = glob.glob(path+"/*.cnf.gz")
+
+ threads = []
+ for i in range(options.threads):
+ threads.append(MyThread(i, extraopts))
+
+ for t in threads:
+ t.start()
+
+ for t in threads:
+ t.join()
+
+ if exitnum == 0:
+ print("ALL PASSED")
+ else:
+ print("SOME CHECKS FAILED")
+
+ return exitnum
+
+if __name__ == "__main__":
+ test(["--preschedule", "occ-bve,must-renumber"])
+ if exitnum != 0:
+ exit(exitnum)
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/solver_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/solver_test.cpp
new file mode 100644
index 000000000..2666082db
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/solver_test.cpp
@@ -0,0 +1,246 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+namespace CMSat {
+struct SolverTest : public ::testing::Test {
+ SolverTest()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ }
+ ~SolverTest()
+ {
+ delete s;
+ }
+
+ SolverConf conf;
+ Solver* s = NULL;
+ std::vector<uint32_t> vars;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(SolverTest, get_bin)
+{
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+ s->add_clause_int(str_to_cl(" 1, 2"), true);
+
+ s->start_getting_small_clauses(2, 100);
+ vector<Lit> lits;
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 1, 2"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+TEST_F(SolverTest, get_long_lev0)
+{
+ Clause* c;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ClauseStats stats;
+ stats.glue = 5;
+
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+ c = s->add_clause_int(str_to_cl(" 1, 2, 3, 4"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[0].push_back(s->cl_alloc.get_offset(c));
+
+ s->start_getting_small_clauses(10, 100);
+ vector<Lit> lits;
+
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 1, 2, 3, 4"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+
+TEST_F(SolverTest, get_long_lev1)
+{
+ Clause* c;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ClauseStats stats;
+ stats.glue = 5;
+
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+ c = s->add_clause_int(str_to_cl(" 6, 2, 3, 4"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[1].push_back(s->cl_alloc.get_offset(c));
+
+ s->start_getting_small_clauses(10, 100);
+ vector<Lit> lits;
+
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 6, 2, 3, 4"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+TEST_F(SolverTest, get_long_lev0_and_lev1)
+{
+ Clause* c;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ClauseStats stats;
+ stats.glue = 5;
+
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+
+ c = s->add_clause_int(str_to_cl(" 3, -4, -7"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[1].push_back(s->cl_alloc.get_offset(c));
+
+ c = s->add_clause_int(str_to_cl(" 2, 4, 5, 6"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[0].push_back(s->cl_alloc.get_offset(c));
+
+ s->start_getting_small_clauses(10, 100);
+ vector<Lit> lits;
+
+ //Order is reverse because we get lev0 then lev1
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 2, 4, 5, 6"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 3, -4, -7"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+TEST_F(SolverTest, get_long_toolarge)
+{
+ Clause* c;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ClauseStats stats;
+ stats.glue = 5;
+
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+ c = s->add_clause_int(str_to_cl(" 1, 2, 3, 4"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[0].push_back(s->cl_alloc.get_offset(c));
+
+ s->start_getting_small_clauses(2, 100);
+ vector<Lit> lits;
+
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+TEST_F(SolverTest, get_glue_toolarge)
+{
+ Clause* c;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ClauseStats stats;
+ stats.glue = 20;
+
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+ c = s->add_clause_int(str_to_cl(" 1, 2, 3, 4"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[0].push_back(s->cl_alloc.get_offset(c));
+
+ s->start_getting_small_clauses(100, 2);
+ vector<Lit> lits;
+
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+TEST_F(SolverTest, get_bin_and_long)
+{
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ ClauseStats stats;
+ stats.glue = 5;
+
+ s->add_clause_outer(str_to_cl(" 2, 3"));
+ Clause* c;
+ c = s->add_clause_int(str_to_cl(" 1, 5 "), true);
+ assert(c == NULL);
+ c = s->add_clause_int(str_to_cl(" 1, 2, 3, 4"), true, stats);
+ assert(c != NULL);
+ s->longRedCls[0].push_back(s->cl_alloc.get_offset(c));
+
+ s->start_getting_small_clauses(4, 100);
+ vector<Lit> lits;
+
+ bool ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 1, 5"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_TRUE(ret);
+ std::sort(lits.begin(), lits.end());
+ ASSERT_EQ(lits, str_to_cl(" 1, 2, 3, 4"));
+
+ ret = s->get_next_small_clause(lits);
+ ASSERT_FALSE(ret);
+
+ s->end_getting_small_clauses();
+}
+
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/stp_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/stp_test.cpp
new file mode 100644
index 000000000..b5059e8f5
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/stp_test.cpp
@@ -0,0 +1,129 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "cryptominisat5/cryptominisat.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+void add_clauses_for_simp_check(SATSolver& s)
+{
+ s.new_vars(4);
+
+ // 1 = 2
+ s.add_clause(str_to_cl("1, -2"));
+ s.add_clause(str_to_cl("-1, 2"));
+
+ // 3 = 4
+ s.add_clause(str_to_cl("3, -4"));
+ s.add_clause(str_to_cl("-3, 4"));
+
+ //no elimination
+ s.add_clause(str_to_cl("3, 2"));
+ s.add_clause(str_to_cl("4, 1"));
+}
+
+TEST(stp_test, no_simp_at_startup)
+{
+ SATSolver s;
+ s.set_no_simplify();
+ add_clauses_for_simp_check(s);
+
+ s.solve();
+ auto eq_xors = s.get_all_binary_xors();
+ EXPECT_EQ(eq_xors.size(), 0U);
+}
+
+// Needs to be re-written when we can query clauses from the solver
+// TEST(stp_test, simp_at_startup)
+// {
+// SATSolver s;
+// add_clauses_for_simp_check(s);
+//
+// s.solve();
+// auto eq_xors = s.get_all_binary_xors();
+// EXPECT_EQ(eq_xors.size(), 2U);
+// }
+
+TEST(stp_test, set_num_threads_true)
+{
+ SATSolver s;
+ s.set_num_threads(5);
+ s.new_vars(2);
+ s.add_clause(str_to_cl("1,2"));
+ s.add_clause(str_to_cl("1,-2"));
+
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_True);
+ EXPECT_EQ(s.get_model()[0], l_True);
+}
+
+TEST(stp_test, set_num_threads_false)
+{
+ SATSolver s;
+ s.set_no_simplify_at_startup();
+ s.set_num_threads(5);
+ s.new_vars(2);
+ s.add_clause(str_to_cl("1,2"));
+ s.add_clause(str_to_cl("1,-2"));
+ s.add_clause(str_to_cl("-1,2"));
+ s.add_clause(str_to_cl("-1,-2"));
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_False);
+}
+
+TEST(stp_test, default_polar_false)
+{
+ SATSolver s;
+ s.set_no_simplify_at_startup();
+ s.set_default_polarity(false);
+ s.new_vars(4);
+ s.add_clause(str_to_cl("-1, -2, -3, -4"));
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_True);
+ for(size_t i = 0; i < 4; i++) {
+ EXPECT_EQ(s.get_model()[0], l_False);
+ }
+}
+
+TEST(stp_test, default_polar_true)
+{
+ SATSolver s;
+ s.set_no_simplify_at_startup();
+ s.set_default_polarity(true);
+ s.new_vars(4);
+ s.add_clause(str_to_cl("1, 2, 3, 4"));
+ lbool ret = s.solve();
+ EXPECT_EQ(ret, l_True);
+ for(size_t i = 0; i < 4; i++) {
+ EXPECT_EQ(s.get_model()[0], l_True);
+ }
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/subsume_impl_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/subsume_impl_test.cpp
new file mode 100644
index 000000000..d83478d3a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/subsume_impl_test.cpp
@@ -0,0 +1,105 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <set>
+using std::set;
+
+#include "src/solver.h"
+#include "src/subsumeimplicit.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct sub_impl : public ::testing::Test {
+ sub_impl()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ //conf.verbosity = 20;
+ s = new Solver(&conf, &must_inter);
+ sub = s->subsumeImplicit;
+ }
+ ~sub_impl()
+ {
+ delete s;
+ }
+
+ Solver* s;
+ SubsumeImplicit* sub;
+ std::atomic<bool> must_inter;
+};
+
+//SUB 2-by-2
+TEST_F(sub_impl, sub_2by2_1)
+{
+ s->new_vars(7);
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, -2"));
+
+ sub->subsume_implicit();
+ check_irred_cls_eq(s, "1, -2");
+}
+
+TEST_F(sub_impl, sub_2by2_2)
+{
+ s->new_vars(7);
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("1, -4"));
+ s->add_clause_outer(str_to_cl("1, -2"));
+
+ sub->subsume_implicit();
+ check_irred_cls_eq(s, "1, -2; 1, 3; 1, -4");
+}
+
+TEST_F(sub_impl, sub_2by2_3)
+{
+ s->new_vars(7);
+ s->add_clause_outer(str_to_cl("2, 1"));
+ s->add_clause_outer(str_to_cl("2, 4"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("1, 3"));
+ s->add_clause_outer(str_to_cl("-1, -3"));
+ s->add_clause_outer(str_to_cl("1, 2"));
+
+ sub->subsume_implicit();
+ check_irred_cls_eq(s, "1, 2; 1, 3;2, 4;-1, -3");
+}
+
+TEST_F(sub_impl, sub_2by2_4)
+{
+ s->new_vars(7);
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 4"));
+ s->add_clause_outer(str_to_cl("-1, 2, 4"));
+ s->add_clause_outer(str_to_cl("1, 4"));
+
+ sub->subsume_implicit();
+ check_irred_cls_eq(s, "1, 4; 1, 2, 3, 4;-1, 2, 4");
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/test_helper.h b/cryptominisat5/cryptominisat-5.6.3/tests/test_helper.h
new file mode 100644
index 000000000..8af446f49
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/test_helper.h
@@ -0,0 +1,673 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef TEST_HELPER__H
+#define TEST_HELPER__H
+
+#ifdef KLEE
+#include <klee/klee.h>
+#define EXPECT_EQ(a, b) klee_assume((a) == (b))
+#define EXPECT_TRUE(a) klee_assume((a) == true)
+#else
+#include "gtest/gtest.h"
+#endif
+
+#include "cryptominisat5/solvertypesmini.h"
+#include <vector>
+#include <ostream>
+#include <iostream>
+#include <sstream>
+#include <functional>
+#include <cctype>
+#include <cassert>
+#include <algorithm>
+#include "src/solver.h"
+#include "src/stamp.h"
+#include "src/xor.h"
+#include "cryptominisat5/cryptominisat.h"
+
+using std::cout;
+using std::endl;
+using std::vector;
+using std::string;
+using std::istringstream;
+using std::stringstream;
+using namespace CMSat;
+
+// trim from start
+static inline std::string &ltrim(std::string &s) {
+ s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
+ return s;
+}
+
+// trim from end
+static inline std::string &rtrim(std::string &s) {
+ s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
+ return s;
+}
+
+// trim from both ends
+static inline std::string &trim(std::string &s) {
+ return ltrim(rtrim(s));
+}
+
+long int str_to_long_int(string& token)
+{
+ string trimmed = trim(token);
+ size_t endptr;
+ long i = std::stol(trimmed, &endptr);
+ if (endptr != trimmed.size()) {
+ cout << "Error, input token: '" << token << "' wasn't completely used up, wrong token!" << endl;
+ exit(-1);
+ }
+ return i;
+}
+
+vector<Lit> str_to_cl(const string& data)
+{
+ vector<string> tokens;
+ stringstream ss(data);
+ string token;
+ while (getline(ss,token, ','))
+ {
+ tokens.push_back(token);
+ }
+
+ vector<Lit> ret;
+ for(string& token2: tokens) {
+ long int i = str_to_long_int(token2);
+ assert(i == (int)i);
+ Lit lit(std::abs(i)-1, i < 0);
+ ret.push_back(lit);
+ }
+ //cout << "input is: " << data << " LITs is: " << ret << endl;
+
+ std::sort(ret.begin(), ret.end());
+ return ret;
+}
+
+vector<uint32_t> str_to_vars(const string& data)
+{
+ vector<Lit> lits = str_to_cl(data);
+ vector<uint32_t> vars;
+ for(Lit lit: lits) {
+ assert(lit.sign() == false);
+ vars.push_back(lit.var());
+ }
+ return vars;
+}
+
+vector<Xor> str_to_xors(const string& data)
+{
+ vector<Xor> ret;
+ stringstream ss(data);
+ string token;
+ while (getline(ss,token, ';'))
+ {
+ stringstream ss2(token);
+ string token2;
+ int at = 0;
+ bool rhs = false;
+ vector<uint32_t> vars;
+ while (getline(ss2,token2, '='))
+ {
+ //cout << "Token is: " << token2 << endl;
+ if (at == 0) {
+ vars = str_to_vars(token2);
+ }
+ if (at == 1) {
+ long r = str_to_long_int(token2);
+ assert(r >= 0 && r <= 1);
+ rhs = r;
+ }
+ assert(at < 2);
+ at++;
+ }
+ assert(at == 2 && "You forgot the =0/1 from the XOR");
+ ret.push_back(Xor(vars, rhs));
+ }
+
+ return ret;
+}
+
+vector<vector<Lit> > str_to_vecs(const string& data)
+{
+ vector<vector<Lit> > ret;
+ stringstream ss(data);
+ string token;
+ while (getline(ss,token, ';'))
+ {
+ ret.push_back(str_to_cl(token));
+ }
+
+ return ret;
+}
+
+void add_cls(vector<vector<Lit> >& ret,
+ const Solver* s,
+ const vector<ClOffset>& offsets)
+{
+ for(auto off: offsets) {
+ Clause& cl = *s->cl_alloc.ptr(off);
+ vector<Lit> lits;
+ for(Lit l: cl) {
+ lits.push_back(l);
+ }
+ std::sort(lits.begin(), lits.end());
+ ret.push_back(lits);
+ }
+}
+
+void add_impl_cls(
+ vector<vector<Lit> >& ret,
+ const Solver* s,
+ const bool add_irred,
+ const bool add_red)
+{
+ for(size_t i = 0; i < s->nVars()*2; i++) {
+ Lit lit = Lit::toLit(i);
+ for(const Watched& ws: s->watches[lit]) {
+ if (ws.isBin()
+ && lit < ws.lit2()
+ && ((add_irred && !ws.red()) || (add_red && ws.red()))
+ ) {
+ vector<Lit> cl;
+ cl.push_back(lit);
+ cl.push_back(ws.lit2());
+ ret.push_back(cl);
+ }
+ }
+ }
+}
+
+vector<vector<Lit> > get_irred_cls(const Solver* s)
+{
+ vector<vector<Lit> > ret;
+ add_cls(ret, s, s->longIrredCls);
+ add_impl_cls(ret, s, true, false);
+
+ return ret;
+}
+
+
+vector<vector<Lit> > get_red_cls(const Solver* s)
+{
+ vector<vector<Lit> > ret;
+ add_cls(ret, s, s->longRedCls[0]);
+ add_impl_cls(ret, s, false, true);
+
+ return ret;
+}
+
+struct VecVecSorter
+{
+ bool operator()(const vector<Lit>&a, const vector<Lit>& b) const
+ {
+ if (a.size() != b.size()) {
+ return a.size() < b.size();
+ }
+
+ for(size_t i = 0; i < a.size(); i++) {
+ if (a[i] != b[i]) {
+ return a[i] < b[i];
+ }
+ }
+ return false;
+ }
+};
+
+void check_fuzzy_equal(
+ vector<vector<Lit> >& cls_expected,
+ vector<vector<Lit> >& cls_actual)
+{
+ for(vector<Lit>& x: cls_actual) {
+ std::sort(x.begin(), x.end());
+ }
+ for(vector<Lit>& x: cls_expected) {
+ std::sort(x.begin(), x.end());
+ }
+
+ VecVecSorter sorter;
+ std::sort(cls_actual.begin(), cls_actual.end(), sorter);
+ std::sort(cls_expected.begin(), cls_expected.end(), sorter);
+
+ EXPECT_EQ(cls_expected, cls_actual);
+}
+
+string print(const vector<vector<Lit> >& cls)
+{
+ std::stringstream ss;
+ for(auto cl: cls) {
+ ss << cl << endl;
+ }
+ return ss.str();
+}
+
+void check_irred_cls_eq(const Solver* s, const string& data)
+{
+ vector<vector<Lit> > cls_expected = str_to_vecs(data);
+ vector<vector<Lit> > cls = get_irred_cls(s);
+
+ check_fuzzy_equal(cls_expected, cls);
+}
+
+void check_red_cls_eq(const Solver* s, const string& data)
+{
+ vector<vector<Lit> > cls_expected = str_to_vecs(data);
+ vector<vector<Lit> > cls = get_red_cls(s);
+
+ check_fuzzy_equal(cls_expected, cls);
+}
+
+void check_irred_cls_contains(const Solver* s, const string& data)
+{
+ vector<Lit> looking_for = str_to_cl(data);
+ vector<vector<Lit> > cls = get_irred_cls(s);
+
+ bool found_cl = false;
+ for(auto cl: cls) {
+ if (cl == looking_for) {
+ found_cl = true;
+ break;
+ }
+
+ }
+ if (!found_cl) {
+ cout << "Expected to find: " << looking_for << endl;
+ cout << "But only found : ";
+ for(auto cl: cls) {
+ cout << cl << ", ";
+ }
+ cout << endl;
+ }
+ EXPECT_TRUE(found_cl);
+}
+
+
+void check_red_cls_contains(const Solver* s, const string& data)
+{
+ vector<Lit> looking_for = str_to_cl(data);
+ vector<vector<Lit> > cls = get_red_cls(s);
+
+ bool found_cl = false;
+ for(auto cl: cls) {
+ if (cl == looking_for) {
+ found_cl = true;
+ break;
+ }
+
+ }
+ if (!found_cl) {
+ cout << "Expected to find: " << looking_for << endl;
+ cout << "But only found : ";
+ for(auto cl: cls) {
+ cout << cl << ", ";
+ }
+ cout << endl;
+ }
+ EXPECT_TRUE(found_cl);
+}
+
+
+void check_irred_cls_doesnt_contain(const Solver* s, const string& data)
+{
+ vector<Lit> not_inside = str_to_cl(data);
+ vector<vector<Lit> > cls = get_irred_cls(s);
+
+ bool not_found_cl = true;
+ for(auto cl: cls) {
+ //cout << "irred cl inside: " << cl << endl;
+ if (cl == not_inside) {
+ cout << "Expected not to find irred: " << not_inside << endl;
+ cout << "But found it";
+ not_found_cl = false;
+ break;
+ }
+
+ }
+ EXPECT_TRUE(not_found_cl);
+}
+
+void check_red_cls_doesnt_contain(const Solver* s, const string& data)
+{
+ vector<Lit> not_inside = str_to_cl(data);
+ vector<vector<Lit> > cls = get_red_cls(s);
+
+ bool not_found_cl = true;
+ for(auto cl: cls) {
+ //cout << "red cl inside: " << cl << endl;
+ if (cl == not_inside) {
+ cout << "Expected not to find red: " << not_inside << endl;
+ cout << "But found it";
+ not_found_cl = false;
+ break;
+ }
+
+ }
+ EXPECT_TRUE(not_found_cl);
+}
+
+void print_model(const SATSolver&s)
+{
+ assert(s.okay());
+ for(size_t i = 0; i < s.nVars(); i++) {
+ cout << "Model [" << i << "]: " << s.get_model()[i] << endl;
+ }
+}
+
+void check_set_lits(const Solver* s, const std::string& data)
+{
+ vector<Lit> lits = str_to_cl(data);
+ std::sort(lits.begin(), lits.end());
+
+ vector<Lit> set_lits = s->get_zero_assigned_lits();
+ std::sort(set_lits.begin(), set_lits.end());
+ EXPECT_EQ(lits, set_lits);
+}
+
+struct XorSorter
+{
+ bool operator()(const Xor& a, const Xor& b) const
+ {
+ if (a.size() != b.size())
+ return a.size() < b.size();
+
+ if (a.rhs != b.rhs) {
+ return a.rhs < b.rhs;
+ }
+
+ for(size_t i = 0; i < a.size(); i++) {
+ if (a[i] != b[i]) {
+ return a[i] < b[i];
+ }
+ }
+
+ return false;
+ }
+};
+
+void check_xors_eq(const vector<Xor>& got_data, const std::string& expected)
+{
+ XorSorter xorsort;
+
+ vector<Xor> expected_sorted = str_to_xors(expected);
+ for(auto t: expected_sorted) {
+ std::sort(t.begin(), t.end());
+ }
+ std::sort(expected_sorted.begin(), expected_sorted.end(), xorsort);
+
+ vector<Xor> got_data_sorted = got_data;
+ for(auto t: got_data_sorted) {
+ std::sort(t.begin(), t.end());
+ }
+
+ std::sort(got_data_sorted.begin(), got_data_sorted.end(), xorsort);
+ EXPECT_EQ(expected_sorted, got_data_sorted);
+}
+
+void check_xors_contains(const vector<Xor>& got_data, const std::string& expected)
+{
+ vector<Xor> expected_sorted = str_to_xors(expected);
+ assert(expected_sorted.size() == 1);
+ Xor expectedX = expected_sorted[0];
+ std::sort(expectedX.begin(), expectedX.end());
+
+ vector<Xor> got_data_sorted = got_data;
+ for(auto t: got_data_sorted) {
+ std::sort(t.begin(), t.end());
+ }
+
+ bool found = false;
+ for(const Xor& x: got_data_sorted) {
+ if (x == expectedX) {
+ found = true;
+ break;
+ }
+ }
+ EXPECT_TRUE(found);
+}
+
+string print_cache(const vector<LitExtra>& c)
+{
+ std::stringstream ss;
+ for(LitExtra a: c) {
+ ss << a.getLit() << "(irred: " << a.getOnlyIrredBin() << " ), ";
+ }
+ return ss.str();
+}
+
+void check_impl_cache_contains(const Solver* s, const std::string& data)
+{
+ vector<Lit> lits = str_to_cl(data);
+ assert(lits.size() == 2);
+
+ const vector<LitExtra>& cache_lits = s->implCache[lits[0]].lits;
+ /*cout << "cache[0]: " << print_cache(s->implCache[Lit(0, false)].lits) << endl;
+ cout << "cache[1]: " << print_cache(s->implCache[Lit(1, false)].lits) << endl;
+ cout << "cache[2]: " << print_cache(s->implCache[Lit(2, false)].lits) << endl;
+
+ cout << "cache[~0]: " << print_cache(s->implCache[Lit(0, true)].lits) << endl;
+ cout << "cache[~1]: " << print_cache(s->implCache[Lit(1, true)].lits) << endl;
+ cout << "cache[~2]: " << print_cache(s->implCache[Lit(2, true)].lits) << endl;
+ */
+ bool inside = false;
+ for(LitExtra l: cache_lits) {
+ if (l.getLit() == lits[1])
+ inside = true;
+ }
+ EXPECT_TRUE(inside);
+}
+
+void add_to_cache_irred(Solver* s, const string& data)
+{
+ vector<Lit> lits = str_to_cl(data);
+ assert(lits.size() == 2);
+ assert(s->implCache.size() > lits[0].toInt());
+ assert(s->implCache.size() > lits[1].toInt());
+ s->implCache[lits[0]].lits.push_back(LitExtra(lits[1], true));
+ s->implCache[lits[1]].lits.push_back(LitExtra(lits[0], true));
+}
+
+void add_to_stamp_irred(Solver* s, const string& data)
+{
+ vector<Lit> lits = str_to_cl(data);
+ assert(lits.size() == 2);
+ assert(s->stamp.tstamp.size() > lits[0].toInt());
+ assert(s->stamp.tstamp.size() > lits[1].toInt());
+ s->stamp.tstamp[(~lits[0]).toInt()].start[STAMP_IRRED] = ++ s->stamp.stampingTime;
+ s->stamp.tstamp[(lits[1]).toInt()].start[STAMP_IRRED] = ++ s->stamp.stampingTime;
+ s->stamp.tstamp[(lits[1]).toInt()].end[STAMP_IRRED] = ++ s->stamp.stampingTime;
+ s->stamp.tstamp[(~lits[0]).toInt()].end[STAMP_IRRED] = ++ s->stamp.stampingTime;
+}
+
+void check_stamp_contains(Solver* s, const string& data, const StampType t)
+{
+ vector<Lit> lits = str_to_cl(data);
+ assert(lits.size() == 2);
+ assert(s->stamp.tstamp.size() > lits[0].toInt());
+ assert(s->stamp.tstamp.size() > lits[1].toInt());
+ uint64_t start1 = s->stamp.tstamp[(~lits[0]).toInt()].start[t];
+ uint64_t end1 = s->stamp.tstamp[(~lits[0]).toInt()].end[t];
+ uint64_t start2 = s->stamp.tstamp[lits[1].toInt()].start[t];
+ uint64_t end2 = s->stamp.tstamp[lits[1].toInt()].end[t];
+ /*cout
+ << "start1: " << start1
+ << "end1: " << end1
+ << "start2: " << start2
+ << "end2: " << end2
+ << endl;*/
+
+ EXPECT_TRUE(start1 < start2);
+ EXPECT_TRUE(end1 > end2);
+}
+
+void check_zero_assigned_lits_eq(Solver* s, const string& data)
+{
+ vector<Lit> lits_exp = str_to_cl(data);
+ vector<Lit> lits_act = s->get_zero_assigned_lits();
+ EXPECT_EQ(lits_act, lits_exp);
+}
+
+void check_zero_assigned_lits_contains(Solver* s, const string& data)
+{
+ vector<Lit> lits_exp = str_to_cl(data);
+ vector<Lit> lits_act = s->get_zero_assigned_lits();
+ for (Lit e: lits_exp) {
+ bool found_lit = false;
+ for(Lit a: lits_act) {
+ if (e == a) {
+ found_lit = true;
+ }
+ }
+ if (!found_lit) {
+ cout << "Literal " << e << " was not assigned" << endl;
+ EXPECT_TRUE(found_lit);
+ }
+ }
+}
+
+bool clause_satisfied(const string& data, vector<lbool>& solution)
+{
+ vector<Lit> lits = str_to_cl(data);
+ for(Lit l: lits) {
+ if (solution[l.var()] == l_Undef) {
+ continue;
+ }
+ if ((solution[l.var()] ^ l.sign()) == l_True) {
+ return true;
+ }
+ }
+ return false;
+}
+
+uint32_t count_num_undef_in_solution(const Solver* s)
+{
+ uint32_t num = 0;
+ for(size_t i = 0; i < s->nVarsOuter(); i++) {
+ if (s->model_value(i) == l_Undef) {
+ num++;
+ }
+ }
+ return num;
+}
+
+struct cnfdata {
+ int64_t num_cls_per_header = -1;
+ int64_t num_vars_per_header = -1;
+ vector<vector<Lit>> cls;
+ uint64_t num_vars = 0;
+};
+
+template<typename Out>
+void split(const std::string &s, char delim, Out result) {
+ std::stringstream ss(s);
+ std::string item;
+ while (std::getline(ss, item, delim)) {
+ *(result++) = item;
+ }
+}
+
+std::vector<std::string> split(const std::string &s, char delim) {
+ std::vector<std::string> elems;
+ split(s, delim, std::back_inserter(elems));
+ return elems;
+}
+
+cnfdata cnf_file_read(std::string fname)
+{
+ cnfdata cnfdat;
+
+ std::ifstream file(fname);
+ std::string str;
+ std::string file_contents;
+ vector<Lit> cl;
+ while (std::getline(file, str))
+ {
+ if (str.find("cnf") != string::npos) {
+ continue;
+ }
+
+ if (str.find("c ") == 0) {
+ continue;
+ }
+
+ cl.clear();
+ vector<string> s = split(rtrim(ltrim(str)), ' ');
+ for(string& l: s) {
+ if (l.length() == 0)
+ continue;
+
+ int x = std::stoi(l);
+ if (x == 0) {
+ break;
+ }
+ uint64_t var = std::abs(x)-1;
+ cnfdat.num_vars = std::max(cnfdat.num_vars, var+1);
+ bool sign = x < 0;
+ cl.push_back(Lit(var, sign));
+ }
+ cnfdat.cls.push_back(cl);
+ }
+ return cnfdat;
+}
+
+bool cl_eq(const vector<Lit>& lits1, const vector<Lit>& lits2)
+{
+ if (lits1.size() != lits2.size())
+ return false;
+
+
+
+ vector<Lit> cl1_s = lits1;
+ std::sort(cl1_s.begin(), cl1_s.end());
+
+ vector<Lit> cl2_s = lits2;
+ std::sort(cl2_s.begin(), cl2_s.end());
+ for(size_t i = 0; i < cl1_s.size(); i++) {
+ if (cl1_s[i] != cl2_s[i])
+ return false;
+ }
+ return true;
+}
+
+bool cl_exists(const vector<vector<Lit> >& cls, const vector<Lit>& cl) {
+ for(const vector<Lit>& cli: cls) {
+ if (cl_eq(cli, cl)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// string print(const vector<Lit>& dat) {
+// std::stringstream m;
+// for(size_t i = 0; i < dat.size();) {
+// m << dat[i];
+// i++;
+// if (i < dat.size()) {
+// m << ", ";
+// }
+// }
+// return m.str();
+// }
+
+#endif //TEST_HELPER__H
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/undefine_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/undefine_test.cpp
new file mode 100644
index 000000000..0cae67480
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/undefine_test.cpp
@@ -0,0 +1,208 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "src/solver.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct undef : public ::testing::Test {
+ undef()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCache = false;
+ s = new Solver(&conf, &must_inter);
+ s->conf.greedy_undef = true;
+ s->conf.polarity_mode = CMSat::PolarityMode::polarmode_neg;
+ }
+ ~undef()
+ {
+ delete s;
+ }
+ Solver* s = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(undef, replace)
+{
+ s->new_vars(2);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, -2"));
+
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ uint32_t num_undef = count_num_undef_in_solution(s);
+ EXPECT_EQ(num_undef, 0u);
+}
+
+TEST_F(undef, simple_1)
+{
+ s->new_vars(2);
+ s->add_clause_outer(str_to_cl("1, 2"));
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ uint32_t num_undef = count_num_undef_in_solution(s);
+ EXPECT_EQ(num_undef, 1u);
+}
+
+TEST_F(undef, simple_2)
+{
+ s->new_vars(3);
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ uint32_t num_undef = count_num_undef_in_solution(s);
+ EXPECT_EQ(num_undef, 2u);
+}
+
+TEST_F(undef, simple_2_mult)
+{
+ s->new_vars(3);
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ for(size_t i = 0; i < 20; i++) {
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+ uint32_t num_undef = count_num_undef_in_solution(s);
+ EXPECT_EQ(num_undef, 2u);
+ }
+}
+
+TEST_F(undef, simple_2_mult_novarelim)
+{
+ s->conf.verbosity = 0;
+ s->new_vars(3);
+ s->add_clause_outer(str_to_cl("-1, -2, -3"));
+ s->add_clause_outer(str_to_cl("-1, -3"));
+ s->conf.perform_occur_based_simp = 0;
+ for(size_t i = 0; i < 20; i++) {
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+ uint32_t num_undef = count_num_undef_in_solution(s);
+ EXPECT_EQ(num_undef, 2u);
+ }
+}
+
+TEST_F(undef, simple_2_ind_no)
+{
+ s->conf.verbosity = 0;
+ s->new_vars(3);
+ s->add_clause_outer(str_to_cl("-1, -2, -3"));
+ s->add_clause_outer(str_to_cl("-1, -3"));
+ s->conf.independent_vars = new std::vector<uint32_t>();
+ s->conf.perform_occur_based_simp = 0;
+
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ uint32_t num_undef = count_num_undef_in_solution(s);
+ EXPECT_EQ(num_undef, 0u);
+ delete s->conf.independent_vars;
+}
+
+TEST_F(undef, simple_2_ind_1)
+{
+ s->conf.verbosity = 0;
+ s->new_vars(3);
+ s->add_clause_outer(str_to_cl("-1, -2, -3"));
+ s->add_clause_outer(str_to_cl("-1, -3"));
+ s->conf.independent_vars = new std::vector<uint32_t>();
+ s->conf.perform_occur_based_simp = 0;
+ s->conf.independent_vars->push_back(1); //i.e. var 2
+
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ EXPECT_EQ(s->model_value(1), l_Undef);
+ delete s->conf.independent_vars;
+}
+
+TEST_F(undef, simple_2_ind_renumber)
+{
+ s->conf.verbosity = 0;
+ s->new_vars(4);
+ s->add_clause_outer(str_to_cl("-4, -2, -3"));
+ s->add_clause_outer(str_to_cl("-4, -3"));
+ s->add_clause_outer(str_to_cl("-1"));
+ s->conf.independent_vars = new std::vector<uint32_t>();
+ s->conf.perform_occur_based_simp = 0;
+ s->conf.independent_vars->push_back(1); //i.e. var 2
+
+ //since '1' has been set but renumer NOT called
+ EXPECT_EQ(s->nVars(), 4u);
+ s->clear_order_heap();
+ s->renumber_variables();
+ s->rebuildOrderHeap();
+
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ //since '1' has been set and renumber called
+ EXPECT_EQ(s->nVars(), 3u);
+
+ EXPECT_EQ(s->model_value(1), l_Undef);
+ delete s->conf.independent_vars;
+}
+
+TEST_F(undef, simple_2_ind_renumber_empty_indep)
+{
+ s->conf.verbosity = 0;
+ s->new_vars(4);
+ s->add_clause_outer(str_to_cl("-4, -2, -3"));
+ s->add_clause_outer(str_to_cl("-4, -3"));
+ s->add_clause_outer(str_to_cl("-1"));
+ s->conf.independent_vars = new std::vector<uint32_t>();
+ s->conf.perform_occur_based_simp = 0;
+
+ //since '1' has been set but renumer NOT called
+ EXPECT_EQ(s->nVars(), 4u);
+ s->clear_order_heap();
+ s->renumber_variables();
+ s->rebuildOrderHeap();
+
+ lbool ret = s->solve_with_assumptions();
+ EXPECT_EQ(ret, l_True);
+
+ //since '1' has been set and renumber called
+ EXPECT_EQ(s->nVars(), 3u);
+
+ //Since indep vars is empty, all is set
+ for(size_t i = 0; i < 4; i++) {
+ EXPECT_NE(s->model_value(i), l_Undef);
+ }
+ delete s->conf.independent_vars;
+}
+
+//TODO add test for multiple solve() calls
+//TODO add test for varelim->solve->varelim->solve etc. calls
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/vrepl_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/vrepl_test.cpp
new file mode 100644
index 000000000..e2055b51f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/vrepl_test.cpp
@@ -0,0 +1,176 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "src/solver.h"
+#include "src/varreplacer.h"
+#include "src/solverconf.h"
+using namespace CMSat;
+#include "test_helper.h"
+
+struct varreplace : public ::testing::Test {
+ varreplace()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCache = false;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(20);
+ s->testing_fill_assumptions_set();
+ repl = s->varReplacer;
+ }
+ ~varreplace()
+ {
+ delete s;
+ }
+ Solver* s = NULL;
+ VarReplacer* repl = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(varreplace, find_one_1)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, -2"));
+
+ s->add_clause_outer(str_to_cl("1, 3, 4, 5"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 1);
+ EXPECT_EQ(s->get_num_long_irred_cls(), 2);
+ check_irred_cls_eq(s, "-2, 3, 4, 5; 2, 3, 4, 5");
+}
+
+TEST_F(varreplace, find_one_2)
+{
+ s->add_clause_outer(str_to_cl("1, -3"));
+ s->add_clause_outer(str_to_cl("-1, 3"));
+
+ s->add_clause_outer(str_to_cl("1, 4, 5"));
+ s->add_clause_outer(str_to_cl("2, 3, 4, 5"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 1);
+ check_irred_cls_eq(s, "3, 4, 5; 2, 3, 4, 5");
+}
+
+TEST_F(varreplace, remove_lit)
+{
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ s->add_clause_outer(str_to_cl("1, 2, 5"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 1);
+ check_irred_cls_eq(s, "2, 5");
+}
+
+TEST_F(varreplace, remove_cl)
+{
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ s->add_clause_outer(str_to_cl("1, -2, 5"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 1);
+ check_irred_cls_eq(s, "");
+}
+
+TEST_F(varreplace, replace_twice)
+{
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 1);
+
+ s->add_clause_outer(str_to_cl("3, -2"));
+ s->add_clause_outer(str_to_cl("-3, 2"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 2);
+
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 5"));
+ check_irred_cls_eq(s, "2, 5");
+}
+
+TEST_F(varreplace, replace_thrice)
+{
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 1);
+
+ s->add_clause_outer(str_to_cl("3, -2"));
+ s->add_clause_outer(str_to_cl("-3, 2"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 2);
+
+ s->add_clause_outer(str_to_cl("4, -2"));
+ s->add_clause_outer(str_to_cl("-4, 2"));
+
+ repl->replace_if_enough_is_found();
+ EXPECT_EQ(repl->get_num_replaced_vars(), 3);
+
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+ s->add_clause_outer(str_to_cl("1, 2, 4, 5"));
+ check_irred_cls_eq(s, "2, 5");
+}
+
+TEST_F(varreplace, replace_limit_check_below)
+{
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ s->add_clause_outer(str_to_cl("3, -2"));
+ s->add_clause_outer(str_to_cl("-3, 2"));
+
+ repl->replace_if_enough_is_found(3);
+ EXPECT_EQ(repl->get_num_replaced_vars(), 0);
+}
+
+TEST_F(varreplace, replace_limit_check_above)
+{
+ s->add_clause_outer(str_to_cl("1, -2"));
+ s->add_clause_outer(str_to_cl("-1, 2"));
+
+ s->add_clause_outer(str_to_cl("3, -2"));
+ s->add_clause_outer(str_to_cl("-3, 2"));
+
+ repl->replace_if_enough_is_found(2);
+ EXPECT_EQ(repl->get_num_replaced_vars(), 2);
+}
+
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/xorfinder_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/xorfinder_test.cpp
new file mode 100644
index 000000000..5bdf75049
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/tests/xorfinder_test.cpp
@@ -0,0 +1,571 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#include "gtest/gtest.h"
+
+#include <fstream>
+
+#include "src/solver.h"
+#include "src/xorfinder.h"
+#include "src/solverconf.h"
+#include "src/occsimplifier.h"
+using namespace CMSat;
+#include "test_helper.h"
+#include "src/toplevelgaussabst.h"
+#ifdef USE_M4RI
+#include "src/toplevelgauss.h"
+#endif
+
+struct xor_finder : public ::testing::Test {
+ xor_finder()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCache = false;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ occsimp = s->occsimplifier;
+ }
+ ~xor_finder()
+ {
+ delete s;
+ }
+ Solver* s = NULL;
+ OccSimplifier* occsimp = NULL;
+ std::atomic<bool> must_inter;
+};
+
+TEST_F(xor_finder, find_none)
+{
+ s->add_clause_outer(str_to_cl("1, 2"));
+ s->add_clause_outer(str_to_cl("-1, -2"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.grab_mem();
+ finder.find_xors();
+ EXPECT_EQ(finder.xors.size(), 0U);
+}
+
+TEST_F(xor_finder, find_tri_1)
+{
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3"));
+ s->add_clause_outer(str_to_cl("1, -2, -3"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_contains(finder.xors, "1, 2, 3 = 1");
+}
+
+TEST_F(xor_finder, find_tri_2)
+{
+ s->add_clause_outer(str_to_cl("-1, 2, 3"));
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+ s->add_clause_outer(str_to_cl("1, 2, -3"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3 = 0");
+}
+
+TEST_F(xor_finder, find_tri_3)
+{
+ s->add_clause_outer(str_to_cl("-1, 2, 3"));
+ s->add_clause_outer(str_to_cl("1, -2, 3"));
+ s->add_clause_outer(str_to_cl("1, 2, -3"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3"));
+
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3"));
+ s->add_clause_outer(str_to_cl("1, -2, -3"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_contains(finder.xors, "1, 2, 3 = 0");
+ check_xors_contains(finder.xors, "1, 2, 3 = 1");
+}
+
+
+TEST_F(xor_finder, find_4_1)
+{
+ s->add_clause_outer(str_to_cl("-1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, -4"));
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, 4"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4 = 0;");
+}
+
+TEST_F(xor_finder, find_4_4)
+{
+ s->add_clause_outer(str_to_cl("-1, -2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, -2, -3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ s->add_clause_outer(str_to_cl("-1, 2, 3, -4"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, -4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4 = 1");
+}
+
+/*
+ * These tests only work if the matching is non-exact
+ * i.e. if size is not checked for equality
+ */
+TEST_F(xor_finder, find_4_2)
+{
+ s->add_clause_outer(str_to_cl("-1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, 4"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4 = 0;");
+}
+
+TEST_F(xor_finder, find_4_3)
+{
+ s->add_clause_outer(str_to_cl("-1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -3, 4"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4 = 0;");
+}
+
+/*
+//Finder pruning is too strong and we don't find this one
+TEST_F(xor_finder, find_5_2)
+{
+ s->add_clause_outer(str_to_cl("-1, -2, 3, 4, 5"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3"));
+ s->add_clause_outer(str_to_cl("-1, 2, 3"));
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, 4, 5"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, -4, 5"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, 4, -5"));
+
+ s->add_clause_outer(str_to_cl("1, 2, -3, -4, 5"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, 4, -5"));
+
+ s->add_clause_outer(str_to_cl("1, 2, 3, -4, -5"));
+
+ //
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, -4, -5"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, -4, -5"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3, -4, -5"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, 4, -5"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, -4, 5"));
+
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4, 5"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4, 5 = 1;");
+}*/
+
+TEST_F(xor_finder, find_4_5)
+{
+ s->add_clause_outer(str_to_cl("-1, -2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, -2, -3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4"));
+ s->add_clause_outer(str_to_cl("-1, 2, 3, -4"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, -4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+
+ s->add_clause_outer(str_to_cl("-1, 2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, 4"));
+ s->add_clause_outer(str_to_cl("1, 2, 3"));
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3, -4"));
+ s->add_clause_outer(str_to_cl("-1, -3, 4"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4 = 1; 1, 2, 3, 4 = 0");
+}
+/***
+ * Specialty, non-matching XOR test end
+*/
+
+TEST_F(xor_finder, find_5_1)
+{
+ s->add_clause_outer(str_to_cl("-1, -2, 3, 4, 5"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, 4, 5"));
+ s->add_clause_outer(str_to_cl("-1, 2, 3, -4, 5"));
+ s->add_clause_outer(str_to_cl("-1, 2, 3, 4, -5"));
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, 4, 5"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, -4, 5"));
+ s->add_clause_outer(str_to_cl("1, -2, 3, 4, -5"));
+
+ s->add_clause_outer(str_to_cl("1, 2, -3, -4, 5"));
+ s->add_clause_outer(str_to_cl("1, 2, -3, 4, -5"));
+
+ s->add_clause_outer(str_to_cl("1, 2, 3, -4, -5"));
+
+ //
+
+ s->add_clause_outer(str_to_cl("1, -2, -3, -4, -5"));
+ s->add_clause_outer(str_to_cl("-1, 2, -3, -4, -5"));
+ s->add_clause_outer(str_to_cl("-1, -2, 3, -4, -5"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, 4, -5"));
+ s->add_clause_outer(str_to_cl("-1, -2, -3, -4, 5"));
+
+ s->add_clause_outer(str_to_cl("1, 2, 3, 4, 5"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 2, 3, 4, 5 = 1;");
+}
+
+
+//we don't find 6-long, too expensive
+/*TEST_F(xor_finder, find_6_0)
+{
+ s->add_clause_outer(str_to_cl("1, -7, -3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-1, 7, -3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-1, -7, 3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("1, 7, 3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-1, -7, -3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("1, 7, -3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("1, -7, 3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-1, 7, 3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-1, -7, -3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("1, 7, -3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("1, -7, 3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-1, 7, 3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("1, -7, -3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-1, 7, -3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-1, -7, 3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("1, 7, 3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-1, -7, -3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("1, 7, -3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("1, -7, 3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-1, 7, 3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("1, -7, -3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-1, 7, -3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-1, -7, 3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("1, 7, 3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("1, -7, -3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-1, 7, -3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-1, -7, 3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("1, 7, 3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-1, -7, -3, 4, 5, 9"));
+ s->add_clause_outer(str_to_cl("1, 7, -3, 4, 5, 9"));
+ s->add_clause_outer(str_to_cl("1, -7, 3, 4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-1, 7, 3, 4, 5, 9"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "1, 7, 3, 4, 5, 9 = 0;");
+}
+
+TEST_F(xor_finder, find_6_1)
+{
+ s->add_clause_outer(str_to_cl("-6, -7, -3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("6, 7, -3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("6, -7, 3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-6, 7, 3, -4, -5, -9"));
+ s->add_clause_outer(str_to_cl("6, -7, -3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-6, 7, -3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("-6, -7, 3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("6, 7, 3, 4, -5, -9"));
+ s->add_clause_outer(str_to_cl("6, -7, -3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-6, 7, -3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-6, -7, 3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("6, 7, 3, -4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-6, -7, -3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("6, 7, -3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("6, -7, 3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("-6, 7, 3, 4, 5, -9"));
+ s->add_clause_outer(str_to_cl("6, -7, -3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-6, 7, -3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-6, -7, 3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("6, 7, 3, -4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-6, -7, -3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("6, 7, -3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("6, -7, 3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-6, 7, 3, 4, -5, 9"));
+ s->add_clause_outer(str_to_cl("-6, -7, -3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("6, 7, -3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("6, -7, 3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-6, 7, 3, -4, 5, 9"));
+ s->add_clause_outer(str_to_cl("6, -7, -3, 4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-6, 7, -3, 4, 5, 9"));
+ s->add_clause_outer(str_to_cl("-6, -7, 3, 4, 5, 9"));
+ s->add_clause_outer(str_to_cl("6, 7, 3, 4, 5, 9"));
+
+ occsimp->setup();
+ XorFinder finder(occsimp, s);
+ finder.find_xors();
+ check_xors_eq(finder.xors, "6, 7, 3, 4, 5, 9 = 1;");
+}*/
+
+struct xor_finder2 : public ::testing::Test {
+ xor_finder2()
+ {
+ must_inter.store(false, std::memory_order_relaxed);
+ SolverConf conf;
+ conf.doCache = false;
+ s = new Solver(&conf, &must_inter);
+ s->new_vars(30);
+ occsimp = s->occsimplifier;
+ finder = new XorFinder(occsimp, s);
+ finder->grab_mem();
+ #ifdef USE_M4RI
+ topLevelGauss = new TopLevelGauss(s);
+ #endif
+ }
+ ~xor_finder2()
+ {
+ delete s;
+ delete finder;
+ #ifdef USE_M4RI
+ delete topLevelGauss;
+ #endif
+ }
+ Solver* s = NULL;
+ OccSimplifier* occsimp = NULL;
+ std::atomic<bool> must_inter;
+ XorFinder* finder;
+ #ifdef USE_M4RI
+ TopLevelGaussAbst *topLevelGauss;
+ #endif
+};
+
+
+TEST_F(xor_finder2, clean_v1)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0;");
+ finder->xors = finder->remove_xors_without_connecting_vars(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 0u);
+}
+
+TEST_F(xor_finder2, clean_v2)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 4, 5, 6 = 0");
+ finder->xors = finder->remove_xors_without_connecting_vars(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 2u);
+}
+
+TEST_F(xor_finder2, clean_v3)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 4, 5, 6 = 0; 10, 11, 12, 13 = 1");
+ finder->xors = finder->remove_xors_without_connecting_vars(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 2u);
+}
+
+TEST_F(xor_finder2, clean_v4)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 4, 5, 6 = 0; 10, 11, 12, 13 = 1; 10, 15, 16, 17 = 0");
+ finder->xors = finder->remove_xors_without_connecting_vars(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 4u);
+}
+
+TEST_F(xor_finder2, xor_1)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 1; 1, 4, 5, 6 = 0;");
+ finder->xor_together_xors(finder->xors);
+ check_xors_eq(finder->xors, "2, 3, 4, 5, 6 = 1;");
+}
+
+TEST_F(xor_finder2, xor_2)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 4, 5, 6 = 0;");
+ finder->xor_together_xors(finder->xors);
+ check_xors_eq(finder->xors, "2, 3, 4, 5, 6 = 0;");
+}
+
+TEST_F(xor_finder2, xor_3)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 10, 4, 5, 6 = 0;");
+ finder->xor_together_xors(finder->xors);
+ check_xors_eq(finder->xors, "1, 2, 3 = 0; 10, 4, 5, 6 = 0;");
+}
+
+TEST_F(xor_finder2, xor_4)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 4, 5, 6 = 0;"
+ "1, 9, 10, 11 = 0;");
+ finder->xor_together_xors(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 3u);
+}
+
+TEST_F(xor_finder2, xor_5)
+{
+ finder->xors = str_to_xors("2, 3, 1 = 0; 1, 5, 6, 4 = 0;" "4, 10, 11 = 0;");
+ finder->xor_together_xors(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 1u);
+ check_xors_contains(finder->xors, "2, 3, 5, 6, 10, 11 = 0");
+}
+
+TEST_F(xor_finder2, xor_6)
+{
+ finder->xors = str_to_xors("1, 2 = 0; 1, 4= 0;"
+ "6, 7 = 0; 6, 10 = 1");
+ finder->xor_together_xors(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 2u);
+ check_xors_eq(finder->xors, "2, 4 = 0; 7, 10 = 1");
+}
+
+TEST_F(xor_finder2, dont_xor_together_when_clash_more_than_one)
+{
+ finder->xors = str_to_xors("1, 2, 3, 4 = 0; 1, 2, 5, 6= 0;");
+ finder->xor_together_xors(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 2u);
+ check_xors_eq(finder->xors, "1, 2, 3, 4 = 0; 1, 2, 5, 6= 0;");
+}
+
+TEST_F(xor_finder2, dont_remove_xors)
+{
+ finder->xors = str_to_xors("1, 2 = 0; 1, 2= 0;");
+ finder->xor_together_xors(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 1U);
+}
+
+TEST_F(xor_finder2, dont_remove_xors2)
+{
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 2, 3= 0;");
+ finder->xor_together_xors(finder->xors);
+ EXPECT_EQ(finder->xors.size(), 1U);
+}
+
+TEST_F(xor_finder2, xor_pure_unit_unsat)
+{
+ finder->xors = str_to_xors("1 = 0; 1 = 1;");
+ finder->xor_together_xors(finder->xors);
+ bool ret = finder->add_new_truths_from_xors(finder->xors);
+ EXPECT_FALSE(ret);
+}
+
+TEST_F(xor_finder2, xor_8)
+{
+ finder->xors = str_to_xors("1, 2 = 0; 1 = 1; 2 = 0");
+ bool ret = finder->xor_together_xors(finder->xors);
+ EXPECT_TRUE(ret);
+ EXPECT_EQ(finder->xors.size(), 1U);
+
+ ret = finder->add_new_truths_from_xors(finder->xors);
+ EXPECT_FALSE(ret);
+}
+
+TEST_F(xor_finder2, xor_unit)
+{
+ finder->xors = str_to_xors("1 = 0; 1, 2, 3 = 1; 3 = 1");
+ finder->xor_together_xors(finder->xors);
+ bool ret = finder->add_new_truths_from_xors(finder->xors);
+ EXPECT_TRUE(ret);
+ EXPECT_EQ(finder->xors.size(), 0u);
+}
+
+#ifdef USE_M4RI
+TEST_F(xor_finder2, xor_unit2_2)
+{
+ s->add_clause_outer(str_to_cl("-4"));
+ finder->xors = str_to_xors("1, 2, 3 = 0; 1, 2, 3, 4 = 1;");
+ vector<Lit> out_changed_occur;
+ bool ret = topLevelGauss->toplevelgauss(finder->xors, &out_changed_occur);
+ EXPECT_FALSE(ret);
+}
+#endif
+
+TEST_F(xor_finder2, xor_binx)
+{
+ finder->xors = str_to_xors("1, 2, 5 = 0; 1, 3 = 0; 2 = 0");
+ bool ret = finder->xor_together_xors(finder->xors);
+ if (ret) {
+ ret &= finder->add_new_truths_from_xors(finder->xors);
+ }
+ EXPECT_TRUE(ret);
+ EXPECT_EQ(finder->xors.size(), 0u);
+ check_red_cls_eq(s, "5, -3; -5, 3");
+}
+
+TEST_F(xor_finder2, xor_binx_inv_not_found)
+{
+ finder->xors = str_to_xors("3, 1 = 1; 1, 3 = 0;");
+ bool ret = finder->xor_together_xors(finder->xors);
+ if (ret) {
+ ret &= finder->add_new_truths_from_xors(finder->xors);
+ }
+ EXPECT_TRUE(ret);
+}
+
+TEST_F(xor_finder2, xor_recur_bug)
+{
+ finder->xors = str_to_xors("3, 7, 9 = 0; 1, 3, 4, 5 = 1;");
+ bool ret = finder->xor_together_xors(finder->xors);
+ EXPECT_TRUE(ret);
+ check_xors_eq(finder->xors, "7, 9 , 1, 4, 5 = 1;");
+}
+
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/utils/config/crypt4-params.pcs b/cryptominisat5/cryptominisat-5.6.3/utils/config/crypt4-params.pcs
new file mode 100644
index 000000000..ca18bbf48
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/utils/config/crypt4-params.pcs
@@ -0,0 +1,65 @@
+#Config parametrization file for CryptoMiniSat
+#All rights reserved.
+
+#restarts
+gluehist [80,300][100]li
+blkrest {0,1}[1]
+blkrestlen [2000,10000][5000]li
+blkrestlen | blkrest in {1}
+blkrestmultip [1.1,2][1.4]
+blkrestmultip | blkrest in {1}
+burst {100,300,1000,2000}[300]
+clbtwsimp [1,5][2]li
+
+# Red clause removal
+ltclean [0.3,0.7][0.5]
+cleanconflmult {0,1,2}[1]
+lockuip [50,1000][500]i
+locktop [0,2000][0]i
+perfmult [0.00001,0.8][0.00001]l
+startclean [100,50000][10000]li
+incclean [1.02,1.8][1.1]
+
+# Variable branching
+freq[0,0.05][0]
+dompickf [100,10000][400]li
+morebump {0,1}[1]
+#topnrndpick [5,1000][20]il
+#topnrndpickfreq [0.0000001,1][0.000001]l
+
+# Variable polarity
+flippolf {0,400}[0]
+calcpolar1st {0,1} [1]
+calcpolarall {0,1} [1]
+
+# Conflict
+# recur {0,1}[1] # not a good idea to set it to 0
+moreminimcache [20,600][200]il
+moreminimbin [20,5000][100]il
+
+# Probing
+probemaxm [800,4000][1600]i
+
+# Stamping
+cachesize [1024,4096][2048]il
+
+calcreach {0,1}[1]
+cachecutoff [600,5000][2000]il
+
+# Simplification
+presimp {0,1}[0]
+elimcoststrategy {0,1}[0]
+bva2lit {0,1}[1]
+eratio [0.05,1][0.12]l
+occredmax [100,400][200]il
+
+# Equivalent literal
+sccperc [0.001,0.5][0.02]l
+
+# Misc
+viviflongmaxm [5,80][20]il
+viviffastmaxm [100,1000][400]il
+
+# turn off verbosity
+printsol {0}[0]
+#verb {0}[0]
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/README.markdown b/cryptominisat5/cryptominisat-5.6.3/web/README.markdown
new file mode 100644
index 000000000..d5c7fc8d8
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/README.markdown
@@ -0,0 +1,57 @@
+Install MySQL, PHP and Apache2
+------
+
+```
+sudo apt-get install php5 php5-mysqlnd apache2 libapache2-mod-php5 myslq-server
+sudo a2enmod php5
+./cmsat_mysql_setup.sh [mysql root passowrd if not empty]
+```
+
+Do NOT expose Apache to the outside. Do this by changing in `/etc/apache2/ports.conf` the line`Listen 80` to `Listen 127.0.0.1:80`. Similarly, change `Listen 443` to `Listen 127.0.0.1:443`
+
+Set up Apache
+------
+My `/etc/apache2/sites-enabled/000-default` is:
+
+```
+<VirtualHost *:80>
+ ServerAdmin webmaster@localhost
+
+ DocumentRoot /home/soos/cryptominisat/web
+ <Directory /home/soos/cryptominisat/web/>
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride None
+ </Directory>
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+
+ LogLevel warn
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+</VirtualHost>
+```
+
+After suitably fixing yours up (or just using the above), issue `sudo service apache2 restart`.
+
+Build CryptoMiniSat
+------
+
+```
+rm -rf build
+mkdir build && cd build
+cmake -DSTATS=ON ..
+make
+sudo make install
+sudo ldconfig
+```
+
+Run CryptoMiniSat
+------
+
+```
+cryptominisat5 --sql 1 --sqlfull 1 file.cnf
+```
+
+Explore
+-------
+
+Navigate to `localhost` and enjoy!
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/apache-config.conf b/cryptominisat5/cryptominisat-5.6.3/web/apache-config.conf
new file mode 100644
index 000000000..f89e60859
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/apache-config.conf
@@ -0,0 +1,15 @@
+<VirtualHost *:80>
+ ServerAdmin me@mydomain.com
+ DocumentRoot /var/www/site
+
+ <Directory /var/www/site/>
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride All
+ Order deny,allow
+ Allow from all
+ </Directory>
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+</VirtualHost>
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/connect.php b/cryptominisat5/cryptominisat-5.6.3/web/connect.php
new file mode 100644
index 000000000..4ea989cff
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/connect.php
@@ -0,0 +1,21 @@
+<?php
+ob_start('ob_gzhandler');
+error_reporting(E_ALL | E_STRICT);
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+ini_set('display_errors',1);
+
+
+class MyDB extends SQLite3 {
+ function __construct() {
+ $this->open('test.db');
+ }
+}
+
+$sql = new MyDB();
+if(!$sql) {
+ echo $sql->lastErrorMsg();
+} else {
+ #echo "Opened database successfully\n";
+ #print_r($sql);
+}
+?>
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/drawgraphs.js b/cryptominisat5/cryptominisat-5.6.3/web/drawgraphs.js
new file mode 100644
index 000000000..b83489ccd
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/drawgraphs.js
@@ -0,0 +1,162 @@
+// Stores the original X sizes of the graphs
+// used when zooming out fully
+
+//for graphs
+var origSizes = new Array();
+var blockRedraw = false;
+var graphs = new Array();
+
+//For distibutions
+var dists = [];
+
+function setRollPeriod(num)
+{
+ for (var j = 0; j < graph_data.length; j++) {
+ graphs[j].updateOptions( {
+ rollPeriod: num
+ } );
+ }
+}
+
+//Draws all graphs using dygraphs
+function drawAllGraphs()
+{
+ graphs = new Array();
+ for (var i = 0; i < graph_data.length; i++) {
+ console.log("printing graph "+i);
+ graphs.push(drawOneGraph(i));
+ }
+}
+
+//Draw one of the graphs
+function drawOneGraph(i)
+{
+ console.log("putting to:");
+ console.log(document.getElementById(graph_data[i].dataDivID));
+ graph = new Dygraph(
+ document.getElementById(graph_data[i].dataDivID),
+ graph_data[i].data
+ , {
+ stackedGraph: graph_data[i].stacked,
+ includeZero: graph_data[i].stacked,
+ labels: graph_data[i].labels,
+ //title: graph_data[i].title,
+ underlayCallback: function(canvas, area, g) {
+ canvas.fillStyle = "rgba(105, 105, 185, 185)";
+ //Draw simplification points
+ for(var k = 0; k < simplificationPoints.length-1; k++) {
+ var bottom_left = g.toDomCoords(simplificationPoints[k], -20);
+ var left = bottom_left[0];
+ canvas.fillRect(left, area.y, 2, area.h);
+ }
+ },
+ axes: {
+ x: {
+ valueFormatter: function(d) {
+ return 'Conflict ' + d;
+ },
+ pixelsPerLabel: 100,
+ includeZero: true,
+ drawGrid: false,
+ drawAxis: false,
+ },
+ y: {
+ drawGrid: false,
+ drawAxis: false,
+ }
+ },
+ //stepPlot: true,
+ //strokePattern: [0.1, 0, 0, 0.5],
+ strokeWidth: 0.5,
+ highlightCircleSize: 3,
+ rollPeriod: (graph_data[i].tablename === "restart") ? 0: 0,
+ legend: 'always',
+ xlabel: false,
+ labelsDiv: document.getElementById(graph_data[i].labelDivID),
+ labelsSeparateLines: true,
+ labelsKMB: true,
+ drawPoints: true,
+ pointSize: 1,
+ strokeStyle: "black",
+ errorBars: graph_data[i].minmax,
+ customBars: graph_data[i].minmax,
+ colors: (graph_data[i].simple_line ? ['#000000'] : ['#ef1414', '#efab14', '#1f3da2', '#1fad14', '#88109d', '#d0e913']),
+ fillAlpha: (graph_data[i].minmax ? 0.1 : 0.5),
+ dateWindow: [0, maxConflRestart],
+ drawCallback: function(me, initial) {
+
+ //Fill original sizes, so if we zoom out, we know where to zoom out
+ if (initial)
+ origSizes = me.xAxisRange();
+
+ //Initial draw, ignore
+ if (blockRedraw || initial)
+ return;
+
+ blockRedraw = true;
+ var xrange = me.xAxisRange();
+
+ //Zoom every one the same way
+ for (var j = 0; j < graph_data.length; j++) {
+ //Don't go into loop
+ if (graphs[j] == me)
+ continue;
+
+ //If this is a full reset, then zoom out maximally
+ graphs[j].updateOptions( {
+ dateWindow: xrange
+ } );
+ //console.log(xrange);
+ }
+
+ blockRedraw = false;
+ }
+ }
+ )
+
+ return graph;
+}
+
+//Creates HTML for dygraphs
+function createHTMLforGraphs()
+{
+ var datagraphs = document.getElementById("datagraphs");
+ for (var i = 0; i < graph_data.length; i++) {
+ datagraphs.innerHTML += '\
+ <div id="' + graph_data[i].blockDivID + '">\
+ <table id="plot-table-a">\
+ <tr>\
+ <td><div id="' + graph_data[i].dataDivID + '" class="myPlotData"></div></td>\
+ <td id="labelW">\
+ <table id="plot-table-a">\
+ <tr><td>'+ graph_data[i].title +'</td></tr>\
+ <tr><td><div id="' + graph_data[i].labelDivID + '" class="draghandle"></div></td></tr>\
+ </table>\
+ </td>\
+ </tr>\
+ </table>\
+ </div>';
+ }
+}
+
+function clear_everything()
+{
+ origSizes = new Array();
+ blockRedraw = false;
+ dists = [];
+
+ datagraphs = document.getElementById("datagraphs");
+ datagraphs.innerHTML = "";
+}
+
+function print_all_graphs()
+{
+ clear_everything();
+
+ //Clear & create HTML
+ createHTMLforGraphs();
+
+ //Draws the graphs
+ drawAllGraphs();
+}
+
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/file_creator.py b/cryptominisat5/cryptominisat-5.6.3/web/file_creator.py
new file mode 100755
index 000000000..160dd407b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/file_creator.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import MySQLdb as mdb
+import ntpath
+import subprocess
+import time
+
+con = mdb.connect('localhost', 'cmsat_presenter', '', 'cmsat');
+version = "dc65769cfcba9c2bb52ee81dbea39830ad28bb1b"
+
+with con:
+ cur = con.cursor(mdb.cursors.DictCursor)
+ query = """
+ SELECT
+ startup.runID as runid
+ , startup.startTime as start
+ , finishup.endTime as end
+ , UNIX_TIMESTAMP(finishup.endTime)-UNIX_TIMESTAMP(startup.startTime) as diff
+ , tags.tag as fname
+
+ FROM startup, finishup, solverRun, tags
+
+ WHERE startup.runID = solverRun.runID
+ and startup.runID = tags.runID
+ and startup.runID = finishup.runID
+ and tagname = "filename"
+ and solverRun.version = '%s'
+
+ order by diff asc
+ """ % version
+
+ query_all = """
+ SELECT
+ startup.runID as runid
+ , startup.startTime as start
+ , tags.tag as fname
+
+ FROM startup, solverRun, tags
+
+ WHERE startup.runID = solverRun.runID
+ and startup.runID = tags.runID
+ and tagname = "filename"
+ and solverRun.version = '%s'
+ """ % version
+
+
+ cur.execute(query_all)
+ start = time.time()
+ for i in range(cur.rowcount):
+
+ row = cur.fetchone()
+ #print row['diff'], row['runid'], ntpath.basename(row['fname'])
+ toexec="""
+ export QUERY_STRING="id=%d" ;
+ php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "get_data.php";'
+ """ % (row['runid'])
+ into = open("dat/" + ntpath.basename(row['fname']) + ".dat", "w")
+ subprocess.call(toexec, shell=True, stdout=into)
+ into.close()
+
+ print "%d/%d done %2.2f perc, %2.2f s" % (i+1, cur.rowcount, float(i+1.0)/float(cur.rowcount)*100.0, time.time()-start)
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/get_data.php b/cryptominisat5/cryptominisat-5.6.3/web/get_data.php
new file mode 100644
index 000000000..d6c60a9cf
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/get_data.php
@@ -0,0 +1,474 @@
+<?php
+include "connect.php";
+$maxConfl = 50000000000;
+//display_startup_errors(1);
+//error_reporting(E_STRICT);
+
+$runID = $_GET["id"];
+# $runID = 5796126;
+
+class MainDataGetter
+{
+ protected $numberingScheme;
+ protected $data;
+ protected $nrows;
+ protected $colnum;
+ protected $runID;
+ protected $max_confl;
+ protected $columndivs;
+ protected $data_tmp;
+ protected $tablename;
+ protected $sql;
+ protected $everyn;
+
+ public function __construct($runID, $maxConfl)
+ {
+ global $sql;
+ $this->runID = $runID;
+ $this->numberingScheme = 0;
+ $this->sql = $sql;
+ $this->max_confl = $this->sql_get_max_restart($maxConfl);
+ $this->columndivs = array();
+ $this->data_tmp = array();
+ $this->everyn = 200;
+ }
+
+ private function sql_get_max_restart($maxConfl)
+ {
+
+ $query="
+ SELECT max(conflicts) as mymax FROM `restart`
+ where conflicts < :conflicts
+ and runID = :runID";
+
+ $stmt = $this->sql->prepare($query);
+ if (!$stmt) {
+ die("Cannot prepare statement $query");
+ }
+ $stmt->bindValue(':conflicts', $maxConfl);
+ $stmt->bindValue(':runID', $this->runID);
+ $result = $stmt->execute();
+ $dat = $result->fetchArray();
+ $max = $dat["mymax"];
+ $stmt->close();
+ return $max;
+ }
+
+ public function get_max_confl()
+ {
+ return $this->max_confl;
+ }
+
+ protected function print_one_graph(
+ $title
+ , $datanames
+ , $nicedatanames
+ , $minmax = False
+ ) {
+ $json_data = array();
+
+ //Start with an empty one
+ $json_subarray = array();
+ array_push($json_subarray, 0);
+ $i = 0;
+ while($i < sizeof($datanames)) {
+ array_push($json_subarray, NULL);
+ $i++;
+ }
+ array_push($json_data, $json_subarray);
+
+ //Now go through it all
+ $i=0;
+ $last_confl_for_everyn = 0.0;
+ $time_start = microtime();
+ while ($i < $this->nrows) {
+ $row = $this->data[$i];
+ $confl = (int)$row["conflicts"];
+ if ($confl -$last_confl_for_everyn < $this->everyn && $i < $this->nrows-1) {
+ $i++;
+ continue;
+ }
+ $last_confl_for_everyn = $confl;
+ $json_subarray = array();
+ array_push($json_subarray, $confl);
+
+ //Calc local sum
+ $local_sum = 0;
+ foreach ($datanames as $dataname) {
+ $local_sum += $row[$dataname];
+ }
+
+ //Print for each
+ foreach ($datanames as $dataname) {
+ $tmp = $row[$dataname];
+ if (sizeof($datanames) > 1) {
+ if ($local_sum != 0) {
+ $tmp /= $local_sum;
+ $tmp *= 100.0;
+ }
+ }
+
+ if ($minmax) {
+ $tmp = array($row[$dataname."Min"], $tmp, $row[$dataname."Max"]);
+ }
+ array_push($json_subarray, $tmp);
+ }
+ array_push($json_data, $json_subarray);
+ $i++;
+ }
+ $time = microtime() - $time_start;
+ //echo "Took $time seconds\n";
+
+ //Calculate labels
+ $json_labels_tmp = array();
+ array_push($json_labels_tmp, "Conflicts");
+ foreach ($nicedatanames as $dataname) {
+ array_push($json_labels_tmp, $dataname);
+ }
+
+ //Calculate blockDivID
+ $blockDivID = "graphBlock".$this->numberingScheme;
+ $fullname = "toplot_".$this->numberingScheme;
+
+ //put into $this->data_tmp
+ $json_data_tmp = array();
+ $json_data_tmp['data'] = $json_data;
+ $json_data_tmp['labels'] = $json_labels_tmp;
+ $json_data_tmp['stacked'] = (int)(sizeof($datanames) > 1);
+ $json_data_tmp['blockDivID'] = $blockDivID;
+ $json_data_tmp['dataDivID'] = $fullname."_datadiv";
+ $json_data_tmp['labelDivID'] = $fullname."_labeldiv";
+ $json_data_tmp['max_confl'] = $this->max_confl;
+ $json_data_tmp['title'] = $title;
+ $json_data_tmp['minmax'] = $minmax;
+ $json_data_tmp['tablename'] = $this->tablename;
+ $json_data_tmp['simple_line'] = count($datanames) == 1;
+ array_push($this->data_tmp, $json_data_tmp);
+
+ //put into $this->columndivs
+ $json_columndivs_tmp = array();
+ $json_columndivs_tmp['blockDivID'] = $blockDivID;
+ array_push($this->columndivs, $json_columndivs_tmp);
+
+ $this->numberingScheme++;
+ }
+
+ function runQuery($table)
+ {
+ $this->tablename = $table;
+
+ $query="
+ SELECT *
+ FROM `$table`
+ where `runID` = :runID
+ and conflicts <= :maxconfl
+ order by `conflicts`";
+
+ $stmt = $this->sql->prepare($query);
+ if (!$stmt) {
+ die("Cannot prepare statement $query");
+ }
+ $stmt->bindValue(":runID", $this->runID);
+ $stmt->bindValue(":maxconfl", $this->max_confl);
+ $result = $stmt->execute();
+
+ $this->data = array();
+ $this->nrows = 0;
+ while($row = $result->fetchArray(SQLITE3_ASSOC) ) {
+ array_push($this->data, $row);
+ $this->nrows+=1;
+ }
+ }
+
+ public function fill_data_tmp()
+ {
+ $this->runQuery("restart");
+
+ $this->print_one_graph(
+ "Time"
+ , array("runtime")
+ , array("")
+ , False
+ );
+
+ $this->print_one_graph(
+ "Distribution of clause types %"
+ , array(
+ "numIrredBins"
+ , "numRedBins"
+ , "numIrredLongs"
+ , "numRedLongs"
+ )
+ ,array(
+ "irred bin"
+ , "red bin"
+ , "irred long"
+ , "ired long"
+ )
+ );
+
+ $this->print_one_graph(
+ "Avg. branch depth"
+ , array("branchDepth")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "Avg. branch depth delta"
+ , array("branchDepthDelta")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "Avg. trail depth"
+ , array("trailDepth")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "Avg. trail depth delt"
+ , array("trailDepthDelta")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "Avg. glue of newly learnt clauses"
+ , array("glue")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "Avg. size of newly learnt clauses"
+ , array("size")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "Avg. no. of resolutions carried out for 1st UIP"
+ , array("resolutions")
+ , array("")
+ , False //set TRUE for standard deviation
+ );
+
+ $this->print_one_graph(
+ "No. of variables replaced"
+ , array("replaced")
+ , array("")
+ );
+
+ $this->print_one_graph(
+ "No. of variables\' values set"
+ , array("set")
+ , array("")
+ );
+
+ $this->print_one_graph(
+ "Propagated polarity %"
+ , array(
+ "varSetPos"
+ , "varSetNeg"
+ )
+ , array(
+ "positive"
+ , "negative")
+ );
+
+ $this->print_one_graph(
+ "Newly learnt clause type %"
+ , array(
+ "learntUnits"
+ , "learntBins"
+ , "learntLongs"
+ )
+ ,array(
+ "unit"
+ , "binary"
+ , "long")
+ );
+
+ $this->print_one_graph(
+ "Propagation by %"
+ , array(
+ "propBinIrred", "propBinRed"
+ , "propLongIrred", "propLongRed"
+ )
+ ,array("bin irred", "bin red"
+ , "long irred", "long red"
+ )
+ );
+
+ $this->print_one_graph(
+ "Conflict caused by clause type %"
+ , array(
+ "conflBinIrred"
+ , "conflBinRed"
+ , "conflLongIrred"
+ , "conflLongRed"
+ )
+ ,array(
+ "bin irred"
+ , "bin red"
+ , "long irred"
+ , "long red"
+ )
+ );
+
+ /*print_one_graph("branchDepthSD", array("branchDepthSD")
+ , array("branch depth std dev"));
+
+ print_one_graph("branchDepthDeltaSD", array("branchDepthDeltaSD")
+ , array("branch depth delta std dev"));
+
+ print_one_graph("trailDepthSD", array("trailDepthSD")
+ , array("trail depth std dev"));
+
+ print_one_graph("trailDepthDeltaSD", array("trailDepthDeltaSD")
+ , array("trail depth delta std dev"));
+
+ print_one_graph("glueSD", array("glueSD")
+ , array("newly learnt clause glue std dev"));
+
+ print_one_graph("sizeSD", array("sizeSD")
+ , array("newly learnt clause size std dev"));
+
+ print_one_graph("resolutionsSD", array("resolutionsSD")
+ , array("std dev no. resolutions for 1UIP"));*/
+
+ $this->runQuery("reduceDB");
+
+ return array($this->columndivs, $this->data_tmp, $this->numberingScheme);
+ }
+}
+
+
+class Simplifications
+{
+ protected $runID;
+ protected $sql;
+
+ public function __construct($runID)
+ {
+ global $sql;
+ $this->runID = $runID;
+ $this->sql = $sql;
+ }
+
+ public function fillSimplificationPoints()
+ {
+ $query="
+ SELECT max(conflicts) as confl, simplifications as simpl
+ FROM restart
+ where runID = :runID
+ group by simplifications
+ order by simplifications";
+
+ $stmt = $this->sql->prepare($query);
+ if (!$stmt) {
+ die("Cannot prepare statement $query");
+ }
+ $stmt->bindValue(":runID", $this->runID);
+ $result = $stmt->execute();
+
+ $json_tmp = array();
+ array_push($json_tmp, 0);
+ while($arr=$result->fetchArray(SQLITE3_ASSOC))
+ {
+ $confl = (int)$arr["confl"];
+ array_push($json_tmp, $confl);
+ }
+ return $json_tmp;
+ }
+}
+
+function get_metadata($sql, $runID)
+{
+ $query="
+ SELECT `startTime`
+ FROM `startup`
+ where runID = :runID";
+
+ $stmt = $sql->prepare($query);
+ if (!$stmt) {
+ print "Error:".$sql->error;
+ die("Cannot prepare statement $query");
+ }
+ $stmt->bindValue(":runID", $runID);
+ $result = $stmt->execute();
+ $dat = $result->fetchArray();
+ $starttime = $dat["startTime"];
+ $stmt->close();
+
+ $query="
+ SELECT `endTime`, `status`
+ FROM `finishup`
+ where runID = :runID";
+
+ $stmt = $sql->prepare($query);
+ if (!$stmt) {
+ print "Error:".$sql->error;
+ die("Cannot prepare statement $query");
+ }
+ $stmt->bindValue(":runID", $runID);
+ $result = $stmt->execute();
+ $dat = $result->fetchArray();
+ $endTime = $dat["endTime"];
+ $endTime = $dat["status"];
+ $stmt->close();
+
+ if ($ok) {
+ $query="
+ SELECT UNIX_TIMESTAMP(`endTime`)-UNIX_TIMESTAMP(`startTime`) as diffTime
+ FROM `finishup`, `startup`
+ where startup.runID = finishup.runID
+ and startup.runID = :runID";
+
+ $stmt = $sql->prepare($query);
+ if (!$stmt) {
+ print "Error:".$sql->error;
+ die("Cannot prepare statement $query");
+ }
+ $stmt->bindValue(":runID", $runID);
+ $result = $stmt->execute();
+ $dat = $result->fetchArray();
+ $difftime = $dat["diffTime"];
+ $stmt->close();
+ } else {
+ $difftime = 0;
+ }
+
+ $json_ret = array();
+ $json_ret["startTime"] = $starttime;
+ $json_ret["endTime"] = $endtime;
+ $json_ret["difftime"] = $difftime;
+ $json_ret["status"] = $status;
+
+ return $json_ret;
+}
+
+///Main Data
+$main_data_getter = new MainDataGetter($runID, $maxConfl);
+list($json_columndivs, $json_graph_data, $orderNum) = $main_data_getter->fill_data_tmp();
+$json_maxconflrestart = $main_data_getter->get_max_confl();
+
+///Simplification points
+$simps = new Simplifications($runID);
+$json_simplificationpoints = $simps->fillSimplificationPoints();
+
+///Metadata
+$metadata = get_metadata($sql, $runID);
+
+$final_json = array();
+$final_json["metadata"] = $metadata;
+$final_json["columnDivs"] = $json_columndivs;
+$final_json["graph_data"] = $json_graph_data;
+$final_json["simplificationPoints"] = $json_simplificationpoints;
+$final_json["maxConflRestart"] = $json_maxconflrestart;
+$jsonstring = json_encode($final_json);
+echo $jsonstring;
+?>
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/get_files.php b/cryptominisat5/cryptominisat-5.6.3/web/get_files.php
new file mode 100644
index 000000000..08a7d550a
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/get_files.php
@@ -0,0 +1,78 @@
+<?php
+include "connect.php";
+
+$unfinished = $_GET["unfinish"] == "true";
+$sat = $_GET["sat"] == "true";
+$unsat = $_GET["unsat"] == "true";
+# $gitrev = 'f3fc12d8582dcada94802882c6108d10b3581cfa';
+$unfinished = True;
+$sat = True;
+$unsat = True;
+
+$json = array();
+function get_files_for_gitrev($sat, $unsat, $unfinished)
+{
+ global $sql, $json;
+
+ $toadd = "(";
+ $num = 0;
+ if ($unfinished) {
+ $num++;
+ $toadd .= "finishup.status is NULL";
+ }
+ if ($sat) {
+ if ($num >0 ) $toadd .= " or ";
+ $num++;
+ $toadd .= "finishup.status = 'l_True'";
+ }
+ if ($unsat) {
+ if ($num >0 ) $toadd .= " or ";
+ $num++;
+ $toadd .= "finishup.status = 'l_False'";
+ }
+ $toadd .= ")";
+
+ $query = "
+ select solverRun.runID as runID, tags.tag as fname, solverRun.gitrev as mygitrev
+ from tags, solverRun left join finishup on (finishup.runID = solverRun.runID)
+ where solverRun.runID = tags.runID
+ and tags.tagname='filename'
+ and $toadd
+ order by tags.tag;";
+
+ #print $query;
+
+ $stmt = $sql->prepare($query);
+ if (!$stmt) {
+ print "Error:".$sql->lastErrorMsg();
+ die("Cannot prepare statement");
+ }
+ $result = $stmt->execute();
+
+ $numfiles = 0;
+ while($arr=$result->fetchArray(SQLITE3_ASSOC))
+ {
+ $numfiles++;
+ $data = array(
+ 'fname' => $arr["fname"],
+ 'runID' => $arr["runID"],
+ 'gitrev' => $arr["mygitrev"]
+ );
+ array_push($json, $data);
+ # var_dump($arr);
+ }
+ $stmt->close();
+
+ return $numfiles;
+}
+
+$numfiles = get_files_for_gitrev($sat, $unsat, $unfinished);
+
+$ret = array(
+ 'filelist' => $json,
+ 'numfiles' => $numfiles
+);
+$jsonstring = json_encode($ret);
+echo $jsonstring;
+$sql->close();
+?>
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/get_gitrevs.php b/cryptominisat5/cryptominisat-5.6.3/web/get_gitrevs.php
new file mode 100644
index 000000000..72c89e38b
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/get_gitrevs.php
@@ -0,0 +1,26 @@
+<?php
+include "connect.php";
+
+function fill_gitrevs($sql)
+{
+ $query = "select `gitrev` from `solverRun` group by `gitrev`;";
+ $stmt = $sql->prepare($query);
+ if (!$stmt) {
+ die("Cannot prepare statement");
+ }
+ $result = $stmt->execute();
+ $json = array();
+
+ while($arr=$result->fetchArray(SQLITE3_ASSOC))
+ {
+ $data = array(
+ 'gitrev' => $arr["gitrev"],
+ );
+ array_push($json, $data);
+ }
+ $jsonstring = json_encode($json);
+ echo $jsonstring;
+ $stmt->close();
+}
+fill_gitrevs($sql);
+?>
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/index.html b/cryptominisat5/cryptominisat-5.6.3/web/index.html
new file mode 100644
index 000000000..8bbe06809
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/index.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta charset="utf-8">
+ <title>Cryptominisat 5 visualization</title>
+
+ <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
+ <script type="text/javascript" src="jquery-1.11.3.min.js"></script>
+ <script type="text/javascript" src="dygraphs/dist/dygraph.min.js"></script>
+ <script type="text/javascript" src="selectdata.js"></script>
+ <script type="text/javascript" src="drawgraphs.js"></script>
+
+ <style>
+ @import url(style.css);
+ </style>
+</head>
+
+<body>
+<h1>Cryptominisat 5</h1>
+
+<h3>Replacing wordy authority with visible certainty</h4>
+
+
+<p>The X axis is conflicts, Y axis is some measure of sovling.
+Every datapoint corresponds to a restart. You may zoom in by
+clicking on an interesting point and dragging the cursor along the X axis.
+Double-click to unzoom. Blue vertical lines indicate the positions of
+<i>simplification sessions</i>. Between the blue lines are <i>search
+sessions</i>. The angle of the "time" graph indicates conflicts/second.
+Simplification sessions are not detailed. However, time jumps during
+simplifcaition, and the solver behaviour changes afterwards.</p>
+
+<div class="full_selector">
+<input id="need_unfinished" type="checkbox" name="unfinished" onclick="fill_files_options();" checked>unfinished</input>
+<input id="need_SAT" type="checkbox" name="SAT" onclick="fill_files_options();" checked>satisfiable</input>
+<input id="need_UNSAT" type="checkbox" name="UNSAT" onclick="fill_files_options();" checked>unsatisfiable</input>
+&nbsp;
+&nbsp;
+<div style="display:inline;" id="total_files_info"></div>
+<br/>
+<!--<select id='version' onchange='changed_version(this.value);' style="width:20%;">
+<option value = "idtest">idtest</option>
+</select>-->
+<select id="fname" style="width:60%;">
+<option value="test">Test</option>
+</select>
+</p>
+</div>
+
+<script type="text/javascript">
+fill_files_options();
+
+$('#fname').change(function(){
+ selected_runID(jQuery("#fname option:selected").val());
+});
+
+function fill_files_options()
+{
+ link = "get_files.php?";
+ link += "unfinish=" + $('#need_unfinished')[0].checked;
+ link += "&sat=" + $('#need_SAT')[0].checked;
+ link += "&unsat=" + $('#need_UNSAT')[0].checked;
+ jQuery.getJSON(link,
+ function(data){
+ var select = document.getElementById('fname');
+ select.options.length = 0; // clear out existing items
+ var filelist = data['filelist'];
+ for(var i=0; i < filelist.length; i++) {
+ var d = filelist[i];
+ select.options.add(new Option(d.fname, d.runID));
+ }
+ var v = document.getElementById("total_files_info");
+ v.innerHTML = ""+data['numfiles']+" files";
+
+ selected_runID(jQuery("#fname option:selected").val());
+ }
+ );
+};
+
+// fill_versions();
+</script>
+
+<p id="fileinfo"></p>
+<div id="datagraphs"></div>
+
+<!-- clear out column layout -->
+<p style="clear:both"></p>
+
+<h2>Terms used</h2>
+
+<table class="gridtable">
+<tr><th>Abbreviation</th><th>Explanation</th></tr>
+<tr><td>red.</td><td>reducible, also called learnt</td></tr>
+<tr><td>irred.</td><td>irreducible, also called non-learnt</td></tr>
+<tr><td>confl</td><td>conflict reached by the solver</td></tr>
+<tr><td>learnt</td><td>clause learnt during 1UIP conflict analysis</td></tr>
+<tr><td>trail depth</td><td>depth of serach i.e. the number of variables set when the solver reached a conflict</td></tr>
+<tr><td>brach depth</td><td>the number of branches made before conflict was encountered</td></tr>
+<tr><td>trail depth delta</td><td>the number of variables we jumped back when doing conflict-directed backjumping</td></tr>
+<tr><td>branch depth delta</td><td>the number of branches jumped back during conflict-directed backjumping</td></tr>
+<tr><td>propagations/decision</td><td>number of variables set due to the
+propagation of a decision (note that there is always at least one, the variable itself)
+</td></tr>
+<tr><td>vars replaced</td><td>the number or variables replaced due to equivalent literal simplfication</td></tr>
+<tr><td>polarity flipped</td><td>polarities of variables are
+<a href="http://dx.doi.org/10.1007/978-3-540-72788-0_28">saved</a> and then used
+if branching is needed, but if propagation takes place, they are sometimes flipped
+</td></tr>
+<tr><td>std dev</td><td>standard deviation, the square root of variance</td></tr>
+<tr><td>confl by</td><td>the clause that caused the conflict</td></tr>
+<tr><td>agility</td><td>See
+<a href="http://www.inf.ucv.cl/~bcrawford/PapersAutonomousSearch_julio2008/BRODERICK_CRAWFORD_AGO_01_X.pdf">
+here</a>.</td></tr>
+<tr><td>glue</td><td>the number of different decision levels of the literals found
+in newly learnt clauses. See <a href = "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.150.1911">
+here</a></td></tr>
+<tr><td>conflict after conflict %</td><td>How often does it happen that a conflict
+, after backtracking and propagating immeediately (i.e. without branching) leads
+to a conflict. This is displayed because it's extremely high percentage relative
+to what most would expect. Thanks to
+<a href="http://www.cril.univ-artois.fr/~jabbour/">Said Jabbour</a> for this.
+</td></tr>
+</table>
+
+<p>This webpage shows the partial solving of a SAT instance.
+I was amazed by <a href="http://www.edwardtufte.com/tufte/">Edward Tufte</a>'s
+work (hence the subtitle) and this came out of it.</p>
+
+
+<br/>
+<p><small>Copyright <a href="http://www.msoos.org">Mate Soos</a>, 2016.
+Licensed under <a href="http://creativecommons.org/licenses/by-nc-sa/2.5/">
+CC BY-NC-SA 2.5</a></small>
+</p>
+
+</body>
+</html>
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/install_web.sh b/cryptominisat5/cryptominisat-5.6.3/web/install_web.sh
new file mode 100755
index 000000000..b99b72882
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/install_web.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+# TODO set to echo all commands, too!
+
+# set up dygraphs
+cd dygraphs
+npm install
+npm run build
+cd ..
+
+# set up jquery
+wget http://code.jquery.com/jquery-1.11.3.min.js
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/jquery.jqplot.css b/cryptominisat5/cryptominisat-5.6.3/web/jquery.jqplot.css
new file mode 100644
index 000000000..5e701caf9
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/jquery.jqplot.css
@@ -0,0 +1,259 @@
+/*rules for the plot target div. These will be cascaded down to all plot elements according to css rules*/
+.jqplot-target {
+ position: relative;
+/* color: #666666; */
+/* font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; */
+ font-size: 1em;
+/* height: 300px;
+ width: 400px;*/
+}
+
+/*rules applied to all axes*/
+.jqplot-axis {
+ font-size: 0.75em;
+}
+
+.jqplot-xaxis {
+ margin-top: 10px;
+}
+
+.jqplot-x2axis {
+ margin-bottom: 10px;
+}
+
+.jqplot-yaxis {
+ margin-right: 10px;
+}
+
+.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis, .jqplot-yMidAxis {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*rules applied to all axis tick divs*/
+.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick, .jqplot-yMidAxis-tick {
+ position: absolute;
+ white-space: pre;
+}
+
+
+.jqplot-xaxis-tick {
+ top: 0px;
+ /* initial position untill tick is drawn in proper place */
+ left: 15px;
+/* padding-top: 10px;*/
+ vertical-align: top;
+}
+
+.jqplot-x2axis-tick {
+ bottom: 0px;
+ /* initial position untill tick is drawn in proper place */
+ left: 15px;
+/* padding-bottom: 10px;*/
+ vertical-align: bottom;
+}
+
+.jqplot-yaxis-tick {
+ right: 0px;
+ /* initial position untill tick is drawn in proper place */
+ top: 15px;
+/* padding-right: 10px;*/
+ text-align: right;
+}
+
+.jqplot-yaxis-tick.jqplot-breakTick {
+ right: -20px;
+ margin-right: 0px;
+ padding:1px 5px 1px 5px;
+/* background-color: white;*/
+ z-index: 2;
+ font-size: 1.5em;
+}
+
+.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick {
+ left: 0px;
+ /* initial position untill tick is drawn in proper place */
+ top: 15px;
+/* padding-left: 10px;*/
+/* padding-right: 15px;*/
+ text-align: left;
+}
+
+.jqplot-yMidAxis-tick {
+ text-align: center;
+ white-space: nowrap;
+}
+
+.jqplot-xaxis-label {
+ margin-top: 10px;
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-x2axis-label {
+ margin-bottom: 10px;
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-yaxis-label {
+ margin-right: 10px;
+/* text-align: center;*/
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-yMidAxis-label {
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label {
+/* text-align: center;*/
+ font-size: 11pt;
+ margin-left: 10px;
+ position: absolute;
+}
+
+.jqplot-meterGauge-tick {
+ font-size: 0.75em;
+/* color: #999999; */
+}
+
+.jqplot-meterGauge-label {
+ font-size: 1em;
+/* color: #999999; */
+}
+
+table.jqplot-table-legend {
+ margin-top: 12px;
+ margin-bottom: 12px;
+ margin-left: 12px;
+ margin-right: 12px;
+}
+
+table.jqplot-table-legend, table.jqplot-cursor-legend {
+/* background-color: rgba(255,255,255,0.6); */
+ border: 0px solid #cccccc;
+ position: absolute;
+/* font-size: 0.75em; */
+}
+
+td.jqplot-table-legend {
+ vertical-align:middle;
+}
+
+/*
+These rules could be used instead of assigning
+element styles and relying on js object properties.
+*/
+
+/*
+td.jqplot-table-legend-swatch {
+ padding-top: 0.5em;
+ text-align: center;
+}
+
+tr.jqplot-table-legend:first td.jqplot-table-legend-swatch {
+ padding-top: 0px;
+}
+*/
+
+td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active {
+ cursor: pointer;
+}
+
+.jqplot-table-legend .jqplot-series-hidden {
+ text-decoration: line-through;
+}
+
+div.jqplot-table-legend-swatch-outline {
+ border: 1px solid #cccccc;
+ padding:1px;
+}
+
+div.jqplot-table-legend-swatch {
+ width:0px;
+ height:0px;
+ border-top-width: 5px;
+ border-bottom-width: 5px;
+ border-left-width: 6px;
+ border-right-width: 6px;
+ border-top-style: solid;
+ border-bottom-style: solid;
+ border-left-style: solid;
+ border-right-style: solid;
+}
+
+.jqplot-title {
+ top: 0px;
+ left: 0px;
+ padding-bottom: 0.5em;
+ font-size: 1.2em;
+}
+
+table.jqplot-cursor-tooltip {
+ border: 1px solid #cccccc;
+ font-size: 0.75em;
+}
+
+
+.jqplot-cursor-tooltip {
+ border: 1px solid #cccccc;
+ font-size: 0.75em;
+ white-space: nowrap;
+/* background: rgba(208,208,208,0.5); */
+ padding: 1px;
+}
+
+.jqplot-highlighter-tooltip, .jqplot-canvasOverlay-tooltip {
+/* border: 1px solid #cccccc; */
+ font-size: 0.75em;
+ white-space: nowrap;
+/* background: rgba(208,208,208,0.5); */
+ padding: 1px;
+}
+
+.jqplot-point-label {
+ font-size: 0.75em;
+ z-index: 2;
+}
+
+td.jqplot-cursor-legend-swatch {
+ vertical-align: middle;
+ text-align: center;
+}
+
+div.jqplot-cursor-legend-swatch {
+ width: 1.2em;
+ height: 0.7em;
+}
+
+.jqplot-error {
+/* Styles added to the plot target container when there is an error go here.*/
+ text-align: center;
+}
+
+.jqplot-error-message {
+/* Styling of the custom error message div goes here.*/
+ position: relative;
+ top: 46%;
+ display: inline-block;
+}
+
+div.jqplot-bubble-label {
+ font-size: 0.8em;
+/* background: rgba(90%, 90%, 90%, 0.15);*/
+ padding-left: 2px;
+ padding-right: 2px;
+/* color: rgb(20%, 20%, 20%); */
+}
+
+div.jqplot-bubble-label.jqplot-bubble-label-highlight {
+/* background: rgba(90%, 90%, 90%, 0.7); */
+}
+
+div.jqplot-noData-container {
+ text-align: center;
+/* background-color: rgba(96%, 96%, 96%, 0.3); */
+}
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/selectdata.js b/cryptominisat5/cryptominisat-5.6.3/web/selectdata.js
new file mode 100644
index 000000000..9c85a54dc
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/selectdata.js
@@ -0,0 +1,41 @@
+var columnDivs = new Array();
+var graph_data = new Array();
+var clDistrib = new Array();
+var simplificationPoints = new Array();
+var maxConflRestart = new Array();
+
+function selected_runID(runID) {
+ console.log("getting runid " + runID);
+ clear_everything();
+ link = "get_data.php?id=" + runID;
+ //runID = "/private/sat/dat/" + runID.replace(/^.*[\\\/]/, '') + ".dat"
+ //link = runID;
+ jQuery.getJSON(
+ link
+ , function(response)
+ {
+ console.log("parsing data");
+ var v = document.getElementById("fileinfo");
+ v.innerHTML = "Status: ";
+ var metad = response["metadata"];
+ if (metad["status"] == null) {
+ v.innerHTML += "Unfinished";
+ } else {
+ v.innerHTML += metad["status"];
+ v.innerHTML += ", time(s): "+ metad["difftime"];
+ //v.innerHTML += ", start time: "+ metad["startTime"];
+ //v.innerHTML += ", end time: "+ metad["endTime"];
+ }
+ v.innerHTML += ", run id: "+runID;
+
+ columnDivs = response["columnDivs"];
+ graph_data = response["graph_data"];
+ clDistrib = new Array();
+ simplificationPoints = response["simplificationPoints"];
+ maxConflRestart = response["maxConflRestart"];
+ print_all_graphs();
+ }
+ );
+}
+
+//selected_runID(15772794);
diff --git a/cryptominisat5/cryptominisat-5.6.3/web/style.css b/cryptominisat5/cryptominisat-5.6.3/web/style.css
new file mode 100644
index 000000000..87aff3d73
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/web/style.css
@@ -0,0 +1,143 @@
+div.draghandle {
+ cursor: move;
+ font-family: sans-serif;
+ /*font-size:0.70em;*/
+ padding-top:0px;
+ padding-bottom:10px;
+ vertical-align:top;
+ text-align:left;
+}
+
+div.full_selector {
+ max-width:800px;
+ margin: 0;
+ margin-top: 0px;
+ margin-left: 20px;
+ margin-bottom: 20px;
+ font-size: 13px;
+}
+
+#labelW {
+ width:20%;
+ vertical-align: middle;
+}
+
+div.draghandle.dygraph-label {
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+div.myPlotData {
+ height:165px;
+}
+
+canvas.canvasPlot {
+ margin:0;
+}
+
+body {
+ /*color: white;
+ background-color: black;*/
+ margin: 0px;
+ padding: 0px;
+}
+
+h1 {
+ margin-left: 20px;
+ font-size: 96px;
+ margin-bottom: 0;
+}
+
+h1 , h2, h3{
+ margin-top: 0px;
+}
+
+h3 {
+ margin: 0;
+ margin-top: 0px;
+ margin-left: 20px;
+ margin-bottom: 20px;
+ font-size: 13px;
+}
+
+h2 {
+ margin-top: 50px;
+ margin-left: 20px;
+ margin-bottom: 5px;
+ font-weight: 400;
+ font-size: 28px;
+}
+
+h1, h2 {
+ font-family: "Yanone Kaffeesatz";
+ text-rendering: optimizeLegibility;
+}
+
+p {
+ font-size: 16px;
+ margin-left: 20px;
+ max-width: 500px;
+ font-family: "Myriad Pro", Myriad, "Liberation Sans", "Nimbus Sans L", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ /*font-family: Century Gothic, sans-serif;*/
+ /*font-family: Tahoma, Geneva, sans-serif;*/
+}
+
+a {
+ text-decoration: none
+}
+
+
+@font-face {
+ font-family: 'Yanone Kaffeesatz';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Yanone Kaffeesatz Regular'), local('YanoneKaffeesatz-Regular');
+}
+@font-face {
+ font-family: 'Yanone Kaffeesatz';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Yanone Kaffeesatz Bold'), local('YanoneKaffeesatz-Bold');
+}
+
+#plot-table-a
+{
+ width:100%;
+ margin-left: 0px;
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-right: 0;
+ border: 0;
+ border-collapse: collapse;
+ text-align:left;
+}
+
+#plot-table-a td
+{
+ padding: 0 0 0 0;
+ text-align:left;
+ font-size:0.80em;
+}
+
+table.gridtable {
+ margin-left: 20px;
+ font-family: verdana,arial,sans-serif;
+ font-size:11px;
+ color:#333333;
+ border-width: 1px;
+ border-color: #666666;
+ border-collapse: collapse;
+}
+table.gridtable th {
+ border-width: 1px;
+ padding: 8px;
+ border-style: solid;
+ border-color: #666666;
+ background-color: #dedede;
+}
+table.gridtable td {
+ border-width: 1px;
+ padding: 8px;
+ border-style: solid;
+ border-color: #666666;
+ background-color: #ffffff;
+}
diff --git a/cryptominisat5/install/bin/cryptominisat5_simple b/cryptominisat5/install/bin/cryptominisat5_simple
new file mode 100755
index 000000000..6fc4ec666
--- /dev/null
+++ b/cryptominisat5/install/bin/cryptominisat5_simple
Binary files differ
diff --git a/cryptominisat5/install/include/cryptominisat5/cryptominisat.h b/cryptominisat5/install/include/cryptominisat5/cryptominisat.h
new file mode 100644
index 000000000..fbaaacc2f
--- /dev/null
+++ b/cryptominisat5/install/include/cryptominisat5/cryptominisat.h
@@ -0,0 +1,168 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CRYPTOMINISAT5_H__
+#define __CRYPTOMINISAT5_H__
+
+#define CRYPTOMINISAT_VERSION_MAJOR 5
+#define CRYPTOMINISAT_VERSION_MINOR 6
+#define CRYPTOMINISAT_VERSION_PATCH 3
+
+#include <atomic>
+#include <vector>
+#include <iostream>
+#include <utility>
+#include "cryptominisat5/solvertypesmini.h"
+
+namespace CMSat {
+ struct CMSatPrivateData;
+ #ifdef _WIN32
+ class __declspec(dllexport) SATSolver
+ #else
+ class SATSolver
+ #endif
+ {
+ public:
+ SATSolver(void* config = NULL
+ , std::atomic<bool>* interrupt_asap = NULL
+ );
+ ~SATSolver();
+
+ ////////////////////////////
+ // Adding variables and clauses
+ ////////////////////////////
+
+ void new_var(); //add a new variable to the solver
+ void new_vars(const size_t n); //and many new variables to the solver -- much faster
+ unsigned nVars() const; //get number of variables inside the solver
+ bool add_clause(const std::vector<Lit>& lits);
+ bool add_xor_clause(const std::vector<unsigned>& vars, bool rhs);
+
+ ////////////////////////////
+ // Solving and simplifying
+ ////////////////////////////
+
+ lbool solve(const std::vector<Lit>* assumptions = 0, bool only_indep_solution = false); //solve the problem, optionally with assumptions. If only_indep_solution is set, only the independent variables set with set_independent_vars() are returned in the solution
+ lbool simplify(const std::vector<Lit>* assumptions = 0); //simplify the problem, optionally with assumptions
+ const std::vector<lbool>& get_model() const; //get model that satisfies the problem. Only makes sense if previous solve()/simplify() call was l_True
+ const std::vector<Lit>& get_conflict() const; //get conflict in terms of the assumptions given in case the previous call to solve() was l_False
+ bool okay() const; //the problem is still solveable, i.e. the empty clause hasn't been derived
+
+ ////////////////////////////
+ // Debug all calls for later replay with --debuglit FILENAME
+ ////////////////////////////
+ void log_to_file(std::string filename);
+
+ ////////////////////////////
+ // SQLite for statistics gathering
+ ////////////////////////////
+ void set_sqlite(std::string filename);
+ void add_sql_tag(const std::string& tagname, const std::string& tag);
+ unsigned long get_sql_id() const;
+
+ ////////////////////////////
+ // Configuration
+ // -- Note that nothing else can be changed, only these.
+ // -- The main.cpp has access to the internal config, but it changes
+ // -- all the time and hence exposing it to the outside world would
+ // -- be very brittle.
+ ////////////////////////////
+
+ void set_num_threads(unsigned n); //Number of threads to use. Must be set before any vars/clauses are added
+ void set_allow_otf_gauss(); //allow on-the-fly gaussian elimination
+ void set_max_time(double max_time); //max time to run to on next solve() call
+ void set_max_confl(int64_t max_confl); //max conflict to run to on next solve() call
+ void set_verbosity(unsigned verbosity = 0); //default is 0, silent
+ void set_default_polarity(bool polarity); //default polarity when branching for all vars
+ void set_no_simplify(); //never simplify
+ void set_no_simplify_at_startup(); //doesn't simplify at start, faster startup time
+ void set_no_equivalent_lit_replacement(); //don't replace equivalent literals
+ void set_no_bva(); //No bounded variable addition
+ void set_no_bve(); //No bounded variable elimination
+ void set_greedy_undef(); //Try to set variables to l_Undef in solution
+ void set_independent_vars(std::vector<uint32_t>* ind_vars);
+ void set_timeout_all_calls(double secs); //max timeout on all subsequent solve() or simplify
+
+
+ ////////////////////////////
+ // Get generic info
+ ////////////////////////////
+ static const char* get_version(); //get solver version in string format
+ static const char* get_version_sha1(); //get SHA1 version string of the solver
+ static const char* get_compilation_env(); //get compilation environment string
+
+
+ ////////////////////////////
+ // Get info about only the last solve() OR simplify() call
+ // summed for all threads
+ ////////////////////////////
+ uint64_t get_last_conflicts(); //get total number of conflicts of last solve() or simplify() call of all threads
+ uint64_t get_last_propagations(); //get total number of propagations of last solve() or simplify() call made by all threads
+ uint64_t get_last_decisions(); //get total number of decisions of last solve() or simplify() call made by all threads
+
+
+ ////////////////////////////
+ //Get info about total sum of all time of all threads
+ ////////////////////////////
+
+ uint64_t get_sum_conflicts(); //get total number of conflicts of all time of all threads
+ uint64_t get_sum_propagations(); //get total number of propagations of all time made by all threads
+ uint64_t get_sum_decisions(); //get total number of decisions of all time made by all threads
+
+ void print_stats() const; //print solving stats. Call after solve()/simplify()
+ void set_drat(std::ostream* os, bool set_ID); //set drat to ostream, e.g. stdout or a file
+ void interrupt_asap(); //call this asynchronously, and the solver will try to cleanly abort asap
+ void open_file_and_dump_irred_clauses(std::string fname) const; //dump irredundant clauses to this file when solving finishes
+ void open_file_and_dump_red_clauses(std::string fname) const; //dump redundant ("learnt") clauses to this file when solving finishes
+ void add_in_partial_solving_stats(); //used only by Ctrl+C handler. Ignore.
+
+ ////////////////////////////
+ // Extract useful information from the solver
+ // This can be used in the theory solver
+
+ ////////////////////////////
+ std::vector<Lit> get_zero_assigned_lits() const; //get literals of fixed value
+ std::vector<std::pair<Lit, Lit> > get_all_binary_xors() const; //get all binary XORs that are = 0
+
+ //////////////////////
+ // EXPERIMENTAL
+ std::vector<std::pair<std::vector<uint32_t>, bool> > get_recovered_xors(bool elongate) const; //get XORs recovered. If "elongate" is TRUE, then variables shared ONLY by two XORs will be XORed together
+
+ //////////////////////
+ //Below must be done in-order. Multi-threading not allowed.
+ // EXPERIMENTAL!!!
+
+ void start_getting_small_clauses(uint32_t max_len, uint32_t max_glue);
+ bool get_next_small_clause(std::vector<Lit>& ret); //returns FALSE if no more
+ void end_getting_small_clauses();
+
+ private:
+
+ ////////////////////////////
+ // Do not bother with this, it's private
+ ////////////////////////////
+
+ CMSatPrivateData *data;
+ };
+}
+
+#endif //__CRYPTOMINISAT5_H__
diff --git a/cryptominisat5/install/include/cryptominisat5/cryptominisat_c.h b/cryptominisat5/install/include/cryptominisat5/cryptominisat_c.h
new file mode 100644
index 000000000..51922e78f
--- /dev/null
+++ b/cryptominisat5/install/include/cryptominisat5/cryptominisat_c.h
@@ -0,0 +1,75 @@
+/******************************************
+Copyright (c) 2016, @Storyyeller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#pragma once
+#include <stddef.h>
+#include <stdint.h>
+
+typedef struct c_Lit { uint32_t x; } c_Lit;
+typedef struct c_lbool { uint8_t x; } c_lbool;
+typedef struct slice_Lit { const c_Lit* vals; size_t num_vals; } slice_Lit;
+typedef struct slice_lbool { const c_lbool* vals; size_t num_vals; } slice_lbool;
+
+#ifdef __cplusplus
+ #define NOEXCEPT noexcept
+
+ namespace CMSat{ struct SATSolver; }
+ using CMSat::SATSolver;
+
+ extern "C" {
+#else
+ // c stuff
+ #include <stdbool.h>
+ #define NOEXCEPT
+
+ #define L_TRUE (0u)
+ #define L_FALSE (1u)
+ #define L_UNDEF (2u)
+
+ // forward declaration
+ typedef struct SATSolver SATSolver;
+#endif
+
+#if defined _WIN32
+ #define CMS_DLL_PUBLIC __declspec(dllexport)
+#else
+ #define CMS_DLL_PUBLIC __attribute__ ((visibility ("default")))
+#endif
+
+CMS_DLL_PUBLIC SATSolver* cmsat_new(void) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_free(SATSolver* s) NOEXCEPT;
+
+CMS_DLL_PUBLIC unsigned cmsat_nvars(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_clause(SATSolver* self, const c_Lit* lits, size_t num_lits) NOEXCEPT;
+CMS_DLL_PUBLIC bool cmsat_add_xor_clause(SATSolver* self, const unsigned* vars, size_t num_vars, bool rhs) NOEXCEPT;
+CMS_DLL_PUBLIC void cmsat_new_vars(SATSolver* self, const size_t n) NOEXCEPT;
+
+CMS_DLL_PUBLIC c_lbool cmsat_solve(SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC c_lbool cmsat_solve_with_assumptions(SATSolver* self, const c_Lit* assumptions, size_t num_assumptions) NOEXCEPT;
+CMS_DLL_PUBLIC slice_lbool cmsat_get_model(const SATSolver* self) NOEXCEPT;
+CMS_DLL_PUBLIC slice_Lit cmsat_get_conflict(const SATSolver* self) NOEXCEPT;
+
+CMS_DLL_PUBLIC void cmsat_set_num_threads(SATSolver* self, unsigned n) NOEXCEPT;
+
+#ifdef __cplusplus
+} // end extern c
+#endif
diff --git a/cryptominisat5/install/include/cryptominisat5/dimacsparser.h b/cryptominisat5/install/include/cryptominisat5/dimacsparser.h
new file mode 100644
index 000000000..ebdf5edae
--- /dev/null
+++ b/cryptominisat5/install/include/cryptominisat5/dimacsparser.h
@@ -0,0 +1,529 @@
+/*****************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+CryptoMiniSat -- Copyright (c) 2009 Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+******************************************************************************/
+
+#ifndef DIMACSPARSER_H
+#define DIMACSPARSER_H
+
+#include <string.h>
+#include "streambuffer.h"
+#include "cryptominisat5/cryptominisat.h"
+#include <cstdlib>
+#include <cmath>
+
+using namespace CMSat;
+using std::vector;
+
+template <class C>
+class DimacsParser
+{
+ public:
+ DimacsParser(SATSolver* solver, const std::string* debugLib, unsigned _verbosity);
+
+ template <class T> bool parse_DIMACS(T input_stream, const bool strict_header);
+ uint64_t max_var = std::numeric_limits<uint64_t>::max();
+ vector<uint32_t> independent_vars;
+ const std::string dimacs_spec = "http://www.satcompetition.org/2009/format-benchmarks2009.html";
+ const std::string please_read_dimacs = "\nPlease read DIMACS specification at http://www.satcompetition.org/2009/format-benchmarks2009.html";
+
+ private:
+ bool parse_DIMACS_main(C& in);
+ bool readClause(C& in);
+ bool parse_and_add_clause(C& in);
+ bool parse_and_add_xor_clause(C& in);
+ bool match(C& in, const char* str);
+ bool printHeader(C& in);
+ bool parseComments(C& in, const std::string& str);
+ std::string stringify(uint32_t x) const;
+ bool parse_solve_simp_comment(C& in, const bool solve);
+ void write_solution_to_debuglib_file(const lbool ret) const;
+ bool parseIndependentSet(C& in);
+ std::string get_debuglib_fname() const;
+
+
+ SATSolver* solver;
+ std::string debugLib;
+ unsigned verbosity;
+
+ //Stat
+ size_t lineNum;
+
+ //Printing partial solutions to debugLibPart1..N.output when "debugLib" is set to TRUE
+ uint32_t debugLibPart = 1;
+
+ //check header strictly
+ bool strict_header = false;
+ bool header_found = false;
+ int num_header_vars = 0;
+ int num_header_cls = 0;
+
+ //Reduce temp overhead
+ vector<Lit> lits;
+ vector<uint32_t> vars;
+
+ size_t norm_clauses_added = 0;
+ size_t xor_clauses_added = 0;
+};
+
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+#include <vector>
+#include <fstream>
+#include <complex>
+#include <cassert>
+
+using std::vector;
+using std::cout;
+using std::endl;
+
+template<class C>
+DimacsParser<C>::DimacsParser(
+ SATSolver* _solver
+ , const std::string* _debugLib
+ , unsigned _verbosity
+):
+ solver(_solver)
+ , verbosity(_verbosity)
+ , lineNum(0)
+{
+ if (_debugLib) {
+ debugLib = *_debugLib;
+ }
+}
+
+template<class C>
+std::string DimacsParser<C>::stringify(uint32_t x) const
+{
+ std::ostringstream o;
+ o << x;
+ return o.str();
+}
+
+template<class C>
+bool DimacsParser<C>::readClause(C& in)
+{
+ int32_t parsed_lit;
+ uint32_t var;
+ for (;;) {
+ if (!in.parseInt(parsed_lit, lineNum)) {
+ return false;
+ }
+ if (parsed_lit == 0) {
+ break;
+ }
+
+ var = std::abs(parsed_lit)-1;
+
+ if (var > max_var) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is too large for DIMACS parser parameter: "
+ << var << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ if (var >= (1ULL<<28)) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is far too large: " << var + 1 << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ if (strict_header && !header_found) {
+ std::cerr
+ << "ERROR! "
+ << "DIMACS header ('p cnf vars cls') never found!" << endl;
+ return false;
+ }
+
+ if ((int)var >= num_header_vars && strict_header) {
+ std::cerr
+ << "ERROR! "
+ << "Variable requested is larger than the header told us." << endl
+ << " -> var is : " << var + 1 << endl
+ << " -> header told us maximum will be : " << num_header_vars << endl
+ << " -> At line " << lineNum+1
+ << endl;
+ return false;
+ }
+
+ if (var >= solver->nVars()) {
+ assert(!strict_header);
+ solver->new_vars(var - solver->nVars() +1);
+ }
+
+ lits.push_back( (parsed_lit > 0) ? Lit(var, false) : Lit(var, true) );
+ if (*in != ' ') {
+ std::cerr
+ << "ERROR! "
+ << "After last element on the line must be 0" << endl
+ << "--> At line " << lineNum+1
+ << please_read_dimacs
+ << endl
+ << endl;
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::match(C& in, const char* str)
+{
+ for (; *str != 0; ++str, ++in)
+ if (*str != *in)
+ return false;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::printHeader(C& in)
+{
+ if (match(in, "p cnf")) {
+ if (header_found && strict_header) {
+ std::cerr << "ERROR: CNF header ('p cnf vars cls') found twice in file! Exiting." << endl;
+ exit(-1);
+ }
+ header_found = true;
+
+ if (!in.parseInt(num_header_vars, lineNum)
+ || !in.parseInt(num_header_cls, lineNum)
+ ) {
+ return false;
+ }
+ if (verbosity) {
+ cout << "c -- header says num vars: " << std::setw(12) << num_header_vars << endl;
+ cout << "c -- header says num clauses:" << std::setw(12) << num_header_cls << endl;
+ }
+ if (num_header_vars < 0) {
+ std::cerr << "ERROR: Number of variables in header cannot be less than 0" << endl;
+ return false;
+ }
+ if (num_header_cls < 0) {
+ std::cerr << "ERROR: Number of clauses in header cannot be less than 0" << endl;
+ return false;
+ }
+
+ if (solver->nVars() < (size_t)num_header_vars) {
+ solver->new_vars(num_header_vars-solver->nVars());
+ }
+ } else {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (hex: " << std::hex
+ << std::setw(2)
+ << std::setfill('0')
+ << "0x" << *in
+ << std::setfill(' ')
+ << std::dec
+ << ")"
+ << " At line " << lineNum+1
+ << "' in the header, at line " << lineNum+1
+ << please_read_dimacs
+ << endl;
+ return false;
+ }
+
+ return true;
+}
+
+template<class C>
+std::string DimacsParser<C>::get_debuglib_fname() const
+{
+ std::string sol_fname = debugLib + "-debugLibPart" + stringify(debugLibPart) +".output";
+ return sol_fname;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_solve_simp_comment(C& in, const bool solve)
+{
+ vector<Lit> assumps;
+ in.skipWhitespace();
+ while(*in != ')') {
+ int lit;
+ if (!in.parseInt(lit, lineNum)) {
+ return false;
+ }
+ assumps.push_back(Lit(std::abs(lit)-1, lit < 0));
+ in.skipWhitespace();
+ }
+
+ if (verbosity) {
+ cout
+ << "c -----------> Solver::"
+ << (solve ? "solve" : "simplify")
+ <<" called (number: "
+ << std::setw(3) << debugLibPart << ") with assumps :";
+ for(Lit lit: assumps) {
+ cout << lit << " ";
+ }
+ cout << "<-----------" << endl;
+ }
+
+ lbool ret;
+ if (solve) {
+ if (verbosity) {
+ cout << "c Solution will be written to: "
+ << get_debuglib_fname() << endl;
+ }
+ ret = solver->solve(&assumps);
+ write_solution_to_debuglib_file(ret);
+ debugLibPart++;
+ } else {
+ ret = solver->simplify(&assumps);
+ }
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::"
+ << (solve ? "solve" : "simplify")
+ << endl;
+ }
+ return true;
+}
+
+template<class C>
+void DimacsParser<C>::write_solution_to_debuglib_file(const lbool ret) const
+{
+ //Open file for writing
+ std::string s = get_debuglib_fname();
+ std::ofstream partFile;
+ partFile.open(s.c_str());
+ if (!partFile) {
+ std::cerr << "ERROR: Cannot open part file '" << s << "'";
+ std::exit(-1);
+ }
+
+ //Output to part file the result
+ if (ret == l_True) {
+ partFile << "s SATISFIABLE\n";
+ partFile << "v ";
+ for (uint32_t i = 0; i != solver->nVars(); i++) {
+ if (solver->get_model()[i] != l_Undef)
+ partFile
+ << ((solver->get_model()[i]==l_True) ? "" : "-")
+ << (i+1) << " ";
+ }
+ partFile << "0\n";
+ } else if (ret == l_False) {
+ partFile << "conflict ";
+ for (Lit lit: solver->get_conflict()) {
+ partFile << lit << " ";
+ }
+ partFile
+ << "\ns UNSAT\n";
+ } else if (ret == l_Undef) {
+ cout << "c timeout, exiting" << endl;
+ std::exit(15);
+ } else {
+ assert(false);
+ }
+ partFile.close();
+}
+
+template<class C>
+bool DimacsParser<C>::parseComments(C& in, const std::string& str)
+{
+ if (!debugLib.empty() && str.substr(0, 13) == "Solver::solve") {
+ if (!parse_solve_simp_comment(in, true)) {
+ return false;
+ }
+ } else if (!debugLib.empty() && str.substr(0, 16) == "Solver::simplify") {
+ if (!parse_solve_simp_comment(in, false)) {
+ return false;
+ }
+ } else if (!debugLib.empty() && str == "Solver::new_var()") {
+ solver->new_var();
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::new_var()" << endl;
+ }
+ } else if (!debugLib.empty() && str == "Solver::new_vars(") {
+ in.skipWhitespace();
+ int n;
+ if (!in.parseInt(n, lineNum)) {
+ return false;
+ }
+ solver->new_vars(n);
+
+ if (verbosity >= 6) {
+ cout << "c Parsed Solver::new_vars( " << n << " )" << endl;
+ }
+ } else if (str == "ind") {
+ if (!parseIndependentSet(in)) {
+ return false;
+ }
+ } else {
+ if (verbosity >= 6) {
+ cout
+ << "didn't understand in CNF file comment line:"
+ << "'c " << str << "'"
+ << endl;
+ }
+ }
+ in.skipLine();
+ lineNum++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_and_add_clause(C& in)
+{
+ lits.clear();
+ if (!readClause(in)) {
+ return false;
+ }
+ in.skipWhitespace();
+ if (!in.skipEOL(lineNum)) {
+ return false;
+ }
+ lineNum++;
+ solver->add_clause(lits);
+ norm_clauses_added++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_and_add_xor_clause(C& in)
+{
+ lits.clear();
+ if (!readClause(in)) {
+ return false;
+ }
+ if (!in.skipEOL(lineNum)) {
+ return false;
+ }
+ lineNum++;
+ if (lits.empty())
+ return true;
+
+ bool rhs = true;
+ vars.clear();
+ for(Lit& lit: lits) {
+ vars.push_back(lit.var());
+ if (lit.sign()) {
+ rhs ^= true;
+ }
+ }
+ solver->add_xor_clause(vars, rhs);
+ xor_clauses_added++;
+ return true;
+}
+
+template<class C>
+bool DimacsParser<C>::parse_DIMACS_main(C& in)
+{
+ std::string str;
+
+ for (;;) {
+ in.skipWhitespace();
+ switch (*in) {
+ case EOF:
+ return true;
+ case 'p':
+ if (!printHeader(in)) {
+ return false;
+ }
+ in.skipLine();
+ lineNum++;
+ break;
+ case 'c':
+ ++in;
+ in.parseString(str);
+ if (!parseComments(in, str)) {
+ return false;
+ }
+ break;
+ case 'x':
+ ++in;
+ if (!parse_and_add_xor_clause(in)) {
+ return false;
+ }
+ break;
+ case '\n':
+ std::cerr
+ << "c WARNING: Empty line at line number " << lineNum+1
+ << " -- this is not part of the DIMACS specifications ("
+ << dimacs_spec << "). Ignoring."
+ << endl;
+ in.skipLine();
+ lineNum++;
+ break;
+ default:
+ if (!parse_and_add_clause(in)) {
+ return false;
+ }
+ break;
+ }
+ }
+
+ return true;
+}
+
+template <class C>
+template <class T>
+bool DimacsParser<C>::parse_DIMACS(T input_stream, const bool _strict_header)
+{
+ debugLibPart = 1;
+ strict_header = _strict_header;
+ const uint32_t origNumVars = solver->nVars();
+
+ C in(input_stream);
+ if ( !parse_DIMACS_main(in)) {
+ return false;
+ }
+
+ if (verbosity) {
+ cout
+ << "c -- clauses added: " << norm_clauses_added << endl
+ << "c -- xor clauses added: " << xor_clauses_added << endl
+ << "c -- vars added " << (solver->nVars() - origNumVars)
+ << endl;
+ }
+
+ return true;
+}
+
+template <class C>
+bool DimacsParser<C>::parseIndependentSet(C& in)
+{
+ int32_t parsed_lit;
+ for (;;) {
+ if (!in.parseInt(parsed_lit, lineNum)) {
+ return false;
+ }
+ if (parsed_lit == 0) {
+ break;
+ }
+ uint32_t var = std::abs(parsed_lit) - 1;
+ independent_vars.push_back(var);
+ }
+ return true;
+}
+
+#endif //DIMACSPARSER_H
diff --git a/cryptominisat5/install/include/cryptominisat5/solvertypesmini.h b/cryptominisat5/install/include/cryptominisat5/solvertypesmini.h
new file mode 100644
index 000000000..571cb3510
--- /dev/null
+++ b/cryptominisat5/install/include/cryptominisat5/solvertypesmini.h
@@ -0,0 +1,215 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __SOLVERTYPESMINI_H__
+#define __SOLVERTYPESMINI_H__
+
+#include <cstdint>
+#include <iostream>
+#include <cassert>
+#include <vector>
+
+namespace CMSat {
+
+#define var_Undef (0xffffffffU >> 4)
+
+class TooManyVarsError {};
+class TooLongClauseError {};
+
+class Lit
+{
+ uint32_t x;
+ explicit Lit(uint32_t i) : x(i) { }
+public:
+ Lit() : x(var_Undef<<1) {} // (lit_Undef)
+ explicit Lit(uint32_t var, bool is_inverted) :
+ x(var + var + is_inverted)
+ {}
+
+ const uint32_t& toInt() const { // Guarantees small, positive integers suitable for array indexing.
+ return x;
+ }
+ Lit operator~() const {
+ return Lit(x ^ 1);
+ }
+ Lit operator^(const bool b) const {
+ return Lit(x ^ (uint32_t)b);
+ }
+ Lit& operator^=(const bool b) {
+ x ^= (uint32_t)b;
+ return *this;
+ }
+ bool sign() const {
+ return x & 1;
+ }
+ uint32_t var() const {
+ return x >> 1;
+ }
+ Lit unsign() const {
+ return Lit(x & ~1U);
+ }
+ bool operator==(const Lit& p) const {
+ return x == p.x;
+ }
+ bool operator!= (const Lit& p) const {
+ return x != p.x;
+ }
+ /**
+ @brief ONLY to be used for ordering such as: a, b, ~b, etc.
+ */
+ bool operator < (const Lit& p) const {
+ return x < p.x; // '<' guarantees that p, ~p are adjacent in the ordering.
+ }
+ bool operator > (const Lit& p) const {
+ return x > p.x;
+ }
+ bool operator >= (const Lit& p) const {
+ return x >= p.x;
+ }
+ static Lit toLit(uint32_t data)
+ {
+ return Lit(data);
+ }
+};
+
+static const Lit lit_Undef(var_Undef, false); // Useful special constants.
+static const Lit lit_Error(var_Undef, true ); //
+
+inline std::ostream& operator<<(std::ostream& os, const Lit lit)
+{
+ if (lit == lit_Undef) {
+ os << "lit_Undef";
+ } else {
+ os << (lit.sign() ? "-" : "") << (lit.var() + 1);
+ }
+ return os;
+}
+
+inline std::ostream& operator<<(std::ostream& co, const std::vector<Lit>& lits)
+{
+ for (uint32_t i = 0; i < lits.size(); i++) {
+ co << lits[i];
+
+ if (i != lits.size()-1)
+ co << " ";
+ }
+
+ return co;
+}
+
+#define l_True lbool((uint8_t)0) // gcc does not do constant propagation if these are real constants.
+#define l_False lbool((uint8_t)1)
+#define l_Undef lbool((uint8_t)2)
+
+
+class llbool;
+
+class lbool {
+ uint8_t value;
+
+public:
+ explicit lbool(uint8_t v) : value(v) { }
+
+ lbool() : value(0) { }
+ explicit lbool(bool x) : value(!x) { }
+ inline lbool(llbool b);
+
+ bool operator == (lbool b) const {
+ return ((b.value & 2) & (value & 2)) | (!(b.value & 2) & (value == b.value));
+ }
+ bool operator != (lbool b) const {
+ return !(*this == b);
+ }
+ lbool operator ^ (bool b) const {
+ return lbool((uint8_t)(value ^ (uint8_t)b));
+ }
+
+ lbool operator && (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xF7F755F4 >> sel) & 3;
+ return lbool(v);
+ }
+
+ lbool operator || (lbool b) const {
+ uint8_t sel = (this->value << 1) | (b.value << 3);
+ uint8_t v = (0xFCFCF400 >> sel) & 3;
+ return lbool(v);
+ }
+
+ uint8_t getValue() const { return value; }
+
+ friend int toInt (lbool l);
+ friend lbool toLbool(int v);
+ friend class llbool;
+};
+
+inline lbool boolToLBool(const bool b)
+{
+ if (b)
+ return l_True;
+ else
+ return l_False;
+}
+
+
+/**
+@brief A very hackish lbool that also supports l_Nothing and l_Continue
+*/
+class llbool
+{
+ char value;
+
+public:
+ llbool(): value(0) {}
+ llbool(lbool v) :
+ value(v.value) {}
+ llbool(char a) :
+ value(a) {}
+
+ inline bool operator!=(const llbool& v) const {
+ return (v.value != value);
+ }
+
+ inline bool operator==(const llbool& v) const {
+ return (v.value == value);
+ }
+
+ friend class lbool;
+};
+static const llbool l_Nothing = llbool(2);
+static const llbool l_Continue = llbool(3);
+inline lbool::lbool(llbool b): value(b.value) {
+ assert(b != l_Nothing);
+ assert(b != l_Continue);
+}
+
+inline std::ostream& operator<<(std::ostream& cout, const lbool val)
+{
+ if (val == l_True) cout << "l_True";
+ if (val == l_False) cout << "l_False";
+ if (val == l_Undef) cout << "l_Undef";
+ return cout;
+}
+
+}
+
+#endif //__SOLVERTYPESMINI_H__
diff --git a/cryptominisat5/install/include/cryptominisat5/streambuffer.h b/cryptominisat5/install/include/cryptominisat5/streambuffer.h
new file mode 100644
index 000000000..6b4fea34e
--- /dev/null
+++ b/cryptominisat5/install/include/cryptominisat5/streambuffer.h
@@ -0,0 +1,208 @@
+/*******************************************************************************
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*******************************************************************************/
+
+#ifndef STREAMBUFFER_H
+#define STREAMBUFFER_H
+
+static const unsigned chunk_limit = 148576;
+
+#include <stdio.h>
+#include <iostream>
+#include <iomanip>
+#include <limits>
+#include <string>
+#include <memory>
+
+#ifdef USE_ZLIB
+#include <zlib.h>
+struct GZ {
+ static inline int read(void* buf, size_t num, size_t count, gzFile f)
+ {
+ return gzread(f, buf, num*count);
+ }
+};
+#endif
+
+struct FN {
+ static inline int read(void* buf, size_t num, size_t count, FILE* f)
+ {
+ return fread(buf, num, count, f);
+ }
+};
+
+struct CH {
+ static inline int read(void* buf, size_t num, size_t count, const char*& f)
+ {
+ int toread = num*count;
+ char* mybuf = (char*)buf;
+
+ int read = 0;
+ while(*f != 0 && read < toread) {
+ *mybuf = *f;
+ mybuf++;
+ f++;
+ read++;
+ }
+ return read;
+ }
+};
+
+template<typename A, typename B>
+class StreamBuffer
+{
+ A in;
+ void assureLookahead() {
+ if (pos >= size) {
+ pos = 0;
+ size = B::read(buf.get(), 1, chunk_limit, in);
+ }
+ }
+ int pos;
+ int size;
+ std::unique_ptr<char[]> buf;
+
+ void advance()
+ {
+ operator++();
+ }
+ int value()
+ {
+ return operator*();
+ }
+
+public:
+ StreamBuffer(A i) :
+ in(i)
+ , pos(0)
+ , size(0)
+ , buf(new char[chunk_limit]())
+ {
+ assureLookahead();
+ }
+
+ int operator * () {
+ return (pos >= size) ? EOF : buf[pos];
+ }
+ void operator ++ () {
+ pos++;
+ assureLookahead();
+ }
+
+ void skipWhitespace()
+ {
+ char c = value();
+ while (c == '\t' || c == '\r' || c == ' ') {
+ advance();
+ c = value();
+ }
+ }
+
+ void skipLine()
+ {
+ for (;;) {
+ if (value() == EOF || value() == '\0') return;
+ if (value() == '\n') {
+ advance();
+ return;
+ }
+ advance();
+ }
+ }
+
+ bool skipEOL(const size_t lineNum)
+ {
+ for (;;) {
+ if (value() == EOF || value() == '\0') return true;
+ if (value() == '\n') {
+ advance();
+ return true;
+ }
+ if (value() != '\r') {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (hex: " << std::hex
+ << std::setw(2)
+ << std::setfill('0')
+ << "0x" << value()
+ << std::setfill(' ')
+ << std::dec
+ << ")"
+ << " At line " << lineNum+1
+ << " we expected an end of line character (\\n or \\r + \\n)"
+ << std::endl;
+ return false;
+ }
+ advance();
+ }
+ exit(-1);
+ }
+
+ inline bool parseInt(int32_t& ret, size_t lineNum, bool allow_eol = false)
+ {
+ int32_t val = 0;
+ int32_t mult = 1;
+ skipWhitespace();
+ if (value() == '-') {
+ mult = -1;
+ advance();
+ } else if (value() == '+') {
+ advance();
+ }
+
+ char c = value();
+ if (allow_eol && c == '\n') {
+ ret = std::numeric_limits<int32_t>::max();
+ return true;
+ }
+ if (c < '0' || c > '9') {
+ std::cerr
+ << "PARSE ERROR! Unexpected char (dec: '" << c << ")"
+ << " At line " << lineNum
+ << " we expected a number"
+ << std::endl;
+ return false;
+ }
+
+ while (c >= '0' && c <= '9') {
+ int32_t val2 = val*10 + (c - '0');
+ if (val2 < val) {
+ std::cerr << "PARSE ERROR! At line " << lineNum
+ << " the variable number is to high"
+ << std::endl;
+ return false;
+ }
+ val = val2;
+ advance();
+ c = value();
+ }
+ ret = mult*val;
+ return true;
+ }
+
+ void parseString(std::string& str)
+ {
+ str.clear();
+ skipWhitespace();
+ while (value() != ' ' && value() != '\n' && value() != EOF) {
+ str.push_back(value());
+ advance();
+ }
+ }
+};
+
+#endif //STREAMBUFFER_H
diff --git a/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Config.cmake b/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Config.cmake
new file mode 100644
index 000000000..7307f6e62
--- /dev/null
+++ b/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Config.cmake
@@ -0,0 +1,20 @@
+# Config file for the installed cryptominisat Package
+# It defines the following variables
+# CRYPTOMINISAT5_INCLUDE_DIRS - include directories for cryptominisat5
+# CRYPTOMINISAT5_LIBRARIES - libraries to link against
+# CRYPTOMINISAT5_EXECUTABLE - the cryptominisat executable
+
+# Compute paths
+get_filename_component(CRYPTOMINISAT5_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+set(CRYPTOMINISAT5_INCLUDE_DIRS "/home/haozewu/Projects/skeleton/CVC4/cryptominisat5/install/include")
+
+# Our library dependencies (contains definitions for IMPORTED targets)
+include("${CRYPTOMINISAT5_CMAKE_DIR}/cryptominisat5Targets.cmake")
+
+# These are IMPORTED targets created by cryptominisat5Targets.cmake
+set(CRYPTOMINISAT5_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES libcryptominisat5)
+set(CRYPTOMINISAT5_STATIC_LIBRARIES_DEPS )
+set(CRYPTOMINISAT5_VERSION_MAJOR 5)
+set(CRYPTOMINISAT5_VERSION_MINOR 6)
+set(CRYPTOMINISAT5_EXECUTABLE cryptominisat5)
diff --git a/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake b/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake
new file mode 100644
index 000000000..82dc9fca9
--- /dev/null
+++ b/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets-relwithdebinfo.cmake
@@ -0,0 +1,28 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "RelWithDebInfo".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "libcryptominisat5" for configuration "RelWithDebInfo"
+set_property(TARGET libcryptominisat5 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
+set_target_properties(libcryptominisat5 PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELWITHDEBINFO "CXX"
+ IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/lib/libcryptominisat5.a"
+ )
+
+list(APPEND _IMPORT_CHECK_TARGETS libcryptominisat5 )
+list(APPEND _IMPORT_CHECK_FILES_FOR_libcryptominisat5 "${_IMPORT_PREFIX}/lib/libcryptominisat5.a" )
+
+# Import target "cryptominisat5_simple" for configuration "RelWithDebInfo"
+set_property(TARGET cryptominisat5_simple APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
+set_target_properties(cryptominisat5_simple PROPERTIES
+ IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/bin/cryptominisat5_simple"
+ )
+
+list(APPEND _IMPORT_CHECK_TARGETS cryptominisat5_simple )
+list(APPEND _IMPORT_CHECK_FILES_FOR_cryptominisat5_simple "${_IMPORT_PREFIX}/bin/cryptominisat5_simple" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake b/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake
new file mode 100644
index 000000000..34d528eb0
--- /dev/null
+++ b/cryptominisat5/install/lib/cmake/cryptominisat5/cryptominisat5Targets.cmake
@@ -0,0 +1,101 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
+ message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget libcryptominisat5 cryptominisat5_simple)
+ list(APPEND _expectedTargets ${_expectedTarget})
+ if(NOT TARGET ${_expectedTarget})
+ list(APPEND _targetsNotDefined ${_expectedTarget})
+ endif()
+ if(TARGET ${_expectedTarget})
+ list(APPEND _targetsDefined ${_expectedTarget})
+ endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+ unset(_targetsDefined)
+ unset(_targetsNotDefined)
+ unset(_expectedTargets)
+ set(CMAKE_IMPORT_FILE_VERSION)
+ cmake_policy(POP)
+ return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target libcryptominisat5
+add_library(libcryptominisat5 STATIC IMPORTED)
+
+set_target_properties(libcryptominisat5 PROPERTIES
+ INTERFACE_LINK_LIBRARIES "-pthread"
+)
+
+# Create imported target cryptominisat5_simple
+add_executable(cryptominisat5_simple IMPORTED)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/cryptominisat5Targets-*.cmake")
+foreach(f ${CONFIG_FILES})
+ include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+ foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+ if(NOT EXISTS "${file}" )
+ message(FATAL_ERROR "The imported target \"${target}\" references the file
+ \"${file}\"
+but this file does not exist. Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+ \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+ endif()
+ endforeach()
+ unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/cryptominisat5/install/lib/libcryptominisat5.a b/cryptominisat5/install/lib/libcryptominisat5.a
new file mode 100644
index 000000000..e084fafa3
--- /dev/null
+++ b/cryptominisat5/install/lib/libcryptominisat5.a
Binary files differ
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback