packages feed

coincident-root-loci 0.2 → 0.3

raw patch · 37 files changed

+8626/−612 lines, 37 filesdep +polynomial-algebradep ~coincident-root-locidep ~combinatdep ~containersbinary-addedPVP ok

version bump matches the API change (PVP)

Dependencies added: polynomial-algebra

Dependency ranges changed: coincident-root-loci, combinat, containers

API changes (from Hackage documentation)

- Math.RootLoci.Algebra.FreeMod: FreeMod :: Map base coeff -> FreeMod coeff base
- Math.RootLoci.Algebra.FreeMod: [unFreeMod] :: FreeMod coeff base -> Map base coeff
- Math.RootLoci.Algebra.FreeMod: add :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: coeffOf :: (Ord b, Num c) => b -> FreeMod c b -> c
- Math.RootLoci.Algebra.FreeMod: filterBase :: (Ord a, Ord b) => (a -> Maybe b) -> FreeMod c a -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: findMaxTerm :: (Ord b) => FreeMod c b -> Maybe (b, c)
- Math.RootLoci.Algebra.FreeMod: findMinTerm :: (Ord b) => FreeMod c b -> Maybe (b, c)
- Math.RootLoci.Algebra.FreeMod: flatMap :: (Ord b1, Ord b2, Eq c, Num c) => (b1 -> FreeMod c b2) -> FreeMod c b1 -> FreeMod c b2
- Math.RootLoci.Algebra.FreeMod: flatMap' :: (Ord b1, Ord b2, Eq c2, Num c2) => (c1 -> c2) -> (b1 -> FreeMod c2 b2) -> FreeMod c1 b1 -> FreeMod c2 b2
- Math.RootLoci.Algebra.FreeMod: fromList :: (Eq c, Num c, Ord b) => [(b, c)] -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: generator :: Num c => b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: histogram :: (Ord b, Num c) => [b] -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: instance (GHC.Base.Monoid b, GHC.Classes.Ord b, GHC.Classes.Eq c, GHC.Num.Num c) => GHC.Num.Num (Math.RootLoci.Algebra.FreeMod.FreeMod c b)
- Math.RootLoci.Algebra.FreeMod: instance (GHC.Classes.Eq coeff, GHC.Classes.Eq base) => GHC.Classes.Eq (Math.RootLoci.Algebra.FreeMod.FreeMod coeff base)
- Math.RootLoci.Algebra.FreeMod: instance (GHC.Show.Show coeff, GHC.Show.Show base) => GHC.Show.Show (Math.RootLoci.Algebra.FreeMod.FreeMod coeff base)
- Math.RootLoci.Algebra.FreeMod: invScale :: (Ord b, Eq c, Integral c, Show c) => c -> FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: konst :: (Monoid b) => c -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: linComb :: (Ord b, Eq c, Num c) => [(c, FreeMod c b)] -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: mapBase :: (Ord a, Ord b) => (a -> b) -> FreeMod c a -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: mapCoeff :: (Ord b) => (c1 -> c2) -> FreeMod c1 b -> FreeMod c2 b
- Math.RootLoci.Algebra.FreeMod: mul :: (Ord b, Monoid b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: mulMonom :: (Ord b, Monoid b) => b -> FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: neg :: Num c => FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: newtype FreeMod coeff base
- Math.RootLoci.Algebra.FreeMod: normalize :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: onFreeMod :: (Ord a, Ord b) => (Map a c -> Map b c) -> FreeMod c a -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: onFreeMod' :: (Ord a, Ord b) => (Map a c -> Map b d) -> FreeMod c a -> FreeMod d b
- Math.RootLoci.Algebra.FreeMod: one :: (Monoid b, Num c) => FreeMod c b
- Math.RootLoci.Algebra.FreeMod: product :: (Ord b, Monoid b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: safeEq :: (Ord b, Eq b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> Bool
- Math.RootLoci.Algebra.FreeMod: scale :: (Ord b, Eq c, Num c) => c -> FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: singleton :: (Ord b) => b -> c -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: sub :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: sum :: (Ord b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b
- Math.RootLoci.Algebra.FreeMod: symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a
- Math.RootLoci.Algebra.FreeMod: toList :: FreeMod c b -> [(b, c)]
- Math.RootLoci.Algebra.FreeMod: type QMod base = FreeMod Rational base
- Math.RootLoci.Algebra.FreeMod: type ZMod base = FreeMod Integer base
- Math.RootLoci.Algebra.FreeMod: zero :: FreeMod c b
- Math.RootLoci.Algebra.Polynomial: FF :: Int -> FallingF
- Math.RootLoci.Algebra.Polynomial: FallingPoly :: FreeMod coeff FallingF -> FallingPoly coeff
- Math.RootLoci.Algebra.Polynomial: Poly :: FreeMod coeff X -> Poly coeff
- Math.RootLoci.Algebra.Polynomial: RF :: Int -> RisingF
- Math.RootLoci.Algebra.Polynomial: RisingPoly :: FreeMod coeff RisingF -> RisingPoly coeff
- Math.RootLoci.Algebra.Polynomial: X :: Int -> X
- Math.RootLoci.Algebra.Polynomial: [fromFallingPoly] :: FallingPoly coeff -> FreeMod coeff FallingF
- Math.RootLoci.Algebra.Polynomial: [fromPoly] :: Poly coeff -> FreeMod coeff X
- Math.RootLoci.Algebra.Polynomial: [fromRisingPoly] :: RisingPoly coeff -> FreeMod coeff RisingF
- Math.RootLoci.Algebra.Polynomial: fallingPoly :: FallingF -> Poly Integer
- Math.RootLoci.Algebra.Polynomial: instance (GHC.Num.Num c, GHC.Show.Show c, GHC.Classes.Eq c, Math.RootLoci.Misc.Common.IsSigned c) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Algebra.Polynomial.FallingPoly c)
- Math.RootLoci.Algebra.Polynomial: instance (GHC.Num.Num c, GHC.Show.Show c, GHC.Classes.Eq c, Math.RootLoci.Misc.Common.IsSigned c) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Algebra.Polynomial.Poly c)
- Math.RootLoci.Algebra.Polynomial: instance (GHC.Num.Num c, GHC.Show.Show c, GHC.Classes.Eq c, Math.RootLoci.Misc.Common.IsSigned c) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Algebra.Polynomial.RisingPoly c)
- Math.RootLoci.Algebra.Polynomial: instance (GHC.Num.Num coeff, GHC.Classes.Eq coeff) => GHC.Num.Num (Math.RootLoci.Algebra.Polynomial.Poly coeff)
- Math.RootLoci.Algebra.Polynomial: instance GHC.Base.Monoid Math.RootLoci.Algebra.Polynomial.X
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Eq Math.RootLoci.Algebra.Polynomial.FallingF
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Eq Math.RootLoci.Algebra.Polynomial.RisingF
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Eq Math.RootLoci.Algebra.Polynomial.X
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Eq coeff => GHC.Classes.Eq (Math.RootLoci.Algebra.Polynomial.FallingPoly coeff)
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Eq coeff => GHC.Classes.Eq (Math.RootLoci.Algebra.Polynomial.Poly coeff)
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Eq coeff => GHC.Classes.Eq (Math.RootLoci.Algebra.Polynomial.RisingPoly coeff)
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Ord Math.RootLoci.Algebra.Polynomial.FallingF
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Ord Math.RootLoci.Algebra.Polynomial.RisingF
- Math.RootLoci.Algebra.Polynomial: instance GHC.Classes.Ord Math.RootLoci.Algebra.Polynomial.X
- Math.RootLoci.Algebra.Polynomial: instance GHC.Show.Show Math.RootLoci.Algebra.Polynomial.FallingF
- Math.RootLoci.Algebra.Polynomial: instance GHC.Show.Show Math.RootLoci.Algebra.Polynomial.RisingF
- Math.RootLoci.Algebra.Polynomial: instance GHC.Show.Show Math.RootLoci.Algebra.Polynomial.X
- Math.RootLoci.Algebra.Polynomial: instance GHC.Show.Show coeff => GHC.Show.Show (Math.RootLoci.Algebra.Polynomial.FallingPoly coeff)
- Math.RootLoci.Algebra.Polynomial: instance GHC.Show.Show coeff => GHC.Show.Show (Math.RootLoci.Algebra.Polynomial.Poly coeff)
- Math.RootLoci.Algebra.Polynomial: instance GHC.Show.Show coeff => GHC.Show.Show (Math.RootLoci.Algebra.Polynomial.RisingPoly coeff)
- Math.RootLoci.Algebra.Polynomial: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Algebra.Polynomial.FallingF
- Math.RootLoci.Algebra.Polynomial: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Algebra.Polynomial.RisingF
- Math.RootLoci.Algebra.Polynomial: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Algebra.Polynomial.X
- Math.RootLoci.Algebra.Polynomial: lagrangeInterp :: [(Rational, Rational)] -> Poly Rational
- Math.RootLoci.Algebra.Polynomial: lagrangeInterp' :: [(Rational, Rational)] -> QMod X
- Math.RootLoci.Algebra.Polynomial: lagrangePoly' :: [Rational] -> Int -> QMod X
- Math.RootLoci.Algebra.Polynomial: newtype FallingF
- Math.RootLoci.Algebra.Polynomial: newtype FallingPoly coeff
- Math.RootLoci.Algebra.Polynomial: newtype Poly coeff
- Math.RootLoci.Algebra.Polynomial: newtype RisingF
- Math.RootLoci.Algebra.Polynomial: newtype RisingPoly coeff
- Math.RootLoci.Algebra.Polynomial: newtype X
- Math.RootLoci.Algebra.Polynomial: risingPoly :: RisingF -> Poly Integer
- Math.RootLoci.Algebra.SymmPoly: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Algebra.SymmPoly.AB
- Math.RootLoci.Algebra.SymmPoly: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Algebra.SymmPoly.Chern
- Math.RootLoci.Algebra.SymmPoly: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Algebra.SymmPoly.Schur
- Math.RootLoci.CSM.Equivariant.Ordered: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.CSM.Equivariant.Ordered.QPow
- Math.RootLoci.CSM.Equivariant.Umbral: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.CSM.Equivariant.Umbral.ST
- Math.RootLoci.Classic: quadTangentLines :: Int -> Integer
- Math.RootLoci.Classic: quintFlexLines :: Int -> Integer
- Math.RootLoci.Geometry.Cohomology: instance (Math.RootLoci.Misc.Pretty.Pretty ab, GHC.Base.Monoid ab, GHC.Classes.Eq ab) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Geometry.Cohomology.Eta ab)
- Math.RootLoci.Geometry.Cohomology: instance (Math.RootLoci.Misc.Pretty.Pretty ab, GHC.Base.Monoid ab, GHC.Classes.Eq ab) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Geometry.Cohomology.Gam ab)
- Math.RootLoci.Geometry.Cohomology: instance (Math.RootLoci.Misc.Pretty.Pretty ab, GHC.Base.Monoid ab, GHC.Classes.Eq ab) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Geometry.Cohomology.Omega ab)
- Math.RootLoci.Geometry.Cohomology: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.G
- Math.RootLoci.Geometry.Cohomology: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.H
- Math.RootLoci.Geometry.Cohomology: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.HS
- Math.RootLoci.Geometry.Cohomology: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.U
- Math.RootLoci.Geometry.Cohomology: instance Math.RootLoci.Misc.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.US
- Math.RootLoci.Misc.Common: class IsSigned a
- Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.IsSigned GHC.Integer.Type.Integer
- Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.IsSigned GHC.Real.Rational
- Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.IsSigned GHC.Types.Int
- Math.RootLoci.Misc.Common: signOf :: IsSigned a => a -> Maybe Sign
- Math.RootLoci.Misc.Common: signOfNum :: (Ord a, Num a) => a -> Maybe Sign
- Math.RootLoci.Misc.PTable: instance Math.RootLoci.Misc.PTable.CacheKey Math.Combinat.Partitions.Integer.Partition
- Math.RootLoci.Misc.Pretty: Indexed :: String -> a -> Indexed a
- Math.RootLoci.Misc.Pretty: class Mathematica a
- Math.RootLoci.Misc.Pretty: class Pretty a
- Math.RootLoci.Misc.Pretty: data Indexed a
- Math.RootLoci.Misc.Pretty: expFormString :: Partition -> String
- Math.RootLoci.Misc.Pretty: extendStringL :: Int -> String -> String
- Math.RootLoci.Misc.Pretty: extendStringR :: Int -> String -> String
- Math.RootLoci.Misc.Pretty: instance (GHC.Num.Num c, GHC.Classes.Eq c, GHC.Show.Show c, Math.RootLoci.Misc.Common.IsSigned c, Math.RootLoci.Misc.Pretty.Pretty b) => Math.RootLoci.Misc.Pretty.Pretty (Math.RootLoci.Algebra.FreeMod.FreeMod c b)
- Math.RootLoci.Misc.Pretty: instance Math.RootLoci.Misc.Pretty.Mathematica GHC.Base.String
- Math.RootLoci.Misc.Pretty: instance Math.RootLoci.Misc.Pretty.Mathematica GHC.Integer.Type.Integer
- Math.RootLoci.Misc.Pretty: instance Math.RootLoci.Misc.Pretty.Mathematica GHC.Types.Int
- Math.RootLoci.Misc.Pretty: instance Math.RootLoci.Misc.Pretty.Mathematica Math.Combinat.Partitions.Integer.Partition
- Math.RootLoci.Misc.Pretty: instance Math.RootLoci.Misc.Pretty.Mathematica a => Math.RootLoci.Misc.Pretty.Mathematica (Math.RootLoci.Misc.Pretty.Indexed a)
- Math.RootLoci.Misc.Pretty: mathematica :: Mathematica a => a -> String
- Math.RootLoci.Misc.Pretty: paren :: String -> String
- Math.RootLoci.Misc.Pretty: pretty :: Pretty a => a -> String
- Math.RootLoci.Misc.Pretty: prettyFreeMod' :: (Num c, Eq c, Show c, IsSigned c) => Bool -> (b -> String) -> FreeMod c b -> String
- Math.RootLoci.Misc.Pretty: prettyFreeMod'' :: (c -> String) -> (b -> String) -> FreeMod c b -> String
- Math.RootLoci.Misc.Pretty: prettyZMod :: (b -> String) -> ZMod b -> String
- Math.RootLoci.Misc.Pretty: prettyZMod_ :: (b -> String) -> ZMod b -> String
- Math.RootLoci.Misc.Pretty: showVarPower :: String -> Int -> String
+ Math.RootLoci.Algebra.SymmPoly: instance GHC.Base.Semigroup Math.RootLoci.Algebra.SymmPoly.AB
+ Math.RootLoci.Algebra.SymmPoly: instance GHC.Base.Semigroup Math.RootLoci.Algebra.SymmPoly.Chern
+ Math.RootLoci.Algebra.SymmPoly: instance GHC.Base.Semigroup Math.RootLoci.Algebra.SymmPoly.Schur
+ Math.RootLoci.Algebra.SymmPoly: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Algebra.SymmPoly.AB
+ Math.RootLoci.Algebra.SymmPoly: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Algebra.SymmPoly.Chern
+ Math.RootLoci.Algebra.SymmPoly: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Algebra.SymmPoly.Schur
+ Math.RootLoci.Algebra.SymmPoly: separateGradedParts :: (Ord b, Graded b) => ZMod b -> Array Int (ZMod b)
+ Math.RootLoci.Algebra.SymmPoly: symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a
+ Math.RootLoci.CSM.Equivariant.Ordered: instance GHC.Base.Semigroup Math.RootLoci.CSM.Equivariant.Ordered.QPow
+ Math.RootLoci.CSM.Equivariant.Ordered: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.CSM.Equivariant.Ordered.QPow
+ Math.RootLoci.CSM.Equivariant.Umbral: affineWeights :: Int -> [ZMod AB]
+ Math.RootLoci.CSM.Equivariant.Umbral: affineZeroCSM :: ChernBase base => Int -> ZMod base
+ Math.RootLoci.CSM.Equivariant.Umbral: instance GHC.Base.Semigroup Math.RootLoci.CSM.Equivariant.Umbral.ST
+ Math.RootLoci.CSM.Equivariant.Umbral: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.CSM.Equivariant.Umbral.ST
+ Math.RootLoci.CSM.Equivariant.Umbral: topChernClass :: ChernBase base => Int -> ZMod base
+ Math.RootLoci.Classic: bidegreeOfSurfaceBiTangents :: Int -> (Integer, Integer)
+ Math.RootLoci.Classic: bidegreeOfSurfaceFlexes :: Int -> (Integer, Integer)
+ Math.RootLoci.Classic: degreeOfDualCurve :: Int -> Integer
+ Math.RootLoci.Classic: numberOfCurveBiTangents :: Int -> Integer
+ Math.RootLoci.Classic: numberOfCurveFlexes :: Int -> Integer
+ Math.RootLoci.Classic: numberOfSurface4xTangents :: Int -> Integer
+ Math.RootLoci.Classic: numberOfSurface5xHyperflexes :: Int -> Integer
+ Math.RootLoci.Dual.Localization: mkX :: Int -> X
+ Math.RootLoci.Dual.Localization: type X = U "x"
+ Math.RootLoci.Geometry.Cohomology: instance (Math.Algebra.Polynomial.Pretty.Pretty ab, GHC.Base.Monoid ab, GHC.Classes.Eq ab) => Math.Algebra.Polynomial.Pretty.Pretty (Math.RootLoci.Geometry.Cohomology.Eta ab)
+ Math.RootLoci.Geometry.Cohomology: instance (Math.Algebra.Polynomial.Pretty.Pretty ab, GHC.Base.Monoid ab, GHC.Classes.Eq ab) => Math.Algebra.Polynomial.Pretty.Pretty (Math.RootLoci.Geometry.Cohomology.Gam ab)
+ Math.RootLoci.Geometry.Cohomology: instance (Math.Algebra.Polynomial.Pretty.Pretty ab, GHC.Base.Monoid ab, GHC.Classes.Eq ab) => Math.Algebra.Polynomial.Pretty.Pretty (Math.RootLoci.Geometry.Cohomology.Omega ab)
+ Math.RootLoci.Geometry.Cohomology: instance GHC.Base.Semigroup Math.RootLoci.Geometry.Cohomology.G
+ Math.RootLoci.Geometry.Cohomology: instance GHC.Base.Semigroup Math.RootLoci.Geometry.Cohomology.HS
+ Math.RootLoci.Geometry.Cohomology: instance GHC.Base.Semigroup Math.RootLoci.Geometry.Cohomology.US
+ Math.RootLoci.Geometry.Cohomology: instance GHC.Base.Semigroup ab => GHC.Base.Semigroup (Math.RootLoci.Geometry.Cohomology.Eta ab)
+ Math.RootLoci.Geometry.Cohomology: instance GHC.Base.Semigroup ab => GHC.Base.Semigroup (Math.RootLoci.Geometry.Cohomology.Gam ab)
+ Math.RootLoci.Geometry.Cohomology: instance GHC.Base.Semigroup ab => GHC.Base.Semigroup (Math.RootLoci.Geometry.Cohomology.Omega ab)
+ Math.RootLoci.Geometry.Cohomology: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.G
+ Math.RootLoci.Geometry.Cohomology: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.H
+ Math.RootLoci.Geometry.Cohomology: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.HS
+ Math.RootLoci.Geometry.Cohomology: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.U
+ Math.RootLoci.Geometry.Cohomology: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Geometry.Cohomology.US
+ Math.RootLoci.Misc.Common: Indexed :: String -> a -> Indexed a
+ Math.RootLoci.Misc.Common: buildMap :: Ord k => (b -> a) -> (b -> a -> a) -> [(k, b)] -> Map k a
+ Math.RootLoci.Misc.Common: class Mathematica a
+ Math.RootLoci.Misc.Common: data Indexed a
+ Math.RootLoci.Misc.Common: evens :: [a] -> [a]
+ Math.RootLoci.Misc.Common: expFormString :: Partition -> String
+ Math.RootLoci.Misc.Common: exponentVector :: Partition -> [Int]
+ Math.RootLoci.Misc.Common: extendStringL :: Int -> String -> String
+ Math.RootLoci.Misc.Common: extendStringR :: Int -> String -> String
+ Math.RootLoci.Misc.Common: insertMap :: Ord k => (b -> a) -> (b -> a -> a) -> k -> b -> Map k a -> Map k a
+ Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.Mathematica GHC.Base.String
+ Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.Mathematica GHC.Integer.Type.Integer
+ Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.Mathematica GHC.Types.Int
+ Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.Mathematica Math.Combinat.Partitions.Integer.Naive.Partition
+ Math.RootLoci.Misc.Common: instance Math.RootLoci.Misc.Common.Mathematica a => Math.RootLoci.Misc.Common.Mathematica (Math.RootLoci.Misc.Common.Indexed a)
+ Math.RootLoci.Misc.Common: interleave :: [a] -> [a] -> [a]
+ Math.RootLoci.Misc.Common: longZipWith :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c]
+ Math.RootLoci.Misc.Common: mathematica :: Mathematica a => a -> String
+ Math.RootLoci.Misc.Common: odds :: [a] -> [a]
+ Math.RootLoci.Misc.Common: paren :: String -> String
+ Math.RootLoci.Misc.Common: sum' :: Num a => [a] -> a
+ Math.RootLoci.Misc.PTable: instance Math.RootLoci.Misc.PTable.CacheKey Math.Combinat.Partitions.Integer.Naive.Partition
+ Math.RootLoci.Motivic.Abstract: Bindings :: [Dim] -> Bindings
+ Math.RootLoci.Motivic.Abstract: DeBruijn :: Int -> Var
+ Math.RootLoci.Motivic.Abstract: Multi :: [Single] -> Multi
+ Math.RootLoci.Motivic.Abstract: MultiLam :: !Bindings -> !Multi -> MultiLam
+ Math.RootLoci.Motivic.Abstract: Single :: [(Var, Int)] -> Single
+ Math.RootLoci.Motivic.Abstract: SingleLam :: !Bindings -> !Single -> SingleLam
+ Math.RootLoci.Motivic.Abstract: class Rename a
+ Math.RootLoci.Motivic.Abstract: class Shift a
+ Math.RootLoci.Motivic.Abstract: data MultiLam
+ Math.RootLoci.Motivic.Abstract: data SingleLam
+ Math.RootLoci.Motivic.Abstract: dimensionTable :: Bindings -> Map Var Dim
+ Math.RootLoci.Motivic.Abstract: dvec :: [Dim] -> ZMod MultiLam
+ Math.RootLoci.Motivic.Abstract: dvecSorted :: [Dim] -> ZMod MultiLam
+ Math.RootLoci.Motivic.Abstract: exponentOf :: Var -> Single -> Int
+ Math.RootLoci.Motivic.Abstract: exponentVectorOf :: Var -> Multi -> [Int]
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Cross (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Normalize (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Normalize (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.SingleLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Omega (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Omega (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.SingleLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Omega123 (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Psi (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam) (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.SingleLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.Psi [Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.SingleLam] (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.SingleLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.SingleToMulti (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.SingleLam) (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance (GHC.Classes.Eq c, GHC.Num.Num c) => Math.RootLoci.Motivic.Classes.SuperNormalize (Math.Algebra.Polynomial.FreeModule.FreeMod c Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Eq Math.RootLoci.Motivic.Abstract.Bindings
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Eq Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Eq Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Eq Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Eq Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Eq Math.RootLoci.Motivic.Abstract.Var
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Ord Math.RootLoci.Motivic.Abstract.Bindings
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Ord Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Ord Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Ord Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Ord Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance GHC.Classes.Ord Math.RootLoci.Motivic.Abstract.Var
+ Math.RootLoci.Motivic.Abstract: instance GHC.Show.Show Math.RootLoci.Motivic.Abstract.Bindings
+ Math.RootLoci.Motivic.Abstract: instance GHC.Show.Show Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance GHC.Show.Show Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance GHC.Show.Show Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance GHC.Show.Show Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance GHC.Show.Show Math.RootLoci.Motivic.Abstract.Var
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty (Math.RootLoci.Motivic.Abstract.Var, GHC.Types.Int)
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Motivic.Abstract.Bindings
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.Algebra.Polynomial.Pretty.Pretty Math.RootLoci.Motivic.Abstract.Var
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Rename (Math.RootLoci.Motivic.Abstract.Var, GHC.Types.Int)
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Rename Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Rename Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Rename Math.RootLoci.Motivic.Abstract.Var
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Shift Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Shift Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Abstract.Shift Math.RootLoci.Motivic.Abstract.Var
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Cross Math.RootLoci.Motivic.Abstract.Bindings
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Cross Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Cross Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Degree Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Degree Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Empty Math.RootLoci.Motivic.Abstract.Bindings
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Empty Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Empty Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Empty Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Empty Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.ExtendToCommonSize Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.ExtendToCommonSize Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Normalize Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Normalize Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Normalize Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Normalize Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega (Math.RootLoci.Motivic.Abstract.Var, GHC.Types.Int)
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega123 Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Omega123 Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Permute (Math.Algebra.Polynomial.FreeModule.ZMod Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Permute Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Permute Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Pontrjagin Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Pontrjagin Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Psi Math.RootLoci.Motivic.Abstract.Multi Math.RootLoci.Motivic.Abstract.Single
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Psi Math.RootLoci.Motivic.Abstract.MultiLam Math.RootLoci.Motivic.Abstract.SingleLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.PsiEvenOdd (Math.Algebra.Polynomial.FreeModule.ZMod Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.PsiEvenOdd Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.PsiEvenOdd Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.SingleToMulti Math.RootLoci.Motivic.Abstract.Single Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.SingleToMulti Math.RootLoci.Motivic.Abstract.SingleLam Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.SuperNormalize Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.SuperNormalize Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Theta (Math.Algebra.Polynomial.FreeModule.ZMod Math.RootLoci.Motivic.Abstract.MultiLam)
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Theta Math.RootLoci.Motivic.Abstract.Multi
+ Math.RootLoci.Motivic.Abstract: instance Math.RootLoci.Motivic.Classes.Theta Math.RootLoci.Motivic.Abstract.MultiLam
+ Math.RootLoci.Motivic.Abstract: newtype Bindings
+ Math.RootLoci.Motivic.Abstract: newtype Multi
+ Math.RootLoci.Motivic.Abstract: newtype Single
+ Math.RootLoci.Motivic.Abstract: newtype Var
+ Math.RootLoci.Motivic.Abstract: normalizeWithExpo :: (Rename term, Normalize term, Ord expo) => (expo -> Bool) -> (Var -> term -> expo) -> (Bindings, term) -> (Bindings, term)
+ Math.RootLoci.Motivic.Abstract: numberOfBoundVariables :: Bindings -> Int
+ Math.RootLoci.Motivic.Abstract: open :: Dim -> ZMod SingleLam
+ Math.RootLoci.Motivic.Abstract: rename :: Rename a => (Var -> Var) -> a -> a
+ Math.RootLoci.Motivic.Abstract: shift :: Shift a => Int -> a -> a
+ Math.RootLoci.Motivic.Abstract: symn :: Num c => Dim -> FreeMod c SingleLam
+ Math.RootLoci.Motivic.Abstract: unSingle :: Single -> [(Var, Int)]
+ Math.RootLoci.Motivic.Abstract: xlam :: Partition -> ZMod SingleLam
+ Math.RootLoci.Motivic.Abstract: zeros :: Int -> ZMod MultiLam
+ Math.RootLoci.Motivic.Classes: Dim :: Int -> Dim
+ Math.RootLoci.Motivic.Classes: class Cross a
+ Math.RootLoci.Motivic.Classes: class Degree a where {
+ Math.RootLoci.Motivic.Classes: class Empty a
+ Math.RootLoci.Motivic.Classes: class ExtendToCommonSize a
+ Math.RootLoci.Motivic.Classes: class Normalize a
+ Math.RootLoci.Motivic.Classes: class Omega a
+ Math.RootLoci.Motivic.Classes: class Omega123 a
+ Math.RootLoci.Motivic.Classes: class Permute a
+ Math.RootLoci.Motivic.Classes: class Pontrjagin a
+ Math.RootLoci.Motivic.Classes: class Psi t s | t -> s
+ Math.RootLoci.Motivic.Classes: class PsiEvenOdd t
+ Math.RootLoci.Motivic.Classes: class SingleToMulti s t | s -> t, t -> s
+ Math.RootLoci.Motivic.Classes: class SuperNormalize a
+ Math.RootLoci.Motivic.Classes: class Theta a
+ Math.RootLoci.Motivic.Classes: cross :: Cross a => a -> a -> a
+ Math.RootLoci.Motivic.Classes: crossInterleave :: Cross a => a -> a -> a
+ Math.RootLoci.Motivic.Classes: crossMany :: Cross a => [a] -> a
+ Math.RootLoci.Motivic.Classes: dimTuples :: [Dim] -> [[Dim]]
+ Math.RootLoci.Motivic.Classes: dimVector :: Partition -> [Dim]
+ Math.RootLoci.Motivic.Classes: empty :: Empty a => a
+ Math.RootLoci.Motivic.Classes: extendToCommonSize :: ExtendToCommonSize a => (a, a) -> (a, a)
+ Math.RootLoci.Motivic.Classes: instance GHC.Classes.Eq Math.RootLoci.Motivic.Classes.Dim
+ Math.RootLoci.Motivic.Classes: instance GHC.Classes.Ord Math.RootLoci.Motivic.Classes.Dim
+ Math.RootLoci.Motivic.Classes: instance GHC.Num.Num Math.RootLoci.Motivic.Classes.Dim
+ Math.RootLoci.Motivic.Classes: instance GHC.Show.Show Math.RootLoci.Motivic.Classes.Dim
+ Math.RootLoci.Motivic.Classes: instance GHC.TypeNats.KnownNat n => Math.RootLoci.Motivic.Classes.Degree (Math.Algebra.Polynomial.Monomial.Indexed.XS v n)
+ Math.RootLoci.Motivic.Classes: instance GHC.TypeNats.KnownNat n => Math.RootLoci.Motivic.Classes.Empty (Math.Algebra.Polynomial.Monomial.Indexed.XS v n)
+ Math.RootLoci.Motivic.Classes: instance Math.RootLoci.Motivic.Classes.Cross [a]
+ Math.RootLoci.Motivic.Classes: instance Math.RootLoci.Motivic.Classes.Empty (GHC.Maybe.Maybe a)
+ Math.RootLoci.Motivic.Classes: instance Math.RootLoci.Motivic.Classes.Empty GHC.Types.Int
+ Math.RootLoci.Motivic.Classes: instance Math.RootLoci.Motivic.Classes.Empty [a]
+ Math.RootLoci.Motivic.Classes: instance Math.RootLoci.Motivic.Classes.Empty a => Math.RootLoci.Motivic.Classes.ExtendToCommonSize [a]
+ Math.RootLoci.Motivic.Classes: instance Math.RootLoci.Motivic.Classes.Permute [a]
+ Math.RootLoci.Motivic.Classes: multiDegree :: Degree a => a -> MultiDegree a
+ Math.RootLoci.Motivic.Classes: newtype Dim
+ Math.RootLoci.Motivic.Classes: normalize :: Normalize a => a -> a
+ Math.RootLoci.Motivic.Classes: omega :: Omega a => Int -> a -> a
+ Math.RootLoci.Motivic.Classes: omega123 :: Omega123 a => a -> a
+ Math.RootLoci.Motivic.Classes: omegaZeroError :: a
+ Math.RootLoci.Motivic.Classes: permute :: Permute a => Permutation -> a -> a
+ Math.RootLoci.Motivic.Classes: pontrjaginMul :: Pontrjagin a => a -> a -> a
+ Math.RootLoci.Motivic.Classes: pontrjaginOne :: Pontrjagin a => a
+ Math.RootLoci.Motivic.Classes: psi :: Psi t s => t -> s
+ Math.RootLoci.Motivic.Classes: psiEvenOdd :: PsiEvenOdd t => t -> t
+ Math.RootLoci.Motivic.Classes: singleToMulti :: SingleToMulti s t => s -> t
+ Math.RootLoci.Motivic.Classes: superNormalize :: SuperNormalize a => a -> a
+ Math.RootLoci.Motivic.Classes: theta :: Theta a => a -> a
+ Math.RootLoci.Motivic.Classes: totalDegree :: Degree a => a -> Int
+ Math.RootLoci.Motivic.Classes: type family MultiDegree a :: *;
+ Math.RootLoci.Motivic.Classes: unDim :: Dim -> Int
+ Math.RootLoci.Motivic.Classes: }
+ Math.RootLoci.Motivic.Homology: crossKs :: Ring c => [KRing c] -> GRing c
+ Math.RootLoci.Motivic.Homology: csmPn :: Dim -> KRing Integer
+ Math.RootLoci.Motivic.Homology: csm_xlam_P1 :: Partition -> KRing Integer
+ Math.RootLoci.Motivic.Homology: csm_xlam_P1_cohom :: Partition -> ZMod G
+ Math.RootLoci.Motivic.Homology: delta2 :: Ring c => KRing c -> GRing c
+ Math.RootLoci.Motivic.Homology: deltaN :: Ring c => Int -> KRing c -> GRing c
+ Math.RootLoci.Motivic.Homology: embedInf :: KRing c -> GRing c
+ Math.RootLoci.Motivic.Homology: instance Math.Algebra.Polynomial.Class.Ring c => Math.RootLoci.Motivic.Classes.Omega (Math.RootLoci.Motivic.Homology.KRing c)
+ Math.RootLoci.Motivic.Homology: instance Math.Algebra.Polynomial.Class.Ring c => Math.RootLoci.Motivic.Classes.Psi (Math.RootLoci.Motivic.Homology.GRing c) (Math.RootLoci.Motivic.Homology.KRing c)
+ Math.RootLoci.Motivic.Homology: instance Math.RootLoci.Motivic.Classes.SingleToMulti (Math.RootLoci.Motivic.Homology.KRing c) (Math.RootLoci.Motivic.Homology.GRing c)
+ Math.RootLoci.Motivic.Homology: interpretSingleLam :: (Dim -> KRing Integer) -> SingleLam -> KRing Integer
+ Math.RootLoci.Motivic.Homology: kkToG2 :: Ring c => KRing (KRing c) -> GRing c
+ Math.RootLoci.Motivic.Homology: omegaH :: Ring c => Int -> KRing c -> KRing c
+ Math.RootLoci.Motivic.Homology: omegaNaive :: Ring c => Int -> KRing c -> KRing c
+ Math.RootLoci.Motivic.Homology: project1 :: GRing c -> KRing c
+ Math.RootLoci.Motivic.Homology: psi2 :: Ring c => GRing c -> KRing c
+ Math.RootLoci.Motivic.Homology: psiAny :: Ring c => GRing c -> KRing c
+ Math.RootLoci.Motivic.Homology: psiNaive :: Ring c => Int -> GRing c -> KRing c
+ Math.RootLoci.Motivic.Homology: separate1st :: forall c n. Ring c => GRing c -> GRing (KRing c)
+ Math.RootLoci.Motivic.Homology: test_motivic_csm_vs_aluffi :: Int -> Bool
+ Math.RootLoci.Motivic.Homology: type GRing c = Poly c "u" " @lim_{n1,n2,...} H_*(Sym^n1(P1) x Sym^n2(P1) x ... )@"
+ Math.RootLoci.Motivic.Homology: type KRing c = Univariate c "u" " @lim_n H_*(Sym^n(P1))@"
+ Math.RootLoci.Motivic.Homology: unify1st :: forall c n. Ring c => GRing (KRing c) -> GRing c
+ Math.RootLoci.Motivic.Homology: unify1st2nd :: forall c n. Ring c => GRing (GRing c) -> GRing c
+ Math.RootLoci.Motivic.Homology: unifyKK :: Ring c => KRing (KRing c) -> KRing c
+ Math.RootLoci.Segre.Equivariant: affTotalChernClass :: ChernBase base => Int -> ZMod base
+ Math.RootLoci.Segre.Equivariant: affTotalChernClassByDegree :: ChernBase base => Int -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: affineClosedSegreSM :: ChernBase base => Partition -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: affineOpenSegreSM :: ChernBase base => Partition -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: affineZeroSegreSM :: ChernBase base => Int -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: divideByTotalChernClass :: ChernBase base => Int -> ZMod base -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: divideByTotalChernClassSlow :: ChernBase base => Int -> ZMod base -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: recipTotalChernClass :: forall base. ChernBase base => Int -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: recipTotalChernClass2 :: forall base. ChernBase base => Int -> [ZMod base]
+ Math.RootLoci.Segre.Equivariant: recipTotalChernClassSlow :: forall base. ChernBase base => Int -> [ZMod base]
- Math.RootLoci.Algebra.SymmPoly: select0 :: (AB, Chern) -> (ChernBase base => base)
+ Math.RootLoci.Algebra.SymmPoly: select0 :: (AB, Chern) -> ChernBase base => base
- Math.RootLoci.Algebra.SymmPoly: select0' :: (AB, Chern) -> (ChernBase base => Sing base -> base)
+ Math.RootLoci.Algebra.SymmPoly: select0' :: (AB, Chern) -> ChernBase base => Sing base -> base
- Math.RootLoci.Algebra.SymmPoly: select1 :: (f AB, f Chern) -> (ChernBase base => f base)
+ Math.RootLoci.Algebra.SymmPoly: select1 :: (f AB, f Chern) -> ChernBase base => f base
- Math.RootLoci.Algebra.SymmPoly: select1' :: (f AB, f Chern) -> (ChernBase base => Sing base -> f base)
+ Math.RootLoci.Algebra.SymmPoly: select1' :: (f AB, f Chern) -> ChernBase base => Sing base -> f base
- Math.RootLoci.Algebra.SymmPoly: select2 :: (f (g AB), f (g Chern)) -> (ChernBase base => f (g base))
+ Math.RootLoci.Algebra.SymmPoly: select2 :: (f (g AB), f (g Chern)) -> ChernBase base => f (g base)
- Math.RootLoci.Algebra.SymmPoly: select2' :: (f (g AB), f (g Chern)) -> (ChernBase base => Sing base -> f (g base))
+ Math.RootLoci.Algebra.SymmPoly: select2' :: (f (g AB), f (g Chern)) -> ChernBase base => Sing base -> f (g base)
- Math.RootLoci.Algebra.SymmPoly: select3 :: (f (g (h AB)), f (g (h Chern))) -> (ChernBase base => f (g (h base)))
+ Math.RootLoci.Algebra.SymmPoly: select3 :: (f (g (h AB)), f (g (h Chern))) -> ChernBase base => f (g (h base))
- Math.RootLoci.Algebra.SymmPoly: select3' :: (f (g (h AB)), f (g (h Chern))) -> (ChernBase base => Sing base -> f (g (h base)))
+ Math.RootLoci.Algebra.SymmPoly: select3' :: (f (g (h AB)), f (g (h Chern))) -> ChernBase base => Sing base -> f (g (h base))
- Math.RootLoci.CSM.Equivariant.Ordered: umbralSubstQPow :: (ChernBase base) => (QPow -> ZMod base) -> ZMod (Omega QPow) -> ZMod (Omega base)
+ Math.RootLoci.CSM.Equivariant.Ordered: umbralSubstQPow :: ChernBase base => (QPow -> ZMod base) -> ZMod (Omega QPow) -> ZMod (Omega base)
- Math.RootLoci.CSM.Equivariant.PushForward: pi_star :: forall base. (ChernBase base) => Int -> ZMod (Eta base) -> ZMod (Gam base)
+ Math.RootLoci.CSM.Equivariant.PushForward: pi_star :: forall base. ChernBase base => Int -> ZMod (Eta base) -> ZMod (Gam base)
- Math.RootLoci.CSM.Equivariant.Umbral: prettyMixedST :: forall b c. (Pretty b, Num c, Eq c, IsSigned c, Show c) => FreeMod (FreeMod c b) ST -> String
+ Math.RootLoci.CSM.Equivariant.Umbral: prettyMixedST :: forall b c. (Pretty b, Num c, Eq c, IsSigned c, Pretty c) => FreeMod (FreeMod c b) ST -> String
- Math.RootLoci.CSM.Equivariant.Umbral: umbralSubstitutionAff :: (ChernBase base) => Partition -> FreeMod (ZMod base) ST -> ZMod base
+ Math.RootLoci.CSM.Equivariant.Umbral: umbralSubstitutionAff :: ChernBase base => Partition -> FreeMod (ZMod base) ST -> ZMod base
- Math.RootLoci.CSM.Equivariant.Umbral: umbralSubstitutionProj :: (ChernBase base) => Partition -> FreeMod (ZMod base) ST -> ZMod (Gam base)
+ Math.RootLoci.CSM.Equivariant.Umbral: umbralSubstitutionProj :: ChernBase base => Partition -> FreeMod (ZMod base) ST -> ZMod (Gam base)
- Math.RootLoci.Geometry.Cohomology: unsafeEtaToOmega :: Ord ab => FreeMod coeff (Eta ab) -> FreeMod coeff (Omega ab)
+ Math.RootLoci.Geometry.Cohomology: unsafeEtaToOmega :: (Eq coeff, Num coeff, Ord ab) => FreeMod coeff (Eta ab) -> FreeMod coeff (Omega ab)
- Math.RootLoci.Geometry.Cohomology: unsafeOmegaToEta :: Ord ab => FreeMod coeff (Omega ab) -> FreeMod coeff (Eta ab)
+ Math.RootLoci.Geometry.Cohomology: unsafeOmegaToEta :: (Eq coeff, Num coeff, Ord ab) => FreeMod coeff (Omega ab) -> FreeMod coeff (Eta ab)
- Math.RootLoci.Geometry.Mobius: newtype Partition :: *
+ Math.RootLoci.Geometry.Mobius: newtype Partition
- Math.RootLoci.Misc.PTable: PTable :: (Map Partition a) -> PTable a
+ Math.RootLoci.Misc.PTable: PTable :: Map Partition a -> PTable a
- Math.RootLoci.Misc.PTable: SetPTable :: (Map SetPartition a) -> SetPTable a
+ Math.RootLoci.Misc.PTable: SetPTable :: Map SetPartition a -> SetPTable a
- Math.RootLoci.Misc.PTable: icache :: (Int -> a) -> (Int -> a)
+ Math.RootLoci.Misc.PTable: icache :: (Int -> a) -> Int -> a
- Math.RootLoci.Misc.PTable: icache' :: a -> Int -> (Int -> a) -> (Int -> a)
+ Math.RootLoci.Misc.PTable: icache' :: a -> Int -> (Int -> a) -> Int -> a
- Math.RootLoci.Misc.PTable: monoCache :: CacheKey key => (key -> a) -> (key -> a)
+ Math.RootLoci.Misc.PTable: monoCache :: CacheKey key => (key -> a) -> key -> a
- Math.RootLoci.Misc.PTable: pcache :: (Partition -> a) -> (Partition -> a)
+ Math.RootLoci.Misc.PTable: pcache :: (Partition -> a) -> Partition -> a
- Math.RootLoci.Misc.PTable: polyCache1 :: (CacheKey key) => (forall base. ChernBase base => key -> f base) -> (forall base. ChernBase base => key -> f base)
+ Math.RootLoci.Misc.PTable: polyCache1 :: CacheKey key => (forall base. ChernBase base => key -> f base) -> forall base. ChernBase base => key -> f base
- Math.RootLoci.Misc.PTable: polyCache2 :: (CacheKey key) => (forall base. ChernBase base => key -> f (g base)) -> (forall base. ChernBase base => key -> f (g base))
+ Math.RootLoci.Misc.PTable: polyCache2 :: CacheKey key => (forall base. ChernBase base => key -> f (g base)) -> forall base. ChernBase base => key -> f (g base)
- Math.RootLoci.Misc.PTable: polyCache3 :: (CacheKey key) => (forall base. ChernBase base => key -> f (g (h base))) -> (forall base. ChernBase base => key -> f (g (h base)))
+ Math.RootLoci.Misc.PTable: polyCache3 :: CacheKey key => (forall base. ChernBase base => key -> f (g (h base))) -> forall base. ChernBase base => key -> f (g (h base))
- Math.RootLoci.Misc.PTable: setpcache :: (SetPartition -> a) -> (SetPartition -> a)
+ Math.RootLoci.Misc.PTable: setpcache :: (SetPartition -> a) -> SetPartition -> a

Files

LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2015-2017, Balazs Komuves+Copyright (c) 2015-2021, Balazs Komuves All rights reserved.  Redistribution and use in source and binary forms, with or without
+ README.md view
@@ -0,0 +1,54 @@++Characteristic classes of coincident root loci+==============================================++Coincident root loci (or discriminant strata) are subsets +of the space of homogeneous polynomials in two variables defined by+root multiplicities: A nonzero degree _n_ polynomial has _n_ roots in the+complex projective line P^1, but some of these can coincide, which gives us a+partition of _n_. Hence for each partition _lambda_ we get a set of polynomials+(those with root multiplicities given by _lambda_), +which  together stratify the space of these polynomials, which (modulo multiplying by scalars) +is P^n. These are quasi-projective varieties, invariant under the action of GL(2);+their closures are highly singular projective varieties, making them a good+example for studying invariants of singular varieties.++This package contains a number of different algorithms to compute invariants+and characteristic classes of these varieties:++- degree+- Euler characteristic+- the fundamental class in equivariant cohomology+- Chern-Schwartz-MacPherson (CSM) class, Segre-SM class+- equivariant CSM class+- Hirzebruch Chi-y genus+- Todd class, motivic Hirzebruch class+- motivic Chern class+- equivariant motivic Chern class++Some of the algorithms are implemented in Mathematica +instead of (or in addition to) Haskell.++Another (better organized) Mathematica implementation is available at+<https://github.com/bkomuves/mathematica-packages>.+++Example usage+=============++For example if you want to know what is the equivariant CSM class of the+(open) loci corresponding to the partition [2,2,1,1], you can use the following+piece of code:++    {-# LANGUAGE TypeApplications #-}++    import Math.Combinat.Partitions+    import Math.RootLoci.Algebra.SymmPoly ( AB )+    import Math.Algebra.Polynomial.Pretty ( pretty )+    import Math.RootLoci.CSM.Equivariant.Umbral++    csm ps = umbralOpenCSM @AB (mkPartition ps)++    main = do+      putStrLn $ pretty $ csm [2,2,1,1]+      
coincident-root-loci.cabal view
@@ -1,100 +1,114 @@-Name:                coincident-root-loci-Version:             0.2-Synopsis:            Equivariant CSM classes of coincident root loci+Cabal-Version:        2.4+Name:                 coincident-root-loci+Version:              0.3+Synopsis:             Equivariant CSM classes of coincident root loci -Description:         This library contians a set of function to compute, among-                     others, the @GL(2)@-equivariant Chern-Schwartz-MacPherson-                     classes of coincident root loci, which are subvarieties-                     of the space of unordered @n@-tuples of points in the complex-                     projective line. To such an @n@-tuples we can associate -                     a partition of @n@ given by the multiplicities of the distinct-                     points; this stratifies the set of all @n@-tuples, and we-                     call these strata \"coincident root loci\".+Description:          This library contians a set of function to compute, among+                      others, the @GL(2)@-equivariant Chern-Schwartz-MacPherson+                      classes of coincident root loci, which are subvarieties+                      of the space of unordered @n@-tuples of points in the complex+                      projective line. To such an @n@-tuples we can associate +                      a partition of @n@ given by the multiplicities of the distinct+                      points; this stratifies the set of all @n@-tuples, and we+                      call these strata \"coincident root loci\".+                      +                      This package is supplementary software for a forthcoming paper. -                     This package is supplementary software for a forthcoming paper.+License:              BSD-3-Clause+License-file:         LICENSE+Author:               Balazs Komuves+Copyright:            (c) 2015-2021 Balazs Komuves+Maintainer:           bkomuves (plus) hackage (at) gmail (dot) com+Homepage:             https://hub.darcs.net/bkomuves/coincident-root-loci+Stability:            Experimental+Category:             Math+Tested-With:          GHC == 8.6.5+Build-Type:           Simple -License:             BSD3-License-file:        LICENSE-Author:              Balazs Komuves-Copyright:           (c) 2015-2017 Balazs Komuves-Maintainer:          bkomuves (plus) hackage (at) gmail (dot) com-Homepage:            http://code.haskell.org/~bkomuves/-Stability:           Experimental-Category:            Math-Tested-With:         GHC == 8.0.2-Cabal-Version:       >= 1.18-Build-Type:          Simple+extra-source-files:   README.md+                      mathematica/equiv_motivic_chern.nb+                      mathematica/equiv_motivic_chern.src+                      mathematica/equivariant_CSM_via_motivic.nb+                      mathematica/equivariant_CSM_via_motivic.src+                      slides/motivic_slides_2018.pdf+                      slides/csm_slides_2017.pdf +source-repository head+  type:                 darcs+  location:             https://hub.darcs.net/bkomuves/coincident-root-loci+ --------------------------------------------------------------------------------  Library -  Build-Depends:       base >= 4 && < 5, -                       array >= 0.5, containers, random, transformers,-                       combinat >= 0.2.8.2+  Build-Depends:        base >= 4 && < 5, +                        array >= 0.5, containers >= 0.5, random, transformers,+                        combinat >= 0.2.10.0, polynomial-algebra >= 0.1    Exposed-Modules:     -                       -- Math.RootLoci-                       Math.RootLoci.Classic-                       -- Math.RootLoci.Dual-                       Math.RootLoci.Dual.Restriction-                       Math.RootLoci.Dual.Localization-                       -- Math.RootLoci.CSM-                       -- Math.RootLoci.CSM.Equivariant-                       Math.RootLoci.CSM.Equivariant.Direct-                       Math.RootLoci.CSM.Equivariant.Recursive-                       Math.RootLoci.CSM.Equivariant.Ordered-                       Math.RootLoci.CSM.Equivariant.PushForward-                       Math.RootLoci.CSM.Equivariant.Umbral-                       Math.RootLoci.CSM.Aluffi-                       Math.RootLoci.CSM.Projective-                       Math.RootLoci.Geometry-                       Math.RootLoci.Geometry.Forget-                       Math.RootLoci.Geometry.Cohomology-                       Math.RootLoci.Geometry.Mobius-                       -- Math.RootLoci.Applications-                       -- Math.RootLoci.Applications.FlexLines-                       Math.RootLoci.Algebra-                       Math.RootLoci.Algebra.FreeMod-                       Math.RootLoci.Algebra.Polynomial-                       Math.RootLoci.Algebra.SymmPoly-                       Math.RootLoci.Misc-                       Math.RootLoci.Misc.Pretty-                       Math.RootLoci.Misc.PTable-                       Math.RootLoci.Misc.Common+                        -- Math.RootLoci+                        Math.RootLoci.Classic+                        -- Math.RootLoci.Dual+                        Math.RootLoci.Dual.Restriction+                        Math.RootLoci.Dual.Localization+                        -- Math.RootLoci.CSM+                        -- Math.RootLoci.CSM.Equivariant+                        Math.RootLoci.CSM.Equivariant.Direct+                        Math.RootLoci.CSM.Equivariant.Recursive+                        Math.RootLoci.CSM.Equivariant.Ordered+                        Math.RootLoci.CSM.Equivariant.PushForward+                        Math.RootLoci.CSM.Equivariant.Umbral+                        Math.RootLoci.CSM.Aluffi+                        Math.RootLoci.CSM.Projective+                        Math.RootLoci.Segre.Equivariant+                        Math.RootLoci.Geometry+                        Math.RootLoci.Geometry.Forget+                        Math.RootLoci.Geometry.Cohomology+                        Math.RootLoci.Geometry.Mobius+                        -- Math.RootLoci.Motivic+                        Math.RootLoci.Motivic.Classes+                        Math.RootLoci.Motivic.Abstract+                        Math.RootLoci.Motivic.Homology+                        -- Math.RootLoci.Motivic.Formula+                        Math.RootLoci.Algebra+                        Math.RootLoci.Algebra.SymmPoly+                        Math.RootLoci.Misc+                        Math.RootLoci.Misc.PTable+                        Math.RootLoci.Misc.Common -  Default-Extensions:  CPP, BangPatterns-  Other-Extensions:    MultiParamTypeClasses, ScopedTypeVariables, -                       GeneralizedNewtypeDeriving+  Default-Extensions:   CPP, BangPatterns+  Other-Extensions:     MultiParamTypeClasses, ScopedTypeVariables, +                        GeneralizedNewtypeDeriving -  Default-Language:    Haskell2010+  Default-Language:     Haskell2010 -  Hs-Source-Dirs:      src+  Hs-Source-Dirs:       src -  ghc-options:         -fwarn-tabs -fno-warn-unused-matches -fno-warn-name-shadowing -fno-warn-unused-imports+  ghc-options:          -fwarn-tabs -fno-warn-unused-matches -fno-warn-name-shadowing -fno-warn-unused-imports      --------------------------------------------------------------------------------      test-suite test -  default-language:    Haskell2010-  type:                exitcode-stdio-1.0-  hs-source-dirs:      test-  main-is:             testSuite.hs+  default-language:     Haskell2010+  type:                 exitcode-stdio-1.0+  hs-source-dirs:       test+  main-is:              testSuite.hs   -  build-depends:       base >= 4 && < 5, containers >= 0.4, array >= 0.5,-                       tasty >= 0.11, tasty-hunit >= 0.9,-                       combinat >= 0.2.8.2,-                       coincident-root-loci >= 0.2+  build-depends:        base >= 4 && < 5, +                        array >= 0.5, containers >= 0.5,+                        tasty >= 0.11, tasty-hunit >= 0.9,+                        combinat >= 0.2.9.0, polynomial-algebra >= 0.1,+                        coincident-root-loci                         -  other-modules:       Tests.Common-                       Tests.Dual-                       Tests.Pushforward                  -                       Tests.CSM.Equivariant                  -                       Tests.CSM.Projective                  -                       Tests.RootVsClass.Check                  -                       Tests.RootVsClass.Direct                  -                       Tests.RootVsClass.Ordered                  -                       Tests.RootVsClass.PushForward                  -                       Tests.RootVsClass.Recursive                  -                       Tests.RootVsClass.Umbral                  +  other-modules:        Tests.Common+                        Tests.Dual+                        Tests.Pushforward                  +                        Tests.CSM.Equivariant                  +                        Tests.CSM.Projective                  +                        Tests.RootVsClass.Check                  +                        Tests.RootVsClass.Direct                  +                        Tests.RootVsClass.Ordered                  +                        Tests.RootVsClass.PushForward                  +                        Tests.RootVsClass.Recursive                  +                        Tests.RootVsClass.Umbral                  
+ mathematica/equiv_motivic_chern.nb view
@@ -0,0 +1,4062 @@+(* Content-type: application/vnd.wolfram.mathematica *)++(*** Wolfram Notebook File ***)+(* http://www.wolfram.com/nb *)++(* CreatedBy='Mathematica 9.0' *)++(*CacheID: 234*)+(* Internal cache information:+NotebookFileLineBreakTest+NotebookFileLineBreakTest+NotebookDataPosition[       157,          7]+NotebookDataLength[    139568,       4053]+NotebookOptionsPosition[    138197,       4007]+NotebookOutlinePosition[    138552,       4023]+CellTagsIndexPosition[    138509,       4020]+WindowFrame->Normal*)++(* Beginning of Notebook Content *)+Notebook[{++Cell[CellGroupData[{+Cell[BoxData[+ RowBox[{"\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+    RowBox[{"===", +     RowBox[{"\[Equal]", " ", +      RowBox[{+      "EQUIVARIANT", " ", "MOTIVIC", " ", "CHERN", " ", "CLASSES", " ", "OF", +       " ", "COINCIDENT", " ", "ROOT", " ", "LOCI"}]}], " ", "==="}], "="}], +   " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{"<<", "Combinatorica`"}]}]], "Input",+ CellChangeTimes->{{3.801069380385396*^9, 3.801069381601409*^9}, {+  3.801071567533555*^9, 3.801071572467383*^9}, {3.801135940168188*^9, +  3.801135957390024*^9}}],++Cell[BoxData[+ RowBox[{+  StyleBox[+   RowBox[{"General", "::", "compat"}], "MessageName"], +  RowBox[{+  ":", " "}], "\<\"Combinatorica Graph and Permutations functionality has \+been superseded by preloaded functionality. The package now being loaded may \+conflict with this. Please see the Compatibility Guide for details.\"\>"}]], \+"Message", "MSG",+ CellChangeTimes->{3.801136075045025*^9, 3.80113681966651*^9}]+}, Open  ]],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{"NORMALIZATION", " ", "in", " ", "K", +     RowBox[{"(", +      RowBox[{"P", "^", "n"}], ")"}]}], " ", "==="}], " ", "*)"}], +  "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{"Weights", " ", "of", " ", +    RowBox[{"Sym", "^", "n"}], " ", +    RowBox[{"C", "^", "2"}]}], " ", "*)"}], "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"Clear", "[", +    RowBox[{"L", ",", "X", ",", "Y"}], "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"WT", "[", +     RowBox[{"n_", ",", "i_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"X", "^", +      RowBox[{"(", +       RowBox[{"n", "-", "i"}], ")"}]}], "*", +     RowBox[{"Y", "^", "i"}]}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"the", " ", "relation", " ", "in", " ", "K", +      RowBox[{+       RowBox[{"(", +        RowBox[{"P", "^", "n"}], ")"}], ".", " ", +       RowBox[{"Convention", ":", " ", "\[IndentingNewLine]", +        RowBox[{+        "L", " ", "is", " ", "the", " ", "tautological", " ", "line", " ", +         "bundle"}]}]}]}], ",", " ", "\[IndentingNewLine]", "   ", +     RowBox[{+      RowBox[{"c_", "1", +       RowBox[{"(", "X", ")"}]}], " ", "=", " ", +      RowBox[{"-", "alpha"}]}], ",", " ", +     RowBox[{+      RowBox[{"c_", "1", +       RowBox[{"(", "Y", ")"}]}], " ", "=", " ", +      RowBox[{"-", "beta"}]}]}], " ", "*)"}], "\n", +   RowBox[{+    RowBox[{"KREL", "[", "n_", "]"}], ":=", +    RowBox[{"Product", "[", +     RowBox[{+      RowBox[{"1", "-", +       RowBox[{"L", "*", +        RowBox[{"WT", "[", +         RowBox[{"n", ",", "i"}], "]"}]}]}], ",", +      RowBox[{"{", +       RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], +   "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"normal", " ", "form", " ", "of", " ", +     RowBox[{"L", "^", +      RowBox[{"(", +       RowBox[{"n", "+", "1"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "Lpow$nplus1", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"Lpow$nplus1", "[", "n_", "]"}], " ", ":=", " ", +    RowBox[{+     RowBox[{"Lpow$nplus1", "[", "n", "]"}], "=", " ", +     RowBox[{"Expand", "[", +      RowBox[{+       RowBox[{"L", "^", +        RowBox[{"(", +         RowBox[{"n", "+", "1"}], ")"}]}], "-", +       RowBox[{+        RowBox[{+         RowBox[{"(", +          RowBox[{"-", "1"}], ")"}], "^", +         RowBox[{"(", +          RowBox[{"n", "+", "1"}], ")"}]}], +        RowBox[{+         RowBox[{"KREL", "[", "n", "]"}], "/", +         RowBox[{+          RowBox[{"(", +           RowBox[{"X", "*", "Y"}], ")"}], "^", +          RowBox[{"Binomial", "[", +           RowBox[{+            RowBox[{"n", "+", "1"}], ",", "2"}], "]"}]}]}]}]}], "]"}]}]}], +   "\n", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"(", "unefficiently", ")"}], " ", "normalize", " ", "a", " ", +     "polynomial", " ", "in", " ", "L"}], " ", "*)"}], " ", +   "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "KnormalizeSlow", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"KnormalizeSlow", "[", +     RowBox[{"n_", ",", " ", "Z0_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"Z", "=", +         RowBox[{"Expand", "[", "Z0", "]"}]}], ",", "m"}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"m", "=", +        RowBox[{"Exponent", "[", +         RowBox[{"Z", ",", "L"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"If", "[", +        RowBox[{+         RowBox[{"m", "\[LessEqual]", "n"}], ",", "Z", ",", +         RowBox[{"KnormalizeSlow", "[", +          RowBox[{"n", ",", +           RowBox[{"Z", "/.", +            RowBox[{"{", +             RowBox[{+              RowBox[{"L", "^", "m"}], "\[Rule]", +              RowBox[{+               RowBox[{"L", "^", +                RowBox[{"(", +                 RowBox[{"m", "-", "n", "-", "1"}], ")"}]}], "*", +               RowBox[{"Lpow$nplus1", "[", "n", "]"}]}]}], "}"}]}]}], "]"}]}],+         "]"}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"Table", " ", "of", " ", "normal", " ", "forms", " ", "of", " ", +     RowBox[{"L", "^", "p"}]}], " ", "*)"}], "\n", +   RowBox[{"Clear", "[", "LPowXY", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"LPowXY", "[", +     RowBox[{"n_", ",", "k_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"LPowXY", "[", +      RowBox[{"n", ",", "k"}], "]"}], " ", "=", " ", +     RowBox[{"Expand", "[", +      RowBox[{"KnormalizeSlow", "[", +       RowBox[{"n", ",", +        RowBox[{"L", "^", "k"}]}], "]"}], "]"}]}]}], "\n", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"MoreE", " ", "eficient", " ", "normalization", " ", "in", " ", +     RowBox[{"K", "^", +      RowBox[{"(", +       RowBox[{"P", "^", "n"}], ")"}]}], " ", "\[IndentingNewLine]", +     RowBox[{"usage", ":", " ", +      RowBox[{"KnormalizeVarXY", "[", +       RowBox[{"dim", ",", "L", ",", "expr"}], "]"}]}]}], " ", "*)"}], "\n", +   RowBox[{"Clear", "[", "KnormalizeVarXY", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"KnormalizeVarXY", "[", +     RowBox[{"n_", ",", "uuu_", ",", "Z0_"}], "]"}], ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{"m", ",", "Z"}], "}"}], ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"Z", "=", +        RowBox[{"Expand", "[", "Z0", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"m", "=", +        RowBox[{"Exponent", "[", +         RowBox[{"Z", ",", "uuu"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"Expand", "[", +        RowBox[{"Sum", "[", +         RowBox[{+          RowBox[{+           RowBox[{"Coefficient", "[", +            RowBox[{"Z", ",", "uuu", ",", "k"}], "]"}], "*", +           RowBox[{"(", +            RowBox[{+             RowBox[{"LPowXY", "[", +              RowBox[{"n", ",", "k"}], "]"}], "/.", +             RowBox[{"{", +              RowBox[{"L", "\[Rule]", "uuu"}], "}"}]}], ")"}]}], ",", +          RowBox[{"{", +           RowBox[{"k", ",", "0", ",", "m"}], "}"}]}], "]"}], "]"}]}]}], +     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]"}]}]], "Input",+ CellChangeTimes->{{3.801069536445114*^9, 3.8010695374127903`*^9}, {+  3.801135975104397*^9, 3.801136088365362*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{"PUSHFORWARD", " ", "ALONG", " ", "PSI", " ", +     RowBox[{"(", +      RowBox[{"THE", " ", "MULTIPLICATION", " ", "MAP"}], ")"}]}], " ", +    "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{"formulas", " ", "for", " ", +    RowBox[{"(", +     RowBox[{"psi_", +      RowBox[{"{", +       RowBox[{"n", ",", "1"}], "}"}]}], ")"}], +    RowBox[{"_", "!"}], " ", +    RowBox[{"(", +     RowBox[{+      RowBox[{"L1", "^", "p"}], "*", +      RowBox[{"L2", "^", "q"}]}], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"Clear", "[", "PSI$N1f", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"PSI$N1f", "[", +     RowBox[{"n_", ",", "0", ",", "1"}], "]"}], ":=", +    RowBox[{"L", "*", +     RowBox[{+      RowBox[{"(", +       RowBox[{+        RowBox[{"X", "^", +         RowBox[{"(", +          RowBox[{"n", "+", "1"}], ")"}]}], "-", +        RowBox[{"Y", "^", +         RowBox[{"(", +          RowBox[{"n", "+", "1"}], ")"}]}]}], ")"}], "/", +      RowBox[{"(", +       RowBox[{"X", "-", "Y"}], ")"}]}]}]}], "\n", +   RowBox[{+    RowBox[{"PSI$N1f", "[", +     RowBox[{"n_", ",", "p_", ",", "0"}], "]"}], ":=", +    RowBox[{+     RowBox[{+      RowBox[{"L", "^", "p"}], "*", +      RowBox[{+       RowBox[{"(", +        RowBox[{+         RowBox[{"X", "^", +          RowBox[{"(", +           RowBox[{"p", "+", "1"}], ")"}]}], "-", +         RowBox[{"Y", "^", +          RowBox[{"(", +           RowBox[{"p", "+", "1"}], ")"}]}]}], ")"}], "/", +       RowBox[{"(", +        RowBox[{"X", "-", "Y"}], ")"}]}]}], "+", +     RowBox[{+      RowBox[{"L", "^", +       RowBox[{"(", +        RowBox[{"p", "+", "1"}], ")"}]}], " ", +      RowBox[{+       RowBox[{"(", +        RowBox[{+         RowBox[{+          RowBox[{"X", "^", +           RowBox[{"(", +            RowBox[{"n", "+", "1"}], ")"}]}], "*", +          RowBox[{"Y", "^", +           RowBox[{"(", +            RowBox[{"p", "+", "1"}], ")"}]}]}], "-", +         RowBox[{+          RowBox[{"Y", "^", +           RowBox[{"(", +            RowBox[{"n", "+", "1"}], ")"}]}], " ", +          RowBox[{"X", "^", +           RowBox[{"(", +            RowBox[{"p", "+", "1"}], ")"}]}]}]}], ")"}], "/", +       RowBox[{"(", +        RowBox[{"X", "-", "Y"}], ")"}]}]}]}]}], "\n", +   RowBox[{+    RowBox[{"PSI$N1f", "[", +     RowBox[{"n_", ",", "p_", ",", "q_"}], "]"}], ":=", +    RowBox[{"If", "[", +     RowBox[{+      RowBox[{"p", "\[GreaterEqual]", "q"}], ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"L", "^", "q"}], "*", +       RowBox[{"PSI$N1f", "[", +        RowBox[{"n", ",", +         RowBox[{"p", "-", "q"}], ",", "0"}], "]"}]}], ",", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"L", "^", "p"}], "*", +       RowBox[{"PSI$N1f", "[", +        RowBox[{"n", ",", "0", ",", +         RowBox[{"q", "-", "p"}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}],+    "\n", "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "PSI$N1", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"PSI$N1", "[", +     RowBox[{"n_", ",", "p_", ",", "q_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"PSI$N1", "[", +      RowBox[{"n", ",", "p", ",", "q"}], "]"}], "=", +     RowBox[{"Expand", "[", +      RowBox[{"Factor", "[", +       RowBox[{"PSI$N1f", "[", +        RowBox[{"n", ",", "p", ",", "q"}], "]"}], "]"}], "]"}]}]}], "\n", +   "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "newPsiBang2", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"newPsiBang2", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{"n_", ",", "1"}], "}"}], ",", +      RowBox[{"{", +       RowBox[{"var1_", ",", "var2_"}], "}"}], ",", "outvar_", ",", "ZZ_"}], +     "]"}], ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", "Z", "}"}], ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"Z", "=", +        RowBox[{"Expand", "[", "ZZ", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"Expand", "[", +        RowBox[{"Sum", "[", +         RowBox[{+          RowBox[{+           RowBox[{"Coefficient", "[", +            RowBox[{+             RowBox[{"Coefficient", "[", +              RowBox[{"Z", ",", "var1", ",", "i"}], "]"}], ",", "var2", ",", +             "j"}], "]"}], "*", +           RowBox[{"(", +            RowBox[{+             RowBox[{"PSI$N1", "[", +              RowBox[{"n", ",", "i", ",", "j"}], "]"}], "/.", +             RowBox[{"{", +              RowBox[{"L", "\[Rule]", "outvar"}], "}"}]}], ")"}]}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "0", ",", "n"}], "}"}], ",", +          RowBox[{"{", +           RowBox[{"j", ",", "0", ",", "1"}], "}"}]}], "]"}], "]"}]}]}], +     "\[IndentingNewLine]", "]"}]}], "\n", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"find", " ", "elements", " ", "in", " ", "K", +     RowBox[{"(", +      RowBox[{+       RowBox[{"P", "^", "m"}], " ", "x", " ", +       RowBox[{"P", "^", "1"}]}], ")"}], " ", "such", " ", "that", " ", +     "their", " ", "pushforward", " ", "to", " ", "K", +     RowBox[{"(", +      RowBox[{"P", "^", +       RowBox[{"(", +        RowBox[{"m", "+", "1"}], ")"}]}], ")"}], " ", "is", " ", +     RowBox[{"{", +      RowBox[{"1", ",", "L", ",", +       RowBox[{"L", "^", "2"}], ",", +       RowBox[{"...", +        RowBox[{"L", "^", +         RowBox[{"(", +          RowBox[{"m", "+", "1"}], ")"}]}]}]}], "}"}]}], " ", "*)"}], +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"findBasis$M1", "[", "m_", "]"}], ":=", +    RowBox[{+     RowBox[{"findBasis$M1", "[", "m", "]"}], "=", "\[IndentingNewLine]", +     RowBox[{"Module", "[", +      RowBox[{+       RowBox[{"{", +        RowBox[{+        "vars", ",", "A", ",", "B", ",", "list", ",", "i", ",", "j", ",", "k",+          ",", "eqs", ",", "sols", ",", "sol"}], "}"}], ",", +       "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"vars", "=", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{"Subscript", "[", +            RowBox[{"a", ",", "i"}], "]"}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "0", ",", +             RowBox[{"m", "+", "1"}]}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"A", "=", +         RowBox[{+          RowBox[{"Sum", "[", +           RowBox[{+            RowBox[{+             RowBox[{"Subscript", "[", +              RowBox[{"a", ",", "i"}], "]"}], "*", +             RowBox[{"L1", "^", "i"}]}], ",", +            RowBox[{"{", +             RowBox[{"i", ",", "0", ",", "m"}], "}"}]}], "]"}], "+", +          "\[IndentingNewLine]", +          RowBox[{+           RowBox[{"Subscript", "[", +            RowBox[{"a", ",", +             RowBox[{"m", "+", "1"}]}], "]"}], "*", +           RowBox[{"L1", "^", "m"}], "*", "L2"}]}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"B", "=", +         RowBox[{"newPsiBang2", "[", +          RowBox[{+           RowBox[{"{", +            RowBox[{"m", ",", "1"}], "}"}], ",", +           RowBox[{"{", +            RowBox[{"L1", ",", "L2"}], "}"}], ",", "L", ",", "A"}], "]"}]}], +        ";", "\[IndentingNewLine]", +        RowBox[{"list", "=", +         RowBox[{"Table", "[", +          RowBox[{"Null", ",", +           RowBox[{"{", +            RowBox[{"i", ",", "0", ",", +             RowBox[{"m", "+", "1"}]}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"For", "[", +         RowBox[{+          RowBox[{"k", "=", "0"}], ",", +          RowBox[{"k", "\[LessEqual]", +           RowBox[{"m", "+", "1"}]}], ",", +          RowBox[{"k", "++"}], ",", "\[IndentingNewLine]", +          RowBox[{+           RowBox[{"eqs", "=", +            RowBox[{"Table", "[", +             RowBox[{+              RowBox[{+               RowBox[{"Coefficient", "[", +                RowBox[{"B", ",", "L", ",", "i"}], "]"}], "\[Equal]", +               RowBox[{"If", "[", +                RowBox[{+                 RowBox[{"k", "\[Equal]", "i"}], ",", "1", ",", "0"}], +                "]"}]}], ",", +              RowBox[{"{", +               RowBox[{"i", ",", "0", ",", +                RowBox[{"m", "+", "1"}]}], "}"}]}], "]"}]}], ";", +           "\[IndentingNewLine]", +           RowBox[{"sols", " ", "=", +            RowBox[{"Solve", "[", +             RowBox[{"eqs", ",", "vars"}], "]"}]}], ";", +           "\[IndentingNewLine]", +           RowBox[{"sol", " ", "=", " ", +            RowBox[{+            "sols", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], +           ";", "\[IndentingNewLine]", +           RowBox[{+            RowBox[{"list", "\[LeftDoubleBracket]", +             RowBox[{"k", "+", "1"}], "\[RightDoubleBracket]"}], " ", "=", +            RowBox[{"A", "/.", "sol"}]}], ";"}]}], "\[IndentingNewLine]", +         "]"}], ";", "\[IndentingNewLine]", "list"}]}], "\[IndentingNewLine]",+       "]"}]}]}], "\[IndentingNewLine]"}]}]], "Input",+ CellChangeTimes->{{3.801066388986641*^9, 3.8010664015310593`*^9}, {+   3.801066503394569*^9, 3.80106651662502*^9}, {3.801066564574067*^9, +   3.801066564741948*^9}, {3.8010670236288843`*^9, 3.801067027753759*^9}, {+   3.801067100792351*^9, 3.80106710544508*^9}, {3.8010671878060493`*^9, +   3.80106730349851*^9}, {3.801068087792117*^9, 3.8010680923566713`*^9}, +   3.8010694137602043`*^9, {3.801136097102274*^9, 3.8011361141220093`*^9}, {+   3.8011362235083227`*^9, 3.801136224919012*^9}, {3.801136755713544*^9, +   3.801136757460051*^9}}],++Cell[BoxData[{+ RowBox[{"Clear", "[", +  RowBox[{"PSI$NM", ",", "S", ",", "T"}], "]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"PSI$NM", "[", +   RowBox[{"n_", ",", "0", ",", "p_", ",", "0"}], "]"}], ":=", +  RowBox[{"L", "^", "p"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"PSI$NM", "[", +   RowBox[{"0", ",", "m_", ",", "0", ",", "q_"}], "]"}], ":=", +  RowBox[{"L", "^", "q"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"PSI$NM", "[", +   RowBox[{"n_", ",", "1", ",", "p_", ",", "q_"}], "]"}], ":=", +  RowBox[{+   RowBox[{"PSI$NM", "[", +    RowBox[{"n", ",", "1", ",", "p", ",", "q"}], "]"}], "=", +   RowBox[{"PSI$N1", "[", +    RowBox[{"n", ",", "p", ",", "q"}], "]"}]}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"PSI$NM", "[", +    RowBox[{"n_", ",", "mplus1_", ",", "p_", ",", "q_"}], "]"}], ":=", +   RowBox[{+    RowBox[{"PSI$NM", "[", +     RowBox[{"n", ",", "mplus1", ",", "p", ",", "q"}], "]"}], "=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"m", "=", +         RowBox[{"mplus1", "-", "1"}]}], ",", "basis", ",", "A", ",", "B", +        ",", "C"}], "}"}], ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"basis", "=", +        RowBox[{"findBasis$M1", "[", "m", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"A", "=", +        RowBox[{+         RowBox[{"basis", "\[LeftDoubleBracket]", +          RowBox[{"q", "+", "1"}], "\[RightDoubleBracket]"}], "/.", +         RowBox[{"{", +          RowBox[{+           RowBox[{"L1", "\[Rule]", "L2"}], ",", +           RowBox[{"L2", "\[Rule]", "T"}]}], "}"}]}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"B", "=", +        RowBox[{"newPsiBang2", "[", +         RowBox[{+          RowBox[{"{", +           RowBox[{"n", ",", "m"}], "}"}], ",", +          RowBox[{"{", +           RowBox[{"L1", ",", "L2"}], "}"}], ",", "S", ",", +          RowBox[{+           RowBox[{"L1", "^", "p"}], "*", "A"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"C", "=", +        RowBox[{"newPsiBang2", "[", +         RowBox[{+          RowBox[{"{", +           RowBox[{+            RowBox[{"n", "+", "m"}], ",", "1"}], "}"}], ",", +          RowBox[{"{", +           RowBox[{"S", ",", "T"}], "}"}], ",", "L", ",", "B"}], "]"}]}], ";",+        "\[IndentingNewLine]", +       RowBox[{"Expand", "[", +        RowBox[{"Factor", "[", "C", "]"}], "]"}]}]}], "\[IndentingNewLine]", +     "]"}]}]}], "\[IndentingNewLine]"}], "\n", + RowBox[{+  RowBox[{+   RowBox[{"newPsiBang2", "[", +    RowBox[{+     RowBox[{"{", +      RowBox[{"n_", ",", "m_"}], "}"}], ",", +     RowBox[{"{", +      RowBox[{"var1_", ",", "var2_"}], "}"}], ",", "outvar_", ",", "ZZ_"}], +    "]"}], ":=", +   RowBox[{"Module", "[", "\[IndentingNewLine]", +    RowBox[{+     RowBox[{"{", +      RowBox[{"Z", ",", "deg1", ",", "deg2"}], "}"}], ",", +     "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"Z", "=", +       RowBox[{"Expand", "[", "ZZ", "]"}]}], ";", "\[IndentingNewLine]", +      RowBox[{"deg1", "=", +       RowBox[{"Exponent", "[", +        RowBox[{"Z", ",", "var1"}], "]"}]}], ";", "\[IndentingNewLine]", +      RowBox[{"deg2", "=", +       RowBox[{"Exponent", "[", +        RowBox[{"Z", ",", "var2"}], "]"}]}], ";", "\[IndentingNewLine]", +      RowBox[{"Expand", "[", +       RowBox[{"Sum", "[", +        RowBox[{+         RowBox[{+          RowBox[{"Coefficient", "[", +           RowBox[{+            RowBox[{"Coefficient", "[", +             RowBox[{"Z", ",", "var1", ",", "i"}], "]"}], ",", "var2", ",", +            "j"}], "]"}], "*", +          RowBox[{"(", +           RowBox[{+            RowBox[{"PSI$NM", "[", +             RowBox[{"n", ",", "m", ",", "i", ",", "j"}], "]"}], "/.", +            RowBox[{"{", +             RowBox[{"L", "\[Rule]", "outvar"}], "}"}]}], ")"}]}], ",", +         RowBox[{"{", +          RowBox[{"i", ",", "0", ",", "deg1"}], "}"}], ",", +         RowBox[{"{", +          RowBox[{"j", ",", "0", ",", "deg2"}], "}"}]}], "]"}], "]"}]}]}], +    "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]"}], "\n", + RowBox[{+  RowBox[{"newPsiBangMany", "[", +   RowBox[{+    RowBox[{"{", "n_", "}"}], ",", +    RowBox[{"{", "uuu_", "}"}], ",", "www_", ",", "Z_"}], "]"}], ":=", +  RowBox[{"Z", "/.", +   RowBox[{"{", +    RowBox[{"uuu", "\[Rule]", "www"}], "}"}]}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"newPsiBangMany", "[", +   RowBox[{"ns_", ",", "uuus_", ",", "www_", ",", "Z_"}], "]"}], ":=", +  RowBox[{"Module", "[", +   RowBox[{+    RowBox[{"{", +     RowBox[{"ttt", ",", "vvvs", ",", "ms"}], "}"}], ",", +    "\[IndentingNewLine]", +    RowBox[{"If", "[", +     RowBox[{+      RowBox[{+       RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "1"}], ",", +      RowBox[{"Z", "/.", +       RowBox[{"{", +        RowBox[{+         RowBox[{+         "uuus", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], +         "\[Rule]", "www"}], "}"}]}], ",", "\[IndentingNewLine]", +      RowBox[{"If", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "2"}], ",", +        RowBox[{"newPsiBang2", "[", +         RowBox[{"ns", ",", "uuus", ",", "www", ",", "Z"}], "]"}], ",", +        "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"ms", "=", +          RowBox[{"Join", "[", +           RowBox[{+            RowBox[{"{", +             RowBox[{+              RowBox[{+              "ns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], +              "+", +              RowBox[{+              "ns", "\[LeftDoubleBracket]", "2", "\[RightDoubleBracket]"}]}], +             "}"}], ",", +            RowBox[{"Drop", "[", +             RowBox[{"ns", ",", "2"}], "]"}]}], "]"}]}], ";", +         "\[IndentingNewLine]", +         RowBox[{"vvvs", "=", +          RowBox[{"Join", "[", +           RowBox[{+            RowBox[{"{", "ttt", "}"}], ",", +            RowBox[{"Drop", "[", +             RowBox[{"uuus", ",", "2"}], "]"}]}], "]"}]}], ";", +         "\[IndentingNewLine]", +         RowBox[{"newPsiBangMany", "[", +          RowBox[{"ms", ",", "vvvs", ",", "www", ",", " ", +           RowBox[{"newPsiBang2", "[", +            RowBox[{+             RowBox[{"Take", "[", +              RowBox[{"ns", ",", "2"}], "]"}], ",", +             RowBox[{"Take", "[", +              RowBox[{"uuus", ",", "2"}], "]"}], ",", "ttt", ",", "Z"}], +            "]"}]}], "]"}]}]}], "]"}]}], "]"}]}], "]"}]}]}], "Input",+ CellChangeTimes->{{3.801067686551507*^9, 3.801067757806052*^9}, {+  3.8010679277141123`*^9, 3.801067940230144*^9}, {3.801068120744752*^9, +  3.801068298368375*^9}, {3.801068793586752*^9, 3.8010688873986397`*^9}, {+  3.801069015383294*^9, 3.8010691177256727`*^9}, {3.801070830884396*^9, +  3.8010708325946302`*^9}, {3.8011130758108263`*^9, 3.8011131226335583`*^9}, {+  3.801136192770171*^9, 3.801136198915134*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{+    "PUSHFORwARD", " ", "ALONG", " ", "THE", " ", "DIAGONAL", " ", "MAP"}], +    " ", "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{+   RowBox[{+    RowBox[{"notk", "[", +     RowBox[{"n_", ",", "k_"}], "]"}], ":=", +    RowBox[{"Select", "[", +     RowBox[{+      RowBox[{"Range", "[", +       RowBox[{"0", ",", "n"}], "]"}], ",", +      RowBox[{+       RowBox[{"#", "\[NotEqual]", "k"}], "&"}]}], "]"}]}], +   "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+    "class", " ", "of", " ", "the", " ", "diagonal", " ", "in", " ", "K", +     RowBox[{"(", +      RowBox[{+       RowBox[{"P", "^", "n"}], " ", "x", " ", +       RowBox[{"P", "^", "n"}]}], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "DELTA$CLASS$2", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"DELTA$CLASS$2", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"DELTA$CLASS$2", "[", "n", "]"}], "=", "\[IndentingNewLine]", +     RowBox[{"Factor", "[", +      RowBox[{"Sum", "[", " ", +       RowBox[{+        RowBox[{"Product", "[", " ", +         RowBox[{+          RowBox[{+           RowBox[{"(", +            RowBox[{"1", "-", +             RowBox[{"L1", "*", +              RowBox[{"WT", "[", +               RowBox[{"n", ",", "i"}], "]"}]}]}], ")"}], +           RowBox[{+            RowBox[{"(", +             RowBox[{"1", "-", +              RowBox[{"L2", "*", +               RowBox[{"WT", "[", +                RowBox[{"n", ",", "i"}], "]"}]}]}], ")"}], "/", +            RowBox[{"(", +             RowBox[{"1", "-", +              RowBox[{+               RowBox[{"WT", "[", +                RowBox[{"n", ",", "i"}], "]"}], "/", +               RowBox[{"WT", "[", +                RowBox[{"n", ",", "k"}], "]"}]}]}], ")"}]}]}], "  ", ",", +          RowBox[{"{", +           RowBox[{"i", ",", +            RowBox[{"notk", "[", +             RowBox[{"n", ",", "k"}], "]"}]}], "}"}]}], "]"}], " ", ",", +        RowBox[{"{", +         RowBox[{"k", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}]}]}], +   "\[IndentingNewLine]", "\n", +   RowBox[{+    RowBox[{"newDeltaBang2", "[", +     RowBox[{"n_", ",", "invar_", ",", +      RowBox[{"{", +       RowBox[{"var1_", ",", "var2_"}], "}"}], ",", "ZZ_"}], "]"}], ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"Z", "=", +         RowBox[{"Expand", "[", "ZZ", "]"}]}], ",", "m", ",", "A"}], "}"}], +      ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"m", "=", +        RowBox[{"Exponent", "[", +         RowBox[{"Z", ",", "invar"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"A", "=", +        RowBox[{"Expand", "[", +         RowBox[{+          RowBox[{"(", +           RowBox[{+            RowBox[{"DELTA$CLASS$2", "[", "n", "]"}], "/.", +            RowBox[{"{", +             RowBox[{+              RowBox[{"L1", "\[Rule]", "var1"}], ",", +              RowBox[{"L2", "\[Rule]", "var2"}]}], "}"}]}], ")"}], "*", +          RowBox[{"Sum", "[", +           RowBox[{+            RowBox[{+             RowBox[{"var1", "^", "p"}], "*", +             RowBox[{"Coefficient", "[", +              RowBox[{"Z", ",", "invar", ",", "p"}], "]"}]}], ",", +            RowBox[{"{", +             RowBox[{"p", ",", "0", ",", "m"}], "}"}]}], "]"}]}], "]"}]}], +       ";", "\[IndentingNewLine]", +       RowBox[{"KnormalizeVarXY", "[", +        RowBox[{"n", ",", "var1", ",", "A"}], "]"}]}]}], +     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"usage", ":", " ", +     RowBox[{"deltaBangMany", "[", +      RowBox[{"dim", ",", "L", ",", +       RowBox[{"{", +        RowBox[{"L1", ",", "L2", ",", "L3"}], "}"}], ",", "X"}], "]"}]}], " ",+     "*)"}], "\n", +   RowBox[{+    RowBox[{"newDeltaBangMany", "[", +     RowBox[{"n_", ",", "uuu_", ",", "vvvs_", ",", "Z_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", "ttt", "}"}], ",", "\[IndentingNewLine]", +      RowBox[{"If", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "1"}], ",", +        RowBox[{"Z", "/.", +         RowBox[{"{", +          RowBox[{"uuu", "\[Rule]", +           RowBox[{+           "vvvs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], +          "}"}]}], ",", "\[IndentingNewLine]", +        RowBox[{"If", "[", +         RowBox[{+          RowBox[{+           RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "2"}], ",", +          RowBox[{"newDeltaBang2", "[", +           RowBox[{"n", ",", "uuu", ",", "vvvs", ",", "Z"}], "]"}], ",", +          "\[IndentingNewLine]", +          RowBox[{"newDeltaBangMany", "[", +           RowBox[{"n", ",", "ttt", ",", +            RowBox[{"Drop", "[", +             RowBox[{"vvvs", ",", "1"}], "]"}], ",", " ", +            RowBox[{"newDeltaBang2", "[", +             RowBox[{"n", ",", "uuu", ",", +              RowBox[{"{", +               RowBox[{+                RowBox[{+                "vvvs", "\[LeftDoubleBracket]", "1", +                 "\[RightDoubleBracket]"}], ",", "ttt"}], "}"}], ",", "Z"}], +             "]"}]}], "]"}]}], "]"}]}], "]"}]}], "]"}]}]}]}]], "Input",+ CellChangeTimes->{{3.8010694276831083`*^9, 3.801069434269802*^9}, {+  3.801069600632613*^9, 3.801069629592244*^9}, {3.801113235025399*^9, +  3.801113235608663*^9}, {3.801113291271837*^9, 3.8011133545199003`*^9}, {+  3.801113390957038*^9, 3.80111339175294*^9}, {3.801136134192531*^9, +  3.801136178622281*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{+   "PUSHFORWARD", " ", "ALONG", " ", "THE", " ", "POWER", " ", "MAP"}], " ", +   "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"Clear", "[", "OMEGA$ND", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"OMEGA$ND", "[", +     RowBox[{"n_", ",", "d_", ",", "p_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"OMEGA$ND", "[", +      RowBox[{"n", ",", "d", ",", "p"}], "]"}], "=", +     RowBox[{"Module", "[", +      RowBox[{+       RowBox[{"{", +        RowBox[{"vars", ",", "ns", ",", "A", ",", "B"}], "}"}], ",", +       "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"vars", "=", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{"Subscript", "[", +            RowBox[{"TMP$X", ",", "i"}], "]"}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"ns", "=", " ", +         RowBox[{"Table", "[", +          RowBox[{"n", ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"A", "=", +         RowBox[{"newDeltaBangMany", "[", +          RowBox[{"n", ",", "L", ",", "vars", ",", +           RowBox[{"L", "^", "p"}]}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"B", "=", +         RowBox[{"newPsiBangMany", "[", +          RowBox[{"ns", ",", "vars", ",", "L", ",", +           RowBox[{"Expand", "[", "A", "]"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"Expand", "[", "B", "]"}]}]}], "\[IndentingNewLine]", +      "]"}]}]}], "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"newOmegaBang", "[", +     RowBox[{"n_", ",", "0", ",", "var1_", ",", "var2_", ",", "ZZ_"}], "]"}], +    ":=", +    RowBox[{"Coefficient", "[", +     RowBox[{"ZZ", ",", "var1", ",", "0"}], "]"}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"newOmegaBang", "[", +     RowBox[{"n_", ",", "1", ",", "var1_", ",", "var2_", ",", "ZZ_"}], "]"}], +    ":=", +    RowBox[{"ZZ", "/.", +     RowBox[{"{", +      RowBox[{"var1", "\[Rule]", "var2"}], "}"}]}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"newOmegaBang", "[", +     RowBox[{"n_", ",", "d_", ",", "var1_", ",", "var2_", ",", "ZZ_"}], "]"}],+     ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"Z", "=", +         RowBox[{"Expand", "[", "ZZ", "]"}]}], ",", "m", ",", "A"}], "}"}], +      ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"m", "=", +        RowBox[{"Exponent", "[", +         RowBox[{"Z", ",", "var1"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"A", "=", +        RowBox[{"Sum", "[", +         RowBox[{+          RowBox[{+           RowBox[{"(", +            RowBox[{+             RowBox[{"OMEGA$ND", "[", +              RowBox[{"n", ",", "d", ",", "p"}], "]"}], "/.", +             RowBox[{"{", +              RowBox[{"L", "\[Rule]", "var2"}], "}"}]}], ")"}], "*", +           RowBox[{"Coefficient", "[", +            RowBox[{"Z", ",", "var1", ",", "p"}], "]"}]}], ",", +          RowBox[{"{", +           RowBox[{"p", ",", "0", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"Expand", "[", "A", "]"}]}]}], "\[IndentingNewLine]", "]"}]}], +   "\[IndentingNewLine]", "\n", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{+      RowBox[{"P", "^", "n1"}], " ", "x", " ", +      RowBox[{"P", "^", "n2"}], " ", "x", " ", +      RowBox[{"P", "^", "n3"}]}], " ", "\[Rule]", " ", +     RowBox[{+      RowBox[{+       RowBox[{"P", "^", +        RowBox[{"(", +         RowBox[{"d1", "*", "n1"}], ")"}]}], " ", "x", " ", +       RowBox[{"P", "^", +        RowBox[{"(", +         RowBox[{"d2", "*", "n2"}], ")"}]}], " ", "x", " ", +       RowBox[{"P", "^", +        RowBox[{"(", +         RowBox[{"d3", "*", "n3"}], ")"}]}]}], " ", "\[Rule]", " ", +      RowBox[{"P", "^", +       RowBox[{"(", +        RowBox[{+         RowBox[{"d1", "*", "n1"}], " ", "+", " ", +         RowBox[{"d2", "*", "n2"}], " ", "+", " ", +         RowBox[{"d3", "*", "n3"}]}], " "}]}]}]}], "*)"}], " ", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"newOmegaBangLam", "[", +     RowBox[{"ns_", ",", "ds_", ",", "uuus_", ",", "www_", ",", "Z0_"}], +     "]"}], ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"Z", "=", +         RowBox[{"Expand", "[", "Z0", "]"}]}], ",", "\[IndentingNewLine]", +        RowBox[{"m", " ", "=", " ", +         RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", +        "vars", ",", "W", ",", "nds", ",", "ttt", ",", "i"}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"vars", "=", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{"Subscript", "[", +           RowBox[{"ttt", ",", "i"}], "]"}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"nds", "=", +        RowBox[{"Table", "[", " ", +         RowBox[{+          RowBox[{+           RowBox[{"ns", "[", +            RowBox[{"[", "i", "]"}], "]"}], "*", +           RowBox[{"ds", "[", +            RowBox[{"[", "i", "]"}], "]"}]}], ",", " ", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"W", "=", "Z"}], ";", "\[IndentingNewLine]", +       RowBox[{"For", "[", +        RowBox[{+         RowBox[{"i", "=", "1"}], ",", +         RowBox[{"i", "\[LessEqual]", "m"}], ",", +         RowBox[{"i", "++"}], ",", +         RowBox[{"W", "=", +          RowBox[{"newOmegaBang", "[", +           RowBox[{+            RowBox[{"ns", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", +            RowBox[{"ds", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", +            RowBox[{"uuus", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", +            RowBox[{"vars", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", "W"}], "]"}]}]}], "]"}], +       ";", "\[IndentingNewLine]", +       RowBox[{"newPsiBangMany", "[", +        RowBox[{"nds", ",", "vars", ",", "www", ",", "W"}], "]"}]}]}], +     "\[IndentingNewLine]", "]"}]}]}]}]], "Input",+ CellChangeTimes->{{3.801070352996221*^9, 3.801070565349876*^9}, {+  3.80107060971841*^9, 3.8010706107384243`*^9}, {3.8010709729287777`*^9, +  3.8010709732164087`*^9}, {3.801071164182687*^9, 3.801071164313745*^9}, {+  3.801071203324443*^9, 3.801071220495305*^9}, {3.801071259284038*^9, +  3.8010713728549137`*^9}, {3.801071459809278*^9, 3.801071460958413*^9}, {+  3.801113170295889*^9, 3.801113206388917*^9}, {3.801136238289638*^9, +  3.8011362562914467`*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", +   RowBox[{+   "only", " ", "works", " ", "for", " ", "lists", " ", "of", " ", "equal", +    " ", +    RowBox[{"length", "!!"}]}], "*)"}], +  RowBox[{+   RowBox[{+    RowBox[{"Zip", "[", +     RowBox[{"as_", ",", "bs_"}], "]"}], ":=", +    RowBox[{"MapThread", "[", +     RowBox[{+      RowBox[{+       RowBox[{"{", +        RowBox[{"#1", ",", "#2"}], "}"}], "&"}], ",", +      RowBox[{"{", +       RowBox[{"as", ",", "bs"}], "}"}]}], "]"}]}], "\n", +   RowBox[{+    RowBox[{"Zip3", "[", +     RowBox[{"as_", ",", "bs_", ",", "cs_"}], "]"}], ":=", +    RowBox[{"MapThread", "[", +     RowBox[{+      RowBox[{+       RowBox[{"{", +        RowBox[{"#1", ",", "#2", ",", "#3"}], "}"}], "&"}], ",", +      RowBox[{"{", +       RowBox[{"as", ",", "bs", ",", "cs"}], "}"}]}], "]"}]}], "\n", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"Fst", "[", "pair_", "]"}], ":=", +    RowBox[{"pair", "[", +     RowBox[{"[", "1", "]"}], "]"}]}], "\n", +   RowBox[{+    RowBox[{"Snd", "[", "pair_", "]"}], ":=", +    RowBox[{"pair", "[", +     RowBox[{"[", "2", "]"}], "]"}]}], "\n", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"extendListWithZeros", "[", +     RowBox[{"L_", ",", "n_"}], "]"}], ":=", +    RowBox[{"Join", "[", +     RowBox[{"L", ",", +      RowBox[{"Table", "[", +       RowBox[{"0", ",", +        RowBox[{"{", +         RowBox[{"i", ",", "1", ",", +          RowBox[{"n", "-", +           RowBox[{"Length", "[", "L", "]"}]}]}], "}"}]}], "]"}]}], +     "]"}]}]}]}]], "Input"],++Cell[BoxData[{+ RowBox[{+  RowBox[{+   RowBox[{"EmptyPartQ", "[", "part_", "]"}], ":=", +   RowBox[{+    RowBox[{"Length", "[", "part", "]"}], "\[Equal]", "0"}]}], +  "\[IndentingNewLine]"}], "\n", + RowBox[{+  RowBox[{"DualPart", "[", +   RowBox[{"{", "}"}], "]"}], ":=", +  RowBox[{"{", "}"}]}], "\n", + RowBox[{+  RowBox[{+   RowBox[{"DualPart", "[", "lam_", "]"}], ":=", +   RowBox[{"With", "[", +    RowBox[{+     RowBox[{"{", +      RowBox[{"m", "=", +       RowBox[{"lam", "[", +        RowBox[{"[", "1", "]"}], "]"}]}], "}"}], ",", +     RowBox[{"Table", "[", +      RowBox[{+       RowBox[{"Length", "[", +        RowBox[{"Select", "[", +         RowBox[{"lam", ",", +          RowBox[{+           RowBox[{"#", "\[GreaterEqual]", "i"}], "&"}]}], "]"}], "]"}], ",", +       +       RowBox[{"{", +        RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], "]"}]}], +  "\[IndentingNewLine]", " "}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"toExpoForm", "[", +    RowBox[{"{", "}"}], "]"}], ":=", +   RowBox[{"{", "}"}]}], " "}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"toExpoForm", "[", "part_", "]"}], ":=", +   RowBox[{"Module", "[", +    RowBox[{+     RowBox[{"{", +      RowBox[{"k", "=", +       RowBox[{"Max", "[", "part", "]"}]}], "}"}], ",", +     RowBox[{"Table", "[", +      RowBox[{+       RowBox[{"Length", "[", +        RowBox[{"Select", "[", +         RowBox[{"part", ",", +          RowBox[{+           RowBox[{"#", "\[Equal]", "j"}], "&"}]}], "]"}], "]"}], ",", +       RowBox[{"{", +        RowBox[{"j", ",", "1", ",", "k"}], "}"}]}], "]"}]}], "]"}]}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"posVectorQ", "[", "as_", "]"}], ":=", +   RowBox[{+    RowBox[{"Map", "[", +     RowBox[{+      RowBox[{+       RowBox[{"#", "\[GreaterEqual]", "0"}], "&"}], ",", "as"}], "]"}], "/.", +    RowBox[{"{", +     RowBox[{"List", "\[Rule]", "And"}], "}"}]}]}], +  ";"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"kdeTriples", "[", +   RowBox[{"p_", ",", "ns_"}], "]"}], ":=", +  RowBox[{"Module", "[", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"{", +     RowBox[{+      RowBox[{"m", " ", "=", " ", +       RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", +      "posQ", ",", "oneK", ",", "A"}], "}"}], ",", "\[IndentingNewLine]", +    RowBox[{+     RowBox[{+      RowBox[{"oneK", "[", "k_", "]"}], ":=", +      RowBox[{"Table", "[", +       RowBox[{+        RowBox[{"{", +         RowBox[{"k", ",", +          RowBox[{"ns", "-", "es"}], ",", "es"}], "}"}], ",", +        RowBox[{"{", +         RowBox[{"es", ",", +          RowBox[{"Combinatorica`Compositions", "[", +           RowBox[{+            RowBox[{"p", "-", "k"}], ",", "m"}], "]"}]}], "}"}]}], "]"}]}], +     ";", "\[IndentingNewLine]", +     RowBox[{"A", "=", +      RowBox[{"Table", " ", "[", +       RowBox[{+        RowBox[{"oneK", "[", "k", "]"}], ",", +        RowBox[{"{", +         RowBox[{"k", ",", "0", ",", +          RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}], ";", +     "\[IndentingNewLine]", +     RowBox[{"A", "=", +      RowBox[{"Select", "[", +       RowBox[{+        RowBox[{"Flatten", "[", +         RowBox[{"A", ",", "1"}], "]"}], ",", +        RowBox[{+         RowBox[{"posVectorQ", "[", +          RowBox[{"Snd", "[", "#", "]"}], "]"}], "&"}]}], "]"}]}], ";", +     "\[IndentingNewLine]", "A"}]}], "]"}]}], "\[IndentingNewLine]"}], "Input",\++ CellChangeTimes->{{3.801071512912022*^9, 3.80107154768006*^9}}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"motivic", " ", "Chern", " ", "class", " ", "of", " ", +    RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", +  RowBox[{+   RowBox[{+    RowBox[{"Clear", "[", "mcPn", "]"}], ";"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"mcPn", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"mcPn", "[", "n", "]"}], "=", "\[IndentingNewLine]", +     RowBox[{"Module", "[", +      RowBox[{+       RowBox[{"{", +        RowBox[{"rel", ",", "tmp"}], "}"}], ",", +       RowBox[{+        RowBox[{"rel", "=", +         RowBox[{"Product", "[", +          RowBox[{+           RowBox[{"1", "-", +            RowBox[{"L", "*", +             RowBox[{"X", "^", +              RowBox[{"(", +               RowBox[{"n", "-", "i"}], ")"}]}], "*", +             RowBox[{"Y", "^", "i"}]}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"tmp", "=", +         RowBox[{"Product", "[", +          RowBox[{+           RowBox[{"1", "+", +            RowBox[{"t", "*", "L", "*", +             RowBox[{"X", "^", +              RowBox[{"(", +               RowBox[{"n", "-", "i"}], ")"}]}], "*", +             RowBox[{"Y", "^", "i"}]}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"Factor", "[", +         RowBox[{+          RowBox[{"(", +           RowBox[{"tmp", "-", +            RowBox[{+             RowBox[{+              RowBox[{"(", +               RowBox[{"-", "t"}], ")"}], "^", +              RowBox[{"(", +               RowBox[{"n", "+", "1"}], ")"}]}], " ", "rel"}]}], ")"}], "/", +          RowBox[{"(", +           RowBox[{"1", "+", "t"}], ")"}]}], "]"}]}]}], +      "]"}]}]}]}]}]], "Input",+ CellChangeTimes->{{3.801136267380416*^9, 3.801136273051806*^9}}],++Cell[BoxData[{+ RowBox[{+  RowBox[{"Clear", "[", +   RowBox[{"L", ",", "S"}], "]"}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"LL", "[", "i_", "]"}], ":=", +   RowBox[{"Subscript", "[", +    RowBox[{"L", ",", "i"}], "]"}]}], ";"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"SS", "[", "i_", "]"}], ":=", +   RowBox[{"Subscript", "[", +    RowBox[{"S", ",", "i"}], "]"}]}], ";"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"LLs", "[", "n_", "]"}], ":=", +  RowBox[{"Table", "[", +   RowBox[{+    RowBox[{"LL", "[", "i", "]"}], ",", +    RowBox[{"{", +     RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], +   "]"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"SSs", "[", "n_", "]"}], ":=", +   RowBox[{"Table", "[", +    RowBox[{+     RowBox[{"SS", "[", "i", "]"}], ",", +     RowBox[{"{", +      RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], "]"}]}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"Clear", "[", +   RowBox[{"mcXLam", ",", "mcDisj1", ",", "mcDisj", ",", "mcDisjSorted"}], +   "]"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"mcXLam", "[", +   RowBox[{"{", "}"}], "]"}], ":=", +  RowBox[{+   RowBox[{"mcXLam", "[", +    RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcXLam", "[", +    RowBox[{"{", "1", "}"}], "]"}], ":=", +   RowBox[{+    RowBox[{"mcXLam", "[", +     RowBox[{"{", "1", "}"}], "]"}], "=", +    RowBox[{"mcPn", "[", "1", "]"}]}]}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"mcDisj1", "[", "0", "]"}], ":=", +  RowBox[{+   RowBox[{"mcDisj1", "[", "0", "]"}], "=", "1"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcDisj1", "[", "1", "]"}], ":=", +   RowBox[{+    RowBox[{"mcDisj1", "[", "1", "]"}], "=", +    RowBox[{"mcPn", "[", "1", "]"}]}]}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcDisj", "[", +    RowBox[{"{", "}"}], "]"}], ":=", +   RowBox[{+    RowBox[{"mcDisj", "[", +     RowBox[{"{", "}"}], "]"}], "=", "1"}]}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcDisjSorted", "[", +    RowBox[{"{", "}"}], "]"}], ":=", +   RowBox[{+    RowBox[{"mcDisjSorted", "[", +     RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\n", "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+    RowBox[{+    "equivariant", " ", "motivic", " ", "chern", " ", "class", " ", "of", " ",+      "D", +     RowBox[{"(", "n", ")"}]}], "=", +    RowBox[{"X", +     RowBox[{"(", +      RowBox[{"1", "^", "n"}], ")"}]}]}], " ", +   "*)"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcDisj1", "[", "n_", "]"}], ":=", +   RowBox[{+    RowBox[{"mcDisj1", "[", "n", "]"}], "=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{"parts", "=", +        RowBox[{"Select", "[", +         RowBox[{+          RowBox[{"Combinatorica`Partitions", "[", "n", "]"}], ",", +          RowBox[{+           RowBox[{+            RowBox[{"Length", "[", "#", "]"}], "<", "n"}], "&"}]}], "]"}]}], +       "}"}], ",", "\[IndentingNewLine]", +      RowBox[{"Expand", "[", +       RowBox[{+        RowBox[{"mcPn", "[", "n", "]"}], "-", +        RowBox[{"Sum", "[", +         RowBox[{+          RowBox[{"mcXLam", "[", "p", "]"}], ",", +          RowBox[{"{", +           RowBox[{"p", ",", "parts"}], "}"}]}], "]"}]}], "]"}]}], +     "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", "\n", +  RowBox[{"(*", " ", +   RowBox[{+   "equivariant", " ", "motivic", " ", "chern", " ", "class", " ", "of", " ", +    "X_lambda"}], " ", "*)"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcXLam", "[", "lambda_", "]"}], ":=", +   RowBox[{+    RowBox[{"mcXLam", "[", "lambda", "]"}], "=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"es", " ", "=", " ", +         RowBox[{"toExpoForm", "[", "lambda", "]"}]}], ",", "m", ",", "m1", +        ",", "ns", ",", "pairs", ",", "Z"}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"m", "=", +        RowBox[{"Length", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"ns", " ", "=", " ", +        RowBox[{"Range", "[", "m", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"pairs", " ", "=", " ", +        RowBox[{"Zip", "[", +         RowBox[{"ns", ",", "es"}], "]"}]}], ";", "   ", +       RowBox[{"(*", " ", +        RowBox[{"i", "^", "e_"}], " ", "*)"}], "\[IndentingNewLine]", +       RowBox[{"pairs", " ", "=", " ", +        RowBox[{"Select", "[", +         RowBox[{"pairs", ",", +          RowBox[{+           RowBox[{+            RowBox[{"Snd", "[", "#", "]"}], ">", "0"}], "&"}]}], "]"}]}], ";",+        " ", +       RowBox[{"(*", " ", +        RowBox[{"!!", "!"}], " ", "*)"}], "\[IndentingNewLine]", +       RowBox[{"m1", " ", "=", " ", +        RowBox[{"Length", "[", "pairs", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"ns", " ", "=", +        RowBox[{"Map", "[", +         RowBox[{"Fst", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"es", " ", "=", +        RowBox[{"Map", "[", +         RowBox[{"Snd", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"Z", "=", +        RowBox[{"mcDisj", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"(*", " ", +        RowBox[{+         RowBox[{"Print", "[", +          RowBox[{"\"\<xlam1 - \>\"", ",", "pairs"}], "]"}], ";", +         "\[IndentingNewLine]", +         RowBox[{"Print", "[", +          RowBox[{+          "\"\<xlam2 - \>\"", ",", "es", ",", "\"\< | \>\"", ",", "ns", ",", +           "\"\< | \>\"", ",", +           RowBox[{"uus", "[", "m1", "]"}], ",", "\"\< | \>\"", ",", "X"}], +          "]"}], ";"}], " ", "*)"}], "\[IndentingNewLine]", +       RowBox[{"Expand", "[", +        RowBox[{"newOmegaBangLam", "[", +         RowBox[{"es", ",", "ns", ",", +          RowBox[{"LLs", "[", "m1", "]"}], ",", "L", ",", "Z"}], "]"}], +        "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", +  "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+   "equivariant", " ", "motivic", " ", "chern", " ", "class", " ", "of", " ", +    "D", +    RowBox[{"(", +     RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], " ", +   "*)"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"mcDisj", "[", +   RowBox[{"{", "n_", "}"}], "]"}], ":=", +  RowBox[{+   RowBox[{"mcDisj", "[", +    RowBox[{"{", "n", "}"}], "]"}], " ", "=", +   RowBox[{+    RowBox[{"mcDisj1", "[", "n", "]"}], "/.", +    RowBox[{"{", +     RowBox[{"L", "\[Rule]", +      RowBox[{"LL", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"mcDisj", "[", "ns0_", "]"}], ":=", +   RowBox[{+    RowBox[{"mcDisj", "[", "ns0", "]"}], "=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"m", "=", +         RowBox[{"Length", "[", "ns0", "]"}]}], ",", "\[IndentingNewLine]", +        "nis0", ",", "nis1", ",", "ns1", ",", "idxs", ",", "X", ",", "ttt"}], +       "}"}], ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"nis0", " ", "=", +        RowBox[{"Zip", "[", +         RowBox[{"ns0", ",", +          RowBox[{"Range", "[", "m", "]"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"nis1", "=", +        RowBox[{"SortBy", "[", +         RowBox[{"nis0", ",", +          RowBox[{+           RowBox[{"-", +            RowBox[{"Fst", "[", "#", "]"}]}], "&"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"idxs", "=", +        RowBox[{"Map", "[", +         RowBox[{"Snd", ",", "nis1"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"ns1", " ", "=", +        RowBox[{"Select", "[", +         RowBox[{+          RowBox[{"Map", "[", +           RowBox[{"Fst", ",", "nis1"}], "]"}], ",", +          RowBox[{+           RowBox[{"#", ">", "0"}], "&"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"(*", " ", +        RowBox[{+         RowBox[{"Print", "[", +          RowBox[{+          "\"\<nis1 - \>\"", ",", "nis0", ",", "\"\< | \>\"", ",", "nis1"}], +          "]"}], ";", "\[IndentingNewLine]", +         RowBox[{"Print", "[", +          RowBox[{"\"\<nis2 - \>\"", ",", "ns1"}], "]"}], ";"}], " ", "*)"}], +       "\[IndentingNewLine]", +       RowBox[{"X", "=", +        RowBox[{"mcDisjSorted", "[", "ns1", "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"X", "=", +        RowBox[{"X", "/.", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{+            RowBox[{"LL", "[", "i", "]"}], "\[Rule]", +            RowBox[{"Subscript", "[", +             RowBox[{"ttt", ",", "i"}], "]"}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"X", "/.", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{+           RowBox[{"Subscript", "[", +            RowBox[{"ttt", ",", "i"}], "]"}], "\[Rule]", +           RowBox[{"LL", "[", +            RowBox[{+            "idxs", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], +            "]"}]}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}]}], +     "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", +  "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+   "a", " ", "single", " ", "term", " ", "corresponding", " ", "to", " ", "a",+     " ", "triple", " ", +    RowBox[{"(", +     RowBox[{"k", ",", "ds", ",", "es"}], ")"}]}], " ", +   "*)"}]}], "\[IndentingNewLine]", + RowBox[{"Clear", "[", "singleKDE", "]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"singleKDE", "[", +    RowBox[{"{", +     RowBox[{"k_", ",", "ds_", ",", "es_"}], "}"}], "]"}], ":=", +   RowBox[{+    RowBox[{"ssingleKDE", "[", +     RowBox[{"{", +      RowBox[{"k", ",", "ds", ",", "es"}], "}"}], "]"}], "=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+       "A", ",", "B", ",", "\[IndentingNewLine]", "m", ",", "vars", ",", +        "dims", ",", "\[IndentingNewLine]", "pp", ",", "qq", ",", "rr", ",", +        "ss", ",", "\[IndentingNewLine]", "pps", ",", "qqs", ",", "rrs", ",", +        "sss"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"m", "=", +        RowBox[{"Length", "[", "ds", "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"pp", "[", "i_", "]"}], ":=", +        RowBox[{"Subscript", "[", +         RowBox[{"pp$p", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"qq", "[", "i_", "]"}], ":=", +        RowBox[{"Subscript", "[", +         RowBox[{"qq$q", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"rr", "[", "i_", "]"}], ":=", +        RowBox[{"Subscript", "[", +         RowBox[{"rr$r", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"ss", "[", "i_", "]"}], ":=", +        RowBox[{"Subscript", "[", +         RowBox[{"ss$s", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"pps", "=", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{"pp", "[", "i", "]"}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"qqs", "=", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{"qq", "[", "i", "]"}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"rrs", "=", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{"rr", "[", "i", "]"}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"sss", "=", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{"ss", "[", "i", "]"}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"vars", "=", +        RowBox[{"Join", "[", +         RowBox[{+          RowBox[{"{", "zzz", "}"}], ",", "pps", ",", "qqs"}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"dims", "=", +        RowBox[{"Join", "[", +         RowBox[{+          RowBox[{"{", "k", "}"}], ",", "ds", ",", "es"}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"A", "=", +        RowBox[{+         RowBox[{"mcDisj", "[", "dims", "]"}], "/.", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{+            RowBox[{"LL", "[", "i", "]"}], "\[Rule]", +            RowBox[{+            "vars", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}], +           ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", +             RowBox[{+              RowBox[{"2", "m"}], "+", "1"}]}], "}"}]}], "]"}]}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"B", "=", "A"}], ";", "\[IndentingNewLine]", +       RowBox[{"For", "[", +        RowBox[{+         RowBox[{"i", "=", "1"}], ",", +         RowBox[{"i", "\[LessEqual]", "m"}], ",", +         RowBox[{"i", "++"}], ",", +         RowBox[{"B", "=", +          RowBox[{"Expand", "[", +           RowBox[{"newDeltaBang2", "[", +            RowBox[{+             RowBox[{+             "es", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], +             ",", +             RowBox[{"qq", "[", "i", "]"}], ",", +             RowBox[{"{", +              RowBox[{+               RowBox[{"rr", "[", "i", "]"}], ",", +               RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", "B"}], "]"}], +           "]"}]}]}], "]"}], ";", "\[IndentingNewLine]", +       RowBox[{"For", "[", +        RowBox[{+         RowBox[{"i", "=", "1"}], ",", +         RowBox[{"i", "\[LessEqual]", "m"}], ",", +         RowBox[{"i", "++"}], ",", +         RowBox[{"B", "=", +          RowBox[{"Expand", "[", +           RowBox[{"newPsiBang2", "[", +            RowBox[{+             RowBox[{"{", +              RowBox[{+               RowBox[{+               "ds", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], +               ",", +               RowBox[{+               "es", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}],+               "}"}], ",", +             RowBox[{"{", +              RowBox[{+               RowBox[{"pp", "[", "i", "]"}], ",", +               RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", +             RowBox[{"LL", "[", "i", "]"}], ",", "B"}], "]"}], "]"}]}]}], +        "]"}], ";", "\[IndentingNewLine]", +       RowBox[{"B", "=", +        RowBox[{"newPsiBangMany", "[", +         RowBox[{+          RowBox[{"Join", "[", +           RowBox[{+            RowBox[{"{", "k", "}"}], ",", "es"}], "]"}], ",", +          RowBox[{"Join", "[", +           RowBox[{+            RowBox[{"{", "zzz", "}"}], ",", "rrs"}], "]"}], ",", "z", ",", +          "B"}], "]"}]}], ";", "\[IndentingNewLine]", "B"}]}], +     "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", +  "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+    RowBox[{"equiv", " ", "mc", " ", "of", " ", "D", +     RowBox[{"(", +      RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], ",", " ", +    RowBox[{+     RowBox[{+      RowBox[{+       RowBox[{"but", " ", "we", " ", "require", " ", "d1"}], +       "\[GreaterEqual]", "d2", "\[GreaterEqual]", "d3", "\[GreaterEqual]"}], +      "..."}], "\[GreaterEqual]", "dn", ">", "0"}]}], " ", +   "*)"}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"mcDisjSorted", "[", +   RowBox[{"{", "n_", "}"}], "]"}], ":=", +  RowBox[{+   RowBox[{"mcDisjSorted", "[", +    RowBox[{"{", "n", "}"}], "]"}], "=", +   RowBox[{+    RowBox[{"mcDisj1", "[", "n", "]"}], "/.", +    RowBox[{"{", +     RowBox[{"L", "\[Rule]", +      RowBox[{"LL", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"mcDisjSorted", "[", "pns_", "]"}], ":=", +  RowBox[{+   RowBox[{"mcDisjSorted", "[", "pns", "]"}], "=", +   RowBox[{"Module", "[", "\[IndentingNewLine]", +    RowBox[{+     RowBox[{"{", +      RowBox[{+       RowBox[{"p", "=", +        RowBox[{+        "pns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], ",", +       "\[IndentingNewLine]", +       RowBox[{"ns", "=", +        RowBox[{"Drop", "[", +         RowBox[{"pns", ",", "1"}], "]"}]}], ",", "\[IndentingNewLine]", "A", +       ",", "B", ",", "rest", ",", "\[IndentingNewLine]", "KDE"}], +      "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"KDE", "=", +       RowBox[{"kdeTriples", "[", +        RowBox[{"p", ",", "ns"}], "]"}]}], ";", "\[IndentingNewLine]", +      RowBox[{"(*", " ", +       RowBox[{+        RowBox[{"Print", "[", +         RowBox[{+         "\"\<sorted1 - \>\"", ",", "p", ",", "\"\< | \>\"", ",", "ns"}], +         "]"}], ";", "\[IndentingNewLine]", +        RowBox[{"Print", "[", +         RowBox[{"\"\<sorted2 - \>\"", ",", "KDE"}], "]"}], ";"}], " ", +       "*)"}], "\[IndentingNewLine]", +      RowBox[{"A", "=", +       RowBox[{+        RowBox[{"(", +         RowBox[{+          RowBox[{"mcDisj1", "[", "p", "]"}], "/.", +          RowBox[{"{", +           RowBox[{"L", "\[Rule]", "z"}], "}"}]}], ")"}], "*", +        RowBox[{"mcDisj", "[", "ns", "]"}]}]}], ";", "\[IndentingNewLine]", +      RowBox[{"rest", "=", +       RowBox[{"Sum", "[", +        RowBox[{+         RowBox[{"singleKDE", "[", "kde", "]"}], ",", +         RowBox[{"{", +          RowBox[{"kde", ",", "KDE"}], "}"}]}], "]"}]}], ";", +      "\[IndentingNewLine]", +      RowBox[{"B", " ", "=", " ", +       RowBox[{"Expand", "[", +        RowBox[{"A", "-", "rest"}], "]"}]}], ";", "\[IndentingNewLine]", +      RowBox[{"B", " ", "=", +       RowBox[{"B", "/.", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{+           RowBox[{"LL", "[", "i", "]"}], "\[Rule]", +           RowBox[{"LL", "[", +            RowBox[{"i", "+", "1"}], "]"}]}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", +            RowBox[{"Length", "[", "ns", "]"}]}], "}"}]}], "]"}]}]}], ";", +      "\[IndentingNewLine]", +      RowBox[{"B", "=", +       RowBox[{"B", "/.", +        RowBox[{"{", +         RowBox[{"z", "\[Rule]", +          RowBox[{"LL", "[", "1", "]"}]}], "}"}]}]}]}]}], +    "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]"}], "Input",+ CellChangeTimes->{{3.799904396615363*^9, 3.799904406889674*^9}, +   3.7999044864107447`*^9, {3.799904522981793*^9, 3.799904542217388*^9}, {+   3.799905368188403*^9, 3.799905440526905*^9}, {3.799910778489602*^9, +   3.799910789411199*^9}, {3.7999114574287767`*^9, 3.7999114795107517`*^9}, {+   3.7999117495827513`*^9, 3.799911793714377*^9}, {3.7999118288998423`*^9, +   3.799911896725374*^9}, {3.799912109841093*^9, 3.7999121125284853`*^9}, {+   3.7999125865497513`*^9, 3.7999126172056303`*^9}, 3.79991266733438*^9, {+   3.799912899384604*^9, 3.7999129587478647`*^9}, {3.7999130239335003`*^9, +   3.79991307814552*^9}, {3.799914094737917*^9, 3.799914115471753*^9}, {+   3.800879610477685*^9, 3.800879627666667*^9}, {3.8008796639878073`*^9, +   3.80087988408841*^9}, {3.800879937132431*^9, 3.8008799455428457`*^9}, {+   3.800880007952732*^9, 3.80088000842714*^9}, {3.801071584758039*^9, +   3.801071601266988*^9}, {3.8010716924998083`*^9, 3.801071693783765*^9}, {+   3.80111350677731*^9, 3.801113662213182*^9}, {3.80113627702074*^9, +   3.8011364016607447`*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{+    RowBox[{"export", " ", "the", " ", "classes", " ", "of", " ", "X", +     RowBox[{"(", "lambda", ")"}], " ", "for"}], " ", "|", "lambda", "|", +    RowBox[{"\[LessEqual]", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", +  "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"ExportMC", "[", "n_", "]"}], ":=", +   RowBox[{"Module", "[", "\[IndentingNewLine]", +    RowBox[{+     RowBox[{"{", +      RowBox[{+      "h", ",", "i", ",", "p", ",", "parts", ",", "k", ",", "m", ",", "s", +       ",", "j", ",", "A"}], "}"}], ",", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"h", "=", +       RowBox[{+       "OpenWrite", "[", "\"\<equivariant_mc_classes.txt\>\"", "]"}]}], ";", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"For", "[", +        RowBox[{+         RowBox[{"i", "=", "1"}], ",", +         RowBox[{"i", "\[LessEqual]", "n"}], ",", +         RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", +         RowBox[{+          RowBox[{"Print", "[", +           RowBox[{"\"\<\\nn = \>\"", ",", "i"}], "]"}], ";", +          "\[IndentingNewLine]", +          RowBox[{"WriteString", "[", +           RowBox[{"h", ",", "\"\<\\n(* =================== *)\>\""}], "]"}], +          ";", "\[IndentingNewLine]", +          RowBox[{"WriteString", "[", +           RowBox[{"h", ",", +            RowBox[{"\"\<\\n(* ----   n = \>\"", "<>", +             RowBox[{"ToString", "[", "i", "]"}], "<>", +             "\"\<   ---- *)\\n\\n\>\""}]}], "]"}], ";", +          "\[IndentingNewLine]", +          RowBox[{"parts", "=", +           RowBox[{"Partitions", "[", "i", "]"}]}], ";", +          "\[IndentingNewLine]", +          RowBox[{"m", "=", +           RowBox[{"Length", "[", "parts", "]"}]}], ";", +          "\[IndentingNewLine]", +          RowBox[{"For", "[", +           RowBox[{+            RowBox[{"j", "=", "1"}], ",", +            RowBox[{"j", "\[LessEqual]", "m"}], ",", +            RowBox[{"j", "++"}], ",", "\[IndentingNewLine]", +            RowBox[{+             RowBox[{"p", " ", "=", +              RowBox[{+              "parts", "\[LeftDoubleBracket]", "j", +               "\[RightDoubleBracket]"}]}], ";", "\[IndentingNewLine]", +             RowBox[{"Print", "[", +              RowBox[{"\"\<part = \>\"", ",", "p"}], "]"}], ";", +             "\[IndentingNewLine]", +             RowBox[{"A", " ", "=", +              RowBox[{"Expand", "[", +               RowBox[{"mcXLam", "[", "p", "]"}], "]"}]}], ";", +             "\[IndentingNewLine]", +             RowBox[{"(*", " ", +              RowBox[{+               RowBox[{"Print", "[", "A", "]"}], ";"}], " ", "*)"}], +             "\[IndentingNewLine]", +             RowBox[{"s", "=", +              RowBox[{"ToString", "[", +               RowBox[{"A", ",", +                RowBox[{"FormatType", "\[Rule]", "InputForm"}], ",", +                RowBox[{"PageWidth", "\[Rule]", "Infinity"}], ",", +                RowBox[{"TotalWidth", "\[Rule]", "Infinity"}]}], "]"}]}], ";",+              "\[IndentingNewLine]", +             RowBox[{"s", "=", +              RowBox[{"StringJoin", "[", +               RowBox[{"\"\<mc[\>\"", ",", +                RowBox[{"ToString", "[", "p", "]"}], ",", "\"\<] = \>\"", ",",+                 "s", ",", "\"\< ;\\n\\n\>\""}], "]"}]}], ";", +             "\[IndentingNewLine]", +             RowBox[{"(*", " ", +              RowBox[{+               RowBox[{"Print", "[", "s", "]"}], ";"}], " ", "*)"}], +             "\[IndentingNewLine]", +             RowBox[{"WriteString", "[", +              RowBox[{"h", ",", "s"}], "]"}], ";"}]}], "\[IndentingNewLine]", +           "]"}]}]}], "\[IndentingNewLine]", "]"}], "\[IndentingNewLine]", +       RowBox[{"Close", "[", "h", "]"}]}], ";"}]}], "\[IndentingNewLine]", +    "]"}]}]}]], "Input",+ CellChangeTimes->{{3.8010696348056927`*^9, 3.801069676577145*^9}, {+   3.8010698703892193`*^9, 3.8010698731444807`*^9}, {3.801070034862121*^9, +   3.801070129428359*^9}, {3.801070348521194*^9, 3.8010703684698143`*^9}, +   3.8010705779746532`*^9, {3.8011138755594053`*^9, 3.801113953709689*^9}, {+   3.801114017451393*^9, 3.801114021495187*^9}, {3.801126780457333*^9, +   3.8011267819827213`*^9}, {3.801136419578253*^9, 3.80113645733673*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"mcXLam", "[", +  RowBox[{"{", +   RowBox[{"1", ",", "1", ",", "1"}], "}"}], "]"}]], "Input",+ CellChangeTimes->{{3.801136537782967*^9, 3.801136542901239*^9}}],++Cell[BoxData[+ RowBox[{"t", "-", +  SuperscriptBox["t", "3"], "-", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["X", "3"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["X", "2"], " ", "Y"}], "-", +  RowBox[{"2", " ", "L", " ", "t", " ", +   SuperscriptBox["X", "2"], " ", "Y"}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "2"], " ", "Y"}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "-", +  RowBox[{"L", " ", "X", " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"2", " ", "L", " ", "t", " ", "X", " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", "X", " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "6"]}]}]], "Output",+ CellChangeTimes->{3.801136543352934*^9, 3.801136596052211*^9, +  3.801136778356182*^9, 3.8011368485104017`*^9}]+}, Open  ]],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"mcXLam", "[", +  RowBox[{"{", +   RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}], +  "]"}]], "Input",+ CellChangeTimes->{{3.8011367835025377`*^9, 3.8011367837109613`*^9}}],++Cell[BoxData[+ RowBox[{+  SuperscriptBox["t", "3"], "-", +  SuperscriptBox["t", "5"], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "5"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", "Y"}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "4"], " ", "Y"}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "9"], " ", "Y"}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "9"], " ", "Y"}], "+", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", "X", " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "5"], " ", "X", " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"5", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"8", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"8", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", "X", " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "5"], " ", "X", " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"5", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"8", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"5", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"5", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"9", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"8", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"5", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"8", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"5", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "5"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "15"]}]}]], "Output",+ CellChangeTimes->{3.8011367844243927`*^9, 3.801136850336916*^9}]+}, Open  ]],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"mcXLam", "[", +  RowBox[{"{", +   RowBox[{"2", ",", "2", ",", "1", ",", "1"}], "}"}], "]"}]], "Input",+ CellChangeTimes->{{3.8011367926691723`*^9, 3.8011367954781446`*^9}}],++Cell[BoxData[+ RowBox[{+  RowBox[{"-", "t"}], "-", +  SuperscriptBox["t", "2"], "+", +  SuperscriptBox["t", "3"], "+", +  SuperscriptBox["t", "4"], "+", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["X", "6"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "6"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "+", +  RowBox[{"2", " ", "L", " ", "t", " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "5"], " ", "Y"}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "11"], " ", "Y"}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", "Y"}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", "Y"}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "11"], " ", "Y"}], "+", +  RowBox[{"2", " ", "L", " ", "t", " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{"2", " ", "L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "2"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "2"]}], "+", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "3"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "3"]}], "+", +  RowBox[{"2", " ", "L", " ", "t", " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"2", " ", "L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{"10", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "4"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "4"]}], "+", +  RowBox[{"L", " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"2", " ", "L", " ", "t", " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", "X", " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"15", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"13", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"11", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"11", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "5"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "5"]}], "+", +  RowBox[{"L", " ", "t", " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"L", " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"L", " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"16", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"14", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"7", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"21", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"19", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "6"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "6"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"15", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"13", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"9", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"30", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"30", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{"6", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "7"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "7"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"10", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"13", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"38", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"36", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"9", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"10", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"9", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "8"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "8"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"13", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"42", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"42", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"10", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"18", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"16", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "9"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "9"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "2"], " ", "t", " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "2"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"13", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"38", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"36", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"9", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"9", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"27", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"24", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "10"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "10"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", "t", " ", "X", " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "2"], " ", "X", " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "3"], " ", "X", " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{+   SuperscriptBox["L", "2"], " ", +   SuperscriptBox["t", "4"], " ", "X", " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"9", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"30", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"30", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"6", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"31", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"27", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "11"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "11"]}], "+", +  RowBox[{"7", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"21", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"19", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"33", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"29", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"9", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"10", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "12"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "12"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"11", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"11", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "5"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"31", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"27", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"12", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "13"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "13"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "4"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"9", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"27", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"24", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "14"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "14"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", "t", " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{+   SuperscriptBox["L", "3"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "3"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"18", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"16", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "9"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{+   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "21"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "21"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "21"], " ", +   SuperscriptBox["Y", "15"]}], "+", +  RowBox[{+   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "21"], " ", +   SuperscriptBox["Y", "15"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "16"]}], "-", +  RowBox[{"10", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "16"]}], "-", +  RowBox[{"9", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "8"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "16"]}], "-", +  RowBox[{"7", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "16"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "16"]}], "-", +  RowBox[{"5", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "14"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{+   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{"7", " ", +   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{"12", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{"8", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "16"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "20"], " ", +   SuperscriptBox["Y", "16"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "7"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{"3", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{"11", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{"12", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "13"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{"13", " ", +   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{"19", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{"14", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "17"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "19"], " ", +   SuperscriptBox["Y", "17"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", "t", " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{+   SuperscriptBox["L", "4"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "6"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{"9", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{"10", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{"4", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "12"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{"16", " ", +   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{"24", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{"16", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "18"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "18"], " ", +   SuperscriptBox["Y", "18"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", "t", " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "19"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "19"]}], "-", +  RowBox[{"6", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "19"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "11"], " ", +   SuperscriptBox["Y", "19"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "19"]}], "+", +  RowBox[{"13", " ", +   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "19"]}], "+", +  RowBox[{"19", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "19"]}], "+", +  RowBox[{"14", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "19"]}], "+", +  RowBox[{"4", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "17"], " ", +   SuperscriptBox["Y", "19"]}], "-", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "20"]}], "-", +  RowBox[{"2", " ", +   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "20"]}], "-", +  RowBox[{+   SuperscriptBox["L", "5"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "10"], " ", +   SuperscriptBox["Y", "20"]}], "+", +  RowBox[{+   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "20"]}], "+", +  RowBox[{"7", " ", +   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "20"]}], "+", +  RowBox[{"12", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "20"]}], "+", +  RowBox[{"8", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "20"]}], "+", +  RowBox[{"2", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "16"], " ", +   SuperscriptBox["Y", "20"]}], "+", +  RowBox[{+   SuperscriptBox["L", "6"], " ", "t", " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "21"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "2"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "21"]}], "+", +  RowBox[{"3", " ", +   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "3"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "21"]}], "+", +  RowBox[{+   SuperscriptBox["L", "6"], " ", +   SuperscriptBox["t", "4"], " ", +   SuperscriptBox["X", "15"], " ", +   SuperscriptBox["Y", "21"]}]}]], "Output",+ CellChangeTimes->{3.80113679587457*^9, 3.801136857122386*^9}]+}, Open  ]]+},+WindowSize->{740, 655},+WindowMargins->{{1, Automatic}, {0, Automatic}},+FrontEndVersion->"9.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 20, \+2012)",+StyleDefinitions->"Default.nb"+]+(* End of Notebook Content *)++(* Internal cache information *)+(*CellTagsOutline+CellTagsIndex->{}+*)+(*CellTagsIndex+CellTagsIndex->{}+*)+(*NotebookFileOutline+Notebook[{+Cell[CellGroupData[{+Cell[579, 22, 578, 13, 80, "Input"],+Cell[1160, 37, 418, 9, 58, "Message"]+}, Open  ]],+Cell[1593, 49, 271, 9, 8, "Text"],+Cell[1867, 60, 6508, 172, 641, "Input"],+Cell[8378, 234, 271, 9, 8, "Text"],+Cell[8652, 245, 9520, 255, 709, "Input"],+Cell[18175, 502, 6900, 179, 522, "Input"],+Cell[25078, 683, 271, 9, 8, "Text"],+Cell[25352, 694, 5659, 146, 420, "Input"],+Cell[31014, 842, 271, 9, 8, "Text"],+Cell[31288, 853, 6864, 175, 573, "Input"],+Cell[38155, 1030, 271, 9, 8, "Text"],+Cell[38429, 1041, 1528, 48, 148, "Input"],+Cell[39960, 1091, 3509, 107, 335, "Input"],+Cell[43472, 1200, 1930, 54, 114, "Input"],+Cell[45405, 1256, 19681, 521, 1780, "Input"],+Cell[65089, 1779, 271, 9, 8, "Text"],+Cell[65363, 1790, 4258, 94, 438, "Input"],+Cell[69624, 1886, 271, 9, 8, "Text"],+Cell[CellGroupData[{+Cell[69920, 1899, 182, 4, 28, "Input"],+Cell[70105, 1905, 4665, 144, 109, "Output"]+}, Open  ]],+Cell[CellGroupData[{+Cell[74807, 2054, 209, 5, 28, "Input"],+Cell[75019, 2061, 21949, 683, 470, "Output"]+}, Open  ]],+Cell[CellGroupData[{+Cell[97005, 2749, 196, 4, 28, "Input"],+Cell[97204, 2755, 40977, 1249, 922, "Output"]+}, Open  ]]+}+]+*)++(* End of internal cache information *)
+ mathematica/equiv_motivic_chern.src view
@@ -0,0 +1,504 @@++(* ===== EQUIVARIANT MOTIVIC CHERN CLASSES OF COINCIDENT ROOT LOCI ==== *)++<< Combinatorica`++(* === NORMALIZATION in K(P^n) === *)++(* Weights of Sym^n C^2 *)+Clear[L, X, Y]+WT[n_, i_] := X^(n - i)*Y^i++(* the relation in K (P^n). Convention: +L is the tautological line bundle, +   c_ 1(X) = -alpha, c_ 1(Y) = -beta *)++KREL[n_] := Product[1 - L*WT[n, i], {i, 0, n}]++(* normal form of L^(n+1) *)+Clear[Lpow$nplus1]+Lpow$nplus1[n_] := + Lpow$nplus1[n] = +  Expand[L^(n + 1) - (-1)^(n + 1) KREL[n]/(X*Y)^Binomial[n + 1, 2]]++(* (unefficiently) normalize a polynomial in L *) +Clear[KnormalizeSlow]+KnormalizeSlow[n_, Z0_] := Module[{Z = Expand[Z0], m},+  m = Exponent[Z, L];+  If[m <= n, Z, +   KnormalizeSlow[n, Z /. {L^m -> L^(m - n - 1)*Lpow$nplus1[n]}]]+  ]++(* Table of normal forms of L^p *)+Clear[LPowXY]+LPowXY[n_, k_] := LPowXY[n, k] = Expand[KnormalizeSlow[n, L^k]]++(* More efficient normalization in K^(P^n) +usage: KnormalizeVarXY[dim,L,expr] *)+Clear[KnormalizeVarXY]+KnormalizeVarXY[n_, uuu_, Z0_] := Module[+  {m, Z},+  Z = Expand[Z0];+  m = Exponent[Z, uuu];+  Expand[Sum[Coefficient[Z, uuu, k]*(LPowXY[n, k] /. {L -> uuu}), {k, 0, m}]]+  ] ++(* === PUSHFORWARD ALONG PSI (THE MULTIPLICATION MAP) === *)++(* formulas for (psi_{n,1})_! (L1^p*L2^q) *)+Clear[PSI$N1f]+PSI$N1f[n_, 0, 1] := L*(X^(n + 1) - Y^(n + 1))/(X - Y)+PSI$N1f[n_, p_, 0] := + L^p*(X^(p + 1) - Y^(p + 1))/(X - Y) + +  L^(p + 1) (X^(n + 1)*Y^(p + 1) - Y^(n + 1) X^(p + 1))/(X - Y)+PSI$N1f[n_, p_, q_] := If[p >= q,+  L^q*PSI$N1f[n, p - q, 0],+  L^p*PSI$N1f[n, 0, q - p]+  ]++Clear[PSI$N1]+PSI$N1[n_, p_, q_] := PSI$N1[n, p, q] = Expand[Factor[PSI$N1f[n, p, q]]]++Clear[newPsiBang2]+newPsiBang2[{n_, 1}, {var1_, var2_}, outvar_, ZZ_] := Module[+  {Z},+  Z = Expand[ZZ];+  Expand[Sum[+    Coefficient[Coefficient[Z, var1, i], var2, +      j]*(PSI$N1[n, i, j] /. {L -> outvar}), {i, 0, n}, {j, 0, 1}]]+  ]++(* find elements in K(P^m x P^1) such that their pushforward to K(P^(m+1)) is \+{1,L,L^2,...L^(m+1)} *)+findBasis$M1[m_] := findBasis$M1[m] =+  Module[{vars, A, B, list, i, j, k, eqs, sols, sol},+   vars = Table[Subscript[a, i], {i, 0, m + 1}];+   A = Sum[Subscript[a, i]*L1^i, {i, 0, m}] ++     Subscript[a, m + 1]*L1^m*L2;+   B = newPsiBang2[{m, 1}, {L1, L2}, L, A];+   list = Table[Null, {i, 0, m + 1}];+   For[k = 0, k <= m + 1, k++,+    eqs = Table[Coefficient[B, L, i] == If[k == i, 1, 0], {i, 0, m + 1}];+    sols = Solve[eqs, vars];+    sol = sols[[1]];+    list[[k + 1]] = A /. sol;+    ];+   list+   ]+++Clear[PSI$NM, S, T]+PSI$NM[n_, 0, p_, 0] := L^p+PSI$NM[0, m_, 0, q_] := L^q+PSI$NM[n_, 1, p_, q_] := PSI$NM[n, 1, p, q] = PSI$N1[n, p, q]+PSI$NM[n_, mplus1_, p_, q_] := PSI$NM[n, mplus1, p, q] = Module[+   {m = mplus1 - 1, basis, A, B, C},+   basis = findBasis$M1[m];+   A = basis[[q + 1]] /. {L1 -> L2, L2 -> T};+   B = newPsiBang2[{n, m}, {L1, L2}, S, L1^p*A];+   C = newPsiBang2[{n + m, 1}, {S, T}, L, B];+   Expand[Factor[C]]+   ]++newPsiBang2[{n_, m_}, {var1_, var2_}, outvar_, ZZ_] := Module[+  {Z, deg1, deg2},+  Z = Expand[ZZ];+  deg1 = Exponent[Z, var1];+  deg2 = Exponent[Z, var2];+  Expand[Sum[+    Coefficient[Coefficient[Z, var1, i], var2, +      j]*(PSI$NM[n, m, i, j] /. {L -> outvar}), {i, 0, deg1}, {j, 0, deg2}]]+  ]++newPsiBangMany[{n_}, {uuu_}, www_, Z_] := Z /. {uuu -> www}+newPsiBangMany[ns_, uuus_, www_, Z_] := Module[{ttt, vvvs, ms},+  If[Length[uuus] == 1, Z /. {uuus[[1]] -> www},+   If[Length[uuus] == 2, newPsiBang2[ns, uuus, www, Z],+    ms = Join[{ns[[1]] + ns[[2]]}, Drop[ns, 2]];+    vvvs = Join[{ttt}, Drop[uuus, 2]];+    newPsiBangMany[ms, vvvs, www, +     newPsiBang2[Take[ns, 2], Take[uuus, 2], ttt, Z]]]]]++(* === PUSHFORwARD ALONG THE DIAGONAL MAP === *)++notk[n_, k_] := Select[Range[0, n], # != k &]++(* class of the diagonal in K(P^n x P^n) *)+Clear[DELTA$CLASS$2]+DELTA$CLASS$2[n_] := DELTA$CLASS$2[n] =+  Factor[Sum[ +    Product[ (1 - +        L1*WT[n, i]) (1 - L2*WT[n, i])/(1 - WT[n, i]/WT[n, k])  , {i, +      notk[n, k]}] , {k, 0, n}]]++newDeltaBang2[n_, invar_, {var1_, var2_}, ZZ_] := Module[+  {Z = Expand[ZZ], m, A},+  m = Exponent[Z, invar];+  A = Expand[(DELTA$CLASS$2[n] /. {L1 -> var1, L2 -> var2})*+     Sum[var1^p*Coefficient[Z, invar, p], {p, 0, m}]];+  KnormalizeVarXY[n, var1, A]+  ]++(* usage: deltaBangMany[dim,L,{L1,L2,L3},X] *)++newDeltaBangMany[n_, uuu_, vvvs_, Z_] := Module[{ttt},+  If[Length[vvvs] == 1, Z /. {uuu -> vvvs[[1]]},+   If[Length[vvvs] == 2, newDeltaBang2[n, uuu, vvvs, Z],+    newDeltaBangMany[n, ttt, Drop[vvvs, 1], +     newDeltaBang2[n, uuu, {vvvs[[1]], ttt}, Z]]]]]++ +(* PUSHFORWARD ALONG THE POWER MAP *)++Clear[OMEGA$ND]+OMEGA$ND[n_, d_, p_] := OMEGA$ND[n, d, p] = Module[{vars, ns, A, B},+   vars = Table[Subscript[TMP$X, i], {i, 1, d}];+   ns = Table[n, {i, 1, d}];+   A = newDeltaBangMany[n, L, vars, L^p];+   B = newPsiBangMany[ns, vars, L, Expand[A]];+   Expand[B]+   ]++newOmegaBang[n_, 0, var1_, var2_, ZZ_] := Coefficient[ZZ, var1, 0]+newOmegaBang[n_, 1, var1_, var2_, ZZ_] := ZZ /. {var1 -> var2}+newOmegaBang[n_, d_, var1_, var2_, ZZ_] := Module[+  {Z = Expand[ZZ], m, A},+  m = Exponent[Z, var1];+  A = Sum[(OMEGA$ND[n, d, p] /. {L -> var2})*Coefficient[Z, var1, p], {p, 0, +     m}];+  Expand[A]+  ]++(* P^n1 x P^n2 x P^n3 -> P^(d1*n1) x P^(d2*n2) x P^(d3*n3) -> P^(d1*n1 + \+d2*n2 + d3*n3 *) +newOmegaBangLam[ns_, ds_, uuus_, www_, Z0_] := Module[+  {Z = Expand[Z0],+   m = Length[ns],+   vars, W, nds, ttt, i},+  vars = Table[Subscript[ttt, i], {i, 1, m}];+  nds = Table[ ns[[i]]*ds[[i]], {i, 1, m}];+  W = Z;+  For[i = 1, i <= m, i++, +   W = newOmegaBang[ns[[i]], ds[[i]], uuus[[i]], vars[[i]], W]];+  newPsiBangMany[nds, vars, www, W]+  ]++ +(*only works for lists of equal length!!*)+Zip[as_, bs_] := MapThread[{#1, #2} &, {as, bs}]+Zip3[as_, bs_, cs_] := MapThread[{#1, #2, #3} &, {as, bs, cs}]++Fst[pair_] := pair[[1]]+Snd[pair_] := pair[[2]]++extendListWithZeros[L_, n_] := Join[L, Table[0, {i, 1, n - Length[L]}]]++EmptyPartQ[part_] := Length[part] == 0++DualPart[{}] := {}+DualPart[lam_] := + With[{m = lam[[1]]}, Table[Length[Select[lam, # >= i &]], {i, 1, m}]]+ +toExpoForm[{}] := {} +toExpoForm[part_] := + Module[{k = Max[part]}, Table[Length[Select[part, # == j &]], {j, 1, k}]]++posVectorQ[as_] := Map[# >= 0 &, as] /. {List -> And};+kdeTriples[p_, ns_] := Module[+  {m = Length[ns],+   posQ, oneK, A},+  oneK[k_] := +   Table[{k, ns - es, es}, {es, Combinatorica`Compositions[p - k, m]}];+  A = Table [oneK[k], {k, 0, p - 1}];+  A = Select[Flatten[A, 1], posVectorQ[Snd[#]] &];+  A]+++(* motivic Chern class of P^n *)+Clear[mcPn];+mcPn[n_] := mcPn[n] =+  Module[{rel, tmp}, rel = Product[1 - L*X^(n - i)*Y^i, {i, 0, n}];+   tmp = Product[1 + t*L*X^(n - i)*Y^i, {i, 0, n}];+   Factor[(tmp - (-t)^(n + 1) rel)/(1 + t)]]++Clear[L, S]++LL[i_] := Subscript[L, i];+SS[i_] := Subscript[S, i];+LLs[n_] := Table[LL[i], {i, 1, n}]+SSs[n_] := Table[SS[i], {i, 1, n}]++Clear[mcXLam, mcDisj1, mcDisj, mcDisjSorted]++mcXLam[{}] := mcXLam[{}] = 1+mcXLam[{1}] := mcXLam[{1}] = mcPn[1]++mcDisj1[0] := mcDisj1[0] = 1+mcDisj1[1] := mcDisj1[1] = mcPn[1]++mcDisj[{}] := mcDisj[{}] = 1++mcDisjSorted[{}] := mcDisjSorted[{}] = 1++(* equivariant motivic chern class of D(n)=X(1^n) *)++mcDisj1[n_] := mcDisj1[n] = Module[+   {parts = Select[Combinatorica`Partitions[n], Length[#] < n &]},+   Expand[mcPn[n] - Sum[mcXLam[p], {p, parts}]]+   ]++(* equivariant motivic chern class of X_lambda *)++mcXLam[lambda_] := mcXLam[lambda] = Module[+   {es = toExpoForm[lambda], m, m1, ns, pairs, Z},+   m = Length[es];+   ns = Range[m];+   pairs = Zip[ns, es];   (* i^e_ *)+   +   pairs = Select[pairs, Snd[#] > 0 &]; (* !!! *)+   m1 = Length[pairs];+   ns = Map[Fst, pairs];+   es = Map[Snd, pairs];+   Z = mcDisj[es];+   (* Print["xlam1 - ",pairs];+   Print["xlam2 - ",es," | ",ns," | ",uus[m1]," | ",X]; *)+   +   Expand[newOmegaBangLam[es, ns, LLs[m1], L, Z]]+   ]++(* equivariant motivic chern class of D(d1,d2,...) *)++mcDisj[{n_}] := mcDisj[{n}] = mcDisj1[n] /. {L -> LL[1]}+mcDisj[ns0_] := mcDisj[ns0] = Module[+   {m = Length[ns0],+    nis0, nis1, ns1, idxs, X, ttt},+   nis0 = Zip[ns0, Range[m]];+   nis1 = SortBy[nis0, -Fst[#] &];+   idxs = Map[Snd, nis1];+   ns1 = Select[Map[Fst, nis1], # > 0 &];+   (* Print["nis1 - ",nis0," | ",nis1];+   Print["nis2 - ",ns1]; *)+   X = mcDisjSorted[ns1];+   X = X /. Table[LL[i] -> Subscript[ttt, i], {i, 1, m}];+   X /. Table[Subscript[ttt, i] -> LL[idxs[[i]]], {i, 1, m}]+   ]++(* a single term corresponding to a triple (k,ds,es) *)+Clear[singleKDE]+singleKDE[{k_, ds_, es_}] := ssingleKDE[{k, ds, es}] = Module[+   {A, B,+    m, vars, dims,+    pp, qq, rr, ss,+    pps, qqs, rrs, sss+    },+   m = Length[ds];+   pp[i_] := Subscript[pp$p, i];+   qq[i_] := Subscript[qq$q, i];+   rr[i_] := Subscript[rr$r, i];+   ss[i_] := Subscript[ss$s, i];+   pps = Table[pp[i], {i, 1, m}];+   qqs = Table[qq[i], {i, 1, m}];+   rrs = Table[rr[i], {i, 1, m}];+   sss = Table[ss[i], {i, 1, m}];+   vars = Join[{zzz}, pps, qqs];+   dims = Join[{k}, ds, es];+   A = mcDisj[dims] /. Table[LL[i] -> vars[[i]], {i, 1, 2 m + 1}];+   B = A;+   For[i = 1, i <= m, i++, +    B = Expand[newDeltaBang2[es[[i]], qq[i], {rr[i], ss[i]}, B]]];+   For[i = 1, i <= m, i++, +    B = Expand[newPsiBang2[{ds[[i]], es[[i]]}, {pp[i], ss[i]}, LL[i], B]]];+   B = newPsiBangMany[Join[{k}, es], Join[{zzz}, rrs], z, B];+   B+   ]++(* equiv mc of D(d1,d2,...), but we require d1>=d2>=d3>=...>=dn>0 *)++mcDisjSorted[{n_}] := mcDisjSorted[{n}] = mcDisj1[n] /. {L -> LL[1]}+mcDisjSorted[pns_] := mcDisjSorted[pns] = Module[+   {p = pns[[1]],+    ns = Drop[pns, 1],+    A, B, rest,+    KDE+    },+   KDE = kdeTriples[p, ns];+   (* Print["sorted1 - ",p," | ",ns];+   Print["sorted2 - ",KDE]; *)+   A = (mcDisj1[p] /. {L -> z})*mcDisj[ns];+   rest = Sum[singleKDE[kde], {kde, KDE}];+   B = Expand[A - rest];+   B = B /. Table[LL[i] -> LL[i + 1], {i, 1, Length[ns]}];+   B = B /. {z -> LL[1]}+   ]+++(* export the classes of X(lambda) for |lambda|<=n *)++ExportMC[n_] := Module[+  {h, i, p, parts, k, m, s, j, A},+  h = OpenWrite["equivariant_mc_classes.txt"];+  For[i = 1, i <= n, i++,+    Print["\nn = ", i];+    WriteString[h, "\n(* =================== *)"];+    WriteString[h, "\n(* ----   n = " <> ToString[i] <> "   ---- *)\n\n"];+    parts = Partitions[i];+    m = Length[parts];+    For[j = 1, j <= m, j++,+     p = parts[[j]];+     Print["part = ", p];+     A = Expand[mcXLam[p]];+     (* Print[A]; *)+     +     s = ToString[A, FormatType -> InputForm, PageWidth -> Infinity, +       TotalWidth -> Infinity];+     s = StringJoin["mc[", ToString[p], "] = ", s, " ;\n\n"];+     (* Print[s]; *)+     WriteString[h, s];+     ]+    ]+   Close[h];+  ]+++mcXLam[{1, 1, 1}]++t - t^3 - L t X^3 + L t^3 X^3 - L X^2 Y - 2 L t X^2 Y + L t^3 X^2 Y + + L^2 t X^5 Y - L^2 t^3 X^5 Y - L X Y^2 - 2 L t X Y^2 + L t^3 X Y^2 + + L^2 X^4 Y^2 + L^2 t X^4 Y^2 - L^2 t^2 X^4 Y^2 - L^2 t^3 X^4 Y^2 - L t Y^3 + + L t^3 Y^3 + L^2 X^3 Y^3 + 2 L^2 t X^3 Y^3 - L^2 t^2 X^3 Y^3 - + 2 L^2 t^3 X^3 Y^3 + L^3 t^2 X^6 Y^3 + L^3 t^3 X^6 Y^3 + L^2 X^2 Y^4 + + L^2 t X^2 Y^4 - L^2 t^2 X^2 Y^4 - L^2 t^3 X^2 Y^4 + L^3 t X^5 Y^4 + + 2 L^3 t^2 X^5 Y^4 + L^3 t^3 X^5 Y^4 + L^2 t X Y^5 - L^2 t^3 X Y^5 + + L^3 t X^4 Y^5 + 2 L^3 t^2 X^4 Y^5 + L^3 t^3 X^4 Y^5 + L^3 t^2 X^3 Y^6 + + L^3 t^3 X^3 Y^6++mcXLam[{1, 1, 1, 1, 1}]++t^3 - t^5 - L t^3 X^5 + L t^5 X^5 - L t^3 X^4 Y + L t^5 X^4 Y + + L^2 t^3 X^9 Y - L^2 t^5 X^9 Y + L t X^3 Y^2 + L t^2 X^3 Y^2 - L t^3 X^3 Y^2 ++  L t^5 X^3 Y^2 + L^2 t^3 X^8 Y^2 - L^2 t^5 X^8 Y^2 + L t X^2 Y^3 + + L t^2 X^2 Y^3 - L t^3 X^2 Y^3 + L t^5 X^2 Y^3 - L^2 t X^7 Y^3 + + 3 L^2 t^3 X^7 Y^3 - 2 L^2 t^5 X^7 Y^3 - L^3 t^3 X^12 Y^3 + L^3 t^5 X^12 Y^3 -+  L t^3 X Y^4 + L t^5 X Y^4 + L^2 t^2 X^6 Y^4 + 3 L^2 t^3 X^6 Y^4 - + 2 L^2 t^5 X^6 Y^4 - L^3 t X^11 Y^4 - 2 L^3 t^2 X^11 Y^4 - + 2 L^3 t^3 X^11 Y^4 + L^3 t^5 X^11 Y^4 - L t^3 Y^5 + L t^5 Y^5 + L^2 X^5 Y^5 ++  L^2 t^2 X^5 Y^5 + 5 L^2 t^3 X^5 Y^5 - 3 L^2 t^5 X^5 Y^5 - L^3 X^10 Y^5 - + 2 L^3 t X^10 Y^5 - 4 L^3 t^2 X^10 Y^5 - 5 L^3 t^3 X^10 Y^5 + + 2 L^3 t^5 X^10 Y^5 + L^2 t^2 X^4 Y^6 + 3 L^2 t^3 X^4 Y^6 - + 2 L^2 t^5 X^4 Y^6 - L^3 X^9 Y^6 - 3 L^3 t X^9 Y^6 - 6 L^3 t^2 X^9 Y^6 - + 7 L^3 t^3 X^9 Y^6 + 3 L^3 t^5 X^9 Y^6 + L^4 t^3 X^14 Y^6 - L^4 t^5 X^14 Y^6 -+  L^2 t X^3 Y^7 + 3 L^2 t^3 X^3 Y^7 - 2 L^2 t^5 X^3 Y^7 - L^3 X^8 Y^7 - + 3 L^3 t X^8 Y^7 - 7 L^3 t^2 X^8 Y^7 - 8 L^3 t^3 X^8 Y^7 + 3 L^3 t^5 X^8 Y^7 ++  L^4 t X^13 Y^7 + 2 L^4 t^2 X^13 Y^7 + L^4 t^3 X^13 Y^7 - L^4 t^4 X^13 Y^7 - + L^4 t^5 X^13 Y^7 + L^2 t^3 X^2 Y^8 - L^2 t^5 X^2 Y^8 - L^3 X^7 Y^8 - + 3 L^3 t X^7 Y^8 - 7 L^3 t^2 X^7 Y^8 - 8 L^3 t^3 X^7 Y^8 + 3 L^3 t^5 X^7 Y^8 ++  L^4 X^12 Y^8 + 2 L^4 t X^12 Y^8 + 4 L^4 t^2 X^12 Y^8 + 4 L^4 t^3 X^12 Y^8 - + L^4 t^4 X^12 Y^8 - 2 L^4 t^5 X^12 Y^8 + L^2 t^3 X Y^9 - L^2 t^5 X Y^9 - + L^3 X^6 Y^9 - 3 L^3 t X^6 Y^9 - 6 L^3 t^2 X^6 Y^9 - 7 L^3 t^3 X^6 Y^9 + + 3 L^3 t^5 X^6 Y^9 + L^4 X^11 Y^9 + 5 L^4 t X^11 Y^9 + 8 L^4 t^2 X^11 Y^9 + + 5 L^4 t^3 X^11 Y^9 - L^4 t^4 X^11 Y^9 - 2 L^4 t^5 X^11 Y^9 - L^3 X^5 Y^10 - + 2 L^3 t X^5 Y^10 - 4 L^3 t^2 X^5 Y^10 - 5 L^3 t^3 X^5 Y^10 + + 2 L^3 t^5 X^5 Y^10 + 2 L^4 X^10 Y^10 + 5 L^4 t X^10 Y^10 + + 9 L^4 t^2 X^10 Y^10 + 8 L^4 t^3 X^10 Y^10 - L^4 t^4 X^10 Y^10 - + 3 L^4 t^5 X^10 Y^10 + L^5 t^4 X^15 Y^10 + L^5 t^5 X^15 Y^10 - + L^3 t X^4 Y^11 - 2 L^3 t^2 X^4 Y^11 - 2 L^3 t^3 X^4 Y^11 + L^3 t^5 X^4 Y^11 ++  L^4 X^9 Y^11 + 5 L^4 t X^9 Y^11 + 8 L^4 t^2 X^9 Y^11 + 5 L^4 t^3 X^9 Y^11 - + L^4 t^4 X^9 Y^11 - 2 L^4 t^5 X^9 Y^11 + L^5 t^2 X^14 Y^11 + + 2 L^5 t^3 X^14 Y^11 + 2 L^5 t^4 X^14 Y^11 + L^5 t^5 X^14 Y^11 - + L^3 t^3 X^3 Y^12 + L^3 t^5 X^3 Y^12 + L^4 X^8 Y^12 + 2 L^4 t X^8 Y^12 + + 4 L^4 t^2 X^8 Y^12 + 4 L^4 t^3 X^8 Y^12 - L^4 t^4 X^8 Y^12 - + 2 L^4 t^5 X^8 Y^12 + L^5 t X^13 Y^12 + 2 L^5 t^2 X^13 Y^12 + + 3 L^5 t^3 X^13 Y^12 + 3 L^5 t^4 X^13 Y^12 + L^5 t^5 X^13 Y^12 + + L^4 t X^7 Y^13 + 2 L^4 t^2 X^7 Y^13 + L^4 t^3 X^7 Y^13 - L^4 t^4 X^7 Y^13 - + L^4 t^5 X^7 Y^13 + L^5 t X^12 Y^13 + 2 L^5 t^2 X^12 Y^13 + + 3 L^5 t^3 X^12 Y^13 + 3 L^5 t^4 X^12 Y^13 + L^5 t^5 X^12 Y^13 + + L^4 t^3 X^6 Y^14 - L^4 t^5 X^6 Y^14 + L^5 t^2 X^11 Y^14 + + 2 L^5 t^3 X^11 Y^14 + 2 L^5 t^4 X^11 Y^14 + L^5 t^5 X^11 Y^14 + + L^5 t^4 X^10 Y^15 + L^5 t^5 X^10 Y^15++mcXLam[{2, 2, 1, 1}]++-t - t^2 + t^3 + t^4 + L t X^6 + L t^2 X^6 - L t^3 X^6 - L t^4 X^6 + + L X^5 Y + 2 L t X^5 Y + L t^2 X^5 Y - L t^3 X^5 Y - L t^4 X^5 Y - + L^2 t X^11 Y - L^2 t^2 X^11 Y + L^2 t^3 X^11 Y + L^2 t^4 X^11 Y + + 2 L t X^4 Y^2 + 2 L t^2 X^4 Y^2 - L t^3 X^4 Y^2 - L t^4 X^4 Y^2 - + L^2 X^10 Y^2 - 3 L^2 t X^10 Y^2 - 2 L^2 t^2 X^10 Y^2 + L^2 t^3 X^10 Y^2 + + L^2 t^4 X^10 Y^2 + L t X^3 Y^3 + L t^2 X^3 Y^3 - L t^3 X^3 Y^3 - + L t^4 X^3 Y^3 - 2 L^2 X^9 Y^3 - 7 L^2 t X^9 Y^3 - 6 L^2 t^2 X^9 Y^3 + + L^2 t^3 X^9 Y^3 + 2 L^2 t^4 X^9 Y^3 + L^3 t X^15 Y^3 + L^3 t^2 X^15 Y^3 - + L^3 t^3 X^15 Y^3 - L^3 t^4 X^15 Y^3 + 2 L t X^2 Y^4 + 2 L t^2 X^2 Y^4 - + L t^3 X^2 Y^4 - L t^4 X^2 Y^4 - 3 L^2 X^8 Y^4 - 11 L^2 t X^8 Y^4 - + 10 L^2 t^2 X^8 Y^4 + 2 L^2 t^4 X^8 Y^4 + L^3 X^14 Y^4 + 4 L^3 t X^14 Y^4 + + 3 L^3 t^2 X^14 Y^4 - L^3 t^3 X^14 Y^4 - L^3 t^4 X^14 Y^4 + L X Y^5 + + 2 L t X Y^5 + L t^2 X Y^5 - L t^3 X Y^5 - L t^4 X Y^5 - 5 L^2 X^7 Y^5 - + 15 L^2 t X^7 Y^5 - 13 L^2 t^2 X^7 Y^5 + 3 L^2 t^4 X^7 Y^5 + 3 L^3 X^13 Y^5 + + 11 L^3 t X^13 Y^5 + 11 L^3 t^2 X^13 Y^5 + L^3 t^3 X^13 Y^5 - + 2 L^3 t^4 X^13 Y^5 + L t Y^6 + L t^2 Y^6 - L t^3 Y^6 - L t^4 Y^6 - + 5 L^2 X^6 Y^6 - 16 L^2 t X^6 Y^6 - 14 L^2 t^2 X^6 Y^6 + 3 L^2 t^4 X^6 Y^6 + + 7 L^3 X^12 Y^6 + 21 L^3 t X^12 Y^6 + 19 L^3 t^2 X^12 Y^6 + + 3 L^3 t^3 X^12 Y^6 - 2 L^3 t^4 X^12 Y^6 - L^4 t X^18 Y^6 - L^4 t^2 X^18 Y^6 ++  L^4 t^3 X^18 Y^6 + L^4 t^4 X^18 Y^6 - 5 L^2 X^5 Y^7 - 15 L^2 t X^5 Y^7 - + 13 L^2 t^2 X^5 Y^7 + 3 L^2 t^4 X^5 Y^7 + 9 L^3 X^11 Y^7 + + 30 L^3 t X^11 Y^7 + 30 L^3 t^2 X^11 Y^7 + 6 L^3 t^3 X^11 Y^7 - + 3 L^3 t^4 X^11 Y^7 - L^4 X^17 Y^7 - 4 L^4 t X^17 Y^7 - 3 L^4 t^2 X^17 Y^7 + + L^4 t^3 X^17 Y^7 + L^4 t^4 X^17 Y^7 - 3 L^2 X^4 Y^8 - 11 L^2 t X^4 Y^8 - + 10 L^2 t^2 X^4 Y^8 + 2 L^2 t^4 X^4 Y^8 + 13 L^3 X^10 Y^8 + + 38 L^3 t X^10 Y^8 + 36 L^3 t^2 X^10 Y^8 + 9 L^3 t^3 X^10 Y^8 - + 2 L^3 t^4 X^10 Y^8 - 3 L^4 X^16 Y^8 - 10 L^4 t X^16 Y^8 - + 9 L^4 t^2 X^16 Y^8 + 2 L^4 t^4 X^16 Y^8 - 2 L^2 X^3 Y^9 - 7 L^2 t X^3 Y^9 - + 6 L^2 t^2 X^3 Y^9 + L^2 t^3 X^3 Y^9 + 2 L^2 t^4 X^3 Y^9 + 13 L^3 X^9 Y^9 + + 42 L^3 t X^9 Y^9 + 42 L^3 t^2 X^9 Y^9 + 10 L^3 t^3 X^9 Y^9 - + 3 L^3 t^4 X^9 Y^9 - 6 L^4 X^15 Y^9 - 18 L^4 t X^15 Y^9 - + 16 L^4 t^2 X^15 Y^9 - 2 L^4 t^3 X^15 Y^9 + 2 L^4 t^4 X^15 Y^9 - + L^2 X^2 Y^10 - 3 L^2 t X^2 Y^10 - 2 L^2 t^2 X^2 Y^10 + L^2 t^3 X^2 Y^10 + + L^2 t^4 X^2 Y^10 + 13 L^3 X^8 Y^10 + 38 L^3 t X^8 Y^10 + + 36 L^3 t^2 X^8 Y^10 + 9 L^3 t^3 X^8 Y^10 - 2 L^3 t^4 X^8 Y^10 - + 9 L^4 X^14 Y^10 - 27 L^4 t X^14 Y^10 - 24 L^4 t^2 X^14 Y^10 - + 3 L^4 t^3 X^14 Y^10 + 3 L^4 t^4 X^14 Y^10 - L^5 t^2 X^20 Y^10 - + 2 L^5 t^3 X^20 Y^10 - L^5 t^4 X^20 Y^10 - L^2 t X Y^11 - L^2 t^2 X Y^11 + + L^2 t^3 X Y^11 + L^2 t^4 X Y^11 + 9 L^3 X^7 Y^11 + 30 L^3 t X^7 Y^11 + + 30 L^3 t^2 X^7 Y^11 + 6 L^3 t^3 X^7 Y^11 - 3 L^3 t^4 X^7 Y^11 - + 11 L^4 X^13 Y^11 - 31 L^4 t X^13 Y^11 - 27 L^4 t^2 X^13 Y^11 - + 4 L^4 t^3 X^13 Y^11 + 3 L^4 t^4 X^13 Y^11 - 2 L^5 t X^19 Y^11 - + 6 L^5 t^2 X^19 Y^11 - 6 L^5 t^3 X^19 Y^11 - 2 L^5 t^4 X^19 Y^11 + + 7 L^3 X^6 Y^12 + 21 L^3 t X^6 Y^12 + 19 L^3 t^2 X^6 Y^12 + + 3 L^3 t^3 X^6 Y^12 - 2 L^3 t^4 X^6 Y^12 - 11 L^4 X^12 Y^12 - + 33 L^4 t X^12 Y^12 - 29 L^4 t^2 X^12 Y^12 - 3 L^4 t^3 X^12 Y^12 + + 4 L^4 t^4 X^12 Y^12 - L^5 X^18 Y^12 - 4 L^5 t X^18 Y^12 - + 9 L^5 t^2 X^18 Y^12 - 10 L^5 t^3 X^18 Y^12 - 4 L^5 t^4 X^18 Y^12 + + 3 L^3 X^5 Y^13 + 11 L^3 t X^5 Y^13 + 11 L^3 t^2 X^5 Y^13 + + L^3 t^3 X^5 Y^13 - 2 L^3 t^4 X^5 Y^13 - 11 L^4 X^11 Y^13 - + 31 L^4 t X^11 Y^13 - 27 L^4 t^2 X^11 Y^13 - 4 L^4 t^3 X^11 Y^13 + + 3 L^4 t^4 X^11 Y^13 - 3 L^5 t X^17 Y^13 - 11 L^5 t^2 X^17 Y^13 - + 12 L^5 t^3 X^17 Y^13 - 4 L^5 t^4 X^17 Y^13 + L^3 X^4 Y^14 + + 4 L^3 t X^4 Y^14 + 3 L^3 t^2 X^4 Y^14 - L^3 t^3 X^4 Y^14 - + L^3 t^4 X^4 Y^14 - 9 L^4 X^10 Y^14 - 27 L^4 t X^10 Y^14 - + 24 L^4 t^2 X^10 Y^14 - 3 L^4 t^3 X^10 Y^14 + 3 L^4 t^4 X^10 Y^14 + + L^5 X^16 Y^14 - 7 L^5 t^2 X^16 Y^14 - 11 L^5 t^3 X^16 Y^14 - + 5 L^5 t^4 X^16 Y^14 + L^3 t X^3 Y^15 + L^3 t^2 X^3 Y^15 - L^3 t^3 X^3 Y^15 - + L^3 t^4 X^3 Y^15 - 6 L^4 X^9 Y^15 - 18 L^4 t X^9 Y^15 - + 16 L^4 t^2 X^9 Y^15 - 2 L^4 t^3 X^9 Y^15 + 2 L^4 t^4 X^9 Y^15 + + 3 L^5 X^15 Y^15 + 3 L^5 t X^15 Y^15 - 7 L^5 t^2 X^15 Y^15 - + 11 L^5 t^3 X^15 Y^15 - 4 L^5 t^4 X^15 Y^15 + L^6 t X^21 Y^15 + + 3 L^6 t^2 X^21 Y^15 + 3 L^6 t^3 X^21 Y^15 + L^6 t^4 X^21 Y^15 - + 3 L^4 X^8 Y^16 - 10 L^4 t X^8 Y^16 - 9 L^4 t^2 X^8 Y^16 + + 2 L^4 t^4 X^8 Y^16 + L^5 X^14 Y^16 - 7 L^5 t^2 X^14 Y^16 - + 11 L^5 t^3 X^14 Y^16 - 5 L^5 t^4 X^14 Y^16 + L^6 X^20 Y^16 + + 7 L^6 t X^20 Y^16 + 12 L^6 t^2 X^20 Y^16 + 8 L^6 t^3 X^20 Y^16 + + 2 L^6 t^4 X^20 Y^16 - L^4 X^7 Y^17 - 4 L^4 t X^7 Y^17 - 3 L^4 t^2 X^7 Y^17 + + L^4 t^3 X^7 Y^17 + L^4 t^4 X^7 Y^17 - 3 L^5 t X^13 Y^17 - + 11 L^5 t^2 X^13 Y^17 - 12 L^5 t^3 X^13 Y^17 - 4 L^5 t^4 X^13 Y^17 + + 4 L^6 X^19 Y^17 + 13 L^6 t X^19 Y^17 + 19 L^6 t^2 X^19 Y^17 + + 14 L^6 t^3 X^19 Y^17 + 4 L^6 t^4 X^19 Y^17 - L^4 t X^6 Y^18 - + L^4 t^2 X^6 Y^18 + L^4 t^3 X^6 Y^18 + L^4 t^4 X^6 Y^18 - L^5 X^12 Y^18 - + 4 L^5 t X^12 Y^18 - 9 L^5 t^2 X^12 Y^18 - 10 L^5 t^3 X^12 Y^18 - + 4 L^5 t^4 X^12 Y^18 + 4 L^6 X^18 Y^18 + 16 L^6 t X^18 Y^18 + + 24 L^6 t^2 X^18 Y^18 + 16 L^6 t^3 X^18 Y^18 + 4 L^6 t^4 X^18 Y^18 - + 2 L^5 t X^11 Y^19 - 6 L^5 t^2 X^11 Y^19 - 6 L^5 t^3 X^11 Y^19 - + 2 L^5 t^4 X^11 Y^19 + 4 L^6 X^17 Y^19 + 13 L^6 t X^17 Y^19 + + 19 L^6 t^2 X^17 Y^19 + 14 L^6 t^3 X^17 Y^19 + 4 L^6 t^4 X^17 Y^19 - + L^5 t^2 X^10 Y^20 - 2 L^5 t^3 X^10 Y^20 - L^5 t^4 X^10 Y^20 + + L^6 X^16 Y^20 + 7 L^6 t X^16 Y^20 + 12 L^6 t^2 X^16 Y^20 + + 8 L^6 t^3 X^16 Y^20 + 2 L^6 t^4 X^16 Y^20 + L^6 t X^15 Y^21 + + 3 L^6 t^2 X^15 Y^21 + 3 L^6 t^3 X^15 Y^21 + L^6 t^4 X^15 Y^21+
+ mathematica/equivariant_CSM_via_motivic.nb view
@@ -0,0 +1,2195 @@+(* Content-type: application/vnd.wolfram.mathematica *)++(*** Wolfram Notebook File ***)+(* http://www.wolfram.com/nb *)++(* CreatedBy='Mathematica 9.0' *)++(*CacheID: 234*)+(* Internal cache information:+NotebookFileLineBreakTest+NotebookFileLineBreakTest+NotebookDataPosition[       157,          7]+NotebookDataLength[     79871,       2186]+NotebookOptionsPosition[     78389,       2136]+NotebookOutlinePosition[     78746,       2152]+CellTagsIndexPosition[     78703,       2149]+WindowFrame->Normal*)++(* Beginning of Notebook Content *)+Notebook[{++Cell[CellGroupData[{+Cell[BoxData[+ RowBox[{"\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{"===", +    RowBox[{"=", " ", +     RowBox[{+      RowBox[{+       RowBox[{+        RowBox[{"COMPUTE", " ", "THR", " ", "EQUIVARIANT", " ", "CHERN"}], +        "-", "SCHWARTZ", "-", +        RowBox[{+        "MACPHERSON", " ", "\[IndentingNewLine]", "CLASS", " ", "OF", " ", +         "COINCIDENT", " ", "ROOT", " ", "LOCI", " ", "VIA", " ", "THE", " ", +         "MOTIVIC", " ", "ALGORITHM"}]}], " ", "==="}], "="}]}]}], " ", +   "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"<<", "Combinatorica`"}], "\n", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"convention", ":", " ", "u"}], " ", "=", " ", +     RowBox[{+      RowBox[{"-", "c_"}], "1", +      RowBox[{"(", "L", ")"}], " ", "where", " ", "L", " ", "is", " ", "the", +      " ", "tautological", " ", "line", " ", "bundle", " ", "on", " ", +      RowBox[{"P", "^", "n"}]}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"uu", "[", "i_", "]"}], ":=", +    RowBox[{"Subscript", "[", +     RowBox[{"u", ",", "i"}], "]"}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"vv", "[", "i_", "]"}], ":=", +    RowBox[{"Subscript", "[", +     RowBox[{"u", ",", "i"}], "]"}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"ww", "[", "i_", "]"}], ":=", +    RowBox[{"Subscript", "[", +     RowBox[{"u", ",", "i"}], "]"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", +    RowBox[{+    "only", " ", "works", " ", "for", " ", "lists", " ", "of", " ", "equal", +     " ", +     RowBox[{"length", "!!"}]}], "*)"}], +   RowBox[{+    RowBox[{"Zip", "[", +     RowBox[{"as_", ",", "bs_"}], "]"}], ":=", +    RowBox[{"MapThread", "[", +     RowBox[{+      RowBox[{+       RowBox[{"{", +        RowBox[{"#1", ",", "#2"}], "}"}], "&"}], ",", +      RowBox[{"{", +       RowBox[{"as", ",", "bs"}], "}"}]}], "]"}]}], "\n", +   RowBox[{+    RowBox[{"Zip3", "[", +     RowBox[{"as_", ",", "bs_", ",", "cs_"}], "]"}], ":=", +    RowBox[{"MapThread", "[", +     RowBox[{+      RowBox[{+       RowBox[{"{", +        RowBox[{"#1", ",", "#2", ",", "#3"}], "}"}], "&"}], ",", +      RowBox[{"{", +       RowBox[{"as", ",", "bs", ",", "cs"}], "}"}]}], "]"}]}], "\n", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"Fst", "[", "pair_", "]"}], ":=", +    RowBox[{"pair", "[", +     RowBox[{"[", "1", "]"}], "]"}]}], "\n", +   RowBox[{+    RowBox[{"Snd", "[", "pair_", "]"}], ":=", +    RowBox[{"pair", "[", +     RowBox[{"[", "2", "]"}], "]"}]}], "\n", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"extendListWithZeros", "[", +     RowBox[{"L_", ",", "n_"}], "]"}], ":=", +    RowBox[{"Join", "[", +     RowBox[{"L", ",", +      RowBox[{"Table", "[", +       RowBox[{"0", ",", +        RowBox[{"{", +         RowBox[{"i", ",", "1", ",", +          RowBox[{"n", "-", +           RowBox[{"Length", "[", "L", "]"}]}]}], "}"}]}], "]"}]}], "]"}]}], +   "\n", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"SumList", "[", "L_", "]"}], ":=", +    RowBox[{"Sum", "[", +     RowBox[{"x", ",", +      RowBox[{"{", +       RowBox[{"x", ",", "L"}], "}"}]}], "]"}]}]}]}]], "Input",+ CellChangeTimes->{{3.799905685678034*^9, 3.799905717212275*^9}, {+  3.799913522600854*^9, 3.799913527152174*^9}, {3.7999135913325577`*^9, +  3.799913592101347*^9}, {3.8011372389408627`*^9, 3.8011373095459747`*^9}}],++Cell[BoxData[+ RowBox[{+  StyleBox[+   RowBox[{"General", "::", "compat"}], "MessageName"], +  RowBox[{+  ":", " "}], "\<\"Combinatorica Graph and Permutations functionality has \+been superseded by preloaded functionality. The package now being loaded may \+conflict with this. Please see the Compatibility Guide for details.\"\>"}]], \+"Message", "MSG",+ CellChangeTimes->{3.801137314352317*^9, 3.801137453501457*^9, +  3.8011377668896217`*^9, 3.8011379201269207`*^9}]+}, Open  ]],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 0.5}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 3}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{"EQUIVARIANT", " ", "COHOMOLOGY", " ", "RING", " ", "OF", " ", +     RowBox[{"P", "^", "n"}]}], " ", "==="}], " ", "*)"}], "\n", +  "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{"Weights", " ", "of", " ", +    RowBox[{"Sym", "^", "n"}], " ", +    RowBox[{"C", "^", "2"}]}], " ", "*)"}], "\[IndentingNewLine]", +  RowBox[{+   RowBox[{+    RowBox[{"wt", "[", +     RowBox[{"n_", ",", "i_"}], "]"}], ":=", +    RowBox[{+     RowBox[{+      RowBox[{"(", +       RowBox[{"n", "-", "i"}], ")"}], "*", "\[Alpha]"}], "+", +     RowBox[{"i", "*", "\[Beta]"}]}]}], "\[IndentingNewLine]", "\n", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"the", " ", "relation", " ", "in", " ", +      RowBox[{"H", "^"}], "*", +      RowBox[{+       RowBox[{"(", +        RowBox[{"P", "^", "n"}], ")"}], ".", " ", +       RowBox[{"Convention", ":", " ", "\[IndentingNewLine]", "u"}]}]}], " ", +     "=", " ", +     RowBox[{+      RowBox[{"-", "c1"}], +      RowBox[{"(", "L", ")"}], " ", "where", " ", "L", " ", "is", " ", "the", +      " ", "tautological", " ", "line", " ", "bundle"}]}], " ", "*)"}], +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"rel", "[", "n_", "]"}], ":=", +    RowBox[{"Product", "[", +     RowBox[{+      RowBox[{"u", "+", +       RowBox[{"wt", "[", +        RowBox[{"n", ",", "i"}], "]"}]}], ",", +      RowBox[{"{", +       RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], +   "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "upow$nplus1", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"upow$nplus1", "[", "n_", "]"}], " ", ":=", " ", +    RowBox[{+     RowBox[{"upow$nplus1", "[", "n", "]"}], "=", " ", +     RowBox[{"Expand", "[", +      RowBox[{+       RowBox[{"u", "^", +        RowBox[{"(", +         RowBox[{"n", "+", "1"}], ")"}]}], "-", +       RowBox[{"rel", "[", "n", "]"}]}], "]"}]}]}], "\n", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"(", "unefficiently", ")"}], " ", "normalize", " ", +     RowBox[{+      RowBox[{"a", " ", "/", "polynomial"}], "/", " ", "in"}], " ", "u"}], +    " ", "*)"}], " ", "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "normalizeSlow", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"normalizeSlow", "[", +     RowBox[{"n_", ",", " ", "X0_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"X", "=", +         RowBox[{"Expand", "[", "X0", "]"}]}], ",", "m"}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"m", "=", +        RowBox[{"Exponent", "[", +         RowBox[{"X", ",", "u"}], "]"}]}], ";", "\[IndentingNewLine]", +       RowBox[{"If", "[", +        RowBox[{+         RowBox[{"m", "\[LessEqual]", "n"}], ",", "X", ",", +         RowBox[{"normalizeSlow", "[", +          RowBox[{"n", ",", +           RowBox[{"X", "/.", +            RowBox[{"{", +             RowBox[{+              RowBox[{"u", "^", "m"}], "\[Rule]", +              RowBox[{+               RowBox[{"u", "^", +                RowBox[{"(", +                 RowBox[{"m", "-", "n", "-", "1"}], ")"}]}], "*", +               RowBox[{"upow$nplus1", "[", "n", "]"}]}]}], "}"}]}]}], "]"}]}],+         "]"}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+    "table", " ", "of", " ", "normalized", " ", "powers", " ", "of", " ", +     "u"}], " ", "*)"}], "\n", +   RowBox[{"Clear", "[", "UPowAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"UPowAB", "[", +     RowBox[{"n_", ",", "k_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"UPowAB", "[", +      RowBox[{"n", ",", "k"}], "]"}], " ", "=", " ", +     RowBox[{"Expand", "[", +      RowBox[{"normalizeSlow", "[", +       RowBox[{"n", ",", +        RowBox[{"u", "^", "k"}]}], "]"}], "]"}]}]}], "\[IndentingNewLine]", +   "\n", +   RowBox[{"Clear", "[", "normalizeVarAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"normalizeVarAB", "[", +     RowBox[{"n_", ",", "uuu_", ",", "X_"}], "]"}], ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{"m", "=", +        RowBox[{"Exponent", "[", +         RowBox[{"X", ",", "uuu"}], "]"}]}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{"Expand", "[", +       RowBox[{"Sum", "[", +        RowBox[{+         RowBox[{+          RowBox[{"Coefficient", "[", +           RowBox[{"X", ",", "uuu", ",", "k"}], "]"}], "*", +          RowBox[{"(", +           RowBox[{+            RowBox[{"UPowAB", "[", +             RowBox[{"n", ",", "k"}], "]"}], "/.", +            RowBox[{"{", +             RowBox[{"u", "\[Rule]", "uuu"}], "}"}]}], ")"}]}], ",", +         RowBox[{"{", +          RowBox[{"k", ",", "0", ",", "m"}], "}"}]}], "]"}], "]"}]}], +     "\[IndentingNewLine]", "]"}]}]}]}]], "Input",+ CellChangeTimes->{{3.799905722746293*^9, 3.799905732364284*^9}, {+  3.799913537797875*^9, 3.799913551058023*^9}, {3.8011373223183937`*^9, +  3.801137341966631*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{+    "pushforward", " ", "along", " ", "the", " ", "multiplication", " ", +     RowBox[{"(", +      RowBox[{"single", " ", "monom"}], ")"}]}], " ", "==="}], " ", "*)"}], +  "\n", "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+    RowBox[{"Psi_", "*", " ", +     RowBox[{"(", +      RowBox[{+       RowBox[{"u", "^", "k"}], " ", "*", " ", +       RowBox[{"v", "^", "l"}]}], ")"}]}], " ", "=", " ", +    RowBox[{"?", " ", +     RowBox[{"cohomology", " ", "indexing"}]}]}], " ", "*)"}], +  "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"Clear", "[", "psiStarAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"psiStarAB", "[", +     RowBox[{"n_", ",", "m_", ",", "0", ",", "0"}], "]"}], ":=", +    RowBox[{+     RowBox[{"psiStarAB", "[", +      RowBox[{"n", ",", "m", ",", "0", ",", "0"}], "]"}], "=", +     RowBox[{"Binomial", "[", +      RowBox[{+       RowBox[{"n", "+", "m"}], ",", "n"}], "]"}]}]}], "\[IndentingNewLine]", +   +   RowBox[{+    RowBox[{"psiStarAB", "[", +     RowBox[{"n_", ",", "m_", ",", "k_", ",", "l_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"psiStarAB", "[", +      RowBox[{"n", ",", "m", ",", "k", ",", "l"}], "]"}], " ", "=", " ", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{+        "A", ",", "B", ",", "AB", ",", "F", ",", "R", ",", "IJ", ",", "sel", +         ",", "fun", ",", "cft"}], "}"}], ",", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"A", "=", +         RowBox[{"Product", "[", +          RowBox[{+           RowBox[{"u", "+", +            RowBox[{"wt", "[", +             RowBox[{"n", ",", "i"}], "]"}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "0", ",", +             RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"B", "=", +         RowBox[{"Product", "[", +          RowBox[{+           RowBox[{"v", "+", +            RowBox[{"wt", "[", +             RowBox[{"m", ",", "j"}], "]"}]}], ",", +           RowBox[{"{", +            RowBox[{"j", ",", "0", ",", +             RowBox[{"l", "-", "1"}]}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"AB", " ", "=", +         RowBox[{"Expand", "[", +          RowBox[{"A", "*", "B"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"sel", "[", +          RowBox[{"{", +           RowBox[{"i_", ",", "j_"}], "}"}], "]"}], ":=", +         RowBox[{+          RowBox[{"(", +           RowBox[{"i", "<", "k"}], ")"}], " ", "||", " ", +          RowBox[{"(", +           RowBox[{"j", "<", "l"}], ")"}]}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"cft", "[", +          RowBox[{"{", +           RowBox[{"i_", ",", "j_"}], "}"}], "]"}], ":=", +         RowBox[{"Coefficient", "[", +          RowBox[{+           RowBox[{"Coefficient", "[", +            RowBox[{"AB", ",", "u", ",", "i"}], "]"}], ",", "v", ",", "j"}], +          "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"fun", "[", +          RowBox[{"{", +           RowBox[{"i_", ",", "j_"}], "}"}], "]"}], ":=", +         RowBox[{"psiStarAB", "[", +          RowBox[{"n", ",", "m", ",", "i", ",", "j"}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"IJ", " ", "=", " ", +         RowBox[{"Flatten", "[", +          RowBox[{+           RowBox[{"Table", "[", +            RowBox[{+             RowBox[{"{", +              RowBox[{"i", ",", "j"}], "}"}], ",", +             RowBox[{"{", +              RowBox[{"i", ",", "0", ",", "k"}], "}"}], ",", +             RowBox[{"{", +              RowBox[{"j", ",", "0", ",", "l"}], "}"}]}], "]"}], ",", "1"}], +          "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"IJ", " ", "=", +         RowBox[{"Select", "[", " ", +          RowBox[{"IJ", ",", "sel"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"(*", " ", +         RowBox[{+          RowBox[{"Print", "[", "IJ", "]"}], ";", "\[IndentingNewLine]", +          RowBox[{"Print", "[", "AB", "]"}], ";"}], " ", "*)"}], +        "\[IndentingNewLine]", +        RowBox[{"F", " ", "=", " ", +         RowBox[{+          RowBox[{"Binomial", "[", +           RowBox[{+            RowBox[{"n", "+", "m", "-", "k", "-", "l"}], ",", +            RowBox[{"n", "-", "k"}]}], "]"}], "*", +          RowBox[{"Product", "[", +           RowBox[{+            RowBox[{"w", "+", +             RowBox[{"wt", "[", +              RowBox[{+               RowBox[{"n", "+", "m"}], ",", "i"}], "]"}]}], ",", +            RowBox[{"{", +             RowBox[{"i", ",", "0", ",", +              RowBox[{"k", "+", "l", "-", "1"}]}], "}"}]}], "]"}]}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"R", " ", "=", +         RowBox[{"Sum", "[", " ", +          RowBox[{+           RowBox[{+            RowBox[{"cft", "[", "ij", "]"}], "*", +            RowBox[{"fun", "[", "ij", "]"}]}], ",", +           RowBox[{"{", +            RowBox[{"ij", ",", "IJ"}], "}"}]}], "]"}]}], ";", "  ", +        "\[IndentingNewLine]", +        RowBox[{"Expand", "[", +         RowBox[{"F", "-", "R"}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}],+    "\n", "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "psiStarChern", "]"}], "\n", +   RowBox[{+    RowBox[{"psiStarChern", "[", +     RowBox[{"n_", ",", "m_", ",", "k_", ",", "l_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"psiStarChern", "[", +      RowBox[{"n", ",", "m", ",", "k", ",", "l"}], "]"}], " ", "=", " ", +     "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"SymmetricReduction", "[", +       RowBox[{+        RowBox[{"psiStarAB", "[", +         RowBox[{"n", ",", "m", ",", "k", ",", "l"}], "]"}], ",", +        RowBox[{"{", +         RowBox[{"\[Alpha]", ",", "\[Beta]"}], "}"}], ",", +        RowBox[{"{", +         RowBox[{"c", ",", "d"}], "}"}]}], "]"}], "[", +      RowBox[{"[", "1", "]"}], "]"}]}]}], "\[IndentingNewLine]"}]}]], "Input",\++ CellChangeTimes->{{3.799905744141039*^9, 3.799905769496408*^9}, {+  3.7999135651971607`*^9, 3.79991357100387*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{"class", " ", "of", " ", "the", " ", "diagonal"}], " ", "==="}], +   " ", "*)"}], "\n", "\[IndentingNewLine]", +  RowBox[{+   RowBox[{+    RowBox[{"notk", "[", +     RowBox[{"n_", ",", "k_"}], "]"}], ":=", +    RowBox[{"Select", "[", +     RowBox[{+      RowBox[{"Table", "[", +       RowBox[{"i", ",", +        RowBox[{"{", +         RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}], ",", +      RowBox[{+       RowBox[{"#", "\[NotEqual]", "k"}], "&"}]}], "]"}]}], +   "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"class", " ", "of", " ", "the", " ", "diagonal", " ", "in", " ", +     RowBox[{"P", "^", "n"}], " ", "x", " ", +     RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "deltaClassAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaClassAB", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"deltaClassAB", "[", "n", "]"}], " ", "=", "\[IndentingNewLine]", +     RowBox[{"Expand", "[", +      RowBox[{"Factor", "[", +       RowBox[{"Sum", "[", " ", +        RowBox[{+         RowBox[{"Product", "[", +          RowBox[{+           RowBox[{+            RowBox[{"(", +             RowBox[{"v", "+", +              RowBox[{"wt", "[", +               RowBox[{"n", ",", "i"}], "]"}]}], ")"}], +            RowBox[{+             RowBox[{"(", +              RowBox[{"w", "+", +               RowBox[{"wt", "[", +                RowBox[{"n", ",", "i"}], "]"}]}], ")"}], "/", +             RowBox[{"(", +              RowBox[{+               RowBox[{"wt", "[", +                RowBox[{"n", ",", "i"}], "]"}], "-", +               RowBox[{"wt", "[", +                RowBox[{"n", ",", "k"}], "]"}]}], ")"}]}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", +             RowBox[{"notk", "[", +              RowBox[{"n", ",", "k"}], "]"}]}], "}"}]}], "]"}], ",", +         RowBox[{"{", +          RowBox[{"k", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}], "]"}]}]}],+    "\[IndentingNewLine]", "\n", +   RowBox[{"Clear", "[", "deltaClassCh", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaClassCh", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"deltaClassCh", "[", "n", "]"}], " ", "=", "\[IndentingNewLine]", +     RowBox[{"Expand", "[", +      RowBox[{+       RowBox[{"SymmetricReduction", "[", +        RowBox[{+         RowBox[{"deltaClassAB", "[", "n", "]"}], ",", +         RowBox[{"{", +          RowBox[{"\[Alpha]", ",", "\[Beta]"}], "}"}], ",", +         RowBox[{"{", +          RowBox[{"c", ",", "d"}], "}"}]}], "]"}], "[", +       RowBox[{"[", "1", "]"}], "]"}], "]"}]}]}], "\[IndentingNewLine]", "\n", +   RowBox[{"(*", " ", +    RowBox[{"small", " ", "diagonal", " ", "in", " ", +     RowBox[{"P", "^", "n"}], " ", "x", " ", +     RowBox[{"P", "^", "n"}], " ", "x", " ", +     RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaClassTri", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"deltaClassTri", "[", "n", "]"}], " ", "=", +     "\[IndentingNewLine]", +     RowBox[{"Expand", "[", +      RowBox[{"Factor", "[", +       RowBox[{"Sum", "[", " ", +        RowBox[{+         RowBox[{"Product", "[", +          RowBox[{+           RowBox[{+            RowBox[{"(", +             RowBox[{+              RowBox[{"uu", "[", "1", "]"}], "+", +              RowBox[{"wt", "[", +               RowBox[{"n", ",", "i"}], "]"}]}], ")"}], +            RowBox[{"(", +             RowBox[{+              RowBox[{"uu", "[", "2", "]"}], "+", +              RowBox[{"wt", "[", +               RowBox[{"n", ",", "i"}], "]"}]}], ")"}], +            RowBox[{+             RowBox[{"(", +              RowBox[{+               RowBox[{"uu", "[", "3", "]"}], "+", +               RowBox[{"wt", "[", +                RowBox[{"n", ",", "i"}], "]"}]}], ")"}], "/", +             RowBox[{"(", +              RowBox[{+               RowBox[{"wt", "[", +                RowBox[{"n", ",", "i"}], "]"}], "-", +               RowBox[{"wt", "[", +                RowBox[{"n", ",", "k"}], "]"}]}], ")"}]}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", +             RowBox[{"notk", "[", +              RowBox[{"n", ",", "k"}], "]"}]}], "}"}]}], "]"}], ",", +         RowBox[{"{", +          RowBox[{"k", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}], +      "]"}]}]}]}]}]], "Input",+ CellChangeTimes->{{3.799905776542532*^9, 3.799905781984827*^9}, {+   3.7999136010678368`*^9, 3.799913629960795*^9}, {3.7999137031951857`*^9, +   3.799913712604754*^9}, 3.80113777875804*^9}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 0.5}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 3}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{+    "pushforward", " ", "along", " ", "the", " ", "diagonal", " ", "map", " ", +     RowBox[{"(", +      RowBox[{"single", " ", "monom"}], ")"}]}], " ", "==="}], " ", "*)"}], +  "\n", "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+    RowBox[{"pushforward", " ", "of", " ", +     RowBox[{"u", "^", "k"}], " ", "along", " ", +     RowBox[{"Delta", " ", ":", " ", +      RowBox[{"P", "^", "n"}]}]}], " ", "\[Rule]", " ", +    RowBox[{+     RowBox[{"P", "^", "n"}], " ", "x", " ", +     RowBox[{"P", "^", "n"}]}]}], " ", "*)"}], "\[IndentingNewLine]", +  RowBox[{+   RowBox[{"Clear", "[", "deltaStarAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaStarAB", "[", +     RowBox[{"n_", ",", "0"}], "]"}], "  ", ":=", " ", +    RowBox[{+     RowBox[{"deltaStarAB", "[", +      RowBox[{"n", ",", "0"}], "]"}], " ", "=", " ", +     RowBox[{"deltaClassAB", "[", "n", "]"}]}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaStarAB", "[", +     RowBox[{"n_", ",", "k_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"deltaStarAB", "[", +      RowBox[{"n", ",", "k"}], "]"}], "=", " ", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{"prod", ",", "Y", ",", "preY", ",", "Delta", ",", "rest"}], +        "}"}], ",", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"Y", " ", "=", " ", +         RowBox[{"Expand", "[", +          RowBox[{"Product", "[", +           RowBox[{+            RowBox[{"v", "+", +             RowBox[{"wt", "[", +              RowBox[{"n", ",", "i"}], "]"}]}], ",", +            RowBox[{"{", +             RowBox[{"i", ",", "0", ",", +              RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"preY", " ", "=", " ", +         RowBox[{"Y", "/.", +          RowBox[{"{", +           RowBox[{"v", "\[Rule]", "u"}], "}"}]}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"Delta", " ", "=", " ", +         RowBox[{"deltaClassAB", "[", "n", "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"prod", "=", +         RowBox[{"normalizeVarAB", "[", +          RowBox[{"n", ",", "v", ",", +           RowBox[{"Y", "*", "Delta"}]}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"rest", "=", " ", +         RowBox[{"Sum", "[", +          RowBox[{+           RowBox[{+            RowBox[{"Coefficient", "[", +             RowBox[{"preY", ",", "u", ",", "i"}], "]"}], "*", +            RowBox[{"deltaStarAB", "[", +             RowBox[{"n", ",", "i"}], "]"}]}], ",", "  ", +           RowBox[{"{", +            RowBox[{"i", ",", "0", ",", +             RowBox[{"k", "-", "1"}]}], "}"}]}], " ", "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"Expand", "[", " ", +         RowBox[{"prod", " ", "-", " ", "rest"}], "]"}]}]}], +      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", "\n", +   RowBox[{"Clear", "[", "deltaStarCh", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaStarCh", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"deltaStarCh", "[", "n", "]"}], " ", "=", "\[IndentingNewLine]", +     +     RowBox[{"Expand", "[", +      RowBox[{+       RowBox[{"SymmetricReduction", "[", +        RowBox[{+         RowBox[{"deltaStarAB", "[", "n", "]"}], ",", +         RowBox[{"{", +          RowBox[{"\[Alpha]", ",", "\[Beta]"}], "}"}], ",", +         RowBox[{"{", +          RowBox[{"c", ",", "d"}], "}"}]}], "]"}], "[", +       RowBox[{"[", "1", "]"}], "]"}], "]"}]}]}], +   "\[IndentingNewLine]"}]}]], "Input",+ CellChangeTimes->{{3.799905799813909*^9, 3.79990583862068*^9}, {+  3.79991365241033*^9, 3.7999136977381983`*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{"pushforwards", " ", "for", " ", "polynomials", " ", +     RowBox[{"(", +      RowBox[{"not", " ", "just", " ", "single", " ", "monoms"}], ")"}]}], +    " ", "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{+   RowBox[{+    RowBox[{"delta2", "[", +     RowBox[{"n_", ",", "uuu_", ",", +      RowBox[{"{", +       RowBox[{"vvv_", ",", "www_"}], "}"}], ",", "X0_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{"X", "=", +        RowBox[{"Expand", "[", "X0", "]"}]}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{"Sum", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Coefficient", "[", +          RowBox[{"X", ",", "uuu", ",", "i"}], "]"}], "*", +         RowBox[{"(", +          RowBox[{+           RowBox[{"deltaStarAB", "[", +            RowBox[{"n", ",", "i"}], "]"}], "/.", +           RowBox[{"{", +            RowBox[{+             RowBox[{"v", "\[Rule]", "vvv"}], ",", +             RowBox[{"w", "\[Rule]", "www"}]}], "}"}]}], ")"}]}], " ", ",", +        RowBox[{"{", +         RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], +     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"deltaMany", "[", +     RowBox[{"n_", ",", "uuu_", ",", "vvvs_", ",", "X_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", "ttt", "}"}], ",", "\[IndentingNewLine]", +      RowBox[{"If", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "1"}], ",", +        RowBox[{"X", "/.", +         RowBox[{"{", +          RowBox[{"uuu", "\[Rule]", +           RowBox[{+           "vvvs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], +          "}"}]}], ",", "\[IndentingNewLine]", +        RowBox[{"If", "[", +         RowBox[{+          RowBox[{+           RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "2"}], ",", +          RowBox[{"delta2", "[", +           RowBox[{"n", ",", "uuu", ",", "vvvs", ",", "X"}], "]"}], ",", +          "\[IndentingNewLine]", +          RowBox[{"deltaMany", "[", +           RowBox[{"n", ",", "ttt", ",", +            RowBox[{"Drop", "[", +             RowBox[{"vvvs", ",", "1"}], "]"}], ",", " ", +            RowBox[{"delta2", "[", +             RowBox[{"n", ",", "uuu", ",", +              RowBox[{"{", +               RowBox[{+                RowBox[{+                "vvvs", "\[LeftDoubleBracket]", "1", +                 "\[RightDoubleBracket]"}], ",", "ttt"}], "}"}], ",", "X"}], +             "]"}]}], "]"}]}], "]"}]}], "]"}]}], "]"}]}], +   "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"psi2", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{"n1_", ",", "n2_"}], "}"}], ",", +      RowBox[{"{", +       RowBox[{"uuu_", ",", "vvv_"}], "}"}], ",", "www_", ",", "X0_"}], "]"}],+     ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{"X", "=", +        RowBox[{"Expand", "[", "X0", "]"}]}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{"Sum", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Coefficient", "[", +          RowBox[{+           RowBox[{"Coefficient", "[", +            RowBox[{"X", ",", "uuu", ",", "i"}], "]"}], ",", "vvv", ",", +           "j"}], "]"}], "*", +         RowBox[{"(", +          RowBox[{+           RowBox[{"psiStarAB", "[", +            RowBox[{"n1", ",", "n2", ",", "i", ",", "j"}], "]"}], "/.", +           RowBox[{"{", +            RowBox[{"w", "\[Rule]", "www"}], "}"}]}], ")"}]}], " ", ",", +        RowBox[{"{", +         RowBox[{"i", ",", "0", ",", "n1"}], "}"}], ",", +        RowBox[{"{", +         RowBox[{"j", ",", "0", ",", "n2"}], "}"}]}], "]"}]}], +     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"psiMany", "[", +     RowBox[{"ns_", ",", "uuus_", ",", "www_", ",", "X_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{"ttt", ",", "vvvs", ",", "ms"}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{"If", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "1"}], ",", +        RowBox[{"X", "/.", +         RowBox[{"{", +          RowBox[{+           RowBox[{+           "uuus", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], +           "\[Rule]", "www"}], "}"}]}], ",", "\[IndentingNewLine]", +        RowBox[{"If", "[", +         RowBox[{+          RowBox[{+           RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "2"}], ",", +          RowBox[{"psi2", "[", +           RowBox[{"ns", ",", "uuus", ",", "www", ",", "X"}], "]"}], ",", +          "\[IndentingNewLine]", +          RowBox[{+           RowBox[{"ms", "=", +            RowBox[{"Join", "[", +             RowBox[{+              RowBox[{"{", +               RowBox[{+                RowBox[{+                "ns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], +                "+", +                RowBox[{+                "ns", "\[LeftDoubleBracket]", "2", +                 "\[RightDoubleBracket]"}]}], "}"}], ",", +              RowBox[{"Drop", "[", +               RowBox[{"ns", ",", "2"}], "]"}]}], "]"}]}], ";", +           "\[IndentingNewLine]", +           RowBox[{"vvvs", "=", +            RowBox[{"Join", "[", +             RowBox[{+              RowBox[{"{", "ttt", "}"}], ",", +              RowBox[{"Drop", "[", +               RowBox[{"uuus", ",", "2"}], "]"}]}], "]"}]}], ";", +           "\[IndentingNewLine]", +           RowBox[{"psiMany", "[", +            RowBox[{"ms", ",", "vvvs", ",", "www", ",", " ", +             RowBox[{"psi2", "[", +              RowBox[{+               RowBox[{"Take", "[", +                RowBox[{"ns", ",", "2"}], "]"}], ",", +               RowBox[{"Take", "[", +                RowBox[{"uuus", ",", "2"}], "]"}], ",", "ttt", ",", "X"}], +              "]"}]}], "]"}]}]}], "]"}]}], "]"}]}], "]"}]}]}]}]], "Input",+ CellChangeTimes->{{3.799667476439917*^9, 3.7996677149825773`*^9}, {+  3.7996677601261387`*^9, 3.799667786948341*^9}, {3.79966786245846*^9, +  3.799667910243636*^9}, {3.801137629197691*^9, 3.801137675043544*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 0.5}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 3}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{+    "pushforward", " ", "along", " ", "the", " ", "power", " ", "map"}], " ", +    "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{"(*", " ", +   RowBox[{+   "compute", " ", "the", " ", "pushforward", " ", "by", " ", "composing", +    " ", "the", " ", "diagonal", " ", "with", " ", "the", " ", "merging", " ",+     "map"}], " ", "*)"}], "\n", +  RowBox[{+   RowBox[{"Clear", "[", "slowOmegaAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"slowOmegaAB", "[", +     RowBox[{"n_", ",", "d_", ",", "k_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"slowOmegaAB", "[", +      RowBox[{"n", ",", "d", ",", "k"}], "]"}], "=", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{+         RowBox[{"vars", "=", +          RowBox[{"Table", "[", +           RowBox[{+            RowBox[{"Subscript", "[", +             RowBox[{"ttt", ",", "i"}], "]"}], ",", +            RowBox[{"{", +             RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", +         "\[IndentingNewLine]", +         RowBox[{"dims", "=", +          RowBox[{"Table", "[", +           RowBox[{"n", ",", +            RowBox[{"{", +             RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}]}], "}"}], +       ",", "\[IndentingNewLine]", +       RowBox[{"Factor", "[", +        RowBox[{"psiMany", "[", +         RowBox[{"dims", ",", "vars", ",", "u", ",", +          RowBox[{"deltaMany", "[", +           RowBox[{"n", ",", "u", ",", "vars", ",", +            RowBox[{"u", "^", "k"}]}], "]"}]}], "]"}], "]"}]}], +      "\[IndentingNewLine]", "]"}]}]}], "\n", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"d", "-", +      RowBox[{"th", " ", "power", " ", "of", " ", +       RowBox[{"u", "^", +        RowBox[{"k", " ", ":", " ", +         RowBox[{"P", "^", "n"}]}]}]}]}], " ", "\[Rule]", " ", +     RowBox[{"P", "^", +      RowBox[{"(", +       RowBox[{"n", "*", "d"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"NOTE", ":", " ", +     RowBox[{+      RowBox[{+      "this", " ", "formula", " ", "is", " ", "valid", " ", "for", " ", "k"}],+       ">", +      RowBox[{+       RowBox[{"n", " ", +        RowBox[{"too", "!"}], " ", "\[IndentingNewLine]", "you", " ", "can", +        " ", "experimentally", " ", "check", " ", "this", " ", +        "\[IndentingNewLine]", "by", " ", "pre"}], "-", +       RowBox[{"normalizing", " ", "and", " ", "post"}], "-", +       "normalizing"}]}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "omegaAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"omegaAB", "[", +     RowBox[{"n_", ",", "d_", ",", "k_"}], "]"}], ":=", "\[IndentingNewLine]", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{"idxs", "=", " ", +        RowBox[{"Select", "[", +         RowBox[{+          RowBox[{"Table", "[", +           RowBox[{"i", ",", +            RowBox[{"{", +             RowBox[{"i", ",", "0", ",", +              RowBox[{"n", "*", "d"}]}], "}"}]}], "]"}], ",", +          RowBox[{+           RowBox[{"Not", "[", +            RowBox[{"Divisible", "[", +             RowBox[{"#", ",", "d"}], "]"}], "]"}], "&"}]}], "]"}]}], "}"}], +      "\[IndentingNewLine]", ",", +      RowBox[{+       RowBox[{"u", "^", "k"}], "*", +       RowBox[{"d", "^", +        RowBox[{"(", +         RowBox[{"n", "-", "k"}], ")"}]}], "*", +       RowBox[{"Product", "[", +        RowBox[{+         RowBox[{"u", "+", +          RowBox[{+           RowBox[{"(", +            RowBox[{+             RowBox[{"n", "*", "d"}], "-", "i"}], ")"}], "*", "\[Alpha]"}], +          "+", +          RowBox[{"i", "*", "\[Beta]"}]}], ",", +         RowBox[{"{", +          RowBox[{"i", ",", "idxs"}], "}"}]}], "]"}]}]}], +     "\[IndentingNewLine]", "]"}]}], "\n", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{+      RowBox[{"pushforward", " ", "along", " ", "d"}], "-", +      RowBox[{"th", " ", +       RowBox[{"power", " ", ":", " ", +        RowBox[{"P", "^", "n"}]}]}]}], " ", "\[Rule]", " ", +     RowBox[{"P", "^", +      RowBox[{"(", +       RowBox[{"n", "*", "d"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"omega1", "[", +     RowBox[{"n_", ",", "d_", ",", "uuu_", ",", "www_", ",", "X0_"}], "]"}], ":=", +    RowBox[{"Module", "[", +     RowBox[{+      RowBox[{"{", +       RowBox[{"X", "=", +        RowBox[{"Expand", "[", "X0", "]"}]}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{"Sum", "[", +       RowBox[{+        RowBox[{+         RowBox[{"Coefficient", "[", +          RowBox[{"X", ",", "uuu", ",", "i"}], "]"}], "*", +         RowBox[{"(", +          RowBox[{+           RowBox[{"omegaAB", "[", +            RowBox[{"n", ",", "d", ",", "i"}], "]"}], "/.", +           RowBox[{"{", +            RowBox[{"u", "\[Rule]", "www"}], "}"}]}], ")"}]}], " ", ",", +        RowBox[{"{", +         RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], +     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "\n", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{+      RowBox[{"P", "^", "n1"}], " ", "x", " ", +      RowBox[{"P", "^", "n2"}], " ", "x", " ", +      RowBox[{"P", "^", "n3"}]}], " ", "\[Rule]", " ", +     RowBox[{+      RowBox[{+       RowBox[{"P", "^", +        RowBox[{"(", +         RowBox[{"d1", "*", "n1"}], ")"}]}], " ", "x", " ", +       RowBox[{"P", "^", +        RowBox[{"(", +         RowBox[{"d2", "*", "n2"}], ")"}]}], " ", "x", " ", +       RowBox[{"P", "^", +        RowBox[{"(", +         RowBox[{"d3", "*", "n3"}], ")"}]}]}], " ", "\[Rule]", " ", +      RowBox[{"P", "^", +       RowBox[{"(", +        RowBox[{+         RowBox[{"d1", "*", "n1"}], " ", "+", " ", +         RowBox[{"d2", "*", "n2"}], " ", "+", " ", +         RowBox[{"d3", "*", "n3"}]}], " "}]}]}]}], "*)"}], " ", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"omegaLam", "[", +     RowBox[{"ns_", ",", "ds_", ",", "uuus_", ",", "www_", ",", "X0_"}], +     "]"}], ":=", +    RowBox[{"Module", "[", "\[IndentingNewLine]", +     RowBox[{+      RowBox[{"{", +       RowBox[{+        RowBox[{"X", "=", +         RowBox[{"Expand", "[", "X0", "]"}]}], ",", "\[IndentingNewLine]", +        RowBox[{"m", " ", "=", " ", +         RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", +        "vars", ",", "Y", ",", "nds", ",", "ttt", ",", "i"}], "}"}], ",", +      "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"vars", "=", +        RowBox[{"Table", "[", +         RowBox[{+          RowBox[{"Subscript", "[", +           RowBox[{"ttt", ",", "i"}], "]"}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"nds", "=", +        RowBox[{"Table", "[", " ", +         RowBox[{+          RowBox[{+           RowBox[{"ns", "[", +            RowBox[{"[", "i", "]"}], "]"}], "*", +           RowBox[{"ds", "[", +            RowBox[{"[", "i", "]"}], "]"}]}], ",", " ", +          RowBox[{"{", +           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +       "\[IndentingNewLine]", +       RowBox[{"Y", "=", "X"}], ";", "\[IndentingNewLine]", +       RowBox[{"For", "[", +        RowBox[{+         RowBox[{"i", "=", "1"}], ",", +         RowBox[{"i", "\[LessEqual]", "m"}], ",", +         RowBox[{"i", "++"}], ",", +         RowBox[{"Y", "=", +          RowBox[{"omega1", "[", +           RowBox[{+            RowBox[{"ns", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", +            RowBox[{"ds", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", +            RowBox[{"uuus", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", +            RowBox[{"vars", "[", +             RowBox[{"[", "i", "]"}], "]"}], ",", "Y"}], "]"}]}]}], "]"}], +       ";", "\[IndentingNewLine]", +       RowBox[{"psiMany", "[", +        RowBox[{"nds", ",", "vars", ",", "www", ",", "Y"}], "]"}]}]}], +     "\[IndentingNewLine]", "]"}]}]}]}]], "Input",+ CellChangeTimes->{{3.7999058649845*^9, 3.7999058698453217`*^9}, {+  3.799913868197979*^9, 3.7999139371723003`*^9}, {3.8008792882621317`*^9, +  3.8008792885238028`*^9}, {3.80113759876646*^9, 3.801137620241535*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[BoxData[+ RowBox[{+  RowBox[{"(*", " ", +   RowBox[{"===", " ", +    RowBox[{"EQUIVARIANT", " ", "CSM", " ", "CLASS"}], " ", "==="}], " ", +   "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", +  RowBox[{+   RowBox[{+    RowBox[{"uus", "[", "n_", "]"}], ":=", +    RowBox[{"Table", "[", +     RowBox[{+      RowBox[{"uu", "[", "i", "]"}], ",", +      RowBox[{"{", +       RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], "]"}]}], +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"vvs", "[", "n_", "]"}], ":=", +    RowBox[{"Table", "[", +     RowBox[{+      RowBox[{"vv", "[", "i", "]"}], ",", +      RowBox[{"{", +       RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], "]"}]}], +   "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"total", " ", "chern", " ", "class", " ", "of", " ", +     RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "chernPnAB", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"chernPnAB", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"chernPnAB", "[", "n", "]"}], "=", +     RowBox[{"normalizeVarAB", "[", +      RowBox[{"n", ",", "u", ",", "\[IndentingNewLine]", +       RowBox[{"Expand", "[", +        RowBox[{"Product", "[", +         RowBox[{+          RowBox[{"1", "+", "u", "+", +           RowBox[{"wt", "[", +            RowBox[{"n", ",", "i"}], "]"}]}], ",", +          RowBox[{"{", +           RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}]}], +      "]"}]}]}], "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"chernPnABVar", "[", +     RowBox[{"n_", ",", "uuu_"}], "]"}], ":=", +    RowBox[{+     RowBox[{"chernPnAB", "[", "n", "]"}], "/.", +     RowBox[{"{", +      RowBox[{"u", "\[Rule]", "uuu"}], "}"}]}]}]}]}]], "Input",+ CellChangeTimes->{{3.7999058758298073`*^9, 3.799905884427569*^9}, {+  3.801137947291946*^9, 3.801137966294516*^9}}],++Cell[BoxData[{+ RowBox[{+  RowBox[{+   RowBox[{"EmptyPartQ", "[", "part_", "]"}], ":=", +   RowBox[{+    RowBox[{"Length", "[", "part", "]"}], "\[Equal]", "0"}]}], +  "\n"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"DualPart", "[", +   RowBox[{"{", "}"}], "]"}], ":=", +  RowBox[{"{", "}"}]}], "\n", + RowBox[{+  RowBox[{+   RowBox[{"DualPart", "[", "lam_", "]"}], ":=", +   RowBox[{"With", "[", +    RowBox[{+     RowBox[{"{", +      RowBox[{"m", "=", +       RowBox[{"lam", "[", +        RowBox[{"[", "1", "]"}], "]"}]}], "}"}], ",", +     RowBox[{"Table", "[", +      RowBox[{+       RowBox[{"Length", "[", +        RowBox[{"Select", "[", +         RowBox[{"lam", ",", +          RowBox[{+           RowBox[{"#", "\[GreaterEqual]", "i"}], "&"}]}], "]"}], "]"}], ",", +       +       RowBox[{"{", +        RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], "]"}]}], +  "\[IndentingNewLine]", " "}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"toExpoForm", "[", +    RowBox[{"{", "}"}], "]"}], ":=", +   RowBox[{"{", "}"}]}], " "}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"toExpoForm", "[", "part_", "]"}], ":=", +   RowBox[{"Module", "[", +    RowBox[{+     RowBox[{"{", +      RowBox[{"k", "=", +       RowBox[{"Max", "[", "part", "]"}]}], "}"}], ",", +     RowBox[{"Table", "[", +      RowBox[{+       RowBox[{"Length", "[", +        RowBox[{"Select", "[", +         RowBox[{"part", ",", +          RowBox[{+           RowBox[{"#", "\[Equal]", "j"}], "&"}]}], "]"}], "]"}], ",", +       RowBox[{"{", +        RowBox[{"j", ",", "1", ",", "k"}], "}"}]}], "]"}]}], "]"}]}], +  "\[IndentingNewLine]"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{+   RowBox[{"posVectorQ", "[", "as_", "]"}], ":=", +   RowBox[{+    RowBox[{"Map", "[", +     RowBox[{+      RowBox[{+       RowBox[{"#", "\[GreaterEqual]", "0"}], "&"}], ",", "as"}], "]"}], "/.", +    RowBox[{"{", +     RowBox[{"List", "\[Rule]", "And"}], "}"}]}]}], +  ";"}], "\[IndentingNewLine]", + RowBox[{+  RowBox[{"kdeTriples", "[", +   RowBox[{"p_", ",", "ns_"}], "]"}], ":=", +  RowBox[{"Module", "[", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"{", +     RowBox[{+      RowBox[{"m", " ", "=", " ", +       RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", +      "posQ", ",", "oneK", ",", "A"}], "}"}], ",", "\[IndentingNewLine]", +    RowBox[{+     RowBox[{+      RowBox[{"oneK", "[", "k_", "]"}], ":=", +      RowBox[{"Table", "[", +       RowBox[{+        RowBox[{"{", +         RowBox[{"k", ",", +          RowBox[{"ns", "-", "es"}], ",", "es"}], "}"}], ",", +        RowBox[{"{", +         RowBox[{"es", ",", +          RowBox[{"Combinatorica`Compositions", "[", +           RowBox[{+            RowBox[{"p", "-", "k"}], ",", "m"}], "]"}]}], "}"}]}], "]"}]}], +     ";", "\[IndentingNewLine]", +     RowBox[{"A", "=", +      RowBox[{"Table", " ", "[", +       RowBox[{+        RowBox[{"oneK", "[", "k", "]"}], ",", +        RowBox[{"{", +         RowBox[{"k", ",", "0", ",", +          RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}], ";", +     "\[IndentingNewLine]", +     RowBox[{"A", "=", +      RowBox[{"Select", "[", +       RowBox[{+        RowBox[{"Flatten", "[", +         RowBox[{"A", ",", "1"}], "]"}], ",", +        RowBox[{+         RowBox[{"posVectorQ", "[", +          RowBox[{"Snd", "[", "#", "]"}], "]"}], "&"}]}], "]"}]}], ";", +     "\[IndentingNewLine]", "A"}]}], "]"}]}], "\[IndentingNewLine]"}], "Input",\++ CellChangeTimes->{{3.799903570801889*^9, 3.799903621715088*^9}, {+  3.801138022561639*^9, 3.80113802310922*^9}}],++Cell[BoxData[+ RowBox[{"\[IndentingNewLine]", +  RowBox[{+   RowBox[{"Clear", "[", +    RowBox[{+    "csmXLam", ",", "csmDisj1", ",", "csmDisj", ",", "csmDisjSorted"}], "]"}],+    "\[IndentingNewLine]", "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmXLam", "[", +     RowBox[{"{", "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"csmXLam", "[", +      RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmXLam", "[", +     RowBox[{"{", "1", "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"csmXLam", "[", +      RowBox[{"{", "1", "}"}], "]"}], "=", +     RowBox[{"chernPnAB", "[", "1", "]"}]}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisj1", "[", "0", "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisj1", "[", "0", "]"}], "=", "1"}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisj1", "[", "1", "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisj1", "[", "1", "]"}], "=", +     RowBox[{"chernPnAB", "[", "1", "]"}]}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisj", "[", +     RowBox[{"{", "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisj", "[", +      RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisjSorted", "[", +     RowBox[{"{", "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisjSorted", "[", +      RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"equiv", " ", "CSM", " ", "of", " ", "D", +     RowBox[{"(", "n", ")"}]}], " ", "*)"}], "\n", +   RowBox[{+    RowBox[{"csmDisj1", "[", "n_", "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisj1", "[", "n", "]"}], "=", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{"parts", "=", +         RowBox[{"Select", "[", +          RowBox[{+           RowBox[{"Combinatorica`Partitions", "[", "n", "]"}], ",", +           RowBox[{+            RowBox[{+             RowBox[{"Length", "[", "#", "]"}], "<", "n"}], "&"}]}], "]"}]}], +        "}"}], ",", "\[IndentingNewLine]", +       RowBox[{"Expand", "[", +        RowBox[{+         RowBox[{"chernPnAB", "[", "n", "]"}], "-", +         RowBox[{"Sum", "[", +          RowBox[{+           RowBox[{"csmXLam", "[", "p", "]"}], ",", +           RowBox[{"{", +            RowBox[{"p", ",", "parts"}], "}"}]}], "]"}]}], "]"}]}], +      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", "\n", +   RowBox[{"(*", " ", +    RowBox[{"equiv", " ", "CSM", " ", "of", " ", "X_lambda"}], " ", "*)"}], +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmXLam", "[", "lambda_", "]"}], ":=", +    RowBox[{+     RowBox[{"csmXLam", "[", "lambda", "]"}], "=", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{+         RowBox[{"es", " ", "=", " ", +          RowBox[{"toExpoForm", "[", "lambda", "]"}]}], ",", "m", ",", "m1", +         ",", "ns", ",", "pairs", ",", "X"}], "}"}], ",", +       "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"m", "=", +         RowBox[{"Length", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"ns", " ", "=", " ", +         RowBox[{"Range", "[", "m", "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"pairs", " ", "=", " ", +         RowBox[{"Zip", "[", +          RowBox[{"ns", ",", "es"}], "]"}]}], ";", "   ", +        RowBox[{"(*", " ", +         RowBox[{"i", "^", "e_"}], " ", "*)"}], "\[IndentingNewLine]", +        RowBox[{"pairs", " ", "=", " ", +         RowBox[{"Select", "[", +          RowBox[{"pairs", ",", +           RowBox[{+            RowBox[{+             RowBox[{"Snd", "[", "#", "]"}], ">", "0"}], "&"}]}], "]"}]}], +        ";", " ", +        RowBox[{"(*", " ", +         RowBox[{"!!", "!"}], " ", "*)"}], "\[IndentingNewLine]", +        RowBox[{"m1", " ", "=", " ", +         RowBox[{"Length", "[", "pairs", "]"}]}], ";", "\[IndentingNewLine]", +        +        RowBox[{"ns", " ", "=", +         RowBox[{"Map", "[", +          RowBox[{"Fst", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", +        +        RowBox[{"es", " ", "=", +         RowBox[{"Map", "[", +          RowBox[{"Snd", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", +        +        RowBox[{"X", "=", +         RowBox[{"csmDisj", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"(*", " ", +         RowBox[{+          RowBox[{"Print", "[", +           RowBox[{"\"\<xlam1 - \>\"", ",", "pairs"}], "]"}], ";", +          "\[IndentingNewLine]", +          RowBox[{"Print", "[", +           RowBox[{+           "\"\<xlam2 - \>\"", ",", "es", ",", "\"\< | \>\"", ",", "ns", ",", +            "\"\< | \>\"", ",", +            RowBox[{"uus", "[", "m1", "]"}], ",", "\"\< | \>\"", ",", "X"}], +           "]"}], ";"}], " ", "*)"}], "\[IndentingNewLine]", +        RowBox[{"Expand", "[", +         RowBox[{"omegaLam", "[", +          RowBox[{"es", ",", "ns", ",", +           RowBox[{"uus", "[", "m1", "]"}], ",", "u", ",", "X"}], "]"}], +         "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{"equiv", " ", "CSM", " ", "of", " ", "D", +     RowBox[{"(", +      RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], " ", "*)"}], +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisj", "[", +     RowBox[{"{", "n_", "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisj", "[", +      RowBox[{"{", "n", "}"}], "]"}], " ", "=", " ", +     RowBox[{+      RowBox[{"csmDisj1", "[", "n", "]"}], "/.", +      RowBox[{"{", +       RowBox[{"u", "\[Rule]", +        RowBox[{"uu", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisj", "[", "ns0_", "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisj", "[", "ns0", "]"}], "=", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{+         RowBox[{"m", "=", +          RowBox[{"Length", "[", "ns0", "]"}]}], ",", "\[IndentingNewLine]", +         "nis0", ",", "nis1", ",", "ns1", ",", "idxs", ",", "X", ",", "ttt"}],+         "}"}], ",", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"nis0", " ", "=", +         RowBox[{"Zip", "[", +          RowBox[{"ns0", ",", +           RowBox[{"Range", "[", "m", "]"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"nis1", "=", +         RowBox[{"SortBy", "[", +          RowBox[{"nis0", ",", +           RowBox[{+            RowBox[{"-", +             RowBox[{"Fst", "[", "#", "]"}]}], "&"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"idxs", "=", +         RowBox[{"Map", "[", +          RowBox[{"Snd", ",", "nis1"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"ns1", " ", "=", +         RowBox[{"Select", "[", +          RowBox[{+           RowBox[{"Map", "[", +            RowBox[{"Fst", ",", "nis1"}], "]"}], ",", +           RowBox[{+            RowBox[{"#", ">", "0"}], "&"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"(*", " ", +         RowBox[{+          RowBox[{"Print", "[", +           RowBox[{+           "\"\<nis1 - \>\"", ",", "nis0", ",", "\"\< | \>\"", ",", "nis1"}], +           "]"}], ";", "\[IndentingNewLine]", +          RowBox[{"Print", "[", +           RowBox[{"\"\<nis2 - \>\"", ",", "ns1"}], "]"}], ";"}], " ", "*)"}],+         "\[IndentingNewLine]", +        RowBox[{"X", "=", +         RowBox[{"csmDisjSorted", "[", "ns1", "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"X", "=", +         RowBox[{"X", "/.", +          RowBox[{"Table", "[", +           RowBox[{+            RowBox[{+             RowBox[{"uu", "[", "i", "]"}], "\[Rule]", +             RowBox[{"Subscript", "[", +              RowBox[{"ttt", ",", "i"}], "]"}]}], ",", +            RowBox[{"{", +             RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"X", "/.", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{+            RowBox[{"Subscript", "[", +             RowBox[{"ttt", ",", "i"}], "]"}], "\[Rule]", +            RowBox[{"uu", "[", +             RowBox[{+             "idxs", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], +             "]"}]}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}]}], +      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+    "a", " ", "single", " ", "term", " ", "corresponding", " ", "to", " ", +     "a", " ", "triple", " ", +     RowBox[{"(", +      RowBox[{"k", ",", "ds", ",", "es"}], ")"}]}], " ", "*)"}], +   "\[IndentingNewLine]", +   RowBox[{"Clear", "[", "singleKDE", "]"}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"singleKDE", "[", +     RowBox[{"{", +      RowBox[{"k_", ",", "ds_", ",", "es_"}], "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"singleKDE", "[", +      RowBox[{"{", +       RowBox[{"k", ",", "ds", ",", "es"}], "}"}], "]"}], "=", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{+        "A", ",", "B", ",", "\[IndentingNewLine]", "m", ",", "vars", ",", +         "dims", ",", "\[IndentingNewLine]", "pp", ",", "qq", ",", "rr", ",", +         "ss", ",", "\[IndentingNewLine]", "pps", ",", "qqs", ",", "rrs", ",",+          "sss"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"m", "=", +         RowBox[{"Length", "[", "ds", "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"pp", "[", "i_", "]"}], ":=", +         RowBox[{"Subscript", "[", +          RowBox[{"pp$p", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"qq", "[", "i_", "]"}], ":=", +         RowBox[{"Subscript", "[", +          RowBox[{"qq$q", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"rr", "[", "i_", "]"}], ":=", +         RowBox[{"Subscript", "[", +          RowBox[{"rr$r", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{+         RowBox[{"ss", "[", "i_", "]"}], ":=", +         RowBox[{"Subscript", "[", +          RowBox[{"ss$s", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"pps", "=", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{"pp", "[", "i", "]"}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"qqs", "=", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{"qq", "[", "i", "]"}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"rrs", "=", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{"rr", "[", "i", "]"}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"sss", "=", +         RowBox[{"Table", "[", +          RowBox[{+           RowBox[{"ss", "[", "i", "]"}], ",", +           RowBox[{"{", +            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"vars", "=", +         RowBox[{"Join", "[", +          RowBox[{+           RowBox[{"{", "zzz", "}"}], ",", "pps", ",", "qqs"}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"dims", "=", +         RowBox[{"Join", "[", +          RowBox[{+           RowBox[{"{", "k", "}"}], ",", "ds", ",", "es"}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"A", "=", +         RowBox[{+          RowBox[{"csmDisj", "[", "dims", "]"}], "/.", +          RowBox[{"Table", "[", +           RowBox[{+            RowBox[{+             RowBox[{"uu", "[", "i", "]"}], "\[Rule]", +             RowBox[{+             "vars", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}],+             ",", +            RowBox[{"{", +             RowBox[{"i", ",", "1", ",", +              RowBox[{+               RowBox[{"2", "m"}], "+", "1"}]}], "}"}]}], "]"}]}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"B", "=", "A"}], ";", "\[IndentingNewLine]", +        RowBox[{"For", "[", +         RowBox[{+          RowBox[{"i", "=", "1"}], ",", +          RowBox[{"i", "\[LessEqual]", "m"}], ",", +          RowBox[{"i", "++"}], ",", +          RowBox[{"B", "=", +           RowBox[{"Expand", "[", +            RowBox[{"delta2", "[", +             RowBox[{+              RowBox[{+              "es", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], +              ",", +              RowBox[{"qq", "[", "i", "]"}], ",", +              RowBox[{"{", +               RowBox[{+                RowBox[{"rr", "[", "i", "]"}], ",", +                RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", "B"}], "]"}], +            "]"}]}]}], "]"}], ";", "\[IndentingNewLine]", +        RowBox[{"For", "[", +         RowBox[{+          RowBox[{"i", "=", "1"}], ",", +          RowBox[{"i", "\[LessEqual]", "m"}], ",", +          RowBox[{"i", "++"}], ",", +          RowBox[{"B", "=", +           RowBox[{"Expand", "[", +            RowBox[{"psi2", "[", +             RowBox[{+              RowBox[{"{", +               RowBox[{+                RowBox[{+                "ds", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], +                ",", +                RowBox[{+                "es", "\[LeftDoubleBracket]", "i", +                 "\[RightDoubleBracket]"}]}], "}"}], ",", +              RowBox[{"{", +               RowBox[{+                RowBox[{"pp", "[", "i", "]"}], ",", +                RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", +              RowBox[{"uu", "[", "i", "]"}], ",", "B"}], "]"}], "]"}]}]}], +         "]"}], ";", "\[IndentingNewLine]", +        RowBox[{"B", "=", +         RowBox[{"psiMany", "[", +          RowBox[{+           RowBox[{"Join", "[", +            RowBox[{+             RowBox[{"{", "k", "}"}], ",", "es"}], "]"}], ",", +           RowBox[{"Join", "[", +            RowBox[{+             RowBox[{"{", "zzz", "}"}], ",", "rrs"}], "]"}], ",", "z", ",", +           "B"}], "]"}]}], ";", "\[IndentingNewLine]", "B"}]}], +      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", +   "\[IndentingNewLine]", +   RowBox[{"(*", " ", +    RowBox[{+     RowBox[{"equiv", " ", "CSM", " ", "of", " ", "D", +      RowBox[{"(", +       RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], ",", " ", +     RowBox[{+      RowBox[{+       RowBox[{+        RowBox[{"but", " ", "we", " ", "require", " ", "d1"}], +        "\[GreaterEqual]", "d2", "\[GreaterEqual]", "d3", "\[GreaterEqual]"}],+        "..."}], "\[GreaterEqual]", "dn", ">", "0"}]}], " ", "*)"}], +   "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisjSorted", "[", +     RowBox[{"{", "n_", "}"}], "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisjSorted", "[", +      RowBox[{"{", "n", "}"}], "]"}], "=", +     RowBox[{+      RowBox[{"csmDisj1", "[", "n", "]"}], "/.", +      RowBox[{"{", +       RowBox[{"u", "\[Rule]", +        RowBox[{"uu", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", +   RowBox[{+    RowBox[{"csmDisjSorted", "[", "pns_", "]"}], ":=", +    RowBox[{+     RowBox[{"csmDisjSorted", "[", "pns", "]"}], "=", +     RowBox[{"Module", "[", "\[IndentingNewLine]", +      RowBox[{+       RowBox[{"{", +        RowBox[{+         RowBox[{"p", "=", +          RowBox[{+          "pns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], +         ",", "\[IndentingNewLine]", +         RowBox[{"ns", "=", +          RowBox[{"Drop", "[", +           RowBox[{"pns", ",", "1"}], "]"}]}], ",", "\[IndentingNewLine]", +         "A", ",", "B", ",", "rest", ",", "\[IndentingNewLine]", "KDE"}], +        "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", +       RowBox[{+        RowBox[{"KDE", "=", +         RowBox[{"kdeTriples", "[", +          RowBox[{"p", ",", "ns"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"(*", " ", +         RowBox[{+          RowBox[{"Print", "[", +           RowBox[{+           "\"\<sorted1 - \>\"", ",", "p", ",", "\"\< | \>\"", ",", "ns"}], +           "]"}], ";", "\[IndentingNewLine]", +          RowBox[{"Print", "[", +           RowBox[{"\"\<sorted2 - \>\"", ",", "KDE"}], "]"}], ";"}], " ", +         "*)"}], "\[IndentingNewLine]", +        RowBox[{"A", "=", +         RowBox[{+          RowBox[{"(", +           RowBox[{+            RowBox[{"csmDisj1", "[", "p", "]"}], "/.", +            RowBox[{"{", +             RowBox[{"u", "\[Rule]", "z"}], "}"}]}], ")"}], "*", +          RowBox[{"csmDisj", "[", "ns", "]"}]}]}], ";", "\[IndentingNewLine]", +        RowBox[{"rest", "=", +         RowBox[{"Sum", "[", +          RowBox[{+           RowBox[{"singleKDE", "[", "kde", "]"}], ",", +           RowBox[{"{", +            RowBox[{"kde", ",", "KDE"}], "}"}]}], "]"}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"B", " ", "=", " ", +         RowBox[{"Expand", "[", +          RowBox[{"A", "-", "rest"}], "]"}]}], ";", "\[IndentingNewLine]", +        RowBox[{"B", " ", "=", +         RowBox[{"B", "/.", +          RowBox[{"Table", "[", +           RowBox[{+            RowBox[{+             RowBox[{"uu", "[", "i", "]"}], "\[Rule]", +             RowBox[{"uu", "[", +              RowBox[{"i", "+", "1"}], "]"}]}], ",", +            RowBox[{"{", +             RowBox[{"i", ",", "1", ",", +              RowBox[{"Length", "[", "ns", "]"}]}], "}"}]}], "]"}]}]}], ";", +        "\[IndentingNewLine]", +        RowBox[{"B", "=", +         RowBox[{"B", "/.", +          RowBox[{"{", +           RowBox[{"z", "\[Rule]", +            RowBox[{"uu", "[", "1", "]"}]}], "}"}]}]}]}]}], +      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]"}]}]], "Input",+ CellChangeTimes->{{3.799904396615363*^9, 3.799904406889674*^9}, +   3.7999044864107447`*^9, {3.799904522981793*^9, 3.799904542217388*^9}, {+   3.799905368188403*^9, 3.799905440526905*^9}, {3.799910778489602*^9, +   3.799910789411199*^9}, {3.7999114574287767`*^9, 3.7999114795107517`*^9}, {+   3.7999117495827513`*^9, 3.799911793714377*^9}, {3.7999118288998423`*^9, +   3.799911896725374*^9}, {3.799912109841093*^9, 3.7999121125284853`*^9}, {+   3.7999125865497513`*^9, 3.7999126172056303`*^9}, 3.79991266733438*^9, {+   3.799912899384604*^9, 3.7999129587478647`*^9}, {3.7999130239335003`*^9, +   3.79991307814552*^9}, {3.799914094737917*^9, 3.799914115471753*^9}, {+   3.801080167288307*^9, 3.801080168489579*^9}}],++Cell[" ", "Text",+ Editable->False,+ Selectable->False,+ CellFrame->{{0, 0}, {0, 2}},+ ShowCellBracket->False,+ CellMargins->{{0, 0}, {1, 1}},+ CellElementSpacings->{"CellMinHeight"->1},+ CellFrameMargins->0,+ CellFrameColor->RGBColor[0, 0, 1],+ CellSize->{Inherited, 4}],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"hs2mat", "=", +  RowBox[{"{", +   RowBox[{+    RowBox[{"g", "\[Rule]", "u"}], ",", +    RowBox[{"a", "\[Rule]", "\[Alpha]"}], ",", +    RowBox[{"b", "\[Rule]", "\[Beta]"}]}], "}"}]}]], "Input",+ CellChangeTimes->{{3.799912245620652*^9, 3.799912259016245*^9}}],++Cell[BoxData[+ RowBox[{"{", +  RowBox[{+   RowBox[{"g", "\[Rule]", "u"}], ",", +   RowBox[{"a", "\[Rule]", "\[Alpha]"}], ",", +   RowBox[{"b", "\[Rule]", "\[Beta]"}]}], "}"}]], "Output",+ CellChangeTimes->{3.799912260023808*^9, 3.7999140879900007`*^9, +  3.8010801719598103`*^9, 3.801138036574416*^9}]+}, Open  ]],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"csmXLam", "[", +  RowBox[{"{", +   RowBox[{"2", ",", "2", ",", "1", ",", "1"}], "}"}], "]"}]], "Input",+ CellChangeTimes->{{3.801080172892398*^9, 3.801080178385489*^9}}],++Cell[BoxData[+ RowBox[{+  RowBox[{"24", " ", +   SuperscriptBox["u", "2"]}], "-", +  RowBox[{"18", " ", +   SuperscriptBox["u", "3"]}], "+", +  RowBox[{"144", " ", "u", " ", "\[Alpha]"}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", "\[Alpha]"}], "+", +  RowBox[{"180", " ", +   SuperscriptBox["\[Alpha]", "2"]}], "-", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "2"]}], "-", +  RowBox[{"24", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Alpha]", "2"]}], "+", +  RowBox[{"18", " ", +   SuperscriptBox["u", "3"], " ", +   SuperscriptBox["\[Alpha]", "2"]}], "-", +  RowBox[{"360", " ", +   SuperscriptBox["\[Alpha]", "3"]}], "-", +  RowBox[{"144", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "3"]}], "+", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Alpha]", "3"]}], "-", +  RowBox[{"180", " ", +   SuperscriptBox["\[Alpha]", "4"]}], "+", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "4"]}], "+", +  RowBox[{"360", " ", +   SuperscriptBox["\[Alpha]", "5"]}], "+", +  RowBox[{"144", " ", "u", " ", "\[Beta]"}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", "\[Beta]"}], "+", +  RowBox[{"504", " ", "\[Alpha]", " ", "\[Beta]"}], "-", +  RowBox[{"1056", " ", "u", " ", "\[Alpha]", " ", "\[Beta]"}], "+", +  RowBox[{"48", " ", +   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", +  RowBox[{"36", " ", +   SuperscriptBox["u", "3"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", +  RowBox[{"1584", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "+", +  RowBox[{"144", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", +  RowBox[{"144", " ", +   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", +  RowBox[{"168", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", +  RowBox[{"864", " ", +   SuperscriptBox["\[Alpha]", "4"], " ", "\[Beta]"}], "+", +  RowBox[{"180", " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"24", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "+", +  RowBox[{"18", " ", +   SuperscriptBox["u", "3"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"1584", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "2"]}], "+", +  RowBox[{"144", " ", "u", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "2"]}], "+", +  RowBox[{"648", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"1224", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"1224", " ", +   SuperscriptBox["\[Alpha]", "3"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"360", " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"144", " ", "u", " ", +   SuperscriptBox["\[Beta]", "3"]}], "+", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"144", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "3"]}], "+", +  RowBox[{"168", " ", "u", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"1224", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"180", " ", +   SuperscriptBox["\[Beta]", "4"]}], "+", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Beta]", "4"]}], "+", +  RowBox[{"864", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "4"]}], "+", +  RowBox[{"360", " ", +   SuperscriptBox["\[Beta]", "5"]}]}]], "Output",+ CellChangeTimes->{3.801080178836585*^9, 3.801138037480577*^9}]+}, Open  ]],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"ref2211", "=", +  RowBox[{+   RowBox[{"(", +    RowBox[{+     RowBox[{"180", "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"360", "*", +      RowBox[{"b", "^", "3"}]}], "-", +     RowBox[{"180", "*", +      RowBox[{"b", "^", "4"}]}], "+", +     RowBox[{"360", "*", +      RowBox[{"b", "^", "5"}]}], "+", +     RowBox[{"504", "*", "a", "*", "b"}], "-", +     RowBox[{"1584", "*", "a", "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"144", "*", "a", "*", +      RowBox[{"b", "^", "3"}]}], "+", +     RowBox[{"864", "*", "a", "*", +      RowBox[{"b", "^", "4"}]}], "+", +     RowBox[{"180", "*", +      RowBox[{"a", "^", "2"}]}], "-", +     RowBox[{"1584", "*", +      RowBox[{"a", "^", "2"}], "*", "b"}], "+", +     RowBox[{"648", "*", +      RowBox[{"a", "^", "2"}], "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"1224", "*", +      RowBox[{"a", "^", "2"}], "*", +      RowBox[{"b", "^", "3"}]}], "-", +     RowBox[{"360", "*", +      RowBox[{"a", "^", "3"}]}], "-", +     RowBox[{"144", "*", +      RowBox[{"a", "^", "3"}], "*", "b"}], "-", +     RowBox[{"1224", "*", +      RowBox[{"a", "^", "3"}], "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"180", "*", +      RowBox[{"a", "^", "4"}]}], "+", +     RowBox[{"864", "*", +      RowBox[{"a", "^", "4"}], "*", "b"}], "+", +     RowBox[{"360", "*", +      RowBox[{"a", "^", "5"}]}], "+", +     RowBox[{"144", "*", +      RowBox[{"g", "^", "1"}], "*", "b"}], "-", +     RowBox[{"444", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"144", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"b", "^", "3"}]}], "+", +     RowBox[{"444", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"b", "^", "4"}]}], "+", +     RowBox[{"144", "*", +      RowBox[{"g", "^", "1"}], "*", "a"}], "-", +     RowBox[{"1056", "*", +      RowBox[{"g", "^", "1"}], "*", "a", "*", "b"}], "+", +     RowBox[{"144", "*", +      RowBox[{"g", "^", "1"}], "*", "a", "*", +      RowBox[{"b", "^", "2"}]}], "+", +     RowBox[{"168", "*", +      RowBox[{"g", "^", "1"}], "*", "a", "*", +      RowBox[{"b", "^", "3"}]}], "-", +     RowBox[{"444", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"a", "^", "2"}]}], "+", +     RowBox[{"144", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"a", "^", "2"}], "*", "b"}], "-", +     RowBox[{"1224", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"a", "^", "2"}], "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"144", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"a", "^", "3"}]}], "+", +     RowBox[{"168", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"a", "^", "3"}], "*", "b"}], "+", +     RowBox[{"444", "*", +      RowBox[{"g", "^", "1"}], "*", +      RowBox[{"a", "^", "4"}]}], "+", +     RowBox[{"24", "*", +      RowBox[{"g", "^", "2"}]}], "-", +     RowBox[{"162", "*", +      RowBox[{"g", "^", "2"}], "*", "b"}], "-", +     RowBox[{"24", "*", +      RowBox[{"g", "^", "2"}], "*", +      RowBox[{"b", "^", "2"}]}], "+", +     RowBox[{"162", "*", +      RowBox[{"g", "^", "2"}], "*", +      RowBox[{"b", "^", "3"}]}], "-", +     RowBox[{"162", "*", +      RowBox[{"g", "^", "2"}], "*", "a"}], "+", +     RowBox[{"48", "*", +      RowBox[{"g", "^", "2"}], "*", "a", "*", "b"}], "-", +     RowBox[{"162", "*", +      RowBox[{"g", "^", "2"}], "*", "a", "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"24", "*", +      RowBox[{"g", "^", "2"}], "*", +      RowBox[{"a", "^", "2"}]}], "-", +     RowBox[{"162", "*", +      RowBox[{"g", "^", "2"}], "*", +      RowBox[{"a", "^", "2"}], "*", "b"}], "+", +     RowBox[{"162", "*", +      RowBox[{"g", "^", "2"}], "*", +      RowBox[{"a", "^", "3"}]}], "-", +     RowBox[{"18", "*", +      RowBox[{"g", "^", "3"}]}], "+", +     RowBox[{"18", "*", +      RowBox[{"g", "^", "3"}], "*", +      RowBox[{"b", "^", "2"}]}], "-", +     RowBox[{"36", "*", +      RowBox[{"g", "^", "3"}], "*", "a", "*", "b"}], "+", +     RowBox[{"18", "*", +      RowBox[{"g", "^", "3"}], "*", +      RowBox[{"a", "^", "2"}]}]}], ")"}], "/.", "hs2mat"}]}]], "Input",+ CellChangeTimes->{{3.801080194677876*^9, 3.801080214599786*^9}}],++Cell[BoxData[+ RowBox[{+  RowBox[{"24", " ", +   SuperscriptBox["u", "2"]}], "-", +  RowBox[{"18", " ", +   SuperscriptBox["u", "3"]}], "+", +  RowBox[{"144", " ", "u", " ", "\[Alpha]"}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", "\[Alpha]"}], "+", +  RowBox[{"180", " ", +   SuperscriptBox["\[Alpha]", "2"]}], "-", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "2"]}], "-", +  RowBox[{"24", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Alpha]", "2"]}], "+", +  RowBox[{"18", " ", +   SuperscriptBox["u", "3"], " ", +   SuperscriptBox["\[Alpha]", "2"]}], "-", +  RowBox[{"360", " ", +   SuperscriptBox["\[Alpha]", "3"]}], "-", +  RowBox[{"144", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "3"]}], "+", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Alpha]", "3"]}], "-", +  RowBox[{"180", " ", +   SuperscriptBox["\[Alpha]", "4"]}], "+", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "4"]}], "+", +  RowBox[{"360", " ", +   SuperscriptBox["\[Alpha]", "5"]}], "+", +  RowBox[{"144", " ", "u", " ", "\[Beta]"}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", "\[Beta]"}], "+", +  RowBox[{"504", " ", "\[Alpha]", " ", "\[Beta]"}], "-", +  RowBox[{"1056", " ", "u", " ", "\[Alpha]", " ", "\[Beta]"}], "+", +  RowBox[{"48", " ", +   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", +  RowBox[{"36", " ", +   SuperscriptBox["u", "3"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", +  RowBox[{"1584", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "+", +  RowBox[{"144", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", +  RowBox[{"144", " ", +   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", +  RowBox[{"168", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", +  RowBox[{"864", " ", +   SuperscriptBox["\[Alpha]", "4"], " ", "\[Beta]"}], "+", +  RowBox[{"180", " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"24", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "+", +  RowBox[{"18", " ", +   SuperscriptBox["u", "3"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"1584", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "2"]}], "+", +  RowBox[{"144", " ", "u", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "2"]}], "+", +  RowBox[{"648", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"1224", " ", "u", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"1224", " ", +   SuperscriptBox["\[Alpha]", "3"], " ", +   SuperscriptBox["\[Beta]", "2"]}], "-", +  RowBox[{"360", " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"144", " ", "u", " ", +   SuperscriptBox["\[Beta]", "3"]}], "+", +  RowBox[{"162", " ", +   SuperscriptBox["u", "2"], " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"144", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "3"]}], "+", +  RowBox[{"168", " ", "u", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"1224", " ", +   SuperscriptBox["\[Alpha]", "2"], " ", +   SuperscriptBox["\[Beta]", "3"]}], "-", +  RowBox[{"180", " ", +   SuperscriptBox["\[Beta]", "4"]}], "+", +  RowBox[{"444", " ", "u", " ", +   SuperscriptBox["\[Beta]", "4"]}], "+", +  RowBox[{"864", " ", "\[Alpha]", " ", +   SuperscriptBox["\[Beta]", "4"]}], "+", +  RowBox[{"360", " ", +   SuperscriptBox["\[Beta]", "5"]}]}]], "Output",+ CellChangeTimes->{3.8010802149214277`*^9, 3.8011380407777863`*^9}]+}, Open  ]],++Cell[CellGroupData[{++Cell[BoxData[+ RowBox[{"ref2211", "-", +  RowBox[{"csmXLam", "[", +   RowBox[{"{", +    RowBox[{"2", ",", "2", ",", "1", ",", "1"}], "}"}], "]"}]}]], "Input",+ CellChangeTimes->{{3.801138043577608*^9, 3.80113805412545*^9}}],++Cell[BoxData["0"], "Output",+ CellChangeTimes->{3.801138054701275*^9}]+}, Open  ]]+},+WindowSize->{740, 655},+WindowMargins->{{12, Automatic}, {Automatic, 24}},+FrontEndVersion->"9.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 20, \+2012)",+StyleDefinitions->"Default.nb"+]+(* End of Notebook Content *)++(* Internal cache information *)+(*CellTagsOutline+CellTagsIndex->{}+*)+(*CellTagsIndex+CellTagsIndex->{}+*)+(*NotebookFileOutline+Notebook[{+Cell[CellGroupData[{+Cell[579, 22, 3405, 92, 369, "Input"],+Cell[3987, 116, 470, 10, 58, "Message"]+}, Open  ]],+Cell[4472, 129, 273, 9, 5, "Text"],+Cell[4748, 140, 5089, 136, 488, "Input"],+Cell[9840, 278, 271, 9, 8, "Text"],+Cell[10114, 289, 6112, 160, 454, "Input"],+Cell[16229, 451, 271, 9, 8, "Text"],+Cell[16503, 462, 4631, 120, 369, "Input"],+Cell[21137, 584, 273, 9, 5, "Text"],+Cell[21413, 595, 3740, 95, 335, "Input"],+Cell[25156, 692, 271, 9, 8, "Text"],+Cell[25430, 703, 6312, 165, 386, "Input"],+Cell[31745, 870, 273, 9, 5, "Text"],+Cell[32021, 881, 8347, 219, 658, "Input"],+Cell[40371, 1102, 271, 9, 8, "Text"],+Cell[40645, 1113, 1899, 50, 199, "Input"],+Cell[42547, 1165, 3558, 108, 335, "Input"],+Cell[46108, 1275, 18692, 473, 1661, "Input"],+Cell[64803, 1750, 271, 9, 8, "Text"],+Cell[CellGroupData[{+Cell[65099, 1763, 283, 7, 28, "Input"],+Cell[65385, 1772, 301, 7, 28, "Output"]+}, Open  ]],+Cell[CellGroupData[{+Cell[65723, 1784, 193, 4, 28, "Input"],+Cell[65919, 1790, 3928, 102, 128, "Output"]+}, Open  ]],+Cell[CellGroupData[{+Cell[69884, 1897, 4221, 119, 199, "Input"],+Cell[74108, 2018, 3932, 102, 128, "Output"]+}, Open  ]],+Cell[CellGroupData[{+Cell[78077, 2125, 223, 5, 28, "Input"],+Cell[78303, 2132, 70, 1, 62, "Output"]+}, Open  ]]+}+]+*)++(* End of internal cache information *)
+ mathematica/equivariant_CSM_via_motivic.src view
@@ -0,0 +1,372 @@++(* ==== COMPUTE THR EQUIVARIANT CHERN-SCHWARTZ-MACPHERSON +        CLASS OF COINCIDENT ROOT LOCI VIA THE MOTIVIC ALGORITHM ==== *)++<< Combinatorica`++(* convention: u = -c_1(L) where L is the tautological line bundle on P^n *)++uu[i_] := Subscript[u, i]+vv[i_] := Subscript[u, i]+ww[i_] := Subscript[u, i]++(* only works for lists of equal length!! *)+Zip[as_, bs_] := MapThread[{#1, #2} &, {as, bs}]+Zip3[as_, bs_, cs_] := MapThread[{#1, #2, #3} &, {as, bs, cs}]++Fst[pair_] := pair[[1]]+Snd[pair_] := pair[[2]]++extendListWithZeros[L_, n_] := Join[L, Table[0, {i, 1, n - Length[L]}]]++SumList[L_] := Sum[x, {x, L}]++(* === EQUIVARIANT COHOMOLOGY RING OF P^n === *)++(* Weights of Sym^n C^2 *)+wt[n_, i_] := (n - i)*\[Alpha] + i*\[Beta]++(* the relation in H^*(P^n). Convention: +u = -c1(L) where L is the tautological line bundle *)++rel[n_] := Product[u + wt[n, i], {i, 0, n}]++Clear[upow$nplus1]+upow$nplus1[n_] := upow$nplus1[n] = Expand[u^(n + 1) - rel[n]]+(* (unefficiently) normalize a /polynomial/ in u *) ++Clear[normalizeSlow]+normalizeSlow[n_, X0_] := Module[{X = Expand[X0], m},+  m = Exponent[X, u];+  If[m <= n, X, normalizeSlow[n, X /. {u^m -> u^(m - n - 1)*upow$nplus1[n]}]]+  ]++(* table of normalized powers of u *)+Clear[UPowAB]+UPowAB[n_, k_] := UPowAB[n, k] = Expand[normalizeSlow[n, u^k]]++Clear[normalizeVarAB]+normalizeVarAB[n_, uuu_, X_] := Module[+  {m = Exponent[X, uuu]},+  Expand[Sum[Coefficient[X, uuu, k]*(UPowAB[n, k] /. {u -> uuu}), {k, 0, m}]]+  ]++(* === pushforward along the multiplication (single monom) === *)++(* Psi_* (u^k * v^l) = ? cohomology indexing *)+Clear[psiStarAB]+psiStarAB[n_, m_, 0, 0] := psiStarAB[n, m, 0, 0] = Binomial[n + m, n]+psiStarAB[n_, m_, k_, l_] := psiStarAB[n, m, k, l] = Module[+   {A, B, AB, F, R, IJ, sel, fun, cft},+   A = Product[u + wt[n, i], {i, 0, k - 1}];+   B = Product[v + wt[m, j], {j, 0, l - 1}];+   AB = Expand[A*B];+   sel[{i_, j_}] := (i < k) || (j < l);+   cft[{i_, j_}] := Coefficient[Coefficient[AB, u, i], v, j];+   fun[{i_, j_}] := psiStarAB[n, m, i, j];+   IJ = Flatten[Table[{i, j}, {i, 0, k}, {j, 0, l}], 1];+   IJ = Select[ IJ, sel];+   (* Print[IJ];+   Print[AB]; *)+   +   F = Binomial[n + m - k - l, n - k]*+     Product[w + wt[n + m, i], {i, 0, k + l - 1}];+   R = Sum[ cft[ij]*fun[ij], {ij, IJ}];  +   Expand[F - R]+   ]++Clear[psiStarChern]+psiStarChern[n_, m_, k_, l_] := psiStarChern[n, m, k, l] = +  SymmetricReduction[psiStarAB[n, m, k, l], {\[Alpha], \[Beta]}, {c, d}][[1]]+++(* === class of the diagonal === *)++notk[n_, k_] := Select[Table[i, {i, 0, n}], # != k &]++(* class of the diagonal in P^n x P^n *)+Clear[deltaClassAB]+deltaClassAB[n_] := deltaClassAB[n] =+  Expand[Factor[+    Sum[ Product[(v + wt[n, i]) (w + wt[n, i])/(wt[n, i] - wt[n, k]), {i, +       notk[n, k]}], {k, 0, n}]]]++Clear[deltaClassCh]+deltaClassCh[n_] := deltaClassCh[n] =+  Expand[SymmetricReduction[deltaClassAB[n], {\[Alpha], \[Beta]}, {c, d}][[1]]]++(* small diagonal in P^n x P^n x P^n *)+deltaClassTri[n_] := deltaClassTri[n] =+  Expand[Factor[+    Sum[ Product[(uu[1] + wt[n, i]) (uu[2] + +         wt[n, i]) (uu[3] + wt[n, i])/(wt[n, i] - wt[n, k]), {i, +       notk[n, k]}], {k, 0, n}]]]++(* === pushforward along the diagonal map (single monom) === *)++(* pushforward of u^k along Delta : P^n -> P^n x P^n *)+Clear[deltaStarAB]+deltaStarAB[n_, 0]  := deltaStarAB[n, 0] = deltaClassAB[n]+deltaStarAB[n_, k_] := deltaStarAB[n, k] = Module[+   {prod, Y, preY, Delta, rest},+   Y = Expand[Product[v + wt[n, i], {i, 0, k - 1}]];+   preY = Y /. {v -> u};+   Delta = deltaClassAB[n];+   prod = normalizeVarAB[n, v, Y*Delta];+   rest = Sum[Coefficient[preY, u, i]*deltaStarAB[n, i],  {i, 0, k - 1} ];+   Expand[ prod - rest]+   ]++Clear[deltaStarCh]+deltaStarCh[n_] := deltaStarCh[n] =+  Expand[SymmetricReduction[deltaStarAB[n], {\[Alpha], \[Beta]}, {c, d}][[1]]]+++(* === pushforwards for polynomials (not just single monoms) === *)++delta2[n_, uuu_, {vvv_, www_}, X0_] := Module[{X = Expand[X0]},+  Sum[Coefficient[X, uuu, i]*(deltaStarAB[n, i] /. {v -> vvv, w -> www}) , {i,+     0, n}]+  ]++deltaMany[n_, uuu_, vvvs_, X_] := Module[{ttt},+  If[Length[vvvs] == 1, X /. {uuu -> vvvs[[1]]},+   If[Length[vvvs] == 2, delta2[n, uuu, vvvs, X],+    deltaMany[n, ttt, Drop[vvvs, 1], delta2[n, uuu, {vvvs[[1]], ttt}, X]]]]]++psi2[{n1_, n2_}, {uuu_, vvv_}, www_, X0_] := Module[{X = Expand[X0]},+  Sum[Coefficient[Coefficient[X, uuu, i], vvv, +     j]*(psiStarAB[n1, n2, i, j] /. {w -> www}) , {i, 0, n1}, {j, 0, n2}]+  ]++psiMany[ns_, uuus_, www_, X_] := Module[{ttt, vvvs, ms},+  If[Length[uuus] == 1, X /. {uuus[[1]] -> www},+   If[Length[uuus] == 2, psi2[ns, uuus, www, X],+    ms = Join[{ns[[1]] + ns[[2]]}, Drop[ns, 2]];+    vvvs = Join[{ttt}, Drop[uuus, 2]];+    psiMany[ms, vvvs, www, psi2[Take[ns, 2], Take[uuus, 2], ttt, X]]]]]++ +(* === pushforward along the power map === *)++(* compute the pushforward by composing the diagonal with the merging map *)++Clear[slowOmegaAB]+slowOmegaAB[n_, d_, k_] := slowOmegaAB[n, d, k] = Module[+   {vars = Table[Subscript[ttt, i], {i, 1, d}],+    dims = Table[n, {i, 1, d}]},+   Factor[psiMany[dims, vars, u, deltaMany[n, u, vars, u^k]]]+   ]++(* d-th power of u^k : P^n -> P^(n*d) *)+(* NOTE: this formula is valid for  k>n too! +    you can experimentally check this +    by pre-normalizing and post-normalizing *)+Clear[omegaAB]+omegaAB[n_, d_, k_] :=+ Module[+  {idxs = Select[Table[i, {i, 0, n*d}], Not[Divisible[#, d]] &]}+  , u^k*d^(n - k)*Product[u + (n*d - i)*\[Alpha] + i*\[Beta], {i, idxs}]+  ]++(* pushforward along d-th power : P^n -> P^(n*d) *)++omega1[n_, d_, uuu_, www_, X0_] := Module[{X = Expand[X0]},+  Sum[Coefficient[X, uuu, i]*(omegaAB[n, d, i] /. {u -> www}) , {i, 0, n}]+  ]++(* P^n1 x P^n2 x P^n3 -> P^(d1*n1) x P^(d2*n2) x P^(d3*n3) -> P^(d1*n1 + \+d2*n2 + d3*n3 *) +omegaLam[ns_, ds_, uuus_, www_, X0_] := Module[+  {X = Expand[X0],+   m = Length[ns],+   vars, Y, nds, ttt, i},+  vars = Table[Subscript[ttt, i], {i, 1, m}];+  nds = Table[ ns[[i]]*ds[[i]], {i, 1, m}];+  Y = X;+  For[i = 1, i <= m, i++, +   Y = omega1[ns[[i]], ds[[i]], uuus[[i]], vars[[i]], Y]];+  psiMany[nds, vars, www, Y]+  ]++(* === EQUIVARIANT CSM CLASS === *)++uus[n_] := Table[uu[i], {i, 1, n}]+vvs[n_] := Table[vv[i], {i, 1, n}]++(* total chern class of P^n *)+Clear[chernPnAB]+chernPnAB[n_] := chernPnAB[n] = normalizeVarAB[n, u,+   Expand[Product[1 + u + wt[n, i], {i, 0, n}]]]++chernPnABVar[n_, uuu_] := chernPnAB[n] /. {u -> uuu}++EmptyPartQ[part_] := Length[part] == 0++DualPart[{}] := {}+DualPart[lam_] := + With[{m = lam[[1]]}, Table[Length[Select[lam, # >= i &]], {i, 1, m}]]+ +toExpoForm[{}] := {} +toExpoForm[part_] := + Module[{k = Max[part]}, Table[Length[Select[part, # == j &]], {j, 1, k}]]++posVectorQ[as_] := Map[# >= 0 &, as] /. {List -> And};+kdeTriples[p_, ns_] := Module[+  {m = Length[ns],+   posQ, oneK, A},+  oneK[k_] := +   Table[{k, ns - es, es}, {es, Combinatorica`Compositions[p - k, m]}];+  A = Table [oneK[k], {k, 0, p - 1}];+  A = Select[Flatten[A, 1], posVectorQ[Snd[#]] &];+  A]++Clear[csmXLam, csmDisj1, csmDisj, csmDisjSorted]++csmXLam[{}] := csmXLam[{}] = 1+csmXLam[{1}] := csmXLam[{1}] = chernPnAB[1]++csmDisj1[0] := csmDisj1[0] = 1+csmDisj1[1] := csmDisj1[1] = chernPnAB[1]++csmDisj[{}] := csmDisj[{}] = 1++csmDisjSorted[{}] := csmDisjSorted[{}] = 1++(* equiv CSM of D(n) *)+csmDisj1[n_] := csmDisj1[n] = Module[+   {parts = Select[Combinatorica`Partitions[n], Length[#] < n &]},+   Expand[chernPnAB[n] - Sum[csmXLam[p], {p, parts}]]+   ]++(* equiv CSM of X_lambda *)+csmXLam[lambda_] := csmXLam[lambda] = Module[+   {es = toExpoForm[lambda], m, m1, ns, pairs, X},+   m = Length[es];+   ns = Range[m];+   pairs = Zip[ns, es];   (* i^e_ *)+   +   pairs = Select[pairs, Snd[#] > 0 &]; (* !!! *)+   m1 = Length[pairs];+   ns = Map[Fst, pairs];+   es = Map[Snd, pairs];+   X = csmDisj[es];+   (* Print["xlam1 - ",pairs];+   Print["xlam2 - ",es," | ",ns," | ",uus[m1]," | ",X]; *)+   +   Expand[omegaLam[es, ns, uus[m1], u, X]]+   ]++(* equiv CSM of D(d1,d2,...) *)++csmDisj[{n_}] := csmDisj[{n}] = csmDisj1[n] /. {u -> uu[1]}+csmDisj[ns0_] := csmDisj[ns0] = Module[+   {m = Length[ns0],+    nis0, nis1, ns1, idxs, X, ttt},+   nis0 = Zip[ns0, Range[m]];+   nis1 = SortBy[nis0, -Fst[#] &];+   idxs = Map[Snd, nis1];+   ns1 = Select[Map[Fst, nis1], # > 0 &];+   (* Print["nis1 - ",nis0," | ",nis1];+   Print["nis2 - ",ns1]; *)+   X = csmDisjSorted[ns1];+   X = X /. Table[uu[i] -> Subscript[ttt, i], {i, 1, m}];+   X /. Table[Subscript[ttt, i] -> uu[idxs[[i]]], {i, 1, m}]+   ]++(* a single term corresponding to a triple (k,ds,es) *)+Clear[singleKDE]+singleKDE[{k_, ds_, es_}] := singleKDE[{k, ds, es}] = Module[+   {A, B,+    m, vars, dims,+    pp, qq, rr, ss,+    pps, qqs, rrs, sss+    },+   m = Length[ds];+   pp[i_] := Subscript[pp$p, i];+   qq[i_] := Subscript[qq$q, i];+   rr[i_] := Subscript[rr$r, i];+   ss[i_] := Subscript[ss$s, i];+   pps = Table[pp[i], {i, 1, m}];+   qqs = Table[qq[i], {i, 1, m}];+   rrs = Table[rr[i], {i, 1, m}];+   sss = Table[ss[i], {i, 1, m}];+   vars = Join[{zzz}, pps, qqs];+   dims = Join[{k}, ds, es];+   A = csmDisj[dims] /. Table[uu[i] -> vars[[i]], {i, 1, 2 m + 1}];+   B = A;+   For[i = 1, i <= m, i++, +    B = Expand[delta2[es[[i]], qq[i], {rr[i], ss[i]}, B]]];+   For[i = 1, i <= m, i++, +    B = Expand[psi2[{ds[[i]], es[[i]]}, {pp[i], ss[i]}, uu[i], B]]];+   B = psiMany[Join[{k}, es], Join[{zzz}, rrs], z, B];+   B+   ]++(* equiv CSM of D(d1,d2,...), but we require d1>=d2>=d3>=...>=dn>0 *)++csmDisjSorted[{n_}] := csmDisjSorted[{n}] = csmDisj1[n] /. {u -> uu[1]}+csmDisjSorted[pns_] := csmDisjSorted[pns] = Module[+   {p = pns[[1]],+    ns = Drop[pns, 1],+    A, B, rest,+    KDE+    },+   KDE = kdeTriples[p, ns];+   (* Print["sorted1 - ",p," | ",ns];+   Print["sorted2 - ",KDE]; *)+   A = (csmDisj1[p] /. {u -> z})*csmDisj[ns];+   rest = Sum[singleKDE[kde], {kde, KDE}];+   B = Expand[A - rest];+   B = B /. Table[uu[i] -> uu[i + 1], {i, 1, Length[ns]}];+   B = B /. {z -> uu[1]}+   ]+++hs2mat = {g -> u, a -> \[Alpha], b -> \[Beta]}++csmXLam[{2, 2, 1, 1}]++24 u^2 - 18 u^3 + 144 u \[Alpha] - 162 u^2 \[Alpha] + 180 \[Alpha]^2 - + 444 u \[Alpha]^2 - 24 u^2 \[Alpha]^2 + 18 u^3 \[Alpha]^2 - 360 \[Alpha]^3 - + 144 u \[Alpha]^3 + 162 u^2 \[Alpha]^3 - 180 \[Alpha]^4 + 444 u \[Alpha]^4 + + 360 \[Alpha]^5 + 144 u \[Beta] - 162 u^2 \[Beta] + 504 \[Alpha] \[Beta] - + 1056 u \[Alpha] \[Beta] + 48 u^2 \[Alpha] \[Beta] - + 36 u^3 \[Alpha] \[Beta] - 1584 \[Alpha]^2 \[Beta] + + 144 u \[Alpha]^2 \[Beta] - 162 u^2 \[Alpha]^2 \[Beta] - + 144 \[Alpha]^3 \[Beta] + 168 u \[Alpha]^3 \[Beta] + 864 \[Alpha]^4 \[Beta] + + 180 \[Beta]^2 - 444 u \[Beta]^2 - 24 u^2 \[Beta]^2 + 18 u^3 \[Beta]^2 - + 1584 \[Alpha] \[Beta]^2 + 144 u \[Alpha] \[Beta]^2 - + 162 u^2 \[Alpha] \[Beta]^2 + 648 \[Alpha]^2 \[Beta]^2 - + 1224 u \[Alpha]^2 \[Beta]^2 - 1224 \[Alpha]^3 \[Beta]^2 - 360 \[Beta]^3 - + 144 u \[Beta]^3 + 162 u^2 \[Beta]^3 - 144 \[Alpha] \[Beta]^3 + + 168 u \[Alpha] \[Beta]^3 - 1224 \[Alpha]^2 \[Beta]^3 - 180 \[Beta]^4 + + 444 u \[Beta]^4 + 864 \[Alpha] \[Beta]^4 + 360 \[Beta]^5++ref2211 = (180*b^2 - 360*b^3 - 180*b^4 + 360*b^5 + 504*a*b - 1584*a*b^2 - +    144*a*b^3 + 864*a*b^4 + 180*a^2 - 1584*a^2*b + 648*a^2*b^2 - +    1224*a^2*b^3 - 360*a^3 - 144*a^3*b - 1224*a^3*b^2 - 180*a^4 + 864*a^4*b + +    360*a^5 + 144*g^1*b - 444*g^1*b^2 - 144*g^1*b^3 + 444*g^1*b^4 + +    144*g^1*a - 1056*g^1*a*b + 144*g^1*a*b^2 + 168*g^1*a*b^3 - 444*g^1*a^2 + +    144*g^1*a^2*b - 1224*g^1*a^2*b^2 - 144*g^1*a^3 + 168*g^1*a^3*b + +    444*g^1*a^4 + 24*g^2 - 162*g^2*b - 24*g^2*b^2 + 162*g^2*b^3 - 162*g^2*a + +    48*g^2*a*b - 162*g^2*a*b^2 - 24*g^2*a^2 - 162*g^2*a^2*b + 162*g^2*a^3 - +    18*g^3 + 18*g^3*b^2 - 36*g^3*a*b + 18*g^3*a^2) /. hs2mat++24 u^2 - 18 u^3 + 144 u \[Alpha] - 162 u^2 \[Alpha] + 180 \[Alpha]^2 - + 444 u \[Alpha]^2 - 24 u^2 \[Alpha]^2 + 18 u^3 \[Alpha]^2 - 360 \[Alpha]^3 - + 144 u \[Alpha]^3 + 162 u^2 \[Alpha]^3 - 180 \[Alpha]^4 + 444 u \[Alpha]^4 + + 360 \[Alpha]^5 + 144 u \[Beta] - 162 u^2 \[Beta] + 504 \[Alpha] \[Beta] - + 1056 u \[Alpha] \[Beta] + 48 u^2 \[Alpha] \[Beta] - + 36 u^3 \[Alpha] \[Beta] - 1584 \[Alpha]^2 \[Beta] + + 144 u \[Alpha]^2 \[Beta] - 162 u^2 \[Alpha]^2 \[Beta] - + 144 \[Alpha]^3 \[Beta] + 168 u \[Alpha]^3 \[Beta] + 864 \[Alpha]^4 \[Beta] + + 180 \[Beta]^2 - 444 u \[Beta]^2 - 24 u^2 \[Beta]^2 + 18 u^3 \[Beta]^2 - + 1584 \[Alpha] \[Beta]^2 + 144 u \[Alpha] \[Beta]^2 - + 162 u^2 \[Alpha] \[Beta]^2 + 648 \[Alpha]^2 \[Beta]^2 - + 1224 u \[Alpha]^2 \[Beta]^2 - 1224 \[Alpha]^3 \[Beta]^2 - 360 \[Beta]^3 - + 144 u \[Beta]^3 + 162 u^2 \[Beta]^3 - 144 \[Alpha] \[Beta]^3 + + 168 u \[Alpha] \[Beta]^3 - 1224 \[Alpha]^2 \[Beta]^3 - 180 \[Beta]^4 + + 444 u \[Beta]^4 + 864 \[Alpha] \[Beta]^4 + 360 \[Beta]^5++ref2211 - csmXLam[{2, 2, 1, 1}]
+ slides/csm_slides_2017.pdf view

binary file changed (absent → 496617 bytes)

+ slides/motivic_slides_2018.pdf view

binary file changed (absent → 476170 bytes)

src/Math/RootLoci/Algebra.hs view
@@ -5,19 +5,17 @@ -- to do -- -- > import Math.RootLoci.Algebra--- > import qualified Math.RootLoci.Algebra.FreeMod as ZMod+-- > import qualified Math.Algebra.Polynomial.FreeModule as ZMod --  module Math.RootLoci.Algebra   ( ZMod , QMod , FreeMod -  , module Math.RootLoci.Algebra.Polynomial+--  , module Math.RootLoci.Algebra.Polynomial   , module Math.RootLoci.Algebra.SymmPoly---  , module ZMod                               -- apparently this does not work   )   where -import Math.RootLoci.Algebra.FreeMod ( ZMod , QMod , FreeMod )-import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import           Math.Algebra.Polynomial.FreeModule ( ZMod , QMod , FreeMod )+import qualified Math.Algebra.Polynomial.FreeModule as ZMod -import Math.RootLoci.Algebra.Polynomial import Math.RootLoci.Algebra.SymmPoly
− src/Math/RootLoci/Algebra/FreeMod.hs
@@ -1,214 +0,0 @@---- | Free modules. ------ This module should be imported qualified--{-# LANGUAGE BangPatterns, FlexibleInstances, TypeSynonymInstances #-}-module Math.RootLoci.Algebra.FreeMod where------------------------------------------------------------------------------------import Prelude   hiding ( sum , product )-import Data.List hiding ( sum , product )--import Data.Monoid-import Data.Ratio-import Data.Maybe--import Math.Combinat.Sets ( choose )--import qualified Data.Map.Strict as Map-import Data.Map.Strict (Map)-------------------------------------------------------------------------------------- | Free module over a coefficient ring with the given base. Internally a map--- storing the coefficients. We maintain the invariant that the coefficients--- are never zero.-newtype FreeMod coeff base = FreeMod { unFreeMod :: Map base coeff } deriving (Eq,Show)---- | Free module with integer coefficients-type ZMod base = FreeMod Integer  base---- | Free module with rational coefficients-type QMod base = FreeMod Rational base------------------------------------------------------------------------------------instance (Monoid b, Ord b, Eq c, Num c) => Num (FreeMod c b) where-  (+)    = add-  (-)    = sub-  negate = neg-  (*)    = mul-  fromInteger = konst . fromInteger-  abs    = error "FreeMod/abs"-  signum = error "FreeMod/signum"------------------------------------------------------------------------------------- * Sanity checking---- | Should be the identity function-normalize :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b-normalize = FreeMod . Map.filter (/=0) . unFreeMod---- | Safe equality testing (should be identical to @==@)-safeEq :: (Ord b, Eq b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> Bool-safeEq x y = normalize x == normalize y------------------------------------------------------------------------------------- * Constructing and deconstructing---- | The additive unit-zero :: FreeMod c b-zero = FreeMod $ Map.empty---- | A module generator-generator :: Num c => b -> FreeMod c b -generator x = FreeMod $ Map.singleton x 1---- | A single generator with a coefficient-singleton :: (Ord b) => b -> c -> FreeMod c b-singleton b c = FreeMod $ Map.singleton b c---- | Conversion from list. --- Note that we assume here that each generator appears at most once!-fromList :: (Eq c, Num c, Ord b) => [(b,c)] -> FreeMod c b-fromList = FreeMod . Map.fromList . filter cond where-  cond (b,x) = (x/=0)---- | Conversion to list -toList :: FreeMod c b -> [(b,c)]-toList = Map.toList . unFreeMod---- | Extract the coefficient of a generator-coeffOf :: (Ord b, Num c) => b -> FreeMod c b -> c-coeffOf b (FreeMod x) = case Map.lookup b x of-  Just c  -> c-  Nothing -> 0---- | Finds the term with the largest generator (in the natural ordering of the generators)-findMaxTerm :: (Ord b) => FreeMod c b -> Maybe (b,c)-findMaxTerm (FreeMod m) = if Map.null m-  then Nothing-  else Just (Map.findMax m)---- | Finds the term with the smallest generator (in the natural ordering of the generators)-findMinTerm :: (Ord b) => FreeMod c b -> Maybe (b,c)-findMinTerm (FreeMod m) = if Map.null m-  then Nothing-  else Just (Map.findMin m)------------------------------------------------------------------------------------- * Basic operations---- | Negation-neg :: Num c => FreeMod c b -> FreeMod c b -neg (FreeMod m) = FreeMod (Map.map negate m)---- | Additions-add :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b-add (FreeMod m1) (FreeMod m2) = FreeMod (Map.mergeWithKey f id id m1 m2) where-  f _ x y = case x+y of { 0 -> Nothing ; z -> Just z }---- | Subtraction-sub :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b-sub (FreeMod m1) (FreeMod m2) = FreeMod (Map.mergeWithKey f id (Map.map negate) m1 m2) where-  f _ x y = case x-y of { 0 -> Nothing ; z -> Just z }---- | Scaling by a number-scale :: (Ord b, Eq c, Num c) => c -> FreeMod c b -> FreeMod c b-scale 0 _           = zero-scale x (FreeMod m) = FreeMod (Map.mapMaybe f m) where-  f y = case x*y of { 0 -> Nothing ; z -> Just z }---- | Dividing by a number (assuming that the coefficient ring is integral, and each coefficient--- is divisible by the given number)-invScale :: (Ord b, Eq c, Integral c, Show c) => c -> FreeMod c b -> FreeMod c b-invScale d (FreeMod m) = FreeMod (Map.mapMaybe f m) where-  f a = case divMod a d of-    (b,0) -> case b of { 0 -> Nothing ; z -> Just z }-    _     -> error $ "FreeMod/invScale: not divisible by " ++ show d-------------------------------------------------------------------------------------- | Summation-sum :: (Ord b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b-sum []  = zero-sum zms = (foldl1' add) zms---- | Linear combination-linComb :: (Ord b, Eq c, Num c) => [(c, FreeMod c b)] -> FreeMod c b-linComb = sumWith where--   sumWith :: (Ord b, Eq c, Num c) => [(c, FreeMod c b)] -> FreeMod c b-   sumWith []  = zero-   sumWith zms = sum [ scale c zm | (c,zm) <- zms ]---- | Expand each generator into a term in another module and then sum the results-flatMap :: (Ord b1, Ord b2, Eq c, Num c) => (b1 -> FreeMod c b2) -> FreeMod c b1 -> FreeMod c b2-flatMap f = sum . map g . Map.assocs . unFreeMod where-  g (x,c) = scale c (f x)--flatMap' :: (Ord b1, Ord b2, Eq c2, Num c2) => (c1 -> c2) -> (b1 -> FreeMod c2 b2) -> FreeMod c1 b1 -> FreeMod c2 b2-flatMap' embed f = sum . map g . Map.assocs . unFreeMod where-  g (x,c) = scale (embed c) (f x)---- | The histogram of a multiset of generators is naturally an element of the given Z-module.-{-# SPECIALIZE histogram :: Ord b => [b] -> ZMod b #-} -histogram :: (Ord b, Num c) => [b] -> FreeMod c b-histogram xs = FreeMod $ foldl' f Map.empty xs where-  f old x = Map.insertWith (+) x 1 old-  ------------------------------------------------------------------------------------ * Rings---- | The multiplicative unit-one :: (Monoid b, Num c) => FreeMod c b-one = konst 1---- | A constant-konst :: (Monoid b) => c -> FreeMod c b-konst c = FreeMod (Map.singleton mempty c)---- | Multiplying two ring elements-mul :: (Ord b, Monoid b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b-mul xx yy = sum [ (f x c) | (x,c) <- toList xx ] where-  f x c = FreeMod $ Map.fromList [ (x<>y, cd) | (y,d) <- ylist , let cd = c*d , cd /= 0 ]-  ylist = toList yy---- | Product-product :: (Ord b, Monoid b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b-product []  = generator mempty-product xs  = foldl1' mul xs---- | Multiplies by a monomial-mulMonom :: (Ord b, Monoid b) => b -> FreeMod c b -> FreeMod c b-mulMonom monom = FreeMod . Map.mapKeys (mappend monom) . unFreeMod------------------------------------------------------------------------------------- * Misc---- | A symmetric polynomial of some generators-symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a-symPoly k xs = fromList $ map (\x -> (x,1)) $ (map mconcat $ choose k xs) ---- | Changing the base set-mapBase :: (Ord a, Ord b) => (a -> b) -> FreeMod c a -> FreeMod c b-mapBase f = onFreeMod (Map.mapKeys f)---- | Changing the coefficient ring-mapCoeff :: (Ord b) => (c1 -> c2) -> FreeMod c1 b -> FreeMod c2 b-mapCoeff f = onFreeMod' (Map.map f)---- | Extract a subset of terms-filterBase :: (Ord a, Ord b) => (a -> Maybe b) -> FreeMod c a -> FreeMod c b-filterBase f = onFreeMod (Map.fromList . mapMaybe g . Map.toList) where-  g (k,x) = case f k of { Just k' -> Just (k',x) ; Nothing -> Nothing }--onFreeMod :: (Ord a, Ord b) => (Map a c -> Map b c) -> FreeMod c a -> FreeMod c b-onFreeMod f = FreeMod . f . unFreeMod--onFreeMod' :: (Ord a, Ord b) => (Map a c -> Map b d) -> FreeMod c a -> FreeMod d b-onFreeMod' f = FreeMod . f . unFreeMod----------------------------------------------------------------------------------
− src/Math/RootLoci/Algebra/Polynomial.hs
@@ -1,102 +0,0 @@---- | Univariate polynomials--{-# LANGUAGE GeneralizedNewtypeDeriving #-}-module Math.RootLoci.Algebra.Polynomial where------------------------------------------------------------------------------------import Data.Array ( assocs ) --import Math.Combinat.Numbers--import Math.RootLoci.Misc--import qualified Math.RootLoci.Algebra.FreeMod as ZMod-import Math.RootLoci.Algebra.FreeMod ( FreeMod , ZMod , QMod )------------------------------------------------------------------------------------- * Polynomials---- | Standard univariate polynomials-newtype Poly coeff = Poly { fromPoly :: FreeMod coeff X } deriving (Eq,Num,Show)---- | Univariate polynomials using /rising factorials/ as a basis function-newtype RisingPoly  coeff = RisingPoly  { fromRisingPoly  :: FreeMod coeff RisingF }  deriving (Eq,Show)---- | Univariate polynomials using /falling factorials/ as a basis function-newtype FallingPoly coeff = FallingPoly { fromFallingPoly :: FreeMod coeff FallingF } deriving (Eq,Show)--instance (Num c, Show c, Eq c, IsSigned c) => Pretty (Poly        c) where pretty (Poly        p) = pretty p -instance (Num c, Show c, Eq c, IsSigned c) => Pretty (RisingPoly  c) where pretty (RisingPoly  p) = pretty p -instance (Num c, Show c, Eq c, IsSigned c) => Pretty (FallingPoly c) where pretty (FallingPoly p) = pretty p ------------------------------------------------------------------------------------- * Monomials ---- | A power of @x@ (that is, a monomial of the form @x^i@)-newtype X = X Int deriving (Eq,Ord,Show)--instance Monoid X where-  mempty = X 0-  mappend (X e) (X f) = X (e+f)--instance Pretty X where-  pretty (X e) = case e of-    0 -> "1"-    1 -> "x"-    _ -> "x^" ++ show e------------------------------------------------------------------------------------- * Rising and falling factorials ---- | Rising factorial @x^(k) = x(x+1)(x+2)...(x+k-1)@-newtype RisingF = RF Int deriving (Eq,Ord,Show)---- | Falling factorial @x_(k) = x(x-1)(x-2)...(x-k+1)@-newtype FallingF = FF Int deriving (Eq,Ord,Show)--instance Pretty RisingF where-  pretty (RF k) = case k of-    0 -> "1"-    1 -> "x"-    _ -> "x^(" ++ show k ++ ")"--instance Pretty FallingF where-  pretty (FF k) = case k of-    0 -> "1"-    1 -> "x"-    _ -> "x_(" ++ show k ++ ")"--risingPoly :: RisingF -> Poly Integer-risingPoly (RF k) = Poly $ ZMod.fromList-  [ (X p, abs c) | (p,c) <- assocs (signedStirling1stArray k) ]--fallingPoly :: FallingF -> Poly Integer-fallingPoly (FF k) = Poly $ ZMod.fromList-  [ (X p,     c) | (p,c) <- assocs (signedStirling1stArray k) ]------------------------------------------------------------------------------------- * Lagrange interpolation--lagrangeInterp :: [(Rational,Rational)] -> Poly Rational-lagrangeInterp = Poly . lagrangeInterp'--lagrangeInterp' :: [(Rational,Rational)] -> QMod X-lagrangeInterp' xys = final where-  final = ZMod.sum [ ZMod.scale (ys!!j) (lagrangePoly' xs j) | j<-[0..m-1] ]  where-  m = length xys-  (xs,ys) = unzip xys--lagrangePoly' :: [Rational] -> Int -> QMod X-lagrangePoly' xs j = ZMod.scale (1/denom) numer where-  numer  = ZMod.product [ term i    | i<-[0..m-1] , i /= j ]-  denom  = product      [ x j - x i | i<-[0..m-1] , i /= j ]-  m      = length xs-  x i    = xs !! i-  term i = ZMod.fromList -    [ (X 1 ,     1 )-    , (X 0 , - x i )-    ]----------------------------------------------------------------------------------
src/Math/RootLoci/Algebra/SymmPoly.hs view
@@ -30,28 +30,43 @@ --  -{-# LANGUAGE DataKinds, TypeFamilies, Rank2Types, GADTs, StandaloneDeriving #-}+{-# LANGUAGE BangPatterns, DataKinds, TypeFamilies, Rank2Types, GADTs, StandaloneDeriving #-} module Math.RootLoci.Algebra.SymmPoly where  -------------------------------------------------------------------------------- -import Data.Proxy+import Control.Monad+import Data.List +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)     +import Data.Foldable+import Data.Semigroup+#endif++import System.Random       -- testing only+ import Math.Combinat.Sign import Math.Combinat.Numbers+import Math.Combinat.Sets ( choose )   import qualified Data.Map.Strict as Map -import Control.Monad-import System.Random+import Data.Array ( Array )+import Data.Array.IArray -import Math.RootLoci.Algebra.FreeMod (ZMod)-import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import Math.Algebra.Polynomial.FreeModule (ZMod)+import qualified Math.Algebra.Polynomial.FreeModule as ZMod -import Math.RootLoci.Misc.Pretty+import Math.RootLoci.Misc.Common+import Math.Algebra.Polynomial.Pretty -import Unsafe.Coerce as Unsafe+-------------------------------------------------------------------------------- +-- | An elementary symmetric polynomial of some generators+symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a+symPoly k xs = ZMod.fromList $ map (\x -> (x,1)) $ (map mconcat $ choose k xs) + -------------------------------------------------------------------------------- -- * Base monomials @@ -185,8 +200,31 @@  -------------------------------------------------------------------------------- +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)        ++instance Semigroup AB where+  (AB a1 b1) <> (AB a2 b2) = AB (a1+a2) (b1+b2)++instance Semigroup Chern where+  (Chern e1 f1) <> (Chern e2 f2) = Chern (e1+e2) (f1+f2)++instance Semigroup Schur where+  (<>) = error "Schur/mappend: not a monoid"+ instance Monoid AB where   mempty = AB 0 0 ++instance Monoid Chern where+  mempty = Chern 0 0 ++instance Monoid Schur where+  mempty  = Schur 0 0++#else++instance Monoid AB where+  mempty = AB 0 0    (AB a1 b1) `mappend` (AB a2 b2) = AB (a1+a2) (b1+b2)  instance Monoid Chern where@@ -197,6 +235,8 @@   mempty  = Schur 0 0   mappend = error "Schur/mappend: not a monoid" +#endif+ --------------------------------------------------------------------------------  instance Pretty AB where@@ -227,9 +267,20 @@ instance Graded Chern where grade (Chern e f) = e + 2*f instance Graded Schur where grade (Schur i j) = i + j +-- | Filters out the given grade filterGrade :: (Ord b, Graded b) => Int -> ZMod b -> ZMod b filterGrade g = ZMod.onFreeMod filt where   filt = Map.filterWithKey $ \x _ -> (grade x == g)++-- | Separates the different grades+separateGradedParts :: (Ord b, Graded b) => ZMod b -> Array Int (ZMod b)+separateGradedParts input = arr where+  table = foldl' worker Map.empty (ZMod.toList input) +  worker !old (base,coeff) = insertMap (:[]) (:) (grade base) (base,coeff) old+  size  = if Map.null table then 0 else fst (Map.findMax table)+  arr   = listArray (0,size) +            [ ZMod.fromList (Map.findWithDefault [] d table) +            | d <- [0..size] ]  -------------------------------------------------------------------------------- -- * Conversions
src/Math/RootLoci/CSM/Aluffi.hs view
@@ -30,14 +30,14 @@ import Math.RootLoci.Classic import Math.RootLoci.Misc -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  -------------------------------------------------------------------------------- -- * CSM computation  -- | Paolo Aluffi's explicit formula for the (non-equivariant) CSM of open coincident root loci aluffiOpenCSM :: Partition -> ZMod G-aluffiOpenCSM part@(Partition ps) = ZMod.invScale (aut part) xsum where+aluffiOpenCSM part@(Partition ps) = ZMod.divideByConst (aut part) xsum where   n = sum ps   d = length ps   xsum = ZMod.fromList [ ( G (n-d+k) , coeff k ) | k<-[0..d] ] 
src/Math/RootLoci/CSM/Equivariant/Direct.hs view
@@ -29,7 +29,7 @@ import Math.RootLoci.Geometry import Math.RootLoci.Misc -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.CSM.Equivariant.PushForward import qualified Math.RootLoci.CSM.Equivariant.Ordered as Ordered@@ -47,14 +47,14 @@   directCalcOpenCSM :: ChernBase base => Partition -> ZMod (Gam base)   directCalcOpenCSM part@(Partition xs) = result where     m = partitionWeight part-    result   = ZMod.invScale (aut part) $ pi_star m middle+    result   = ZMod.divideByConst (aut part) $ pi_star m middle     middle   = delta_star_ part distinct     distinct = Ordered.formulaDistinctCSM (length xs)  --------------------------------------------------------------------------------  -- | To compute the CSM of the closed loci, we just some over the open strata--- in the closure.+-- in the closure  directClosedCSM :: ChernBase base => Partition -> ZMod (Gam base) directClosedCSM = polyCache2 calc where   @@ -62,4 +62,3 @@   calc part = ZMod.sum [ directOpenCSM q | q <- Set.toList (closureSet part) ]   ---------------------------------------------------------------------------------
src/Math/RootLoci/CSM/Equivariant/Ordered.hs view
@@ -43,6 +43,12 @@  -------------------------------------------------------------------------------- +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)     +import Data.Foldable+import Data.Semigroup+#endif+ import Math.Combinat.Classes import Math.Combinat.Numbers import Math.Combinat.Sign@@ -56,7 +62,7 @@  import qualified Data.Set as Set ; import Data.Set (Set) -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.CSM.Equivariant.PushForward @@ -181,10 +187,22 @@ -- | A formal monomial @q^k@ newtype QPow = QPow Int deriving (Eq,Ord,Show) +#if MIN_VERSION_base(4,11,0)     ++instance Semigroup QPow where+  (<>) (QPow e) (QPow f) = QPow (e+f)+ instance Monoid QPow where   mempty = QPow 0++#else++instance Monoid QPow where+  mempty = QPow 0   mappend (QPow e) (QPow f) = QPow (e+f) +#endif+ instance Pretty QPow where   pretty (QPow k) = showVarPower "q" k @@ -217,7 +235,7 @@                 , (monom [1,2] (-3) , 2)                 ]   | n >= 3  = ZMod.sum-                [ ZMod.scale coeff $ (ZMod.symPoly (n-3-k) us) * (ZMod.generator $ monom [] k)+                [ ZMod.scale coeff $ (symPoly (n-3-k) us) * (ZMod.generator $ monom [] k)                 | k<-[0..n-3]                 , let coeff = negateIfOdd (n-3+k) (factorial (n-3) `div` factorial k)                 ]@@ -270,7 +288,7 @@ {-       smaller = ZMod.sum          [ ZMod.scale coeff $ -            (ZMod.symPoly (n-k) us) * (embed $ computeQPolys k)+            (symPoly (n-k) us) * (embed $ computeQPolys k)         | k<-[0..n-1]         , let coeff = negateIfOdd (n+k) (factorial n `div` factorial k)         ]
src/Math/RootLoci/CSM/Equivariant/PushForward.hs view
@@ -47,7 +47,7 @@ import Math.RootLoci.Geometry import Math.RootLoci.Misc -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  -------------------------------------------------------------------------------- -- * The function tau@@ -94,7 +94,7 @@     full = ZMod.generator (Eta ks mempty)      -- == sigma_n(eta)     rest = ZMod.sum [ sigma (n-i) * tauEta (i-2) * ab | i<-[2..n] ] -    sigma k = ZMod.symPoly k [ Eta [k] mempty | k<-ks ]+    sigma k = symPoly k [ Eta [k] mempty | k<-ks ]    -- | a group generator on the left is a subset (=product) of U-s, which -- we map to a linear combinaton of H-s@@ -224,7 +224,7 @@    g :: Integer -> ZMod (Gam Chern) -> ZMod (Gam Chern) -> ZMod (Gam Chern)   g k prev1 prev2 -    = ZMod.invScale (mm-k)+    = ZMod.divideByConst (mm-k)     $ mulGam prev1 + ZMod.scale k (mulInjMonom c1 prev1)                     + ZMod.scale k (mulInjMonom c2 prev2)  @@ -245,9 +245,9 @@    g :: Integer -> ZMod Chern -> ZMod Chern -> ZMod Chern   g k prev1 prev2 -    = ZMod.invScale (mm-k)-    $ ZMod.scale    (   k)-    $ (ZMod.mulMonom c1 prev1 + ZMod.mulMonom c2 prev2) +    = ZMod.divideByConst (mm-k)+    $ ZMod.scale         (   k)+    $ (ZMod.mulByMonom c1 prev1 + ZMod.mulByMonom c2 prev2)     mm = fromIntegral m :: Integer 
src/Math/RootLoci/CSM/Equivariant/Recursive.hs view
@@ -31,7 +31,7 @@ import Math.RootLoci.Geometry import Math.RootLoci.Misc -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  -------------------------------------------------------------------------------- -- * CSM calculation@@ -66,7 +66,7 @@ openCSM = polyCache2 calcOpenCSM where    calcOpenCSM :: ChernBase base => Partition -> ZMod (Gam base)-  calcOpenCSM part = ZMod.invScale thisCoeff (pushdown `ZMod.sub` smaller) where+  calcOpenCSM part = ZMod.divideByConst thisCoeff (pushdown `ZMod.sub` smaller) where     n = partitionWeight part     pushdown  = lowerClass part     smaller   = ZMod.linComb [ (c , openCSM q) | (q,c) <- Map.assocs theClosure ]
src/Math/RootLoci/CSM/Equivariant/Umbral.hs view
@@ -19,6 +19,12 @@  -------------------------------------------------------------------------------- +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)     +import Data.Foldable+import Data.Semigroup+#endif+ import Math.Combinat.Classes import Math.Combinat.Numbers import Math.Combinat.Partitions.Integer@@ -31,8 +37,11 @@ import Math.RootLoci.Geometry import Math.RootLoci.Misc -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import Math.Algebra.Polynomial.Misc ( IsSigned(..) ) +import Math.Algebra.Polynomial.Pretty +import qualified Math.Algebra.Polynomial.FreeModule as ZMod+ import Math.RootLoci.CSM.Equivariant.PushForward ( tau , piStarTableAff , piStarTableProj ) import Math.RootLoci.CSM.Equivariant.Ordered     ( formulaQPoly ) @@ -46,10 +55,23 @@   = ST !Int !Int   deriving (Eq,Ord,Show) +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)     ++instance Semigroup ST where+  (ST s1 t1) <> (ST s2 t2) = ST (s1+s2) (t1+t2)+ instance Monoid ST where   mempty = ST 0 0 ++#else++instance Monoid ST where+  mempty = ST 0 0    (ST s1 t1) `mappend` (ST s2 t2) = ST (s1+s2) (t1+t2) +#endif+ instance Pretty ST where   pretty st = case st of     ST 0 0 -> "" @@ -57,7 +79,7 @@     ST 0 f -> showVarPower "t" f     ST e f -> showVarPower "s" e ++ "*" ++ showVarPower "t" f -prettyMixedST :: forall b c. (Pretty b, Num c, Eq c, IsSigned c, Show c) => FreeMod (FreeMod c b) ST -> String+prettyMixedST :: forall b c. (Pretty b, Num c, Eq c, IsSigned c, Pretty c) => FreeMod (FreeMod c b) ST -> String prettyMixedST = prettyFreeMod'' prettyInner pretty where    prettyInner :: FreeMod c b -> String@@ -78,8 +100,8 @@   | otherwise = error "theta: non-positive input"   where  -    term0 =  [ (ST 0 i , ZMod.scale (binomial p i) (                         tau (p-i-1)) ) | i<-[0..p-1] ]-    term1 =  [ (ST 1 i , ZMod.scale (binomial p i) (ZMod.mulMonom c2_monom $ tau (p-i-2)) ) | i<-[0..p-2] ] +    term0 =  [ (ST 0 i , ZMod.scale (binomial p i) (                           tau (p-i-1)) ) | i<-[0..p-1] ]+    term1 =  [ (ST 1 i , ZMod.scale (binomial p i) (ZMod.mulByMonom c2_monom $ tau (p-i-2)) ) | i<-[0..p-2] ]            ++ [ (ST 1 p , ZMod.konst (-1) ) ]      c2_monom = select0 (alphaBeta,c2)@@ -107,6 +129,25 @@ -------------------------------------------------------------------------------- -- * The affine CSM +-- | Weights of the representation @Sym^m C^2@+affineWeights :: Int -> [ZMod AB]+affineWeights m = +  [ ZMod.fromList [ ( AB 1 0 , fi (m-j) ) , ( AB 0 1 , fi j ) ]+  | j <- [0..m]+  ]+  where+    fi :: Int -> Integer+    fi = fromIntegral++-- | The top Chern class of the representation is just the product of weights.+-- This represents the zero orbit, and we need to add this to the closure in the+-- affine case!+topChernClass :: ChernBase base => Int -> ZMod base+topChernClass m = select1 (total , abToChern total) where+  total = product [ w | w <- affineWeights m ]++--------------------------------------------------------------------------------+ -- | The polynomial to be substituted in the place of @s^k*t^j@: -- -- > s^k*t^j  ->  P_j(m) * Q_k(n-3-k) * (n-3)_k@@ -144,18 +185,25 @@   -- the current umbral formula only works for @n >= 3@ ??   calc mu      | n < 3     = forgetGamma (Direct.directOpenCSM mu)-    | otherwise = ZMod.invScale (aut mu)+    | otherwise = ZMod.divideByConst (aut mu)                 $ umbralSubstitutionAff mu                 $ integralUmbralFormula mu     where       n = numberOfParts mu --- | Sum over the strata in the closure+--------------------------------------------------------------------------------++-- | CSM class of the zero orbit (which is just the top Chern class)+affineZeroCSM :: ChernBase base => Int -> ZMod base+affineZeroCSM m = topChernClass m++-- | Sum over the strata in the closure (including the zero orbit!) umbralAffClosedCSM :: ChernBase base => Partition -> ZMod base    umbralAffClosedCSM = polyCache1 calc where      calc :: ChernBase base => Partition -> ZMod base-  calc part = ZMod.sum [ umbralAffOpenCSM q | q <- Set.toList (closureSet part) ] +  calc part = affineZeroCSM (weight part)+            + ZMod.sum [ umbralAffOpenCSM q | q <- Set.toList (closureSet part) ]   -------------------------------------------------------------------------------- -- * The projective CSM@@ -198,7 +246,7 @@   -- the current umbral formula only works for @n >= 3@ ??   calc mu      | n < 3     = Direct.directOpenCSM mu     -    | otherwise = ZMod.invScale (aut mu)+    | otherwise = ZMod.divideByConst (aut mu)                 $ umbralSubstitutionProj mu                 $ integralUmbralFormula mu     where
src/Math/RootLoci/CSM/Projective.hs view
@@ -39,7 +39,7 @@ import Math.RootLoci.Geometry import Math.RootLoci.Misc -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod   -------------------------------------------------------------------------------- @@ -171,7 +171,7 @@    -- | we know that (pi_* upperCSM) = sum (chi * openCSM)   calcOpenCSM :: Partition -> ZMod G-  calcOpenCSM part = ZMod.invScale thisCoeff (pushdown - smaller) where+  calcOpenCSM part = ZMod.divideByConst thisCoeff (pushdown - smaller) where     n = partitionWeight part     pushdown  = lowerCSM part -- pi_star n (upperCSM part)      smaller   = ZMod.linComb [ (c , openCSM q) | (q,c) <- Map.assocs theClosure ]
src/Math/RootLoci/Classic.hs view
@@ -70,21 +70,67 @@ -- check_hilbert2 = and [ hilbert p == hilbert2 p | n<-[0..20] , p<-partitions n ]  ----------------------------------------------------------------------------------- * Schubert+-- * Enumerative geometry --- | Number of 4-tangent lines to a generic degree @d@ surface -quadTangentLines :: Int -> Integer-quadTangentLines d0+-- | The degree of the dual curve is @d(d-1)@+degreeOfDualCurve :: Int -> Integer+degreeOfDualCurve d0 +  | d < 2     = 0+  | otherwise = d*(d-1) +  where+    d = fromIntegral d0 :: Integer++-- | Number of flex lines to a generic degree @d@ plane curve+numberOfCurveFlexes :: Int -> Integer+numberOfCurveFlexes d0+  | d < 3     = 0+  | otherwise = 3*d*(d-2)+  where+    d = fromIntegral d0 :: Integer++-- | Number of bitangent lines to a generic degree @d@ plane curve+numberOfCurveBiTangents :: Int -> Integer+numberOfCurveBiTangents d0+  | d < 3     = 0+  | otherwise = div ((-3 + d)* (-2 + d)* d* (3 + d)) 2 +  where+    d = fromIntegral d0 :: Integer++-- | Number of 4-tangent lines to a generic degree @d@ surface (Schubert)+numberOfSurface4xTangents :: Int -> Integer+numberOfSurface4xTangents d0   | d < 8     = 0   | otherwise = d * (d - 4) * (d - 5) * (d - 6) * (d - 7) * (d^3 + 6*d^2 + 7*d - 30)   where     d = fromIntegral d0 :: Integer  -- | Number of lines meeting a generic degree @d@ surface at point with 5x multiplicity-quintFlexLines :: Int -> Integer-quintFlexLines d0+numberOfSurface5xHyperflexes :: Int -> Integer+numberOfSurface5xHyperflexes d0   | d < 5     = 0-  | otherwise = error "quintFlexLines"+  | otherwise = (35*d^3 - 200*d^2 + 240*d)+  where+    d = fromIntegral d0 :: Integer++-- | Bidegree of bitangent locus of a generic hypersurface+-- +-- (See: Kathlen Kohn, Bernt Ivar Utstol Nodland, Paolo Tripoli: Secants, bitangents, and their congruences)+--+bidegreeOfSurfaceBiTangents :: Int -> (Integer,Integer)+bidegreeOfSurfaceBiTangents d0 +  | d < 4     = ( 0 , 0 )+  | otherwise = ( div (d*(d-1)*(d-2)*(d-3)) 2 , div (d*(d-2)*(d-3)*(d+3)) 2 )+  where+    d = fromIntegral d0 :: Integer++-- | Bidegree of the flex locus of a generic hypersurface+--+-- (See: Kathlen Kohn, Bernt Ivar Utstol Nodland, Paolo Tripoli: Secants, bitangents, and their congruences)+--+bidegreeOfSurfaceFlexes :: Int -> (Integer,Integer)+bidegreeOfSurfaceFlexes d0+  | d < 4     = ( 0 , 0 ) +  | otherwise = ( d*(d-1)*(d-3) , 3*d*(d-2) )   where     d = fromIntegral d0 :: Integer 
src/Math/RootLoci/Dual/Localization.hs view
@@ -11,6 +11,7 @@ -- out the result (we know a priori that it is a homogenenous polynomial -- in @alpha@ and @beta@). +{-# LANGUAGE DataKinds #-} module Math.RootLoci.Dual.Localization where  --------------------------------------------------------------------------------@@ -27,13 +28,23 @@  import qualified Data.Map as Map -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod +import Math.Algebra.Polynomial.Univariate+import Math.Algebra.Polynomial.Univariate.Lagrange+ import Math.RootLoci.Algebra import Math.RootLoci.Classic  -------------------------------------------------------------------------------- +type X = U "x"++mkX :: Int -> X+mkX = U++--------------------------------------------------------------------------------+ -- | The localization formula as a string which Mathematica can parse localizeMathematica :: Partition -> String localizeMathematica (Partition xs) = formula where@@ -86,7 +97,7 @@ localizeDual :: Partition -> ZMod AB localizeDual part = ZMod.mapBase worker $ localizeInterpolatedZ part where   c = codim part-  worker (X i) = AB (c-i) i +  worker (U i) = AB (c-i) i   -- | We can use Lagrange interpolation to express the dual class from the -- localization formula (since we know a priori that the result is a homogeneous@@ -97,7 +108,7 @@   codim = sum xs - length xs   bs = map fromIntegral [ 2..codim+2 ]    :: [Rational]   qs = [ localizeEval part 1 b | b<-bs ] :: [Rational]-  final = lagrangeInterp' (zip bs qs)+  final = unUni $ lagrangeInterp (zip bs qs)  localizeInterpolatedZ :: Partition -> ZMod X localizeInterpolatedZ = (ZMod.mapCoeff f . localizeInterpolatedQ) where
src/Math/RootLoci/Dual/Restriction.hs view
@@ -27,7 +27,7 @@  import qualified Data.Set as Set ; import Data.Set (Set) -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.Algebra import Math.RootLoci.Classic@@ -144,7 +144,7 @@  -- | The dual class of the closure agress with the lowest degree part of the CSM class. dualClassFromProjCSM :: forall base. ChernBase base => ZMod (Gam base) -> ZMod base-dualClassFromProjCSM csm = dualClassFromAffCSM (ZMod.filterBase nogamma csm) where+dualClassFromProjCSM csm = dualClassFromAffCSM (ZMod.mapMaybeBase nogamma csm) where   nogamma :: Gam base -> Maybe base   nogamma (Gam k ab) = if k==0 then Just ab else Nothing 
src/Math/RootLoci/Geometry/Cohomology.hs view
@@ -23,16 +23,22 @@ import Data.List import Data.Monoid +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)     +import Data.Foldable+import Data.Semigroup+#endif+ import Math.Combinat.Numbers  import qualified Data.Map as Map import qualified Data.Set as Set -import qualified Math.RootLoci.Algebra.FreeMod as ZMod-import Math.RootLoci.Algebra.FreeMod ( ZMod , FreeMod(..) , unFreeMod )+import qualified Math.Algebra.Polynomial.FreeModule as ZMod+import Math.Algebra.Polynomial.FreeModule ( ZMod , FreeMod(..) , unFreeMod )  import Math.RootLoci.Algebra.SymmPoly -import Math.RootLoci.Misc.Pretty+import Math.Algebra.Polynomial.Pretty  -------------------------------------------------------------------------------- -- * The non-equivariant case@@ -54,8 +60,41 @@  -------------------------------------------------------------------------------- +-- Semigroup became a superclass of Monoid+#if MIN_VERSION_base(4,11,0)     ++instance Semigroup US where+  (US us1) <> (US us2) = +    if nub us3 == us3+      then US us3+      else error "[U]/monoid: duplicate indices"+    where+      us3 = sort (us1 ++ us2)++instance Semigroup HS where+  (HS hs1) <> (HS hs2) = +    if nub hs3 == hs3+      then HS hs3+      else error "[H]/monoid: duplicate indices"+    where+      hs3 = sort (hs1 ++ hs2)++instance Semigroup G where+  (G e) <> (G f) = G (e+f)+ instance Monoid US where   mempty = US []++instance Monoid HS where+  mempty = HS []++instance Monoid G where+  mempty = G 0++#else++instance Monoid US where+  mempty = US []   (US us1) `mappend` (US us2) =      if nub us3 == us3       then US us3@@ -75,6 +114,8 @@ instance Monoid G where   mempty = G 0   (G e) `mappend` (G f) = G (e+f)++#endif   -------------------------------------------------------------------------------- @@ -149,13 +190,13 @@ injectZMod = ZMod.mapBase injectMonom  forgetGamma :: Ord base => ZMod (Gam base) -> ZMod base -forgetGamma = ZMod.filterBase f where+forgetGamma = ZMod.mapMaybeBase f where   f (Gam k ab) = case k of     0 -> Just ab     _ -> Nothing  forgetEquiv :: ChernBase base => ZMod (Gam base) -> ZMod G-forgetEquiv = ZMod.filterBase f where+forgetEquiv = ZMod.mapMaybeBase f where   f (Gam k ab) = if (ab == mempty)      then Just (G k)     else Nothing@@ -211,18 +252,50 @@ --------------------------------------------------------------------------------  -- | This is a hack to reuse the same pushforward code-unsafeEtaToOmega :: Ord ab => FreeMod coeff (Eta ab) -> FreeMod coeff (Omega ab)+unsafeEtaToOmega :: (Eq coeff, Num coeff, Ord ab) => FreeMod coeff (Eta ab) -> FreeMod coeff (Omega ab) unsafeEtaToOmega = ZMod.mapBase f where   f (Eta js ab) = Omega js ab -unsafeOmegaToEta :: Ord ab => FreeMod coeff (Omega ab) -> FreeMod coeff (Eta ab)+unsafeOmegaToEta :: (Eq coeff, Num coeff, Ord ab) => FreeMod coeff (Omega ab) -> FreeMod coeff (Eta ab) unsafeOmegaToEta = ZMod.mapBase f where   f (Omega js ab) = Eta js ab  -------------------------------------------------------------------------------- +#if MIN_VERSION_base(4,11,0)     ++instance Semigroup ab => Semigroup (Omega ab) where+  (Omega as ab1) <> (Omega bs ab2) = +    if nub cs == cs+      then Omega cs (ab1 <> ab2)+      else error "Omega/monoid: duplicate indices"+    where+      cs = sort (as ++ bs)++instance Semigroup ab => Semigroup (Eta ab) where+  (Eta fs ab1) <> (Eta gs ab2) = +    if nub hs == hs+      then Eta hs (ab1 <> ab2)+      else error "Eta/monoid: duplicate indices"+    where+      hs = sort (fs ++ gs)++instance Semigroup ab => Semigroup (Gam ab) where+  (Gam e ab1) <> (Gam f ab2) = Gam (e+f) (ab1 <> ab2)+ instance Monoid ab => Monoid (Omega ab) where   mempty = Omega [] mempty++instance Monoid ab => Monoid (Eta ab) where+  mempty = Eta [] mempty++instance Monoid ab => Monoid (Gam ab) where+  mempty = Gam 0 mempty++#else++instance Monoid ab => Monoid (Omega ab) where+  mempty = Omega [] mempty   (Omega as ab1) `mappend` (Omega bs ab2) =      if nub cs == cs       then Omega cs (ab1 <> ab2)@@ -242,6 +315,8 @@ instance Monoid ab => Monoid (Gam ab) where   mempty = Gam 0 mempty   (Gam e ab1) `mappend` (Gam f ab2) = Gam (e+f) (ab1 <> ab2)++#endif  -------------------------------------------------------------------------------- 
src/Math/RootLoci/Geometry/Forget.hs view
@@ -62,10 +62,10 @@ countDirectCoarsenings :: Partition -> Map Partition Integer countDirectCoarsenings part = Map.fromListWith (+) list where   list =  -    [ ( fromExponentialFrom ((i1+i2,1):(i1,e1-1):(i2,e2-1):rest) , fromIntegral (e1*e2) )+    [ ( fromExponentialForm ((i1+i2,1):(i1,e1-1):(i2,e2-1):rest) , fromIntegral (e1*e2) )     | ( (i1,e1):(i2,e2):[] , rest ) <- choose' 2 ies     ] ++-    [ ( fromExponentialFrom ((2*i,1):(i,e-2):rest) , binomial e 2 )+    [ ( fromExponentialForm ((2*i,1):(i,e-2):rest) , binomial e 2 )     | ( (i,e):[] , rest ) <- choose' 1 ies     , e >= 2     ]
src/Math/RootLoci/Geometry/Mobius.hs view
@@ -31,7 +31,7 @@ import Math.Combinat.Partitions.Set import Math.Combinat.Sets -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.Algebra import Math.RootLoci.Misc
src/Math/RootLoci/Misc.hs view
@@ -4,10 +4,10 @@ module Math.RootLoci.Misc    ( module Math.RootLoci.Misc.Common    , module Math.RootLoci.Misc.PTable-  , module Math.RootLoci.Misc.Pretty +  , module Math.Algebra.Polynomial.Pretty   )   where  import Math.RootLoci.Misc.Common  import Math.RootLoci.Misc.PTable-import Math.RootLoci.Misc.Pretty +import Math.Algebra.Polynomial.Pretty
src/Math/RootLoci/Misc/Common.hs view
@@ -1,7 +1,7 @@  -- | Some auxilary functions -{-# LANGUAGE BangPatterns, TypeSynonymInstances, FlexibleInstances, DeriveFunctor #-}+{-# LANGUAGE CPP, BangPatterns, TypeSynonymInstances, FlexibleInstances, DeriveFunctor #-} module Math.RootLoci.Misc.Common where  --------------------------------------------------------------------------------@@ -9,6 +9,7 @@ import Data.List import Data.Monoid import Data.Ratio+import Data.Ord  import Control.Monad @@ -21,10 +22,6 @@ import qualified Data.Map.Strict as Map import Data.Map (Map) --- import qualified Math.RootLoci.Algebra.FreeMod as ZMod--- import Math.RootLoci.Algebra.SymmPoly--- import Math.RootLoci.Geometry.Cohomology- -------------------------------------------------------------------------------- -- * Pairs @@ -35,6 +32,10 @@ -------------------------------------------------------------------------------- -- * Lists +{-# SPECIALIZE sum' :: [Int] -> Int #-}+sum' :: Num a => [a] -> a+sum' = foldl' (+) 0 + {-# SPECIALIZE unique :: [Partition] -> [Partition] #-} unique :: Ord a => [a] -> [a] unique = map head . group . sort@@ -48,6 +49,34 @@ histogram xs = foldl' f Map.empty xs where   f old x = Map.insertWith (+) x 1 old +#if MIN_VERSION_base(4,8,0)+-- sortOn already in base, nothing to do+#else+-- sortOn not yet in base, let's define it+sortOn :: Ord b => (a -> b) -> [a] -> [a]+sortOn f = sortBy (comparing f)+#endif++longZipWith :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c]+longZipWith f g h = go where+  go (x:xs) (y:ys) = h x y : go xs ys+  go xs     []     = map f xs+  go []     ys     = map g ys++evens :: [a] -> [a]+evens (x:xs) = x : odds xs+evens []     = []++odds :: [a] -> [a]+odds (_:xs) = evens xs+odds []     = []++interleave :: [a] -> [a] -> [a]+interleave = go where +  go (x:xs) (y:ys) = x : y : go xs ys+  go []     []     = []+  go _      _      = error "interleave: input lists do not have the same length"+ -------------------------------------------------------------------------------- -- * Maps   @@ -60,6 +89,21 @@     Just y  -> y     Nothing -> error "unsafeDeleteLookup: key not found" +-- | Example usage: @insertMap (:[]) (:) ...@+insertMap :: Ord k => (b -> a) -> (b -> a -> a) -> k -> b -> Map k a -> Map k a+insertMap f g k y = Map.alter h k where+  h mb = case mb of+    Nothing -> Just (f y)+    Just x  -> Just (g y x)    ++-- | Example usage: @buildMap (:[]) (:) ...@+buildMap :: Ord k => (b -> a) -> (b -> a -> a) -> [(k,b)] -> Map k a+buildMap f g xs = foldl' worker Map.empty xs where+  worker !old (k,y) = Map.alter h k old where+    h mb = case mb of+      Nothing -> Just (f y)+      Just x  -> Just (g y x)    + -------------------------------------------------------------------------------- -- * Partitions @@ -72,6 +116,14 @@ aut part = product $ map factorial es where   es = map snd $ toExponentialForm part    +-- | TODO: move this into combinat+exponentVector :: Partition -> [Int]+exponentVector p = go 1 (toExponentialForm p) where+  go _  []              = []+  go !i ef@((j,e):rest) = if i<j +    then 0 : go (i+1) ef+    else e : go (i+1) rest+ -------------------------------------------------------------------------------- -- * Set partitions  @@ -89,6 +141,7 @@ -------------------------------------------------------------------------------- -- * Signs +{- class IsSigned a where   signOf :: a -> Maybe Sign @@ -101,6 +154,7 @@ instance IsSigned Int      where signOf = signOfNum instance IsSigned Integer  where signOf = signOfNum instance IsSigned Rational where signOf = signOfNum+-}  -------------------------------------------------------------------------------- -- * Numbers@@ -130,3 +184,48 @@   prod' = foldl' (*) 1  --------------------------------------------------------------------------------+-- * Utility++-- | Put into parentheses+paren :: String -> String+paren s = '(' : s ++ ")"++--------------------------------------------------------------------------------++-- | Exponential form of a partition+expFormString :: Partition -> String+expFormString p = "(" ++ intercalate "," (map f ies) ++ ")" where+  ies = toExponentialForm p+  f (i,e) = show i ++ "^" ++ show e++extendStringL :: Int -> String -> String+extendStringL k s = s ++ replicate (k - length s) ' '++extendStringR :: Int -> String -> String+extendStringR k s = replicate (k - length s) ' ' ++ s++--------------------------------------------------------------------------------+-- * Mathematica-formatted output++class Mathematica a where+  mathematica :: a -> String++instance Mathematica Int where+  mathematica = show++instance Mathematica Integer where+  mathematica = show++instance Mathematica String where+  mathematica = show++instance Mathematica Partition where+  mathematica (Partition ps) = "{" ++ intercalate "," (map show ps) ++ "}"++data Indexed a = Indexed String a++instance Mathematica a => Mathematica (Indexed a) where+  mathematica (Indexed x sub) = "Subscript[" ++ x ++ "," ++ mathematica sub ++ "]"++--------------------------------------------------------------------------------+
− src/Math/RootLoci/Misc/Pretty.hs
@@ -1,137 +0,0 @@--{-# LANGUAGE FlexibleInstances #-}---- | Pretty-printing- -module Math.RootLoci.Misc.Pretty where------------------------------------------------------------------------------------import Data.List--import Math.Combinat.Sign-import Math.Combinat.Partitions.Integer--import qualified Data.Map.Strict as Map-import Data.Map.Strict (Map)--import Math.RootLoci.Algebra.FreeMod ( FreeMod, ZMod, QMod )-import qualified Math.RootLoci.Algebra.FreeMod as ZMod--import Math.RootLoci.Misc.Common------------------------------------------------------------------------------------class Pretty a where-  pretty :: a -> String---- instance Pretty a => Pretty (ZMod a) where---   pretty = prettyZMod pretty--instance (Num c, Eq c, Show c, IsSigned c, Pretty b) => Pretty (FreeMod c b) where-  pretty = prettyFreeMod' True pretty------------------------------------------------------------------------------------- * Pretty printing elements of free modules---- | Example: @showVarPower "x" 5 == "x^5"@-showVarPower :: String -> Int -> String-showVarPower name expo = case expo of-  0 -> "1"-  1 -> name-  _ -> name ++ "^" ++ show expo-------------------------------------------------------------------------------------- | no multiplication sign (ok for mathematica and humans)-prettyZMod_ :: (b -> String) -> ZMod b -> String-prettyZMod_ = prettyFreeMod' False-  --- | multiplication sign (ok for maple etc)-prettyZMod :: (b -> String) -> ZMod b -> String-prettyZMod = prettyFreeMod' True------------------------------------------------------------------------------------prettyFreeMod' -  :: (Num c, Eq c, Show c, IsSigned c) -  => Bool                -- ^ use star for multiplication (@False@ means just concatenation)-  -> (b -> String)       -- ^ show base-  -> FreeMod c b -  -> String-prettyFreeMod' star showBase what = final where-  final = if take 3 stuff == " + " then drop 3 stuff else drop 1 stuff-  stuff = concatMap f (ZMod.toList what) -  f (g,  1) = plus  ++ showBase' g-  f (g, -1) = minus ++ showBase' g-  f (g, c)  = sgn c ++ {- extendStringR 3 -} (show $ abs c) ++ starStr ++ showBase' g-  -- cond (_,c) = (c/=0)-  starStr = if star then "*" else " "-  showBase' g = case showBase g of-    "" -> "1"  -- "(1)"-    s  -> s-  sgn c = case signOf c of-    Just Minus -> minus-    _          -> plus-  plus  = " + "-  minus = " - "--prettyFreeMod'' -  :: (c -> String)    -- ^ show coefficient-  -> (b -> String)    -- ^ show base-  -> FreeMod c b -  -> String-prettyFreeMod'' showCoeff showBase what = result where-  result = intercalate " + " (map f $ ZMod.toList what) -  f (g, c) = showCoeff c ++ starStr ++ showBase' g-  starStr = "*" -- if star then "*" else " "-  showBase' g = case showBase g of-    "" -> "1"  -- "(1)"-    s  -> s------------------------------------------------------------------------------------- * Utility---- | Put into parentheses-paren :: String -> String-paren s = '(' : s ++ ")"-------------------------------------------------------------------------------------- | Exponential form of a partition-expFormString :: Partition -> String-expFormString p = "(" ++ intercalate "," (map f ies) ++ ")" where-  ies = toExponentialForm p-  f (i,e) = show i ++ "^" ++ show e--extendStringL :: Int -> String -> String-extendStringL k s = s ++ replicate (k - length s) ' '--extendStringR :: Int -> String -> String-extendStringR k s = replicate (k - length s) ' ' ++ s------------------------------------------------------------------------------------- * Mathematica-formatted output--class Mathematica a where-  mathematica :: a -> String--instance Mathematica Int where-  mathematica = show--instance Mathematica Integer where-  mathematica = show--instance Mathematica String where-  mathematica = show--instance Mathematica Partition where-  mathematica (Partition ps) = "{" ++ intercalate "," (map show ps) ++ "}"--data Indexed a = Indexed String a--instance Mathematica a => Mathematica (Indexed a) where-  mathematica (Indexed x sub) = "Subscript[" ++ x ++ "," ++ mathematica sub ++ "]"-----------------------------------------------------------------------------------
+ src/Math/RootLoci/Motivic/Abstract.hs view
@@ -0,0 +1,430 @@++-- | The abstract motivic algorithm+--+-- See: B. Komuves: Motivic characteristic classes of discriminant strata+--+-- TODO: caching of results (otherwise it is very slow)++{-# LANGUAGE CPP, BangPatterns, FlexibleInstances, TypeSynonymInstances,+             MultiParamTypeClasses, FunctionalDependencies, GeneralizedNewtypeDeriving,+             TypeFamilies+  #-}+module Math.RootLoci.Motivic.Abstract where++--------------------------------------------------------------------------------++import Data.Char+import Data.List+import Data.Ord+import Data.Maybe++import Data.Map.Strict (Map)+import qualified Data.Map.Strict as Map++import qualified Math.Algebra.Polynomial.FreeModule as ZMod +import Math.Algebra.Polynomial.FreeModule (ZMod,QMod,FreeMod)+import Math.Algebra.Polynomial.Pretty++import Math.Combinat.Classes hiding (empty)+import Math.Combinat.Tuples+import Math.Combinat.Partitions+import Math.Combinat.Permutations hiding (permute)++-- import Debug.Trace+-- debug s x y = trace (">>> " ++ s ++ " -> " ++ show x) y++import Math.RootLoci.Motivic.Classes+import Math.RootLoci.Misc.Common++--------------------------------------------------------------------------------+-- * The abstract algorithm++-- | The (abstract) class of @Sym^n(X)@+symn :: Num c => Dim -> FreeMod c SingleLam+symn dim = ZMod.generator $ SingleLam (Bindings [dim]) (Single [(DeBruijn 0, 1)])++-- | The open stratum X(1,1,...,1)+open :: Dim -> ZMod SingleLam+open d@(Dim n) = symn d `ZMod.sub` rest where+  rest = ZMod.sum [ xlam p | p <- partitions n , width p < n ]++zeros :: Int -> ZMod MultiLam+zeros k = ZMod.generator +        $ MultiLam (Bindings []) (Multi $ replicate k (Single []))++-- | The open stratum X(lambda)+xlam :: Partition -> ZMod SingleLam+xlam p = +  if height p == 1   +    then open (Dim $ weight p)+    else normalize $ psi $ omega123 $ dvec $ dimVector p++-- | The open stratum D(n1,n2,...)+dvec :: [Dim] -> ZMod MultiLam+dvec dims0 = permute invperm sorted where+  invperm = inversePermutation perm+  perm    = sortingPermutationDesc dims0+  dims1   = permuteList perm dims0+  (dims2,dzeros) = span (>0) dims1        -- separate zero dimensions+  sorted  = cross (dvecSorted dims2) (zeros $ length dzeros)++-- | The open stratum D(n1,n2,...), assuming @n1 >= n2 >= n3 >= ...@+dvecSorted :: [Dim] -> ZMod MultiLam+dvecSorted []     = error "dvec: empty dimension vector shouldn't appear in the algorithm"+dvecSorted [n]    = singleToMulti (open n)+dvecSorted (p:ns) = normalize (ZMod.sub big rest) where+  big  = cross (singleToMulti $ open p) (dvecSorted ns)+  rest = ZMod.sum  +    [ theta (dvec (k : interleave ds es))+    | ds <- dimTuples ns+    , let es = zipWith (-) ns ds+    , let l = sum es+    , l > 0 +    , let k = p - l+    , k >= 0+    ] ++--------------------------------------------------------------------------------+-- * Data types and instances++-- | A variable, implemented as a /de Bruijn level/ (indexing starts from 0)+newtype Var +  = DeBruijn Int      +  deriving (Eq,Ord,Show)++--------------------------------------------------------------------------------++-- | We use de Bruijn levels to index the bound variables, and ecah bound variables has a dimension+newtype Bindings +  = Bindings [Dim]+  deriving (Eq,Ord,Show)++numberOfBoundVariables :: Bindings -> Int+numberOfBoundVariables (Bindings ds) = length ds++dimensionTable :: Bindings -> Map Var Dim+dimensionTable (Bindings dims) = Map.fromList $ zip (map DeBruijn [0..]) dims++--------------------------------------------------------------------------------++-- | An expression living on @Sym^n(X)@, with free variables+newtype Single+  = Single [(Var,Int)]+  deriving (Eq,Ord,Show)++unSingle :: Single -> [(Var,Int)]+unSingle (Single ves) = ves++-- | An expression living on @Sym^{n_1}(X) x ... x Sym^{n_r}(X)@, with free variables+newtype Multi+  = Multi [Single]+  deriving (Eq,Ord,Show)++-- | A lambda expression living on @Sym^n(X)@, with variables bound to @Sym^d(X)@ with different dimensions+data SingleLam+  = SingleLam !Bindings !Single+  deriving (Eq,Ord,Show)++-- | A lambda expression living on @Sym^{n_1}(X) x ... x Sym^{n_r}(X)@, with variables bound to @Sym^d(X)@ with different dimensions+data MultiLam+  = MultiLam !Bindings !Multi+  deriving (Eq,Ord,Show)++--------------------------------------------------------------------------------++instance Pretty Bindings where+  pretty (Bindings dims) = "\\" ++ concat (zipWith f vars dims) where+    vars = map DeBruijn [0..]+    f v d = "(" ++ pretty v ++ ":S" ++ show d ++ ")"++instance Pretty Var where +  pretty (DeBruijn i) = chr (97 + i) : []++instance Pretty (Var,Int) where+  pretty (v,0) = "1"+  pretty (v,1) = pretty v+  pretty (v,e) = pretty v ++ "^" ++ show e++instance Pretty Single where+  pretty (Single ves) = intercalate "*" $ map pretty ves++instance Pretty Multi where+  pretty (Multi ts) = "[" ++ (intercalate "," $ map pretty ts) ++ "]"++instance Pretty SingleLam where+  pretty (SingleLam binds body) = "{" ++ pretty binds ++ "->" ++ pretty body ++ "}"++instance Pretty MultiLam where+  pretty (MultiLam binds body) = "{" ++ pretty binds ++ "->" ++ pretty body ++ "}"++--------------------------------------------------------------------------------++instance Degree SingleLam where+  type MultiDegree SingleLam = Int+  multiDegree (SingleLam binds (Single ves)) = sum [ (unDim $ (Map.!) dimTable v) * e | (v,e) <- ves ] where+    dimTable = dimensionTable binds+  totalDegree = multiDegree++instance Degree MultiLam where+  type MultiDegree MultiLam = [Int]+  multiDegree (MultiLam binds (Multi bodies)) = map totalDegree [ (SingleLam binds b) | b <- bodies ]+  totalDegree = sum . multiDegree++--------------------------------------------------------------------------------++instance Empty Bindings where+  empty = Bindings []++instance Empty Single where+  empty = Single []++instance Empty Multi where+  empty = Multi []++instance Empty SingleLam where+  empty = SingleLam empty empty++instance Empty MultiLam where+  empty = MultiLam empty empty++--------------------------------------------------------------------------------++-- | Shift de Bruijn levels+class Shift a where+  shift :: Int -> a -> a+  +instance Shift Var where+  shift k (DeBruijn l) = DeBruijn (k+l)++instance Shift Single where+  shift k (Single ves) = Single [ (shift k v, e) | (v,e) <- ves ]++instance Shift Multi where+  shift k (Multi terms) = Multi $ map (shift k) terms++--------------------------------------------------------------------------------++-- | Rename variables+class Rename a where+  rename :: (Var -> Var) -> a -> a++instance Rename Var where+  rename f v = f v++instance Rename (Var,Int) where+  rename f (v,e) = (f v, e)++instance Rename Single where+  rename f (Single ves) = Single $ map (rename f) ves++instance Rename Multi where+  rename f (Multi ts) = Multi $ map (rename f) ts++--------------------------------------------------------------------------------++-- | Extract the exponent of a given variable+exponentOf :: Var -> Single -> Int+exponentOf u (Single ves) = sum [ e | (v,e) <- ves , v==u ]++-- | Extract the exponent vector of a given variable+exponentVectorOf :: Var -> Multi -> [Int]+exponentVectorOf v (Multi ts) = map (exponentOf v) ts++--------------------------------------------------------------------------------++instance Normalize Single where+  normalize (Single ves) = Single $ Map.toList $ Map.fromListWith (+) ves++instance Normalize Multi where+  normalize (Multi terms) = Multi (map normalize terms) ++normalizeWithExpo :: (Rename term, Normalize term, Ord expo) => (expo -> Bool) -> (Var -> term -> expo) -> (Bindings,term) -> (Bindings,term) +normalizeWithExpo cond expo (binds,body) = (binds',body') where+  Bindings dims = binds+  vars   = map DeBruijn [0..]+  vby    = [ (v,(d,es)) | (v,d) <- zip vars dims , let es = expo v body , cond es ]+  sorted = sortOn snd vby+  dims'  = map (fst . snd) sorted+  binds' = Bindings dims'+  f v    = DeBruijn $ fromJust $ findIndex (\pair -> fst pair == v) sorted+  body'  = normalize $ rename f $ body++instance Normalize SingleLam where+  normalize (SingleLam binds body) = SingleLam binds' body' where+    (binds',body') = normalizeWithExpo (>0) exponentOf (binds,body)++instance Normalize MultiLam where+  normalize (MultiLam binds body) = MultiLam binds' body' where+    cond ds = any (>0) ds+    (binds',body') = normalizeWithExpo cond f (binds,body)+    f v = {- reverse . -} exponentVectorOf v++instance (Eq c, Num c) => Normalize (FreeMod c SingleLam) where+  normalize = ZMod.mapBase normalize++instance (Eq c, Num c) => Normalize (FreeMod c MultiLam) where+  normalize = ZMod.mapBase normalize++--------------------------------------------------------------------------------++instance SuperNormalize Multi where+  superNormalize (Multi ts) = Multi $ reverse $ dropWhile isempty $ reverse $ map normalize $ ts where+    isempty (Single xs) = null xs++instance SuperNormalize MultiLam where+  superNormalize mlam = MultiLam binds (superNormalize body) where+    (MultiLam binds body) = normalize mlam++instance (Eq c, Num c) => SuperNormalize (FreeMod c MultiLam) where+  superNormalize = ZMod.mapBase superNormalize+  +--------------------------------------------------------------------------------++instance Cross Bindings where+  cross (Bindings ds) (Bindings es) = Bindings (ds++es)+  crossInterleave = error "Bindings/crossInterleave: undefined"+  +instance Cross Multi where+  cross (Multi xs) (Multi ys) = Multi (xs++ys)+  crossInterleave (Multi xs) (Multi ys) = Multi (interleave xs ys)++instance Cross MultiLam where+  cross (MultiLam binds1 bodies1) (MultiLam binds2 bodies2) = normalize $ MultiLam binds3 bodies3 where+    n1 = numberOfBoundVariables binds1+    binds3  = binds1  `cross` binds2+    bodies3 = bodies1 `cross` (shift n1 bodies2)++  crossInterleave (MultiLam binds1 bodies1) (MultiLam binds2 bodies2) = normalize $ MultiLam binds3 bodies3 where+    n1 = numberOfBoundVariables binds1+    binds3  = binds1  `cross` binds2+    bodies3 = bodies1 `crossInterleave` (shift n1 bodies2)++instance (Eq c, Num c) => Cross (FreeMod c MultiLam) where+  cross x y = normalize $ ZMod.mulWith cross x y+  crossInterleave x y = normalize $ ZMod.mulWith crossInterleave x y++--------------------------------------------------------------------------------++instance SingleToMulti Single Multi where+  singleToMulti = Multi . (:[])++instance SingleToMulti SingleLam MultiLam where+  singleToMulti (SingleLam binds single) = MultiLam binds (Multi [single])++instance (Eq c, Num c) => SingleToMulti (FreeMod c SingleLam) (FreeMod c MultiLam) where+  singleToMulti = ZMod.mapBase singleToMulti++--------------------------------------------------------------------------------++instance Omega (Var,Int) where+  omega 0 _     = omegaZeroError +  omega k (v,d) = (v,d*k)++instance Omega Single where+  omega 0 _            = Single [] -- omegaZeroError +  omega k (Single ves) = Single $ map (omega k) ves++instance Omega Multi where+  omega 0 _          = omegaZeroError +  omega k (Multi ts) = Multi $ map (omega k) ts++instance Omega SingleLam where+  omega 0 _                      = omegaZeroError +  omega k (SingleLam binds body) = SingleLam binds (omega k body)++instance Omega MultiLam where+  omega 0 _                     = omegaZeroError +  omega k (MultiLam binds body) = MultiLam binds (omega k body)++instance (Eq c, Num c) => Omega (FreeMod c SingleLam) where+  omega 0 = omegaZeroError +  omega k = ZMod.mapBase (omega k)++instance (Eq c, Num c) => Omega (FreeMod c MultiLam) where+  omega 0 = omegaZeroError +  omega k = normalize . ZMod.mapBase (omega k)++--------------------------------------------------------------------------------++instance Omega123 Multi where+  omega123 (Multi ts) = Multi $ zipWith omega [1..] ts++instance Omega123 MultiLam where+  omega123 (MultiLam binds body) = MultiLam binds (omega123 body)++instance (Eq c, Num c) => Omega123 (FreeMod c MultiLam) where+  omega123 = normalize . ZMod.mapBase omega123++--------------------------------------------------------------------------------++instance Psi Multi Single where+  psi (Multi ts) = normalize $ Single $ concat $ map unSingle ts++instance Psi MultiLam SingleLam where+  psi (MultiLam binds body) = SingleLam binds (psi body)++instance (Eq c, Num c) => Psi (FreeMod c MultiLam) (FreeMod c SingleLam) where+  psi = normalize . ZMod.mapBase psi++instance (Eq c, Num c) => Psi [FreeMod c SingleLam] (FreeMod c SingleLam) where+  psi = normalize . psi . crossMany . map singleToMulti++--------------------------------------------------------------------------------++instance PsiEvenOdd Multi where+  psiEvenOdd (Multi ts) = normalize $ Multi $ zipWith f (evens ts) (odds ts) where+    f (Single xs) (Single ys) = Single (xs++ys)++instance PsiEvenOdd MultiLam where+  psiEvenOdd (MultiLam binds body) = MultiLam binds (psiEvenOdd body)++instance PsiEvenOdd (ZMod MultiLam) where+  psiEvenOdd = normalize . ZMod.mapBase psiEvenOdd++--------------------------------------------------------------------------------++instance Pontrjagin SingleLam where+  pontrjaginOne     = empty+  pontrjaginMul a b = psi $ cross (singleToMulti a) (singleToMulti b)++instance Pontrjagin MultiLam where+  pontrjaginOne     = empty+  pontrjaginMul a b = psiEvenOdd $ crossInterleave a' b' where+    (a',b') = extendToCommonSize (a,b)++--------------------------------------------------------------------------------++instance ExtendToCommonSize Multi where+  extendToCommonSize (Multi xs, Multi ys) = (Multi xs', Multi ys') where+    (xs',ys') = extendToCommonSize (xs,ys) ++instance ExtendToCommonSize MultiLam where+  extendToCommonSize (MultiLam as xs, MultiLam bs ys) = (MultiLam as xs', MultiLam bs ys') where+    (xs',ys') = extendToCommonSize (xs,ys) ++--------------------------------------------------------------------------------++instance Permute Multi where+  permute p (Multi ts) = Multi (permuteList p ts)++instance Permute MultiLam where+  permute p (MultiLam binds multi) = MultiLam binds (permute p multi)++instance Permute (ZMod MultiLam) where+  permute p = ZMod.mapBase (permute p)++--------------------------------------------------------------------------------++instance Theta Multi where+  theta (Multi (u:us)) = Multi (a:bs) where+    a = psi $ Multi (u : odds us)+    bs = zipWith f (evens us) (odds us)+    f (Single u) (Single v) = normalize $ Single (u ++ v)++instance Theta MultiLam where+  theta (MultiLam binds body) = MultiLam binds (theta body)++instance Theta (ZMod MultiLam) where+  theta = normalize . ZMod.mapBase theta++--------------------------------------------------------------------------------
+ src/Math/RootLoci/Motivic/Classes.hs view
@@ -0,0 +1,182 @@++{-# LANGUAGE FlexibleInstances, TypeSynonymInstances,+             MultiParamTypeClasses, FunctionalDependencies, +             TypeFamilies, DataKinds, GeneralizedNewtypeDeriving+  #-}+module Math.RootLoci.Motivic.Classes where++--------------------------------------------------------------------------------++import Data.Char+import Data.List+import Data.Ord+import Data.Maybe++import GHC.TypeLits++import Data.Map.Strict (Map)+import qualified Data.Map.Strict as Map++import qualified Math.Algebra.Polynomial.FreeModule as ZMod +import Math.Algebra.Polynomial.FreeModule (ZMod,QMod,FreeMod)+import Math.Algebra.Polynomial.Pretty++import Math.Combinat.Classes hiding (empty)+import Math.Combinat.Tuples+import Math.Combinat.Partitions+import Math.Combinat.Permutations hiding (permute)++import Math.Algebra.Polynomial.Class+import Math.Algebra.Polynomial.Monomial.Indexed ++import Math.RootLoci.Misc.Common++--------------------------------------------------------------------------------+-- * Dimensions++-- | A dimension (@d@ in @Sym^d(X)@)+newtype Dim +  = Dim Int+  deriving (Eq,Ord,Show,Num)++unDim :: Dim -> Int+unDim (Dim d) = d++dimVector :: Partition -> [Dim]+dimVector = map Dim . exponentVector++dimTuples :: [Dim] -> [[Dim]]+dimTuples  +  = (map . map) Dim+  . tuples'+  . map unDim ++--------------------------------------------------------------------------------+-- * Classes++-- | Degree of something+class Degree a where+  type MultiDegree a :: *+  totalDegree :: a -> Int+  multiDegree :: a -> MultiDegree a++instance (KnownNat n) => Degree (XS v n) where+  type MultiDegree (XS v n) = [Int]+  totalDegree = totalDegXS+  multiDegree = xsToExponents++--------------------------------------------------------------------------------++class Empty a where+  empty :: a++instance Empty [a] where+  empty = []++instance Empty (Maybe a) where+  empty = Nothing++instance Empty Int where+  empty = 0++instance KnownNat n => Empty (XS v n) where+  empty = emptyXS++--------------------------------------------------------------------------------++-- | Normalize terms and lambdas+class Normalize a where+  normalize :: a -> a++-- | This is a hack because there is some issue when this is included in normalize that i don't want to debug right now+class SuperNormalize a where+  superNormalize :: a -> a +  +--------------------------------------------------------------------------------++-- | Exterior (or cross) product+class Cross a where+  cross :: a -> a -> a+  crossMany :: [a] -> a+  crossMany = foldl1' cross+  crossInterleave :: a -> a -> a       -- ^ interleaved cross product of vectors++instance Cross [a] where+  cross     = (++)+  crossMany = concat +  crossInterleave xs ys = interleave xs ys++-------------------------------------------------------------------------------++-- | Conversion from scalar to vector+class SingleToMulti s t | s->t, t->s where+  singleToMulti :: s -> t++--------------------------------------------------------------------------------++omegaZeroError :: a+omegaZeroError = error "Omega^0 should not appear in the algorithm"++-- | replicating points (power map)+class Omega a where+  omega :: Int -> a -> a++--------------------------------------------------------------------------------++-- | @Omega^{1,2,3,...}@+class Omega123 a where+  omega123 :: a -> a++--------------------------------------------------------------------------------++-- | The merging (or multiplication) map+class Psi t s | t->s where+  psi :: t -> s++--------------------------------------------------------------------------------++-- | The interleaved pairwise merging map+class PsiEvenOdd t where+  psiEvenOdd :: t -> t++--------------------------------------------------------------------------------++-- | Pontrjagin ring+class Pontrjagin a where+  pontrjaginOne :: a +  pontrjaginMul :: a -> a -> a++--------------------------------------------------------------------------------++class ExtendToCommonSize a where+  extendToCommonSize :: (a,a) -> (a,a)++instance Empty a => ExtendToCommonSize [a] where+  extendToCommonSize (xs,ys) = (xs',ys') where+    a = length xs+    b = length ys+    n = max a b+    xs' = xs ++ replicate (n-a) empty+    ys' = ys ++ replicate (n-b) empty++--------------------------------------------------------------------------------++-- | Applying permutations+class Permute a where+  permute :: Permutation -> a -> a++instance Permute [a] where+  permute = permuteList++--------------------------------------------------------------------------------++-- | The custom pusforward @Theta@ appearing in the algorithm+--+-- we subdivide the input as @[z;x1,y1,x2,y2,x3,y3...]@+-- and then duplicate each of @y1,y2,y3...@, then combine the left copies of @y_i@ with+-- @z@, and the right copies of @y_i@ with the corresponding @x_i@-s, resulting in+-- @[z*y1*y2*...;x1*y1,x2*y2,...]@+class Theta a where+  theta :: a -> a       --mypf :: a -> a++--------------------------------------------------------------------------------
+ src/Math/RootLoci/Motivic/Homology.hs view
@@ -0,0 +1,173 @@+
+-- | Motivic classes in homology
+
+{-# LANGUAGE 
+      DataKinds, KindSignatures, TypeOperators, ScopedTypeVariables, MultiParamTypeClasses,
+      TypeFamilies, FlexibleContexts, TypeSynonymInstances, FlexibleInstances
+  #-}
+module Math.RootLoci.Motivic.Homology where
+
+--------------------------------------------------------------------------------
+
+import Data.Array
+
+import Data.Proxy
+import GHC.TypeLits
+
+import Unsafe.Coerce as Unsafe
+
+import Math.Combinat.Classes
+import Math.Combinat.Numbers
+import Math.Combinat.Partitions
+
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
+
+import qualified Math.Algebra.Polynomial.Monomial.Infinite as XInf
+import qualified Math.Algebra.Polynomial.Monomial.Indexed  as XS
+
+import Math.Algebra.Polynomial.Multivariate.Infinite as XInf
+import Math.Algebra.Polynomial.Multivariate.Indexed  as XS
+
+import Math.Algebra.Polynomial.Class
+import Math.Algebra.Polynomial.Univariate
+import Math.Algebra.Polynomial.Pretty
+
+import Math.RootLoci.Geometry.Cohomology ( G(..) )
+
+import Math.RootLoci.Misc.Common
+import Math.RootLoci.Motivic.Abstract as Abstract
+import Math.RootLoci.Motivic.Classes
+
+import Math.RootLoci.CSM.Aluffi
+
+--------------------------------------------------------------------------------
+
+interpretSingleLam :: (Dim -> KRing Integer) -> SingleLam -> KRing Integer
+interpretSingleLam symFun (SingleLam (Bindings bindings) (Single body)) = result where
+  syms   = map symFun bindings
+  result = psiAny $ crossKs $ map f body 
+  f (DeBruijn i, e) = omegaH e (syms!!i)  
+
+csmPn :: Dim -> KRing Integer
+csmPn (Dim d) = Uni $ ZMod.fromList [ (U k , binomial (d+1) (k+1)) | k<-[0..d] ]
+
+-- | CSM class in homology
+csm_xlam_P1 :: Partition -> KRing Integer
+csm_xlam_P1 part = Uni $ ZMod.flatMap f (Abstract.xlam part) where
+  f x = unUni (interpretSingleLam csmPn x)
+
+-- | CSM class in cohomology (via Poincare duality)
+csm_xlam_P1_cohom :: Partition -> ZMod.ZMod G 
+csm_xlam_P1_cohom part = ZMod.mapBase f $ unUni $ csm_xlam_P1 part  where
+  n   = weight part
+  f (U k) = G (n-k)
+
+-- | Compares Aluffi's CSM formula to the motivic algorithm (up to partitions of size @n@)
+test_motivic_csm_vs_aluffi :: Int -> Bool
+test_motivic_csm_vs_aluffi n = and
+  [ csm_xlam_P1_cohom part == aluffiOpenCSM part
+  | k<-[1..n] , part <- partitions k 
+  ]
+
+--------------------------------------------------------------------------------
+
+instance SingleToMulti (KRing c) (GRing c) where
+  singleToMulti = embedInf
+
+instance Ring c => Psi (GRing c) (KRing c) where
+  psi = psiAny
+
+instance Ring c => Omega (KRing c) where
+  omega = omegaH
+
+--------------------------------------------------------------------------------
+
+type KRing c   = Univariate c "u"     -- ^ @lim_n H_*(Sym^n(P1))@
+type GRing c   = XInf.Poly  c "u"     -- ^ @lim_{n1,n2,...} H_*(Sym^n1(P1) x Sym^n2(P1) x ... )@
+
+-- fuck Haskell's type level naturals, they are completely unusable
+-- type NRing c k = XS.Poly    c "u" k   -- ^ @lim_{n1,...,nk} H_*(Sym^n1(P1) x ... x Sym^nk(P1) )@
+
+embedInf :: KRing c -> GRing c
+embedInf = XInf.Poly . ZMod.unsafeMapBase f . unUni where
+  f (U k) = if k > 0 then XInf [k] else XInf []
+
+project1 :: GRing c -> KRing c
+project1 = Uni . ZMod.unsafeMapBase f . XInf.unPoly where
+  f (XInf ns) = U $ head ns
+
+delta2 :: Ring c => KRing c -> GRing c
+delta2 = XInf.Poly . ZMod.flatMap f . unUni where
+  f (U k) = ZMod.sum [ ZMod.generator (XInf [i,k-i]) | i<-[0..k] ] 
+
+deltaN :: Ring c => Int -> KRing c -> GRing c
+deltaN n input 
+  | n <= 0    = error "deltaN: n <= 0"
+  | n == 1    = embedInf input
+  | n == 2    = delta2   input
+  | otherwise = unify1st2nd
+              $ mapCoeffP delta2 
+              $ separate1st (deltaN (n-1) input)
+  where
+    mapCoeffP f = XInf.Poly . ZMod.mapCoeff f . XInf.unPoly
+
+psi2 :: Ring c => GRing c -> KRing c
+psi2 = Uni . ZMod.mapMaybeBaseCoeff f . XInf.unPoly where
+  f (XInf xs) = let [i,j] = take 2 (xs ++ [0,0])
+                in  Just ( U (i+j) , fromInteger (binomial (i+j) i) )
+
+psiNaive :: (Ring c) => Int -> GRing c -> KRing c
+psiNaive n input 
+  | n <= 0    = error "psiN: n <= 0"
+  | n == 1    = project1 input
+  | n == 2    = psi2     input
+  | otherwise = psi2 $ kkToG2 $ psiNaive (n-1) $ separate1st input
+
+psiAny :: Ring c => GRing c -> KRing c
+psiAny = Uni . ZMod.mapMaybeBaseCoeff f . XInf.unPoly where
+  f (XInf is) = Just (U (sum is) , fromInteger (multinomial is))
+
+omegaNaive :: Ring c => Int -> KRing c -> KRing c
+omegaNaive n = psiAny . deltaN n
+
+omegaH :: Ring c => Int -> KRing c -> KRing c
+omegaH d = Uni . ZMod.mapMaybeBaseCoeff f . unUni where
+  f (U k) = Just (U k, fromIntegral d ^ k)
+
+separate1st :: forall c n. (Ring c) => GRing c -> GRing (KRing c) 
+separate1st = XInf.Poly . ZMod.mapMaybeBaseCoeff g . ZMod.mapCoeff f . XInf.unPoly where
+  f c  = scalarP c :: KRing c
+  g (XInf (k:ns)) = Just (XInf ns, c) where
+    c = monomP (U k)
+
+unify1st :: forall c n. (Ring c) => GRing (KRing c) -> GRing c 
+unify1st = XInf.Poly . ZMod.fromList . concatMap f . ZMod.toList . XInf.unPoly where
+  f (XInf xs , Uni poly) = [ (XInf (k:xs) , c)  | (U k, c) <- ZMod.toList poly ]
+
+unify1st2nd :: forall c n. (Ring c) => GRing (GRing c) -> GRing c 
+unify1st2nd = XInf.Poly . ZMod.fromList . concatMap f . ZMod.toList . XInf.unPoly where
+  f (XInf xs , XInf.Poly poly) = [ (XInf (kl++xs) , c)  | (XInf kl0, c) <- ZMod.toList poly , let kl = take 2 (kl0++[0,0]) ]
+
+crossKs :: Ring c => [KRing c] -> GRing c
+crossKs = XInf.Poly . ZMod.productWith empty cross . map (ZMod.mapBase sing) . map unUni where
+  sing (U k) = XInf [k]
+  cross (XInf as) (XInf bs) = XInf (as++bs)
+  empty = XInf []
+
+kkToG2 :: Ring c => KRing (KRing c) -> GRing c 
+kkToG2 = XInf.Poly . ZMod.fromList . concatMap f . ZMod.toList . unUni where
+  f (U k , Uni poly) = [ (XInf [k,l] , c)  | (U l, c) <- ZMod.toList poly ]
+
+unifyKK :: Ring c => KRing (KRing c) -> KRing c 
+unifyKK = Uni . ZMod.fromList . concatMap f . ZMod.toList . unUni where
+  f (U k , Uni poly) = [ (U (k+l) , c)  | (U l, c) <- ZMod.toList poly ]
+
+--------------------------------------------------------------------------------
+
+{-
+deltaN :: Num c => Int -> KRing c -> GRing c
+deltaN 0 = error "deltaN: 0"
+deltaN 1 = embed
+deltaN 2 = delta2
+deltaN 
+-}
+ src/Math/RootLoci/Segre/Equivariant.hs view
@@ -0,0 +1,137 @@++-- | The equivariant Segre-Schwartz-MacPherson classes+--+-- We can recover the Segre-SM classes by dividing the CSM class+-- by the total Chern class of the tangent bundle of the (smooth)+-- ambient variety.+--+-- The Segre-SM class is useful because it behaves well wrt. pullback.+--++{-# LANGUAGE ScopedTypeVariables, BangPatterns #-}+module Math.RootLoci.Segre.Equivariant where++--------------------------------------------------------------------------------++import Math.Combinat.Classes+import Math.Combinat.Numbers+import Math.Combinat.Sign+import Math.Combinat.Compositions+import Math.Combinat.Partitions.Integer+import Math.Combinat.Numbers.Series++import Data.Array (Array)+import Data.Array.IArray++import Math.RootLoci.Algebra+import Math.RootLoci.Geometry+import Math.RootLoci.Misc++import qualified Math.Algebra.Polynomial.FreeModule as ZMod++import Math.RootLoci.CSM.Equivariant.Umbral       -- this is the fastest one++--------------------------------------------------------------------------------+-- * The total Chern class++-- | Total Chern class of the representation @Sym^m C^2@ +--+-- > c(Sym^m C^2) = \prod_{i=0}^m (1 + i*a + (m-i)*b)+--+affTotalChernClass :: ChernBase base => Int -> ZMod base+affTotalChernClass m = select1 (total , abToChern total) where+  total = product [ 1 + w | w <- affineWeights m ]++-- | Parts of the total Chern class, separated by degree+affTotalChernClassByDegree :: ChernBase base => Int -> [ZMod base]+affTotalChernClassByDegree = elems . separateGradedParts . affTotalChernClass++--------------------------------------------------------------------------------+-- * Inverse of the total Chern class++-- | Infinite power series expansion (by degree) of the multiplicative+-- inverse of the total Chern class of the representation @Sym^m C^2@+--+-- This is just the sum of all complete symmetric polynomials of the sums.+--+recipTotalChernClass :: forall base. ChernBase base => Int -> [ZMod base]+recipTotalChernClass m = pseries' coeffs where++  coeffs      = zip (map ZMod.neg prodWeights) [1..]+  prodWeights = tail (affTotalChernClassByDegree m)++-- | Another implementation of 'recipTotalChernClass'+recipTotalChernClass2 :: forall base. ChernBase base => Int -> [ZMod base]+recipTotalChernClass2 m = integralReciprocalSeries (affTotalChernClassByDegree m) where++-- | A third, very slow implementation of 'recipTotalChernClass'+recipTotalChernClassSlow :: forall base. ChernBase base => Int -> [ZMod base]+recipTotalChernClassSlow m = select2 (list , map abToChern list) where++  weights = affineWeights m+  list    = [ grade d | d <- [0..] ]++  grade :: Int -> ZMod AB+  grade d = negateIfOdd d +          $ ZMod.sum (map mkProduct $ compositions (m+1) d)++  mkProduct es = ZMod.product [ (weightPowers!i) !! e | (i,e) <- zip [0..m] es ]++  -- much faster to cache to powers of the weights!+  weightPowers :: Array Int [ZMod AB]+  weightPowers = listArray (0,m) [ wtPowList (weights !! i) | i <- [0..m] ] ++  wtPowList :: ZMod AB -> [ZMod AB]+  wtPowList w = go 1 where { go !x = x : go (x*w) }+++--------------------------------------------------------------------------------++-- | Divides a polynomial with the total chern class. As the result is an+-- infinite power series, we return it's homogeneous parts as an infinite list.+--+-- Equivalent (but should be faster than) to:+--+-- > separeteGradedParts what `mulSeries` (recipTotalChernClass m)+-- +divideByTotalChernClass :: ChernBase base => Int -> ZMod base -> [ZMod base]+divideByTotalChernClass m what = convolveWithPSeries' coeffs numerList where++  numerArr  = separateGradedParts what+  numerList = elems numerArr++  coeffs      = zip (map ZMod.neg prodWeights) [1..]+  prodWeights = tail (affTotalChernClassByDegree m)++-- | Another, very slow implementation of 'divideByTotalChernClass'+divideByTotalChernClassSlow :: ChernBase base => Int -> ZMod base -> [ZMod base]+divideByTotalChernClassSlow m what = final where+  (0,n)     = bounds numerArr+  numerArr  = separateGradedParts what+  denomList = recipTotalChernClassSlow m+  final     = [ part d | d <- [0..] ]+  part deg  = ZMod.sum +    [ (numerArr ! i) * (denomList !! j)   +    | j <- [ max 0 (deg-n) .. deg ] +    , let i = deg - j +    ]++--------------------------------------------------------------------------------+-- * Affine Segre-SM classes++-- | Affine equivariant Segre-SM class of the open strata+affineOpenSegreSM :: ChernBase base => Partition -> [ZMod base]+affineOpenSegreSM part = divideByTotalChernClass m (umbralAffOpenCSM part) where+  m = weight part++-- | Affine equivariant Segre-SM class of the zero orbit+affineZeroSegreSM :: ChernBase base => Int -> [ZMod base]+affineZeroSegreSM m = divideByTotalChernClass m (affineZeroCSM m)++-- | Affine equivariant Segre-SM class of the closure of the strata (including the zero orbit!)+affineClosedSegreSM :: ChernBase base => Partition -> [ZMod base]+affineClosedSegreSM part = divideByTotalChernClass m (umbralAffClosedCSM part) where+  m = weight part++--------------------------------------------------------------------------------+
test/Tests/CSM/Equivariant.hs view
@@ -1,8 +1,7 @@  -- | Tests for the equivariant CSM class --{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, PackageImports #-} module Tests.CSM.Equivariant where  --------------------------------------------------------------------------------@@ -13,7 +12,7 @@ import Math.Combinat.Partitions.Integer import Math.Combinat.Partitions.Set -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.Algebra import Math.RootLoci.Geometry
test/Tests/CSM/Projective.hs view
@@ -1,7 +1,7 @@  -- | Tests for the non-equivarant CSM classes -{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, PackageImports #-} module Tests.CSM.Projective where  --------------------------------------------------------------------------------@@ -12,7 +12,7 @@ import Math.Combinat.Partitions.Integer import Math.Combinat.Partitions.Set -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.Algebra import Math.RootLoci.Geometry
test/Tests/Pushforward.hs view
@@ -2,7 +2,7 @@ -- | Tests for the push-forward  -{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, PackageImports #-} module Tests.Pushforward where  --------------------------------------------------------------------------------@@ -12,7 +12,7 @@ import Math.Combinat.Classes import Math.Combinat.Partitions -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.Algebra import Math.RootLoci.Geometry
test/Tests/RootVsClass/Check.hs view
@@ -1,7 +1,7 @@  -- | Checking polymorphic functions -{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, ScopedTypeVariables #-}+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, ScopedTypeVariables, PackageImports #-} module Tests.RootVsClass.Check where  --------------------------------------------------------------------------------@@ -15,7 +15,7 @@ import Math.RootLoci.Misc import Math.RootLoci.Geometry.Cohomology  -import qualified Math.RootLoci.Algebra.FreeMod as ZMod+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod  import Math.RootLoci.CSM.Equivariant.Umbral ( ST )