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

Safe HaskellNone
LanguageHaskell2010

Algebra.Ring.Polynomial.Monomial

Contents

Synopsis

Documentation

type Monomial n = Sized' n Int Source #

N-ary Monomial. IntMap contains degrees for each x_i- type Monomial (n :: Nat) = Sized n Int

newtype OrderedMonomial ordering n Source #

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

Constructors

OrderedMonomial 

Fields

Instances

Eq (Monomial n) => Eq (OrderedMonomial k ordering n) Source # 

Methods

(==) :: OrderedMonomial k ordering n -> OrderedMonomial k ordering n -> Bool #

(/=) :: OrderedMonomial k ordering n -> OrderedMonomial k ordering n -> Bool #

(Eq (Monomial n), IsOrder n name) => Ord (OrderedMonomial * name n) Source #

Special ordering for ordered-monomials.

Methods

compare :: OrderedMonomial * name n -> OrderedMonomial * name n -> Ordering #

(<) :: OrderedMonomial * name n -> OrderedMonomial * name n -> Bool #

(<=) :: OrderedMonomial * name n -> OrderedMonomial * name n -> Bool #

(>) :: OrderedMonomial * name n -> OrderedMonomial * name n -> Bool #

(>=) :: OrderedMonomial * name n -> OrderedMonomial * name n -> Bool #

max :: OrderedMonomial * name n -> OrderedMonomial * name n -> OrderedMonomial * name n #

min :: OrderedMonomial * name n -> OrderedMonomial * name n -> OrderedMonomial * name n #

KnownNat n => Show (OrderedMonomial k ord n) Source # 

Methods

showsPrec :: Int -> OrderedMonomial k ord n -> ShowS #

show :: OrderedMonomial k ord n -> String #

showList :: [OrderedMonomial k ord n] -> ShowS #

KnownNat n => Division (OrderedMonomial k ord n) Source # 

Methods

recip :: OrderedMonomial k ord n -> OrderedMonomial k ord n #

(/) :: OrderedMonomial k ord n -> OrderedMonomial k ord n -> OrderedMonomial k ord n #

(\\) :: OrderedMonomial k ord n -> OrderedMonomial k ord n -> OrderedMonomial k ord n #

(^) :: Integral n => OrderedMonomial k ord n -> n -> OrderedMonomial k ord n #

KnownNat n => Unital (OrderedMonomial k ord n) Source # 

Methods

one :: OrderedMonomial k ord n #

pow :: OrderedMonomial k ord n -> Natural -> OrderedMonomial k ord n #

productWith :: Foldable f => (a -> OrderedMonomial k ord n) -> f a -> OrderedMonomial k ord n #

Multiplicative (OrderedMonomial k ord n) Source # 

Methods

(*) :: OrderedMonomial k ord n -> OrderedMonomial k ord n -> OrderedMonomial k ord n #

pow1p :: OrderedMonomial k ord n -> Natural -> OrderedMonomial k ord n #

productWith1 :: Foldable1 f => (a -> OrderedMonomial k ord n) -> f a -> OrderedMonomial k ord n #

Hashable (Monomial n) => Hashable (OrderedMonomial k ordering n) Source # 

Methods

hashWithSalt :: Int -> OrderedMonomial k ordering n -> Int #

hash :: OrderedMonomial k ordering n -> Int #

NFData (OrderedMonomial k ordering n) Source # 

Methods

rnf :: OrderedMonomial k ordering n -> () #

Wrapped (OrderedMonomial k ordering0 n0) Source # 

Associated Types

type Unwrapped (OrderedMonomial k ordering0 n0) :: * #

Methods

_Wrapped' :: Iso' (OrderedMonomial k ordering0 n0) (Unwrapped (OrderedMonomial k ordering0 n0)) #

(~) * (OrderedMonomial k1 ordering0 n0) t0 => Rewrapped (OrderedMonomial k ordering1 n1) t0 Source # 
type Unwrapped (OrderedMonomial k ordering0 n0) Source # 
type Unwrapped (OrderedMonomial k ordering0 n0) = Monomial n0

class IsOrder n ordering where Source #

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

Minimal complete definition

cmpMonomial

Methods

cmpMonomial :: Proxy ordering -> MonomialOrder n Source #

Instances

class IsOrder n name => IsMonomialOrder n name Source #

Class for Monomial orders.

type MonomialOrder n = Monomial n -> Monomial n -> Ordering Source #

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

type IsStrongMonomialOrder ord = Forall (IsMonomialOrder' ord) Source #

Monomial ordering which can do with monomials of arbitrary large arity.

data ProductOrder n m a b where Source #

Constructors

ProductOrder :: Sing n -> Sing m -> ord -> ord' -> ProductOrder n m ord ord' 

Instances

(KnownNat n, KnownNat m, IsMonomialOrder n ord, IsMonomialOrder m ord', (~) Nat k ((+) n m), KnownNat k) => EliminationType Nat k n (ProductOrder n m ord ord') Source # 
(KnownNat n, KnownNat m, IsMonomialOrder n o, IsMonomialOrder m o', (~) Nat k ((+) n m)) => IsMonomialOrder k (ProductOrder n m o o') Source # 
(IsOrder n ord, IsOrder m ord', KnownNat m, KnownNat n, (~) Nat k ((+) n m)) => IsOrder k (ProductOrder n m ord ord') Source # 

Methods

cmpMonomial :: Proxy * (ProductOrder n m ord ord') -> MonomialOrder k Source #

productOrder :: forall ord ord' n m. (IsOrder n ord, IsOrder m ord', KnownNat n, KnownNat m) => Proxy (ProductOrder n m ord ord') -> MonomialOrder (n + m) Source #

productOrder' :: forall n ord ord' m. (IsOrder n ord, IsOrder m ord') => SNat n -> SNat m -> ord -> ord' -> MonomialOrder (n + m) Source #

data WeightOrder v ord where Source #

Constructors

WeightOrder :: SList (v :: [Nat]) -> Proxy ord -> WeightOrder v ord 

Instances

(IsMonomialOrder k ord, (~) [Nat] ones (Replicate Nat n 1), SingI [Nat] ones, (~) Bool ((:<=) Nat (Length Nat ones) k) True, KnownNat k) => EliminationType Nat k n (WeightOrder ones ord) Source # 
(KnownNat k, SingI [Nat] ws, IsMonomialOrder k ord) => IsMonomialOrder k (WeightOrder ws ord) Source # 
(KnownNat n, IsOrder n ord, SingI [Nat] ws) => IsOrder n (WeightOrder ws ord) Source # 

tryDiv :: Field r => (r, OrderedMonomial ord n) -> (r, OrderedMonomial ord n) -> (r, OrderedMonomial ord n) Source #

data Lex Source #

Lexicographical order

Constructors

Lex 

Instances

Eq Lex Source # 

Methods

(==) :: Lex -> Lex -> Bool #

(/=) :: Lex -> Lex -> Bool #

Ord Lex Source # 

Methods

compare :: Lex -> Lex -> Ordering #

(<) :: Lex -> Lex -> Bool #

(<=) :: Lex -> Lex -> Bool #

(>) :: Lex -> Lex -> Bool #

(>=) :: Lex -> Lex -> Bool #

max :: Lex -> Lex -> Lex #

min :: Lex -> Lex -> Lex #

Show Lex Source # 

Methods

showsPrec :: Int -> Lex -> ShowS #

show :: Lex -> String #

showList :: [Lex] -> ShowS #

IsMonomialOrder n Lex Source # 
IsOrder n Lex Source # 
KnownNat n => EliminationType k n m Lex Source # 

class (IsMonomialOrder n ord, KnownNat n) => EliminationType n m ord Source #

Monomial order which can be use to calculate n-th elimination ideal of m-ary polynomial. This should judge monomial to be bigger if it contains variables to eliminate.

Instances

KnownNat n => EliminationType k n m Lex Source # 
(IsMonomialOrder k ord, (~) [Nat] ones (Replicate Nat n 1), SingI [Nat] ones, (~) Bool ((:<=) Nat (Length Nat ones) k) True, KnownNat k) => EliminationType Nat k n (WeightOrder ones ord) Source # 
(KnownNat n, KnownNat m, IsMonomialOrder n ord, IsMonomialOrder m ord', (~) Nat k ((+) n m), KnownNat k) => EliminationType Nat k n (ProductOrder n m ord ord') Source # 

lex :: MonomialOrder n Source #

Lexicographical order. This *is* a monomial order.

revlex :: MonomialOrder n Source #

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

graded :: MonomialOrder n -> MonomialOrder n Source #

Convert ordering into graded one.

grlex :: MonomialOrder n Source #

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

grevlex :: MonomialOrder n Source #

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

weightOrder :: forall n ns ord. (KnownNat n, IsOrder n ord, SingI ns) => Proxy (WeightOrder ns ord) -> MonomialOrder n Source #

data Grevlex Source #

Graded reversed lexicographical order. Same as Graded Revlex.

Constructors

Grevlex 

fromList :: SNat n -> [Int] -> Monomial n Source #

convert NAry list into Monomial.

data Revlex Source #

Reversed lexicographical order

Constructors

Revlex 

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

IsMonomialOrder n ord => IsMonomialOrder n (Graded ord) Source # 
IsOrder n ord => IsOrder n (Graded ord) Source # 
Eq ord => Eq (Graded ord) Source # 

Methods

(==) :: Graded ord -> Graded ord -> Bool #

(/=) :: Graded ord -> Graded ord -> Bool #

Ord ord => Ord (Graded ord) Source # 

Methods

compare :: Graded ord -> Graded ord -> Ordering #

(<) :: Graded ord -> Graded ord -> Bool #

(<=) :: Graded ord -> Graded ord -> Bool #

(>) :: Graded ord -> Graded ord -> Bool #

(>=) :: Graded ord -> Graded ord -> Bool #

max :: Graded ord -> Graded ord -> Graded ord #

min :: Graded ord -> Graded ord -> Graded ord #

Read ord => Read (Graded ord) Source # 
Show ord => Show (Graded ord) Source # 

Methods

showsPrec :: Int -> Graded ord -> ShowS #

show :: Graded ord -> String #

showList :: [Graded ord] -> ShowS #

withStrongMonomialOrder :: forall ord n r proxy proxy'. IsStrongMonomialOrder ord => proxy ord -> proxy' n -> (IsMonomialOrder n ord => r) -> r Source #

cmpAnyMonomial :: IsStrongMonomialOrder ord => Proxy ord -> Monomial n -> Monomial m -> Ordering Source #

Comparing monomials with different arity, padding with 0 at bottom of the shorter monomial to make the length equal.

orderMonomial :: proxy ord -> Monomial n -> OrderedMonomial ord n Source #

Orphan instances

Ord (Monomial n) Source #

For simplicity, we choose grevlex for the default monomial ordering (for the sake of efficiency).

Methods

compare :: Monomial n -> Monomial n -> Ordering #

(<) :: Monomial n -> Monomial n -> Bool #

(<=) :: Monomial n -> Monomial n -> Bool #

(>) :: Monomial n -> Monomial n -> Bool #

(>=) :: Monomial n -> Monomial n -> Bool #

max :: Monomial n -> Monomial n -> Monomial n #

min :: Monomial n -> Monomial n -> Monomial n #