polynomial-algebra-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

Instances details
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) Source #

type CoeffF (Poly c v n) 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) Source #

type MonomP (Poly c v n) Source #

type VarP (Poly c v n) 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

Instances details
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) 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