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

Safe HaskellNone
LanguageHaskell2010

Algebra.Ring.Polynomial.Univariate

Description

Polynomial type optimized to univariate polynomial.

Synopsis

Documentation

data Unipol r Source #

Univariate polynomial. It uses IntMap as its internal representation; so if you want to treat the power greater than maxBound :: Int, please consider using other represntation.

Instances

Unital r => IsLabel "x" (Unipol r) Source #

By this instance, you can use #x for the unique variable of Unipol r.

Methods

fromLabel :: Proxy# Symbol "x" -> Unipol r #

(DecidableZero r, LeftModule Integer r) => LeftModule Integer (Unipol r) Source # 

Methods

(.*) :: Integer -> Unipol r -> Unipol r #

(DecidableZero r, LeftModule Natural r) => LeftModule Natural (Unipol r) Source # 

Methods

(.*) :: Natural -> Unipol r -> Unipol r #

(DecidableZero r, RightModule Integer r) => RightModule Integer (Unipol r) Source # 

Methods

(*.) :: Unipol r -> Integer -> Unipol r #

(DecidableZero r, RightModule Natural r) => RightModule Natural (Unipol r) Source # 

Methods

(*.) :: Unipol r -> Natural -> Unipol r #

(Eq r, DecidableZero r) => Eq (Unipol r) Source # 

Methods

(==) :: Unipol r -> Unipol r -> Bool #

(/=) :: Unipol r -> Unipol r -> Bool #

CoeffRing r => Num (Unipol r) Source # 

Methods

(+) :: Unipol r -> Unipol r -> Unipol r #

(-) :: Unipol r -> Unipol r -> Unipol r #

(*) :: Unipol r -> Unipol r -> Unipol r #

negate :: Unipol r -> Unipol r #

abs :: Unipol r -> Unipol r #

signum :: Unipol r -> Unipol r #

fromInteger :: Integer -> Unipol r #

(Ord r, DecidableZero r) => Ord (Unipol r) Source # 

Methods

compare :: Unipol r -> Unipol r -> Ordering #

(<) :: Unipol r -> Unipol r -> Bool #

(<=) :: Unipol r -> Unipol r -> Bool #

(>) :: Unipol r -> Unipol r -> Bool #

(>=) :: Unipol r -> Unipol r -> Bool #

max :: Unipol r -> Unipol r -> Unipol r #

min :: Unipol r -> Unipol r -> Unipol r #

(CoeffRing r, PrettyCoeff r) => Show (Unipol r) Source # 

Methods

showsPrec :: Int -> Unipol r -> ShowS #

show :: Unipol r -> String #

showList :: [Unipol r] -> ShowS #

(Eq r, Field r) => IntegralDomain (Unipol r) Source # 

Methods

divides :: Unipol r -> Unipol r -> Bool #

maybeQuot :: Unipol r -> Unipol r -> Maybe (Unipol r) #

(Eq r, Field r) => GCDDomain (Unipol r) Source # 

Methods

gcd :: Unipol r -> Unipol r -> Unipol r #

reduceFraction :: Unipol r -> Unipol r -> (Unipol r, Unipol r) #

lcm :: Unipol r -> Unipol r -> Unipol r #

(Eq r, Field r) => UFD (Unipol r) Source # 
(Eq r, Field r) => PID (Unipol r) Source # 

Methods

egcd :: Unipol r -> Unipol r -> (Unipol r, Unipol r, Unipol r) #

(Eq r, Field r) => Euclidean (Unipol r) Source # 

Methods

degree :: Unipol r -> Maybe Natural #

divide :: Unipol r -> Unipol r -> (Unipol r, Unipol r) #

quot :: Unipol r -> Unipol r -> Unipol r #

rem :: Unipol r -> Unipol r -> Unipol r #

(CoeffRing r, Commutative r) => Commutative (Unipol r) Source # 
(Eq r, Field r) => UnitNormalForm (Unipol r) Source # 

Methods

splitUnit :: Unipol r -> (Unipol r, Unipol r) #

(Eq r, Field r) => ZeroProductSemiring (Unipol r) Source # 
(CoeffRing r, DecidableZero r) => Ring (Unipol r) Source # 

Methods

fromInteger :: Integer -> Unipol r #

(CoeffRing r, DecidableZero r) => Rig (Unipol r) Source # 

Methods

fromNatural :: Natural -> Unipol r #

DecidableZero r => DecidableZero (Unipol r) Source # 

Methods

isZero :: Unipol r -> Bool #

(Eq r, Field r) => DecidableUnits (Unipol r) Source # 

Methods

recipUnit :: Unipol r -> Maybe (Unipol r) #

isUnit :: Unipol r -> Bool #

(^?) :: Integral n => Unipol r -> n -> Maybe (Unipol r) #

(Eq r, Field r) => DecidableAssociates (Unipol r) Source # 

Methods

isAssociate :: Unipol r -> Unipol r -> Bool #

(CoeffRing r, Unital r) => Unital (Unipol r) Source # 

Methods

one :: Unipol r #

pow :: Unipol r -> Natural -> Unipol r #

productWith :: Foldable f => (a -> Unipol r) -> f a -> Unipol r #

(DecidableZero r, Group r) => Group (Unipol r) Source # 

Methods

(-) :: Unipol r -> Unipol r -> Unipol r #

negate :: Unipol r -> Unipol r #

subtract :: Unipol r -> Unipol r -> Unipol r #

times :: Integral n => n -> Unipol r -> Unipol r #

(CoeffRing r, Multiplicative r) => Multiplicative (Unipol r) Source # 

Methods

(*) :: Unipol r -> Unipol r -> Unipol r #

pow1p :: Unipol r -> Natural -> Unipol r #

productWith1 :: Foldable1 f => (a -> Unipol r) -> f a -> Unipol r #

(CoeffRing r, DecidableZero r) => Semiring (Unipol r) Source # 
DecidableZero r => Monoidal (Unipol r) Source # 

Methods

zero :: Unipol r #

sinnum :: Natural -> Unipol r -> Unipol r #

sumWith :: Foldable f => (a -> Unipol r) -> f a -> Unipol r #

DecidableZero r => Additive (Unipol r) Source # 

Methods

(+) :: Unipol r -> Unipol r -> Unipol r #

sinnum1p :: Natural -> Unipol r -> Unipol r #

sumWith1 :: Foldable1 f => (a -> Unipol r) -> f a -> Unipol r #

(DecidableZero r, Abelian r) => Abelian (Unipol r) Source # 
Hashable r => Hashable (Unipol r) Source # 

Methods

hashWithSalt :: Int -> Unipol r -> Int #

hash :: Unipol r -> Int #

NFData r => NFData (Unipol r) Source # 

Methods

rnf :: Unipol r -> () #

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 #

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 #

(DecidableZero r, Semiring r) => LeftModule (Scalar r) (Unipol r) Source # 

Methods

(.*) :: Scalar r -> Unipol r -> Unipol r #

(DecidableZero r, Semiring r) => RightModule (Scalar r) (Unipol r) Source # 

Methods

(*.) :: Unipol r -> Scalar r -> Unipol r #

ConwayPolynomial p n => Reifies * (Conway Nat Nat p n) (Unipol (F Nat p)) # 

Methods

reflect :: proxy (Unipol (F Nat p)) -> a #

type MOrder (Unipol r) Source # 
type MOrder (Unipol r) = Grevlex
type Coefficient (Unipol r) Source # 
type Coefficient (Unipol r) = r
type Arity (Unipol r) Source # 
type Arity (Unipol r) = 1

naiveMult :: (DecidableZero r, Multiplicative r) => Unipol r -> Unipol r -> Unipol r Source #

Polynomial multiplication, naive version.

karatsuba :: forall r. CoeffRing r => Unipol r -> Unipol r -> Unipol r Source #

Polynomial multiplication using Karatsuba's method.

divModUnipolByMult :: (Eq r, Field r) => Unipol r -> Unipol r -> (Unipol r, Unipol r) Source #

divModUnipol :: (CoeffRing r, Field r) => Unipol r -> Unipol r -> (Unipol r, Unipol r) Source #

mapCoeffUnipol :: DecidableZero b => (a -> b) -> Unipol a -> Unipol b Source #

liftMapUnipol :: (Module (Scalar k) r, Monoidal k, Unital r) => (Ordinal 1 -> r) -> Unipol k -> r Source #