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

Safe HaskellNone
LanguageHaskell2010

Algebra.Field.Galois

Synopsis

Documentation

data GF' p n f Source #

Galois field of order p^n. f stands for the irreducible polynomial over F_p of degree n.

Instances

Reifies k p Integer => LeftModule Integer (GF' k p n f) Source # 

Methods

(.*) :: Integer -> GF' k p n f -> GF' k p n f #

Reifies k p Integer => LeftModule Natural (GF' k p n f) Source # 

Methods

(.*) :: Natural -> GF' k p n f -> GF' k p n f #

Reifies k p Integer => RightModule Integer (GF' k p n f) Source # 

Methods

(*.) :: GF' k p n f -> Integer -> GF' k p n f #

Reifies k p Integer => RightModule Natural (GF' k p n f) Source # 

Methods

(*.) :: GF' k p n f -> Natural -> GF' k p n f #

Reifies k p Integer => Eq (GF' k p n f) Source # 

Methods

(==) :: GF' k p n f -> GF' k p n f -> Bool #

(/=) :: GF' k p n f -> GF' k p n f -> Bool #

(Reifies k p Integer, Reifies * f (Unipol (F k p)), KnownNat n) => Fractional (GF' k p n f) Source # 

Methods

(/) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

recip :: GF' k p n f -> GF' k p n f #

fromRational :: Rational -> GF' k p n f #

(Reifies k p Integer, Reifies * f (Unipol (F k p)), KnownNat n) => Num (GF' k p n f) Source # 

Methods

(+) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

(-) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

(*) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

negate :: GF' k p n f -> GF' k p n f #

abs :: GF' k p n f -> GF' k p n f #

signum :: GF' k p n f -> GF' k p n f #

fromInteger :: Integer -> GF' k p n f #

(Reifies k p Integer, Show (F k p)) => Show (GF' k p n f) Source # 

Methods

showsPrec :: Int -> GF' k p n f -> ShowS #

show :: GF' k p n f -> String #

showList :: [GF' k p n f] -> ShowS #

(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => IntegralDomain (GF' k p n f) Source # 

Methods

divides :: GF' k p n f -> GF' k p n f -> Bool #

maybeQuot :: GF' k p n f -> GF' k p n f -> Maybe (GF' k p n f) #

(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => GCDDomain (GF' k p n f) Source # 

Methods

gcd :: GF' k p n f -> GF' k p n f -> GF' k p n f #

reduceFraction :: GF' k p n f -> GF' k p n f -> (GF' k p n f, GF' k p n f) #

lcm :: GF' k p n f -> GF' k p n f -> GF' k p n f #

(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => UFD (GF' k p n f) Source # 
(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => PID (GF' k p n f) Source # 

Methods

egcd :: GF' k p n f -> GF' k p n f -> (GF' k p n f, GF' k p n f, GF' k p n f) #

(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => Euclidean (GF' k p n f) Source # 

Methods

degree :: GF' k p n f -> Maybe Natural #

divide :: GF' k p n f -> GF' k p n f -> (GF' k p n f, GF' k p n f) #

quot :: GF' k p n f -> GF' k p n f -> GF' k p n f #

rem :: GF' k p n f -> GF' k p n f -> GF' k p n f #

(KnownNat n, Reifies * f (Unipol (F k p)), Reifies k p Integer) => Commutative (GF' k p n f) Source # 
(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => UnitNormalForm (GF' k p n f) Source # 

Methods

splitUnit :: GF' k p n f -> (GF' k p n f, GF' k p n f) #

(KnownNat n, IsGF' * p n f) => ZeroProductSemiring (GF' Nat p n f) Source # 
(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => ZeroProductSemiring (GF' k p n f) Source # 
(KnownNat n, Reifies * f (Unipol (F k p)), Reifies k p Integer) => Ring (GF' k p n f) Source # 

Methods

fromInteger :: Integer -> GF' k p n f #

(Reifies k p Integer, Reifies * f (Unipol (F k p)), KnownNat n) => Characteristic (GF' k p n f) Source # 

Methods

char :: proxy (GF' k p n f) -> Natural #

(KnownNat n, Reifies * f (Unipol (F k p)), Reifies k p Integer) => Rig (GF' k p n f) Source # 

Methods

fromNatural :: Natural -> GF' k p n f #

(KnownNat n, Reifies k p Integer) => DecidableZero (GF' k p n f) Source # 

Methods

isZero :: GF' k p n f -> Bool #

(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => DecidableUnits (GF' k p n f) Source # 

Methods

recipUnit :: GF' k p n f -> Maybe (GF' k p n f) #

isUnit :: GF' k p n f -> Bool #

(^?) :: Integral n => GF' k p n f -> n -> Maybe (GF' k p n f) #

(KnownNat n, Reifies k p Integer, Reifies * f (Unipol (F k p))) => DecidableAssociates (GF' k p n f) Source # 

Methods

isAssociate :: GF' k p n f -> GF' k p n f -> Bool #

(Reifies k p Integer, Reifies * f (Unipol (F k p)), KnownNat n) => Division (GF' k p n f) Source # 

Methods

recip :: GF' k p n f -> GF' k p n f #

(/) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

(\\) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

(^) :: Integral n => GF' k p n f -> n -> GF' k p n f #

(KnownNat n, Reifies * f (Unipol (F k p)), Reifies k p Integer) => Unital (GF' k p n f) Source # 

Methods

one :: GF' k p n f #

pow :: GF' k p n f -> Natural -> GF' k p n f #

productWith :: Foldable f => (a -> GF' k p n f) -> f a -> GF' k p n f #

(KnownNat n, Reifies k p Integer) => Group (GF' k p n f) Source # 

Methods

(-) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

negate :: GF' k p n f -> GF' k p n f #

subtract :: GF' k p n f -> GF' k p n f -> GF' k p n f #

times :: Integral n => n -> GF' k p n f -> GF' k p n f #

(KnownNat n, Reifies * f (Unipol (F k p)), Reifies k p Integer) => Multiplicative (GF' k p n f) Source # 

Methods

(*) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

pow1p :: GF' k p n f -> Natural -> GF' k p n f #

productWith1 :: Foldable1 f => (a -> GF' k p n f) -> f a -> GF' k p n f #

(KnownNat n, Reifies * f (Unipol (F k p)), Reifies k p Integer) => Semiring (GF' k p n f) Source # 
(Reifies k p Integer, KnownNat n) => Monoidal (GF' k p n f) Source # 

Methods

zero :: GF' k p n f #

sinnum :: Natural -> GF' k p n f -> GF' k p n f #

sumWith :: Foldable f => (a -> GF' k p n f) -> f a -> GF' k p n f #

Reifies k p Integer => Additive (GF' k p n f) Source # 

Methods

(+) :: GF' k p n f -> GF' k p n f -> GF' k p n f #

sinnum1p :: Natural -> GF' k p n f -> GF' k p n f #

sumWith1 :: Foldable1 f => (a -> GF' k p n f) -> f a -> GF' k p n f #

Reifies k p Integer => Abelian (GF' k p n f) Source # 
(Reifies k p Integer, Show (F k p)) => PrettyCoeff (GF' k p n f) Source # 

Methods

showsCoeff :: Int -> GF' k p n f -> ShowSCoeff Source #

(KnownNat n, IsGF' * p n f) => FiniteField (GF' Nat p n f) Source # 

Methods

power :: proxy (GF' Nat p n f) -> Natural Source #

elements :: proxy (GF' Nat p n f) -> [GF' Nat p n f] Source #

class (KnownNat n, KnownNat p, Reifies f (Unipol (F p))) => IsGF' p n f Source #

Type-constraint synonym to work with Galois field.

Instances

(KnownNat n, KnownNat p, Reifies k f (Unipol (F Nat p))) => IsGF' k p n f Source # 

modPoly :: forall p n f. (KnownNat n, Reifies p Integer) => Unipol (F p) -> GF' p n f Source #

modVec :: Sized n (F p) -> GF' p n f Source #

withIrreducible :: forall p a. KnownNat p => Unipol (F p) -> (forall f n. Reifies f (Unipol (F p)) => Proxy (GF' p n f) -> a) -> a Source #

linearRepGF :: GF' p n f -> Vector (F p) Source #

reifyGF' :: MonadRandom m => Natural -> Natural -> (forall p f n. (Reifies p Integer, Reifies f (Unipol (F p))) => Proxy (GF' p n f) -> a) -> m a Source #

generateIrreducible :: (MonadRandom m, FiniteField k, Eq k) => proxy k -> Natural -> m (Unipol k) Source #

generateIrreducible p n generates irreducible polynomial over F_p of degree n.

withGF' :: MonadRandom m => Natural -> Natural -> (forall p f n. (Reifies p Integer, Reifies f (Unipol (F p))) => GF' p n f) -> m (Vector Integer) Source #

type GF p n = GF' p n (Conway p n) Source #

Galois Field of order p^n. This uses conway polynomials as canonical minimal polynomial and it should be known at compile-time (i.e. Reifies (Conway p n) (Unipol (F n)) instances should be defined to use field operations).

class ConwayPolynomial p n where Source #

Type-class to provide the dictionary for Conway polynomials

Minimal complete definition

conwayPolynomial

Methods

conwayPolynomial :: proxy p -> proxy n -> Unipol (F p) Source #

data Conway p n Source #

Empty tag to reify Conway polynomial to type-level

Instances

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

Methods

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

primitive :: forall p n f. IsGF' p n f => GF' p (n + 1) f Source #

conway :: forall p n. ConwayPolynomial p n => SNat p -> SNat n -> Unipol (F p) Source #

Conway polynomial (if definition is known).

conwayFile :: FilePath -> DecsQ Source #

Parse conway polynomial file and define instances for them. File-format must be the same as Lueback's file.

addConwayPolynomials :: [(Integer, Integer, [Integer])] -> DecsQ Source #

Macro to add Conway polynomials dictionary.