toysolver-0.7.0: Assorted decision procedures for SAT, SMT, Max-SAT, PB, MIP, etc
Copyright(c) Masahiro Sakai 2012
LicenseBSD-style
Maintainermasahiro.sakai@gmail.com
Stabilityprovisional
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010
Extensions
  • ScopedTypeVariables
  • BangPatterns
  • TypeSynonymInstances
  • FlexibleInstances
  • ConstrainedClassMethods
  • MultiParamTypeClasses
  • FunctionalDependencies
  • ExplicitForAll

ToySolver.SAT.Types

Description

 
Synopsis

Variable

type Var = Int Source #

Variable is represented as positive integers (DIMACS format).

Model

class IModel a where Source #

Methods

evalVar :: a -> Var -> Bool Source #

Instances

Instances details
IModel (Var -> Bool) Source # 
Instance details

Defined in ToySolver.SAT.Types

Methods

evalVar :: (Var -> Bool) -> Var -> Bool Source #

IModel (UArray Var Bool) Source # 
Instance details

Defined in ToySolver.SAT.Types

Methods

evalVar :: UArray Var Bool -> Var -> Bool Source #

IModel (Array Var Bool) Source # 
Instance details

Defined in ToySolver.SAT.Types

Methods

evalVar :: Array Var Bool -> Var -> Bool Source #

type Model = UArray Var Bool Source #

A model is represented as a mapping from variables to its values.

restrictModel :: Int -> Model -> Model Source #

Restrict model to first nv variables.

Literal

type Lit = Int Source #

Positive (resp. negative) literals are represented as positive (resp. negative) integers. (DIMACS format).

literal Source #

Arguments

:: Var

variable

-> Bool

polarity

-> Lit 

Construct a literal from a variable and its polarity. True (resp False) means positive (resp. negative) literal.

litNot :: Lit -> Lit Source #

Negation of the Lit.

litVar :: Lit -> Var Source #

Underlying variable of the Lit

litPolarity :: Lit -> Bool Source #

Polarity of the Lit. True means positive literal and False means negative literal.

evalLit :: IModel m => m -> Lit -> Bool Source #

Clause

type Clause = [Lit] Source #

Disjunction of Lit.

normalizeClause :: Clause -> Maybe Clause Source #

Normalizing clause

Nothing if the clause is trivially true.

instantiateClause :: forall m. Monad m => (Lit -> m LBool) -> Clause -> m (Maybe Clause) Source #

Packed Clause

Cardinality Constraint

type AtLeast = ([Lit], Int) Source #

type Exactly = ([Lit], Int) Source #

instantiateAtLeast :: forall m. Monad m => (Lit -> m LBool) -> AtLeast -> m AtLeast Source #

(Linear) Pseudo Boolean Constraint

normalizePBLinSum :: (PBLinSum, Integer) -> (PBLinSum, Integer) Source #

normalizing PB term of the form c1 x1 + c2 x2 ... cn xn + c into d1 x1 + d2 x2 ... dm xm + d where d1,...,dm ≥ 1.

normalizePBLinAtLeast :: PBLinAtLeast -> PBLinAtLeast Source #

normalizing PB constraint of the form c1 x1 + c2 cn ... cn xn >= b.

normalizePBLinExactly :: PBLinExactly -> PBLinExactly Source #

normalizing PB constraint of the form c1 x1 + c2 cn ... cn xn = b.

Non-linear Pseudo Boolean constraint

type PBTerm = (Integer, [Lit]) Source #

type PBSum = [PBTerm] Source #

XOR Clause

type XORClause = ([Lit], Bool) Source #

XOR clause

'([l1,l2..ln], b)' means l1 ⊕ l2 ⊕ ⋯ ⊕ ln = b.

Note that:

  • True can be represented as ([], False)
  • False can be represented as ([], True)

normalizeXORClause :: XORClause -> XORClause Source #

Normalize XOR clause

instantiateXORClause :: forall m. Monad m => (Lit -> m LBool) -> XORClause -> m XORClause Source #

Type classes for solvers

class Monad m => NewVar m a | a -> m where Source #

Minimal complete definition

newVar

Methods

newVar :: a -> m Var Source #

Add a new variable

newVars :: a -> Int -> m [Var] Source #

Add variables. newVars a n = replicateM n (newVar a), but maybe faster.

newVars_ :: a -> Int -> m () Source #

Add variables. newVars_ a n = newVars a n >> return (), but maybe faster.

Instances

Instances details
NewVar IO Solver Source # 
Instance details

Defined in ToySolver.SAT.Solver.CDCL

Methods

newVar :: Solver -> IO Var Source #

newVars :: Solver -> Int -> IO [Var] Source #

newVars_ :: Solver -> Int -> IO () Source #

PrimMonad m => NewVar m (PBStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.PB

Methods

newVar :: PBStore m -> m Var Source #

newVars :: PBStore m -> Int -> m [Var] Source #

newVars_ :: PBStore m -> Int -> m () Source #

Monad m => NewVar m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Tseitin

Methods

newVar :: Encoder m -> m Var Source #

newVars :: Encoder m -> Int -> m [Var] Source #

newVars_ :: Encoder m -> Int -> m () Source #

Monad m => NewVar m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PBNLC

Methods

newVar :: Encoder m -> m Var Source #

newVars :: Encoder m -> Int -> m [Var] Source #

newVars_ :: Encoder m -> Int -> m () Source #

Monad m => NewVar m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PB

Methods

newVar :: Encoder m -> m Var Source #

newVars :: Encoder m -> Int -> m [Var] Source #

newVars_ :: Encoder m -> Int -> m () Source #

Monad m => NewVar m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Cardinality.Internal.Totalizer

Methods

newVar :: Encoder m -> m Var Source #

newVars :: Encoder m -> Int -> m [Var] Source #

newVars_ :: Encoder m -> Int -> m () Source #

Monad m => NewVar m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Cardinality

Methods

newVar :: Encoder m -> m Var Source #

newVars :: Encoder m -> Int -> m [Var] Source #

newVars_ :: Encoder m -> Int -> m () Source #

PrimMonad m => NewVar m (CNFStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.CNF

Methods

newVar :: CNFStore m -> m Var Source #

newVars :: CNFStore m -> Int -> m [Var] Source #

newVars_ :: CNFStore m -> Int -> m () Source #

class NewVar m a => AddClause m a | a -> m where Source #

Methods

addClause :: a -> Clause -> m () Source #

Instances

Instances details
AddClause IO Solver Source # 
Instance details

Defined in ToySolver.SAT.Solver.CDCL

Methods

addClause :: Solver -> Clause -> IO () Source #

PrimMonad m => AddClause m (PBStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.PB

Methods

addClause :: PBStore m -> Clause -> m () Source #

Monad m => AddClause m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Tseitin

Methods

addClause :: Encoder m -> Clause -> m () Source #

Monad m => AddClause m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PBNLC

Methods

addClause :: Encoder m -> Clause -> m () Source #

Monad m => AddClause m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PB

Methods

addClause :: Encoder m -> Clause -> m () Source #

Monad m => AddClause m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Cardinality.Internal.Totalizer

Methods

addClause :: Encoder m -> Clause -> m () Source #

Monad m => AddClause m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Cardinality

Methods

addClause :: Encoder m -> Clause -> m () Source #

PrimMonad m => AddClause m (CNFStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.CNF

Methods

addClause :: CNFStore m -> Clause -> m () Source #

class AddClause m a => AddCardinality m a | a -> m where Source #

Minimal complete definition

addAtLeast

Methods

addAtLeast Source #

Arguments

:: a 
-> [Lit]

set of literals {l1,l2,..} (duplicated elements are ignored)

-> Int

n

-> m () 

Add a cardinality constraints atleast({l1,l2,..},n).

addAtMost Source #

Arguments

:: a 
-> [Lit]

set of literals {l1,l2,..} (duplicated elements are ignored)

-> Int

n

-> m () 

Add a cardinality constraints atmost({l1,l2,..},n).

addExactly Source #

Arguments

:: a 
-> [Lit]

set of literals {l1,l2,..} (duplicated elements are ignored)

-> Int

n

-> m () 

Add a cardinality constraints exactly({l1,l2,..},n).

Instances

Instances details
AddCardinality IO Solver Source # 
Instance details

Defined in ToySolver.SAT.Solver.CDCL

Methods

addAtLeast :: Solver -> [Lit] -> Int -> IO () Source #

addAtMost :: Solver -> [Lit] -> Int -> IO () Source #

addExactly :: Solver -> [Lit] -> Int -> IO () Source #

PrimMonad m => AddCardinality m (PBStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.PB

Methods

addAtLeast :: PBStore m -> [Lit] -> Int -> m () Source #

addAtMost :: PBStore m -> [Lit] -> Int -> m () Source #

addExactly :: PBStore m -> [Lit] -> Int -> m () Source #

Monad m => AddCardinality m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PBNLC

Methods

addAtLeast :: Encoder m -> [Lit] -> Int -> m () Source #

addAtMost :: Encoder m -> [Lit] -> Int -> m () Source #

addExactly :: Encoder m -> [Lit] -> Int -> m () Source #

PrimMonad m => AddCardinality m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PB

Methods

addAtLeast :: Encoder m -> [Lit] -> Int -> m () Source #

addAtMost :: Encoder m -> [Lit] -> Int -> m () Source #

addExactly :: Encoder m -> [Lit] -> Int -> m () Source #

PrimMonad m => AddCardinality m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.Cardinality

Methods

addAtLeast :: Encoder m -> [Lit] -> Int -> m () Source #

addAtMost :: Encoder m -> [Lit] -> Int -> m () Source #

addExactly :: Encoder m -> [Lit] -> Int -> m () Source #

class AddCardinality m a => AddPBLin m a | a -> m where Source #

Minimal complete definition

addPBAtLeast

Methods

addPBAtLeast Source #

Arguments

:: a 
-> PBLinSum

list of terms [(c1,l1),(c2,l2),…]

-> Integer

n

-> m () 

Add a pseudo boolean constraints c1*l1 + c2*l2 + … ≥ n.

addPBAtMost Source #

Arguments

:: a 
-> PBLinSum

list of [(c1,l1),(c2,l2),…]

-> Integer

n

-> m () 

Add a pseudo boolean constraints c1*l1 + c2*l2 + … ≤ n.

addPBExactly Source #

Arguments

:: a 
-> PBLinSum

list of terms [(c1,l1),(c2,l2),…]

-> Integer

n

-> m () 

Add a pseudo boolean constraints c1*l1 + c2*l2 + … = n.

addPBAtLeastSoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> PBLinSum

list of terms [(c1,l1),(c2,l2),…]

-> Integer

n

-> m () 

Add a soft pseudo boolean constraints sel ⇒ c1*l1 + c2*l2 + … ≥ n.

addPBAtMostSoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> PBLinSum

list of terms [(c1,l1),(c2,l2),…]

-> Integer

n

-> m () 

Add a soft pseudo boolean constraints sel ⇒ c1*l1 + c2*l2 + … ≤ n.

addPBExactlySoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> PBLinSum

list of terms [(c1,l1),(c2,l2),…]

-> Integer

n

-> m () 

Add a soft pseudo boolean constraints sel ⇒ c1*l1 + c2*l2 + … = n.

Instances

Instances details
AddPBLin IO Solver Source # 
Instance details

Defined in ToySolver.SAT.Solver.CDCL

PrimMonad m => AddPBLin m (PBStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.PB

Monad m => AddPBLin m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PBNLC

PrimMonad m => AddPBLin m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PB

class AddPBLin m a => AddPBNL m a | a -> m where Source #

Minimal complete definition

addPBNLAtLeast

Methods

addPBNLAtLeast Source #

Arguments

:: a 
-> PBSum

List of terms [(c1,ls1),(c2,ls2),…]

-> Integer

n

-> m () 

Add a non-linear pseudo boolean constraints c1*ls1 + c2*ls2 + … ≥ n.

addPBNLAtMost Source #

Arguments

:: a 
-> PBSum

List of terms [(c1,ls1),(c2,ls2),…]

-> Integer

n

-> m () 

Add a non-linear pseudo boolean constraints c1*ls1 + c2*ls2 + … ≥ n.

addPBNLExactly Source #

Arguments

:: a 
-> PBSum

List of terms [(c1,ls1),(c2,ls2),…]

-> Integer

n

-> m () 

Add a non-linear pseudo boolean constraints c1*ls1 + c2*ls2 + … = n.

addPBNLAtLeastSoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> PBSum

List of terms [(c1,ls1),(c2,ls2),…]

-> Integer

n

-> m () 

Add a soft non-linear pseudo boolean constraints sel ⇒ c1*ls1 + c2*ls2 + … ≥ n.

addPBNLAtMostSoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> PBSum

List of terms [(c1,ls1),(c2,ls2),…]

-> Integer

n

-> m () 

Add a soft non-linear pseudo boolean constraints sel ⇒ c1*ls1 + c2*ls2 + … ≤ n.

addPBNLExactlySoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> PBSum

List of terms [(c1,ls1),(c2,ls2),…]

-> Integer

n

-> m () 

Add a soft non-linear pseudo boolean constraints lit ⇒ c1*ls1 + c2*ls2 + … = n.

Instances

Instances details
PrimMonad m => AddPBNL m (PBStore m) Source # 
Instance details

Defined in ToySolver.SAT.Store.PB

PrimMonad m => AddPBNL m (Encoder m) Source # 
Instance details

Defined in ToySolver.SAT.Encoder.PBNLC

class AddClause m a => AddXORClause m a | a -> m where Source #

Minimal complete definition

addXORClause

Methods

addXORClause Source #

Arguments

:: a 
-> [Lit]

literals [l1, l2, …, ln]

-> Bool

rhs

-> m () 

Add a parity constraint l1 ⊕ l2 ⊕ … ⊕ ln = rhs

addXORClauseSoft Source #

Arguments

:: a 
-> Lit

Selector literal sel

-> [Lit]

literals [l1, l2, …, ln]

-> Bool

rhs

-> m () 

Add a soft parity constraint sel ⇒ l1 ⊕ l2 ⊕ … ⊕ ln = rhs

Instances

Instances details
AddXORClause IO Solver Source # 
Instance details

Defined in ToySolver.SAT.Solver.CDCL

Methods

addXORClause :: Solver -> [Lit] -> Bool -> IO () Source #

addXORClauseSoft :: Solver -> Lit -> [Lit] -> Bool -> IO () Source #