polynomial-algebra-0.1.0.1: Multivariate polynomial rings

Safe HaskellNone
LanguageHaskell2010

Math.Algebra.Polynomial.Multivariate.Compact

Description

Multivariate compact polynomials where the variable set looks like {x_1, x_2, ... , x_N}.

This is very similar to the "Indexed" version, but should have much more compact in-memory representation (which is useful in case of large or many polynomials; and should be in theory also faster, because of cache-friendlyness)

Synopsis

Documentation

newtype Poly (coeff :: *) (var :: Symbol) (n :: Nat) Source #

A multivariate polynomial in with a given coefficient ring.

It is also indexed by the (shared) name of the variables and the number of variable. For example Polyn Rational "x" 3 the type of polynomials in the variables x1, x2, x3 with rational coefficients.

Constructors

Poly (FreeMod coeff (Compact var n)) 
Instances
Eq coeff => Eq (Poly coeff var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

(==) :: Poly coeff var n -> Poly coeff var n -> Bool #

(/=) :: Poly coeff var n -> Poly coeff var n -> Bool #

(Ring c, KnownSymbol v, KnownNat n) => Num (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

(+) :: Poly c v n -> Poly c v n -> Poly c v n #

(-) :: Poly c v n -> Poly c v n -> Poly c v n #

(*) :: Poly c v n -> Poly c v n -> Poly c v n #

negate :: Poly c v n -> Poly c v n #

abs :: Poly c v n -> Poly c v n #

signum :: Poly c v n -> Poly c v n #

fromInteger :: Integer -> Poly c v n #

Ord coeff => Ord (Poly coeff var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

compare :: Poly coeff var n -> Poly coeff var n -> Ordering #

(<) :: Poly coeff var n -> Poly coeff var n -> Bool #

(<=) :: Poly coeff var n -> Poly coeff var n -> Bool #

(>) :: Poly coeff var n -> Poly coeff var n -> Bool #

(>=) :: Poly coeff var n -> Poly coeff var n -> Bool #

max :: Poly coeff var n -> Poly coeff var n -> Poly coeff var n #

min :: Poly coeff var n -> Poly coeff var n -> Poly coeff var n #

Show coeff => Show (Poly coeff var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

showsPrec :: Int -> Poly coeff var n -> ShowS #

show :: Poly coeff var n -> String #

showList :: [Poly coeff var n] -> ShowS #

FreeModule (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Associated Types

type BaseF (Poly c v n) :: Type Source #

type CoeffF (Poly c v n) :: Type Source #

Methods

toFreeModule :: Poly c v n -> FreeMod (CoeffF (Poly c v n)) (BaseF (Poly c v n)) Source #

fromFreeModule :: FreeMod (CoeffF (Poly c v n)) (BaseF (Poly c v n)) -> Poly c v n Source #

IsSigned (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

signOf :: Poly c v n -> Maybe Sign Source #

(Ring c, KnownSymbol v, KnownNat n, Pretty (Compact v n)) => Pretty (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

pretty :: Poly c v n -> String Source #

prettyInParens :: Poly c v n -> String Source #

(Ring c, KnownSymbol v, KnownNat n) => Polynomial (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

evalP :: Num d => (CoeffP (Poly c v n) -> d) -> (VarP (Poly c v n) -> d) -> Poly c v n -> d Source #

varSubsP :: (VarP (Poly c v n) -> VarP (Poly c v n)) -> Poly c v n -> Poly c v n Source #

coeffSubsP :: (VarP (Poly c v n) -> Maybe (CoeffP (Poly c v n))) -> Poly c v n -> Poly c v n Source #

subsP :: (VarP (Poly c v n) -> Poly c v n) -> Poly c v n -> Poly c v n Source #

(Ring c, KnownSymbol v, KnownNat n) => AlmostPolynomial (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Associated Types

type CoeffP (Poly c v n) :: Type Source #

type MonomP (Poly c v n) :: Type Source #

type VarP (Poly c v n) :: Type Source #

Methods

fromListP :: [(MonomP (Poly c v n), CoeffP (Poly c v n))] -> Poly c v n Source #

toListP :: Poly c v n -> [(MonomP (Poly c v n), CoeffP (Poly c v n))] Source #

zeroP :: Poly c v n Source #

isZeroP :: Poly c v n -> Bool Source #

oneP :: Poly c v n Source #

variableP :: VarP (Poly c v n) -> Poly c v n Source #

singletonP :: VarP (Poly c v n) -> Int -> Poly c v n Source #

monomP :: MonomP (Poly c v n) -> Poly c v n Source #

monomP' :: MonomP (Poly c v n) -> CoeffP (Poly c v n) -> Poly c v n Source #

scalarP :: CoeffP (Poly c v n) -> Poly c v n Source #

addP :: Poly c v n -> Poly c v n -> Poly c v n Source #

subP :: Poly c v n -> Poly c v n -> Poly c v n Source #

negP :: Poly c v n -> Poly c v n Source #

sumP :: [Poly c v n] -> Poly c v n Source #

mulP :: Poly c v n -> Poly c v n -> Poly c v n Source #

productP :: [Poly c v n] -> Poly c v n Source #

coeffOfP :: MonomP (Poly c v n) -> Poly c v n -> CoeffP (Poly c v n) Source #

mulByMonomP :: MonomP (Poly c v n) -> Poly c v n -> Poly c v n Source #

scaleP :: CoeffP (Poly c v n) -> Poly c v n -> Poly c v n Source #

(Ring c, KnownSymbol v, KnownNat n) => Ring (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

Methods

isZeroR :: Poly c v n -> Bool Source #

signumR :: Poly c v n -> Maybe Sign Source #

absR :: Poly c v n -> Poly c v n Source #

isSignedR :: Proxy (Poly c v n) -> Bool Source #

isAtomicR :: Proxy (Poly c v n) -> Bool Source #

type BaseF (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

type BaseF (Poly c v n) = Compact v n
type CoeffF (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

type CoeffF (Poly c v n) = c
type CoeffP (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

type CoeffP (Poly c v n) = c
type MonomP (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

type MonomP (Poly c v n) = Compact v n
type VarP (Poly c v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Compact

type VarP (Poly c v n) = Index

unPoly :: Poly c v n -> FreeMod c (Compact v n) Source #

polyVar :: KnownSymbol var => Poly c var n -> String Source #

Name of the variables

nOfPoly :: KnownNat n => Poly c var n -> Int Source #

Number of variables

renamePolyVar :: Poly c var1 n -> Poly c var2 n Source #

Rename the variables (zero cost)

fromZPoly :: (Ring c, KnownSymbol v, KnownNat n) => Poly Integer v n -> Poly c v n Source #

Change the coefficient ring (from integers)

fromQPoly :: (Field c, KnownSymbol v, KnownNat n) => Poly Rational v n -> Poly c v n Source #

Change the coefficient field (from rationals)

data Compact (var :: Symbol) (n :: Nat) Source #

Monomials of the variables x1,x2,...,xn. The internal representation is a compact vector of the exponents.

The type is indexed by the name of the variables, and then the number of variables.

Note that we assume here that the internal vector has length n.

Instances
Eq (Compact var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

Methods

(==) :: Compact var n -> Compact var n -> Bool #

(/=) :: Compact var n -> Compact var n -> Bool #

Ord (Compact var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

Methods

compare :: Compact var n -> Compact var n -> Ordering #

(<) :: Compact var n -> Compact var n -> Bool #

(<=) :: Compact var n -> Compact var n -> Bool #

(>) :: Compact var n -> Compact var n -> Bool #

(>=) :: Compact var n -> Compact var n -> Bool #

max :: Compact var n -> Compact var n -> Compact var n #

min :: Compact var n -> Compact var n -> Compact var n #

Show (Compact var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

Methods

showsPrec :: Int -> Compact var n -> ShowS #

show :: Compact var n -> String #

showList :: [Compact var n] -> ShowS #

KnownNat n => Semigroup (Compact var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

Methods

(<>) :: Compact var n -> Compact var n -> Compact var n #

sconcat :: NonEmpty (Compact var n) -> Compact var n #

stimes :: Integral b => b -> Compact var n -> Compact var n #

KnownNat n => Monoid (Compact var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

Methods

mempty :: Compact var n #

mappend :: Compact var n -> Compact var n -> Compact var n #

mconcat :: [Compact var n] -> Compact var n #

KnownSymbol var => Pretty (Compact var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

(KnownNat n, KnownSymbol v) => Monomial (Compact v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

Associated Types

type VarM (Compact v n) :: Type Source #

Methods

normalizeM :: Compact v n -> Compact v n Source #

isNormalM :: Compact v n -> Bool Source #

fromListM :: [(VarM (Compact v n), Int)] -> Compact v n Source #

toListM :: Compact v n -> [(VarM (Compact v n), Int)] Source #

emptyM :: Compact v n Source #

isEmptyM :: Compact v n -> Bool Source #

variableM :: VarM (Compact v n) -> Compact v n Source #

singletonM :: VarM (Compact v n) -> Int -> Compact v n Source #

mulM :: Compact v n -> Compact v n -> Compact v n Source #

productM :: [Compact v n] -> Compact v n Source #

powM :: Compact v n -> Int -> Compact v n Source #

divM :: Compact v n -> Compact v n -> Maybe (Compact v n) Source #

diffM :: Num c => VarM (Compact v n) -> Int -> Compact v n -> Maybe (Compact v n, c) Source #

maxDegM :: Compact v n -> Int Source #

totalDegM :: Compact v n -> Int Source #

evalM :: Num c => (VarM (Compact v n) -> c) -> Compact v n -> c Source #

varSubsM :: (VarM (Compact v n) -> VarM (Compact v n)) -> Compact v n -> Compact v n Source #

termSubsM :: Num c => (VarM (Compact v n) -> Maybe c) -> (Compact v n, c) -> (Compact v n, c) Source #

type VarM (Compact v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Compact

type VarM (Compact v n) = Index