{-# LANGUAGE BangPatterns #-} {-# LANGUAGE ScopedTypeVariables #-} module Math.Algebra.Jack.Internal ( Partition , jackCoeffP , jackCoeffQ , jackCoeffC , jackSymbolicCoeffC , jackSymbolicCoeffPinv , jackSymbolicCoeffQinv , _betaratio , _betaRatioOfSprays , _isPartition , _N , _fromInt , skewSchurLRCoefficients , isSkewPartition ) where import Prelude hiding ((*), (+), (-), (/), (^), (*>), product, sum, fromIntegral, fromInteger, recip) import Algebra.Additive ( (+), (-), sum ) import Algebra.Field ( (/), recip ) import qualified Algebra.Field as AlgField import Algebra.Ring ( (*), product, one , (^), fromInteger ) import qualified Algebra.Ring as AlgRing import Algebra.ToInteger ( fromIntegral ) import Data.List.Index ( iconcatMap ) import qualified Data.Map.Strict as DM import Math.Algebra.Hspray ( RatioOfSprays, (%:%) , Spray, (.^) , lone, unitSpray , FunctionLike (..) ) import qualified Math.Combinat.Partitions.Integer as MCP import Math.Combinat.Tableaux.LittlewoodRichardson ( _lrRule ) type Partition = [Int] _isPartition :: Partition -> Bool _isPartition :: Partition -> Bool _isPartition [] = Bool True _isPartition [Int x] = Int x Int -> Int -> Bool forall a. Ord a => a -> a -> Bool > Int 0 _isPartition (Int x:xs :: Partition xs@(Int y:Partition _)) = (Int x Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >= Int y) Bool -> Bool -> Bool && Partition -> Bool _isPartition Partition xs _diffSequence :: [Int] -> [Int] _diffSequence :: Partition -> Partition _diffSequence = Partition -> Partition forall {a}. C a => [a] -> [a] go where go :: [a] -> [a] go (a x:ys :: [a] ys@(a y:[a] _)) = (a xa -> a -> a forall a. C a => a -> a -> a -a y) a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] -> [a] go [a] ys go [a x] = [a x] go [] = [] _dualPartition :: Partition -> Partition _dualPartition :: Partition -> Partition _dualPartition [] = [] _dualPartition Partition xs = Int -> Partition -> Partition -> Partition forall {t}. (C t, Num t) => t -> Partition -> Partition -> [t] go Int 0 (Partition -> Partition _diffSequence Partition xs) [] where go :: t -> Partition -> Partition -> [t] go !t i (Int d:Partition ds) Partition acc = t -> Partition -> Partition -> [t] go (t it -> t -> t forall a. C a => a -> a -> a +t 1) Partition ds (Int dInt -> Partition -> Partition forall a. a -> [a] -> [a] :Partition acc) go t n [] Partition acc = t -> Partition -> [t] forall {t}. (C t, Num t) => t -> Partition -> [t] finish t n Partition acc finish :: t -> Partition -> [t] finish !t j (Int k:Partition ks) = Int -> t -> [t] forall a. Int -> a -> [a] replicate Int k t j [t] -> [t] -> [t] forall a. [a] -> [a] -> [a] ++ t -> Partition -> [t] finish (t jt -> t -> t forall a. C a => a -> a -> a -t 1) Partition ks finish t _ [] = [] _ij :: Partition -> ([Int], [Int]) _ij :: Partition -> (Partition, Partition) _ij Partition lambda = ( (Int -> Int -> Partition) -> Partition -> Partition forall a b. (Int -> a -> [b]) -> [a] -> [b] iconcatMap (\Int i Int a -> Int -> Int -> Partition forall a. Int -> a -> [a] replicate Int a (Int i Int -> Int -> Int forall a. C a => a -> a -> a + Int 1)) Partition lambda, (Int -> Partition) -> Partition -> Partition forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap (\Int a -> [Int 1 .. Int a]) ((Int -> Bool) -> Partition -> Partition forall a. (a -> Bool) -> [a] -> [a] filter (Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >Int 0) Partition lambda) ) _convParts :: AlgRing.C b => [Int] -> ([b], [b]) _convParts :: forall b. C b => Partition -> ([b], [b]) _convParts Partition lambda = ((Int -> b) -> Partition -> [b] forall a b. (a -> b) -> [a] -> [b] map Int -> b forall a b. (C a, C b) => a -> b fromIntegral Partition lambda, (Int -> b) -> Partition -> [b] forall a b. (a -> b) -> [a] -> [b] map Int -> b forall a b. (C a, C b) => a -> b fromIntegral (Partition -> Partition _dualPartition Partition lambda)) _N :: [Int] -> [Int] -> Int _N :: Partition -> Partition -> Int _N Partition lambda Partition mu = Partition -> Int forall a. C a => [a] -> a sum (Partition -> Int) -> Partition -> Int forall a b. (a -> b) -> a -> b $ (Int -> Int -> Int) -> Partition -> Partition -> Partition forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith Int -> Int -> Int forall a. C a => a -> a -> a (*) Partition mu Partition prods where prods :: Partition prods = (Int -> Int) -> Partition -> Partition forall a b. (a -> b) -> [a] -> [b] map (\Int i -> Partition -> Int forall a. C a => [a] -> a product (Partition -> Int) -> Partition -> Int forall a b. (a -> b) -> a -> b $ Int -> Partition -> Partition forall a. Int -> [a] -> [a] drop Int i ((Int -> Int) -> Partition -> Partition forall a b. (a -> b) -> [a] -> [b] map (Int -> Int -> Int forall a. C a => a -> a -> a +Int 1) Partition lambda)) [Int 1 .. Partition -> Int forall a. [a] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length Partition lambda] hookLengths :: AlgRing.C a => Partition -> a -> ([a], [a]) hookLengths :: forall a. C a => Partition -> a -> ([a], [a]) hookLengths Partition lambda a alpha = ([a] lower, [a] upper) where (Partition i, Partition j) = Partition -> (Partition, Partition) _ij Partition lambda ([a] lambda', [a] lambdaConj') = Partition -> ([a], [a]) forall b. C b => Partition -> ([b], [b]) _convParts Partition lambda upper :: [a] upper = (Int -> Int -> a) -> Partition -> Partition -> [a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ([a] -> [a] -> Int -> Int -> a fup [a] lambdaConj' [a] lambda') Partition i Partition j where fup :: [a] -> [a] -> Int -> Int -> a fup [a] x [a] y Int ii Int jj = [a] x[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int jjInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int ii a -> a -> a forall a. C a => a -> a -> a + a alpha a -> a -> a forall a. C a => a -> a -> a * ([a] y[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int iiInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral (Int jj Int -> Int -> Int forall a. C a => a -> a -> a - Int 1)) lower :: [a] lower = (Int -> Int -> a) -> Partition -> Partition -> [a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ([a] -> [a] -> Int -> Int -> a flow [a] lambdaConj' [a] lambda') Partition i Partition j where flow :: [a] -> [a] -> Int -> Int -> a flow [a] x [a] y Int ii Int jj = [a] x[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int jjInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - (Int -> a forall a b. (C a, C b) => a -> b fromIntegral (Int -> a) -> Int -> a forall a b. (a -> b) -> a -> b $ Int ii Int -> Int -> Int forall a. C a => a -> a -> a - Int 1) a -> a -> a forall a. C a => a -> a -> a + a alpha a -> a -> a forall a. C a => a -> a -> a * ([a] y[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int iiInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int jj) _productHookLengths :: AlgRing.C a => Partition -> a -> a _productHookLengths :: forall a. C a => Partition -> a -> a _productHookLengths Partition lambda a alpha = [a] -> a forall a. C a => [a] -> a product [a] lower a -> a -> a forall a. C a => a -> a -> a * [a] -> a forall a. C a => [a] -> a product [a] upper where ([a] lower, [a] upper) = Partition -> a -> ([a], [a]) forall a. C a => Partition -> a -> ([a], [a]) hookLengths Partition lambda a alpha jackCoeffC :: AlgField.C a => Partition -> a -> a jackCoeffC :: forall a. C a => Partition -> a -> a jackCoeffC Partition lambda a alpha = a alphaa -> Integer -> a forall a. C a => a -> Integer -> a ^Integer k a -> a -> a forall a. C a => a -> a -> a * Integer -> a forall a. C a => Integer -> a fromInteger ([Integer] -> Integer forall a. C a => [a] -> a product [Integer 2 .. Integer k]) a -> a -> a forall a. C a => a -> a -> a * a -> a forall a. C a => a -> a recip a jlambda where k :: Integer k = Int -> Integer forall a b. (C a, C b) => a -> b fromIntegral (Partition -> Int forall a. C a => [a] -> a sum Partition lambda) jlambda :: a jlambda = Partition -> a -> a forall a. C a => Partition -> a -> a _productHookLengths Partition lambda a alpha jackCoeffP :: AlgField.C a => Partition -> a -> a jackCoeffP :: forall a. C a => Partition -> a -> a jackCoeffP Partition lambda a alpha = a forall a. C a => a one a -> a -> a forall a. C a => a -> a -> a / [a] -> a forall a. C a => [a] -> a product [a] lower where ([a] lower, [a] _) = Partition -> a -> ([a], [a]) forall a. C a => Partition -> a -> ([a], [a]) hookLengths Partition lambda a alpha jackCoeffQ :: AlgField.C a => Partition -> a -> a jackCoeffQ :: forall a. C a => Partition -> a -> a jackCoeffQ Partition lambda a alpha = a forall a. C a => a one a -> a -> a forall a. C a => a -> a -> a / [a] -> a forall a. C a => [a] -> a product [a] upper where ([a] _, [a] upper) = Partition -> a -> ([a], [a]) forall a. C a => Partition -> a -> ([a], [a]) hookLengths Partition lambda a alpha symbolicHookLengthsProducts :: forall a. (Eq a, AlgRing.C a) => Partition -> (Spray a, Spray a) symbolicHookLengthsProducts :: forall a. (Eq a, C a) => Partition -> (Spray a, Spray a) symbolicHookLengthsProducts Partition lambda = ([Spray a] -> Spray a forall a. C a => [a] -> a product [Spray a] lower, [Spray a] -> Spray a forall a. C a => [a] -> a product [Spray a] upper) where alpha :: Spray a alpha = Int -> Spray a forall a. C a => Int -> Spray a lone Int 1 :: Spray a (Partition i, Partition j) = Partition -> (Partition, Partition) _ij Partition lambda ([a] lambda', [a] lambdaConj') = Partition -> ([a], [a]) forall b. C b => Partition -> ([b], [b]) _convParts Partition lambda upper :: [Spray a] upper = (Int -> Int -> Spray a) -> Partition -> Partition -> [Spray a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ([a] -> [a] -> Int -> Int -> Spray a fup [a] lambdaConj' [a] lambda') Partition i Partition j where fup :: [a] -> [a] -> Int -> Int -> Spray a fup [a] x [a] y Int ii Int jj = ([a] x[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int jjInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int ii) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b +> (([a] y[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int iiInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral (Int jj Int -> Int -> Int forall a. C a => a -> a -> a - Int 1)) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b *^ Spray a alpha) lower :: [Spray a] lower = (Int -> Int -> Spray a) -> Partition -> Partition -> [Spray a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ([a] -> [a] -> Int -> Int -> Spray a flow [a] lambdaConj' [a] lambda') Partition i Partition j where flow :: [a] -> [a] -> Int -> Int -> Spray a flow [a] x [a] y Int ii Int jj = ([a] x[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int jjInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral (Int ii Int -> Int -> Int forall a. C a => a -> a -> a - Int 1)) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b +> (([a] y[a] -> Int -> a forall a. HasCallStack => [a] -> Int -> a !!(Int iiInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int jj) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b *^ Spray a alpha) symbolicHookLengthsProduct :: (Eq a, AlgRing.C a) => Partition -> Spray a symbolicHookLengthsProduct :: forall a. (Eq a, C a) => Partition -> Spray a symbolicHookLengthsProduct Partition lambda = Spray a lower Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^*^ Spray a upper where (Spray a lower, Spray a upper) = Partition -> (Spray a, Spray a) forall a. (Eq a, C a) => Partition -> (Spray a, Spray a) symbolicHookLengthsProducts Partition lambda jackSymbolicCoeffC :: forall a. (Eq a, AlgField.C a) => Partition -> RatioOfSprays a jackSymbolicCoeffC :: forall a. (Eq a, C a) => Partition -> RatioOfSprays a jackSymbolicCoeffC Partition lambda = ((Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int factorialk) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b *^ Spray a alphaSpray a -> Int -> Spray a forall b. (FunctionLike b, C b) => b -> Int -> b ^**^Int k) Spray a -> Spray a -> RatioOfSprays a forall a. Spray a -> Spray a -> RatioOfSprays a %:% Spray a jlambda where alpha :: Spray a alpha = Int -> Spray a forall a. C a => Int -> Spray a lone Int 1 :: Spray a k :: Int k = Partition -> Int forall a. C a => [a] -> a sum Partition lambda factorialk :: Int factorialk = Partition -> Int forall a. C a => [a] -> a product [Int 2 .. Int k] jlambda :: Spray a jlambda = Partition -> Spray a forall a. (Eq a, C a) => Partition -> Spray a symbolicHookLengthsProduct Partition lambda jackSymbolicCoeffPinv :: (Eq a, AlgField.C a) => Partition -> Spray a jackSymbolicCoeffPinv :: forall a. (Eq a, C a) => Partition -> Spray a jackSymbolicCoeffPinv Partition lambda = Spray a lower where (Spray a lower, Spray a _) = Partition -> (Spray a, Spray a) forall a. (Eq a, C a) => Partition -> (Spray a, Spray a) symbolicHookLengthsProducts Partition lambda jackSymbolicCoeffQinv :: (Eq a, AlgField.C a) => Partition -> Spray a jackSymbolicCoeffQinv :: forall a. (Eq a, C a) => Partition -> Spray a jackSymbolicCoeffQinv Partition lambda = Spray a upper where (Spray a _, Spray a upper) = Partition -> (Spray a, Spray a) forall a. (Eq a, C a) => Partition -> (Spray a, Spray a) symbolicHookLengthsProducts Partition lambda _betaratio :: AlgField.C a => Partition -> Partition -> Int -> a -> a _betaratio :: forall a. C a => Partition -> Partition -> Int -> a -> a _betaratio Partition kappa Partition mu Int k a alpha = a alpha a -> a -> a forall a. C a => a -> a -> a * a prod1 a -> a -> a forall a. C a => a -> a -> a * a prod2 a -> a -> a forall a. C a => a -> a -> a * a prod3 where mukm1 :: Int mukm1 = Partition mu Partition -> Int -> Int forall a. HasCallStack => [a] -> Int -> a !! (Int kInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) t :: a t = Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int k a -> a -> a forall a. C a => a -> a -> a - a alpha a -> a -> a forall a. C a => a -> a -> a * Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int mukm1 u :: [a] u = (Int -> Int -> a) -> Partition -> Partition -> [a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith (\Int s Int kap -> a t a -> a -> a forall a. C a => a -> a -> a + a forall a. C a => a one a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int s a -> a -> a forall a. C a => a -> a -> a + a alpha a -> a -> a forall a. C a => a -> a -> a * Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int kap) [Int 1 .. Int k] Partition kappa v :: [a] v = (Int -> Int -> a) -> Partition -> Partition -> [a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith (\Int s Int m -> a t a -> a -> a forall a. C a => a -> a -> a - Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int s a -> a -> a forall a. C a => a -> a -> a + a alpha a -> a -> a forall a. C a => a -> a -> a * Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int m) [Int 1 .. Int kInt -> Int -> Int forall a. C a => a -> a -> a -Int 1] Partition mu w :: [a] w = (Int -> Int -> a) -> Partition -> Partition -> [a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith (\Int s Int m -> Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int m a -> a -> a forall a. C a => a -> a -> a - a t a -> a -> a forall a. C a => a -> a -> a - a alpha a -> a -> a forall a. C a => a -> a -> a * Int -> a forall a b. (C a, C b) => a -> b fromIntegral Int s) [Int 1 .. Int mukm1Int -> Int -> Int forall a. C a => a -> a -> a -Int 1] (Partition -> Partition _dualPartition Partition mu) prod1 :: a prod1 = [a] -> a forall a. C a => [a] -> a product ([a] -> a) -> [a] -> a forall a b. (a -> b) -> a -> b $ (a -> a) -> [a] -> [a] forall a b. (a -> b) -> [a] -> [b] map (\a x -> a x a -> a -> a forall a. C a => a -> a -> a / (a x a -> a -> a forall a. C a => a -> a -> a + a alpha a -> a -> a forall a. C a => a -> a -> a - a forall a. C a => a one)) [a] u prod2 :: a prod2 = [a] -> a forall a. C a => [a] -> a product ([a] -> a) -> [a] -> a forall a b. (a -> b) -> a -> b $ (a -> a) -> [a] -> [a] forall a b. (a -> b) -> [a] -> [b] map (\a x -> (a x a -> a -> a forall a. C a => a -> a -> a + a alpha) a -> a -> a forall a. C a => a -> a -> a / a x) [a] v prod3 :: a prod3 = [a] -> a forall a. C a => [a] -> a product ([a] -> a) -> [a] -> a forall a b. (a -> b) -> a -> b $ (a -> a) -> [a] -> [a] forall a b. (a -> b) -> [a] -> [b] map (\a x -> (a x a -> a -> a forall a. C a => a -> a -> a + a alpha) a -> a -> a forall a. C a => a -> a -> a / a x) [a] w _betaRatioOfSprays :: forall a. (Eq a, AlgField.C a) => Partition -> Partition -> Int -> RatioOfSprays a _betaRatioOfSprays :: forall a. (Eq a, C a) => Partition -> Partition -> Int -> RatioOfSprays a _betaRatioOfSprays Partition kappa Partition mu Int k = ((Spray a x Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^*^ Spray a num1 Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^*^ Spray a num2 Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^*^ Spray a num3) Spray a -> Spray a -> RatioOfSprays a forall a. Spray a -> Spray a -> RatioOfSprays a %:% (Spray a den1 Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^*^ Spray a den2 Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^*^ Spray a den3)) where mukm1 :: Int mukm1 = Partition mu Partition -> Int -> Int forall a. HasCallStack => [a] -> Int -> a !! (Int kInt -> Int -> Int forall a. C a => a -> a -> a -Int 1) x :: Spray a x = Int -> Spray a forall a. C a => Int -> Spray a lone Int 1 :: Spray a u :: [Spray a] u = (Int -> Int -> Spray a) -> Partition -> Partition -> [Spray a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ( \Int s Int kap -> (Int -> BaseRing (Spray a) forall a b. (C a, C b) => a -> b fromIntegral (Int -> BaseRing (Spray a)) -> Int -> BaseRing (Spray a) forall a b. (a -> b) -> a -> b $ Int k Int -> Int -> Int forall a. C a => a -> a -> a - Int s Int -> Int -> Int forall a. C a => a -> a -> a + Int 1) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b +> ((Int -> BaseRing (Spray a) forall a b. (C a, C b) => a -> b fromIntegral (Int -> BaseRing (Spray a)) -> Int -> BaseRing (Spray a) forall a b. (a -> b) -> a -> b $ Int kap Int -> Int -> Int forall a. C a => a -> a -> a - Int mukm1) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b *^ Spray a x) ) [Int 1 .. Int k] Partition kappa v :: [Spray a] v = (Int -> Int -> Spray a) -> Partition -> Partition -> [Spray a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ( \Int s Int m -> (Int -> BaseRing (Spray a) forall a b. (C a, C b) => a -> b fromIntegral (Int -> BaseRing (Spray a)) -> Int -> BaseRing (Spray a) forall a b. (a -> b) -> a -> b $ Int k Int -> Int -> Int forall a. C a => a -> a -> a - Int s) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b +> ((Int -> BaseRing (Spray a) forall a b. (C a, C b) => a -> b fromIntegral (Int -> BaseRing (Spray a)) -> Int -> BaseRing (Spray a) forall a b. (a -> b) -> a -> b $ Int m Int -> Int -> Int forall a. C a => a -> a -> a - Int mukm1) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b *^ Spray a x) ) [Int 1 .. Int kInt -> Int -> Int forall a. C a => a -> a -> a -Int 1] Partition mu w :: [Spray a] w = (Int -> Int -> Spray a) -> Partition -> Partition -> [Spray a] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith ( \Int s Int m -> (Int -> BaseRing (Spray a) forall a b. (C a, C b) => a -> b fromIntegral (Int -> BaseRing (Spray a)) -> Int -> BaseRing (Spray a) forall a b. (a -> b) -> a -> b $ Int m Int -> Int -> Int forall a. C a => a -> a -> a - Int k) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b +> ((Int -> BaseRing (Spray a) forall a b. (C a, C b) => a -> b fromIntegral (Int -> BaseRing (Spray a)) -> Int -> BaseRing (Spray a) forall a b. (a -> b) -> a -> b $ Int mukm1 Int -> Int -> Int forall a. C a => a -> a -> a - Int s) BaseRing (Spray a) -> Spray a -> Spray a forall b. FunctionLike b => BaseRing b -> b -> b *^ Spray a x) ) [Int 1 .. Int mukm1Int -> Int -> Int forall a. C a => a -> a -> a -Int 1] (Partition -> Partition _dualPartition Partition mu) num1 :: Spray a num1 = [Spray a] -> Spray a forall a. C a => [a] -> a product [Spray a] u den1 :: Spray a den1 = [Spray a] -> Spray a forall a. C a => [a] -> a product ([Spray a] -> Spray a) -> [Spray a] -> Spray a forall a b. (a -> b) -> a -> b $ (Spray a -> Spray a) -> [Spray a] -> [Spray a] forall a b. (a -> b) -> [a] -> [b] map (\Spray a p -> Spray a p Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^+^ Spray a x Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^-^ Spray a forall a. C a => Spray a unitSpray) [Spray a] u num2 :: Spray a num2 = [Spray a] -> Spray a forall a. C a => [a] -> a product ([Spray a] -> Spray a) -> [Spray a] -> Spray a forall a b. (a -> b) -> a -> b $ (Spray a -> Spray a) -> [Spray a] -> [Spray a] forall a b. (a -> b) -> [a] -> [b] map (\Spray a p -> Spray a p Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^+^ Spray a x) [Spray a] v den2 :: Spray a den2 = [Spray a] -> Spray a forall a. C a => [a] -> a product [Spray a] v num3 :: Spray a num3 = [Spray a] -> Spray a forall a. C a => [a] -> a product ([Spray a] -> Spray a) -> [Spray a] -> Spray a forall a b. (a -> b) -> a -> b $ (Spray a -> Spray a) -> [Spray a] -> [Spray a] forall a b. (a -> b) -> [a] -> [b] map (\Spray a p -> Spray a p Spray a -> Spray a -> Spray a forall b. (FunctionLike b, C b) => b -> b -> b ^+^ Spray a x) [Spray a] w den3 :: Spray a den3 = [Spray a] -> Spray a forall a. C a => [a] -> a product [Spray a] w _fromInt :: (AlgRing.C a, Eq a) => Int -> a _fromInt :: forall a. (C a, Eq a) => Int -> a _fromInt Int k = Int k Int -> a -> a forall a. (C a, Eq a) => Int -> a -> a .^ a forall a. C a => a AlgRing.one skewSchurLRCoefficients :: Partition -> Partition -> DM.Map Partition Int skewSchurLRCoefficients :: Partition -> Partition -> Map Partition Int skewSchurLRCoefficients Partition lambda Partition mu = (Partition -> Partition) -> Map Partition Int -> Map Partition Int forall k2 k1 a. Ord k2 => (k1 -> k2) -> Map k1 a -> Map k2 a DM.mapKeys Partition -> Partition toPartition (Partition -> Partition -> Map Partition Int _lrRule Partition lambda' Partition mu') where toPartition :: MCP.Partition -> Partition toPartition :: Partition -> Partition toPartition (MCP.Partition Partition part) = Partition part fromPartition :: Partition -> MCP.Partition fromPartition :: Partition -> Partition fromPartition Partition part = Partition -> Partition MCP.Partition Partition part lambda' :: Partition lambda' = Partition -> Partition fromPartition Partition lambda mu' :: Partition mu' = Partition -> Partition fromPartition Partition mu isSkewPartition :: Partition -> Partition -> Bool isSkewPartition :: Partition -> Partition -> Bool isSkewPartition Partition lambda Partition mu = Partition -> Bool _isPartition Partition lambda Bool -> Bool -> Bool && Partition -> Bool _isPartition Partition mu Bool -> Bool -> Bool && (Int -> Bool) -> Partition -> Bool forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool all (Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >= Int 0) ((Int -> Int -> Int) -> Partition -> Partition -> Partition forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith (-) Partition lambda Partition mu)