poprawiony rozklad na omega0 - omega8
This commit is contained in:
parent
8719e64d9f
commit
7e8546b2c3
File diff suppressed because one or more lines are too long
@ -2,8 +2,7 @@ p = 3
|
|||||||
m = 2
|
m = 2
|
||||||
F = GF(p)
|
F = GF(p)
|
||||||
Rx.<x> = PolynomialRing(F)
|
Rx.<x> = PolynomialRing(F)
|
||||||
f = x^3 - x
|
f = x^3 - x + 1
|
||||||
C = superelliptic(f, m)
|
C = superelliptic(f, m)
|
||||||
a = superelliptic_drw_form(C.one, 0*C.dx, 0*C.x)
|
C1 = patch(C)
|
||||||
b = a+a+a+a+a+a+a+a+a
|
print(C1.crystalline_cohomology_basis())
|
||||||
print(b)
|
|
@ -309,8 +309,27 @@ class superelliptic_drw_cech:
|
|||||||
omega0 = self.omega0
|
omega0 = self.omega0
|
||||||
f = self.f
|
f = self.f
|
||||||
return superelliptic_drw_cech(other*omega0, other*f)
|
return superelliptic_drw_cech(other*omega0, other*f)
|
||||||
|
|
||||||
|
def r(self):
|
||||||
|
omega0 = self.omega0
|
||||||
|
f = self.f
|
||||||
|
C = self.curve
|
||||||
|
return superelliptic_cech(C, omega0.h1*C.dx, f.t)
|
||||||
|
|
||||||
|
def coordinates(self, basis = 0):
|
||||||
|
coord_mod_p = self.r().coordinates()
|
||||||
|
print(coord_mod_p)
|
||||||
|
coord_lifted = [lift(a) for a in coord_mod_p]
|
||||||
|
if basis == 0:
|
||||||
|
basis = self.curve().crystalline_cohomology_basis()
|
||||||
|
aux = self
|
||||||
|
for i, a in enumerate(basis):
|
||||||
|
aux -= coord_lifted[i]*a
|
||||||
|
aux = aux.reduce()
|
||||||
|
return aux
|
||||||
|
|
||||||
|
|
||||||
def de_rham_witt_lift(cech_class):
|
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
|
||||||
@ -324,7 +343,37 @@ def de_rham_witt_lift(cech_class):
|
|||||||
v = (C.y)/(C.x)^(g+1)
|
v = (C.y)/(C.x)^(g+1)
|
||||||
omega8_lift = omega0_regular[0].teichmuller()*(u.teichmuller().diffn()) + omega0_regular[1].teichmuller()*(v.teichmuller().diffn())
|
omega8_lift = omega0_regular[0].teichmuller()*(u.teichmuller().diffn()) + omega0_regular[1].teichmuller()*(v.teichmuller().diffn())
|
||||||
aux = omega0_lift - omega8_lift - fct.teichmuller().diffn()
|
aux = omega0_lift - omega8_lift - fct.teichmuller().diffn()
|
||||||
aux_h2 = decomposition_g0_g8(aux.h2)[0]
|
decom_aux_h2 = decomposition_g0_g8(aux.h2, prec=prec)
|
||||||
aux_f = decomposition_g0_g8(aux.h2)[2] #do napisania - komponent od kohomologii
|
aux_h2 = decom_aux_h2[0]
|
||||||
aux_omega0 = decomposition_omega0_omega8(aux.omega)[0]
|
aux_f = decom_aux_h2[2]
|
||||||
return superelliptic_drw_cech(omega0_lift + aux_h2.verschiebung().diffn() + aux_omega0.verschiebung(), fct.teichmuller() + aux_f.verschiebung())
|
aux_omega0 = decomposition_omega0_omega8(aux.omega, prec=prec)[0]
|
||||||
|
return superelliptic_drw_cech(omega0_lift + aux_h2.verschiebung().diffn() + aux_omega0.verschiebung(), fct.teichmuller() + aux_f.verschiebung())
|
||||||
|
|
||||||
|
def crystalline_cohomology_basis(self, prec = 50):
|
||||||
|
result = []
|
||||||
|
for a in self.de_rham_basis():
|
||||||
|
result += [de_rham_witt_lift(a, prec = prec)]
|
||||||
|
return result
|
||||||
|
|
||||||
|
superelliptic.crystalline_cohomology_basis = crystalline_cohomology_basis
|
||||||
|
|
||||||
|
def autom(self):
|
||||||
|
C = self.curve
|
||||||
|
F = C.base_ring
|
||||||
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
|
Fxy = FractionField(Rxy)
|
||||||
|
if isinstance(self, superelliptic_function):
|
||||||
|
result = superelliptic_function(C, Fxy(self.function).subs({x:x+1, y:y}))
|
||||||
|
return result
|
||||||
|
if isinstance(self, superelliptic_form):
|
||||||
|
result = superelliptic_form(C, Fxy(self.form).subs({x:x+1, y:y}))
|
||||||
|
return result
|
||||||
|
if isinstance(self, superelliptic_witt):
|
||||||
|
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))
|
||||||
|
return result
|
||||||
|
if isinstance(self, superelliptic_drw_cech):
|
||||||
|
result = superelliptic_drw_cech(autom(self.omega0), autom(self.f))
|
||||||
|
return result
|
@ -1,4 +1,4 @@
|
|||||||
def decomposition_g0_g8(fct):
|
def decomposition_g0_g8(fct, prec = 50):
|
||||||
'''Writes fct as a difference g0 - g8, with g0 regular on the affine patch and g8 at the points in infinity.'''
|
'''Writes fct as a difference g0 - g8, with g0 regular on the affine patch and g8 at the points in infinity.'''
|
||||||
C = fct.curve
|
C = fct.curve
|
||||||
g = C.genus()
|
g = C.genus()
|
||||||
@ -7,7 +7,7 @@ def decomposition_g0_g8(fct):
|
|||||||
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
|
||||||
fct -= nontrivial_part
|
fct -= nontrivial_part
|
||||||
if fct.coordinates() != g*[0]:
|
if fct.coordinates(prec=prec) != g*[0]:
|
||||||
raise ValueError("The given function cannot be written as g0 - g8.")
|
raise ValueError("The given function cannot be written as g0 - g8.")
|
||||||
|
|
||||||
Fxy, Rxy, x, y = C.fct_field
|
Fxy, Rxy, x, y = C.fct_field
|
||||||
@ -24,26 +24,37 @@ def decomposition_g0_g8(fct):
|
|||||||
else:
|
else:
|
||||||
g0 += num.monomial_coefficient(monomial)*aux/aux_den
|
g0 += num.monomial_coefficient(monomial)*aux/aux_den
|
||||||
return (g0, g8, nontrivial_part)
|
return (g0, g8, nontrivial_part)
|
||||||
|
|
||||||
def decomposition_omega0_omega8(omega, prec=50):
|
def decomposition_omega0_omega8(omega, prec=50):
|
||||||
'''Writes omega as a difference omega0 - omega8, with omega0 regular on the affine patch and omega8 at the points in infinity.'''
|
'''Writes omega as a difference omega0 - omega8, with omega0 regular on the affine patch and omega8 at the points in infinity.'''
|
||||||
C = omega.curve
|
C = omega.curve
|
||||||
|
omega.form = reduction(C, omega.form)
|
||||||
|
F = C.base_ring
|
||||||
|
delta = C.nb_of_pts_at_infty
|
||||||
|
m = C.exponent
|
||||||
|
if sum(omega.residue(place = i, prec = 50) for i in range(delta)) != 0:
|
||||||
|
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)
|
||||||
|
Fx = FractionField(Rx)
|
||||||
fct = Fxy(omega.form)
|
fct = Fxy(omega.form)
|
||||||
num = fct.numerator()
|
num = fct.numerator()
|
||||||
den = fct.denominator()
|
den = fct.denominator()
|
||||||
aux_den = superelliptic_function(C, Rxy(den))
|
aux_den = superelliptic_function(C, Rxy(den))
|
||||||
g0 = superelliptic_function(C, 0)
|
g0 = superelliptic_function(C, 0)
|
||||||
g8 = superelliptic_function(C, 0)
|
g8 = superelliptic_function(C, 0)
|
||||||
dx_valuation = C.dx.expansion_at_infty(prec=prec).valuation()
|
for j in range(0, m):
|
||||||
for monomial in num.monomials():
|
component = Fx(omega.jth_component(j))
|
||||||
aux = superelliptic_function(C, monomial)
|
q, r = component.numerator().quo_rem(component.denominator())
|
||||||
if aux.expansion_at_infty(prec=prec).valuation() + dx_valuation >= aux_den.expansion_at_infty(prec=prec).valuation():
|
g0 += (C.y)^(-j)*superelliptic_function(C, Rxy(q))
|
||||||
g8 += num.monomial_coefficient(monomial)*aux/aux_den
|
if ((C.y)^(-j)*superelliptic_function(C, Fxy(r/component.denominator()))*C.dx).expansion_at_infty().valuation() < 0:
|
||||||
else:
|
raise ValueError("Something went wrong for "+str(omega))
|
||||||
g0 += num.monomial_coefficient(monomial)*aux/aux_den
|
g8 -= (C.y)^(-j)*superelliptic_function(C, Fxy(r/component.denominator()))
|
||||||
g0, g8 = g0*C.dx, g8*C.dx
|
g0, g8 = g0*C.dx, g8*C.dx
|
||||||
if g0.is_regular_on_U0():
|
if g0.is_regular_on_U0():
|
||||||
return (g0, g8)
|
return (g0, g8)
|
||||||
|
#Rx.<x> = PolynomialRing(F)
|
||||||
|
#Rx.<x> = PolynomialRing(F)
|
||||||
|
#aux_fct = (g0.form)*y
|
||||||
else:
|
else:
|
||||||
raise Error("Something went wrong.")
|
raise ValueError("Something went wrong for "+str(omega) +". Result would be "+str(g0)+ " and " + str(g8))
|
@ -71,7 +71,7 @@ class superelliptic_cech:
|
|||||||
for j in range(1, m):
|
for j in range(1, m):
|
||||||
fct_j = Fx(fct.jth_component(j))
|
fct_j = Fx(fct.jth_component(j))
|
||||||
if (fct_j != Rx(0)):
|
if (fct_j != Rx(0)):
|
||||||
d = degree_of_rational_fctn(fct_j, p)
|
d = degree_of_rational_fctn(fct_j, F)
|
||||||
|
|
||||||
if (d, j) in degrees1.values():
|
if (d, j) in degrees1.values():
|
||||||
index = degrees1_inv[(d, j)]
|
index = degrees1_inv[(d, j)]
|
||||||
|
@ -93,16 +93,14 @@ class superelliptic_form:
|
|||||||
'''If self = sum_j h_j(x)/y^j dx, output is h_j(x).'''
|
'''If self = sum_j h_j(x)/y^j dx, output is h_j(x).'''
|
||||||
g = self.form
|
g = self.form
|
||||||
C = self.curve
|
C = self.curve
|
||||||
|
m = C.exponent
|
||||||
F = C.base_ring
|
F = C.base_ring
|
||||||
Rx.<x> = PolynomialRing(F)
|
Rx.<x> = PolynomialRing(F)
|
||||||
Fx = FractionField(Rx)
|
Fx = FractionField(Rx)
|
||||||
FxRy.<y> = PolynomialRing(Fx)
|
FxRy.<y> = PolynomialRing(Fx)
|
||||||
Fxy = FractionField(FxRy)
|
g = reduction(C, y^m*g)
|
||||||
Ryinv.<y_inv> = PolynomialRing(Fx)
|
g = FxRy(g)
|
||||||
g = Fxy(g)
|
return g.monomial_coefficient(y^(m-j))
|
||||||
g = g(y = 1/y_inv)
|
|
||||||
g = Ryinv(g)
|
|
||||||
return coff(g, j)
|
|
||||||
|
|
||||||
def is_regular_on_U0(self):
|
def is_regular_on_U0(self):
|
||||||
C = self.curve
|
C = self.curve
|
||||||
@ -136,6 +134,9 @@ class superelliptic_form:
|
|||||||
C = self.curve
|
C = self.curve
|
||||||
g = superelliptic_function(C, g)
|
g = superelliptic_function(C, g)
|
||||||
g = g.expansion_at_infty(place = place, prec=prec)
|
g = g.expansion_at_infty(place = place, prec=prec)
|
||||||
x_series = superelliptic_function(C, x).expansion_at_infty(place = place, prec=prec)
|
x_series = C.x.expansion_at_infty(place = place, prec=prec)
|
||||||
dx_series = x_series.derivative()
|
dx_series = x_series.derivative()
|
||||||
return g*dx_series
|
return g*dx_series
|
||||||
|
|
||||||
|
def residue(self, place = 0, prec=30):
|
||||||
|
return self.expansion_at_infty(place = place, prec=prec)[-1]
|
Loading…
Reference in New Issue
Block a user