polynomial-algebra-0.1.0.1: Multivariate polynomial rings

Safe HaskellNone
LanguageHaskell2010

Math.Algebra.Polynomial.Multivariate.Indexed

Description

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

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 (XS var n)) 
Instances
Eq coeff => Eq (Poly coeff var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Multivariate.Indexed

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

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

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

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

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

Methods

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

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

Defined in Math.Algebra.Polynomial.Multivariate.Indexed

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

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

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

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

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

Defined in Math.Algebra.Polynomial.Multivariate.Indexed

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

Defined in Math.Algebra.Polynomial.Multivariate.Indexed

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

Defined in Math.Algebra.Polynomial.Multivariate.Indexed

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

Defined in Math.Algebra.Polynomial.Multivariate.Indexed

type VarP (Poly c v n) = Index

unPoly :: Poly c v n -> FreeMod c (XS 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 #

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)

embed :: (Ring c, KnownNat n, KnownNat m) => Poly c v n -> Poly c v m Source #

You can always increase the number of variables; you can also decrease, if don't use the last few ones.

This will throw an error if you try to eliminate variables which are in fact used. To do that, you can instead substitute 0 or 1 into them.

newtype XS (var :: Symbol) (n :: Nat) Source #

Monomials of the variables x1,x2,...,xn. The internal representation is the dense array of exponents: x1^e1*x2^e2*...*xn^en is represented by [e1,e2,...,en].

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

Note that we require here that the array has bounds (1,n)

Constructors

XS (UArray Int Int) 
Instances
Eq (XS var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Methods

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

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

Ord (XS var n) Source #

Note: this must be a monomial ordering!

Instance details

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Methods

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

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

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

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

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

max :: XS var n -> XS var n -> XS var n #

min :: XS var n -> XS var n -> XS var n #

Show (XS var n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Methods

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

show :: XS var n -> String #

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

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

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Methods

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

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

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

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

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Methods

mempty :: XS var n #

mappend :: XS var n -> XS var n -> XS var n #

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

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

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Methods

pretty :: XS var n -> String Source #

prettyInParens :: XS var n -> String Source #

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

Defined in Math.Algebra.Polynomial.Monomial.Indexed

Associated Types

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

Methods

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

isNormalM :: XS v n -> Bool Source #

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

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

emptyM :: XS v n Source #

isEmptyM :: XS v n -> Bool Source #

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

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

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

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

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

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

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

maxDegM :: XS v n -> Int Source #

totalDegM :: XS v n -> Int Source #

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

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

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

type VarM (XS v n) Source # 
Instance details

Defined in Math.Algebra.Polynomial.Monomial.Indexed

type VarM (XS v n) = Index