cohomology of structure sheaf
This commit is contained in:
parent
6edd5f9c40
commit
c28c4a4fa4
File diff suppressed because it is too large
Load Diff
40038
sage/.run.term-0.term
40038
sage/.run.term-0.term
File diff suppressed because one or more lines are too long
@ -17,40 +17,3 @@ def magmathis(A, B, text = False):
|
|||||||
if text:
|
if text:
|
||||||
return result
|
return result
|
||||||
print(magma_free(result))
|
print(magma_free(result))
|
||||||
|
|
||||||
|
|
||||||
def as_reduction(AS, fct):
|
|
||||||
n = AS.height
|
|
||||||
F = AS.base_ring
|
|
||||||
variable_names = 'x, y'
|
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
ff = AS.functions
|
|
||||||
ff = [RxyzQ(F.function) for F in ff]
|
|
||||||
fct = RxyzQ(fct)
|
|
||||||
fct1 = numerator(fct)
|
|
||||||
fct2 = denominator(fct)
|
|
||||||
if fct2 != 1:
|
|
||||||
return as_reduction(AS, fct1)/as_reduction(AS, fct2)
|
|
||||||
|
|
||||||
result = RxyzQ(0)
|
|
||||||
change = 0
|
|
||||||
for a in fct1.monomials():
|
|
||||||
degrees_zi = [a.degree(z[i]) for i in range(n)]
|
|
||||||
d_div = [a.degree(z[i])//p for i in range(n)]
|
|
||||||
if d_div != n*[0]:
|
|
||||||
change = 1
|
|
||||||
d_rem = [a.degree(z[i])%p for i in range(n)]
|
|
||||||
monomial = fct1.coefficient(a)*x^(a.degree(x))*y^(a.degree(y))*prod(z[i]^(d_rem[i]) for i in range(n))*prod((z[i] + ff[i])^(d_div[i]) for i in range(n))
|
|
||||||
result += RxyzQ(fct1.coefficient(a)*x^(a.degree(x))*y^(a.degree(y))*prod(z[i]^(d_rem[i]) for i in range(n))*prod((z[i] + ff[i])^(d_div[i]) for i in range(n)))
|
|
||||||
|
|
||||||
|
|
||||||
if change == 0:
|
|
||||||
return RxyzQ(result)
|
|
||||||
else:
|
|
||||||
print(fct, '\n')
|
|
||||||
return as_reduction(AS, RxyzQ(result))
|
|
@ -58,6 +58,16 @@ class as_cover:
|
|||||||
self.y = all_y_series
|
self.y = all_y_series
|
||||||
self.z = all_z_series
|
self.z = all_z_series
|
||||||
self.dx = all_dx_series
|
self.dx = all_dx_series
|
||||||
|
##############
|
||||||
|
#Function field
|
||||||
|
variable_names = 'x, y'
|
||||||
|
for i in range(n):
|
||||||
|
variable_names += ', z' + str(i)
|
||||||
|
Rxyz = PolynomialRing(F, n+2, variable_names)
|
||||||
|
x, y = Rxyz.gens()[:2]
|
||||||
|
z = Rxyz.gens()[2:]
|
||||||
|
RxyzQ = FractionField(Rxyz)
|
||||||
|
self.fct_field = (RxyzQ, Rxyz, x, y, z)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
n = self.height
|
n = self.height
|
||||||
@ -106,17 +116,10 @@ class as_cover:
|
|||||||
F = self.base_ring
|
F = self.base_ring
|
||||||
m = C.exponent
|
m = C.exponent
|
||||||
r = C.polynomial.degree()
|
r = C.polynomial.degree()
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
||||||
S = []
|
S = []
|
||||||
RQxyz = FractionField(Rxyz)
|
|
||||||
pr = [list(GF(p)) for _ in range(n)]
|
pr = [list(GF(p)) for _ in range(n)]
|
||||||
for i in range(0, threshold*r):
|
for i in range(0, threshold*r):
|
||||||
for j in range(0, m):
|
for j in range(0, m):
|
||||||
@ -153,13 +156,7 @@ class as_cover:
|
|||||||
F = self.base_ring
|
F = self.base_ring
|
||||||
m = C.exponent
|
m = C.exponent
|
||||||
r = C.polynomial.degree()
|
r = C.polynomial.degree()
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
||||||
S = []
|
S = []
|
||||||
@ -211,13 +208,7 @@ class as_cover:
|
|||||||
F = self.base_ring
|
F = self.base_ring
|
||||||
m = C.exponent
|
m = C.exponent
|
||||||
r = C.polynomial.degree()
|
r = C.polynomial.degree()
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
||||||
S = []
|
S = []
|
||||||
@ -242,12 +233,8 @@ class as_cover:
|
|||||||
'''Return uniformizer of curve self at i-th place at infinity.'''
|
'''Return uniformizer of curve self at i-th place at infinity.'''
|
||||||
p = self.characteristic
|
p = self.characteristic
|
||||||
n = self.height
|
n = self.height
|
||||||
variable_names = 'x, y'
|
F = self.base_ring
|
||||||
for j in range(n):
|
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||||
variable_names += ', z' + str(j)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
fx = as_function(self, x)
|
fx = as_function(self, x)
|
||||||
z = [as_function(self, zi) for zi in z]
|
z = [as_function(self, zi) for zi in z]
|
||||||
# We create a list of functions. We add there all variables...
|
# We create a list of functions. We add there all variables...
|
||||||
@ -262,14 +249,14 @@ class as_cover:
|
|||||||
a = gcd(vz[j1] , vz[j2])
|
a = gcd(vz[j1] , vz[j2])
|
||||||
vz1 = vz[j1]/a
|
vz1 = vz[j1]/a
|
||||||
vz2 = vz[j2]/a
|
vz2 = vz[j2]/a
|
||||||
for b in GF(p):
|
for b in F:
|
||||||
if (z[j1]^(vz2) - b*z[j2]^(vz1)).valuation(i) > (z[j2]^(vz1)).valuation(i):
|
if (z[j1]^(vz2) - b*z[j2]^(vz1)).valuation(i) > (z[j2]^(vz1)).valuation(i):
|
||||||
list_of_fcts += [z[j1]^(vz2) - b*z[j2]^(vz1)]
|
list_of_fcts += [z[j1]^(vz2) - b*z[j2]^(vz1)]
|
||||||
for j1 in range(n):
|
for j1 in range(n):
|
||||||
a = gcd(vz[j1], vfx)
|
a = gcd(vz[j1], vfx)
|
||||||
vzj = vz[j1] /a
|
vzj = vz[j1] /a
|
||||||
vfx = vfx/a
|
vfx = vfx/a
|
||||||
for b in GF(p):
|
for b in F:
|
||||||
if (fx^(vzj) - b*z[j1]^(vfx)).valuation(i) > (z[j1]^(vfx)).valuation(i):
|
if (fx^(vzj) - b*z[j1]^(vfx)).valuation(i) > (z[j1]^(vfx)).valuation(i):
|
||||||
list_of_fcts += [fx^(vzj) - b*z[j1]^(vfx)]
|
list_of_fcts += [fx^(vzj) - b*z[j1]^(vfx)]
|
||||||
#Finally, we check if on the list there are two elements with the same valuation.
|
#Finally, we check if on the list there are two elements with the same valuation.
|
||||||
@ -307,6 +294,42 @@ class as_cover:
|
|||||||
i+=1
|
i+=1
|
||||||
return ramification_jps
|
return ramification_jps
|
||||||
|
|
||||||
|
def cohomology_of_structure_sheaf_basis(self, threshold = 8):
|
||||||
|
holo_diffs = self.holomorphic_differentials_basis(threshold = threshold)
|
||||||
|
from itertools import product
|
||||||
|
x_series = self.x
|
||||||
|
y_series = self.y
|
||||||
|
z_series = self.z
|
||||||
|
delta = self.nb_of_pts_at_infty
|
||||||
|
p = self.characteristic
|
||||||
|
n = self.height
|
||||||
|
prec = self.prec
|
||||||
|
C = self.quotient
|
||||||
|
F = self.base_ring
|
||||||
|
m = C.exponent
|
||||||
|
r = C.polynomial.degree()
|
||||||
|
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||||
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
|
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
||||||
|
result_fcts = []
|
||||||
|
V = VectorSpace(F,self.genus())
|
||||||
|
S = V.subspace([])
|
||||||
|
RQxyz = FractionField(Rxyz)
|
||||||
|
pr = [list(GF(p)) for _ in range(n)]
|
||||||
|
i = 0
|
||||||
|
while len(result_fcts) < self.genus():
|
||||||
|
for j in range(0, m):
|
||||||
|
for k in product(*pr):
|
||||||
|
f = as_function(self, prod(z[i1]^(k[i1]) for i1 in range(n))/x^i*y^j)
|
||||||
|
f_products = []
|
||||||
|
for omega in holo_diffs:
|
||||||
|
f_products += [sum((f*omega).residue(place = _) for _ in range(self.nb_of_pts_at_infty))]
|
||||||
|
if vector(f_products) not in S:
|
||||||
|
S = S+V.subspace([V(f_products)])
|
||||||
|
result_fcts += [f]
|
||||||
|
i += 1
|
||||||
|
return result_fcts
|
||||||
|
|
||||||
def holomorphic_combinations(S):
|
def holomorphic_combinations(S):
|
||||||
"""Given a list S of pairs (form, corresponding Laurent series at some pt), find their combinations holomorphic at that pt."""
|
"""Given a list S of pairs (form, corresponding Laurent series at some pt), find their combinations holomorphic at that pt."""
|
||||||
C_AS = S[0][0].curve
|
C_AS = S[0][0].curve
|
||||||
|
@ -85,31 +85,6 @@ class as_form:
|
|||||||
return linear_representation(Rxyz(self.form), holo)
|
return linear_representation(Rxyz(self.form), holo)
|
||||||
|
|
||||||
def trace(self):
|
def trace(self):
|
||||||
C = self.curve
|
|
||||||
C_super = C.quotient
|
|
||||||
n = C.height
|
|
||||||
F = C.base_ring
|
|
||||||
variable_names = 'x, y'
|
|
||||||
for j in range(n):
|
|
||||||
variable_names += ', z' + str(j)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
g = self.form
|
|
||||||
result = RxyzQ(0)
|
|
||||||
g_num = Rxyz(numerator(g))
|
|
||||||
g_den = Rxyz(denominator(g))
|
|
||||||
z = prod(z[i] for i in range(n))^(p-1)
|
|
||||||
for a in g_num.monomials():
|
|
||||||
if (z.divides(a)):
|
|
||||||
result += g_num.monomial_coefficient(a)*a/z
|
|
||||||
result /= g_den
|
|
||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
|
||||||
return superelliptic_form(C_super, Rxy(result))
|
|
||||||
|
|
||||||
|
|
||||||
def trace2(self):
|
|
||||||
C = self.curve
|
C = self.curve
|
||||||
C_super = C.quotient
|
C_super = C.quotient
|
||||||
n = C.height
|
n = C.height
|
||||||
@ -128,9 +103,11 @@ class as_form:
|
|||||||
result = result.form
|
result = result.form
|
||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
Qxy = FractionField(Rxy)
|
Qxy = FractionField(Rxy)
|
||||||
|
result = as_reduction(AS, result)
|
||||||
return superelliptic_form(C_super, Qxy(result))
|
return superelliptic_form(C_super, Qxy(result))
|
||||||
|
|
||||||
|
def residue(self, place=0):
|
||||||
|
return self.expansion_at_infty(i = place).residue()
|
||||||
|
|
||||||
def artin_schreier_transform(power_series, prec = 10):
|
def artin_schreier_transform(power_series, prec = 10):
|
||||||
"""Given a power_series, find correction such that power_series - (correction)^p +correction has valuation
|
"""Given a power_series, find correction such that power_series - (correction)^p +correction has valuation
|
||||||
|
@ -34,10 +34,16 @@ class as_function:
|
|||||||
return as_function(C, constant*g)
|
return as_function(C, constant*g)
|
||||||
|
|
||||||
def __mul__(self, other):
|
def __mul__(self, other):
|
||||||
C = self.curve
|
if isinstance(other, as_function):
|
||||||
g1 = self.function
|
C = self.curve
|
||||||
g2 = other.function
|
g1 = self.function
|
||||||
return as_function(C, g1*g2)
|
g2 = other.function
|
||||||
|
return as_function(C, g1*g2)
|
||||||
|
if isinstance(other, as_form):
|
||||||
|
C = self.curve
|
||||||
|
g1 = self.function
|
||||||
|
g2 = other.form
|
||||||
|
return as_form(C, g1*g2)
|
||||||
|
|
||||||
def __truediv__(self, other):
|
def __truediv__(self, other):
|
||||||
C = self.curve
|
C = self.curve
|
||||||
@ -88,33 +94,6 @@ class as_function:
|
|||||||
return as_function(C, g.substitute(sub_list))
|
return as_function(C, g.substitute(sub_list))
|
||||||
|
|
||||||
def trace(self):
|
def trace(self):
|
||||||
C = self.curve
|
|
||||||
C_super = C.quotient
|
|
||||||
n = C.height
|
|
||||||
F = C.base_ring
|
|
||||||
variable_names = 'x, y'
|
|
||||||
for j in range(n):
|
|
||||||
variable_names += ', z' + str(j)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
g = self.function
|
|
||||||
g = as_reduction(C, g)
|
|
||||||
result = RxyzQ(0)
|
|
||||||
g_num = Rxyz(numerator(g))
|
|
||||||
g_den = Rxyz(denominator(g))
|
|
||||||
z = prod(z[i] for i in range(n))^(p-1)
|
|
||||||
for a in g_num.monomials():
|
|
||||||
if (z.divides(a)):
|
|
||||||
result += g_num.monomial_coefficient(a)*a/z
|
|
||||||
result /= g_den
|
|
||||||
result = as_reduction(C, result)
|
|
||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
|
||||||
Qxy = FractionField(Rxy)
|
|
||||||
return superelliptic_function(C_super, Qxy(result))
|
|
||||||
|
|
||||||
def trace2(self):
|
|
||||||
C = self.curve
|
C = self.curve
|
||||||
C_super = C.quotient
|
C_super = C.quotient
|
||||||
n = C.height
|
n = C.height
|
||||||
@ -133,9 +112,32 @@ class as_function:
|
|||||||
result = result.function
|
result = result.function
|
||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
Qxy = FractionField(Rxy)
|
Qxy = FractionField(Rxy)
|
||||||
|
result = as_reduction(AS, result)
|
||||||
return superelliptic_function(C_super, Qxy(result))
|
return superelliptic_function(C_super, Qxy(result))
|
||||||
|
|
||||||
|
|
||||||
|
def diffn(self):
|
||||||
|
C = self.curve
|
||||||
|
C_super = C.quotient
|
||||||
|
n = C.height
|
||||||
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
|
fcts = C.functions
|
||||||
|
f = self.function
|
||||||
|
y_super = superelliptic_function(C_super, y)
|
||||||
|
dy_super = y_super.diffn().form
|
||||||
|
dz = []
|
||||||
|
for i in range(n):
|
||||||
|
dfct = fcts[i].diffn().form
|
||||||
|
dz += [-dfct]
|
||||||
|
result = f.derivative(x)
|
||||||
|
result += f.derivative(y)*dy_super
|
||||||
|
for i in range(n):
|
||||||
|
result += f.derivative(z[i])*dz[i]
|
||||||
|
return as_form(C, result)
|
||||||
|
|
||||||
def valuation(self, i = 0):
|
def valuation(self, i = 0):
|
||||||
'''Return valuation at i-th place at infinity.'''
|
'''Return valuation at i-th place at infinity.'''
|
||||||
return self.expansion_at_infty(i).valuation()
|
C = self.curve
|
||||||
|
F = C.base_ring
|
||||||
|
Rt.<t> = LaurentSeriesRing(F)
|
||||||
|
return Rt(self.expansion_at_infty(i)).valuation()
|
||||||
|
@ -6,9 +6,9 @@ def combination_components(omega, zmag, w):
|
|||||||
group_elts = [(j1, j2) for j1 in range(p) for j2 in range(p)]
|
group_elts = [(j1, j2) for j1 in range(p) for j2 in range(p)]
|
||||||
zvee = dual_elt(AS, zmag)
|
zvee = dual_elt(AS, zmag)
|
||||||
result = as_form(AS, 0)
|
result = as_form(AS, 0)
|
||||||
for i in range(p^2):
|
for g in AS.group:
|
||||||
omegai = ith_magical_component(omega, zvee, i)
|
omegag = ith_magical_component(omega, zvee, g)
|
||||||
aux_fct1 = w.group_action(group_elts[i]).function
|
aux_fct1 = w.group_action(g).function
|
||||||
aux_fct2 = omegai.form
|
aux_fct2 = omegag.form
|
||||||
result += as_form(AS, aux_fct1*aux_fct2)
|
result += as_form(AS, aux_fct1*aux_fct2)
|
||||||
return result
|
return result
|
@ -13,12 +13,14 @@ def dual_elt(AS, zmag):
|
|||||||
M = matrix(RxyzQ, p^n, p^n)
|
M = matrix(RxyzQ, p^n, p^n)
|
||||||
for i in range(p^n):
|
for i in range(p^n):
|
||||||
for j in range(p^n):
|
for j in range(p^n):
|
||||||
M[i, j] = (zmag.group_action(G[i])*zmag.group_action(G[j])).trace2()
|
elt = (zmag.group_action(G[i])*zmag.group_action(G[j])).trace().function
|
||||||
|
elt = Rxyz(elt.numerator())/Rxyz(elt.denominator())
|
||||||
|
M[i, j] = RxyzQ(elt)
|
||||||
main_det = M.determinant()
|
main_det = M.determinant()
|
||||||
zvee = as_function(AS, 0)
|
zvee = as_function(AS, 0)
|
||||||
for i in range(p^n):
|
for i in range(p^n):
|
||||||
Mprim = matrix(RxyzQ, M)
|
Mprim = matrix(RxyzQ, M)
|
||||||
Mprim[:, i] = vector([(j == 0) for j in range(p^n)])
|
Mprim[:, i] = vector([(j == 0) for j in range(p^n)])
|
||||||
fi = Mprim.determinant()/main_det
|
fi = Mprim.determinant()/main_det
|
||||||
zvee += fi*zmag.group_action(G[i])
|
zvee += as_function(AS, fi*(zmag.group_action(G[i]).function))
|
||||||
return zvee
|
return zvee
|
@ -1,8 +1,6 @@
|
|||||||
def ith_magical_component(omega, zvee, g):
|
def ith_magical_component(omega, zvee, g):
|
||||||
'''Given a form omega on AS cover, element g of group AS.group and normal basis element zmag, find the decomposition
|
'''Given a form omega on AS cover, element g of group AS.group and normal basis element zmag, find the decomposition
|
||||||
sum_g g(zmag) omega_g and return omega_g.'''
|
sum_g g(zmag) omega_g and return omega_g.'''
|
||||||
AS = omega.curve
|
z_vee_g = zvee.group_action(g)
|
||||||
p = AS.characteristic
|
new_form = z_vee_g*omega
|
||||||
z_vee_fct = zvee.group_action(g).function
|
return new_form.trace()
|
||||||
new_form = as_form(AS, z_vee_fct*omega.form)
|
|
||||||
return new_form.trace2()
|
|
15
sage/as_covers/tests/diffn_test.sage
Normal file
15
sage/as_covers/tests/diffn_test.sage
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
p = 3
|
||||||
|
m = 1
|
||||||
|
F = GF(p)
|
||||||
|
Rx.<x> = PolynomialRing(F)
|
||||||
|
f = x^2 + 1
|
||||||
|
C_super = superelliptic(f, m)
|
||||||
|
|
||||||
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
|
f1 = superelliptic_function(C_super, x^2)
|
||||||
|
f2 = superelliptic_function(C_super, x^4)
|
||||||
|
AS = as_cover(C_super, [f1, f2], prec=1000)
|
||||||
|
RxyzQ, Rxyz, x, y, z = AS.fct_field
|
||||||
|
f_z = as_function(AS, z[0]*z[1]*y)
|
||||||
|
df_z = f_z.diffn()
|
||||||
|
print(df_z.form == -z[0]*z[1]*x + y*z[1]*x - y*z[0]*x^3)
|
@ -15,6 +15,6 @@ zdual = dual_elt(AS, zmag)
|
|||||||
for i in range(p):
|
for i in range(p):
|
||||||
for j in range(p):
|
for j in range(p):
|
||||||
if (i, j) == (0, 0):
|
if (i, j) == (0, 0):
|
||||||
print((zmag*(zdual.group_action([i, j]))).trace2().function == 1)
|
print((zmag*(zdual.group_action([i, j]))).trace().function == 1)
|
||||||
else:
|
else:
|
||||||
print((zmag*(zdual.group_action([i, j]))).trace2().function == 0)
|
print((zmag*(zdual.group_action([i, j]))).trace().function == 0)
|
@ -1,4 +1,4 @@
|
|||||||
p = 3
|
p = 5
|
||||||
m = 1
|
m = 1
|
||||||
F = GF(p)
|
F = GF(p)
|
||||||
Rx.<x> = PolynomialRing(F)
|
Rx.<x> = PolynomialRing(F)
|
||||||
@ -6,51 +6,14 @@ f = x
|
|||||||
C_super = superelliptic(f, m)
|
C_super = superelliptic(f, m)
|
||||||
|
|
||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
f1 = superelliptic_function(C_super, x^2)
|
for a in range(3, 13):
|
||||||
f2 = superelliptic_function(C_super, x^4)
|
for b in range(3, 13):
|
||||||
f3 = superelliptic_function(C_super, x^5)
|
if a %p != 0 and b%p != 0 and a !=b:
|
||||||
AS = as_cover(C_super, [f1, f2, f3], prec=1000)
|
try:
|
||||||
print(AS)
|
f1 = superelliptic_function(C_super, x^a+x)
|
||||||
zmag = AS.magical_element(threshold = 20)[0]
|
f2 = superelliptic_function(C_super, x^b)
|
||||||
zvee = dual_elt(AS, zmag)
|
AS = as_cover(C_super, [f1, f2], prec=1000)
|
||||||
|
#print(AS.at_most_poles(AS.exponent_of_different_prim()))
|
||||||
### DEFINE THE POLYNOMIALS
|
print(AS.magical_element(threshold = 20))
|
||||||
n = AS.height
|
except:
|
||||||
variable_names = 'x, y'
|
pass
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
|
|
||||||
###############
|
|
||||||
def val_of_components(omega, zvee):
|
|
||||||
result = []
|
|
||||||
AS = omega.curve
|
|
||||||
for i in range(p^2):
|
|
||||||
omega_i = ith_magical_component(omega, zvee, i)
|
|
||||||
val = omega_i.expansion_at_infty().valuation()
|
|
||||||
val = val*p^2 + AS.exponent_of_different()
|
|
||||||
result += [val]
|
|
||||||
return result
|
|
||||||
#############
|
|
||||||
G = AS.group
|
|
||||||
|
|
||||||
g = AS.genus()
|
|
||||||
print(AS.exponent_of_different_prim())
|
|
||||||
v_x = as_function(AS, x).expansion_at_infty().valuation()
|
|
||||||
n = AS.height
|
|
||||||
v_z = [as_function(AS, z[i]).expansion_at_infty().valuation() for i in range(n)]
|
|
||||||
omega = AS.holomorphic_differentials_basis()[-16]
|
|
||||||
from itertools import product
|
|
||||||
pr = [list(range(p)) for _ in range(n)]
|
|
||||||
for i in range(0, 30):
|
|
||||||
for k in product(*pr):
|
|
||||||
v_w = i*v_x+ sum(k[i]*v_z[i] for i in range(n))
|
|
||||||
if (v_w < - AS.exponent_of_different_prim() + 10 and v_w > - AS.exponent_of_different_prim()):
|
|
||||||
w = as_function(AS, x^i * prod(z[i1]^(k[i1]) for i1 in range(n)))
|
|
||||||
result = as_form(AS, 0)
|
|
||||||
for g in G:
|
|
||||||
component = ith_magical_component(omega, zvee, g).form
|
|
||||||
result += as_form(AS, w.group_action(g).function*component)
|
|
||||||
print(result.expansion_at_infty().valuation(), w.expansion_at_infty().valuation() - zmag.expansion_at_infty().valuation())
|
|
@ -1,43 +1,14 @@
|
|||||||
p = 3
|
p = 3
|
||||||
m = 1
|
m = 1
|
||||||
F = GF(p)
|
F = GF(p^2, 'a')
|
||||||
|
a = F.gens()[0]
|
||||||
Rx.<x> = PolynomialRing(F)
|
Rx.<x> = PolynomialRing(F)
|
||||||
f = x
|
f = x
|
||||||
C_super = superelliptic(f, m)
|
C_super = superelliptic(f, m)
|
||||||
|
|
||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
f1 = superelliptic_function(C_super, x^7)
|
f1 = superelliptic_function(C_super, x^7)
|
||||||
f2 = superelliptic_function(C_super, x^4)
|
f2 = superelliptic_function(C_super, a*x^7)
|
||||||
AS = as_cover(C_super, [f1, f2], prec=1000)
|
AS = as_cover(C_super, [f1, f2], prec=1000)
|
||||||
print(AS.uniformizer())
|
#print(AS.uniformizer())
|
||||||
|
print(AS.ramification_jumps())
|
||||||
def rep_jumps(AS, threshold = 30):
|
|
||||||
ile = 1
|
|
||||||
i = 1
|
|
||||||
result = []
|
|
||||||
flag = 0
|
|
||||||
while(flag == 0):
|
|
||||||
if len(AS.at_most_poles(i, threshold = threshold)) > ile:
|
|
||||||
ile = len(AS.at_most_poles(i, threshold = threshold))
|
|
||||||
result += [i]
|
|
||||||
if i%p != 0:
|
|
||||||
flag = 1
|
|
||||||
i+=1
|
|
||||||
return result
|
|
||||||
|
|
||||||
#print(rep_jumps(AS, threshold = 30))
|
|
||||||
|
|
||||||
def uniformizer(AS, threshold = 30):
|
|
||||||
p = AS.characteristic
|
|
||||||
n = AS.height
|
|
||||||
variable_names = 'x, y'
|
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
zmag = AS.magical_element()[0]
|
|
||||||
v_x = as_function(AS, x).expansion_at_infty().valuation()
|
|
||||||
dprim = AS.exponent_of_different_prim()
|
|
||||||
d, a, b = xgcd(v_x, -dprim)
|
|
||||||
return as_function(AS, x^a*zmag.function^b)
|
|
||||||
|
@ -1,7 +1,23 @@
|
|||||||
Rx.<x> = PolynomialRing(GF(5))
|
p = 3
|
||||||
C = superelliptic(x^3 + 1, 2)
|
m = 1
|
||||||
Rxy.<x, y> = PolynomialRing(GF(5), 2)
|
F = GF(p)
|
||||||
f1 = superelliptic_function(C, x*y)
|
Rx.<x> = PolynomialRing(F)
|
||||||
CAS = as_cover(C, [f1])
|
f = x
|
||||||
g = CAS.uniformizer()
|
C_super = superelliptic(f, m)
|
||||||
AA = g
|
|
||||||
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
|
f1 = superelliptic_function(C_super, x^7)
|
||||||
|
f2 = superelliptic_function(C_super, x^4)
|
||||||
|
AS = as_cover(C_super, [f1, f2], prec=1000)
|
||||||
|
AS1 = as_cover(C_super, [f1], prec=1000)
|
||||||
|
#print(AS.ramification_jumps())
|
||||||
|
#print(pole_numbers(AS))
|
||||||
|
RxyzQ, Rxyz, x, y, z = AS.fct_field
|
||||||
|
zmag = (AS.magical_element())[0]
|
||||||
|
zvee = dual_elt(AS, zmag)
|
||||||
|
t = AS.uniformizer()
|
||||||
|
omega1 = AS1.holomorphic_differentials_basis()[4]
|
||||||
|
omega2 = as_form(AS, t.function*RxyzQ(omega1.form))
|
||||||
|
|
||||||
|
for g in AS.group:
|
||||||
|
print(ith_magical_component(omega2, zvee, g).expansion_at_infty().valuation(), AS.jumps[0][1])
|
@ -5,6 +5,7 @@ load('superelliptic/superelliptic_cech_class.sage')
|
|||||||
load('as_covers/as_cover_class.sage')
|
load('as_covers/as_cover_class.sage')
|
||||||
load('as_covers/as_function_class.sage')
|
load('as_covers/as_function_class.sage')
|
||||||
load('as_covers/as_form_class.sage')
|
load('as_covers/as_form_class.sage')
|
||||||
|
load('as_covers/as_reduction.sage')
|
||||||
load('as_covers/as_auxilliary.sage')
|
load('as_covers/as_auxilliary.sage')
|
||||||
load('as_covers/dual_element.sage')
|
load('as_covers/dual_element.sage')
|
||||||
load('as_covers/ith_magical_component.sage')
|
load('as_covers/ith_magical_component.sage')
|
||||||
@ -14,5 +15,6 @@ load('auxilliaries/reverse.sage')
|
|||||||
load('auxilliaries/hensel.sage')
|
load('auxilliaries/hensel.sage')
|
||||||
##############
|
##############
|
||||||
##############
|
##############
|
||||||
load('drafty/draft2.sage')
|
load('drafty/draft.sage')
|
||||||
#load('drafty/draft3.sage')
|
load('drafty/pole_numbers.sage')
|
||||||
|
#load('drafty/draft4.sage')
|
@ -4,11 +4,13 @@
|
|||||||
#load('as_covers/tests/group_action_matrices_test.sage')
|
#load('as_covers/tests/group_action_matrices_test.sage')
|
||||||
#print("dual_element_test:")
|
#print("dual_element_test:")
|
||||||
#load('as_covers/tests/dual_element_test.sage')
|
#load('as_covers/tests/dual_element_test.sage')
|
||||||
#print("ith_component_test:")
|
print("ith_component_test:")
|
||||||
#load('as_covers/tests/ith_component_test.sage')
|
load('as_covers/tests/ith_component_test.sage')
|
||||||
#print("ith ramification group test:")
|
#print("ith ramification group test:")
|
||||||
#load('as_covers/tests/ith_ramification_gp_test.sage')
|
#load('as_covers/tests/ith_ramification_gp_test.sage')
|
||||||
#print("uniformizer test:")
|
#print("uniformizer test:")
|
||||||
#load('as_covers/tests/uniformizer_test.sage')
|
#load('as_covers/tests/uniformizer_test.sage')
|
||||||
print("ramification jumps test:")
|
#print("ramification jumps test:")
|
||||||
load('as_covers/tests/ramification_jumps_test.sage')
|
#load('as_covers/tests/ramification_jumps_test.sage')
|
||||||
|
print("diffn_test:")
|
||||||
|
load('as_covers/tests/diffn_test.sage')
|
@ -726,9 +726,6 @@
|
|||||||
"outputs": [
|
"outputs": [
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"Rx.<x> = PolynomialRing(GF(5))\n",
|
|
||||||
"f = x^7 + x + 1\n",
|
|
||||||
"C = superelliptic(f, 2)"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -740,7 +737,6 @@
|
|||||||
"outputs": [
|
"outputs": [
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"omega = C.de_rham_basis()[3]"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user