Safe Haskell | None |
---|---|
Language | Haskell2010 |
Symmetric polynomials in two variables alpha
and beta
.
We provide three representation:
- symmetric polynomials in
alpha
andbeta
(Chern roots) - polynomials in the elementary symmetric polynomials
c1=alpha+beta
andc2=alpha*beta
(Chern classes) - Schur polynomials
s[i,j]
The monomials of the first two of these form monoids (the product of monomials is again a monomial), and can be used uniformly with the help of some type-level hackery.
How to use the unified interface? Suppose you have a function like this:
tau :: ChernBase base => Int -> ZMod base
When calling it, you want to specify the output type (either ZMod AB
or ZMod Chern
).
You can do that three ways:
x = tau @AB 10 -- this needs -XTypeApplications x = (tau 10 :: ZMod AB) x = spec1' ChernRoot $ tau 10
The first one is the most convenient, but it only works with GHC 8 and later. The other two work with older GHC versions, too.
Synopsis
- symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a
- data AB = AB !Int !Int
- data Chern = Chern !Int !Int
- data Schur = Schur !Int !Int
- alpha :: AB
- beta :: AB
- alphaBeta :: AB
- c1 :: Chern
- c2 :: Chern
- data Sing base where
- class (Eq base, Ord base, Monoid base, Graded base, Pretty base) => ChernBase base where
- chernTag :: base -> Sing base
- chernTag1 :: f base -> Sing base
- chernTag2 :: f (g base) -> Sing base
- chernTag3 :: f (g (h base)) -> Sing base
- fromAB :: ZMod AB -> ZMod base
- fromChern :: ZMod Chern -> ZMod base
- fromSchur :: ZMod Schur -> ZMod base
- toAB :: ZMod base -> ZMod AB
- toChern :: ZMod base -> ZMod Chern
- toSchur :: ZMod base -> ZMod Schur
- select0 :: (AB, Chern) -> ChernBase base => base
- select1 :: (f AB, f Chern) -> ChernBase base => f base
- select2 :: (f (g AB), f (g Chern)) -> ChernBase base => f (g base)
- select3 :: (f (g (h AB)), f (g (h Chern))) -> ChernBase base => f (g (h base))
- select0' :: (AB, Chern) -> ChernBase base => Sing base -> base
- select1' :: (f AB, f Chern) -> ChernBase base => Sing base -> f base
- select2' :: (f (g AB), f (g Chern)) -> ChernBase base => Sing base -> f (g base)
- select3' :: (f (g (h AB)), f (g (h Chern))) -> ChernBase base => Sing base -> f (g (h base))
- spec0' :: ChernBase base => Sing base -> (forall b. ChernBase b => b) -> base
- spec1' :: ChernBase base => Sing base -> (forall b. ChernBase b => f b) -> f base
- spec2' :: ChernBase base => Sing base -> (forall b. ChernBase b => f (g b)) -> f (g base)
- spec3' :: ChernBase base => Sing base -> (forall b. ChernBase b => f (g (h b))) -> f (g (h base))
- class Graded a where
- filterGrade :: (Ord b, Graded b) => Int -> ZMod b -> ZMod b
- separateGradedParts :: (Ord b, Graded b) => ZMod b -> Array Int (ZMod b)
- chernToAB :: ZMod Chern -> ZMod AB
- abToChern :: ZMod AB -> ZMod Chern
- symmetricReduction :: ZMod AB -> Either (ZMod Chern, ZMod AB) (ZMod Chern)
- schurToAB :: ZMod Schur -> ZMod AB
- schurToChern :: ZMod Schur -> ZMod Chern
- chernToSchur :: ZMod Chern -> ZMod Schur
- abToSchur :: ZMod AB -> ZMod Schur
- chernToSchurNaive :: ZMod Chern -> ZMod Schur
- randomChernMonom :: IO Chern
- randomSchurMonom :: IO Schur
- withRandomCoeff :: IO a -> IO (a, Integer)
- randomChernPoly :: IO (ZMod Chern)
- randomSchurPoly :: IO (ZMod Schur)
Documentation
symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a Source #
An elementary symmetric polynomial of some generators
Base monomials
Chern roots: alpha^i * beta^j
, monomial base of Z[alpha,beta]
Instances
Eq AB Source # | |
Ord AB Source # | |
Show AB Source # | |
Semigroup AB Source # | |
Monoid AB Source # | |
Pretty AB Source # | |
Defined in Math.RootLoci.Algebra.SymmPoly | |
Graded AB Source # | |
ChernBase AB Source # | |
Defined in Math.RootLoci.Algebra.SymmPoly chernTag :: AB -> Sing AB Source # chernTag1 :: f AB -> Sing AB Source # chernTag2 :: f (g AB) -> Sing AB Source # chernTag3 :: f (g (h AB)) -> Sing AB Source # fromAB :: ZMod AB -> ZMod AB Source # fromChern :: ZMod Chern -> ZMod AB Source # fromSchur :: ZMod Schur -> ZMod AB Source # toAB :: ZMod AB -> ZMod AB Source # |
Chern classes: c1^i * c2^j
, monomial base of Z[c1,c2]
Instances
Eq Chern Source # | |
Ord Chern Source # | |
Show Chern Source # | |
Semigroup Chern Source # | |
Monoid Chern Source # | |
Pretty Chern Source # | |
Defined in Math.RootLoci.Algebra.SymmPoly | |
Graded Chern Source # | |
ChernBase Chern Source # | |
Defined in Math.RootLoci.Algebra.SymmPoly chernTag :: Chern -> Sing Chern Source # chernTag1 :: f Chern -> Sing Chern Source # chernTag2 :: f (g Chern) -> Sing Chern Source # chernTag3 :: f (g (h Chern)) -> Sing Chern Source # fromAB :: ZMod AB -> ZMod Chern Source # fromChern :: ZMod Chern -> ZMod Chern Source # fromSchur :: ZMod Schur -> ZMod Chern Source # toAB :: ZMod Chern -> ZMod AB Source # |
Schur basis function: S[i,j]
Unified interface
A singleton for distinguishing the two cases
class (Eq base, Ord base, Monoid base, Graded base, Pretty base) => ChernBase base where Source #
Common interface to work with Chern classes and Chern roots uniformly
chernTag :: base -> Sing base Source #
chernTag1 :: f base -> Sing base Source #
chernTag2 :: f (g base) -> Sing base Source #
chernTag3 :: f (g (h base)) -> Sing base Source #
fromAB :: ZMod AB -> ZMod base Source #
fromChern :: ZMod Chern -> ZMod base Source #
fromSchur :: ZMod Schur -> ZMod base Source #
toAB :: ZMod base -> ZMod AB Source #
Instances
ChernBase Chern Source # | |
Defined in Math.RootLoci.Algebra.SymmPoly chernTag :: Chern -> Sing Chern Source # chernTag1 :: f Chern -> Sing Chern Source # chernTag2 :: f (g Chern) -> Sing Chern Source # chernTag3 :: f (g (h Chern)) -> Sing Chern Source # fromAB :: ZMod AB -> ZMod Chern Source # fromChern :: ZMod Chern -> ZMod Chern Source # fromSchur :: ZMod Schur -> ZMod Chern Source # toAB :: ZMod Chern -> ZMod AB Source # | |
ChernBase AB Source # | |
Defined in Math.RootLoci.Algebra.SymmPoly chernTag :: AB -> Sing AB Source # chernTag1 :: f AB -> Sing AB Source # chernTag2 :: f (g AB) -> Sing AB Source # chernTag3 :: f (g (h AB)) -> Sing AB Source # fromAB :: ZMod AB -> ZMod AB Source # fromChern :: ZMod Chern -> ZMod AB Source # fromSchur :: ZMod Schur -> ZMod AB Source # toAB :: ZMod AB -> ZMod AB Source # |
Helper functions for constructing and specializing uniform things
select0' :: (AB, Chern) -> ChernBase base => Sing base -> base Source #
Constructing unifom things using a tag
select3' :: (f (g (h AB)), f (g (h Chern))) -> ChernBase base => Sing base -> f (g (h base)) Source #
spec0' :: ChernBase base => Sing base -> (forall b. ChernBase b => b) -> base Source #
Specializing uniform things
spec3' :: ChernBase base => Sing base -> (forall b. ChernBase b => f (g (h b))) -> f (g (h base)) Source #
Grading
separateGradedParts :: (Ord b, Graded b) => ZMod b -> Array Int (ZMod b) Source #
Separates the different grades
Conversions
abToChern :: ZMod AB -> ZMod Chern Source #
Converts a symmetric polynomial in the AB base (Chern roots) to the Chern base (elementary symmetric polynomials or Chern classes)
symmetricReduction :: ZMod AB -> Either (ZMod Chern, ZMod AB) (ZMod Chern) Source #
Left
means there is a non-symmetric remainder; Right
means
that input was symmetric.
schurToChern :: ZMod Schur -> ZMod Chern Source #
Convert Schur to Chern classes (elementary symmetric polynomials)