Skip to content

Instantly share code, notes, and snippets.

@pbelmans
Created August 29, 2013 16:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pbelmans/6380013 to your computer and use it in GitHub Desktop.
Save pbelmans/6380013 to your computer and use it in GitHub Desktop.
Determining the structure of the Schofield resolution of a preprojective algebra. Nothing interesting happens, just extracting information from the Cartan matrix.
def mA(n):
if n % 2 == 1: return (n - 1) / 2
else: return (n - 2) / 2
def mD(n):
if n % 2 == 1: return (n - 3) / 2
else: return (n - 2) / 2
def u(n):
if n % 2 == 1: return mD(n) + 1
else: return mD(n)
# calculate the Cartan matrix for P(T_n)
def cartan(T, n):
assert T in ["A", "D", "E", "L"]
assert n >= 1
C = matrix(n)
if T == "A":
for i in range(mA(n) + 1):
for j in range(n):
if j <= i: C[i, j] = j + 1
elif j >= n - i - 1: C[i, j] = n - j
else: C[i, j] = i + 1
for i in range(mA(n) + 1, n):
C[i] = C[n - i - 1]
elif T == "D":
assert n >= 4
C[0, 0] = C[1, 1] = mD(n) + 1
C[1, 0] = C[0, 1] = u(n)
for i in range(1, n - 1):
for j in range(n - i - 1):
C[n - i, n - i - j] = C[n - i - j, n - i] = 2*i
for i in range(2, n):
for j in range(2):
C[i, j] = C[j, i] = n - i
elif T == "E":
assert n == 6
if n == 6:
C = matrix([
[4, 2, 4, 6, 4, 2],
[2, 2, 3, 4, 3, 2],
[4, 3, 6, 8, 6, 3],
[6, 4, 8, 12, 8, 4],
[4, 3, 6, 8, 6, 3],
[2, 2, 3, 4, 3, 2]])
elif T == "L":
for i in range(1, n + 1):
for j in range(n - i + 1):
C[n - i, n - i - j] = C[n - i - j, n - i] = 2*i
return C
# calculate the dimensions of the projective resolution of P(T_n)
def resolution(T, n):
C = cartan(T, n)
R = [0, 0, 0, 0, 0, 0, 0]
R[1] = R[5] = sum(sum(C))
R[2] = R[4] = sum([sum(C[i]) ** 2 for i in range(n)])
if T == "A":
R[3] = sum([2 * sum(C[i]) * sum(C[i + 1]) for i in range(n - 1)])
if T == "D":
R[3] = 2 * sum(C[0]) * sum(C[2]) + 2 * sum(C[1]) * sum(C[2]) + sum([2 * sum(C[i]) * sum(C[i + 1]) for i in range(2, n - 1)])
if T == "E":
if n == 6:
R[3] = 2 * sum(C[0]) * sum(C[3]) + 4 * sum(C[1]) * sum(C[2]) + 4 * sum(C[2]) * sum(C[3])
if T == "L":
R[3] = sum([2 * sum(C[i]) * sum(C[i + 1]) for i in range(n - 1)]) + sum(C[0])**2
return R
def alternating(v):
return sum([(-1)**i * d for i, d in enumerate(v)])
def printInfo(T, n):
print "Cartan matrix for %s_%d" % (T, n)
C = cartan(T, n)
print C
print "dimension of the preprojective algebra"
print sum(sum(C))
R = resolution(T, n)
print "dimension of the projective resolution of the preprojective algebra"
print R
print "reality check (= alternating sum of the dimensions)"
print alternating(R)
print ""
printInfo("E", 6)
for n in range(2, 6):
printInfo("A", n)
for n in range(4, 7):
printInfo("D", n)
for n in range(2, 6):
printInfo("L", n)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment