Copyright | (c) Andrew Lelechenko 2014-2020 |
---|---|

License | GPL-3 |

Maintainer | andrew.lelechenko@gmail.com |

Safe Haskell | Safe |

Language | Haskell2010 |

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

- data LinearForm t = LinearForm !t !t !t
- scaleLF :: (Num t, Eq t) => t -> LinearForm t -> LinearForm t
- evalLF :: Num t => (t, t, t) -> LinearForm t -> t
- substituteLF :: (Eq t, Num t) => (LinearForm t, LinearForm t, LinearForm t) -> LinearForm t -> LinearForm t
- data RationalForm t = (LinearForm t) :/: (LinearForm t)
- evalRF :: Real t => (Integer, Integer, Integer) -> RationalForm t -> RationalInf
- data IneqType
- data Constraint t = Constraint !(LinearForm t) !IneqType
- checkConstraint :: (Num t, Ord t) => (Integer, Integer, Integer) -> Constraint t -> Bool

# 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.

LinearForm !t !t !t |

## Instances

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`

.

(LinearForm t) :/: (LinearForm t) infix 5 |

## Instances

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.

Constants to specify the strictness of `Constraint`

.

## Instances

Bounded IneqType Source # | |

Enum IneqType Source # | |

Defined in Math.ExpPairs.LinearForm | |

Eq IneqType Source # | |

Ord IneqType Source # | |

Defined in Math.ExpPairs.LinearForm | |

Show IneqType Source # | |

Generic IneqType Source # | |

Pretty IneqType Source # | |

Defined in Math.ExpPairs.LinearForm | |

type Rep IneqType Source # | |

data Constraint t Source #

A linear constraint of two variables.

Constraint !(LinearForm t) !IneqType |