Poprawiony i sprawdzony dy_w oraz autom.

This commit is contained in:
jgarnek 2023-03-08 16:00:43 +00:00
parent 5f82d7db59
commit cc45757e9c
4 changed files with 800 additions and 17 deletions

File diff suppressed because one or more lines are too long

View File

@ -13,4 +13,4 @@ C = superelliptic(f, m)
#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))
p#rint(autom(b[0]).coordinates(basis = b))

View File

@ -43,7 +43,7 @@ class superelliptic_witt:
if other < 0:
return (-other)*(-self)
if other in QQ:
other_integer = Integers(p^2)(other)^(-1)
other_integer = Integers(p^2)(other)
return other_integer*self
def __mul__(self, other):
@ -67,7 +67,9 @@ class superelliptic_witt:
def __eq__(self, other):
return self.t == other.t and self.f == other.f
def diffn(self):
def diffn(self, dy_w = 0):
if dy_w == 0:
dy_w = self.curve.dy_w()
C = self.curve
t = self.t
f = self.f
@ -86,9 +88,6 @@ class superelliptic_witt:
# d([N/D] + V(f)) = [1/D]*d([N]) - [N]*[D^(-2)]*d([D]) + dV(f)
return ((den_t_fct)^(-1)).teichmuller()*num_t_fct.teichmuller().diffn() - ((den_t_fct)^(-2)).teichmuller()*num_t_fct.teichmuller()*den_t_fct.teichmuller().diffn() + superelliptic_drw_form(0*C.x, 0*C.dx, f)
t_polynomial = Rxy(t_polynomial)
fC = superelliptic_function(C, fC)
fC = fC.teichmuller()
dy_w = 1/2* ((C.y)^(-1)).teichmuller()*auxilliary_derivative(fC)
M = t_polynomial.monomials()[0]
a = t_polynomial.monomial_coefficient(M)
#[P] = [aM] + Q, where Q = ([P] - [aM])
@ -167,7 +166,7 @@ class superelliptic_drw_form:
H = (self.h2 - other.h2).pth_root()
except:
return False
eq2 = (self.omega - other.omega).cartier() - H.diffn()
eq2 = ((self.omega - other.omega).cartier() - H.diffn()) == 0*self.curve.dx
if eq1 and eq2:
return True
return False
@ -205,7 +204,7 @@ class superelliptic_drw_form:
if other < 0:
return (-other)*(-self)
if other in QQ:
other_integer = Integers(p^2)(other)^(-1)
other_integer = Integers(p^2)(other)
return other_integer*self
t = other.t
f = other.f
@ -334,9 +333,6 @@ class superelliptic_drw_cech:
aux -= coord_lifted[i]*a
print('aux before reduce', aux)
#aux = aux.reduce() # Now aux = p*cech class.
h02 = aux.omega0.h2
h82 = aux.omega8.h2
aux -= superelliptic_drw_cech(h02.verschiebung().diffn(), (h02 - h82).verschiebung())
# Now aux should be of the form (V(smth), V(smth), V(smth))
print('aux V(smth)', aux)
aux_divided_by_p = superelliptic_cech(C, aux.omega0.omega.cartier(), aux.f.f.pth_root())
@ -345,6 +341,12 @@ class superelliptic_drw_cech:
coord_aux_divided_by_p = [ZZ(a) for a in coord_aux_divided_by_p]
coordinates = [ (coord_lifted[i] + p*coord_aux_divided_by_p[i])%p^2 for i in range(2*g)]
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
def de_rham_witt_lift(cech_class, prec = 50):
@ -354,7 +356,6 @@ def de_rham_witt_lift(cech_class, prec = 50):
omega8 = cech_class.omega8
fct = cech_class.f
omega0_regular = regular_form(omega0) #Present omega0 in the form P dx + Q dy
print(omega0_regular)
omega0_lift = omega0_regular[0].teichmuller()*(C.x.teichmuller().diffn()) + omega0_regular[1].teichmuller()*(C.y.teichmuller().diffn())
#Now the obvious lift of omega0 = P dx + Q dy to de Rham-Witt is [P] d[x] + [Q] d[y]
omega8_regular = regular_form(second_patch(omega8)) # The same for omega8.
@ -362,7 +363,6 @@ def de_rham_witt_lift(cech_class, prec = 50):
u = (C.x)^(-1)
v = (C.y)/(C.x)^(g+1)
omega8_lift = omega8_regular[0].teichmuller()*(u.teichmuller().diffn()) + omega8_regular[1].teichmuller()*(v.teichmuller().diffn())
print('omega8_lift.frobenius().expansion_at_infty()', omega8_lift.frobenius().expansion_at_infty())
aux = omega0_lift - omega8_lift - fct.teichmuller().diffn() # now aux is of the form (V(smth) + dV(smth), V(smth))
if aux.h1.function != 0:
raise ValueError('Something went wrong - aux is not of the form (V(smth) + dV(smth), V(smth)).')
@ -396,8 +396,19 @@ def autom(self):
result = superelliptic_witt(autom(self.t), autom(self.f))
return result
if isinstance(self, superelliptic_drw_form):
result = superelliptic_drw_form(autom(self.h1), autom(self.omega), autom(self.h2))
result = superelliptic_drw_form(0*C.x, autom(self.omega), autom(self.h2))
result += autom(self.h1).teichmuller()*(C.x + C.one).teichmuller().diffn()
return result
if isinstance(self, superelliptic_drw_cech):
result = superelliptic_drw_cech(autom(self.omega0), autom(self.f))
return result
return result
def dy_w(C):
'''Return d[y].'''
fC = C.polynomial
fC = superelliptic_function(C, fC)
fC = fC.teichmuller()
dy_w = 1/2* ((C.y)^(-1)).teichmuller()*auxilliary_derivative(fC)
return dy_w
superelliptic.dy_w = dy_w

View File

@ -56,4 +56,11 @@ def decomposition_omega0_omega8(omega, prec=50):
#Rx.<x> = PolynomialRing(F)
#aux_fct = (g0.form)*y
else:
raise ValueError("Something went wrong for "+str(omega) +". Result would be "+str(g0)+ " and " + str(g8))
raise ValueError("Something went wrong for "+str(omega) +". Result would be "+str(g0)+ " and " + str(g8))
def decomposition_g0_g8_pth_power(fct):
'''Decompose fct as g0 - g8 + A^p, if possible. Output: (g0, g8, A).'''
coor = fct.coordinates()
C = fct.curve
return 0