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
|
||||
F = GF(p)
|
||||
Rx.<x> = PolynomialRing(F)
|
||||
f = x^3 - x
|
||||
f = x^3 - x + 1
|
||||
C = superelliptic(f, m)
|
||||
a = superelliptic_drw_form(C.one, 0*C.dx, 0*C.x)
|
||||
b = a+a+a+a+a+a+a+a+a
|
||||
print(b)
|
||||
C1 = patch(C)
|
||||
print(C1.crystalline_cohomology_basis())
|
@ -309,8 +309,27 @@ class superelliptic_drw_cech:
|
||||
omega0 = self.omega0
|
||||
f = self.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
|
||||
g = C.genus()
|
||||
omega0 = cech_class.omega0
|
||||
@ -324,7 +343,37 @@ def de_rham_witt_lift(cech_class):
|
||||
v = (C.y)/(C.x)^(g+1)
|
||||
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_h2 = decomposition_g0_g8(aux.h2)[0]
|
||||
aux_f = decomposition_g0_g8(aux.h2)[2] #do napisania - komponent od kohomologii
|
||||
aux_omega0 = decomposition_omega0_omega8(aux.omega)[0]
|
||||
return superelliptic_drw_cech(omega0_lift + aux_h2.verschiebung().diffn() + aux_omega0.verschiebung(), fct.teichmuller() + aux_f.verschiebung())
|
||||
decom_aux_h2 = decomposition_g0_g8(aux.h2, prec=prec)
|
||||
aux_h2 = decom_aux_h2[0]
|
||||
aux_f = decom_aux_h2[2]
|
||||
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.'''
|
||||
C = fct.curve
|
||||
g = C.genus()
|
||||
@ -7,7 +7,7 @@ def decomposition_g0_g8(fct):
|
||||
for i, a in enumerate(C.cohomology_of_structure_sheaf_basis()):
|
||||
nontrivial_part += coord[i]*a
|
||||
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.")
|
||||
|
||||
Fxy, Rxy, x, y = C.fct_field
|
||||
@ -24,26 +24,37 @@ def decomposition_g0_g8(fct):
|
||||
else:
|
||||
g0 += num.monomial_coefficient(monomial)*aux/aux_den
|
||||
return (g0, g8, nontrivial_part)
|
||||
|
||||
|
||||
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.'''
|
||||
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
|
||||
Rx.<x> = PolynomialRing(F)
|
||||
Fx = FractionField(Rx)
|
||||
fct = Fxy(omega.form)
|
||||
num = fct.numerator()
|
||||
den = fct.denominator()
|
||||
aux_den = superelliptic_function(C, Rxy(den))
|
||||
g0 = superelliptic_function(C, 0)
|
||||
g8 = superelliptic_function(C, 0)
|
||||
dx_valuation = C.dx.expansion_at_infty(prec=prec).valuation()
|
||||
for monomial in num.monomials():
|
||||
aux = superelliptic_function(C, monomial)
|
||||
if aux.expansion_at_infty(prec=prec).valuation() + dx_valuation >= aux_den.expansion_at_infty(prec=prec).valuation():
|
||||
g8 += num.monomial_coefficient(monomial)*aux/aux_den
|
||||
else:
|
||||
g0 += num.monomial_coefficient(monomial)*aux/aux_den
|
||||
for j in range(0, m):
|
||||
component = Fx(omega.jth_component(j))
|
||||
q, r = component.numerator().quo_rem(component.denominator())
|
||||
g0 += (C.y)^(-j)*superelliptic_function(C, Rxy(q))
|
||||
if ((C.y)^(-j)*superelliptic_function(C, Fxy(r/component.denominator()))*C.dx).expansion_at_infty().valuation() < 0:
|
||||
raise ValueError("Something went wrong for "+str(omega))
|
||||
g8 -= (C.y)^(-j)*superelliptic_function(C, Fxy(r/component.denominator()))
|
||||
g0, g8 = g0*C.dx, g8*C.dx
|
||||
if g0.is_regular_on_U0():
|
||||
return (g0, g8)
|
||||
#Rx.<x> = PolynomialRing(F)
|
||||
#Rx.<x> = PolynomialRing(F)
|
||||
#aux_fct = (g0.form)*y
|
||||
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):
|
||||
fct_j = Fx(fct.jth_component(j))
|
||||
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():
|
||||
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).'''
|
||||
g = self.form
|
||||
C = self.curve
|
||||
m = C.exponent
|
||||
F = C.base_ring
|
||||
Rx.<x> = PolynomialRing(F)
|
||||
Fx = FractionField(Rx)
|
||||
FxRy.<y> = PolynomialRing(Fx)
|
||||
Fxy = FractionField(FxRy)
|
||||
Ryinv.<y_inv> = PolynomialRing(Fx)
|
||||
g = Fxy(g)
|
||||
g = g(y = 1/y_inv)
|
||||
g = Ryinv(g)
|
||||
return coff(g, j)
|
||||
g = reduction(C, y^m*g)
|
||||
g = FxRy(g)
|
||||
return g.monomial_coefficient(y^(m-j))
|
||||
|
||||
def is_regular_on_U0(self):
|
||||
C = self.curve
|
||||
@ -136,6 +134,9 @@ class superelliptic_form:
|
||||
C = self.curve
|
||||
g = superelliptic_function(C, g)
|
||||
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()
|
||||
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