aboutsummaryrefslogtreecommitdiff
path: root/Math/Combinatorics/PitmanTransform.hs
diff options
context:
space:
mode:
authorJeshiba <baconp@gmail.com>2017-07-13 12:27:51 -0400
committerJeshiba <baconp@gmail.com>2017-07-13 12:27:51 -0400
commit513bc5e8933d4e16fe8eeb2d2f997a12a6a96a4a (patch)
treeaa2eae9e4d879659bb917ad16d2d8531bd7d4aa8 /Math/Combinatorics/PitmanTransform.hs
parent4a01a7a38363b80289576690f303cc926846a2cd (diff)
Checkpoint
Diffstat (limited to 'Math/Combinatorics/PitmanTransform.hs')
-rw-r--r--Math/Combinatorics/PitmanTransform.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/Math/Combinatorics/PitmanTransform.hs b/Math/Combinatorics/PitmanTransform.hs
new file mode 100644
index 0000000..19a437f
--- /dev/null
+++ b/Math/Combinatorics/PitmanTransform.hs
@@ -0,0 +1,29 @@
+--import Math.Combinatorics.RootSystem hiding (s)
+import RootSystem hiding (s)
+import YoungTableaux
+import RobinsonSchensted
+import Math.Algebra.Field.Base (Q)-- for Q
+import Math.Algebra.LinearAlgebra
+import Prelude hiding ( (*>), Word )
+import qualified Data.List as L
+
+--pitman :: (Fractional a, Ord a) => Type -> Int -> [a] -> [a]
+pitman :: Type -> Int -> [[Q]] -> [[Q]]
+pitman t n xs = foldr s xs (longestElement $ simpleSystem t n)
+
+s :: [Q] -> [[Q]] -> [[Q]]
+--s :: (Fractional a, Ord a) => [a] -> [a] -> [a]
+s alpha f = f <<->> fmap (*> alpha) (cumMin $ dynkinIndex alpha <$> f)
+
+--cumMin :: Ord a => [a] -> [a]
+cumMin :: [Q] -> [Q]
+cumMin = scanl1 min
+
+cumSum :: [Q] -> [Q]
+cumSum = scanl1 (+)
+
+word2Path :: Word Int -> [[Q]]
+word2Path (W xs) = L.transpose $ cumSum <$> [0:(indicator (==k) xs) | k <- [1..maximum xs]]
+
+indicator :: (a -> Bool) -> [a] -> [Q]
+indicator f xs = (\x -> if f x then 1 else 0) <$> xs