computational-algebra-0.5.0.0: Well-kinded computational algebra library, currently supporting Groebner basis.

Safe HaskellNone
LanguageHaskell2010

Algebra.Ring.Polynomial.Class

Contents

Description

This module provides abstract classes for finitary polynomial types.

Synopsis

Documentation

class (CoeffRing (Coefficient poly), Eq poly, DecidableZero poly, KnownNat (Arity poly), Module (Scalar (Coefficient poly)) poly, Ring poly, Commutative poly) => IsPolynomial poly where Source #

Polynomial in terms of free associative commutative algebra generated by n-elements. To effectively compute all terms, we need monomials in addition to universality of free object.

Associated Types

type Coefficient poly :: * Source #

Coefficient ring of polynomial type.

type Arity poly :: Nat Source #

Arity of polynomial type.

Methods

liftMap :: (Module (Scalar (Coefficient poly)) alg, Ring alg, Commutative alg) => (Ordinal (Arity poly) -> alg) -> poly -> alg Source #

Universal mapping for free algebra. This corresponds to the algebraic substitution operation.

subst :: (Ring alg, Commutative alg, Module (Scalar (Coefficient poly)) alg) => Sized (Arity poly) alg -> poly -> alg Source #

A variant of liftMap, each value is given by Sized.

substWith :: (Unital r, Monoidal m) => (Coefficient poly -> r -> m) -> Sized (Arity poly) r -> poly -> m Source #

Another variant of liftMap. This function relies on terms'; if you have more efficient implementation, it is encouraged to override this method.

sArity' :: poly -> SNat (Arity poly) Source #

Arity of given polynomial.

sArity :: proxy poly -> SNat (Arity poly) Source #

Arity of given polynomial, using type proxy.

arity :: proxy poly -> Integer Source #

Non-dependent version of arity.

injectCoeff :: Coefficient poly -> poly Source #

Inject coefficient into polynomial.

injectCoeff' :: proxy poly -> Coefficient poly -> poly Source #

Inject coefficient into polynomial with result-type explicitly given.

monomials :: poly -> HashSet (Monomial (Arity poly)) Source #

monomials f returns the finite set of all monomials appearing in f.

terms' :: poly -> Map (Monomial (Arity poly)) (Coefficient poly) Source #

monomials f returns the finite set of all terms appearing in f; Term is a finite map from monomials to non-zero coefficient.

coeff' :: Monomial (Arity poly) -> poly -> Coefficient poly Source #

'coeff m f' returns the coefficient of monomial m in polynomial f.

constantTerm :: poly -> Coefficient poly Source #

Calculates constant coefficient.

fromMonomial :: Monomial (Arity poly) -> poly Source #

Inject monic monomial.

toPolynomial' :: (Coefficient poly, Monomial (Arity poly)) -> poly Source #

Inject coefficient with monomial.

polynomial' :: Map (Monomial (Arity poly)) (Coefficient poly) -> poly Source #

Construct polynomial from the given finite mapping from monomials to coefficients.

totalDegree' :: poly -> Natural Source #

Returns total degree.

var :: Ordinal (Arity poly) -> poly Source #

var n returns a polynomial representing n-th variable.

mapCoeff' :: (Coefficient poly -> Coefficient poly) -> poly -> poly Source #

Adjusting coefficients of each term.

(>|*) :: Monomial (Arity poly) -> poly -> poly infixl 7 Source #

m >|* f multiplies polynomial f by monomial m.

(*|<) :: poly -> Monomial (Arity poly) -> poly infixl 7 Source #

Flipped version of (>|*)

(!*) :: Coefficient poly -> poly -> poly infixl 7 Source #

_Terms' :: Iso' poly (Map (Monomial (Arity poly)) (Coefficient poly)) Source #

mapMonomial :: (Monomial (Arity poly) -> Monomial (Arity poly)) -> poly -> poly Source #

Instances

CoeffRing r => IsPolynomial (Unipol r) Source # 

Associated Types

type Coefficient (Unipol r) :: * Source #

type Arity (Unipol r) :: Nat Source #

Methods

liftMap :: (Module (Scalar (Coefficient (Unipol r))) alg, Ring alg, Commutative alg) => (Ordinal Nat (Arity (Unipol r)) -> alg) -> Unipol r -> alg Source #

subst :: (Ring alg, Commutative alg, Module (Scalar (Coefficient (Unipol r))) alg) => Sized (Arity (Unipol r)) alg -> Unipol r -> alg Source #

substWith :: (Unital r, Monoidal m) => (Coefficient (Unipol r) -> r -> m) -> Sized (Arity (Unipol r)) r -> Unipol r -> m Source #

sArity' :: Unipol r -> SNat (Arity (Unipol r)) Source #

sArity :: proxy (Unipol r) -> SNat (Arity (Unipol r)) Source #

arity :: proxy (Unipol r) -> Integer Source #

injectCoeff :: Coefficient (Unipol r) -> Unipol r Source #

injectCoeff' :: proxy (Unipol r) -> Coefficient (Unipol r) -> Unipol r Source #

monomials :: Unipol r -> HashSet (Monomial (Arity (Unipol r))) Source #

terms' :: Unipol r -> Map (Monomial (Arity (Unipol r))) (Coefficient (Unipol r)) Source #

coeff' :: Monomial (Arity (Unipol r)) -> Unipol r -> Coefficient (Unipol r) Source #

constantTerm :: Unipol r -> Coefficient (Unipol r) Source #

fromMonomial :: Monomial (Arity (Unipol r)) -> Unipol r Source #

toPolynomial' :: (Coefficient (Unipol r), Monomial (Arity (Unipol r))) -> Unipol r Source #

polynomial' :: Map (Monomial (Arity (Unipol r))) (Coefficient (Unipol r)) -> Unipol r Source #

totalDegree' :: Unipol r -> Natural Source #

var :: Ordinal Nat (Arity (Unipol r)) -> Unipol r Source #

mapCoeff' :: (Coefficient (Unipol r) -> Coefficient (Unipol r)) -> Unipol r -> Unipol r Source #

(>|*) :: Monomial (Arity (Unipol r)) -> Unipol r -> Unipol r Source #

(*|<) :: Unipol r -> Monomial (Arity (Unipol r)) -> Unipol r Source #

(!*) :: Coefficient (Unipol r) -> Unipol r -> Unipol r Source #

_Terms' :: Iso' (Unipol r) (Map (Monomial (Arity (Unipol r))) (Coefficient (Unipol r))) Source #

mapMonomial :: (Monomial (Arity (Unipol r)) -> Monomial (Arity (Unipol r))) -> Unipol r -> Unipol r Source #

(IsPolynomial poly, Wraps vars poly) => IsPolynomial (LabPolynomial poly vars) Source # 

Associated Types

type Coefficient (LabPolynomial poly vars) :: * Source #

type Arity (LabPolynomial poly vars) :: Nat Source #

Methods

liftMap :: (Module (Scalar (Coefficient (LabPolynomial poly vars))) alg, Ring alg, Commutative alg) => (Ordinal Nat (Arity (LabPolynomial poly vars)) -> alg) -> LabPolynomial poly vars -> alg Source #

subst :: (Ring alg, Commutative alg, Module (Scalar (Coefficient (LabPolynomial poly vars))) alg) => Sized (Arity (LabPolynomial poly vars)) alg -> LabPolynomial poly vars -> alg Source #

substWith :: (Unital r, Monoidal m) => (Coefficient (LabPolynomial poly vars) -> r -> m) -> Sized (Arity (LabPolynomial poly vars)) r -> LabPolynomial poly vars -> m Source #

sArity' :: LabPolynomial poly vars -> SNat (Arity (LabPolynomial poly vars)) Source #

sArity :: proxy (LabPolynomial poly vars) -> SNat (Arity (LabPolynomial poly vars)) Source #

arity :: proxy (LabPolynomial poly vars) -> Integer Source #

injectCoeff :: Coefficient (LabPolynomial poly vars) -> LabPolynomial poly vars Source #

injectCoeff' :: proxy (LabPolynomial poly vars) -> Coefficient (LabPolynomial poly vars) -> LabPolynomial poly vars Source #

monomials :: LabPolynomial poly vars -> HashSet (Monomial (Arity (LabPolynomial poly vars))) Source #

terms' :: LabPolynomial poly vars -> Map (Monomial (Arity (LabPolynomial poly vars))) (Coefficient (LabPolynomial poly vars)) Source #

coeff' :: Monomial (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars -> Coefficient (LabPolynomial poly vars) Source #

constantTerm :: LabPolynomial poly vars -> Coefficient (LabPolynomial poly vars) Source #

fromMonomial :: Monomial (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

toPolynomial' :: (Coefficient (LabPolynomial poly vars), Monomial (Arity (LabPolynomial poly vars))) -> LabPolynomial poly vars Source #

polynomial' :: Map (Monomial (Arity (LabPolynomial poly vars))) (Coefficient (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

totalDegree' :: LabPolynomial poly vars -> Natural Source #

var :: Ordinal Nat (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

mapCoeff' :: (Coefficient (LabPolynomial poly vars) -> Coefficient (LabPolynomial poly vars)) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

(>|*) :: Monomial (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

(*|<) :: LabPolynomial poly vars -> Monomial (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

(!*) :: Coefficient (LabPolynomial poly vars) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

_Terms' :: Iso' (LabPolynomial poly vars) (Map (Monomial (Arity (LabPolynomial poly vars))) (Coefficient (LabPolynomial poly vars))) Source #

mapMonomial :: (Monomial (Arity (LabPolynomial poly vars)) -> Monomial (Arity (LabPolynomial poly vars))) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

(KnownNat n, IsMonomialOrder n ord, IsPolynomial poly) => IsPolynomial (PadPolyL n ord poly) Source # 

Associated Types

type Coefficient (PadPolyL n ord poly) :: * Source #

type Arity (PadPolyL n ord poly) :: Nat Source #

Methods

liftMap :: (Module (Scalar (Coefficient (PadPolyL n ord poly))) alg, Ring alg, Commutative alg) => (Ordinal Nat (Arity (PadPolyL n ord poly)) -> alg) -> PadPolyL n ord poly -> alg Source #

subst :: (Ring alg, Commutative alg, Module (Scalar (Coefficient (PadPolyL n ord poly))) alg) => Sized (Arity (PadPolyL n ord poly)) alg -> PadPolyL n ord poly -> alg Source #

substWith :: (Unital r, Monoidal m) => (Coefficient (PadPolyL n ord poly) -> r -> m) -> Sized (Arity (PadPolyL n ord poly)) r -> PadPolyL n ord poly -> m Source #

sArity' :: PadPolyL n ord poly -> SNat (Arity (PadPolyL n ord poly)) Source #

sArity :: proxy (PadPolyL n ord poly) -> SNat (Arity (PadPolyL n ord poly)) Source #

arity :: proxy (PadPolyL n ord poly) -> Integer Source #

injectCoeff :: Coefficient (PadPolyL n ord poly) -> PadPolyL n ord poly Source #

injectCoeff' :: proxy (PadPolyL n ord poly) -> Coefficient (PadPolyL n ord poly) -> PadPolyL n ord poly Source #

monomials :: PadPolyL n ord poly -> HashSet (Monomial (Arity (PadPolyL n ord poly))) Source #

terms' :: PadPolyL n ord poly -> Map (Monomial (Arity (PadPolyL n ord poly))) (Coefficient (PadPolyL n ord poly)) Source #

coeff' :: Monomial (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly -> Coefficient (PadPolyL n ord poly) Source #

constantTerm :: PadPolyL n ord poly -> Coefficient (PadPolyL n ord poly) Source #

fromMonomial :: Monomial (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

toPolynomial' :: (Coefficient (PadPolyL n ord poly), Monomial (Arity (PadPolyL n ord poly))) -> PadPolyL n ord poly Source #

polynomial' :: Map (Monomial (Arity (PadPolyL n ord poly))) (Coefficient (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

totalDegree' :: PadPolyL n ord poly -> Natural Source #

var :: Ordinal Nat (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

mapCoeff' :: (Coefficient (PadPolyL n ord poly) -> Coefficient (PadPolyL n ord poly)) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

(>|*) :: Monomial (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

(*|<) :: PadPolyL n ord poly -> Monomial (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

(!*) :: Coefficient (PadPolyL n ord poly) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

_Terms' :: Iso' (PadPolyL n ord poly) (Map (Monomial (Arity (PadPolyL n ord poly))) (Coefficient (PadPolyL n ord poly))) Source #

mapMonomial :: (Monomial (Arity (PadPolyL n ord poly)) -> Monomial (Arity (PadPolyL n ord poly))) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

(KnownNat n, IsMonomialOrder n ord, CoeffRing r) => IsPolynomial (OrderedPolynomial * r ord n) Source # 

Associated Types

type Coefficient (OrderedPolynomial * r ord n) :: * Source #

type Arity (OrderedPolynomial * r ord n) :: Nat Source #

Methods

liftMap :: (Module (Scalar (Coefficient (OrderedPolynomial * r ord n))) alg, Ring alg, Commutative alg) => (Ordinal Nat (Arity (OrderedPolynomial * r ord n)) -> alg) -> OrderedPolynomial * r ord n -> alg Source #

subst :: (Ring alg, Commutative alg, Module (Scalar (Coefficient (OrderedPolynomial * r ord n))) alg) => Sized (Arity (OrderedPolynomial * r ord n)) alg -> OrderedPolynomial * r ord n -> alg Source #

substWith :: (Unital r, Monoidal m) => (Coefficient (OrderedPolynomial * r ord n) -> r -> m) -> Sized (Arity (OrderedPolynomial * r ord n)) r -> OrderedPolynomial * r ord n -> m Source #

sArity' :: OrderedPolynomial * r ord n -> SNat (Arity (OrderedPolynomial * r ord n)) Source #

sArity :: proxy (OrderedPolynomial * r ord n) -> SNat (Arity (OrderedPolynomial * r ord n)) Source #

arity :: proxy (OrderedPolynomial * r ord n) -> Integer Source #

injectCoeff :: Coefficient (OrderedPolynomial * r ord n) -> OrderedPolynomial * r ord n Source #

injectCoeff' :: proxy (OrderedPolynomial * r ord n) -> Coefficient (OrderedPolynomial * r ord n) -> OrderedPolynomial * r ord n Source #

monomials :: OrderedPolynomial * r ord n -> HashSet (Monomial (Arity (OrderedPolynomial * r ord n))) Source #

terms' :: OrderedPolynomial * r ord n -> Map (Monomial (Arity (OrderedPolynomial * r ord n))) (Coefficient (OrderedPolynomial * r ord n)) Source #

coeff' :: Monomial (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n -> Coefficient (OrderedPolynomial * r ord n) Source #

constantTerm :: OrderedPolynomial * r ord n -> Coefficient (OrderedPolynomial * r ord n) Source #

fromMonomial :: Monomial (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

toPolynomial' :: (Coefficient (OrderedPolynomial * r ord n), Monomial (Arity (OrderedPolynomial * r ord n))) -> OrderedPolynomial * r ord n Source #

polynomial' :: Map (Monomial (Arity (OrderedPolynomial * r ord n))) (Coefficient (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

totalDegree' :: OrderedPolynomial * r ord n -> Natural Source #

var :: Ordinal Nat (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

mapCoeff' :: (Coefficient (OrderedPolynomial * r ord n) -> Coefficient (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

(>|*) :: Monomial (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

(*|<) :: OrderedPolynomial * r ord n -> Monomial (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

(!*) :: Coefficient (OrderedPolynomial * r ord n) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

_Terms' :: Iso' (OrderedPolynomial * r ord n) (Map (Monomial (Arity (OrderedPolynomial * r ord n))) (Coefficient (OrderedPolynomial * r ord n))) Source #

mapMonomial :: (Monomial (Arity (OrderedPolynomial * r ord n)) -> Monomial (Arity (OrderedPolynomial * r ord n))) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

class (IsMonomialOrder (Arity poly) (MOrder poly), IsPolynomial poly) => IsOrderedPolynomial poly where Source #

Class to lookup ordering from its (type-level) name.

Minimal complete definition

leadingTerm | leadingMonomial, leadingCoeff

Associated Types

type MOrder poly :: * Source #

Methods

coeff :: OrderedMonomial (MOrder poly) (Arity poly) -> poly -> Coefficient poly Source #

A variant of coeff' which takes OrderedMonomial instead of Monomial

terms :: poly -> Map (OrderedMonomial (MOrder poly) (Arity poly)) (Coefficient poly) Source #

The default implementation is not enough efficient. So it is strongly recomended to give explicit definition to terms.

leadingTerm :: poly -> (Coefficient poly, OrderedMonomial (MOrder poly) (Arity poly)) Source #

Leading term with respect to its monomial ordering.

leadingMonomial :: poly -> OrderedMonomial (MOrder poly) (Arity poly) Source #

Leading monomial with respect to its monomial ordering.

leadingCoeff :: poly -> Coefficient poly Source #

Leading coefficient with respect to its monomial ordering.

orderedMonomials :: poly -> Set (OrderedMonomial (MOrder poly) (Arity poly)) Source #

The collection of all monomials in the given polynomial, with metadata of their ordering.

fromOrderedMonomial :: OrderedMonomial (MOrder poly) (Arity poly) -> poly Source #

A variant of fromMonomial which takes OrderedMonomial as argument.

toPolynomial :: (Coefficient poly, OrderedMonomial (MOrder poly) (Arity poly)) -> poly Source #

A variant of toPolynomial' which takes OrderedMonomial as argument.

polynomial :: Map (OrderedMonomial (MOrder poly) (Arity poly)) (Coefficient poly) -> poly Source #

A variant of polynomial' which takes OrderedMonomial as argument.

The default implementation combines mapKeys and polynomial', hence is not enough efficient. So it is strongly recomended to give explicit definition to polynomial.

(>*) :: OrderedMonomial (MOrder poly) (Arity poly) -> poly -> poly infixl 7 Source #

A variant of '(>|*)' which takes OrderedMonomial as argument.

(*<) :: poly -> OrderedMonomial (MOrder poly) (Arity poly) -> poly infixl 7 Source #

Flipped version of (>*)

_Terms :: Iso' poly (Map (OrderedMonomial (MOrder poly) (Arity poly)) (Coefficient poly)) Source #

diff :: Ordinal (Arity poly) -> poly -> poly Source #

diff n f partially diffrenciates n-th variable in the given polynomial f. The default implementation uses terms and polynomial and is really naive; please consider overrideing for efficiency.

mapMonomialMonotonic :: (OrderedMonomial (MOrder poly) (Arity poly) -> OrderedMonomial (MOrder poly) (Arity poly)) -> poly -> poly Source #

Same as mapMonomial, but maping function is assumed to be strictly monotonic (i.e. a < b implies f a < f b).

Instances

CoeffRing r => IsOrderedPolynomial (Unipol r) Source # 

Associated Types

type MOrder (Unipol r) :: * Source #

Methods

coeff :: OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r)) -> Unipol r -> Coefficient (Unipol r) Source #

terms :: Unipol r -> Map (OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) (Coefficient (Unipol r)) Source #

leadingTerm :: Unipol r -> (Coefficient (Unipol r), OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) Source #

leadingMonomial :: Unipol r -> OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r)) Source #

leadingCoeff :: Unipol r -> Coefficient (Unipol r) Source #

orderedMonomials :: Unipol r -> Set (OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) Source #

fromOrderedMonomial :: OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r)) -> Unipol r Source #

toPolynomial :: (Coefficient (Unipol r), OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) -> Unipol r Source #

polynomial :: Map (OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) (Coefficient (Unipol r)) -> Unipol r Source #

(>*) :: OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r)) -> Unipol r -> Unipol r Source #

(*<) :: Unipol r -> OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r)) -> Unipol r Source #

_Terms :: Iso' (Unipol r) (Map (OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) (Coefficient (Unipol r))) Source #

diff :: Ordinal Nat (Arity (Unipol r)) -> Unipol r -> Unipol r Source #

mapMonomialMonotonic :: (OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r)) -> OrderedMonomial * (MOrder (Unipol r)) (Arity (Unipol r))) -> Unipol r -> Unipol r Source #

(IsOrderedPolynomial poly, Wraps vars poly) => IsOrderedPolynomial (LabPolynomial poly vars) Source # 

Associated Types

type MOrder (LabPolynomial poly vars) :: * Source #

Methods

coeff :: OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars -> Coefficient (LabPolynomial poly vars) Source #

terms :: LabPolynomial poly vars -> Map (OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) (Coefficient (LabPolynomial poly vars)) Source #

leadingTerm :: LabPolynomial poly vars -> (Coefficient (LabPolynomial poly vars), OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) Source #

leadingMonomial :: LabPolynomial poly vars -> OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars)) Source #

leadingCoeff :: LabPolynomial poly vars -> Coefficient (LabPolynomial poly vars) Source #

orderedMonomials :: LabPolynomial poly vars -> Set (OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) Source #

fromOrderedMonomial :: OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

toPolynomial :: (Coefficient (LabPolynomial poly vars), OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) -> LabPolynomial poly vars Source #

polynomial :: Map (OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) (Coefficient (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

(>*) :: OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

(*<) :: LabPolynomial poly vars -> OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars Source #

_Terms :: Iso' (LabPolynomial poly vars) (Map (OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) (Coefficient (LabPolynomial poly vars))) Source #

diff :: Ordinal Nat (Arity (LabPolynomial poly vars)) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

mapMonomialMonotonic :: (OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars)) -> OrderedMonomial * (MOrder (LabPolynomial poly vars)) (Arity (LabPolynomial poly vars))) -> LabPolynomial poly vars -> LabPolynomial poly vars Source #

(SingI [Nat] (Replicate Nat n 1), KnownNat n, IsMonomialOrder n ord, IsOrderedPolynomial poly) => IsOrderedPolynomial (PadPolyL n ord poly) Source # 

Associated Types

type MOrder (PadPolyL n ord poly) :: * Source #

Methods

coeff :: OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly -> Coefficient (PadPolyL n ord poly) Source #

terms :: PadPolyL n ord poly -> Map (OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) (Coefficient (PadPolyL n ord poly)) Source #

leadingTerm :: PadPolyL n ord poly -> (Coefficient (PadPolyL n ord poly), OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) Source #

leadingMonomial :: PadPolyL n ord poly -> OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly)) Source #

leadingCoeff :: PadPolyL n ord poly -> Coefficient (PadPolyL n ord poly) Source #

orderedMonomials :: PadPolyL n ord poly -> Set (OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) Source #

fromOrderedMonomial :: OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

toPolynomial :: (Coefficient (PadPolyL n ord poly), OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) -> PadPolyL n ord poly Source #

polynomial :: Map (OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) (Coefficient (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

(>*) :: OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

(*<) :: PadPolyL n ord poly -> OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly Source #

_Terms :: Iso' (PadPolyL n ord poly) (Map (OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) (Coefficient (PadPolyL n ord poly))) Source #

diff :: Ordinal Nat (Arity (PadPolyL n ord poly)) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

mapMonomialMonotonic :: (OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly)) -> OrderedMonomial * (MOrder (PadPolyL n ord poly)) (Arity (PadPolyL n ord poly))) -> PadPolyL n ord poly -> PadPolyL n ord poly Source #

(KnownNat n, CoeffRing r, IsMonomialOrder n ord) => IsOrderedPolynomial (OrderedPolynomial * r ord n) Source # 

Associated Types

type MOrder (OrderedPolynomial * r ord n) :: * Source #

Methods

coeff :: OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n -> Coefficient (OrderedPolynomial * r ord n) Source #

terms :: OrderedPolynomial * r ord n -> Map (OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) (Coefficient (OrderedPolynomial * r ord n)) Source #

leadingTerm :: OrderedPolynomial * r ord n -> (Coefficient (OrderedPolynomial * r ord n), OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) Source #

leadingMonomial :: OrderedPolynomial * r ord n -> OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n)) Source #

leadingCoeff :: OrderedPolynomial * r ord n -> Coefficient (OrderedPolynomial * r ord n) Source #

orderedMonomials :: OrderedPolynomial * r ord n -> Set (OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) Source #

fromOrderedMonomial :: OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

toPolynomial :: (Coefficient (OrderedPolynomial * r ord n), OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) -> OrderedPolynomial * r ord n Source #

polynomial :: Map (OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) (Coefficient (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

(>*) :: OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

(*<) :: OrderedPolynomial * r ord n -> OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n Source #

_Terms :: Iso' (OrderedPolynomial * r ord n) (Map (OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) (Coefficient (OrderedPolynomial * r ord n))) Source #

diff :: Ordinal Nat (Arity (OrderedPolynomial * r ord n)) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

mapMonomialMonotonic :: (OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n)) -> OrderedMonomial * (MOrder (OrderedPolynomial * r ord n)) (Arity (OrderedPolynomial * r ord n))) -> OrderedPolynomial * r ord n -> OrderedPolynomial * r ord n Source #

substCoeff :: IsPolynomial poly => Sized (Arity poly) (Coefficient poly) -> poly -> Coefficient poly Source #

liftMapCoeff :: IsPolynomial poly => (Ordinal (Arity poly) -> Coefficient poly) -> poly -> Coefficient poly Source #

class (DecidableZero r, Ring r, Commutative r, Eq r) => CoeffRing r Source #

Constraint synonym for rings that can be used as polynomial coefficient.

Instances

oneNorm :: (IsPolynomial poly, Normed (Coefficient poly), Monoidal (Norm (Coefficient poly))) => poly -> Norm (Coefficient poly) Source #

1-norm of given polynomial, taking sum of norms of each coefficients.

maxNorm :: (IsPolynomial poly, Normed (Coefficient poly)) => poly -> Norm (Coefficient poly) Source #

Maximum norm of given polynomial, taking maximum of the norms of each coefficients.

monoize :: (Field (Coefficient poly), IsOrderedPolynomial poly) => poly -> poly Source #

Make the given polynomial monic. If the given polynomial is zero, it returns as it is.

sPolynomial :: (IsOrderedPolynomial poly, Field (Coefficient poly)) => poly -> poly -> poly Source #

sPolynomial calculates the S-Polynomial of given two polynomials.

pDivModPoly :: (k ~ Coefficient poly, Euclidean k, IsOrderedPolynomial poly) => poly -> poly -> (poly, poly) Source #

pDivModPoly f g calculates the pseudo quotient and reminder of f by g.

content :: (IsPolynomial poly, Euclidean (Coefficient poly)) => poly -> Coefficient poly Source #

The content of a polynomial f is the gcd of all its coefficients.

pp :: (Euclidean (Coefficient poly), IsPolynomial poly) => poly -> poly Source #

pp f calculates the primitive part of given polynomial f, namely f / content(f).

vars :: forall poly. IsPolynomial poly => [poly] Source #

class Show r => PrettyCoeff r where Source #

Coefficients which admits pretty-printing

Methods

showsCoeff :: Int -> r -> ShowSCoeff Source #

Instances

PrettyCoeff Int Source # 
PrettyCoeff Int8 Source # 
PrettyCoeff Int16 Source # 
PrettyCoeff Int32 Source # 
PrettyCoeff Int64 Source # 
PrettyCoeff Integer Source # 
PrettyCoeff Word8 Source # 
PrettyCoeff Word16 Source # 
PrettyCoeff Word32 Source # 
PrettyCoeff Word64 Source # 
PrettyCoeff Natural Source # 
(Integral a, PrettyCoeff a) => PrettyCoeff (Ratio a) Source # 
PrettyCoeff r => PrettyCoeff (Complex r) Source # 
PrettyCoeff (Fraction Integer) Source # 
(PrettyCoeff r, Eq r, Euclidean r) => PrettyCoeff (Fraction r) Source # 
Reifies k p Integer => PrettyCoeff (F k p) Source # 

Methods

showsCoeff :: Int -> F k p -> ShowSCoeff Source #

(Reifies k p Integer, Show (F k p)) => PrettyCoeff (GF' k p n f) Source # 

Methods

showsCoeff :: Int -> GF' k p n f -> ShowSCoeff Source #

data ShowSCoeff Source #

Pretty-printing conditional for coefficients. Each returning ShowS must not have any sign.

showsCoeffAsTerm :: ShowSCoeff -> ShowS Source #

ShowS coefficients as term.

showsCoeffAsTerm Vanished "" = ""
showsCoeffAsTerm (Negative (shows "12")) "" = "-12"
showsCoeffAsTerm (Positive (shows "12")) "" = "12"

showsCoeffWithOp :: ShowSCoeff -> ShowS Source #

ShowS coefficients prefixed with infix operator.

(shows 12 . showsCoeffWithOp Vanished) "" = "12"
(shows 12 . showsCoeffWithOp (Negative (shows 34))) "" = "12 - 34"
(shows 12 . showsCoeffWithOp (Positive (shows 34))) "" = "12 + 34"

Polynomial division

divModPolynomial :: (IsOrderedPolynomial poly, Field (Coefficient poly)) => poly -> [poly] -> ([(poly, poly)], poly) infixl 7 Source #

Calculate a polynomial quotient and remainder w.r.t. second argument.

divPolynomial :: (IsOrderedPolynomial poly, Field (Coefficient poly)) => poly -> [poly] -> [(poly, poly)] infixl 7 Source #

A Quotient of given polynomial w.r.t. the second argument.

modPolynomial :: (IsOrderedPolynomial poly, Field (Coefficient poly)) => poly -> [poly] -> poly infixl 7 Source #

Remainder of given polynomial w.r.t. the second argument.

Default instances

recipUnitDefault :: (DecidableUnits r, Coefficient poly ~ r, IsPolynomial poly) => poly -> Maybe poly Source #

splitUnitDefault :: (UnitNormalForm r, Coefficient poly ~ r, IsOrderedPolynomial poly) => poly -> (poly, poly) Source #