Safe Haskell | None |
---|---|
Language | Haskell2010 |
- type Monomial n = Sized' n Int
- newtype OrderedMonomial ordering n = OrderedMonomial {
- getMonomial :: Monomial n
- class IsOrder n ordering where
- class IsOrder n name => IsMonomialOrder n name
- type MonomialOrder n = Monomial n -> Monomial n -> Ordering
- type IsStrongMonomialOrder ord = Forall (IsMonomialOrder' ord)
- isRelativelyPrime :: OrderedMonomial ord n -> OrderedMonomial ord n -> Bool
- totalDegree :: OrderedMonomial ord n -> Int
- data ProductOrder n m a b where
- ProductOrder :: Sing n -> Sing m -> ord -> ord' -> ProductOrder n m ord ord'
- 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)
- productOrder' :: forall n ord ord' m. (IsOrder n ord, IsOrder m ord') => SNat n -> SNat m -> ord -> ord' -> MonomialOrder (n + m)
- type WeightProxy v = SList v
- data WeightOrder v ord where
- WeightOrder :: SList (v :: [Nat]) -> Proxy ord -> WeightOrder v ord
- gcdMonomial :: OrderedMonomial ord n -> OrderedMonomial ord n -> OrderedMonomial ord n
- divs :: OrderedMonomial ord n -> OrderedMonomial ord n -> Bool
- isPowerOf :: KnownNat n => OrderedMonomial ord n -> OrderedMonomial ord n -> Bool
- tryDiv :: Field r => (r, OrderedMonomial ord n) -> (r, OrderedMonomial ord n) -> (r, OrderedMonomial ord n)
- lcmMonomial :: OrderedMonomial ord n -> OrderedMonomial ord n -> OrderedMonomial ord n
- data Lex = Lex
- class (IsMonomialOrder n ord, KnownNat n) => EliminationType n m ord
- type EliminationOrder n m = ProductOrder n m Grevlex Grevlex
- type WeightedEliminationOrder n ord = WeightOrder (Replicate n 1) ord
- eliminationOrder :: SNat n -> SNat m -> EliminationOrder n m
- weightedEliminationOrder :: SNat n -> WeightedEliminationOrder n Grevlex
- lex :: MonomialOrder n
- revlex :: MonomialOrder n
- graded :: MonomialOrder n -> MonomialOrder n
- grlex :: MonomialOrder n
- grevlex :: MonomialOrder n
- weightOrder :: forall n ns ord. (KnownNat n, IsOrder n ord, SingI ns) => Proxy (WeightOrder ns ord) -> MonomialOrder n
- data Grevlex = Grevlex
- fromList :: SNat n -> [Int] -> Monomial n
- data Revlex = Revlex
- data Grlex = Grlex
- data Graded ord = Graded ord
- castMonomial :: KnownNat m => OrderedMonomial o n -> OrderedMonomial o' m
- scastMonomial :: SNat m -> OrderedMonomial o n -> OrderedMonomial o m
- varMonom :: SNat n -> Ordinal n -> Monomial n
- changeMonomialOrder :: o' -> OrderedMonomial ord n -> OrderedMonomial o' n
- changeMonomialOrderProxy :: Proxy o' -> OrderedMonomial ord n -> OrderedMonomial o' n
- sOnes :: Sing n -> Sing (Replicate n 1)
- withStrongMonomialOrder :: forall ord n r proxy proxy'. IsStrongMonomialOrder ord => proxy ord -> proxy' n -> (IsMonomialOrder n ord => r) -> r
- cmpAnyMonomial :: IsStrongMonomialOrder ord => Proxy ord -> Monomial n -> Monomial m -> Ordering
- orderMonomial :: proxy ord -> Monomial n -> OrderedMonomial ord n
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.
Eq (Monomial n) => Eq (OrderedMonomial k ordering n) Source # | |
(Eq (Monomial n), IsOrder n name) => Ord (OrderedMonomial * name n) Source # | Special ordering for ordered-monomials. |
KnownNat n => Show (OrderedMonomial k ord n) Source # | |
KnownNat n => Division (OrderedMonomial k ord n) Source # | |
KnownNat n => Unital (OrderedMonomial k ord n) Source # | |
Multiplicative (OrderedMonomial k ord n) Source # | |
Hashable (Monomial n) => Hashable (OrderedMonomial k ordering n) Source # | |
NFData (OrderedMonomial k ordering n) Source # | |
Wrapped (OrderedMonomial k ordering0 n0) Source # | |
(~) * (OrderedMonomial k1 ordering0 n0) t0 => Rewrapped (OrderedMonomial k ordering1 n1) t0 Source # | |
type Unwrapped (OrderedMonomial k ordering0 n0) Source # | |
class IsOrder n ordering where Source #
Class to lookup ordering from its (type-level) name.
cmpMonomial :: Proxy ordering -> MonomialOrder n Source #
IsOrder n Grlex Source # | |
IsOrder n Lex Source # | |
IsOrder n Revlex Source # | |
IsOrder n Grevlex Source # | |
IsOrder n ord => IsOrder n (Graded ord) Source # | |
(KnownNat n, IsOrder n ord, SingI [Nat] ws) => IsOrder n (WeightOrder ws ord) Source # | |
(IsOrder n ord, IsOrder m ord', KnownNat m, KnownNat n, (~) Nat k ((+) n m)) => IsOrder k (ProductOrder n m ord ord') Source # | |
class IsOrder n name => IsMonomialOrder n name Source #
Class for Monomial orders.
IsMonomialOrder n Lex Source # | |
IsMonomialOrder n Grevlex Source # | |
IsMonomialOrder n Grlex Source # | |
IsMonomialOrder n ord => IsMonomialOrder n (Graded ord) Source # | |
(KnownNat k, SingI [Nat] ws, IsMonomialOrder k ord) => IsMonomialOrder k (WeightOrder ws ord) Source # | |
(KnownNat n, KnownNat m, IsMonomialOrder n o, IsMonomialOrder m o', (~) Nat k ((+) n m)) => IsMonomialOrder k (ProductOrder n m o o') Source # | |
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.
isRelativelyPrime :: OrderedMonomial ord n -> OrderedMonomial ord n -> Bool Source #
totalDegree :: OrderedMonomial ord n -> Int Source #
data ProductOrder n m a b where Source #
ProductOrder :: Sing n -> Sing m -> ord -> ord' -> ProductOrder n m ord ord' |
(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 # | |
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 #
type WeightProxy v = SList v Source #
data WeightOrder v ord where Source #
WeightOrder :: SList (v :: [Nat]) -> Proxy ord -> WeightOrder v ord |
(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 # | |
gcdMonomial :: OrderedMonomial ord n -> OrderedMonomial ord n -> OrderedMonomial ord n Source #
divs :: OrderedMonomial ord n -> OrderedMonomial ord n -> Bool Source #
isPowerOf :: KnownNat n => OrderedMonomial ord n -> OrderedMonomial ord n -> Bool Source #
tryDiv :: Field r => (r, OrderedMonomial ord n) -> (r, OrderedMonomial ord n) -> (r, OrderedMonomial ord n) Source #
lcmMonomial :: OrderedMonomial ord n -> OrderedMonomial ord n -> OrderedMonomial ord n Source #
Lexicographical order
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.
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 # | |
type EliminationOrder n m = ProductOrder n m Grevlex Grevlex Source #
type WeightedEliminationOrder n ord = WeightOrder (Replicate n 1) ord Source #
eliminationOrder :: SNat n -> SNat m -> EliminationOrder n m 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 #
Graded reversed lexicographical order. Same as Graded Revlex
.
Reversed lexicographical order
Graded lexicographical order. Same as Graded Lex
.
Graded order from another monomial order.
Graded ord |
castMonomial :: KnownNat m => OrderedMonomial o n -> OrderedMonomial o' m Source #
scastMonomial :: SNat m -> OrderedMonomial o n -> OrderedMonomial o m Source #
changeMonomialOrder :: o' -> OrderedMonomial ord n -> OrderedMonomial o' n Source #
changeMonomialOrderProxy :: Proxy o' -> OrderedMonomial ord n -> OrderedMonomial o' n Source #
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 #