riemann roch spaces
This commit is contained in:
parent
73372ac15d
commit
0487c52174
@ -135,6 +135,18 @@ class as_cover:
|
||||
dd += [jumps[place][i-1]*(p-1) + p*dd[i-1]]
|
||||
return dd[n]
|
||||
|
||||
def exponent_of_different_bis(self, place = 0):
|
||||
jumps = self.jumps
|
||||
n = self.height
|
||||
p = self.characteristic
|
||||
dd = [0]
|
||||
for i in range(1, n+1):
|
||||
if jumps[place][i-1] == 0:
|
||||
dd += [dd[i-1]]
|
||||
else:
|
||||
dd += [(jumps[place][i-1]-1)*(p-1) + p*dd[i-1]]
|
||||
return dd[n]
|
||||
|
||||
def holomorphic_differentials_basis(self, threshold = 8):
|
||||
from itertools import product
|
||||
x_series = self.x_series
|
||||
@ -545,3 +557,81 @@ class as_cover:
|
||||
n = AS.height
|
||||
F = AS.base_ring
|
||||
return as_group_action_matrices(F, AS.at_most_poles_forms(1), AS.group.gens, basis = AS.at_most_poles_forms(1))
|
||||
|
||||
def riemann_roch_space(self, pole_orders, threshold = 8):
|
||||
""" Find fcts with pole order in infty's at most pole_order from the given dictionary. The keys of the dictionary are pairs (place_at_infty, group element). The items are the poles orders at those places.
|
||||
Threshold gives a bound on powers of x in the function. If you suspect that you haven't found all the functions, you may increase it."""
|
||||
from itertools import product
|
||||
x_series = self.x_series
|
||||
y_series = self.y_series
|
||||
z_series = self.z_series
|
||||
delta = self.nb_of_pts_at_infty
|
||||
p = self.characteristic
|
||||
n = self.height
|
||||
prec = self.prec
|
||||
C = self.quotient
|
||||
F = self.base_ring
|
||||
m = C.exponent
|
||||
r = C.polynomial.degree()
|
||||
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||
F = C.base_ring
|
||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
||||
S = []
|
||||
RQxyz = FractionField(Rxyz)
|
||||
pr = [list(GF(p)) for _ in range(n)]
|
||||
for i in range(0, threshold*r):
|
||||
for j in range(0, m):
|
||||
for k in product(*pr):
|
||||
eta = as_function(self, x^i * prod(z[i1]^(k[i1]) for i1 in range(n))*y^j)
|
||||
eta_exp = eta.expansion_at_infty()
|
||||
S += [(eta, eta_exp)]
|
||||
|
||||
forms = holomorphic_combinations_fcts(S, pole_orders[(0, self.group.one)])
|
||||
print('iteration')
|
||||
for i in range(delta):
|
||||
for g in self.fiber(place = i):
|
||||
if i!=0 or g != self.group.one:
|
||||
print('iteration')
|
||||
forms = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in forms]
|
||||
forms = holomorphic_combinations_fcts(forms, pole_orders[(i, g)])
|
||||
return forms
|
||||
|
||||
def riemann_roch_space_forms(self, pole_orders, threshold = 8):
|
||||
""" Find fcts with pole order in infty's at most pole_order from the given dictionary. The keys of the dictionary are pairs (place_at_infty, group element). The items are the poles orders at those places.
|
||||
Threshold gives a bound on powers of x in the function. If you suspect that you haven't found all the functions, you may increase it."""
|
||||
from itertools import product
|
||||
x_series = self.x_series
|
||||
y_series = self.y_series
|
||||
z_series = self.z_series
|
||||
delta = self.nb_of_pts_at_infty
|
||||
p = self.characteristic
|
||||
n = self.height
|
||||
prec = self.prec
|
||||
C = self.quotient
|
||||
F = self.base_ring
|
||||
m = C.exponent
|
||||
r = C.polynomial.degree()
|
||||
RxyzQ, Rxyz, x, y, z = self.fct_field
|
||||
F = C.base_ring
|
||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
|
||||
S = []
|
||||
RQxyz = FractionField(Rxyz)
|
||||
pr = [list(GF(p)) for _ in range(n)]
|
||||
for i in range(0, threshold*r):
|
||||
for j in range(0, m):
|
||||
for k in product(*pr):
|
||||
eta = heisenberg_form(self, x^i * prod(z[i1]^(k[i1]) for i1 in range(n))/y^j)
|
||||
eta_exp = eta.expansion_at_infty()
|
||||
S += [(eta, eta_exp)]
|
||||
|
||||
forms = holomorphic_combinations_forms(S, pole_orders[(0, (0, 0, 0))])
|
||||
print('iteration')
|
||||
for i in range(delta):
|
||||
for g in self.fiber(place = i):
|
||||
if i!=0 or g != self.group.one:
|
||||
print('iteration')
|
||||
forms = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in forms]
|
||||
forms = holomorphic_combinations_forms(forms, pole_orders[(i, g)])
|
||||
return forms
|
@ -1,6 +1,6 @@
|
||||
def ith_magical_component(omega, zvee, g):
|
||||
def ith_magical_component(omega, zvee, g, super=True):
|
||||
'''Given a form omega on AS cover, element g of group AS.group and normal basis element zmag, find the decomposition
|
||||
sum_g g(zmag) omega_g and return omega_g.'''
|
||||
z_vee_g = zvee.group_action(g)
|
||||
new_form = z_vee_g*omega
|
||||
return new_form.trace()
|
||||
return new_form.trace(super=super)
|
Loading…
Reference in New Issue
Block a user