frobenius kernel

This commit is contained in:
jgarnek 2023-09-22 06:45:48 +00:00
parent 5e738d441d
commit 599aa94db7
8 changed files with 20509 additions and 53 deletions

File diff suppressed because one or more lines are too long

View File

@ -172,6 +172,7 @@ class as_cover:
m = C.exponent m = C.exponent
r = C.polynomial.degree() r = C.polynomial.degree()
RxyzQ, Rxyz, x, y, z = self.fct_field RxyzQ, Rxyz, x, y, z = self.fct_field
F = C.base_ring
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 = []
@ -367,7 +368,7 @@ class as_cover:
#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 = [(fct.diffn(), fct.diffn().expansion_at_infty())] S = [(fct.diffn(), fct.diffn().expansion_at_infty())]
pr = [list(GF(p)) for _ in range(n)] pr = [list(GF(p)) for _ in range(n)]
holo = self.holomorphic_differentials_basis() holo = self.holomorphic_differentials_basis(threshold = threshold)
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):
for k in product(*pr): for k in product(*pr):
@ -385,9 +386,9 @@ class as_cover:
def de_rham_basis(self, threshold = 30): def de_rham_basis(self, threshold = 30):
result = [] result = []
for omega in self.holomorphic_differentials_basis(): for omega in self.holomorphic_differentials_basis(threshold = threshold):
result += [as_cech(self, omega, as_function(self, 0))] result += [as_cech(self, omega, as_function(self, 0))]
for f in self.cohomology_of_structure_sheaf_basis(): for f in self.cohomology_of_structure_sheaf_basis(threshold = threshold):
omega = self.lift_to_de_rham(f, threshold = threshold) omega = self.lift_to_de_rham(f, threshold = threshold)
result += [as_cech(self, omega, f)] result += [as_cech(self, omega, f)]
return result return result

View File

@ -210,8 +210,8 @@ def are_forms_linearly_dependent(set_of_forms):
denominators = prod(denominator(omega.form) for omega in set_of_forms) denominators = prod(denominator(omega.form) for omega in set_of_forms)
return is_linearly_dependent([Rxyz(denominators*omega.form) for omega in set_of_forms]) return is_linearly_dependent([Rxyz(denominators*omega.form) for omega in set_of_forms])
#given a set S of (form, corresponding Laurent series at some pt), find their combinations holomorphic at that pt
def holomorphic_combinations_fcts(S, pole_order): def holomorphic_combinations_fcts(S, pole_order):
'''given a set S of (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
p = C_AS.characteristic p = C_AS.characteristic
F = C_AS.base_ring F = C_AS.base_ring

View File

@ -56,13 +56,13 @@ class as_function:
g1 = self.function g1 = self.function
return as_function(C, g1^(exponent)) return as_function(C, g1^(exponent))
def expansion_at_infty(self, i = 0): def expansion_at_infty(self, place = 0):
C = self.curve C = self.curve
delta = C.nb_of_pts_at_infty delta = C.nb_of_pts_at_infty
F = C.base_ring F = C.base_ring
x_series = C.x_series[i] x_series = C.x_series[place]
y_series = C.y_series[i] y_series = C.y_series[place]
z_series = C.z_series[i] z_series = C.z_series[place]
n = C.height n = C.height
variable_names = 'x, y' variable_names = 'x, y'
for j in range(n): for j in range(n):
@ -137,6 +137,22 @@ class as_function:
result = as_reduction(AS, result) result = as_reduction(AS, result)
return superelliptic_function(C_super, Qxy(result)) return superelliptic_function(C_super, Qxy(result))
def coordinates(self, prec = 100, basis = 0):
"Return coordinates in H^1(X, OX)."
AS = self.curve
if basis == 0:
basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis()]
holo_diffs = basis[0]
coh_basis = basis[1]
f_products = []
for f in coh_basis:
f_products += [[omega.serre_duality_pairing(f) for omega in holo_diffs]]
product_of_fct_and_omegas = []
product_of_fct_and_omegas = [omega.serre_duality_pairing(self) for omega in holo_diffs]
V = (F^(AS.genus())).span_of_basis([vector(a) for a in f_products])
coh_coordinates = V.coordinates(product_of_fct_and_omegas)
return coh_coordinates
def diffn(self): def diffn(self):
C = self.curve C = self.curve
@ -157,9 +173,9 @@ class as_function:
result += f.derivative(z[i])*dz[i] result += f.derivative(z[i])*dz[i]
return as_form(C, result) return as_form(C, result)
def valuation(self, i = 0): def valuation(self, place = 0):
'''Return valuation at i-th place at infinity.''' '''Return valuation at i-th place at infinity.'''
C = self.curve C = self.curve
F = C.base_ring F = C.base_ring
Rt.<t> = LaurentSeriesRing(F) Rt.<t> = LaurentSeriesRing(F)
return Rt(self.expansion_at_infty(i)).valuation() return Rt(self.expansion_at_infty(place = place)).valuation()

View File

@ -55,11 +55,20 @@ def group_action_matrices_old(C_AS):
A[i] = A[i].transpose() A[i] = A[i].transpose()
return A return A
def group_action_matrices_log(C_AS): def group_action_matrices_log(AS):
n = AS.height
generators = []
for i in range(n):
ei = n*[0]
ei[i] = 1
generators += [ei]
return group_action_matrices(AS.at_most_poles_forms(1), generators, basis = AS.at_most_poles_forms(1))
def group_action_matrices_log_old(C_AS):
F = C_AS.base_ring F = C_AS.base_ring
n = C_AS.height n = C_AS.height
holo = C_AS.at_most_poles_forms(1) holo = C_AS.at_most_poles_forms(1)
holo_forms = [omega.form for omega in holo] holo_forms = [omega for omega in holo]
denom = LCM([denominator(omega) for omega in holo_forms]) denom = LCM([denominator(omega) for omega in holo_forms])
variable_names = 'x, y' variable_names = 'x, y'
for j in range(n): for j in range(n):

View File

@ -1,39 +1,8 @@
p = 3 p = 5
m = 2 m = 1
F = GF(p^2, 'a') F = GF(p)
a = F.gens()[0] Rx.<x> = PolynomialRing(F)
Rxx.<x> = PolynomialRing(F) f = x
#f = (x^3 - x)^3 + x^3 - x C = superelliptic(f, 1)
f = x^3 + a*x + 1 AS1 = as_cover(C, [C.x^3], prec = 200)
f1 = f(x = x^p - x) print(AS1.genus())
C = superelliptic(f, m)
C1 = superelliptic(f1, m, prec = 500)
#B = C.crystalline_cohomology_basis(prec = 100, info = 1)
#B1 = C1.crystalline_cohomology_basis(prec = 100, info = 1)
def crystalline_matrix(C, prec = 50):
B = C.crystalline_cohomology_basis(prec = prec)
g = C.genus()
p = C.characteristic
Zp2 = Integers(p^2)
M = matrix(Zp2, 2*g, 2*g)
for i, b in enumerate(B):
M[i, :] = vector(autom(b).coordinates(basis = B))
return M
#b0 = de_rham_witt_lift(C.de_rham_basis()[0], prec = 100)
#b1 = de_rham_witt_lift(C1.de_rham_basis()[2], prec = 300)
#print(b0.regular_form())
#print(b1.regular_form())
for b in C1.de_rham_basis():
print(mult_by_p(b.omega0).regular_form())
#for b in B:
# print(b.regular_form())
#for b in B1:
# print(b.regular_form())
#M = crystalline_matrix(C, prec = 150)
#print(M)
#print(M^3)

View File

@ -28,8 +28,9 @@ load('auxilliaries/linear_combination_polynomials.sage')
load('auxilliaries/laurent_analytic_part.sage') load('auxilliaries/laurent_analytic_part.sage')
############## ##############
############## ##############
load('drafty/convert_superelliptic_into_AS.sage') #load('drafty/convert_superelliptic_into_AS.sage')
load('drafty/draft.sage') load('drafty/draft.sage')
#load('drafty/draft_klein_covers.sage') #load('drafty/draft_klein_covers.sage')
#load('drafty/draft_klein_covers.sage')
#load('drafty/2gpcovers.sage') #load('drafty/2gpcovers.sage')
load('drafty/pole_numbers.sage') load('drafty/pole_numbers.sage')

View File

@ -0,0 +1,25 @@
def frobenius_kernel(C, prec=50):
M = C.frobenius_matrix(prec=prec).transpose()
K = M.kernel().basis()
g = C.genus()
result = []
basis = C.cohomology_of_structure_sheaf_basis()
for v in K:
coh = 0*C.x
for i in range(g):
coh += v[i] * basis[i]
result += [coh]
return result
def cartier_kernel(C, prec=50):
M = C.cartier_matrix(prec=prec).transpose()
K = M.kernel().basis()
g = C.genus()
result = []
basis = C.holomorphic_differentials_basis()
for v in K:
coh = 0*C.dx
for i in range(g):
coh += v[i] * basis[i]
result += [coh]
return result