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 m = 2
F = GF(p) F = GF(p)
Rx.<x> = PolynomialRing(F) 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) C = superelliptic(f, m)
#C1 = patch(C) C1 = superelliptic(f1, m)
#print(C1.crystalline_cohomology_basis()) B = C.crystalline_cohomology_basis(prec = 100, info = 1)
#g1 = C1.polynomial B1 = C1.crystalline_cohomology_basis(prec = 500, info = 1)
#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())
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 fct = cech_class.f
omega0_lift = de_rham_witt_lift_form0(omega0) omega0_lift = de_rham_witt_lift_form0(omega0)
omega8_lift = de_rham_witt_lift_form8(omega8) 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)) 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: if aux.h1.function != 0:
raise ValueError('Something went wrong - aux is not of the form (V(smth) + dV(smth), V(smth)).') 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. 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_f = decom_aux_h2[2]
aux_omega0 = decomposition_omega0_omega8(aux.omega, prec=prec)[0] 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()) 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() return result
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()) def crystalline_cohomology_basis(self, prec = 50, info = 0):
#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()
def crystalline_cohomology_basis(self, prec = 50):
result = [] result = []
for a in self.de_rham_basis(): for i, a in enumerate(self.de_rham_basis()):
result += [de_rham_witt_lift(a, prec = prec)] 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 return result
superelliptic.crystalline_cohomology_basis = crystalline_cohomology_basis superelliptic.crystalline_cohomology_basis = crystalline_cohomology_basis

View File

@ -66,7 +66,7 @@ class superelliptic_regular_drw_form:
B = self.dy B = self.dy
h2 = self.h2 h2 = self.h2
omega = self.omega 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() form2 = B.teichmuller()*C.y.teichmuller().diffn()
def __repr__(self): def __repr__(self):
@ -77,11 +77,19 @@ def regular_drw_form(omega):
omega_aux = omega.r() omega_aux = omega.r()
omega_aux = omega_aux.regular_form() omega_aux = omega_aux.regular_form()
aux = omega - omega_aux.dx.teichmuller()*C.x.teichmuller().diffn() - omega_aux.dy.teichmuller()*C.y.teichmuller().diffn() 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 return result
superelliptic_drw_form.regular_form = regular_drw_form 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): 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. '''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''' 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) return (omega1, fct)
def decomposition_omega8_hpdh(omega, prec = 50): 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. '''Decompose omega = (regular on U8) + h^(p-1) dh, so that Cartier(omega) = (regular on U8) + dh.
Result: (regular on U8, h)''' Result: (regular on U8, h)'''
C = omega.curve C = omega.curve
@ -30,23 +29,16 @@ def decomposition_omega8_hpdh(omega, prec = 50):
p = C.characteristic p = C.characteristic
Rt.<t> = LaurentSeriesRing(F) Rt.<t> = LaurentSeriesRing(F)
omega_analytic = Rt(laurent_analytic_part(omega.expansion_at_infty(prec = prec))) omega_analytic = Rt(laurent_analytic_part(omega.expansion_at_infty(prec = prec)))
print('omega_analytic', omega_analytic)
Cv = C.uniformizer() Cv = C.uniformizer()
v = Fxy(Cv.function) v = Fxy(Cv.function)
omega_analytic = Fxy(omega_analytic(t = v)) omega_analytic = Fxy(omega_analytic(t = v))
omega_analytic = superelliptic_function(C, omega_analytic)*Cv.diffn() 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 omega8 = omega - omega_analytic
print('omega8', omega8)
dh = omega.cartier() - omega8.cartier() dh = omega.cartier() - omega8.cartier()
print('dh', dh)
h = dh.int() h = dh.int()
print('omega8.expansion_at_infty()', omega8.expansion_at_infty(prec = prec))
return (omega8, h) return (omega8, h)
def decomposition_g8_pth_power(fct, prec = 50): 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).''' '''Decompose fct as g8 + A^p, if possible. Output: (g8, A).'''
C = fct.curve C = fct.curve
F = C.base_ring F = C.base_ring
@ -62,7 +54,6 @@ def decomposition_g8_pth_power(fct, prec = 50):
return (g8, A) return (g8, A)
def decomposition_g8_p2th_power(fct): def decomposition_g8_p2th_power(fct):
print('decomposition_g8_p2th_power', fct)
'''Decompose fct as g8 + A^(p^2), if possible. Output: (g8, A).''' '''Decompose fct as g8 + A^(p^2), if possible. Output: (g8, A).'''
g0, A = decomposition_g8_pth_power(fct) g0, A = decomposition_g8_pth_power(fct)
A0, A1 = decomposition_g8_pth_power(A) 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.omega8.h2 = decomposition_g8_p2th_power(aux.omega8.h2)[0]
aux.f += aux.omega8.h2.verschiebung() aux.f += aux.omega8.h2.verschiebung()
aux.omega8.h2 = 0*C.x 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()) aux_divided_by_p = superelliptic_cech(C, aux.omega0.omega.cartier(), aux.f.f.pth_root())
return aux_divided_by_p return aux_divided_by_p
def coordinates(self, basis = 0): def coordinates(self, basis = 0, prec = 50):
C = self.curve C = self.curve
g = C.genus() g = C.genus()
coord_mod_p = self.r().coordinates() coord_mod_p = self.r().coordinates()
print(coord_mod_p)
coord_lifted = [lift(a) for a in coord_mod_p] coord_lifted = [lift(a) for a in coord_mod_p]
if basis == 0: if basis == 0:
basis = C.crystalline_cohomology_basis() basis = C.crystalline_cohomology_basis()
@ -106,7 +104,6 @@ class superelliptic_drw_cech:
return coordinates return coordinates
def is_regular(self): 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() 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() eq2 = self.omega0.frobenius().is_regular_on_U0() and self.omega8.frobenius().is_regular_on_Uinfty()
return eq1 and eq2 return eq1 and eq2