From e82050aeb53d6aabcce7a8f27659e2e8bb8fb4bc Mon Sep 17 00:00:00 2001 From: Jeshiba Date: Mon, 17 Jul 2017 16:18:14 -0400 Subject: documentation and prop_longestElement. - Added more documentation in RootSystem.hs - Added a test for longestElement. --- Math/Combinatorics/RootSystem.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'Math') diff --git a/Math/Combinatorics/RootSystem.hs b/Math/Combinatorics/RootSystem.hs index 9ed7c89..716819c 100644 --- a/Math/Combinatorics/RootSystem.hs +++ b/Math/Combinatorics/RootSystem.hs @@ -66,10 +66,12 @@ s :: [Q] -> [Q] -> [Q] s alpha beta = beta <-> (dynkinIndex alpha beta) *> alpha +-- |The indices of the simple roots in the reduced decomposition of the longest elements longestElementIndex :: SimpleSystem -> [Int] longestElementIndex ss = (+1) <$> fromJust <$> flip elemIndex ss <$> longestElement ss +-- |The reduced decomposition of the longest elements longestElement :: SimpleSystem -> [[Q]] longestElement ss = longestElement' [] posRoots where @@ -95,6 +97,8 @@ positiveRoots' cm = positiveRoots'' [] (iMx $ length cm) | null npr = pr | otherwise = positiveRoots'' (pr ++ npr) (S.toList . S.fromList $ mconcat $ zipWith newRootIndices npr (pIndex pr cm <$> npr)) +-- |calculate the successors of ri in the simple string +-- |given root index ri and its p-vector pi newRootIndices :: [Q] -> [Q] -> [[Q]] newRootIndices ri pi = (ri <+>) <$> (go pi [] 1) where go :: [Q] -> [Int] -> Int -> [[Q]] @@ -102,9 +106,12 @@ newRootIndices ri pi = (ri <+>) <$> (go pi [] 1) go (x:xs) ys k = go xs (if x == 0 then ys else ys ++ [k]) (k + 1) +-- |given the already-found positive roots allRootIndices, +-- |the transposed Cartan Matrix cm and the root index, calculate its p-vector pIndex :: [[Q]] -> [[Q]] -> [Q] -> [Q] pIndex allRootIndices cm rootIndex = (mIndex rootIndex allRootIndices) <-> (dynkinIndex' rootIndex cm) +-- |given the root index and all already-found positive roots, calculate its m-vector mIndex :: [Q] -> [[Q]] -> [Q] mIndex rootIndex allRootIndices = if isMultBasis rootIndex @@ -151,6 +158,7 @@ numRoots F 4 = 48 numRoots G 2 = 12 +-- |Auxilieary function to transform an Int to a Root system for quick check int2TypeInt :: Int -> (Type, Int) int2TypeInt n | n > 108 = int2TypeInt (n `mod` 108 + 1) @@ -196,6 +204,11 @@ allRoots ss = S.toList $ closure S.empty (S.fromList ss) where boundary' = S.fromList [s alpha beta | alpha <- ss, beta <- S.toList boundary] S.\\ interior' in closure interior' boundary' +-- | Test that the length of the longest element is half of the number of roots +prop_longestElement :: Int -> Bool +prop_longestElement n = let (t, m) = int2TypeInt n in + numRoots t m == 2 * (length $ longestElement $ simpleSystem t m) + -- Old code in HaskellForMaths {-- -- WEYL GROUP -- cgit v1.2.3