Cohomology of structure sheaf of superelliptic

This commit is contained in:
jgarnek 2023-02-13 12:05:48 +00:00
parent f7a04c69ec
commit be66e7bc64
11 changed files with 7054 additions and 80 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,8 @@
def magmathis(A, B, text = False):
def magmathis(A, B, text = False, prefix="", sufix=""):
"""Find decomposition of Z/p^2-module given by matrices A, B into indecomposables using magma.
If text = True, print the command for Magma. Else - return the output of Magma free."""
q = parent(A).base_ring().order()
p = q.factor()[0][0]
n = A.dimensions()[0]
A = str(list(A))
B = str(list(B))
@ -9,11 +10,16 @@ def magmathis(A, B, text = False):
A = A.replace(")", "")
B = B.replace("(", "")
B = B.replace(")", "")
result = "A := MatrixAlgebra<GF("+str(q) + "),"+ str(n) + "|"
result = prefix
if q != p:
result += "F<a> := GF(" + str(q) + ");"
result += "A := MatrixAlgebra<GF("+str(q) + "),"+ str(n) + "|"
result += A + "," + B
result += ">;"
result += "M := RModule(RSpace(GF("+str(q)+")," + str(n) + "), A);"
result += "IndecomposableSummands(M);"
result += "L := IndecomposableSummands(M); L;"
result += "for i in [1 .. #L] do print(Generators(Action(L[i]))); end for;"
result += sufix
if text:
return result
print(magma_free(result))
return(magma_free(result))

View File

@ -73,7 +73,6 @@ class as_form:
denom = LCM([denominator(omega.form) for omega in basis])
basis = [denom*omega for omega in basis]
self_with_no_denominator = denom*self
print(self_with_no_denominator, basis)
return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis])
def trace(self):

View File

@ -1,14 +1,13 @@
p = 3
m = 1
F = GF(p^2, 'a')
a = F.gens()[0]
m = 2
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x
C_super = superelliptic(f, m)
Rxy.<x, y> = PolynomialRing(F, 2)
f1 = superelliptic_function(C_super, x^7)
f2 = superelliptic_function(C_super, a*x^7)
AS = as_cover(C_super, [f1, f2], prec=1000)
#print(AS.uniformizer())
print(AS.ramification_jumps())
f = x^3 - x
C = superelliptic(f, m)
x = C.x
y = C.y
dx = C.dx
om1 = x^3*y*dx
u = (C.one)/x
v = y/x^2
print(om1 + u^3*v*u.diffn() - (y/x)^2*(y/x).diffn())

View File

@ -1,13 +1,46 @@
p = 2
m = 1
F = GF(p^(2), 'a')
a = F.gens()[0]
p = 3
m = 2
#F = GF(p)
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x
C_super = superelliptic(f, m)
f = x^5 + 1
g = f(x^p - x)
Cf = superelliptic(f, m)
C = superelliptic(g, m)
Rxy.<x, y> = PolynomialRing(F, 2)
f1 = superelliptic_function(C_super, x^3)
f2 = superelliptic_function(C_super, a*x^3)
AS = as_cover(C_super, [f1, f2], prec=1000)
#print(AS.at_most_poles(7))
#class superelliptic_automorphism:
# def __init__
def autom(omega):
C1 = omega.curve
f = omega.form
F = C1.base_ring
Rxy.<x, y> = PolynomialRing(F, 2)
RxyQ = FractionField(Rxy)
f = RxyQ(f)
return superelliptic_form(C1, f(x=x+1, y=y))
def automdR(omega):
C1 = omega.curve
om0 = omega.omega0.form
f = omega.f.function
F = C1.base_ring
Rxy.<x, y> = PolynomialRing(F, 2)
RxyQ = FractionField(Rxy)
f = RxyQ(f)
om0 = RxyQ(om0)
f = f(x=x+1, y=y)
om0 = om0(x=x+1, y=y)
f = superelliptic_function(C1, f)
om0 = superelliptic_form(C1, om0)
return superelliptic_cech(C1, om0, f)
A = C.de_rham_basis()
gC = C.genus()
M = matrix(C.base_ring, 2*gC, 2*gC)
for i in range(2*gC):
M[:, i] = vector(automdR(A[i]).coordinates())
print(M, M^p == identity_matrix(2*gC))
N = C.verschiebung_matrix().transpose()
print(magmathis(M, N))

View File

@ -0,0 +1,92 @@
class superelliptic_cohomology:
'''Cohomology of structure sheaf.'''
def __init__(self, C, f):
self.curve = C
self.function = f
def prod(self, form, prec=20):
result = 0
C = self.curve
delta = C.nb_of_pts_at_infty
fct = superelliptic_function(C, self.function)
for i in range(delta):
result += (fct*form).expansion_at_infty(place=i, prec=prec)[-1]
return -result
def __repr__(self):
return "[" + str(self.function) + "]"
def __add__(self, other):
C = self.curve
g1 = self.function
g2 = other.function
g = reduction(C, g1 + g2)
return superelliptic_cohomology(C, g)
def __sub__(self, other):
C = self.curve
g1 = self.function
g2 = other.function
g = reduction(C, g1 - g2)
return superelliptic_cohomology(C, g)
def __rmul__(self, constant):
C = self.curve
g = self.function
return superelliptic_cohomology(C, constant*g)
def coordinates(self, basis = 0, basis_holo = 0, prec=20):
C = self.curve
if basis == 0:
basis = basis_of_cohomology(C)
if basis_holo == 0:
basis_holo = C.holomorphic_differentials_basis()
g = C.genus()
coordinates = g*[0]
for i, omega in enumerate(basis_holo):
coordinates[i] = self.prod(omega, prec=prec)
return coordinates
def frobenius(self):
C = self.curve
f = self.function
p = C.base_ring.characteristic()
return superelliptic_cohomology(C, f^p)
def basis_of_cohomology(C):
m = C.exponent
f = C.polynomial
r = f.degree()
F = C.base_ring
delta = C.nb_of_pts_at_infty
Rx.<x> = PolynomialRing(F)
Rxy.<x, y> = PolynomialRing(F, 2)
Fxy = FractionField(Rxy)
basis = []
for j in range(1, m):
for i in range(1, r):
if (r*j - m*i >= delta):
basis += [superelliptic_cohomology(C, Fxy(m*y^(j)/x^i))]
return basis
def frobenius_matrix(C, prec=20):
g = C.genus()
F = C.base_ring
M = matrix(F, g, g)
for i, f in enumerate(basis_of_cohomology(C)):
M[i, :] = vector(f.frobenius().coordinates(prec=prec))
return M
def frobenius_kernel(C, prec=20):
M = frobenius_matrix(C, prec=prec)
K = M.kernel().basis()
g = C.genus()
result = []
basis = basis_of_cohomology(C)
for v in K:
coh = superelliptic_cohomology(C, 0)
for i in range(g):
coh += v[i] * basis[i]
result += [coh]
return result

View File

@ -18,6 +18,7 @@ load('auxilliaries/linear_combination_polynomials.sage')
##############
##############
load('drafty/lift_to_de_rham.sage')
load('drafty/superelliptic_cohomology_class.sage')
load('drafty/draft5.sage')
load('drafty/pole_numbers.sage')
#load('drafty/draft4.sage')

View File

@ -14,6 +14,11 @@ class superelliptic:
self.characteristic = F.characteristic()
r = Rx(f).degree()
delta = GCD(r, m)
self.nb_of_pts_at_infty = delta
self.x = superelliptic_function(self, Rxy(x))
self.y = superelliptic_function(self, Rxy(y))
self.dx = superelliptic_form(self, Rxy(1))
self.one = superelliptic_function(self, Rxy(1))
def __repr__(self):
f = self.polynomial

View File

@ -30,7 +30,7 @@ class superelliptic_form:
def __rmul__(self, constant):
C = self.curve
omega = self.form
return superelliptic_form(C, constant*omega)
return superelliptic_form(C, constant*omega)
def cartier(self):
C = self.curve
@ -119,11 +119,11 @@ class superelliptic_form:
return 0
return 1
def expansion_at_infty(self, i = 0, prec=10):
def expansion_at_infty(self, place = 0, prec=10):
g = self.form
C = self.curve
g = superelliptic_function(C, g)
g = g.expansion_at_infty(i = i, prec=prec)
x_series = superelliptic_function(C, x).expansion_at_infty(i = i, prec=prec)
g = g.expansion_at_infty(place = place, prec=prec)
x_series = superelliptic_function(C, x).expansion_at_infty(place = place, prec=prec)
dx_series = x_series.derivative()
return g*dx_series

View File

@ -42,10 +42,21 @@ class superelliptic_function:
def __mul__(self, other):
C = self.curve
g1 = self.function
g2 = other.function
g = reduction(C, g1 * g2)
return superelliptic_function(C, g)
try:
g1 = self.function
g2 = other.function
g = reduction(C, g1 * g2)
return superelliptic_function(C, g)
except:
g1 = self.function
g2 = other.form
g = reduction(C, g1 * g2)
return superelliptic_form(C, g)
def __rmul__(self, constant):
C = self.curve
g = self.function
return superelliptic_function(C, constant*g)
def __truediv__(self, other):
C = self.curve
@ -73,7 +84,7 @@ class superelliptic_function:
return superelliptic_form(C, A+B)
def expansion_at_infty(self, i = 0, prec=10):
def expansion_at_infty(self, place = 0, prec=10):
C = self.curve
f = C.polynomial
m = C.exponent
@ -98,7 +109,7 @@ class superelliptic_function:
g = (x^r*f(x = 1/x))
gW = RptWQ(g(x = t^M * W^b)) - W^(delta)
ww = naive_hensel(gW, F, start = root_of_unity(F, delta)^i, prec = prec)
ww = naive_hensel(gW, F, start = root_of_unity(F, delta)^place, prec = prec)
xx = Rt(1/(t^M*ww^b))
yy = 1/(t^R*ww^a)
return Rt(fct(x = Rt(xx), y = Rt(yy)))