{-# LANGUAGE ConstraintKinds, DataKinds, ExplicitNamespaces #-}
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving, LiberalTypeSynonyms #-}
{-# LANGUAGE MultiParamTypeClasses, NoMonomorphismRestriction #-}
{-# LANGUAGE PatternGuards, PolyKinds, RankNTypes, ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving, TemplateHaskell, TypeFamilies #-}
{-# LANGUAGE TypeOperators, TypeSynonymInstances, UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-type-defaults #-}
{-# OPTIONS_GHC -Wno-redundant-constraints #-}
module Algebra.Ring.Polynomial
( module Algebra.Ring.Polynomial.Monomial,
module Algebra.Ring.Polynomial.Class,
Polynomial,
transformMonomial,
castPolynomial, changeOrder, changeOrderProxy,
scastPolynomial, OrderedPolynomial(..),
allVars, substVar, homogenize, unhomogenize,
normalize, varX, getTerms, shiftR, orderedBy,
mapCoeff, reversal, padeApprox,
eval, evalUnivariate,
substUnivariate, minpolRecurrent,
IsOrder(..), PadPolyL(..), padLeftPoly
) where
import Algebra.Algorithms.Groebner
import Algebra.Internal
import Algebra.Ring.Polynomial.Class
import Algebra.Ring.Polynomial.Internal
import Algebra.Ring.Polynomial.Monomial
import AlgebraicPrelude
instance {-# OVERLAPPABLE #-}
(KnownNat n, Eq r, DecidableUnits r, DecidableZero r, Field r,
IsMonomialOrder n ord, ZeroProductSemiring r)
=> UFD (OrderedPolynomial r ord n)
instance {-# OVERLAPPABLE #-}
(KnownNat n, Eq r, DecidableUnits r, DecidableZero r, Field r,
IsMonomialOrder n ord, ZeroProductSemiring r)
=> GCDDomain (OrderedPolynomial r ord n) where
gcd = gcdPolynomial
lcm = lcmPolynomial