Cohomology of structure sheaf of superelliptic
This commit is contained in:
parent
f7a04c69ec
commit
be66e7bc64
File diff suppressed because one or more lines are too long
@ -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))
|
||||
|
@ -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):
|
||||
|
@ -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())
|
@ -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))
|
92
sage/drafty/superelliptic_cohomology_class.sage
Normal file
92
sage/drafty/superelliptic_cohomology_class.sage
Normal 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
|
@ -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')
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)))
|
||||
|
Loading…
Reference in New Issue
Block a user