Seung-Jo Jung
KIAS
In the end, the love you take is equal to the love you make. - the Beatles
McKay Quivers and Terminal Quotient Singularities in Dimension 3

This page contains related works on the paper "McKay Quivers and Terminal Quotient Singularities in
Dimension 3". Specially this page provides a magma code computing G-iraffes in the paper. Most of
contents are contained in my PhD thesis except the magma code below.


Papers and Notes (Taken from my thesis):
McKay Quivers and Terminal Quotient Singularities in Dimension 3
Moduli spaces of McKay quiver representations: G-iraffes
An example: 1/12(1,7,5)
A Note on Elephants and GIT Chambers
Irreducibility of M_theta for the case where a=2
Irreducibility of M_theta for G=1/12(7,1,11)

Magma code:
Given r and a, this magma code
(1) returns G-iraffes using round down functions and
(2) calculates the admissible chambers.
Part of this code is made by Miles Reid.

The function Giraffes(r,a) presents G-iraffes which correspond to torus invariant G-constellations
lying over the birational compoent. The functions StabMtx(r,a) and NewStabMtx(r,a) calculate the admissible chamber.

(*) Way to read the outcomes:
When you run Giraffes(r,a), you get a bunch of sets of vectors; each set is a G-iraffe:
e.g. the vector [l,m,n] means the Laurent monomial x^{l}y^{m}z^{n}.
When you run StabMtx(r,a) or NewStabMtx(r,a), we will get a matrix.
Each row of the matrix is a ray of the admissible chamber.
While NewStabMtx(r,a) can be used with notation where y is of weight 1,
StabMtx(r,a) can be used with notation where y is of weight a.

You may use the Magma online calculator.

+)
I hope I can improve the code in the near future.


-------------------------------Code-------------------------------------

Giraffes:=function(r,a);
if (Parent(r) ne Integers()) or (Parent(a) ne Integers())
or (GCD(r,a) gt 1) then
Error("Girrafes requires coprime integers r, a as input.");
end if;
M:=[[m1,m2,m3]:m1 in [-r+1..r-1],m2 in [-r+1..r-1],m3 in [-r+1..r-1]];
if r eq 1 then return [[[0,0,0]]];
else LeftGiraffes:= $$(a,(-r) mod a); //left
RightGiraffes:= $$(r-a, r mod (r-a) );; //right
LeftTemp:=[];//initiate
for i in [1..#LeftGiraffes]
do Left:=[m: m in M | [m[1],Floor((m[1]+a*m[2]+(r-a)*m[3])/r),m[3]] in LeftGiraffes[i] ];
Append(~LeftTemp,Left);
end for;

RightTemp:=[];//initiate
for i in [1..#RightGiraffes]
do Right:=[m: m in M | [m[1],m[2],Floor((m[1]+a*m[2]+(r-a)*m[3])/r)] in RightGiraffes[i]];
Append(~RightTemp,Right);
end for;
Centre:=[[m:m in M | m[1] in [0..r-1] and m[2] eq 0 and m[3] eq 0]];
return LeftTemp cat RightTemp cat Centre;
end if;
end function;


Co := function(r,a); // Cutting order
if (Parent(r) ne Integers()) or (Parent(a) ne Integers())
or (GCD(r,a) gt 1) then
Error("Cutting order requires coprime integers r, a as input.");
end if;
if a eq 1 then return Reverse([0..r-1]);
elif a eq r-1 then return [1..r-1] cat [0];
else Temp := $$(a,(-r) mod a); // Temp;
return [ r-a + (i-r) mod a : i in Temp ] cat $$(r-a, a mod (r-a));
end if;
end function;

CoforStab := function(r,a);
b := InverseMod(a,r);
Temp := [(b*i) mod r : i in Co(r,a)];
Temp2 := Exclude(Temp, 0);
return Reverse(Temp2);
end function;

StabMtx := function(r,a);
CoTemp := CoforStab(r,a);
W := PermutationMatrix(Rationals(),CoTemp);
N := IdentityMatrix(Rationals(),r-1);
for i in [1..r-2] do N[i,i+1] := -1; end for;
b := InverseMod(a,r);
printf "Case 1/%o(1, %o, %o)~ 1/%o(%o,1,%o).\n",r, a, r-a, r,b,r-1;
print "--------";
return N^-1*W*N;
end function;

NewStabMtx := function(r,a);
CoTemp := CoforStab(r,a);
W := PermutationMatrix(Rationals(),CoTemp);
N := IdentityMatrix(Rationals(),r-1);
for i in [1..r-2] do N[i,i+1] := -1; end for;
b := InverseMod(a,r);
printf "Case 1/%o(1, %o, %o).\n", r, a, r-a;
print "--------";
return Submatrix(N^-1*W*N, [1..r-1],[(b*i) mod r : i in [1..r-1]]);
end function;

Giraffes(12,7);
NewStabMtx(12,7);
-------------------------------End-------------------------------------

Updated: 29 JUN 2014