--Some functions for computing the ideal --of the grassmannian in a combinatorial way --See cocoa4.coc Define F(H,K) If H=1 Then Return K+1; Elsif K=1 Then Return H+1; Else Return F(H-1,K)+F(H,K-1); EndIf; End; Define Pos(A,LL) For I:=1 To Len(LL) Do If LL[I]=A Then Return I; EndIf; EndFor; Return 0; End; Define Shuffle(K,H) A:=K; If H=1 Then LL:=[]; For I:=1 To K+H Do TMP:=1..K; Insert(TMP,I,K+1); Append(LL,TMP); EndFor; Return LL; Elsif K=1 Then LL:=[]; For I:=1 To K+H Do TMP:=2..(H+1); Insert(TMP,I,1); Append(LL,TMP); EndFor; Return LL; Else TMP1:=Shuffle(K,H-1); U:=Len(TMP1[1]); For I:=1 To Len(TMP1) Do Append(TMP1[I],U+1); EndFor; A:=A-1; TMP2:=Shuffle(A,H); For I:=1 To Len(TMP2) Do For J:=1 To Len(TMP2[I]) Do If TMP2[I][J]>A Then TMP2[I][J]:=TMP2[I][J]+1; EndIf; EndFor; EndFor; For I:=1 To Len(TMP2) Do Append(TMP2[I],A+1); EndFor; Return Concat(TMP1,TMP2); EndIf; End; Define Sign(Perm) LU:=Len(Perm); A:=NewMat(LU,LU); For I:=1 To LU Do For J:=1 To LU Do A[I][J]:=0 EndFor; EndFor; For I:=1 To LU Do A[I][Perm[I]]:=1; EndFor; Return Det(A); End; Define Permute(List1,List2) Lungh:=Len(List1); List3:=NewList(Lungh); For I:=1 To Lungh Do List3[I]:=List1[List2[I]]; EndFor; Return List3; EndDefine; Define Position(I,Perm) For J:=1 To Len(Perm) Do If Perm[J]=I Then Return J; EndIf; EndFor; Return 0; End; Define Inverse(Perm) InvPerm:=[]; For I:=1 To Len(Perm) Do Append(InvPerm,Position(I,Perm)); EndFor; Return InvPerm; End; --A function for computing the Plucker coordinates of a matrix Define Plucker(MM,LL) K:=Len(MM); Return Det(Submat(MM,1..K,LL)); EndDefine;