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

Copyright(c) Masahiro Sakai 2012-2013
LicenseBSD-style
Maintainermasahiro.sakai@gmail.com
Stabilityprovisional
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

ToySolver.Data.Polynomial

Contents

Description

Synopsis

Polynomial type

data Polynomial r v Source #

Polynomial over commutative ring r

Instances
SQFree (UPolynomial Integer) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.SquareFree

SQFree (UPolynomial Rational) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.SquareFree

KnownNat p => SQFree (UPolynomial (PrimeField p)) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.FiniteField

Factor (UPolynomial Integer) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.Integer

Factor (UPolynomial Rational) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.Rational

KnownNat p => Factor (UPolynomial (PrimeField p)) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.FiniteField

(Eq v, Eq r) => Eq (Polynomial r v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

(==) :: Polynomial r v -> Polynomial r v -> Bool #

(/=) :: Polynomial r v -> Polynomial r v -> Bool #

(Eq k, Num k, Ord v) => Num (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

(+) :: Polynomial k v -> Polynomial k v -> Polynomial k v #

(-) :: Polynomial k v -> Polynomial k v -> Polynomial k v #

(*) :: Polynomial k v -> Polynomial k v -> Polynomial k v #

negate :: Polynomial k v -> Polynomial k v #

abs :: Polynomial k v -> Polynomial k v #

signum :: Polynomial k v -> Polynomial k v #

fromInteger :: Integer -> Polynomial k v #

(Ord v, Ord r) => Ord (Polynomial r v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

compare :: Polynomial r v -> Polynomial r v -> Ordering #

(<) :: Polynomial r v -> Polynomial r v -> Bool #

(<=) :: Polynomial r v -> Polynomial r v -> Bool #

(>) :: Polynomial r v -> Polynomial r v -> Bool #

(>=) :: Polynomial r v -> Polynomial r v -> Bool #

max :: Polynomial r v -> Polynomial r v -> Polynomial r v #

min :: Polynomial r v -> Polynomial r v -> Polynomial r v #

(Show v, Show k) => Show (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

showsPrec :: Int -> Polynomial k v -> ShowS #

show :: Polynomial k v -> String #

showList :: [Polynomial k v] -> ShowS #

(Eq k, Num k, Ord v, IsString v) => IsString (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

fromString :: String -> Polynomial k v #

(NFData k, NFData v) => NFData (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

rnf :: Polynomial k v -> () #

(Hashable k, Hashable v) => Hashable (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

hashWithSalt :: Int -> Polynomial k v -> Int #

hash :: Polynomial k v -> Int #

(Ord k, Num k, Ord v, PrettyCoeff k, PrettyVar v) => Pretty (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

(Eq k, Num k, Ord v) => VectorSpace (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Associated Types

type Scalar (Polynomial k v) :: Type #

Methods

(*^) :: Scalar (Polynomial k v) -> Polynomial k v -> Polynomial k v #

(Eq k, Num k, Ord v) => AdditiveGroup (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

zeroV :: Polynomial k v #

(^+^) :: Polynomial k v -> Polynomial k v -> Polynomial k v #

negateV :: Polynomial k v -> Polynomial k v #

(^-^) :: Polynomial k v -> Polynomial k v -> Polynomial k v #

(Num c, Ord c, PrettyCoeff c, Ord v, PrettyVar v) => PrettyCoeff (Polynomial c v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Degree (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

deg :: Polynomial k v -> Integer Source #

Ord v => Vars (Polynomial k v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

vars :: Polynomial k v -> Set v Source #

(Eq k, Num k, Ord v) => Var (Polynomial k v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

var :: v -> Polynomial k v Source #

type Scalar (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

type Scalar (Polynomial k v) = k

Conversion

class Vars a v => Var a v | a -> v where Source #

Methods

var :: v -> a Source #

Instances
Ord v => Var (Monomial v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

var :: v -> Monomial v Source #

(Eq k, Num k, Ord v) => Var (Polynomial k v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

var :: v -> Polynomial k v Source #

constant :: (Eq k, Num k) => k -> Polynomial k v Source #

construct a polynomial from a constant

terms :: Polynomial k v -> [Term k v] Source #

list of terms

fromTerms :: (Eq k, Num k, Ord v) => [Term k v] -> Polynomial k v Source #

construct a polynomial from a list of terms

fromCoeffMap :: (Eq k, Num k) => Map (Monomial v) k -> Polynomial k v Source #

fromTerm :: (Eq k, Num k) => Term k v -> Polynomial k v Source #

construct a polynomial from a singlet term

Query

class Degree t where Source #

total degree of a given polynomial

Methods

deg :: t -> Integer Source #

Instances
Degree AReal Source #

Degree of the algebraic number.

If the algebraic number's minimalPolynomial has degree n, then the algebraic number is said to be degree n.

Instance details

Defined in ToySolver.Data.AlgebraicNumber.Real

Methods

deg :: AReal -> Integer Source #

Degree (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

deg :: Monomial v -> Integer Source #

Degree (Polynomial k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

deg :: Polynomial k v -> Integer Source #

class Ord v => Vars a v | a -> v where Source #

Methods

vars :: a -> Set v Source #

Instances
Ord v => Vars (Monomial v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

vars :: Monomial v -> Set v Source #

Ord v => Vars (Polynomial k v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

vars :: Polynomial k v -> Set v Source #

lt :: Num k => MonomialOrder v -> Polynomial k v -> Term k v Source #

leading term with respect to a given monomial order

lc :: Num k => MonomialOrder v -> Polynomial k v -> k Source #

leading coefficient with respect to a given monomial order

lm :: Num k => MonomialOrder v -> Polynomial k v -> Monomial v Source #

leading monomial with respect to a given monomial order

coeff :: (Num k, Ord v) => Monomial v -> Polynomial k v -> k Source #

Look up a coefficient for a given monomial. If no such term exists, it returns 0.

lookupCoeff :: Ord v => Monomial v -> Polynomial k v -> Maybe k Source #

Look up a coefficient for a given monomial. If no such term exists, it returns Nothing.

isPrimitive :: (Eq k, Num k, ContPP k, Ord v) => Polynomial k v -> Bool Source #

a polynomial is called primitive if the greatest common divisor of its coefficients is 1.

Operations

class Factor a where Source #

Prime factorization of polynomials

Methods

factor :: a -> [(a, Integer)] Source #

factor a polynomial p into p1 ^ n1 * p2 ^ n2 * .. and return a list [(p1,n1), (p2,n2), ..].

class SQFree a where Source #

Square-free factorization of polynomials

Methods

sqfree :: a -> [(a, Integer)] Source #

factor a polynomial p into p1 ^ n1 * p2 ^ n2 * .. and return a list [(p1,n1), (p2,n2), ..].

class ContPP k where Source #

Associated Types

type PPCoeff k Source #

Methods

cont :: Ord v => Polynomial k v -> k Source #

Content of a polynomial

pp :: Ord v => Polynomial k v -> Polynomial (PPCoeff k) v Source #

Primitive part of a polynomial

Instances
ContPP Integer Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Associated Types

type PPCoeff Integer :: Type Source #

Integral r => ContPP (Ratio r) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Associated Types

type PPCoeff (Ratio r) :: Type Source #

Methods

cont :: Ord v => Polynomial (Ratio r) v -> Ratio r Source #

pp :: Ord v => Polynomial (Ratio r) v -> Polynomial (PPCoeff (Ratio r)) v Source #

deriv :: (Eq k, Num k, Ord v) => Polynomial k v -> v -> Polynomial k v Source #

Formal derivative of polynomials

integral :: (Eq k, Fractional k, Ord v) => Polynomial k v -> v -> Polynomial k v Source #

Formal integral of polynomials

eval :: Num k => (v -> k) -> Polynomial k v -> k Source #

Evaluation

subst :: (Eq k, Num k, Ord v2) => Polynomial k v1 -> (v1 -> Polynomial k v2) -> Polynomial k v2 Source #

Substitution or bind

mapCoeff :: (Eq k1, Num k1) => (k -> k1) -> Polynomial k v -> Polynomial k1 v Source #

Transform polynomial coefficients.

toMonic :: (Eq r, Fractional r) => MonomialOrder v -> Polynomial r v -> Polynomial r v Source #

Transform a polynomial into a monic polynomial with respect to the given monomial order.

toUPolynomialOf :: (Ord k, Num k, Ord v) => Polynomial k v -> v -> UPolynomial (Polynomial k v) Source #

Convert K[x,x1,x2,…] into K[x1,x2,…][x].

divModMP :: forall k v. (Eq k, Fractional k, Ord v) => MonomialOrder v -> Polynomial k v -> [Polynomial k v] -> ([Polynomial k v], Polynomial k v) Source #

Multivariate division algorithm

divModMP cmp f [g1,g2,..] returns a pair ([q1,q2,…],r) such that

  • f = g1*q1 + g2*q2 + .. + r and
  • g1, g2, .. do not divide r.

reduce :: (Eq k, Fractional k, Ord v) => MonomialOrder v -> Polynomial k v -> [Polynomial k v] -> Polynomial k v Source #

Multivariate division algorithm

reduce cmp f gs = snd (divModMP cmp f gs)

Univariate polynomials

type UPolynomial r = Polynomial r X Source #

Univariate polynomials over commutative ring r

data X Source #

Variable "x"

Constructors

X 
Instances
Bounded X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

minBound :: X #

maxBound :: X #

Enum X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

succ :: X -> X #

pred :: X -> X #

toEnum :: Int -> X #

fromEnum :: X -> Int #

enumFrom :: X -> [X] #

enumFromThen :: X -> X -> [X] #

enumFromTo :: X -> X -> [X] #

enumFromThenTo :: X -> X -> X -> [X] #

Eq X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

(==) :: X -> X -> Bool #

(/=) :: X -> X -> Bool #

Data X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> X -> c X #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c X #

toConstr :: X -> Constr #

dataTypeOf :: X -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c X) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c X) #

gmapT :: (forall b. Data b => b -> b) -> X -> X #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> X -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> X -> r #

gmapQ :: (forall d. Data d => d -> u) -> X -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> X -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> X -> m X #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> X -> m X #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> X -> m X #

Ord X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

compare :: X -> X -> Ordering #

(<) :: X -> X -> Bool #

(<=) :: X -> X -> Bool #

(>) :: X -> X -> Bool #

(>=) :: X -> X -> Bool #

max :: X -> X -> X #

min :: X -> X -> X #

Read X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Show X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

showsPrec :: Int -> X -> ShowS #

show :: X -> String #

showList :: [X] -> ShowS #

NFData X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

rnf :: X -> () #

Hashable X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

hashWithSalt :: Int -> X -> Int #

hash :: X -> Int #

PrettyVar X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

SQFree (UPolynomial Integer) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.SquareFree

SQFree (UPolynomial Rational) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.SquareFree

KnownNat p => SQFree (UPolynomial (PrimeField p)) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.FiniteField

Factor (UPolynomial Integer) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.Integer

Factor (UPolynomial Rational) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.Rational

KnownNat p => Factor (UPolynomial (PrimeField p)) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Factorization.FiniteField

type UTerm k = Term k X Source #

div :: (Eq k, Fractional k) => UPolynomial k -> UPolynomial k -> UPolynomial k infixl 7 Source #

division of univariate polynomials

mod :: (Eq k, Fractional k) => UPolynomial k -> UPolynomial k -> UPolynomial k infixl 7 Source #

division of univariate polynomials

divMod :: (Eq k, Fractional k) => UPolynomial k -> UPolynomial k -> (UPolynomial k, UPolynomial k) Source #

division of univariate polynomials

gcd :: (Eq k, Fractional k) => UPolynomial k -> UPolynomial k -> UPolynomial k Source #

GCD of univariate polynomials

lcm :: (Eq k, Fractional k) => UPolynomial k -> UPolynomial k -> UPolynomial k Source #

LCM of univariate polynomials

exgcd :: (Eq k, Fractional k) => UPolynomial k -> UPolynomial k -> (UPolynomial k, UPolynomial k, UPolynomial k) Source #

Extended GCD algorithm

pdivMod :: (Eq r, Num r) => UPolynomial r -> UPolynomial r -> (r, UPolynomial r, UPolynomial r) Source #

pseudo division

pdiv :: (Eq r, Num r) => UPolynomial r -> UPolynomial r -> UPolynomial r Source #

pseudo quotient

pmod :: (Eq r, Num r) => UPolynomial r -> UPolynomial r -> UPolynomial r Source #

pseudo reminder

gcd' :: Integral r => UPolynomial r -> UPolynomial r -> UPolynomial r Source #

GCD of univariate polynomials

isRootOf :: (Eq k, Num k) => k -> UPolynomial k -> Bool Source #

Is the number a root of the polynomial?

isSquareFree :: (Eq k, Fractional k) => UPolynomial k -> Bool Source #

Is the polynomial square free?

nat :: MonomialOrder X Source #

Natural ordering x^0 < x^1 < x^2 .. is the unique monomial order for univariate polynomials.

eisensteinsCriterion :: (ContPP k, PPCoeff k ~ Integer) => UPolynomial k -> Bool Source #

Eisenstein's irreducibility criterion.

Given a polynomial with integer coefficients P[x] = an x^n + .. + a1*x + a0, it is irreducible over rational numbers if there exists a prime number p satisfying the following conditions:

  • p divides ai for i /= n,
  • p does not divides an, and
  • p^2 does not divides a0.

Term

type Term k v = (k, Monomial v) Source #

tscale :: Num k => k -> Term k v -> Term k v Source #

tmult :: (Num k, Ord v) => Term k v -> Term k v -> Term k v Source #

tdivides :: Ord v => Term k v -> Term k v -> Bool Source #

tdiv :: (Fractional k, Ord v) => Term k v -> Term k v -> Term k v Source #

tderiv :: (Num k, Ord v) => Term k v -> v -> Term k v Source #

tintegral :: (Fractional k, Ord v) => Term k v -> v -> Term k v Source #

Monic monomial

data Monomial v Source #

Monic monomials

Instances
Eq v => Eq (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

(==) :: Monomial v -> Monomial v -> Bool #

(/=) :: Monomial v -> Monomial v -> Bool #

Ord v => Ord (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

compare :: Monomial v -> Monomial v -> Ordering #

(<) :: Monomial v -> Monomial v -> Bool #

(<=) :: Monomial v -> Monomial v -> Bool #

(>) :: Monomial v -> Monomial v -> Bool #

(>=) :: Monomial v -> Monomial v -> Bool #

max :: Monomial v -> Monomial v -> Monomial v #

min :: Monomial v -> Monomial v -> Monomial v #

Show v => Show (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

showsPrec :: Int -> Monomial v -> ShowS #

show :: Monomial v -> String #

showList :: [Monomial v] -> ShowS #

(Ord v, IsString v) => IsString (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

fromString :: String -> Monomial v #

NFData v => NFData (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

rnf :: Monomial v -> () #

Hashable v => Hashable (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

hashWithSalt :: Int -> Monomial v -> Int #

hash :: Monomial v -> Int #

Degree (Monomial v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

deg :: Monomial v -> Integer Source #

Ord v => Vars (Monomial v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

vars :: Monomial v -> Set v Source #

Ord v => Var (Monomial v) v Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

var :: v -> Monomial v Source #

mfromIndices :: Ord v => [(v, Integer)] -> Monomial v Source #

mmult :: Ord v => Monomial v -> Monomial v -> Monomial v Source #

mdiv :: Ord v => Monomial v -> Monomial v -> Monomial v Source #

mderiv :: Ord v => Monomial v -> v -> (Integer, Monomial v) Source #

mintegral :: Ord v => Monomial v -> v -> (Rational, Monomial v) Source #

mlcm :: Ord v => Monomial v -> Monomial v -> Monomial v Source #

mgcd :: Ord v => Monomial v -> Monomial v -> Monomial v Source #

Monomial order

lex :: Ord v => MonomialOrder v Source #

Lexicographic order

revlex :: Ord v => Monomial v -> Monomial v -> Ordering Source #

Reverse lexicographic order.

Note that revlex is NOT a monomial order.

grlex :: Ord v => MonomialOrder v Source #

Graded lexicographic order

grevlex :: Ord v => MonomialOrder v Source #

Graded reverse lexicographic order

Pretty Printing

data PrintOptions k v Source #

Options for pretty printing polynomials

The default value can be obtained by def.

Instances
(PrettyCoeff k, PrettyVar v, Ord v) => Default (PrintOptions k v) Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

Methods

def :: PrintOptions k v #

class PrettyVar a where Source #

Methods

pPrintVar :: PrettyLevel -> Rational -> a -> Doc Source #

Instances
PrettyVar Int Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base

PrettyVar X Source # 
Instance details

Defined in ToySolver.Data.Polynomial.Base