Poprawiony i sprawdzony dy_w oraz autom.
This commit is contained in:
parent
5f82d7db59
commit
cc45757e9c
File diff suppressed because one or more lines are too long
@ -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))
|
@ -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
|
@ -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
|
Loading…
Reference in New Issue
Block a user