naprawiony brak (1/p)-liniowosci cartiera
This commit is contained in:
parent
a5c2ce2c64
commit
1f66cae85d
File diff suppressed because one or more lines are too long
@ -1,13 +1,14 @@
|
|||||||
p = 5
|
p = 3
|
||||||
m = 2
|
m = 2
|
||||||
F = GF(p)
|
F = GF(p^2, 'a')
|
||||||
|
a = F.gens()[0]
|
||||||
Rxx.<x> = PolynomialRing(F)
|
Rxx.<x> = PolynomialRing(F)
|
||||||
#f = (x^3 - x)^3 + x^3 - x
|
#f = (x^3 - x)^3 + x^3 - x
|
||||||
f = x^3 + x
|
f = x^3 + a*x + 1
|
||||||
f1 = f(x = x^5 - x)
|
f1 = f(x = x^p - x)
|
||||||
C = superelliptic(f, m)
|
C = superelliptic(f, m)
|
||||||
#C1 = superelliptic(f1, m, prec = 500)
|
C1 = superelliptic(f1, m, prec = 500)
|
||||||
B = C.crystalline_cohomology_basis(prec = 100, info = 1)
|
#B = C.crystalline_cohomology_basis(prec = 100, info = 1)
|
||||||
#B1 = C1.crystalline_cohomology_basis(prec = 100, info = 1)
|
#B1 = C1.crystalline_cohomology_basis(prec = 100, info = 1)
|
||||||
|
|
||||||
def crystalline_matrix(C, prec = 50):
|
def crystalline_matrix(C, prec = 50):
|
||||||
@ -20,8 +21,15 @@ def crystalline_matrix(C, prec = 50):
|
|||||||
M[i, :] = vector(autom(b).coordinates(basis = B))
|
M[i, :] = vector(autom(b).coordinates(basis = B))
|
||||||
return M
|
return M
|
||||||
|
|
||||||
for b in B:
|
#b0 = de_rham_witt_lift(C.de_rham_basis()[0], prec = 100)
|
||||||
print(b.regular_form())
|
#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:
|
#for b in B1:
|
||||||
# print(b.regular_form())
|
# print(b.regular_form())
|
||||||
|
@ -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))
|
return sum(R(x^(j-i-1)) * coeff[j] for j in range(i+1, f.degree() + 1))
|
||||||
|
|
||||||
def polynomial_part(p, h):
|
def polynomial_part(p, h):
|
||||||
F = GF(p)
|
F = base_ring(parent(h))
|
||||||
Rx.<x> = PolynomialRing(F)
|
Rx.<x> = PolynomialRing(F)
|
||||||
h = Rx(h)
|
h = Rx(h)
|
||||||
result = Rx(0)
|
result = Rx(0)
|
||||||
for i in range(0, h.degree()+1):
|
for i in range(0, h.degree()+1):
|
||||||
if (i%p) == p-1:
|
if (i%p) == p-1:
|
||||||
power = Integer((i-(p-1))/p)
|
power = Integer((i-(p-1))/p)
|
||||||
result += Integer(h[i]) * x^(power)
|
result += F(h[i]) * x^(power)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
#Find delta-th root of unity in field F
|
#Find delta-th root of unity in field F
|
||||||
|
@ -66,7 +66,11 @@ class superelliptic_form:
|
|||||||
h = Rx(h)
|
h = Rx(h)
|
||||||
j1 = (p^(mult_order-1)*j)%m
|
j1 = (p^(mult_order-1)*j)%m
|
||||||
B = floor(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
|
return result
|
||||||
|
|
||||||
def serre_duality_pairing(self, fct, prec=20):
|
def serre_duality_pairing(self, fct, prec=20):
|
||||||
|
@ -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) + ")"
|
return "[" + str(self.dx) + "] d[x] + [" + str(self.dy) + "] d[y] + V(" + str(self.omega) + ") + dV(" + str(self.h2) + ")"
|
||||||
|
|
||||||
def regular_drw_form(omega):
|
def regular_drw_form(omega):
|
||||||
|
print(omega.frobenius().is_regular_on_U0())
|
||||||
C = omega.curve
|
C = omega.curve
|
||||||
p = C.characteristic
|
p = C.characteristic
|
||||||
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()
|
||||||
|
print("aux == omega", aux == omega)
|
||||||
|
aux1 = aux.omega
|
||||||
aux.omega, fct = decomposition_omega0_hpdh(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
|
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)
|
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()
|
aux.omega += (A.diffn()).inv_cartier()
|
||||||
result = superelliptic_regular_drw_form(omega_aux.dx, omega_aux.dy, aux.omega.regular_form(), aux.h2)
|
result = superelliptic_regular_drw_form(omega_aux.dx, omega_aux.dy, aux.omega.regular_form(), aux.h2)
|
||||||
return result
|
return result
|
||||||
@ -95,6 +103,8 @@ 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'''
|
||||||
|
if not omega.is_regular_on_U0():
|
||||||
|
raise ValueError("The form " + str(omega) + " is not regular on U0.")
|
||||||
C = omega.curve
|
C = omega.curve
|
||||||
f = C.polynomial
|
f = C.polynomial
|
||||||
Fxy, Rxy, x, y = C.fct_field
|
Fxy, Rxy, x, y = C.fct_field
|
||||||
|
@ -13,7 +13,10 @@ class superelliptic_drw_cech:
|
|||||||
f_second_comp = fct.f
|
f_second_comp = fct.f
|
||||||
decomp_first_comp = decomposition_g0_g8(f_first_comp)
|
decomp_first_comp = decomposition_g0_g8(f_first_comp)
|
||||||
decomp_second_comp = decomposition_g0_g8(f_second_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_first_comp)[0].teichmuller().diffn()
|
||||||
new.omega0 -= decomposition_g0_g8(f_second_comp)[0].verschiebung().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()
|
new.f = decomposition_g0_g8(f_first_comp)[2].teichmuller() + decomposition_g0_g8(f_second_comp)[2].verschiebung()
|
||||||
|
Loading…
Reference in New Issue
Block a user