przed zmiana w expansion at infty w superelliptic

This commit is contained in:
jgarnek 2023-03-29 10:01:56 +00:00
parent a9d055aa55
commit eda1cca0c2
6 changed files with 1593 additions and 56 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,28 +1,25 @@
p = 3
p = 5
m = 2
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x^3 - x
#f = (x^3 - x)^3 + x^3 - x
f = x^3 + x
f1 = f(x = x^5 - x)
C = superelliptic(f, m)
#C1 = patch(C)
#print(C1.crystalline_cohomology_basis())
#g1 = C1.polynomial
#g_AS = g1(x^p - x)
#C2 = superelliptic(g_AS, 2)
#print(convert_super_into_AS(C2))
#converted = (C2.x)^4 - (C2.x)^2
#print(convert_super_fct_into_AS(converted))
#b = C.crystalline_cohomology_basis()
#print(autom(b[0]).coordinates(basis = b))
#eta1 = (dy + dV(2xy) + V(x^5 \, dy), V(y/x))
#eta1 = superelliptic_drw_cech(C.y.teichmuller().diffn() + (2*C.x*C.y).verschiebung().diffn() + (C.x^5*C.y.diffn()).verschiebung(), (C.y/C.x).verschiebung())
#eta2 = ( x \, dy + 3 x^3 \, dy + dV((2x^4 + 2x^2 + 2) y) + V( (x^4 + x^2 + 1) dy), -[y/x])
#eta2 = superelliptic_drw_cech(C.x.teichmuller()*(C.y.teichmuller()).diffn() + ((2*C.x^4 + 2*C.x^2 + 2*C.one) * C.y).verschiebung().diffn(), - (C.y/C.x).teichmuller())
#omega8_lift0, compare = de_rham_witt_lift(C.de_rham_basis()[1])
#omega8_lift = -(C.x^(-3)).teichmuller()*C.y.teichmuller().diffn() + 2*C.y.teichmuller()*(C.x^(-4)).teichmuller()*C.x.teichmuller().diffn()
#eta2 = de_rham_witt_lift(C.de_rham_basis()[1])
#b = autom(eta2)
#print(autom(C.crystalline_cohomology_basis()[1]).coordinates())
C1 = superelliptic(f1, m)
B = C.crystalline_cohomology_basis(prec = 100, info = 1)
B1 = C1.crystalline_cohomology_basis(prec = 500, 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
#M = crystalline_matrix(C, prec = 150)
#print(M)
#print(M^3)

View File

@ -22,9 +22,7 @@ def de_rham_witt_lift(cech_class, prec = 50):
fct = cech_class.f
omega0_lift = de_rham_witt_lift_form0(omega0)
omega8_lift = de_rham_witt_lift_form8(omega8)
print('omega0_lift, omega8_lift', omega0_lift, omega8_lift)
aux = omega0_lift - omega8_lift - fct.teichmuller().diffn() # now aux is of the form (V(smth) + dV(smth), V(smth))
#return aux
if aux.h1.function != 0:
raise ValueError('Something went wrong - aux is not of the form (V(smth) + dV(smth), V(smth)).')
decom_aux_h2 = decomposition_g0_g8(aux.h2, prec=prec) #decompose dV(smth) in aux as smth regular on U0 - smth regular on U8.
@ -32,24 +30,21 @@ def de_rham_witt_lift(cech_class, prec = 50):
aux_f = decom_aux_h2[2]
aux_omega0 = decomposition_omega0_omega8(aux.omega, prec=prec)[0]
result = superelliptic_drw_cech(omega0_lift - aux_omega0.verschiebung(), fct.teichmuller() + aux_h2.verschiebung() + aux_f.verschiebung())
compare = omega8_lift-decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung()
print("result.omega8 == compare", result.omega8 == compare)
print("result.omega8 - compare", result.omega8 - compare)
#print('test:', omega0_lift - omega8_lift - fct.teichmuller().diffn() == decom_aux_h2[0].verschiebung().diffn() - decom_aux_h2[1].verschiebung().diffn() + decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung())
#print('test 1:', omega0_lift - decom_aux_h2[0].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() - fct.teichmuller().diffn() == omega8_lift - decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung())
#A = omega0_lift - decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung()
#B = decom_aux_h2[0].verschiebung() + fct.teichmuller()
#C = omega8_lift - decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung()
#print('test 2:', A - B.diffn() == C)
#print('test 3:', result.omega0 == A, result.f == B, result.omega8 == C)
#print(result.omega8, '\n \n', compare, '\n \n', aux_f, '\n \n')
return result#.reduce()
return result
def crystalline_cohomology_basis(self, prec = 50):
def crystalline_cohomology_basis(self, prec = 50, info = 0):
result = []
for a in self.de_rham_basis():
result += [de_rham_witt_lift(a, prec = prec)]
for i, a in enumerate(self.de_rham_basis()):
if info:
print("Computing " + str(i) +". basis element")
prec1 = prec
while True:
try:
result += [de_rham_witt_lift(a, prec = prec1)]
break
except IndexError:
prec1 += 100
result += [de_rham_witt_lift(a, prec = prec1)]
return result
superelliptic.crystalline_cohomology_basis = crystalline_cohomology_basis

View File

@ -66,7 +66,7 @@ class superelliptic_regular_drw_form:
B = self.dy
h2 = self.h2
omega = self.omega
form1 = superelliptic_drw_form(A, omega, h2)
form1 = superelliptic_drw_form(A, omega.form(), h2)
form2 = B.teichmuller()*C.y.teichmuller().diffn()
def __repr__(self):
@ -77,11 +77,19 @@ def regular_drw_form(omega):
omega_aux = omega.r()
omega_aux = omega_aux.regular_form()
aux = omega - omega_aux.dx.teichmuller()*C.x.teichmuller().diffn() - omega_aux.dy.teichmuller()*C.y.teichmuller().diffn()
result = superelliptic_regular_drw_form(omega_aux.dx, omega_aux.dy, aux.omega, aux.h2)
aux.omega, fct = decomposition_omega0_hpdh(aux.omega)
aux.h2 += fct^p
aux.h2 = decomposition_g0_p2th_power(aux.h2)[0]
result = superelliptic_regular_drw_form(omega_aux.dx, omega_aux.dy, aux.omega.regular_form(), aux.h2)
return result
superelliptic_drw_form.regular_form = regular_drw_form
def regular_drw_cech(cocycle):
return("( " + str(cocycle.omega0.regular_form()) + ", " + str(cocycle.f) + " )")
superelliptic_drw_cech.regular_form = regular_drw_cech
def regular_form(omega):
'''Given a form omega regular on U0, present it as P(x, y) dx + Q(x, y) dy for some polynomial P, Q.
The output is A(x)*y, B(x), where omega = A(x) y dx + B(x) dy'''

View File

@ -20,7 +20,6 @@ def decomposition_omega0_hpdh(omega):
return (omega1, fct)
def decomposition_omega8_hpdh(omega, prec = 50):
print('decomposition_omega8_hpdh', omega)
'''Decompose omega = (regular on U8) + h^(p-1) dh, so that Cartier(omega) = (regular on U8) + dh.
Result: (regular on U8, h)'''
C = omega.curve
@ -30,23 +29,16 @@ def decomposition_omega8_hpdh(omega, prec = 50):
p = C.characteristic
Rt.<t> = LaurentSeriesRing(F)
omega_analytic = Rt(laurent_analytic_part(omega.expansion_at_infty(prec = prec)))
print('omega_analytic', omega_analytic)
Cv = C.uniformizer()
v = Fxy(Cv.function)
omega_analytic = Fxy(omega_analytic(t = v))
omega_analytic = superelliptic_function(C, omega_analytic)*Cv.diffn()
print('omega_analytic.expansion_at_infty()', omega_analytic.expansion_at_infty(prec = prec))
print('omega_analytic', omega_analytic)
omega8 = omega - omega_analytic
print('omega8', omega8)
dh = omega.cartier() - omega8.cartier()
print('dh', dh)
h = dh.int()
print('omega8.expansion_at_infty()', omega8.expansion_at_infty(prec = prec))
return (omega8, h)
def decomposition_g8_pth_power(fct, prec = 50):
print('decomposition_g8_pth_power', fct)
'''Decompose fct as g8 + A^p, if possible. Output: (g8, A).'''
C = fct.curve
F = C.base_ring
@ -62,7 +54,6 @@ def decomposition_g8_pth_power(fct, prec = 50):
return (g8, A)
def decomposition_g8_p2th_power(fct):
print('decomposition_g8_p2th_power', fct)
'''Decompose fct as g8 + A^(p^2), if possible. Output: (g8, A).'''
g0, A = decomposition_g8_pth_power(fct)
A0, A1 = decomposition_g8_pth_power(A)

View File

@ -84,15 +84,13 @@ class superelliptic_drw_cech:
aux.omega8.h2 = decomposition_g8_p2th_power(aux.omega8.h2)[0]
aux.f += aux.omega8.h2.verschiebung()
aux.omega8.h2 = 0*C.x
print('aux.omega0.omega.cartier() - aux.f.f.pth_root().diffn() == aux.omega8.omega.cartier()', aux.omega0.omega.cartier() - aux.f.f.pth_root().diffn() == aux.omega8.omega.cartier())
aux_divided_by_p = superelliptic_cech(C, aux.omega0.omega.cartier(), aux.f.f.pth_root())
return aux_divided_by_p
def coordinates(self, basis = 0):
def coordinates(self, basis = 0, prec = 50):
C = self.curve
g = C.genus()
coord_mod_p = self.r().coordinates()
print(coord_mod_p)
coord_lifted = [lift(a) for a in coord_mod_p]
if basis == 0:
basis = C.crystalline_cohomology_basis()
@ -106,7 +104,6 @@ class superelliptic_drw_cech:
return coordinates
def is_regular(self):
print(self.omega0.r().is_regular_on_U0(), self.omega8.r().is_regular_on_Uinfty(), self.omega0.frobenius().is_regular_on_U0(), self.omega8.frobenius().is_regular_on_Uinfty())
eq1 = self.omega0.r().is_regular_on_U0() and self.omega8.r().is_regular_on_Uinfty()
eq2 = self.omega0.frobenius().is_regular_on_U0() and self.omega8.frobenius().is_regular_on_Uinfty()
return eq1 and eq2