pax_global_header 0000666 0000000 0000000 00000000064 14501267155 0014520 g ustar 00root root 0000000 0000000 52 comment=a9305c2f58e46b7f39fed4e9cf63d61d0dae7ef7
cadical-rel-1.7.4/ 0000775 0000000 0000000 00000000000 14501267155 0013671 5 ustar 00root root 0000000 0000000 cadical-rel-1.7.4/.clang-format 0000664 0000000 0000000 00000000145 14501267155 0016244 0 ustar 00root root 0000000 0000000 AlignEscapedNewlines: DontAlign
ColumnLimit: 76
SpaceBeforeParens: Always
SpaceAfterCStyleCast: true
cadical-rel-1.7.4/.gitignore 0000664 0000000 0000000 00000000017 14501267155 0015657 0 ustar 00root root 0000000 0000000 build
makefile
cadical-rel-1.7.4/BUILD.md 0000664 0000000 0000000 00000010516 14501267155 0015055 0 ustar 00root root 0000000 0000000 # 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/CONTRIBUTING 0000664 0000000 0000000 00000000353 14501267155 0015524 0 ustar 00root root 0000000 0000000 At 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/LICENSE 0000664 0000000 0000000 00000003044 14501267155 0014677 0 ustar 00root root 0000000 0000000 MIT 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.md 0000664 0000000 0000000 00000007620 14501267155 0014774 0 ustar 00root root 0000000 0000000 Version 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.md 0000664 0000000 0000000 00000004443 14501267155 0015155 0 ustar 00root root 0000000 0000000 [](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/VERSION 0000664 0000000 0000000 00000000006 14501267155 0014735 0 ustar 00root root 0000000 0000000 1.7.3
cadical-rel-1.7.4/configure 0000775 0000000 0000000 00000031315 14501267155 0015603 0 ustar 00root root 0000000 0000000 #!/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 [