computational-algebra-0.3.0.0: 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 = forall 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 (IsMonomialOrder ord, SingRep n) => EliminationType n ord Source

Monomial order which can be use to calculate n-th elimination ideal. This should judge it as bigger that contains variables to eliminate.

Instances

lex :: MonomialOrderSource

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 :: MonomialOrderSource

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

grevlex :: MonomialOrderSource

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

productOrder :: forall ord ord' n m. (IsOrder ord, IsOrder ord', SingRep n) => Proxy (ProductOrder n ord ord') -> Monomial m -> Monomial m -> OrderingSource

productOrder' :: forall n ord ord' m. (IsOrder ord, IsOrder ord') => SNat n -> ord -> ord' -> Monomial m -> Monomial m -> OrderingSource

data WeightProxy v whereSource

Data.Proxy provides kind-polymorphic Proxy data-type, but due to bug of GHC 7.4.1, It canot be used as kind-polymorphic. So I define another type here.

Constructors

NilWeight :: WeightProxy `[]` 
ConsWeight :: SNat n -> WeightProxy v -> WeightProxy (n : v) 

weightOrder :: forall ns ord m. (ToWeightVector ns, IsOrder ord) => Proxy (WeightOrder ns ord) -> Monomial m -> Monomial m -> OrderingSource

type IsPolynomial r n = (NoetherianRing r, SingRep 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 :: (SingRep n, Eq r, NoetherianRing r, IsOrder order) => Map (OrderedMonomial order n) r -> OrderedPolynomial r order nSource

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

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

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

changeOrderProxy :: (Eq (Monomial n), IsOrder o, IsOrder o', SingRep n) => Proxy o' -> OrderedPolynomial k o n -> OrderedPolynomial k o' nSource

scastPolynomial :: (IsOrder o, IsOrder o', IsPolynomial r n, IsPolynomial r m, n :<= m, SingRep 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

(Eq r, NoetherianRing r, IsMonomialOrder ord) => Monomorphicable Nat (OrderedPolynomial r ord) 
(IsOrder order, IsPolynomial Nat r n) => LeftModule Integer (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => LeftModule Natural (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => RightModule Integer (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => RightModule Natural (OrderedPolynomial r order n) 
(NoetherianRing r, Eq r, IsMonomialOrder ord) => Monomorphicable Nat (:.: * Nat Ideal (OrderedPolynomial r ord)) 
Wrapped (Map (OrderedMonomial order n) r) (Map (OrderedMonomial order' m) q) (OrderedPolynomial r order n) (OrderedPolynomial q order' m) 
(Eq r, IsOrder order, IsPolynomial Nat r n) => Eq (OrderedPolynomial r order n) 
(IsMonomialOrder order, IsPolynomial Nat 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.

(SingRep Nat n, IsOrder order) => Show (OrderedPolynomial Rational order n) 
(Eq r, IsPolynomial Nat r n, IsOrder order, Show r) => Show (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Commutative (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Ring (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Rig (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Unital (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Group (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Multiplicative (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Semiring (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Monoidal (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Additive (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat r n) => Abelian (OrderedPolynomial r order n) 
(IsOrder order, IsPolynomial Nat 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, SingRep n, NoetherianRing a, IsOrder ordering) => [(Int, String)] -> OrderedPolynomial a ordering n -> StringSource

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

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

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

var :: (NoetherianRing r, SingRep 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.

class ToWeightVector vs whereSource

Methods

calcOrderWeight :: Proxy' vs -> Vector Int n -> IntSource

Instances

ToWeightVector ([] Nat) 
(SingRep Nat n, ToWeightVector ns) => ToWeightVector (: Nat n ns) 

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

newtype OrderedMonomial ordering n Source

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

Constructors

OrderedMonomial 

Fields

getMonomial :: Monomial n
 

Instances

Monomorphicable Nat (OrderedMonomial ord) 
Wrapped (Monomial n) (Monomial m) (OrderedMonomial o n) (OrderedMonomial o' m) 
Eq (Monomorphic Nat (OrderedMonomial ord)) 
Eq (Monomial n) => Eq (OrderedMonomial ordering n) 
IsMonomialOrder ord => Ord (Monomorphic Nat (OrderedMonomial ord)) 
(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) 

newtype OrderedMonomial' ord Source

Monomorphic representation for monomial.

Constructors

OM' 

Fields

getMonomial' :: [Int]
 

data Grevlex Source

Graded reversed lexicographical order. Same as Graded Revlex.

Constructors

Grevlex 

data Revlex Source

Reversed lexicographical order

Constructors

Revlex 

data Lex Source

Lexicographical order

Constructors

Lex 

Instances

data Grlex Source

Graded lexicographical order. Same as Graded Lex.

Constructors

Grlex 

data Graded ord Source

Graded order from another monomial order.

Constructors

Graded ord 

Instances

Eq ord => Eq (Graded ord) 
Ord ord => Ord (Graded ord) 
Read ord => Read (Graded ord) 
Show ord => Show (Graded ord) 
IsMonomialOrder ord => IsMonomialOrder (Graded ord) 
IsOrder ord => IsOrder (Graded ord) 

data ProductOrder n a b whereSource

Constructors

ProductOrder :: SNat n -> ord -> ord' -> ProductOrder n ord ord' 

Instances

(SingRep Nat n, IsMonomialOrder ord, IsMonomialOrder ord') => EliminationType Nat n (ProductOrder n ord ord') 
(SingRep Nat n, IsMonomialOrder o, IsMonomialOrder o') => IsMonomialOrder (ProductOrder n o o') 
(IsOrder ord, IsOrder ord', SingRep Nat n) => IsOrder (ProductOrder n ord ord') 

data WeightOrder v ord whereSource

Constructors

WeightOrder :: WeightProxy (v :: [Nat]) -> ord -> WeightOrder v ord 

class IsOrder ordering whereSource

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

Methods

cmpMonomial :: Proxy ordering -> MonomialOrderSource

Instances

IsOrder Grlex 
IsOrder Grevlex 
IsOrder Revlex 
IsOrder Lex 
IsOrder ord => IsOrder (Graded ord) 
(SingRep Nat n, IsMonomialOrder ord) => IsOrder (WeightedEliminationOrder n ord) 
(ToWeightVector ws, IsOrder ord) => IsOrder (WeightOrder ws ord) 
(IsOrder ord, IsOrder ord', SingRep Nat n) => IsOrder (ProductOrder n ord ord')