# A1A3 in A5 for Landsberg-Weyman paper # December 10, 2007 # By C. Robles (robles@math.tamu.edu) # g = semisimple Lie algebra (edit this file to change g). # This file defines a procedure prtn_of() that takes a positive # integer d as input. The procedure then computes # P(d) = {all partitions 2^a 1^b of d by 2s and 1s s.t. a+b <= c}. # Note d = 2a+b. Above c=c(g) is the maximum number of parts in the # partition. (See below.) # Given a partition pi = 2^a 1^b in P(d), # P(d-1,pi) = { 2^a 1^b-1 , 2^a-1 1^b+1 } (if a,b>0) # P(d-2,pi) = { 2^a-1 1^b } (if a>0) # Call these the "sibling" and "cousin" partitions, respectively. # If none of these four partitions have cohomology in degree d-1, # then return "Nada, senior." Otherwise print all cohomology for # each partition. # HOW TO READ THE OUTPUT: Each plethysm decomposition is followed by # a matrix. Each row of the matrix (modulo the last entry in the row) # is the cohomology of the corresponding plethysm. The last entry of # the row is the degree of the cohomology. (Degree is set to -1 when # there is no cohomology.) # User may edit (some of) the code below: g = A1A3 # Update 'c' and 'augment4coh' when you change g!! rep = [1,1,0,0] # the representation of g with respect to which # you wish to compute the plethysm. n = Lie_rank(g)+1 # DO NOT EDIT. k = dim(rep,g) # DO NOT EDIT. c = k+1 # The code below takes a vector of length n-1 = rank(g), representing # an irreducible component in the plethysm, and out puts the n-vector # whose cohomology will be computed. augment4coh(vec v; int m) = [v[2],v[3],v[4],m,v[1]] # And the integers m are given by m0(vec v; int d) = -(d+ 2*v[1]+v[2]+2*v[3]+3*v[4])/4 # for the partition m1(vec v; int d) = -(d+3+2*v[1]+v[2]+2*v[3]+3*v[4])/4 # for the sibling partitions m2(vec v; int d) = -(d+6+2*v[1]+v[2]+2*v[3]+3*v[4])/4 # for the cousin partitions # A procedure that computes the Lie algebra cohomology (in g+). # Input in a vector (of length n). # Returns a vector of length n+1: the first n entries are the # cohomology; the last is the degree. CmpCoh(vec a) \ { loc r=0; loc test=tCoh(a); while test==1 do if a[1] < -1 then a[2]=a[2]+a[1]+1; a[1]=-2-a[1] else if a[2] < -1 then a[1]=a[1]+a[2]+1; a[3]=a[3]+a[2]+1; a[2]=-2-a[2] else if a[3] < -1 then a[2]=a[2]+a[3]+1; a[4]=a[4]+a[3]+1; a[3]=-2-a[3] else if a[4] < -1 then a[3]=a[3]+a[4]+1; a[5]=a[5]+a[4]+1; a[4]=-2-a[4] else if a[5] < -1 then a[4]=a[4]+a[5]+1; a[5]=-2-a[5] fi fi fi fi fi; r=r+1; test=tCoh(a); od; # Set the degree to be -1 when there is no cohomology (when test=0). if test==0 then r=-1 fi; a + r } # DO NOT TOUCH THE CODE BELOW ----------------------------------------- # Define a function to test the input for the cohomology computation. # If all the entries of v are > -1, then return -1; # (equiv, if no entry is < 0, then return -1); # If an entry is = -1, then return 0; Else return 1. tCoh(vec v) \ { loc case1=1; loc case2=0; loc i=1; for i=1 to size(v) do if v[i]<0 then case1=0 fi; if v[i]==-1 then case2=1 fi; od; if case1==1 then -1 else if case2==1 then 0 else 1 fi fi # if case1==0 && case2==0 then 1 fi } # The MAIN PROCEDURE. prtn_of(int d) \ { # -- Make sure that 0 < d <= 2c. if { d < 1 || d > 2*c } then error("Integer input outside admissible range.") fi; # -- Define the max possible value of a. loc max_a=d/2; if d % 2 == 1 then max_a = (d-1)/2 fi; if max_a > c then max_a = c fi; # -- For each a=0...max_a we have a partition. # -- Loop though these partitions. for a=0 to max_a do loc b = d - 2*a; loc prtn = null(c); # start with 0-vec for j=1 to c do if j <= a then prtn[j]=2 else if j <= a+b then prtn[j]=1 fi fi od; # -- Now consider the 2 sibling and 1 cousin partitions # -- in P(d-1,a) and P(d-2,a). (They will be zero if a,b=0.) loc brother = prtn; loc sister = prtn; loc cousin = prtn; if b > 0 then brother[a+b]=0 else brother=null(c) fi; if a > 0 then sister[a]=1; cousin[a]=1; cousin[a+b]=0 else sister=null(c); cousin=null(c) fi; # -- Compute the plethysms of the four partitions above. loc prtn_plth = if prtn[k+1] == 0 then plethysm(prtn,rep,g) else poly_null(n-1) fi; loc bro_plth = if brother[k+1] == 0 then plethysm(brother,rep,g) else poly_null(n-1) fi; loc sis_plth = if sister[k+1] == 0 then plethysm(sister,rep,g) else poly_null(n-1) fi; loc cou_plth = if cousin[k+1]==0 then plethysm(cousin,rep,g) else poly_null(n-1) fi; # -- For each partition above, construct a "cohomology matrix." # -- Each row will be the cohomology of an irred component of the # -- plethysm. (Note, the last entry in each row is the degree # -- of the cohomology.) loc prtn_coh = null(0,n+1); loc bro_coh = null(0,n+1); loc sis_coh = null(0,n+1); loc cou_coh = null(0,n+1); loc test_deg = 0; # test_deg --> 1 if there is coh in deg=d-1 for i=1 to length(prtn_plth) do loc v = expon(prtn_plth,i); prtn_coh = prtn_coh + CmpCoh(augment4coh(v,m0(v,d))); if prtn_coh[i,n+1]==d-1 then test_deg=1 fi od; for i=1 to length(bro_plth) do loc v = expon(bro_plth,i); bro_coh = bro_coh + CmpCoh(augment4coh(v,m1(v,d))); if bro_coh[i,n+1]==d-1 then test_deg=1 fi od; for i=1 to length(sis_plth) do loc v = expon(sis_plth,i); sis_coh = sis_coh + CmpCoh(augment4coh(v,m1(v,d))); if sis_coh[i,n+1]==d-1 then test_deg=1 fi od; for i=1 to length(cou_plth) do loc v = expon(cou_plth,i); cou_coh = cou_coh + CmpCoh(augment4coh(v,m2(v,d))); if cou_coh[i,n+1]==d-1 then test_deg=1 fi od; if test_deg==0 then print("The PARTITION " + prtn + " (and its relatives) have no cohomology in degree " + {d-1} + "."); print(" ") else print("The PARTITION " + prtn + " has plethysm decomposition"); print(prtn_plth); print("The associated cohomology is:"); print(prtn_coh); print("The BROTHER partition " + brother + " has plethysm decomposition"); print(bro_plth); print("The associated cohomology is:"); print(bro_coh); print("The SISTER partition " + sister + " has plethysm decomposition"); print(sis_plth); print("The associated cohomology is:"); print(sis_coh); print("The COUSIN partition " + cousin + " has plethysm decomposition"); print(cou_plth); print("The associated cohomology is:"); print(cou_coh); fi; od; }