nie dziala ani de rham, ani crystalline

This commit is contained in:
jgarnek 2024-01-10 12:40:09 +00:00
parent 64314f8011
commit 3ded25e39d
6 changed files with 57 additions and 13 deletions

View File

@ -13,8 +13,9 @@ class as_cech:
self.omega0 = omega
self.f = f
self.omega8 = self.omega0 - self.f.diffn()
if self.omega0.form not in Rxyz or self.omega8.valuation() < 0:
raise ValueError('cech cocycle not regular')
print(self.omega0.form, self.omega8.valuation())
#if self.omega0.form not in Rxyz or self.omega8.valuation() < 0:
# raise ValueError('cech cocycle not regular')
def __repr__(self):
return "( " + str(self.omega0)+", " + str(self.f) + " )"

View File

@ -45,6 +45,11 @@ class superelliptic_form:
return superelliptic_form(C, other*omega)
return superelliptic_form(C, other.function*omega)
def __truediv__(self, other):
''' f dx/g dx = f/g'''
C = self.curve
return superelliptic_function(C, self.form/other.form)
def cartier(self):
'''Computes Cartier operator on the form. Idea: y^m = f(x) -> y^(p^r - 1) = f(x)^M, where r = ord_p(m),
M = (p^r - 1)/m. Thus h(x)/y^j dx = h(x) f(x)^(M*j)/y^(p^r * j) dx. Thus C(h(x)/y^j dx) = 1/y^(p^(r-1)*j) C(h(x) f(x)^(M*j) dx).'''
@ -86,6 +91,7 @@ class superelliptic_form:
return -result
def coordinates(self, basis = 0):
print('start', self)
"""Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo."""
C = self.curve
if basis == 0:
@ -96,6 +102,7 @@ class superelliptic_form:
denom = LCM([denominator(omega.form) for omega in basis])
basis = [denom*omega.form for omega in basis]
self_with_no_denominator = denom*self.form
print('stop', self_with_no_denominator)
return linear_representation_polynomials(Rxy(self_with_no_denominator), [Rxy(omega) for omega in basis])
def jth_component(self, j):

View File

@ -18,14 +18,29 @@ def decomposition_g0_p2th_power(fct):
return (g0 + A0^p, A1)
def decomposition_omega0_hpdh(omega):
'''Decompose omega = (regular on U0) + h^(p-1) dh, so that Cartier(omega) = (regular on U0) + dh.
'''Decompose omega = (regular on U0) + h^(p-1) dh + d(smth), so that Cartier(omega) = (regular on U0) + dh.
Result: (regular on U0, h)'''
print('decomp!!', omega)
C = omega.curve
F = C.base_ring
p = F.characteristic()
if omega.is_regular_on_U0():
return (omega, 0*C.x)
omega1 = omega.cartier().cartier()
omega1 = omega1.inv_cartier().inv_cartier()
print('do scalkowania', omega.cartier() - omega1.cartier())
fct = (omega.cartier() - omega1.cartier()).integral()
#dfct = omega.cartier() - omega1.cartier() #this is dh
#print('dfct.cartier = 0?', dfct.cartier())
#omegas_by_dh = (omega - omega1)/dfct
#d_omegas_by_dh = omegas_by_dh.diffn()
#fct = - (omega - omega1)/d_omegas_by_dh
#fct = (omega.cartier() - omega1.cartier()).integral()
#h = (omega - omega0)/(d((omega - omega0)/dh))
print('decomposition_omega0_hpdh', omega, omega1, fct)
print('??', omega.verschiebung() == omega1.verschiebung())
return (omega1, fct)
def decomposition_omega8_hpdh(omega, prec = 50):
@ -36,7 +51,6 @@ def decomposition_omega8_hpdh(omega, prec = 50):
Fxy, Rxy, x, y = C.fct_field
F = C.base_ring
p = C.characteristic
C = omega.curve
if omega.is_regular_on_Uinfty():
return (omega, 0*C.x)
Rt.<t> = LaurentSeriesRing(F)
@ -54,6 +68,7 @@ def decomposition_g8_pth_power(fct, prec = 50):
'''Decompose fct as g8 + A^p, if possible. Output: (g8, A).'''
C = fct.curve
F = C.base_ring
p = F.characteristic()
Rt.<t> = LaurentSeriesRing(F)
Fxy, Rxy, x, y = C.fct_field
if fct.expansion_at_infty().valuation() >= 0:
@ -69,6 +84,9 @@ def decomposition_g8_pth_power(fct, prec = 50):
def decomposition_g8_p2th_power(fct):
'''Decompose fct as g8 + A^(p^2), if possible. Output: (g8, A).'''
C = fct.curve
F = C.base_ring
p = F.characteristic()
g0, A = decomposition_g8_pth_power(fct)
A0, A1 = decomposition_g8_pth_power(A)
return (g0 + A0^p, A1)

View File

@ -66,6 +66,8 @@ class superelliptic_drw_cech:
if info: print("Computing " + str(self) + " divided by p.")
#
C = self.curve
F = C.base_ring
p = F.characteristic()
aux = self
Fxy, Rxy, x, y = C.fct_field
aux_f_t_0 = decomposition_g0_g8(aux.f.t, prec=50)[0]
@ -80,7 +82,7 @@ class superelliptic_drw_cech:
# We replace omega by regular on U0
omega = aux.omega0.omega
aux.omega0.omega, fct = decomposition_omega0_hpdh(aux.omega0.omega)
aux.omega0.h2 += fct^p
#aux.omega0.h2 += fct^p #WRONG I think
#
if info: print("Computed decomposition_omega0_hpdh of self.omega0.omega.")
#
@ -107,6 +109,8 @@ class superelliptic_drw_cech:
def coordinates(self, basis = 0, prec = 50, info = 0):
if info: print("Computing coordinates of " + str(self))
C = self.curve
F = C.base_ring
p = F.characteristic()
g = C.genus()
coord_mod_p = self.r().coordinates()
if info: print("Computed coordinates mod p.")
@ -116,7 +120,10 @@ class superelliptic_drw_cech:
aux = self
for i, a in enumerate(basis):
aux -= coord_lifted[i]*a
print("aux!!!", aux)
aux_divided_by_p = aux.div_by_p(info = info)
print("aux by p!!!", aux_divided_by_p)
print("check", mult_by_p(aux_divided_by_p)-aux)
coord_aux_divided_by_p = aux_divided_by_p.coordinates()
if info: print("Computed coordinates mod p of (self - lift)/p.")
coord_aux_divided_by_p = [ZZ(a) for a in coord_aux_divided_by_p]

View File

@ -1,6 +1,6 @@
class superelliptic_drw_form:
def __init__(self, h1, omega, h2):
'''Form [h1] d[x] + V(omega) + dV([h])'''
'''Form [h1] d[x] + V(omega) + dV([h2])'''
self.curve = h1.curve
self.h1 = h1
self.omega = omega

View File

@ -26,6 +26,8 @@ class superelliptic_witt:
second_coor = 0*C.x
X = self.t
Y = other.t
F = C.base_ring
p = F.characteristic()
for i in range(1, p):
second_coor -= binomial_prim(p, i)*X^i*Y^(p-i)
return superelliptic_witt(self.t + other.t, self.f + other.f + second_coor)
@ -149,13 +151,22 @@ def auxilliary_derivative(P):
def mult_by_p(omega):
C = omega.curve
fct = omega.form
Fxy, Rxy, x, y = C.fct_field
omega = superelliptic_form(C, fct^p * x^(p-1))
result = superelliptic_drw_form(0*C.x, omega, 0*C.x)
return result
def mult_by_p(elt):
C = elt.curve
F = C.base_ring
p = F.characteristic()
if isinstance(elt, superelliptic_form):
fct = elt.form
Fxy, Rxy, x, y = C.fct_field
omega = superelliptic_form(C, fct^p * x^(p-1))
result = superelliptic_drw_form(0*C.x, elt, 0*C.x)
return result
if isinstance(elt, superelliptic_function):
return superelliptic_witt(0*C.x, elt^p)
if isinstance(elt, superelliptic_cech):
om0 = elt.omega0
f = elt.f
return superelliptic_drw_cech(mult_by_p(om0), mult_by_p(f))
def verschiebung(elt):
C = elt.curve