holomorphic differentials for non totally ramified covers

This commit is contained in:
Jędrzej Garnek 2024-11-26 21:33:56 +01:00
parent 91e66e7c7a
commit b902e3fdca
4 changed files with 21 additions and 10 deletions

View File

@ -175,8 +175,10 @@ class as_cover:
forms = holomorphic_combinations(S) forms = holomorphic_combinations(S)
for pt in self.branch_points[1:]: for i in range(delta):
forms = [(omega, omega.expansion(pt=pt)) for omega in forms] for g in self.fiber(place = i):
if i!=0 or g != self.group.one:
forms = [(omega, omega.group_action(g).expansion_at_infty(i)) for omega in forms]
forms = holomorphic_combinations(forms) forms = holomorphic_combinations(forms)
if len(forms) < self.genus(): if len(forms) < self.genus():
@ -184,6 +186,7 @@ class as_cover:
raise ValueError("Increase threshold.") raise ValueError("Increase threshold.")
#return holomorphic_differentials_basis(self, threshold = threshold + 1) #return holomorphic_differentials_basis(self, threshold = threshold + 1)
if len(forms) > self.genus(): if len(forms) > self.genus():
print(len(forms), forms)
raise ValueError("Increase precision.") raise ValueError("Increase precision.")
return forms return forms
@ -545,6 +548,13 @@ class as_cover:
F = AS.base_ring F = AS.base_ring
return as_group_action_matrices(F, basis, AS.group.gens, basis = basis) return as_group_action_matrices(F, basis, AS.group.gens, basis = basis)
def group_action_matrices_poly(AS, mult, basis=0, threshold=10):
n = AS.height
if basis == 0:
basis = AS.holo_polydifferentials_basis(mult = mult, threshold=threshold)
F = AS.base_ring
return as_group_action_matrices(F, basis, AS.group.gens, basis = basis)
def group_action_matrices_dR(AS, basis = 0, threshold=8): def group_action_matrices_dR(AS, basis = 0, threshold=8):
n = AS.height n = AS.height
if basis == 0: if basis == 0:
@ -589,11 +599,9 @@ class as_cover:
S += [(eta, eta_exp)] S += [(eta, eta_exp)]
forms = holomorphic_combinations_fcts(S, pole_orders[(0, self.group.one)]) forms = holomorphic_combinations_fcts(S, pole_orders[(0, self.group.one)])
print('iteration')
for i in range(delta): for i in range(delta):
for g in self.fiber(place = i): for g in self.fiber(place = i):
if i!=0 or g != self.group.one: 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 = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in forms]
forms = holomorphic_combinations_fcts(forms, pole_orders[(i, g)]) forms = holomorphic_combinations_fcts(forms, pole_orders[(i, g)])
return forms return forms

View File

@ -88,10 +88,8 @@ class as_form:
# We need to have only polynomials to use monomial_coefficients in linear_representation_polynomials, # We need to have only polynomials to use monomial_coefficients in linear_representation_polynomials,
# and sometimes basis elements have denominators. Thus we multiply by them. # and sometimes basis elements have denominators. Thus we multiply by them.
denom = LCM([denominator(omega.form) for omega in basis]) denom = LCM([denominator(omega.form) for omega in basis])
print(denom, basis, '\n')
basis = [denom*omega for omega in basis] basis = [denom*omega for omega in basis]
self_with_no_denominator = denom*self self_with_no_denominator = denom*self
print(self_with_no_denominator.form, [omega.form for omega in basis])
return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis]) return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis])
def trace(self, super=True): def trace(self, super=True):

View File

@ -14,6 +14,11 @@ class as_polyform:
def expansion_at_infty(self, place): def expansion_at_infty(self, place):
return self.form.expansion_at_infty(place=place)*(self.curve.dx.expansion_at_infty(place=place))^(self.mult) return self.form.expansion_at_infty(place=place)*(self.curve.dx.expansion_at_infty(place=place))^(self.mult)
def reduce(self):
AS = self.curve
reduced = self.form.reduce()
return as_polyform(reduced, self.mult)
def coordinates(self, basis = 0): def coordinates(self, basis = 0):
"""Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo.""" """Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo."""
AS = self.curve AS = self.curve
@ -24,7 +29,8 @@ class as_polyform:
# and sometimes basis elements have denominators. Thus we multiply by them. # and sometimes basis elements have denominators. Thus we multiply by them.
denom = LCM([denominator(omega.form.function) for omega in basis]) denom = LCM([denominator(omega.form.function) for omega in basis])
basis = [denom*omega.form.function for omega in basis] basis = [denom*omega.form.function for omega in basis]
self_with_no_denominator = denom*self.form.function self_reduced = self.reduce()
self_with_no_denominator = denom*self_reduced.form.function
return linear_representation_polynomials(Rxyz(self_with_no_denominator), [Rxyz(omega) for omega in basis]) return linear_representation_polynomials(Rxyz(self_with_no_denominator), [Rxyz(omega) for omega in basis])
def group_action(self, elt): def group_action(self, elt):
@ -69,7 +75,7 @@ def as_canonical_ideal(AS, n, threshold=8):
g = AS.genus() g = AS.genus()
RxyzQ, Rxyz, x, y, z = AS.fct_field RxyzQ, Rxyz, x, y, z = AS.fct_field
from itertools import product from itertools import product
B1 = as_symmetric_power_basis(AS, n, threshold = 8) B1 = as_symmetric_power_basis(AS, n, threshold = threshold)
B2 = AS.holo_polydifferentials_basis(n, threshold = threshold) B2 = AS.holo_polydifferentials_basis(n, threshold = threshold)
g = AS.genus() g = AS.genus()
r = len(B2) r = len(B2)

View File

@ -41,7 +41,6 @@ def holomorphic_combinations_mixed(S):
Rt.<t> = LaurentSeriesRing(F, default_prec=prec) Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
RtQ = FractionField(Rt) RtQ = FractionField(Rt)
minimal_valuation = min([g[1].valuation() for g in S]) minimal_valuation = min([g[1].valuation() for g in S])
print(minimal_valuation)
if minimal_valuation >= 0: if minimal_valuation >= 0:
return [s[0] for s in S] return [s[0] for s in S]
list_of_lists = [] #to będzie lista złożona z list współczynników część nieholomorficznych rozwinięcia form z S list_of_lists = [] #to będzie lista złożona z list współczynników część nieholomorficznych rozwinięcia form z S