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

Safe HaskellNone

Algebra.Ring.Polynomial

Synopsis

Documentation

type Monomial n = Vector Int nSource

N-ary Monomial. IntMap contains degrees for each x_i.

type MonomialOrder n = Monomial n -> Monomial n -> OrderingSource

Monomial order (of degree n). This should satisfy following laws: (1) Totality: forall a, b (a < b || a == b || b < a) (2) Additivity: a b == a + c <= b + c (3) Non-negative: forall a, 0 <= a

class Order a

Instances

Order Bool 
Order Int 
Order Int8 
Order Int16 
Order Int32 
Order Int64 
Order Integer 
Order Word 
Order Word8 
Order Word16 
Order Word32 
Order Word64 
Order () 
Order Natural 
Ord a => Order (Set a) 
(Order a, Order b) => Order (a, b) 
(Order a, Order b, Order c) => Order (a, b, c) 
(Order a, Order b, Order c, Order d) => Order (a, b, c, d) 
(Order a, Order b, Order c, Order d, Order e) => Order (a, b, c, d, e) 

lex :: MonomialOrder nSource

Lexicographical order. This *is* a monomial order.

revlex :: Monomial n -> Monomial n -> OrderingSource

Reversed lexicographical order. This is *not* a monomial order.

graded :: (Monomial n -> Monomial n -> Ordering) -> Monomial n -> Monomial n -> OrderingSource

Convert ordering into graded one.

grlex :: MonomialOrder nSource

Graded lexicographical order. This *is* a monomial order.

grevlex :: MonomialOrder nSource

Graded reversed lexicographical order. This *is* a monomial order.

type IsPolynomial r n = (NoetherianRing r, Sing n, Eq r)Source

Type-level constraint to check whether it forms polynomial ring or not.

coeff :: (IsOrder order, IsPolynomial r n) => Monomial n -> OrderedPolynomial r order n -> rSource

coefficient for a degree.

sPolynomial :: (IsPolynomial k n, Field k, IsOrder order) => OrderedPolynomial k order n -> OrderedPolynomial k order n -> OrderedPolynomial k order nSource

polynomial :: (Sing n, Eq r, NoetherianRing r, IsOrder order) => Map (OrderedMonomial order n) r -> OrderedPolynomial r order nSource

castMonomial :: (IsOrder o, IsOrder o', Sing m, n :<= m) => OrderedMonomial o n -> OrderedMonomial o' mSource

castPolynomial :: (IsPolynomial r n, IsPolynomial r m, Sing m, IsOrder o, IsOrder o', n :<= m) => OrderedPolynomial r o n -> OrderedPolynomial r o' mSource

toPolynomial :: (IsOrder order, IsPolynomial r n) => (r, Monomial n) -> OrderedPolynomial r order nSource

changeOrder :: (Eq (Monomial n), IsOrder o, IsOrder o', Sing n) => o' -> OrderedPolynomial k o n -> OrderedPolynomial k o' nSource

scastMonomial :: n :<= m => SNat m -> OrderedMonomial o n -> OrderedMonomial o mSource

scastPolynomial :: (IsOrder o, IsOrder o', IsPolynomial r n, IsPolynomial r m, n :<= m, Sing m) => SNat m -> OrderedPolynomial r o n -> OrderedPolynomial r o' mSource

data OrderedPolynomial r order n Source

n-ary polynomial ring over some noetherian ring R.

Instances

(IsOrder order, IsPolynomial r n) => LeftModule Integer (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => LeftModule Natural (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => RightModule Integer (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => RightModule Natural (OrderedPolynomial r order n) 
Wrapped (Map (OrderedMonomial order n) r) (Map (OrderedMonomial order' m) q) (OrderedPolynomial r order n) (OrderedPolynomial q order' m) 
(Eq r, IsOrder order, IsPolynomial r n) => Eq (OrderedPolynomial r order n) 
(IsMonomialOrder order, IsPolynomial r n, Num r) => Num (OrderedPolynomial r order n)

We provide Num instance to use trivial injection R into R[X]. Do not use signum or abs.

(Eq r, IsPolynomial r n, IsOrder order, Show r) => Show (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Commutative (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Ring (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Rig (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Unital (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Group (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Multiplicative (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Semiring (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Monoidal (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Additive (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => Abelian (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial r n) => NoetherianRing (OrderedPolynomial r order n)

By Hilbert's finite basis theorem, a polynomial ring over a noetherian ring is also a noetherian ring.

showPolynomialWithVars :: (Eq a, Show a, Sing n, NoetherianRing a, IsOrder ordering) => [(Int, String)] -> OrderedPolynomial a ordering n -> StringSource

normalize :: (Eq r, IsOrder order, IsPolynomial r n) => OrderedPolynomial r order n -> OrderedPolynomial r order nSource

varX :: (NoetherianRing r, Sing n, One :<= n) => OrderedPolynomial r order nSource

var :: (NoetherianRing r, Sing m, S n :<= m) => SNat (S n) -> OrderedPolynomial r order mSource

getTerms :: OrderedPolynomial k order n -> [(k, Monomial n)]Source

shiftR :: forall k r n ord. (Field r, IsPolynomial r n, IsPolynomial r (k :+: n), IsOrder ord) => SNat k -> OrderedPolynomial r ord n -> OrderedPolynomial r ord (k :+: n)Source

tryDiv :: Field r => (r, Monomial n) -> (r, Monomial n) -> (r, Monomial n)Source

fromList :: SNat n -> [Int] -> Monomial nSource

convert NAry list into Monomial.

leadingTerm :: (IsOrder order, IsPolynomial r n) => OrderedPolynomial r order n -> (r, Monomial n)Source

leadingCoeff :: (IsOrder order, IsPolynomial r n) => OrderedPolynomial r order n -> rSource

genVars :: forall k o n. (IsPolynomial k (S n), IsOrder o) => SNat (S n) -> [OrderedPolynomial k o (S n)]Source

sDegree :: OrderedPolynomial k ord n -> SNat nSource

newtype OrderedMonomial ordering n Source

A wrapper for monomials with a certain (monomial) order.

Constructors

OrderedMonomial 

Fields

getMonomial :: Monomial n
 

Instances

Wrapped (Monomial n) (Monomial m) (OrderedMonomial o n) (OrderedMonomial o' m) 
Eq (Monomial n) => Eq (OrderedMonomial ordering n) 
(Eq (Monomial n), IsOrder name) => Ord (OrderedMonomial name n)

Special ordering for ordered-monomials.

Wrapped (Map (OrderedMonomial order n) r) (Map (OrderedMonomial order' m) q) (OrderedPolynomial r order n) (OrderedPolynomial q order' m) 

data Revlex Source

Constructors

Revlex 

data Lex Source

Constructors

Lex 

class IsOrder ordering Source

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

class IsOrder name => IsMonomialOrder name Source

Class for Monomial orders.