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 #converted = (C2.x)^4 - (C2.x)^2
#print(convert_super_fct_into_AS(converted)) #print(convert_super_fct_into_AS(converted))
b = C.crystalline_cohomology_basis() 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: if other < 0:
return (-other)*(-self) return (-other)*(-self)
if other in QQ: if other in QQ:
other_integer = Integers(p^2)(other)^(-1) other_integer = Integers(p^2)(other)
return other_integer*self return other_integer*self
def __mul__(self, other): def __mul__(self, other):
@ -67,7 +67,9 @@ class superelliptic_witt:
def __eq__(self, other): def __eq__(self, other):
return self.t == other.t and self.f == other.f 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 C = self.curve
t = self.t t = self.t
f = self.f 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) # 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) 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) 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] M = t_polynomial.monomials()[0]
a = t_polynomial.monomial_coefficient(M) a = t_polynomial.monomial_coefficient(M)
#[P] = [aM] + Q, where Q = ([P] - [aM]) #[P] = [aM] + Q, where Q = ([P] - [aM])
@ -167,7 +166,7 @@ class superelliptic_drw_form:
H = (self.h2 - other.h2).pth_root() H = (self.h2 - other.h2).pth_root()
except: except:
return False 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: if eq1 and eq2:
return True return True
return False return False
@ -205,7 +204,7 @@ class superelliptic_drw_form:
if other < 0: if other < 0:
return (-other)*(-self) return (-other)*(-self)
if other in QQ: if other in QQ:
other_integer = Integers(p^2)(other)^(-1) other_integer = Integers(p^2)(other)
return other_integer*self return other_integer*self
t = other.t t = other.t
f = other.f f = other.f
@ -334,9 +333,6 @@ class superelliptic_drw_cech:
aux -= coord_lifted[i]*a aux -= coord_lifted[i]*a
print('aux before reduce', aux) print('aux before reduce', aux)
#aux = aux.reduce() # Now aux = p*cech class. #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)) # Now aux should be of the form (V(smth), V(smth), V(smth))
print('aux V(smth)', aux) print('aux V(smth)', aux)
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())
@ -346,6 +342,12 @@ class superelliptic_drw_cech:
coordinates = [ (coord_lifted[i] + p*coord_aux_divided_by_p[i])%p^2 for i in range(2*g)] coordinates = [ (coord_lifted[i] + p*coord_aux_divided_by_p[i])%p^2 for i in range(2*g)]
return coordinates 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): def de_rham_witt_lift(cech_class, prec = 50):
C = cech_class.curve C = cech_class.curve
@ -354,7 +356,6 @@ def de_rham_witt_lift(cech_class, prec = 50):
omega8 = cech_class.omega8 omega8 = cech_class.omega8
fct = cech_class.f fct = cech_class.f
omega0_regular = regular_form(omega0) #Present omega0 in the form P dx + Q dy 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()) 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] #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. 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) u = (C.x)^(-1)
v = (C.y)/(C.x)^(g+1) v = (C.y)/(C.x)^(g+1)
omega8_lift = omega8_regular[0].teichmuller()*(u.teichmuller().diffn()) + omega8_regular[1].teichmuller()*(v.teichmuller().diffn()) 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)) 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: 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)).')
@ -396,8 +396,19 @@ def autom(self):
result = superelliptic_witt(autom(self.t), autom(self.f)) result = superelliptic_witt(autom(self.t), autom(self.f))
return result return result
if isinstance(self, superelliptic_drw_form): 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 return result
if isinstance(self, superelliptic_drw_cech): if isinstance(self, superelliptic_drw_cech):
result = superelliptic_drw_cech(autom(self.omega0), autom(self.f)) 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

@ -57,3 +57,10 @@ def decomposition_omega0_omega8(omega, prec=50):
#aux_fct = (g0.form)*y #aux_fct = (g0.form)*y
else: 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