debian/0000755000000000000000000000000012170065742007172 5ustar debian/compat0000644000000000000000000000000212170065057010367 0ustar 9 debian/minisat-user-guide.html0000644000000000000000000002010711316362464013575 0ustar MiniSAT User Guide: How to use the MiniSAT SAT Solver

MiniSAT User Guide: How to use the MiniSAT SAT Solver

by David A. Wheeler, version 1.00 (2008-06-28)

MiniSat is a minimalistic, open-source Boolean satisfiability problem (SAT) solver, developed for both researchers and developers; it is released under the "MIT license".

A SAT solver can determine if it is possible to find assignments to boolean variables that would make a given expression true, if the expression is written with only AND, OR, NOT, parentheses, and boolean variables. If it's satisfiable, most SAT solvers (including MiniSAT) can also show a set of assignments that make the expression true. Many problems can be broken down into a large SAT problem (perhaps with thousands of variables), so SAT solvers have a variety of uses.

This article is a brief user guide (documentation) for the MiniSAT (MiniSAT2) program. It describes how to use MiniSAT, including its input format, options, and output format.

Conjunctive Normal Form (CNF)

Like many SAT solvers, MiniSAT requires that its input be in conjunctive normal form (CNF or cnf). CNF is built from these building blocks:

An example of CNF is:

  (x1 | -x5 | x4) &
  (-x1 | x5 | x3 | x4) &
  (-x3 | x4).

Any boolean expression can be converted into CNF; algorithms and code for doing so are available elsewhere (e.g., see "Artificial Intelligence: A modern Approach" by Russel and Norvig, 1995).

MiniSAT input format

MiniSAT, like most SAT solvers, accepts its input in a simplified "DIMACS CNF" format, which is a simple text format. Every line beginning "c" is a comment. The first non-comment line must be of the form:

 p cnf NUMBER_OF_VARIABLES NUMBER_OF_CLAUSES

Each of the non-comment lines afterwards defines a clause. Each of these lines is a space-separated list of variables; a positive value means that corresponding variable (so 4 means x4), and a negative value means the negation of that variable (so -5 means -x5). Each line must end in a space and the number 0.

So the CNF expression above would be written as:

 c Here is a comment.
 p cnf 5 3
 1 -5 4 0
 -1 5 3 4 0
 -3 -4 0

The "p cnf" line means that this is SAT problem in CNF format with 5 variables and 3 clauses. The first line after it is the first clause, meaning x1 | -x5 | x4.

You can view this as a single expression. Alternatively, you can view this as a set of clauses, and the solver's job is to find the set of boolean variable assignments that make all the clauses true.

The SAT 2004 competition has more information.

Invoking MiniSAT

MiniSAT's usage is:

 minisat [options] [INPUT-FILE [RESULT-OUTPUT-FILE]]

The INPUT-FILE is in DIMACS CNF format as described above, either plain text or gzipped. You can invoke it with the options "-h" or "--help" to see the other options.

The program's options include:

  -pre           = {none,once} [Turn on preprocessor]
  -asymm
  -rcheck
  -grow          = NUM [ must be greater than 0 ]
  -polarity-mode = {true,false,rnd}
  -decay         = NUM [ 0 - 1 ]
  -rnd-freq      = NUM [ 0 - 1 ]
  -dimacs        = OUTPUT-FILE
  -verbosity     = {0,1,2}

Options with a value must be immediately followed by "=" and its value, e.g.:

 minisat -pre=once 

For many problems, using the preprocessor is a good idea (-pre=once).

MiniSAT output format

When run, miniSAT sends to standard error a number of different statistics about its execution. It will output to standard output either "SATISFIABLE" or "UNSATISFIABLE" (without the quote marks), depending on whether or not the expression is satisfiable or not.

If you give it a RESULT-OUTPUT-FILE, miniSAT will write text to the file. The first line will be "SAT" (if it is satisfiable) or "UNSAT" (if it is not). If it is SAT, the second line will be set of assignments to the boolean variables that satisfies the expression. (There may be many others; it simply has to produce one assignment).

So for the example above, it will produce in the output file:

 SAT
 1 2 -3 4 5 0

This means that it is satisfiable, with x1=t, x2=t, x3=f, x4=t, and x5=t (where t is true and f is false). Going back to our original example, we should see that this is a solution:

 (x1 | -x5 | x4)  = t | -t | t = t
 (-x1 | x5 | x3 | x4)  = -t | t | f | t = t
 (-x3 | x4) = -f | t = t

Getting more solutions

If you want to get another solution, the "obvious" way is to add, as a new clause, the negated form of the previous solution. E.G., for our example, we could take:

 1 2 -3 4 5 0
and create this new input (note that the count of clauses has increased):
 p cnf 5 4
 1 -5 4 0
 -1 5 3 4 0
 -3 -4 0
 -1 -2 3 -4 -5 0

If we put this in file "second.in", and run:

 minisat second.in second.out
We will get a new solution; here's second.out:
 SAT
 1 -2 -3 4 5 0
IE., x1=t, x2=f, x3=f, x4=t, and x5=t. This is a different solution from the previous one, because x2=f instead of x2=t. We can confirm this (it's the same as last time, because x2 isn't even in any of the clauses):
 (x1 | -x5 | x4)  = t | -t | t = t
 (-x1 | x5 | x3 | x4)  = -t | t | f | t = t
 (-x3 | x4) = -f | t = t

For more information

You can get more information from:


This article was written by David A. Wheeler, and is released to the public domain. If you use it or reference it, please credit David A. Wheeler (though this is not a requirement for its use). You can get this version at http://www.dwheeler.com/essays/minisat-user-guide-1.0.html, or the latest version at http://www.dwheeler.com/essays/minisat-user-guide.html. debian/source/0000755000000000000000000000000011333002752010462 5ustar debian/source/format0000644000000000000000000000001411355725556011712 0ustar 3.0 (quilt) debian/manpages0000644000000000000000000000002111544342105010674 0ustar debian/minisat.1 debian/changelog0000644000000000000000000000662312170065115011045 0ustar minisat2 (1:2.2.1-4) unstable; urgency=low * Require a non-zero memory limit (closes: #716229) * Bumped standards version to 3.9.4 (no changes) * Bumped compatibility level to 9 -- Michael Tautschnig Fri, 12 Jul 2013 21:42:02 +0100 minisat2 (1:2.2.1-3) unstable; urgency=low * Updated man page (closes: #638217) -- Michael Tautschnig Sat, 03 Sep 2011 21:03:43 +0100 minisat2 (1:2.2.1-2) unstable; urgency=low * Include headers from simp/ directory in package * Bumped standards version to 3.9.2 (no changes) -- Michael Tautschnig Mon, 13 Jun 2011 15:13:41 +0200 minisat2 (1:2.2.1-1) unstable; urgency=low * Upload of package with revamped build system to unstable. * Rename main binary package to minisat, added transitional package. * Use debhelper 7. -- Michael Tautschnig Tue, 29 Mar 2011 13:31:53 +0200 minisat2 (1:2.2.0-3) experimental; urgency=low * Current upstream git snapshot with fully reworked build system. - Properly builds shared library (closes: #606846). - Fixes include hierarchy (closes: #606643). -- Michael Tautschnig Thu, 20 Jan 2011 22:37:08 +0100 minisat2 (1:2.2.0-2) unstable; urgency=low * Fix FTBFS due to undefined _FPU_{EXTENDED,DOUBLE} (closes: #590254). * Fix FTBFS due to undefined memUsedPeak (closes: #590255). -- Michael Tautschnig Sun, 25 Jul 2010 22:02:54 +0200 minisat2 (1:2.2.0-1) unstable; urgency=low * New upstream version. - Introduced epoch as new versioning scheme is in use. - Added Vcs-Git and Vcs-Browser control fields. - Bumped SO version as all functions have been moved into a namespace. - Added patch 9bd8749. * Switch to dpkg-source 3.0 (quilt) format * Bumped standards version to 3.9.0 (no changes) -- Michael Tautschnig Sun, 25 Jul 2010 08:42:10 +0200 minisat2 (070721-8) unstable; urgency=low * Added Homepage field. -- Michael Tautschnig Tue, 29 Dec 2009 14:25:31 +0100 minisat2 (070721-7) unstable; urgency=low * Bumped standards version to 3.8.3 (no changes). * Use Copyright instead of (C) in debian/copyright. * Build dynamic library (thanks Pietro Abate for ideas and patches). (Closes: #537372) -- Michael Tautschnig Tue, 29 Dec 2009 12:19:36 +0100 minisat2 (070721-6) unstable; urgency=low * Completed man page (Closes: #501983) -- Michael Tautschnig Sun, 26 Oct 2008 20:35:45 +0100 minisat2 (070721-5) unstable; urgency=low * Also test for _FPU_GETCW being defined to fix FTBFS on alpha -- Michael Tautschnig Sun, 07 Sep 2008 21:09:47 +0200 minisat2 (070721-4) unstable; urgency=low * Added David A. Wheeler's nice intro to SAT solving -- Michael Tautschnig Sun, 07 Sep 2008 19:32:20 +0200 minisat2 (070721-3) unstable; urgency=low * Test, whether _FPU_EXTENDED and _FPU_DOUBLE are defined (fixes FTBFS) * Improved description of package (Closes: #486602) -- Michael Tautschnig Tue, 17 Jun 2008 21:51:01 +0000 minisat2 (070721-2) unstable; urgency=low * Added libz-dev build-dep to fix FTBFS -- Michael Tautschnig Mon, 16 Jun 2008 12:51:36 +0000 minisat2 (070721-1) unstable; urgency=low * Initial release (Closes: #484989) -- Michael Tautschnig Sat, 7 Jun 2008 17:10:44 +0200 debian/copyright0000644000000000000000000000323011316373044011121 0ustar This package was debianized by Michael Tautschnig on Sat, 7 Jun 2008 17:10:44 +0200. It was downloaded from http://minisat.se/downloads/minisat2-070721.zip Upstream Author: Niklas Eén , Niklas Sörensson Copyright: 2003-2006, Niklas Een, Niklas Sorensson 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. The file minisat-user-guide.html is Copyright 2008, David A. Wheeler and has been downloaded from http://www.dwheeler.com/essays/minisat-user-guide.html. It is released to the public domain. The Debian packaging is Copyright 2008, Michael Tautschnig and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. debian/minisat.10000644000000000000000000001077111630533706010726 0ustar .\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH MINISAT 1 "September 3, 2011" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME minisat \- fast and lightweight SAT solver .SH SYNOPSIS .B minisat .RI [ options ] " input-file .I result-output-file .B minisat takes as input a plain or gzipped DIMACS formatted file. The satisfiability of this input problem is indicated both via standard output and the return value. .SH DESCRIPTION This manual page documents briefly the .B minisat command. MiniSat is a minimalistic, open-source SAT solver, developed to help researchers and developers alike to get started on SAT. Winning all the industrial categories of the SAT 2005 competition, MiniSat is a good starting point both for future research in SAT, and for applications using SAT. Despite the NP completeness of the satisfiability problem of Boolean formulas (SAT), SAT solvers are often able to decide this problem in a reasonable time frame. As all other NP complete problems are reducible to SAT, the solvers have become a general purpose tool for this class of problems. .PP .SH OPTIONS .B \-\-help, \-\-help-verb Show (verbose) summary of options. .TP .B \-pre, \-no-pre Enable (default) or disable preprocessing. .TP .B \-verb {0,1,2} Set the verbosity of informational output (set to 0 for silent, defaults to 1) .TP .B \-cpu-lim Set a limit on CPU time (seconds, defaults to 2147483647). .TP .B \-mem-lim Set a limit on memory usage (MB, defaults to 2147483647). .TP .B \-dimacs Print (possibly preprocessed) input problem in DIMACS format and stop. .TP .B \-luby, \-no-luby Enable (default) or disable the Luby restart sequence. .TP .B \-rnd-init, \-no-rnd-init Randomize the initial activity values (defaults to off). .TP .B \-gc-frac The fraction of wasted memory allowed before a garbage collection is triggered (non-negative, defaults to 0.2). .TP .B \-rinc .TP .B \-var-decay Variable activity decay factor (0 <= value <= 1, defaults to 0.95). .TP .B \-cla-decay Clause activity decay factor (0 <= value <= 1, defaults to 0.999). .TP .B \-rnd-freq The frequency with which the decision heuristic tries to choose a random variable (0 <= value <= 1, defaults to 0). .TP .B \-rnd-seed Random seed for random variable selection (non-negative, defaults to 9.16483e+07). .TP .B \-phase-saving {0,1,2} Controls the level of phase saving (0=none, 1=limited, 2=full, defaults to 2). .TP .B \-ccmin-mode {0,1,2} Controls conflict clause minimization (0=none, 1=basic, 2=deep, defaults to 2) .TP .B \-rfirst The base restart interval (positive, defaults to 100). .TP .B \-rcheck, \-no-rcheck Enable (costly) or disable (default) checking for redundant clauses. .TP .B \-asymm, \-no-asymm Shrink clauses by asymmetric branching (disabled by default). .TP .B \-elim, \-no-elim Perform variable elimination (enabled by default). .TP .B \-simp-gc-frac The fraction of wasted memory allowed before a garbage collection is triggered during simplification (non-negative, defaults to 0.5). .TP .B \-sub-lim Do not check if subsumption against a clause larger than this value (\-1 <= value, defaults to 1000). \-1 means no limit. .TP .B \-cl-lim Variables are not eliminated if they produce a resolvent with a length above this limit (\-1 <= value, defaults to 20). \-1 means no limit. .TP .B \-grow Number of additional clauses that may be introduced when eliminating a variable. Defaults to 0. .PP .SH EXIT CODES .B 0 if parsing the command line options fails, usage information is requested, or output of the input problem in DIMACS format succeeds. .B 1 if interrupted by SIGINT or if an input file cannot be read, .B 3 if parsing the input fails, .B 10 if found satisfiable, and .B 20 if found unsatisfiable. .PP .SH AUTHOR minisat was written by Niklas Een, Niklas Sorensson .PP This manual page was written by Michael Tautschnig , for the Debian project (but may be used by others). debian/install0000644000000000000000000000044111575406334010566 0ustar minisat/core/*.h usr/include/minisat/core/ minisat/mtl/*.h usr/include/minisat/mtl/ minisat/utils/*.h usr/include/minisat/utils/ minisat/simp/*.h usr/include/minisat/simp/ build/release/lib/libminisat.a usr/lib/ build/dynamic/lib/libminisat.so* usr/lib/ build/dynamic/bin/minisat usr/bin/ debian/docs0000644000000000000000000000003711316362464010047 0ustar debian/minisat-user-guide.html debian/watch0000644000000000000000000000076212170065630010224 0ustar # Compulsory line, this is a version 3 file version=3 # Uncomment to examine a Webpage # #http://www.example.com/downloads.php minisat2-(.*)\.tar\.gz # Uncomment to examine a Webserver directory http://minisat.se/downloads/minisat-(.*)\.tar.gz # Uncommment to examine a FTP server #ftp://ftp.example.com/pub/minisat2-(.*)\.tar\.gz debian uupdate # Uncomment to find new files on sourceforge, for debscripts >= 2.9 # http://sf.net/minisat2/minisat2-(.*)\.tar\.gz debian/doc-base0000644000000000000000000000074111544344001010564 0ustar Document: minisat-user-guide Title: MiniSAT User Guide: How to use the MiniSAT SAT Solver Author: David A. Wheeler Abstract: This article is a brief user guide (documentation) for the MiniSAT (MiniSAT2) program. It describes how to use MiniSAT, including its input format, options, and output format. Section: Science/Mathematics Format: HTML Index: /usr/share/doc/minisat/minisat-user-guide.html Files: /usr/share/doc/minisat/minisat-user-guide.html debian/patches/0000755000000000000000000000000012170065716010622 5ustar debian/patches/memory_limit0000644000000000000000000000367112170065334013256 0ustar Description: TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. . minisat2 (1:2.2.1-4) unstable; urgency=low . * Require a non-zero memory limit (closes: #716229) * Bumped standards version to 3.9.4 (no changes) * Bumped compatibility level to 9 Author: Michael Tautschnig Bug-Debian: http://bugs.debian.org/716229 --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: , Bug: Bug-Debian: http://bugs.debian.org/ Bug-Ubuntu: https://launchpad.net/bugs/ Forwarded: Reviewed-By: Last-Update: --- minisat2-2.2.1.orig/minisat/simp/Main.cc +++ minisat2-2.2.1/minisat/simp/Main.cc @@ -85,7 +85,7 @@ int main(int argc, char** argv) BoolOption pre ("MAIN", "pre", "Completely turn on/off any preprocessing.", true); StringOption dimacs ("MAIN", "dimacs", "If given, stop after preprocessing and write the result to this file."); IntOption cpu_lim("MAIN", "cpu-lim","Limit on CPU time allowed in seconds.\n", INT32_MAX, IntRange(0, INT32_MAX)); - IntOption mem_lim("MAIN", "mem-lim","Limit on memory usage in megabytes.\n", INT32_MAX, IntRange(0, INT32_MAX)); + IntOption mem_lim("MAIN", "mem-lim","Limit on memory usage in megabytes.\n", INT32_MAX, IntRange(64, INT32_MAX)); parseOptions(argc, argv, true); debian/patches/series0000644000000000000000000000001512170065716012033 0ustar memory_limit debian/control0000644000000000000000000000253012170065547010600 0ustar Source: minisat2 Section: science Priority: extra Maintainer: Michael Tautschnig Build-Depends: debhelper (>= 9), libz-dev Standards-Version: 3.9.4 Homepage: http://minisat.se/ Vcs-Browser: http://github.com/niklasso/minisat Vcs-Git: git://gitorious.org/minisat-debian/minisat2.git Package: minisat Architecture: any Provides: minisat2 Replaces: minisat2 (<< 1:2.2.1-1) Conflicts: minisat2 (<< 1:2.2.1-1) Depends: ${shlibs:Depends}, ${misc:Depends} Description: Fast and lightweight SAT solver Despite the NP completeness of the satisfiability problem of Boolean formulas (SAT), SAT solvers are often able to decide this problem in a reasonable time frame. As all other NP complete problems are reducible to SAT, the solvers have become a general purpose tool for this class of problems. . MiniSat is a minimalistic, open-source SAT solver, developed to help researchers and developers alike to get started on SAT. Winning all the industrial categories of the SAT 2005 competition, MiniSat is a good starting point both for future research in SAT, and for applications using SAT. Package: minisat2 Section: oldlibs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, minisat Description: Transitional package for minisat This is a transitional package for minisat, and can be safely removed after the installation is complete. debian/rules0000755000000000000000000000105211544344534010253 0ustar #!/usr/bin/make -f # -*- makefile -*- # # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 %: dh $@ override_dh_auto_configure: dh_testdir $(MAKE) config prefix=/usr override_dh_installchangelogs: dh_installchangelogs doc/ReleaseNotes-2.2.0.txt