# This is code to check the E7 version of the Lemma 2.4 in the paper # "Cominuscule tableau combinatorics" by Hugh Thomas and Alexander Yong # Start the check by e6teststart([0 or 1]). This procedure takes one input "traceit" # which if set equal to 1 will output the current position of the tableaux # being analyzed together with the positions that the program is considering to # slide into (in standard matrix notation). # The program checks if after each choice of slide that the two (claimed) dual equivalent # tableau retain the same shape. If not "COUNTEREXAMPLE" is noted. Otherwise the code # terminates with a "1". # # # [Z Z Z Z Z Z Z Z _] # [ ] # [Z Z Z Z Z Z Z Z _] # [ ] # [Z Z Z Z Z Z Z Z _] # [ ] # [Z Z Z Z Z Z Z _ _] # [ ] # [Z Z Z Z 1 3 4 6 _], # [ ] # [Z Z Z Z _ _ _ 2 5] # [ ] # [Z Z Z Z _ _ _ Z Z] # [ ] # [Z Z Z _ _ _ Z Z Z] # [ ] # [_ _ _ _ _ _ Z Z Z] # # [Z Z Z Z Z Z Z Z _] # [ ] # [Z Z Z Z Z Z Z Z _] # [ ] # [Z Z Z Z Z Z Z Z _] # [ ] # [Z Z Z Z Z Z Z _ _] # [ ] # [Z Z Z Z 2 3 4 6 _] # [ ] # [Z Z Z Z _ _ _ 1 5] # [ ] # [Z Z Z Z _ _ _ Z Z] # [ ] # [Z Z Z _ _ _ Z Z Z] # [ ] # [_ _ _ _ _ _ Z Z Z] # # [[4, 8], [5, 9]] # # shows the current skew tableau (which should be of the same shape) # and the two possible reverse jdt slides (towards the NE corner) # that are possible. `e7teststart`:=proc(traceit) local ii, ambientmatrix, aa, bb, ambientmatrix2, jj; ambientmatrix:=linalg[matrix](9,9): for aa from 1 to 9 do for bb from 1 to 9 do if(aa=1) then if(bb>=9 and bb<=9) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=2) then if(bb>=9 and bb<=9) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=3) then if(bb>=9 and bb<=9) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=4) then if(bb>=8 and bb<=9) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=5) then if(bb>=5 and bb<=9) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=6) then if(bb>=5 and bb<=9) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=7) then if(bb>=5 and bb<=7) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=8) then if(bb>=4 and bb<=6) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: if(aa=9) then if(bb>=1 and bb<=6) then ambientmatrix[aa,bb]:=_: else ambientmatrix[aa,bb]:=Z: fi: fi: od: od: ambientmatrix2:=linalg[matrix](9,9): for ii from 1 to 9 do for jj from 1 to 9 do ambientmatrix2[ii,jj]:=ambientmatrix[ii,jj]: od: od: ambientmatrix[9,1]:=1; ambientmatrix[9,2]:=2; ambientmatrix[9,3]:=3; ambientmatrix[9,4]:=4; ambientmatrix[8,4]:=5; ambientmatrix[9,5]:=6; ambientmatrix2[9,1]:=1; ambientmatrix2[9,2]:=2; ambientmatrix2[9,3]:=3; ambientmatrix2[9,4]:=4; ambientmatrix2[8,4]:=6; ambientmatrix2[9,5]:=5; print(ambientmatrix, ambientmatrix2); e7testrec(ambientmatrix, ambientmatrix2, traceit); end: `e7testrec`:=proc(inputmatrix1, inputmatrix2, traceit) local ambientmatrix, ambientmatrix2, ii, jj, aa, bb, slidelist, ambientmatrix3, ambientmatrix4, kk; ambientmatrix:=linalg[matrix](9,9): ambientmatrix2:=linalg[matrix](9,9): for ii from 1 to 9 do for jj from 1 to 9 do ambientmatrix[ii,jj]:=inputmatrix1[ii,jj]: ambientmatrix2[ii,jj]:=inputmatrix2[ii,jj]: od: od: ambientmatrix3:=linalg[matrix](9,9): ambientmatrix4:=linalg[matrix](9,9): if(traceit=1) then print(ambientmatrix, ambientmatrix2); fi: # now determine boxes that can be slid into slidelist:=slideableboxes(ambientmatrix, traceit): if(nops(slidelist)=0) then #print(DONEDONE); return(1); else for kk from 1 to nops(slidelist) do ambientmatrix3:=revjdt(op(kk,slidelist),ambientmatrix): ambientmatrix4:=revjdt(op(kk,slidelist),ambientmatrix2): if(testsameshape(ambientmatrix3,ambientmatrix4)=0) then print(COUNTEREXAMPLE, ambientmatrix, ambientmatrix2): else #print(ambientmatrix3, ambientmatrix4); e7testrec(ambientmatrix3, ambientmatrix4, traceit): fi: od: fi: end: # returns a list `slideableboxes`:=proc(inputmatrix, traceit) local ii, slidelist, thematrix, jj, leftmin, flag; slidelist:=[]: thematrix:=linalg[matrix](9,9): for ii from 1 to 9 do for jj from 1 to 9 do thematrix[ii,jj]:=inputmatrix[ii,jj]: od: od: leftmin:=-99; for jj from 2 to 9 do ii:=9: flag:=0: while(ii>=1 and flag=0) do: if(thematrix[ii,jj]=_) then if(ii>leftmin) then if(ii=9) then if(thematrix[ii,jj-1]<>Z and thematrix[ii,jj-1]<>_) then slidelist:=[op(slidelist), [ii,jj]]: leftmin:=9: flag:=1: fi: else if(thematrix[ii+1,jj]=Z) then if(thematrix[ii,jj-1]<>Z and thematrix[ii,jj-1]<>_) then slidelist:=[op(slidelist),[ii,jj]]: leftmin:=ii: flag:=1: fi: else if(thematrix[ii+1,jj]<>Z and thematrix[ii+1,jj]<>_) then slidelist:=[op(slidelist), [ii,jj]]: leftmin:=ii: flag:=1: fi: fi: fi: fi: fi: ii:=ii-1: od: od: if(traceit=1) then print(slidelist): fi: return(slidelist): end: # execute a revjdtslide `revjdt`:=proc(inputslideposition, inputmatrix) local ii, ambientmatrix, slideposition, jj, jdtslidedone, leftvalue, downvalue; slideposition:=inputslideposition; ambientmatrix:=linalg[matrix](9,9); for ii from 1 to 9 do for jj from 1 to 9 do ambientmatrix[ii,jj]:=inputmatrix[ii,jj]: od: od: # now do the sliding jdtslidedone:=0: while(jdtslidedone=0) do if((op(2,slideposition)>1) and (ambientmatrix[op(1,slideposition),op(2,slideposition)-1]<>Z) and (ambientmatrix[op(1,slideposition),op(2,slideposition)-1]<>_)) then leftvalue:=ambientmatrix[op(1,slideposition),op(2,slideposition)-1]: else leftvalue:=-infinity: fi: if((op(1,slideposition)<9) and (ambientmatrix[op(1,slideposition)+1,op(2,slideposition)]<>Z) and (ambientmatrix[op(1,slideposition)+1,op(2,slideposition)]<>_)) then downvalue:=ambientmatrix[op(1,slideposition)+1,op(2,slideposition)]: else downvalue:=-infinity: fi: if((leftvalue=-infinity) and (downvalue=-infinity)) then jdtslidedone:=1: else # now do the slide if(downvalue>leftvalue) then ambientmatrix[op(1,slideposition),op(2,slideposition)]:= downvalue: ambientmatrix[op(1,slideposition)+1,op(2,slideposition)]:=_: slideposition:=[op(1,slideposition)+1,op(2,slideposition)]: else ambientmatrix[op(1,slideposition),op(2,slideposition)]:= leftvalue: ambientmatrix[op(1,slideposition),op(2,slideposition)-1]:=_: slideposition:=[op(1,slideposition),op(2,slideposition)-1]: fi: fi: od: return(ambientmatrix): end: # checks if the two shapes are the same `testsameshape`:=proc(input1, input2) local ii, jj, flag; flag:=1: for ii from 1 to 9 do for jj from 1 to 9 do if(input1[ii,jj]<>Z and input1[ii,jj]<>_) then if(input2[ii,jj]=Z or input2[ii,jj]=_) then flag:=0; fi: fi: od: od: return(flag); end: