exp-pairs-0.2.1.0: Linear programming over exponent pairs

Math.ExpPairs.LinearForm

Description

Linear forms, rational forms and constraints

Provides types for rational forms (to hold objective functions in Math.ExpPairs) and linear contraints (to hold constraints of optimization). Both of them are built atop of projective linear forms.

Synopsis

# Documentation

data LinearForm t Source #

Define an affine linear form of three variables: a*k + b*l + c*m. First argument of LinearForm stands for a, second for b and third for c. Linear forms form a monoid by addition.

Constructors

 LinearForm !t !t !t
Instances
 Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsfmap :: (a -> b) -> LinearForm a -> LinearForm b #(<$) :: a -> LinearForm b -> LinearForm a # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsfold :: Monoid m => LinearForm m -> m #foldMap :: Monoid m => (a -> m) -> LinearForm a -> m #foldr :: (a -> b -> b) -> b -> LinearForm a -> b #foldr' :: (a -> b -> b) -> b -> LinearForm a -> b #foldl :: (b -> a -> b) -> b -> LinearForm a -> b #foldl' :: (b -> a -> b) -> b -> LinearForm a -> b #foldr1 :: (a -> a -> a) -> LinearForm a -> a #foldl1 :: (a -> a -> a) -> LinearForm a -> a #toList :: LinearForm a -> [a] #null :: LinearForm a -> Bool #length :: LinearForm a -> Int #elem :: Eq a => a -> LinearForm a -> Bool #maximum :: Ord a => LinearForm a -> a #minimum :: Ord a => LinearForm a -> a #sum :: Num a => LinearForm a -> a #product :: Num a => LinearForm a -> a # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodstraverse :: Applicative f => (a -> f b) -> LinearForm a -> f (LinearForm b) #sequenceA :: Applicative f => LinearForm (f a) -> f (LinearForm a) #mapM :: Monad m => (a -> m b) -> LinearForm a -> m (LinearForm b) #sequence :: Monad m => LinearForm (m a) -> m (LinearForm a) # Eq t => Eq (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(==) :: LinearForm t -> LinearForm t -> Bool #(/=) :: LinearForm t -> LinearForm t -> Bool # Num t => Num (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(+) :: LinearForm t -> LinearForm t -> LinearForm t #(-) :: LinearForm t -> LinearForm t -> LinearForm t #(*) :: LinearForm t -> LinearForm t -> LinearForm t #negate :: LinearForm t -> LinearForm t #abs :: LinearForm t -> LinearForm t #signum :: LinearForm t -> LinearForm t # Show t => Show (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm MethodsshowsPrec :: Int -> LinearForm t -> ShowS #show :: LinearForm t -> String #showList :: [LinearForm t] -> ShowS # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Associated Typestype Rep (LinearForm t) :: Type -> Type # Methodsfrom :: LinearForm t -> Rep (LinearForm t) x #to :: Rep (LinearForm t) x -> LinearForm t # Num t => Semigroup (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(<>) :: LinearForm t -> LinearForm t -> LinearForm t #sconcat :: NonEmpty (LinearForm t) -> LinearForm t #stimes :: Integral b => b -> LinearForm t -> LinearForm t # Num t => Monoid (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsmappend :: LinearForm t -> LinearForm t -> LinearForm t #mconcat :: [LinearForm t] -> LinearForm t # NFData t => NFData (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsrnf :: LinearForm t -> () # (Num t, Eq t, Pretty t) => Pretty (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodspretty :: LinearForm t -> Doc ann #prettyList :: [LinearForm t] -> Doc ann # type Rep (LinearForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm type Rep (LinearForm t) = D1 (MetaData "LinearForm" "Math.ExpPairs.LinearForm" "exp-pairs-0.2.1.0-J4IGbuSTVwXCgBqjoU0P5n" False) (C1 (MetaCons "LinearForm" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 t) :*: (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 t) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 t)))) scaleLF :: (Num t, Eq t) => t -> LinearForm t -> LinearForm t Source # Multiply a linear form by a given coefficient. evalLF :: Num t => (t, t, t) -> LinearForm t -> t Source # Evaluate a linear form a*k + b*l + c*m for given k, l and m. substituteLF :: (Eq t, Num t) => (LinearForm t, LinearForm t, LinearForm t) -> LinearForm t -> LinearForm t Source # Substitute linear forms k, l and m into a given linear form a*k + b*l + c*m to obtain a new linear form. data RationalForm t Source # Define a rational form of two variables, equal to the ratio of two LinearForm. Constructors  (LinearForm t) :/: (LinearForm t) infix 5 Instances  Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsfmap :: (a -> b) -> RationalForm a -> RationalForm b #(<$) :: a -> RationalForm b -> RationalForm a # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsfold :: Monoid m => RationalForm m -> m #foldMap :: Monoid m => (a -> m) -> RationalForm a -> m #foldr :: (a -> b -> b) -> b -> RationalForm a -> b #foldr' :: (a -> b -> b) -> b -> RationalForm a -> b #foldl :: (b -> a -> b) -> b -> RationalForm a -> b #foldl' :: (b -> a -> b) -> b -> RationalForm a -> b #foldr1 :: (a -> a -> a) -> RationalForm a -> a #foldl1 :: (a -> a -> a) -> RationalForm a -> a #toList :: RationalForm a -> [a] #null :: RationalForm a -> Bool #length :: RationalForm a -> Int #elem :: Eq a => a -> RationalForm a -> Bool #maximum :: Ord a => RationalForm a -> a #minimum :: Ord a => RationalForm a -> a #sum :: Num a => RationalForm a -> a #product :: Num a => RationalForm a -> a # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodstraverse :: Applicative f => (a -> f b) -> RationalForm a -> f (RationalForm b) #sequenceA :: Applicative f => RationalForm (f a) -> f (RationalForm a) #mapM :: Monad m => (a -> m b) -> RationalForm a -> m (RationalForm b) #sequence :: Monad m => RationalForm (m a) -> m (RationalForm a) # Eq t => Eq (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(==) :: RationalForm t -> RationalForm t -> Bool #(/=) :: RationalForm t -> RationalForm t -> Bool # Num t => Fractional (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(/) :: RationalForm t -> RationalForm t -> RationalForm t # Num t => Num (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(+) :: RationalForm t -> RationalForm t -> RationalForm t #(-) :: RationalForm t -> RationalForm t -> RationalForm t #(*) :: RationalForm t -> RationalForm t -> RationalForm t #abs :: RationalForm t -> RationalForm t # Show t => Show (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm MethodsshowsPrec :: Int -> RationalForm t -> ShowS #show :: RationalForm t -> String #showList :: [RationalForm t] -> ShowS # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Associated Typestype Rep (RationalForm t) :: Type -> Type # Methodsfrom :: RationalForm t -> Rep (RationalForm t) x #to :: Rep (RationalForm t) x -> RationalForm t # NFData t => NFData (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsrnf :: RationalForm t -> () # (Num t, Eq t, Pretty t) => Pretty (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodspretty :: RationalForm t -> Doc ann #prettyList :: [RationalForm t] -> Doc ann # type Rep (RationalForm t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm type Rep (RationalForm t) = D1 (MetaData "RationalForm" "Math.ExpPairs.LinearForm" "exp-pairs-0.2.1.0-J4IGbuSTVwXCgBqjoU0P5n" False) (C1 (MetaCons ":/:" (InfixI NotAssociative 5) False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (LinearForm t)) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (LinearForm t))))

evalRF :: Real t => (Integer, Integer, Integer) -> RationalForm t -> RationalInf Source #

Evaluate a rational form (a*k + b*l + c*m) / (a'*k + b'*l + c'*m) for given k, l and m.

data IneqType Source #

Constants to specify the strictness of Constraint.

Constructors

 Strict Strict inequality (>0). NonStrict Non-strict inequality (≥0).
Instances
 Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods Source # Instance detailsDefined in Math.ExpPairs.LinearForm MethodsenumFrom :: IneqType -> [IneqType] #enumFromTo :: IneqType -> IneqType -> [IneqType] # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(<) :: IneqType -> IneqType -> Bool #(>) :: IneqType -> IneqType -> Bool # Source # Instance detailsDefined in Math.ExpPairs.LinearForm MethodsshowList :: [IneqType] -> ShowS # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Associated Typestype Rep IneqType :: Type -> Type # Methodsto :: Rep IneqType x -> IneqType # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodspretty :: IneqType -> Doc ann #prettyList :: [IneqType] -> Doc ann # type Rep IneqType Source # Instance detailsDefined in Math.ExpPairs.LinearForm type Rep IneqType = D1 (MetaData "IneqType" "Math.ExpPairs.LinearForm" "exp-pairs-0.2.1.0-J4IGbuSTVwXCgBqjoU0P5n" False) (C1 (MetaCons "Strict" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "NonStrict" PrefixI False) (U1 :: Type -> Type))

data Constraint t Source #

A linear constraint of two variables.

Constructors

 Constraint !(LinearForm t) !IneqType
Instances
 Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsfmap :: (a -> b) -> Constraint a -> Constraint b #(<\$) :: a -> Constraint b -> Constraint a # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsfold :: Monoid m => Constraint m -> m #foldMap :: Monoid m => (a -> m) -> Constraint a -> m #foldr :: (a -> b -> b) -> b -> Constraint a -> b #foldr' :: (a -> b -> b) -> b -> Constraint a -> b #foldl :: (b -> a -> b) -> b -> Constraint a -> b #foldl' :: (b -> a -> b) -> b -> Constraint a -> b #foldr1 :: (a -> a -> a) -> Constraint a -> a #foldl1 :: (a -> a -> a) -> Constraint a -> a #toList :: Constraint a -> [a] #null :: Constraint a -> Bool #length :: Constraint a -> Int #elem :: Eq a => a -> Constraint a -> Bool #maximum :: Ord a => Constraint a -> a #minimum :: Ord a => Constraint a -> a #sum :: Num a => Constraint a -> a #product :: Num a => Constraint a -> a # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodstraverse :: Applicative f => (a -> f b) -> Constraint a -> f (Constraint b) #sequenceA :: Applicative f => Constraint (f a) -> f (Constraint a) #mapM :: Monad m => (a -> m b) -> Constraint a -> m (Constraint b) #sequence :: Monad m => Constraint (m a) -> m (Constraint a) # Eq t => Eq (Constraint t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methods(==) :: Constraint t -> Constraint t -> Bool #(/=) :: Constraint t -> Constraint t -> Bool # Show t => Show (Constraint t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm MethodsshowsPrec :: Int -> Constraint t -> ShowS #show :: Constraint t -> String #showList :: [Constraint t] -> ShowS # Source # Instance detailsDefined in Math.ExpPairs.LinearForm Associated Typestype Rep (Constraint t) :: Type -> Type # Methodsfrom :: Constraint t -> Rep (Constraint t) x #to :: Rep (Constraint t) x -> Constraint t # NFData t => NFData (Constraint t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodsrnf :: Constraint t -> () # (Num t, Eq t, Pretty t) => Pretty (Constraint t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm Methodspretty :: Constraint t -> Doc ann #prettyList :: [Constraint t] -> Doc ann # type Rep (Constraint t) Source # Instance detailsDefined in Math.ExpPairs.LinearForm type Rep (Constraint t) = D1 (MetaData "Constraint" "Math.ExpPairs.LinearForm" "exp-pairs-0.2.1.0-J4IGbuSTVwXCgBqjoU0P5n" False) (C1 (MetaCons "Constraint" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (LinearForm t)) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 IneqType)))

checkConstraint :: (Num t, Ord t) => (Integer, Integer, Integer) -> Constraint t -> Bool Source #

Evaluate a rational form of constraint and compare its value with 0. Strictness depends on the given IneqType.