naprawiony brak (1/p)-liniowosci cartiera

This commit is contained in:
jgarnek 2023-04-05 09:03:19 +00:00
parent a5c2ce2c64
commit 1f66cae85d
6 changed files with 2428 additions and 13 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,13 +1,14 @@
p = 5
p = 3
m = 2
F = GF(p)
F = GF(p^2, 'a')
a = F.gens()[0]
Rxx.<x> = PolynomialRing(F)
#f = (x^3 - x)^3 + x^3 - x
f = x^3 + x
f1 = f(x = x^5 - x)
f = x^3 + a*x + 1
f1 = f(x = x^p - x)
C = superelliptic(f, m)
#C1 = superelliptic(f1, m, prec = 500)
B = C.crystalline_cohomology_basis(prec = 100, info = 1)
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):
@ -20,8 +21,15 @@ def crystalline_matrix(C, prec = 50):
M[i, :] = vector(autom(b).coordinates(basis = B))
return M
for b in B:
print(b.regular_form())
#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())

View File

@ -127,14 +127,14 @@ def cut(f, i):
return sum(R(x^(j-i-1)) * coeff[j] for j in range(i+1, f.degree() + 1))
def polynomial_part(p, h):
F = GF(p)
F = base_ring(parent(h))
Rx.<x> = PolynomialRing(F)
h = Rx(h)
result = Rx(0)
for i in range(0, h.degree()+1):
if (i%p) == p-1:
power = Integer((i-(p-1))/p)
result += Integer(h[i]) * x^(power)
result += F(h[i]) * x^(power)
return result
#Find delta-th root of unity in field F

View File

@ -66,7 +66,11 @@ class superelliptic_form:
h = Rx(h)
j1 = (p^(mult_order-1)*j)%m
B = floor(p^(mult_order-1)*j/m)
result += superelliptic_form(C, polynomial_part(p, h)/(f^B*y^(j1)*h_denom))
P = polynomial_part(p, h)
if F.cardinality() != p:
d = P.degree()
P = sum(P[i].nth_root(p)*x^i for i in range(0, d+1))
result += superelliptic_form(C, P/(f^B*y^(j1)*h_denom))
return result
def serre_duality_pairing(self, fct, prec=20):

View File

@ -73,14 +73,22 @@ class superelliptic_regular_drw_form:
return "[" + str(self.dx) + "] d[x] + [" + str(self.dy) + "] d[y] + V(" + str(self.omega) + ") + dV(" + str(self.h2) + ")"
def regular_drw_form(omega):
print(omega.frobenius().is_regular_on_U0())
C = omega.curve
p = C.characteristic
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()
print("aux == omega", aux == omega)
aux1 = aux.omega
aux.omega, fct = decomposition_omega0_hpdh(aux.omega)
print('aux.omega, fct', aux.omega, fct, aux1.cartier() == fct.diffn(), aux1.verschiebung() == mult_by_p(fct.diffn()))
print('mult_by_p(fct.diffn()) == (fct^p).verschiebung().diffn()', mult_by_p(fct.diffn()) == (fct^p).verschiebung().diffn())
aux.h2 += fct^p
print(aux.omega.is_regular_on_U0(), aux.frobenius().is_regular_on_U0())
print('aux - omega', aux - omega)
aux.h2, A = decomposition_g0_pth_power(aux.h2)
print('A.diffn().is_regular_on_U0()', A.diffn().is_regular_on_U0())
aux.omega += (A.diffn()).inv_cartier()
result = superelliptic_regular_drw_form(omega_aux.dx, omega_aux.dy, aux.omega.regular_form(), aux.h2)
return result
@ -95,6 +103,8 @@ 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'''
if not omega.is_regular_on_U0():
raise ValueError("The form " + str(omega) + " is not regular on U0.")
C = omega.curve
f = C.polynomial
Fxy, Rxy, x, y = C.fct_field

View File

@ -13,7 +13,10 @@ class superelliptic_drw_cech:
f_second_comp = fct.f
decomp_first_comp = decomposition_g0_g8(f_first_comp)
decomp_second_comp = decomposition_g0_g8(f_second_comp)
new = self
new = superelliptic_drw_cech(0*C.dx.verschiebung(), 0*C.x.verschiebung())
new.omega0 = self.omega0
new.omega8 = self.omega8
new.f = self.f
new.omega0 -= decomposition_g0_g8(f_first_comp)[0].teichmuller().diffn()
new.omega0 -= decomposition_g0_g8(f_second_comp)[0].verschiebung().diffn()
new.f = decomposition_g0_g8(f_first_comp)[2].teichmuller() + decomposition_g0_g8(f_second_comp)[2].verschiebung()