toysolver-0.6.0: Assorted decision procedures for SAT, SMT, Max-SAT, PB, MIP, etc

Copyright(c) Masahiro Sakai 2015
LicenseBSD-style
Maintainermasahiro.sakai@gmail.com
Stabilityprovisional
Portabilitynon-portable (ExistentialQuantification, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses)
Safe HaskellNone
LanguageHaskell2010

ToySolver.SAT.Encoder.PBNLC

Contents

Description

 
Synopsis

The encoder type

data Encoder m Source #

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

Defined in ToySolver.SAT.Encoder.PBNLC

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

Defined in ToySolver.SAT.Encoder.PBNLC

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 #

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

Defined in ToySolver.SAT.Encoder.PBNLC

Methods

addClause :: Encoder m -> Clause -> 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 #

newEncoder :: AddPBLin m a => a -> Encoder m -> m (Encoder m) Source #

Adding constraints

addPBNLAtLeast Source #

Arguments

:: AddPBNL m a 
=> 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

:: AddPBNL m a 
=> 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

:: AddPBNL m a 
=> 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

:: AddPBNL m a 
=> 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

:: AddPBNL m a 
=> 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

:: AddPBNL m a 
=> 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.

Linearization

linearizePBSum :: PrimMonad m => Encoder m -> PBSum -> m PBLinSum Source #

Encode a non-linear PBSum into a lienar PBLinSum.

linearizePBSum enc s is equivalent to linearizePBSumWithPolarity enc polarityBoth.

linearizePBSumWithPolarity :: PrimMonad m => Encoder m -> Polarity -> PBSum -> m PBLinSum Source #

Linearize a non-linear PBSum into a lienar PBLinSum.

The input PBSum is assumed to occur only in specified polarity.

  • If polarityPosOccurs p, the value of resulting PBLinSum is greater than or equal to the value of original PBSum.
  • If polarityNegOccurs p, the value of resulting PBLinSum is lesser than or equal to the value of original PBSum.