pax_global_header00006660000000000000000000000064145012671550014520gustar00rootroot0000000000000052 comment=a9305c2f58e46b7f39fed4e9cf63d61d0dae7ef7 cadical-rel-1.7.4/000077500000000000000000000000001450126715500136715ustar00rootroot00000000000000cadical-rel-1.7.4/.clang-format000066400000000000000000000001451450126715500162440ustar00rootroot00000000000000AlignEscapedNewlines: DontAlign ColumnLimit: 76 SpaceBeforeParens: Always SpaceAfterCStyleCast: true cadical-rel-1.7.4/.gitignore000066400000000000000000000000171450126715500156570ustar00rootroot00000000000000build makefile cadical-rel-1.7.4/BUILD.md000066400000000000000000000105161450126715500150550ustar00rootroot00000000000000# CaDiCaL Build Use `./configure && make` to configure and build `cadical` in the default `build` sub-directory. This will also build the library `libcadical.a` as well as the model based tester `mobical`: build/cadical build/mobical build/libcadical.a The header file of the library is in src/cadical.hpp The build process requires GNU make. Using the generated `makefile` with GNU make compiles separate object files, which can be cached (for instance with `ccache`). In order to force parallel build you can use the '-j' option either for 'configure' or with 'make'. If the environment variable 'MAKEFLAGS' is set, e.g., 'MAKEFLAGS=-j ./configure', the same effect is achieved and the generated makefile will use those flags. Options ------- You might want to check out options of `./configure -h`, such as ./configure -c # include assertion checking code ./configure -l # include code to really see what the solver is doing ./configure -a # both above and in addition `-g` for debugging. You can easily use multiple build directories, e.g., mkdir debug; cd debug; ../configure -g; make which compiles and builds a debugging version in the sub-directory `debug`, since `-g` was specified as parameter to `configure`. The object files, the library and the binaries are all independent of those in the default build directory `build`. All source files reside in the `src` directory. The library `libcadical.a` is compiled from all the `.cpp` files except `cadical.cpp` and `mobical.cpp`, which provide the applications, i.e., the stand alone solver `cadical` and the model based tester `mobical`. Manual Build ------------ If you can not or do not want to rely on our `configure` script nor on our build system based on GNU `make`, then this is easily doable as follows. mkdir build cd build for f in ../src/*.cpp; do g++ -O3 -DNDEBUG -DNBUILD -c $f; done ar rc libcadical.a `ls *.o | grep -v ical.o` g++ -o cadical cadical.o -L. -lcadical g++ -o mobical mobical.o -L. -lcadical Note that application object files are excluded from the library. Of course you can use different compilation options as well. Since `build.hpp` is not generated in this flow the `-DNBUILD` flag is necessary though, which avoids dependency of `version.cpp` on `build.hpp`. Consequently you will only get very basic version information compiled into the library and binaries (guaranteed is in essence just the version number of the library). And if you really do not care about compilation time nor caching and just want to build the solver once manually then the following also works. g++ -O3 -DNDEBUG -DNBUILD -o cadical `ls *.cpp | grep -v mobical` Further note that the `configure` script provides some feature checks and might generate additional compiler flags necessary for compilation. You might need to set those yourself or just use a modern C++11 compiler. This manual build process using object files is fast enough in combination with caching solutions such as `ccache`. But it lacks the ability of our GNU make solution to run compilation in parallel without additional parallel process scheduling solutions. Cross-Compilation ----------------- We have preliminary support for cross-compilation using MinGW32 (only tested for a Linux compilation host and Windows-64 target host at this point). There are two steps necessary to make this work. First make sure to be able to execute binaries compiled with the cross-compiler directly. Otherwise 'configure' does not work automatically and you have to build manually (as described above). For instance in order to use `wine` to execute the binaries first install `wine` which for instance on Ubuntu just requires sudo apt install wine Then on Linux you might want to look into the `binfmt_misc` module and as root register the appropriate interpreter for `DOSWin`. cd /proc/sys/fs/binfmt_misc echo ':DOSWin:M::MZ::/usr/bin/wine:' > register Finally simply tell the `configure` script to use the cross-compiler. CXX=i686-w64-mingw32-g++ ./configure -static -lpsapi && make cadical Note the use of '-static', which was necessary for me since by default `wine` did not find `libstdc++` if dynamically linked. There is also a dependency on the 'psapi' library. Also `mobical` does not compile with MinGW32 due to too many Unix dependencies and thus only make 'cadical'. cadical-rel-1.7.4/CONTRIBUTING000066400000000000000000000003531450126715500155240ustar00rootroot00000000000000At this point we want to keep complete ownership in one hand to particularly avoid any additional co-authorship claims. Thus please refrain from generating pull requests. Use the issue tracker or send email to 'biere@jku.at' instead. cadical-rel-1.7.4/LICENSE000066400000000000000000000030441450126715500146770ustar00rootroot00000000000000MIT License Copyright (c) 2016-2021 Armin Biere, Johannes Kepler University Linz, Austria Copyright (c) 2020-2021 Mathias Fleury, Johannes Kepler University Linz, Austria Copyright (c) 2020-2021 Nils Froleyks, Johannes Kepler University Linz, Austria Copyright (c) 2022-2023 Katalin Fazekas, Vienna University of Technology, Austria Copyright (c) 2021-2023 Armin Biere, University of Freiburg, Germany Copyright (c) 2021-2023 Mathias Fleury, University of Freiburg, Germany Copyright (c) 2023 Florian Pollitt, University of Freiburg, Germany 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. cadical-rel-1.7.4/NEWS.md000066400000000000000000000076201450126715500147740ustar00rootroot00000000000000Version 1.7.4 ------------- - As `fork` and `wait` do not exist on Windows writing compressed files through `pipe/fork/exec/wait` has to be disabled for Windows cross compilation to go through. Alternatively one could go back to `popen` for writing compressed files on Windows which however is not safe and therefore we simply decided to disable that feature for windows. Compressed file reading still (and as far we are aware safely) uses `popen` and thus also compiles for Windows. Version 1.7.3 ------------- - Replaced the unsafe `popen` approach for compressed file writing with an explicit `pipe/fork/exec/waitpid` flow and accordingly removed the `--safe` configuration option again. Version 1.7.2 ------------- - Configuration option `--safe` disables writing to a file through `popen` which makes library usage safer. Version 1.7.1 ------------- - Added support for VeriPB proofs (--lrat --lratveripb). - Various fixes: LRAT proofs for constrain (which previously were not traced correctly); internal-external mapping issues for LRAT (worked for user propagator but now also in combination with LRAT); further minor bug fixes. - Added support for LRAT + external propagator in combination. Version 1.7.0 ------------- - Added native LRAT support. Version 1.6.0 ------------- - Added IPASIR-UP functions to the API to support external propagation, external decisions, and clause addition during search. For more details see the following paper at SAT 2023: Katalin Fazekas, Aina Niemetz, Mathias Preiner, Markus Kirchweger, Stefan Szeider and Armin Biere. IPASIR-UP: User Propagators for CDCL. - During decisions the phase set by 'void phase (int lit)' has now higher precedence than the initial phase set by options 'phase' and 'forcephase'. Version 1.5.6 ------------- - Clang formatted all source code (and fixed one failing regression test by disabling 'otfs' for it). - Implementing OTFS during conflict analysis (--otfs). - The last literal set by vivification is instantiated (--vivifyinst). - more accurate tracking of binary clauses in watch lists by updating the size in watch lists. Version 1.5.4 ------------- - Picking highest score literal in assumed clause ('constrain') and caching of satisfied literal by moving them to the front. - Added 'bool flippable (int lit)' to API. - Fixed 'val' to return 'lit' or '-lit' and not just '-1' and '1'. - Allowing 'fixed' between 'constrain' in 'mobical'. - Fixed LZMA magic header. - Added 'bool flip (int lit)' to API. - Fixed different garbage collection times with and without clause IDs (with './configure -l' or just './configure'). This solves issue #44 by John Reeves. At the same time made sure to trigger garbage collection independent on the number of clause header bytes by relying on the number of garbage literals instead. - Fixed 'mmap' usage for FreeBSD (#48 issue of 'yurivict'). - Removed several compiler warnings when using newer compilers, including gcc-11, gcc-12, clang-14, and clang-15. - Replaced 'sprintf' by 'snprintf' to avoid warning on MacOS (thanks to Marijn for bringing this up). - Assigning a C 'FILE' pointer to 'stdout' during initialization fails on MacOS and thus separated declaration and initialization. - Fixed random seed initialization from MAC address issue #47 as used by 'mobical' which produces segmentation faults (thanks to Sam Bayless for pointing this out). Version 1.5.2 ------------- - Updates to documentation and copyright. Version 1.5.2 ------------- - More copyright updates in banner. - Fixed MinGW cross-compilation (see 'BUILD.md'). Version 1.5.1 ------------- - Fixed copyright and added two regression traces. Version 1.5.0 ------------- - Added 'constrain' API call described in our FMCAD'21 paper. - Replaced "`while () push_back ()`" with "`if () resize ()`" idiom (thanks go to Alexander Smal for pointing this out). cadical-rel-1.7.4/README.md000066400000000000000000000044431450126715500151550ustar00rootroot00000000000000[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) CaDiCaL Simplified Satisfiability Solver =============================================================================== The goal of the development of CaDiCaL was to obtain a CDCL solver, which is easy to understand and change, while at the same time not being much slower than other state-of-the-art CDCL solvers. Originally we wanted to also radically simplify the design and internal data structures, but that goal was only achieved partially, at least for instance compared to Lingeling. However, the code is much better documented and CaDiCaL actually became in general faster than Lingeling even though it is missing some preprocessors (mostly parity and cardinality constraint reasoning), which would be crucial to solve certain instances. Use `./configure && make` to configure and build `cadical` and the library `libcadical.a` in the default `build` sub-directory. The header file of the library is [`src/cadical.hpp`](src/cadical.hpp) and includes an example for API usage. See [`BUILD.md`](BUILD.md) for options and more details related to the build process and [`test/README.md`](test/README.md) for testing the library and the solver. Since release 1.5.1 we have a [`NEWS.md`](NEWS.md) file. The solver has the following usage `cadical [ dimacs [ proof ] ]`. See `cadical -h` for more options. If you want to cite CaDiCaL please use the solver description in the latest SAT competition proceedings:
  @inproceedings{BiereFazekasFleuryHeisinger-SAT-Competition-2020-solvers,
    author    = {Armin Biere and Katalin Fazekas and Mathias Fleury and Maximillian Heisinger},
    title     = {{CaDiCaL}, {Kissat}, {Paracooba}, {Plingeling} and {Treengeling}
		 Entering the {SAT Competition 2020}},
    pages     = {51--53},
    editor    = {Tomas Balyo and Nils Froleyks and Marijn Heule and 
		 Markus Iser and Matti J{\"a}rvisalo and Martin Suda},
    booktitle = {Proc.~of {SAT Competition} 2020 -- Solver and Benchmark Descriptions},
    volume    = {B-2020-1},
    series    = {Department of Computer Science Report Series B},
    publisher = {University of Helsinki},
    year      = 2020,
  }
You might also find more information on CaDiCaL at . Armin Biere cadical-rel-1.7.4/VERSION000066400000000000000000000000061450126715500147350ustar00rootroot000000000000001.7.3 cadical-rel-1.7.4/configure000077500000000000000000000313151450126715500156030ustar00rootroot00000000000000#!/bin/sh #--------------------------------------------------------------------------# # Run './configure' to produce a 'makefile' in the 'build' sub-directory or # in any immediate sub-directory different from the 'src', 'scripts' and # 'test' directories. #--------------------------------------------------------------------------# rm -f configure.log #--------------------------------------------------------------------------# # Common default options. all=no debug=no libs="" logging=no check=no competition=no coverage=no profile=no contracts=yes tracing=yes unlocked=yes pedantic=no options="" quiet=no m32=no #--------------------------------------------------------------------------# if [ -f ./scripts/colors.sh ] then . ./scripts/colors.sh elif [ -f ../scripts/colors.sh ] then . ../scripts/colors.sh else BAD="" HILITE="" BOLD="" NORMAL="" fi die () { if [ -f configure.log ] then checklog=" (check also 'configure.log')" else checklog="" fi cecho "${BOLD}configure:${NORMAL} ${BAD}error:${NORMAL} $*${checklog}" exit 1 } msg () { cecho "${BOLD}configure:${NORMAL} $*" } # if we can find the 'color.sh' script source it and overwrite color codes for dir in . .. do [ -f $dir/scripts/colors.sh ] || continue . $dir/scripts/colors.sh || exit 1 break done #--------------------------------------------------------------------------# # Parse and handle command line options. usage () { cat << EOF usage: configure [