A generalization to H2 (Part 2)

December 27, 2011

in which I layout some foundation for a process of translating from one half of a 2D polytope to the other.

For some simplification in the formulas, I will index  the vertices (\mu_i) of a representative of half of a 2D polytope (in the affine or hyperbolic case) by the following set of surreal numbers: \mathbb N/2\cup \{\omega+\mathbb Z\}\cup\{2\omega-\mathbb N/2\} with the following conventions:

  • \mu_0=0,
  • for i\in\mathbb N,
    • \mu_{i+\frac 1 2}-\mu_i = a_iR^i\alpha_1 where \alpha_1 is a simple root and R=r_2r_1 as in the previous post,
    • \mu_{i+1}-\mu_{i+\frac 1 2}=a_{i+\frac 1 2}R^ir_2\alpha_2,
    • \mu_{2\omega-i}-\mu_{2\omega-i-\frac 1 2}=a_{2\omega-i}(r_1r_2)^i\alpha_2, and
    • \mu_{2\omega-i-\frac 1 2}-\mu_{2\omega-i-1}=a_{2\omega-i-\frac 1 2}(r_1r_2)^ir_1\alpha_1, and
  • for i\in\mathbb Z, \lambda_i=\mu_{\omega+i+1}-\mu_{\omega+i} is an imaginary root or zero.

Note that for a sequence \bar\lambda comprised of imaginary roots and zeros the equivalence defined in the last post will always freely shift the zeroes around,  so we may take a number of conventions regarding its support (which must be finite).  I will leave it to the future to determine whether it is more convenient in different contexts to have, e.g,. supp\bar\lambda=[0,l] or [-l,0] or 2[0,l], etc.

With this notation I define:

G_k=\langle \alpha_1,\mu_{k+\frac 1 2}\rangle+\langle (C-I)\alpha_1,\mu_{k-\frac 1 2}\rangle

where C is the Cartan matrix and matrix multiplication and \langle,\rangle are understood with the convention that \alpha_i is the ith basis element.

If max(G_k)>0 let k be the smallest to achieve this maximum.  Then we set \bar a_0=max(G_k), \bar a_i=a_{i-\frac 1 2} for 0<i<k, i\in \mathbb N\cup\{2\omega-\mathbb N\} and \eta_i=r_1\lambda_i for i\in\mathbb Z, \omega+i<k then inductively consider the smaller polytope.

In a fashion similar to that described by Tingley for 2D affine polytopes we may handle the cases when max(G_k)\le0 but at this point I think I may need to delay particulars to a third installment.

A generalization to H2 (Part 1)

December 23, 2011

Work with Tingley and Kamnitzer this past year has wrapped up with a proof of my polytopes for \mathfrak{sl}_2, generalized to \mathfrak{sl}_n and provided a number of other characterizations.  With those in mind I have been working on a generalization to hyperbolic Kac-Moody algebras.  Computations have corroborated an initial conjecture for H_2 which I will attempt to lay out in this and at least one more post.

The real parts of the polytopes are exactly as in the affine case – similar to the finite case but enumerated by a \bar W rather than W.  Describing the imaginary side is a bit trickier and there may be a number of ways to do it accurately, but I believe the following method will have some advantages over others.

Definition: For sequences of positive imaginary roots of length l, \bar\lambda=\lambda_1\dots\lambda_l, \bar\eta=\eta_1\dots\eta_l and an integer i,  I denote \bar\lambda\rightsquigarrow_i\bar\eta (resp. \bar\lambda\twoheadrightarrow_i\bar\eta, \bar\lambda\hookrightarrow_i\bar\eta) if:

  • for k<i or k>i+1 \lambda_k=\eta_k,
  • R\lambda_i=\eta_{i+1},
  • \lambda_i+\lambda_{i+1}=\eta_i+\eta_{i+1}, and
  • det(\eta_i|\lambda_i)\ge 0 and det(\eta_{i+1}|\lambda_{i+1})\ge 0
    (resp.  det(\eta_i|\lambda_i)\ge 0 and det(\eta_{i+1}|\lambda_{i+1})< 0,
    det(\eta_i|\lambda_i)< 0 and det(\eta_{i+1}|\lambda_{i+1})\ge 0)

Where R= r_2r_1 and det(\eta_i|\lambda_i) means the determinant of the linear transformation that maps \alpha_1\mapsto\eta_i,\alpha_2\mapsto\lambda_i.

More Definitions:

  • For \bar\lambda,\bar\eta as above we say \bar\lambda\sim_i\bar\eta if either \bar\lambda\rightsquigarrow_i\bar\eta or \bar\eta\rightsquigarrow_i\bar\lambda,
  • by \bar\lambda\sim\bar\eta we denote the transitive extension of all these relations,
  • we say \bar\lambda\subset_i\bar\eta if either \bar\lambda\hookrightarrow_i\bar\eta or \bar\eta\twoheadrightarrow_i\bar\lambda, and
  • we say [\bar\lambda]_\sim\subseteq[\bar\eta]_\sim if \bar\lambda'\subset_i\bar\eta' for some representatives \bar\lambda'\sim\bar\lambda, \bar\eta'\sim\bar\eta, and some 1\le i\le l-1.

The imaginary part of polytopes are enumerated by \{[\bar\lambda] | ([\bar\lambda]\subseteq[\bar\eta])\Rightarrow([\bar\lambda]=[\bar\eta])\}.  This completely generalizes the affine case where [\bar\lambda]\subseteq[\bar\eta] never happens and [\bar\lambda] comprises all permutations of \bar\lambda.

Data for $latex L\mathfrak{sl}_2$ Levels 2 and 3 (up to energy 6)

June 25, 2010

I was going to enter the table data directly here but it was a bit of a pain.  Instead I have published a google spread sheet with some data for L\mathfrak{sl}_2.

These calculations were done using universal enveloping algebras.  These are the numbers my polytope calculus needs to match if it is accurate.  There was an issue with computer round-off when calculating high energy levels which I think I have corrected. Just in case anything above level 3 should be considered tentative.

Python code snipets (Part 2)

June 17, 2010

My first post had some code from the program I wrote to calculate my new polytopes.  This post will about a program I wrote to calculate weight space dimensions via universal enveloping algebra.  I think I’ve covered a lot of the math already so I’ll try to get to the simple mechanics as soon as possible.

The core function Eval() (I realize now its very badly named) should takes as input a word in the universal enveloping algebra (represented as a sequence of signed integers) which is assumed to have weight zero, and two parameters h and K. Its output is how that word acts on the generator of a Verma module where h and K act by those parameters.

The main body of the program generates a list of words (and their anti-words) that have a particular weight (anti-weight). It then populates a matrix with the outputs of Eval() under fixed h and K and takes the rank.

Based on my current debugging statistics generating the list of words and taking the rank of the matrix happens rather quickly – the bottle neck is the Eval(). So maybe some extra eyes will help me to optimize it.

Essentially the rules break down as this:

  • Eval(A+[n],h,K)=0 if n<0.
  • Eval(A+[0],h,K)=h*Eval(A,h,K).
  • Eval(A+[n,m]+C,h,K)=Eval(A+[m,n]+C,h,K)+X*Eval(A+[m+n]+C,h,K)+Y*K*Eval(A+C,h,K) where X and Y depend only on m and n and can be calculated in constant time.

My algorithm for Eval() uses a recursive algorithm:

  1. Choose an integer in the list which is non-positive.
  2. Repeatedly apply rule 3 to move it all the way to the right.
  3. Each application of rule 3 spawns (up to) 2 new calls to Eval()
    • one with a word of length n-1,
    • one with a word of length n-2.

Here’s the code:

def Eval (X,h,K):
    #First we see if X or an equivalent input has already been calculated
    #EvalDict is a hash where we store previously calculated values
    Y=[-x for x in X]
    Y.reverse()
    if str(X) in EvalDict:
        return EvalDict[str(X)]
    elif str(Y) in EvalDict:
        return EvalDict[str(Y)]
    elif len(X)==0:
        return 1
    else:#word has not been previously Evaluated
        o=0 #initialize output value
        Y=min(X) #"1. choose a non-positive element" This is probably not the most efficient choice.
        if Y>0:
            return 0 #something is wrong! should throw.
        else:
            A=X[:X.index(Y)]
            C=X[X.index(Y)+1:]
            for i in range(len(C)): #"2. Repeatedly apply rule 3"
                (Z,n,m)=Brack([Y,C[i]]) #Operates in constant time
                D=C[:i]
                E=C[i+1:]
                if n!=0:
                    o+=n*Eval(A+D+[Z]+E,h,K)
                if m*K!=0:
                    o+=m*K*Eval(A+D+E,h,K)
            if Y==0 and h!=0:
                o+=h*Eval(A+C,h,K)
            EvalDict[str(X)]=o #Store result for latter recovery
            return o

Adding EvalDict dramatically sped up the calculation time. But I estimate it increases in size exponentially with the size of the words being stored.

Python Code Snipets (Part 1)

June 14, 2010

Finally I get around to posting some python code.  First I will post some snippets from my “polytope calculator” for L\mathfrak{sl}_2.  Part 2 will have some snippets from a program I’m writing to check my results.

I’m trying to figure out the best way to post the whole code.  I was going to use Launchpad (since I used quickly to write the program) but I’ve been having some trouble with that.  So I might end up just uploading the *.py to either my umich or math.northwestern accounts.

First I define an object called a “polytope half” that uses three lists of integers to represents a single path through the polytope.  (In the two dimensional case each polytope only has two paths so one constitutes a polytope half). There are several methods implemented (or partially implemented) for this object including “__add__” which gives the convex hull of to paths. The “FIX ME” is because I haven’t yet implemented the merger of the side partitions. (It shouldn’t be too difficult, I simply haven’t gotten around to it.)

class Polytopehalf:
    """Only 'half' if the polytope is 2 dimensionsl.  Really an i-lusztig datum
    though we don't specify i.  For sl3 this should be 3 non-negative integers.
    for Lsl2 this should be 2 sequences (each of arbitrary finite length) of
    non-negative integers and a multiset of positive integers.

    This program only implements for Lsl2.

    """
    def __init__(self,bottom=[],top=[],side=[]):
        self.bottom = bottom
        self.top = top
        self.side = side

    def weight(self):
        """returns the projecton of the weight to the sl2 component
        assumes the polytope half is the right hand side"""
        return sum(self.bottom)-sum(self.top)

    def increment(self):
        """advancing in the crystal structure - relative to the chosen i-Lustig path"""
        self.top=[0]+self.top
        self.top[-1]+=1

    def flip(self):
        """tells how this i-Lustig path effects other paths during iteration
        this process may insert a negative number!"""
        self.top=[0]+self.top
        self.bottom.append(-2*self.weight()-self.top.pop())

    def __add__(self,other):
        """takes the convex hull of the two halfs -- currently expects the paths align at top and bottom
        this needs to be fixed because this is *not* typical """
        Out=Polytopehalf()

        #Pad to be the same length.
        diff=len(self.top)-len(other.top)
        if diff>0:
            other.top=[0]*(diff+1)+other.top
            self.top=[0]+self.top
        else:
            self.top=[0]*(1-diff)+self.top
            other.top=[0]+other.top

        #calculate displacements this is necessary as the tops of the polytopes do not align
        d1=0
        d2=0
        for i in range(len(self.bottom)):
            d1-=self.bottom[-i-1]*i
            d2-=self.bottom[-i-1]
        for i in range(len(self.top)):
            d1-=self.top[-i-1]*(i+1)
            d2+=self.top[-i-1]
        for i in range(len(other.bottom)):
            d1+=other.bottom[-i-1]*i
            d2+=other.bottom[-i-1]
        for i in range(len(other.top)):
            d1+=other.top[-i-1]*(i+1)
            d2-=other.top[-i-1]
        for i in range(len(self.side)):
            d1-=self.side[-i-1]*(i+1)
        for i in range(len(other.side)):
            d1+=other.side[-i-1]*(i+1)
        Disp1=[0,0]
        Disp2=[d1,d1+d2]
        for i in range(len(self.top)):
            Disp1.append(2*Disp1[-1]+self.top[-i-1]-Disp1[-2])
            Disp2.append(2*Disp2[-1]+other.top[-i-1]-Disp2[-2])
        D1=Disp1[-1]-Disp1[-2]
        D2=Disp2[-1]-Disp2[-2]
        while (Disp1[-1]-Disp2[-1])*(D1-D2)<=0 and (D1-D2)0:
            Disp1.append(Disp1[-1]+D1)
            Disp2.append(Disp2[-1]+D2)
        Disp=map(max,Disp1,Disp2)

        for i in range(1,len(Disp)-1):
            Out.top=[Disp[i-1]+Disp[i+1]-2*Disp[i]]+Out.top

        #Pad to the same length
        diff=len(self.bottom)-len(other.bottom)
        if diff>0:
            other.bottom=[0]*(diff+1)+other.bottom
            self.bottom=[0]+self.bottom
        else:
            self.bottom=[0]*(1-diff)+self.bottom
            other.bottom=[0]+other.bottom

        Disp1=[0,0]
        Disp2=[0,0]
        for i in range(len(self.bottom)):
            Disp1.append(2*Disp1[-1]+self.bottom[-i-1]-Disp1[-2])
            Disp2.append(2*Disp2[-1]+other.bottom[-i-1]-Disp2[-2])
        D1=Disp1[-1]-Disp1[-2]
        D2=Disp2[-1]-Disp2[-2]
        while (Disp1[-1]-Disp2[-1])*(D1-D2)<=0 and (D1-D2)0:
            Disp1.append(Disp1[-1]+D1)
            Disp2.append(Disp2[-1]+D2)
        Disp=map(max,Disp1,Disp2)

        for i in range(1,len(Disp)-1):
            Out.bottom=[Disp[i-1]+Disp[i+1]-2*Disp[i]]+Out.bottom

        if sum(self.bottom)>sum(other.bottom):
            Out.side=self.side
        elif sum(self.bottom)<sum(other.bottom):
            Out.side=other.side
        elif sum(self.bottom)==sum(other.bottom):
            b1=0
            b2=0
            p1=0
            p2=0
            for i in range(len(self.bottom)):
                b1+=self.bottom[-i-1]*i
                b2+=other.bottom[-i-1]*i
            for i in range(len(self.side)):
                p1+=self.side[-i-1]*(i+1)
            for i in range(len(other.side)):
                p2+=other.side[-i-1]*(i+1)
            p=max(b1+p1,b2+p2)-min(b1,b2)
            Out.side=[p] #FIXME

        #Trim unnecessary zeros
        Out.top.reverse()
        while len(Out.top) and Out.top[-1]==0:
            Out.top.pop()
        Out.top.reverse()
        Out.bottom.reverse()
        while len(Out.bottom) and Out.bottom[-1]==0:
            Out.bottom.pop()
        Out.bottom.reverse()

        return Out

I also create a full “polytope” class that contains two polytope halves (“Left” and “Right”) and a method for retrieving all the “points” of a polytope by going round the perimeter. An unfortunate side effect of doing things this way is that python stores lists as pointers so copying a polytope (and not merely creating another name that points to the same data) is a bit of a pain.

Inside my main instance I have two functions “itereate left” and “iterate right” linked to buttons on the GUI:

def iterate_right(self,button):
    #increment
    self.Polytope.Left.increment()
    temp=copy.deepcopy(self.Polytope.Left)

    #reflect
    temp.flip()

    #convex hull
    self.Polytope.Right+=temp

    self.builder.get_object("drawingarea1").queue_resize()

This method of incrementing, reflecting and taking convex hull is proven to work for \mathfrak{sl}_n and conjectured to work for L\mathfrak{sl}_2. The current polytope being diplayed in window is “self.Polytope”. Since iterating changes the polytope I get the drawing area to refresh by sending it a “queue_resize” signal.

Useful Lie algebra links

June 8, 2010

some links I wish I had a year ago:

I just found them in a 2000 abstract by Charles Cochet.

Of course I would find this *after* spending all weekend writing my own program to do such calculations. (Of course my own program is specifically for the affine case L\mathfrak{sl}_2.)

Speaking of which I should post the polytope calculator I wrote as proof of concept for my thesis. The thing is I used Ubuntu’s quickly to create it and I’m not sure which scripts are strictly necessary to make it run (though, theoretically I should be able to publish a .deb quickly).

A remark on a problem from my undergrad

November 6, 2009

Sometime, I think early, in my years at University of Michigan. I discovered somehow the following phenomenon.

Begin with any positive integer a_1=a_2 then define for n\ge 2 let a_{n+1}=a_n+c_n where a_n=b_n\times n+c_n, 0\le c_n  <n.  If ever b_n=c_n then b_N=c_N=b_n, \forall n>N In fact, it would seem that, no matter which number you start with this will always happen.

For example if you begin with a_1=1 it takes 397 steps to stabalize at a_397=97\times 397 + 97. On the other hand if you begin with a_1=3 then a_2=1\times 2+1 so a_3=1\times 3 + 1 etc. In otherwords, sometimes it may happen soon, sometimes it may take rather a long time.

Only recently I realized that the possibility that this always stabilizes should not be very surprising. Suppose that prior to stability the value \frac{c_n}{n} behaved randomly. If b_n<n then there would be a \frac1n chance that c_n=b_n. Since a_n grows by no more than n, at some point we must have a_N<N^2 and so b_n<n, \forall n>N. At that point, if we haven’t already stabilized the probability that we eventually stabilize is \sum_{n=N}^\infty \frac1n\prod_{m=N}^{n-1}\frac{m-1}{m}. Noting that the partial sums of this series are \frac {M}{N+M-1} we deduce that the limit is equal to 1. In otherwords the probability of never stabilizing is zero.

Second Calculation level=rank=2

August 8, 2009

This time we will try to find the quiver variety components corresponding to the four figures:
4Lsl2basiselements
Found in the level two \mathfrak{sl}_2 representation weight diagram:
Lsl2example

If my level-rank duality calculations are correct (very similar to those from last post) the dimension vectors will be \mathbf{w}=(1,1),\mathbf{v}=(2,2).

As before we have a_1\neq 0 \neq b_2 and a_2=0=b_1 by the “limit” condition. Thus we can again deduce that x\overline x=\overline y y and \overline x x=y\overline y by the \mu^{-1}(0) condition. The limit condition additionally tells us that each of these compositions, and the composition \overline x\cdot \overline y, must be nilpotent. This might be sufficient to satisfy the limit condition — technically we should require that any loop involving at least one bar must be nilpotent.

So the only thing left to answer is the “stability” condition. I’m still working on this but I believe there are two basic ways the stability could be satisfied:(1) there is a path beginning with a_1 and ending at b_2 such that the partial paths give a basis for the whole space (see below for an example) or (2) there are two paths from a_1 to b_2 who together span the whole space.

Example: one way to satisfy the stability condition is if a_1(1),xa_1(1),yxa_1(1) and xyxa_1(1) form a basis for V and if b_2xyxa_1(1)\neq 0. In that case I have used the sage notebook (sagenb.org) to apply the composition and nilpotency conditions to get four subcases:

Subcase 1:

x=\left(\begin{matrix}0 & 1\\1 & 0\end{matrix}\right), \overline{y}=\left(\begin{matrix}\overline y_{11} & 0\\-\overline y_{11}y_{21} & 0\end{matrix}\right)
y=\left(\begin{matrix}0 & 0\\y_{21} & 1\end{matrix}\right), \overline{x}=\left(\begin{matrix}0 & 0\\ 0 & 0\end{matrix}\right)

Subcase 2:

x=\left(\begin{matrix}0 & 1\\1 & 0\end{matrix}\right), \overline{y}=\left(\begin{matrix}\overline y_{11} & \overline y_{12}\\ \overline y_{12} & 0\end{matrix}\right)
y=\left(\begin{matrix}0 & 0\\ 0 & 1\end{matrix}\right), \overline{x}=\left(\begin{matrix}0 & 0\\ 0 & \overline y_{12}\end{matrix}\right)

Subcase 3:

x=\left(\begin{matrix}0 & 1\\ 1 & 0\end{matrix}\right), \overline{y}=\left(\begin{matrix}\overline y_{11} & \frac{1}{2}\overline y_{11}y_{21}\\ -\frac{1}{2}\overline y_{11}y_{21} & -\frac{1}{4}\overline y_{11}y_{21}^{2}\end{matrix}\right)
y=\left(\begin{matrix}-\frac{1}{4}y_{21}^{2} & 0\\ y_{21} & 1\end{matrix}\right), \overline{x}=\left(\begin{matrix}-\frac{1}{8}y_{21}^{3}\overline y_{11} & -\frac{1}{4}\overline y_{11}y_{21}^{2}\\ \frac{1}{4}\overline y_{11}y_{21}^{2} & \frac{1}{2}\overline y_{11}y_{21}\end{matrix}\right)

Subcase 4:

x=\left(\begin{matrix}0 & 1\\ 1 & 0\end{matrix}\right), \overline{y}=\left(\begin{matrix}0 & 0\\ 0 & 0\end{matrix}\right)
y=\left(\begin{matrix}y_{11} & 0\\ y_{21} & 1\end{matrix}\right), \overline{x}=\left(\begin{matrix}0 & 0\\ 0 & 0\end{matrix}\right)

Where the basis for writing the matrices is chosen to be the basis mentioned above.

On the other hand if we consider modules for which the path x\overline x x generates a basis we only get two subcases:

Subcase 1:

x=\left(\begin{matrix}0 & 1\\ 1 & 0\end{matrix}\right), \overline{y}=\left(\begin{matrix}\overline y_{11}\neq0 & 0\\ 0 & 0\end{matrix}\right)
y=\left(\begin{matrix}0 & \frac 1 {\overline y_{11}}\\ \frac 1 {\overline y_{11}} & y_{22}\end{matrix}\right), \overline{x}=\left(\begin{matrix}0 & 0\\ 0 & 1\end{matrix}\right)

Subcase 2:

x=\left(\begin{matrix}0 & 1\\ 1 & 0\end{matrix}\right), \overline{y}=\left(\begin{matrix}\overline y_{11} & \overline y_{12}\neq0\\ \overline y_{12} & 0\end{matrix}\right)
y=\left(\begin{matrix}0 & 0\\ 0 & \frac 1 {\overline y_{12}}\end{matrix}\right), \overline{x}=\left(\begin{matrix}0 & 0\\ 0 & 1\end{matrix}\right)

(Notice that this subcase and subcase 2 above intersect when \overline y_12=1.)

But for the path \overline yyx there will be only one case:

x=\left(\begin{matrix}0 & -\frac{y_{11}}{\overline{x}_{12}^{2}}\\ 1 & \frac{y_{11}}{\overline{x}_{12}}\end{matrix}\right), \overline{y}=\left(\begin{matrix}\frac{\overline{x}_{12}}{y_{11}} & 1\\ 0 & 0\end{matrix}\right)
y=\left(\begin{matrix}y_{11}\neq0 & 0\\ -\overline{x}_{12} & 1\end{matrix}\right), \overline{x}=\left(\begin{matrix}0 & \overline{x}_{12}\neq0\\ 0 & -\frac{\overline{x}_{12}^{2}}{y_{11}}\end{matrix}\right)

I was on going to do all possible paths — but I begin to realize this isn’t a good way to approach things. For starters I don’t have a good idea when these subcases lie on the same component of the quiver variety.

Calculation when level=rank=2

July 27, 2009

I will use the formula on the top of page 35 from Nakajima’s “Quiver Varieties and Branching”:
\mathbf{w}=\sum w_i\Lambda_i = \sum \Lambda_{\mu_p}; \mathbf{w}-\mathbf{v}=\sum w_i\Lambda_i - v_i\alpha_i =\overline{\sp{t}\lambda}+t\delta^Y.
Where the first “t” in the second equation indicates transposing (according to the process described on page 33) the generalized young diagram \lambda and the second “t” is given by the formula (on page 34):
t=\langle d^X,\bar\mu\rangle-\langle d,M(\mu)\rangle.
d^Y, \delta^Y, d^X, \delta^X are suitable choices for “d” and “\delta” in affine \tilde{L\mathfrak{sl}_2} (which in this case is on “both sides” of the level-rank duality).
And \langle d, M(\mu)\rangle is (I believe) the coefficient of M in the formula for d(M) found near the bottom of page 32.

My goal is to find the cycles corresponding to the first two triangles in my list of polytopes so I use:
\mu=\delta^X+\Lambda_0+\Lambda_1
\overline\lambda=\overline{\sp{t}\lambda}=\Lambda_0+\Lambda_1
\mu_1=0, \mu_1=-1
Some of the notation is very confusing, I understand. I’m sorry, I don’t know what to do with it: at the end of the day the dimension vectors we are concerned about are \mathbf{w}=(1,1) and \mathbf{v}=(1,1)

\mathbb{C} \leftarrow \mathbb{C}
\rightarrow
\rightarrow
\leftarrow
\downarrow\uparrow \downarrow\uparrow
\mathbb{C} \mathbb{C}

We want to replace the arrows in this diagram with maps (in order of appearance top to bottom left to right) y,\bar y,x,\bar x,b_1,a_1,b_2,a_2 in such a way that it satisfies three conditions which I abbreviate as the “\mu^{-1}(0)” (this is not the same \mu… sorry), “stability” and “limit” conditions.

The “\mu^{-1}(0)” condition in our case (for and for other choices of \mathbf w \mathbf v but still r=l=2) implies:
a_1b_1+\bar x x=y\bar y
a_2b_2+\bar y y=x\bar x

The “Stability” condition has two halves. First that every vector v in the top half has “Origins” i.e. v=\sum f_k(\eta_k) where \eta_k live in the bottom half and f_k are chosen from appropriate paths in the quiver. And second that every non-zero v in the top half has “Futures” i.e. g(v)\neq 0 for some path g terminating in the bottom half.

The “Limit” condition requires that the action of t (not the same as either previous t… sorry) given on page 30 can be “controled” as t\rightarrow\infty by action of G_V described on page 5 (just before eq. 2.1 )

Something to notice right away because it will be useful in future calculations: taking the two halves of “Stability” together gives paths g\circ f:W^j\rightarrow W on which G_V has no control! The “Limit” condition requires that the image of such a composition must lie in W^{<j}. (Superscript refers to the decomposition into 1-dimensional subspaces given by \mu — use of the \le is short hand for the corresponding filtration.)

In our case we have b_2=0,a_1=0. For example if the image of a_1 is non-zero the "Futures" condition says it must escape but, according to the "Limit" condition, in doing so it can only afford to accumulate m_1 orders of t and every possible exiting accumulates at least m_1+1. The argument for b_2 is quite similar replacing "image" with "kernel", "Futures" with "Origins" etc..

Furthermore we get:
a_1\neq0\neq b_2,
\bar y=0\Rightarrow x\neq 0 and
\bar y\neq 0\Rightarrow y=0.
(Moding out by the G_V action in this case we can assume a_1=1=b_2:\mathbb{C}\rightarrow\mathbb{C}

The two components, then, correspond to diagrams:

\mathbb{C} \bar y\rightarrow \mathbb{C}
x\dashrightarrow
\downarrow \uparrow
\mathbb{C} \mathbb{C}

and

\mathbb{C} \dashleftarrow y \mathbb{C}
x\rightarrow
\downarrow \uparrow
\mathbb{C} \mathbb{C}

Where the solid line indicates the map is non-zero and dashed line indicates the map may be zero.

GRTEALA 1: Review of the situation

July 8, 2009

Update: Notes and video from the summer school is available here.

I should have been posting while I was at the conference. But anyway I’ll try to post as much as I can remember, before I forget it.

Geometric Satake gives a correspondence from representation theory to subvarieties of an affine Grassmanian. MV-cycles help give a better handle on them but are still rather abstract. MV-polytopes , introduced by Jared Anderson, are more “hands on” in terms of being able to do direct computations. But you need to know what they are first, and their original definition as moment map images of MV-cycles doesn’t really help. At least if you know they are a convex hill of the torus fixed-points appear in the *closure* of an MV-cycle then you’re done — but this still requires more-or-less calculating the MV-cycles and taking their closure.

Kamnitzer’s thesis provided a few ways to get direct handle on MV-polytopes avoiding MV-cycles entirely.

  • Implicit description via Plucker relations
  • Inductive description (for \mathfrak{sl}_n later extended to types B and C by **FIXME**)
  • Reduction to dim-2: higher dimensional MV-polytopes are all polytopes whose 2-faces are MV-polytopes.
  • Construction from primitives: MV-polytopes are Minkowski sums of “primitives” and sums of primitives from the same “cluster” are MV-polytopes
  • In dimension 2, clusters can be described by networks of non-overlapping cords each parallel to a sides of the Weyl polytope

Follow

Get every new post delivered to your Inbox.