toysolver-0.5.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 # 
Monad m => AddPBLin m (Encoder m) Source # 
Monad m => AddCardinality m (Encoder m) Source # 

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 # 

Methods

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

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

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 :: AddPBNL m a => a -> PBSum -> Integer -> m () Source #

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

addPBNLAtMost :: AddPBNL m a => a -> PBSum -> Integer -> m () Source #

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

addPBNLExactly :: AddPBNL m a => a -> PBSum -> Integer -> m () Source #

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

addPBNLAtLeastSoft :: AddPBNL m a => a -> Lit -> PBSum -> Integer -> m () Source #

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

addPBNLAtMostSoft :: AddPBNL m a => a -> Lit -> PBSum -> Integer -> m () Source #

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

addPBNLExactlySoft :: AddPBNL m a => a -> Lit -> PBSum -> Integer -> m () Source #

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.