baza crys dziala; poprawki w coordinates dr; wspolrzednie cris prawie dzialaja

This commit is contained in:
jgarnek 2023-03-23 17:45:28 +00:00
parent ce0ac0dcec
commit 42ccc4d3e9
20 changed files with 16269 additions and 87 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
p = 5
m = 2
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x^3 + x + 1
C = superelliptic(f, m)
g = f(x^p - x)
C1 = superelliptic(g, m)
ff = superelliptic_function(C, x)
AS = as_cover(C, [ff])
print(C1.cartier_matrix().rank() == AS.cartier_matrix().rank())

View File

@ -15,8 +15,14 @@ C = superelliptic(f, m)
#b = C.crystalline_cohomology_basis() #b = C.crystalline_cohomology_basis()
#print(autom(b[0]).coordinates(basis = b)) #print(autom(b[0]).coordinates(basis = b))
#eta1 = (dy + dV(2xy) + V(x^5 \, dy), V(y/x)) #eta1 = (dy + dV(2xy) + V(x^5 \, dy), V(y/x))
eta1 = superelliptic_drw_cech(C.y.teichmuller().diffn() + (2*C.x*C.y).verschiebung().diffn() + (C.x^5*C.y.diffn()).verschiebung(), (C.y/C.x).verschiebung()) #eta1 = superelliptic_drw_cech(C.y.teichmuller().diffn() + (2*C.x*C.y).verschiebung().diffn() + (C.x^5*C.y.diffn()).verschiebung(), (C.y/C.x).verschiebung())
#eta2 = ( x \, dy + 3 x^3 \, dy + dV((2x^4 + 2x^2 + 2) y) + V( (x^4 + x^2 + 1) dy), -[y/x]) #eta2 = ( x \, dy + 3 x^3 \, dy + dV((2x^4 + 2x^2 + 2) y) + V( (x^4 + x^2 + 1) dy), -[y/x])
eta2 = superelliptic_drw_cech(C.x.teichmuller()*(C.y.teichmuller()).diffn() + ((2*C.x^4 + 2*C.x^2 + 2*C.one) * C.y).verschiebung().diffn(), - (C.y/C.x).teichmuller()) #eta2 = superelliptic_drw_cech(C.x.teichmuller()*(C.y.teichmuller()).diffn() + ((2*C.x^4 + 2*C.x^2 + 2*C.one) * C.y).verschiebung().diffn(), - (C.y/C.x).teichmuller())
aux = de_rham_witt_lift(C.de_rham_basis()[1]) #omega8_lift0, compare = de_rham_witt_lift(C.de_rham_basis()[1])
print(aux) #omega8_lift = -(C.x^(-3)).teichmuller()*C.y.teichmuller().diffn() + 2*C.y.teichmuller()*(C.x^(-4)).teichmuller()*C.x.teichmuller().diffn()
#eta2 = de_rham_witt_lift(C.de_rham_basis()[1])
#b = autom(eta2)
#print(autom(C.crystalline_cohomology_basis()[1]).coordinates())

View File

@ -18,6 +18,7 @@ load('superelliptic_drw/decomposition_into_g0_g8.sage')
load('superelliptic_drw/superelliptic_witt.sage') load('superelliptic_drw/superelliptic_witt.sage')
load('superelliptic_drw/superelliptic_drw_form.sage') load('superelliptic_drw/superelliptic_drw_form.sage')
load('superelliptic_drw/superelliptic_drw_cech.sage') load('superelliptic_drw/superelliptic_drw_cech.sage')
load('superelliptic_drw/regular_form.sage')
load('superelliptic_drw/de_rham_witt_lift.sage') load('superelliptic_drw/de_rham_witt_lift.sage')
load('superelliptic_drw/automorphism.sage') load('superelliptic_drw/automorphism.sage')
load('auxilliaries/reverse.sage') load('auxilliaries/reverse.sage')
@ -26,8 +27,6 @@ load('auxilliaries/linear_combination_polynomials.sage')
############## ##############
############## ##############
load('drafty/convert_superelliptic_into_AS.sage') load('drafty/convert_superelliptic_into_AS.sage')
load('drafty/regular_on_U0.sage')
load('drafty/lift_to_de_rham.sage')
load('drafty/draft.sage') load('drafty/draft.sage')
#load('drafty/draft_klein_covers.sage') #load('drafty/draft_klein_covers.sage')
#load('drafty/2gpcovers.sage') #load('drafty/2gpcovers.sage')

View File

@ -46,52 +46,30 @@ class superelliptic_cech:
Fx = FractionField(Rx) Fx = FractionField(Rx)
FxRy.<y> = PolynomialRing(Fx) FxRy.<y> = PolynomialRing(Fx)
g = C.genus() g = C.genus()
degrees_holo = C.degrees_holomorphic_differentials()
degrees_holo_inv = {b:a for a, b in degrees_holo.items()}
degrees0 = C.degrees_de_rham0()
degrees0_inv = {b:a for a, b in degrees0.items()}
degrees1 = C.degrees_de_rham1()
degrees1_inv = {b:a for a, b in degrees1.items()}
basis = C.de_rham_basis() basis = C.de_rham_basis()
omega = self.omega0 omega = self.omega0
fct = self.f fct = self.f
if fct.function == Rx(0) and omega.form == Rx(0):
return vector((2*g)*[0])
if fct.function == Rx(0) and omega.form != Rx(0): if fct.function == Rx(0) and omega.form != Rx(0):
for j in range(1, m): result = list(omega.coordinates()) + g*[0]
omega_j = Fx(omega.jth_component(j)) result = vector([F(a) for a in result])
if omega_j != Fx(0): return result
d = degree_of_rational_fctn(omega_j, F)
index = degrees_holo_inv[(d, j)]
a = coeff_of_rational_fctn(omega_j, F)
a1 = coeff_of_rational_fctn(basis[index].omega0.jth_component(j), F)
elt = self - (a/a1)*basis[index]
return elt.coordinates() + a/a1*vector([F(i == index) for i in range(0, 2*g)])
for j in range(1, m): coord = fct.coordinates()
fct_j = Fx(fct.jth_component(j)) coord = g*[0] + list(coord)
if (fct_j != Rx(0)): coord = vector([F(a) for a in coord])
d = degree_of_rational_fctn(fct_j, F) aux = self
for i in range(g, 2*g):
if (d, j) in degrees1.values(): aux -= coord[i]*basis[i]
index = degrees1_inv[(d, j)] aux_f = decomposition_g0_g8(aux.f)[0]
a = coeff_of_rational_fctn(fct_j, F) aux.omega0 -= aux_f.diffn()
elt = self - (a/m)*basis[index] aux.f = 0*C.x
return elt.coordinates() + a/m*vector([F(i == index) for i in range(0, 2*g)]) aux.omega8 = aux.omega0
return coord + aux.coordinates()
if d<0:
a = coeff_of_rational_fctn(fct_j, F)
h = superelliptic_function(C, FxRy(a*y^j*x^d))
elt = superelliptic_cech(C, self.omega0, self.f - h)
return elt.coordinates()
if (fct_j != Rx(0)):
G = superelliptic_function(C, y^j*x^d)
a = coeff_of_rational_fctn(fct_j, F)
elt =self - a*superelliptic_cech(C, diffn(G), G)
return elt.coordinates()
return vector(2*g*[0])
def is_cocycle(self): def is_cocycle(self):
w0 = self.omega0 w0 = self.omega0

View File

@ -196,9 +196,9 @@ class superelliptic:
Fxy = FractionField(Rxy) Fxy = FractionField(Rxy)
basis = [] basis = []
for j in range(1, m): for j in range(1, m):
for i in range(1, r): for i in range(1, r):
if (r*j - m*i >= delta): if (r*(m-j) - m*i >= delta):
basis += [superelliptic_function(self, Fxy(m*y^(j)/x^i))] basis += [superelliptic_function(self, Fxy(m*y^(m-j)/x^i))]
return basis return basis
#Auxilliary. Given a superelliptic curve C : y^m = f(x) and a polynomial g(x, y) #Auxilliary. Given a superelliptic curve C : y^m = f(x) and a polynomial g(x, y)

View File

@ -7,6 +7,11 @@ class superelliptic_form:
self.form = g self.form = g
self.curve = C self.curve = C
def __eq__(self, other):
if self.reduce().form == other.reduce().form:
return True
return False
def __add__(self, other): def __add__(self, other):
C = self.curve C = self.curve
g1 = self.form g1 = self.form
@ -37,9 +42,6 @@ class superelliptic_form:
omega = self.form omega = self.form
return superelliptic_form(C, constant*omega) return superelliptic_form(C, constant*omega)
def __eq__(self, other):
return self.form == other.form
def cartier(self): def cartier(self):
'''Computes Cartier operator on the form. Idea: y^m = f(x) -> y^(p^r - 1) = f(x)^M, where r = ord_p(m), '''Computes Cartier operator on the form. Idea: y^m = f(x) -> y^(p^r - 1) = f(x)^M, where r = ord_p(m),
M = (p^r - 1)/m. Thus h(x)/y^j dx = h(x) f(x)^(M*j)/y^(p^r * j) dx. Thus C(h(x)/y^j dx) = 1/y^(p^(r-1)*j) C(h(x) f(x)^(M*j) dx).''' M = (p^r - 1)/m. Thus h(x)/y^j dx = h(x) f(x)^(M*j)/y^(p^r * j) dx. Thus C(h(x)/y^j dx) = 1/y^(p^(r-1)*j) C(h(x) f(x)^(M*j) dx).'''
@ -52,7 +54,7 @@ class superelliptic_form:
Fx = FractionField(Rx) Fx = FractionField(Rx)
FxRy.<y> = PolynomialRing(Fx) FxRy.<y> = PolynomialRing(Fx)
Fxy = FractionField(FxRy) Fxy = FractionField(FxRy)
result = superelliptic_form(C, FxRy(0)) result = 0*C.dx
mult_order = Integers(m)(p).multiplicative_order() mult_order = Integers(m)(p).multiplicative_order()
M = Integer((p^(mult_order)-1)/m) M = Integer((p^(mult_order)-1)/m)
@ -111,8 +113,8 @@ class superelliptic_form:
Rx.<x> = PolynomialRing(F) Rx.<x> = PolynomialRing(F)
for j in range(0, m): for j in range(0, m):
if self.jth_component(j) not in Rx: if self.jth_component(j) not in Rx:
return 0 return False
return 1 return True
def is_regular_on_Uinfty(self): def is_regular_on_Uinfty(self):
C = self.curve C = self.curve
@ -128,8 +130,8 @@ class superelliptic_form:
A = self.jth_component(j) A = self.jth_component(j)
d = degree_of_rational_fctn(A, F) d = degree_of_rational_fctn(A, F)
if(-d*M + j*R -(M+1)<0): if(-d*M + j*R -(M+1)<0):
return 0 return False
return 1 return True
def expansion_at_infty(self, place = 0, prec=10): def expansion_at_infty(self, place = 0, prec=10):
g = self.form g = self.form
@ -167,3 +169,37 @@ class superelliptic_form:
Fxy = FractionField(Rxy) Fxy = FractionField(Rxy)
fct = reduction(C, Fxy(y^m*fct)) fct = reduction(C, Fxy(y^m*fct))
return superelliptic_form(C, fct/y^m) return superelliptic_form(C, fct/y^m)
def int(self):
'''Computes an "integral" of a form dg. Idea: y^m = f(x) -> y^(p^r - 1) = f(x)^M, where r = ord_p(m),
M = (p^r - 1)/m. Thus h(x)/y^j dx = h(x) f(x)^(M*j)/y^(p^r * j) dx. Thus int(h(x)/y^j dx) = 1/y^(p^(r-1)*j) int(h(x) f(x)^(M*j) dx).'''
C = self.curve
m = C.exponent
p = C.characteristic
f = C.polynomial
F = C.base_ring
Rx.<x> = PolynomialRing(F)
Fx = FractionField(Rx)
FxRy.<y> = PolynomialRing(Fx)
Fxy = FractionField(FxRy)
result = 0*C.x
mult_order = Integers(m)(p).multiplicative_order()
M = Integer((p^(mult_order)-1)/m)
for j in range(0, m):
fct_j = self.jth_component(j)
h = Fx(fct_j*f^(M*j))
h_denom = h.denominator()
h *= (h_denom)^(p)
h = Rx(h)
j1 = (p^(mult_order)*j)%m
B = floor(p^(mult_order)*j/m)
result += superelliptic_function(C, h.integral()/(f^(B)*y^(j1)*h_denom^p))
return result
def inv_cartier(omega):
'''If omega is regular, return form eta such that Cartier(eta) = omega'''
omega_regular = omega.regular_form()
C = omega.curve
p = C.characteristic
return (omega_regular.dx)^p*C.x^(p-1)*C.dx + (omega_regular.dy)^p*C.y^(p-1)*C.y.diffn()

View File

@ -0,0 +1,5 @@
F = GF(67)
P.<x>= PolynomialRing(F)
X = HyperellipticCurve(x^7 + x^3 + x)
C = superelliptic(x^7 + x^3 + x, 2)
print(X.a_number() == C.a_number())

View File

@ -0,0 +1,12 @@
p = 7
m = 4
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x^5 + x
C = superelliptic(f, m)
bbb = C.holomorphic_differentials_basis()
v = [GF(p).random_element() for _ in range(C.genus())]
aaa = 0*C.dx
for i in range(C.genus()):
aaa += v[i]*bbb[i]
print(vector(aaa.coordinates()) == vector(v))

View File

@ -0,0 +1,6 @@
print("Nie działa!")
F = GF(67)
P.<x>= PolynomialRing(F)
X = HyperellipticCurve(x^7 + x^3 + x)
C = superelliptic(x^7 + x^3 + x, 2)
print(X.p_rank() == C.p_rank())

View File

@ -0,0 +1,11 @@
p = 3
m = 4
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x^5 + x
C = superelliptic(f, m)
g = (C.x)^5 * (C.y)^2 + 2*(C.x)^2 * (C.y)^3
g = g^p
print(g.pth_root()==(C.x)^5 * (C.y)^2 + 2*(C.x)^2 * (C.y)^3)
g = C.x
print(g.pth_root())

View File

@ -11,6 +11,9 @@ def autom(self):
if isinstance(self, superelliptic_form): if isinstance(self, superelliptic_form):
result = superelliptic_form(C, Fxy(self.form).subs({x:x+1, y:y})) result = superelliptic_form(C, Fxy(self.form).subs({x:x+1, y:y}))
return result return result
if isinstance(self, superelliptic_cech):
result = superelliptic_cech(C, autom(self.omega0), autom(self.f))
return result
if isinstance(self, superelliptic_witt): if isinstance(self, superelliptic_witt):
result = superelliptic_witt(autom(self.t), autom(self.f)) result = superelliptic_witt(autom(self.t), autom(self.f))
return result return result

View File

@ -1,31 +1,50 @@
def de_rham_witt_lift_form0(omega):
C = omega.curve
omega_regular = omega.regular_form() #Present omega0 in the form P dx + Q dy
#Now the obvious lift of omega0 = P dx + Q dy to de Rham-Witt is [P] d[x] + [Q] d[y]
return omega_regular.dx.teichmuller()*(C.x.teichmuller().diffn()) + omega_regular.dy.teichmuller()*(C.y.teichmuller().diffn())
def de_rham_witt_lift_form8(omega):
C = omega.curve
g = C.genus()
omega_regular = second_patch(omega).regular_form()
omega_regular = (second_patch(omega_regular.dx), second_patch(omega_regular.dy))
u = (C.x)^(-1)
v = (C.y)/(C.x)^(g+1)
omega_lift = omega_regular[0].teichmuller()*(u.teichmuller().diffn()) + omega_regular[1].teichmuller()*(v.teichmuller().diffn())
return omega_lift
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
g = C.genus() g = C.genus()
omega0 = cech_class.omega0 omega0 = cech_class.omega0
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_lift = de_rham_witt_lift_form0(omega0)
print('omega0_regular', omega0_regular) omega8_lift = de_rham_witt_lift_form8(omega8)
omega0_lift = omega0_regular[0].teichmuller()*(C.x.teichmuller().diffn()) + omega0_regular[1].teichmuller()*(C.y.teichmuller().diffn()) print('omega0_lift, omega8_lift', omega0_lift, omega8_lift)
#Now the obvious lift of omega0 = P dx + Q dy to de Rham-Witt is [P] d[x] + [Q] d[y]
print('omega8', omega8, 'second_patch(omega8)', second_patch(omega8))
omega8_regular = regular_form(second_patch(omega8)) # The same for omega8.
print('omega8_regular 1', omega8_regular)
omega8_regular = (second_patch(omega8_regular[0]), second_patch(omega8_regular[1]))
print('omega8_regular 2', omega8_regular)
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())
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))
return aux #return aux
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)).')
decom_aux_h2 = decomposition_g0_g8(aux.h2, prec=prec) #decompose dV(smth) in aux as smth regular on U0 - smth regular on U8. decom_aux_h2 = decomposition_g0_g8(aux.h2, prec=prec) #decompose dV(smth) in aux as smth regular on U0 - smth regular on U8.
aux_h2 = decom_aux_h2[0] aux_h2 = decom_aux_h2[0]
aux_f = decom_aux_h2[2] aux_f = decom_aux_h2[2]
aux_omega0 = decomposition_omega0_omega8(aux.omega, prec=prec)[0] aux_omega0 = decomposition_omega0_omega8(aux.omega, prec=prec)[0]
result = superelliptic_drw_cech(omega0_lift - aux_h2.verschiebung().diffn() - aux_omega0.verschiebung(), fct.teichmuller() + aux_f.verschiebung()) result = superelliptic_drw_cech(omega0_lift - aux_omega0.verschiebung(), fct.teichmuller() + aux_h2.verschiebung() + aux_f.verschiebung())
return result.reduce() compare = omega8_lift-decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung()
print("result.omega8 == compare", result.omega8 == compare)
print("result.omega8 - compare", result.omega8 - compare)
#print('test:', omega0_lift - omega8_lift - fct.teichmuller().diffn() == decom_aux_h2[0].verschiebung().diffn() - decom_aux_h2[1].verschiebung().diffn() + decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung())
#print('test 1:', omega0_lift - decom_aux_h2[0].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() - fct.teichmuller().diffn() == omega8_lift - decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung())
#A = omega0_lift - decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung()
#B = decom_aux_h2[0].verschiebung() + fct.teichmuller()
#C = omega8_lift - decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung()
#print('test 2:', A - B.diffn() == C)
#print('test 3:', result.omega0 == A, result.f == B, result.omega8 == C)
#print(result.omega8, '\n \n', compare, '\n \n', aux_f, '\n \n')
return result#.reduce()
def crystalline_cohomology_basis(self, prec = 50): def crystalline_cohomology_basis(self, prec = 50):
result = [] result = []

View File

@ -3,7 +3,7 @@ def decomposition_g0_g8(fct, prec = 50):
and f is combination of basis of H^1(X, OX). Output is (g0, g8, f).''' and f is combination of basis of H^1(X, OX). Output is (g0, g8, f).'''
C = fct.curve C = fct.curve
g = C.genus() g = C.genus()
coord = fct.coordinates() coord = fct.coordinates(prec=prec)
nontrivial_part = 0*C.x nontrivial_part = 0*C.x
for i, a in enumerate(C.cohomology_of_structure_sheaf_basis()): for i, a in enumerate(C.cohomology_of_structure_sheaf_basis()):
nontrivial_part += coord[i]*a nontrivial_part += coord[i]*a
@ -13,8 +13,9 @@ def decomposition_g0_g8(fct, prec = 50):
fct = Fxy(fct.function) fct = Fxy(fct.function)
num = fct.numerator() num = fct.numerator()
den = fct.denominator() den = fct.denominator()
integral_part, num = num.quo_rem(den)
aux_den = superelliptic_function(C, Rxy(den)) aux_den = superelliptic_function(C, Rxy(den))
g0 = superelliptic_function(C, 0) g0 = superelliptic_function(C, integral_part)
g8 = superelliptic_function(C, 0) g8 = superelliptic_function(C, 0)
for monomial in num.monomials(): for monomial in num.monomials():
aux = superelliptic_function(C, monomial) aux = superelliptic_function(C, monomial)
@ -31,7 +32,7 @@ def decomposition_omega0_omega8(omega, prec=50):
F = C.base_ring F = C.base_ring
delta = C.nb_of_pts_at_infty delta = C.nb_of_pts_at_infty
m = C.exponent m = C.exponent
if sum(omega.residue(place = i, prec = 50) for i in range(delta)) != 0: if sum(omega.residue(place = i, prec = prec) for i in range(delta)) != 0:
raise ValueError(str(omega) + " has non zero residue!") raise ValueError(str(omega) + " has non zero residue!")
Fxy, Rxy, x, y = C.fct_field Fxy, Rxy, x, y = C.fct_field
Rx.<x> = PolynomialRing(F) Rx.<x> = PolynomialRing(F)

View File

@ -23,6 +23,13 @@ def second_patch(argument):
fct1 = Fxy(fct.subs({x : 1/x, y : y/x^(g+1)})) fct1 = Fxy(fct.subs({x : 1/x, y : y/x^(g+1)}))
fct1 *= -x^(-2) fct1 *= -x^(-2)
return superelliptic_form(C1, fct1) return superelliptic_form(C1, fct1)
if isinstance(argument, superelliptic_drw_form):
h1 = argument.h1
omega = argument.omega
h2 = argument.h2
C = h1.curve
return superelliptic_drw_form(-second_patch(h1)*(C.x)^(-2), second_patch(omega), second_patch(h2))
def lift_form_to_drw(omega): def lift_form_to_drw(omega):
A, B = regular_form(omega) A, B = regular_form(omega)

View File

@ -56,6 +56,42 @@ class superelliptic_drw_cech:
C = self.curve C = self.curve
return superelliptic_cech(C, omega0.h1*C.dx, f.t) return superelliptic_cech(C, omega0.h1*C.dx, f.t)
def div_by_p(self):
'''Given a regular cocycle of the form (V(omega) + dV(h), [f] + V(t), ...), where [f] = 0 in H^1(X, OX),
find de Rham cocycle (xi0, f, xi8) such that (V(omega) + dV(h), [f] + V(t), ...) = p*(xi0, f, xi8).'''
C = self.curve
aux = self
Fxy, Rxy, x, y = C.fct_field
aux_f_t_0 = decomposition_g0_g8(aux.f.t, prec=50)[0]
aux.f.t = 0*C.x
aux.omega0 -= aux_f_t_0.teichmuller().diffn()
aux.omega8 = aux.omega0 - aux.f.diffn()
#
omega = aux.omega0.omega
omega1 = omega.cartier().cartier()
omega1 = omega1.inv_cartier().inv_cartier()
fct = (omega.cartier() - omega1.cartier()).int()
aux.omega0.h2 += fct^p
aux.omega0.omega = omega1
if aux.omega0.h2.function in Rxy:
aux.f -= aux.omega0.h2.verschiebung()
aux.omega0.h2 = 0*C.x
if aux.omega8.h2.expansion_at_infty().valuation() >= 0:
aux.f += aux.omega8.h2.verschiebung()
aux.omega8.h2 = 0*C.x
print('aux', aux)
# Now aux should be of the form (V(omega1), V(f), V(omega2))
# Thus aux = p*(Cartier(omega1), p-th_root(f), Cartier(omega2))
aux_divided_by_p = superelliptic_cech(C, aux.omega0.omega.cartier(), aux.f.f.pth_root())
print('aux_divided_by_p', aux_divided_by_p)
print('is regular', aux_divided_by_p.omega0.is_regular_on_U0(), aux_divided_by_p.omega8.is_regular_on_Uinfty())
print('aux.omega0.omega.cartier() - aux.f.f.pth_root().diffn() == aux.omega8.omega.cartier()', aux.omega0.omega.cartier() - aux.f.f.pth_root().diffn() == aux.omega8.omega.cartier())
return aux_divided_by_p
else:
raise ValueError("aux.omega8.h2.expansion_at_infty().valuation() < 0:", aux.omega8.h2.expansion_at_infty())
else:
raise ValueError("aux.omega0.h2.function not in Rxy:", aux.omega0.h2.function)
def coordinates(self, basis = 0): def coordinates(self, basis = 0):
C = self.curve C = self.curve
g = C.genus() g = C.genus()
@ -67,12 +103,7 @@ class superelliptic_drw_cech:
aux = self aux = self
for i, a in enumerate(basis): for i, a in enumerate(basis):
aux -= coord_lifted[i]*a aux -= coord_lifted[i]*a
print('aux before reduce', aux) aux_divided_by_p = aux.div_by_p()
#aux = aux.reduce() # Now aux = p*cech class.
# 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())
print('aux.omega0.omega.cartier()', aux.omega0.omega.cartier())
coord_aux_divided_by_p = aux_divided_by_p.coordinates() coord_aux_divided_by_p = aux_divided_by_p.coordinates()
coord_aux_divided_by_p = [ZZ(a) for a in coord_aux_divided_by_p] 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)] coordinates = [ (coord_lifted[i] + p*coord_aux_divided_by_p[i])%p^2 for i in range(2*g)]

View File

@ -17,7 +17,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()) == 0*self.curve.dx eq2 = ((other.omega - self.omega).cartier() - H.diffn()) == 0*self.curve.dx
if eq1 and eq2: if eq1 and eq2:
return True return True
return False return False
@ -30,7 +30,7 @@ class superelliptic_drw_form:
result = "" result = ""
if h1.function != 0: if h1.function != 0:
result += "[" + str(h1) + "] d[x]" result += "[" + str(h1) + "] d[x]"
if h1.function !=0 and omega.form != 0: if (h1.function !=0 and omega.form != 0) or (h2.function !=0 and omega.form != 0):
result += " + " result += " + "
if omega.form != 0: if omega.form != 0:
result += "V(" + str(omega) + ")" result += "V(" + str(omega) + ")"

View File

@ -0,0 +1,11 @@
p = 3
m = 2
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x^3 - x
C = superelliptic(f, m)
Rxy.<x, y> = PolynomialRing(F, 2)
omega = (((2*C.x^18 + 2*C.x^16 + 2*C.x^14 + 2*C.x^10 + 2*C.x^8 + 2*C.x^4 + 2*C.x^2 + 2*C.one)/(C.x^13 + C.x^11 + C.x^9))*C.y) * C.dx
print(decomposition_omega0_omega8(aux.omega)[0] - decomposition_omega0_omega8(aux.omega)[1] == omega and decomposition_omega0_omega8(aux.omega)[0].is_regular_on_U0() and decomposition_omega0_omega8(aux.omega)[1].is_regular_on_Uinfty())
h = ((C.x^10 + C.x^8 + C.x^6 + 2*C.x^4 + 2*C.x^2 + 2*C.one)/C.x^6)*C.y
print(decomposition_g0_g8(h)[0] - decomposition_g0_g8(h)[1] + decomposition_g0_g8(h)[2] == h and decomposition_g0_g8(h)[0].function in Rxy and decomposition_g0_g8(h)[1].expansion_at_infty().valuation() >= 0)

View File

@ -0,0 +1,10 @@
p = 3
m = 2
F = GF(p)
Rx.<x> = PolynomialRing(F)
f = x^3 - x
C = superelliptic(f, m)
print(auxilliary_derivative((C.x^3 - C.x).teichmuller()))
print('Result should be: [2] d[x] + V((x^8) dx) + dV([2*x^7 + x^5])')
print(2*(C.y).teichmuller() * (C.y).teichmuller().diffn() == (C.x^3 - C.x).teichmuller().diffn())
print(C.y.teichmuller().diffn().frobenius() == (C.y)^2 * C.y.diffn()) #F(d[y]) = y^2*dy

View File

@ -25,3 +25,5 @@ load('superelliptic/tests/a_number_test.sage')
#load('as_covers/tests/diffn_test.sage') #load('as_covers/tests/diffn_test.sage')
#print("Cartier test:") #print("Cartier test:")
#load('as_covers/tests/cartier_test.sage') #load('as_covers/tests/cartier_test.sage')
#print("Decomposition into g0, g8/ omega0, omega8 test:")
#load('superelliptic_drw/tests/decomposition_into_g0_g8_tests.sage')