obliczanie dzialania na dR chyba dziala

This commit is contained in:
jgarnek 2022-12-24 10:34:56 +00:00
parent d77addeaf8
commit f7a04c69ec
3 changed files with 7256 additions and 23 deletions

File diff suppressed because it is too large Load Diff

View File

@ -44,6 +44,10 @@ class as_cech:
def coordinates(self, threshold=10, basis = 0): def coordinates(self, threshold=10, basis = 0):
'''Find coordinates of self in the de Rham cohomology basis. Threshold is an argument passed to AS.de_rham_basis().''' '''Find coordinates of self in the de Rham cohomology basis. Threshold is an argument passed to AS.de_rham_basis().'''
AS = self.curve AS = self.curve
C = AS.quotient
m = C.exponent
r = C.polynomial.degree()
n = AS.height
RxyzQ, Rxyz, x, y, z = AS.fct_field RxyzQ, Rxyz, x, y, z = AS.fct_field
if basis == 0: if basis == 0:
basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis(), AS.de_rham_basis(threshold=threshold)] basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis(), AS.de_rham_basis(threshold=threshold)]
@ -54,7 +58,6 @@ class as_cech:
f_products = [] f_products = []
for f in coh_basis: for f in coh_basis:
f_products += [[omega.serre_duality_pairing(f) for omega in holo_diffs]] f_products += [[omega.serre_duality_pairing(f) for omega in holo_diffs]]
print(f_products)
product_of_fct_and_omegas = [] product_of_fct_and_omegas = []
fct = self.f fct = self.f
product_of_fct_and_omegas = [omega.serre_duality_pairing(fct) for omega in holo_diffs] product_of_fct_and_omegas = [omega.serre_duality_pairing(fct) for omega in holo_diffs]
@ -63,27 +66,30 @@ class as_cech:
coh_coordinates = V.coordinates(product_of_fct_and_omegas) #coeficients of self in the basis elts coming from cohomology of OX coh_coordinates = V.coordinates(product_of_fct_and_omegas) #coeficients of self in the basis elts coming from cohomology of OX
for i in range(AS.genus()): for i in range(AS.genus()):
self -= coh_coordinates[i]*dR[i+AS.genus()] self -= coh_coordinates[i]*dR[i+AS.genus()]
#We remove now from f the summands which are obviously regular at infty coh_coordinates = AS.genus()*[0] + list(coh_coordinates)
print(self, []) if self.f.function not in Rxyz:
f_num = numerator(self.f.function) #We remove now from f the summands which are obviously regular at infty
f_den = denominator(self.f.function) pr = [list(GF(p)) for _ in range(n)]
v_f_den = as_function(AS, f_den).valuation() S = []
for a in f_num.monomials(): from itertools import product
if as_function(AS, a).valuation() >= v_f_den: for i in range(0, threshold*r):
self.f.function -= f_num.monomial_coefficient(a)*a/f_den for j in range(0, m):
f_num = numerator(self.f.function) for k in product(*pr):
f_den = denominator(self.f.function) g = (AS.x)^i*prod((AS.z[i1])^(k[i1]) for i1 in range(n))*(AS.y)^j
quo, rem = f_num.quo_rem(f_den) S += [(g, g.expansion_at_infty())]
if as_function(AS, rem/f_den).valuation() >= 0: S += [(self.f, self.f.expansion_at_infty())]
self.f = as_function(AS, quo) fcts = holomorphic_combinations_fcts(S, 0)
hol_form = self.omega0 - self.f.diffn() #now this should be a holomorphic form for g in fcts:
hol_form = as_form(AS, as_reduction(AS, hol_form.form)) if g.function not in Rxyz:
print('hol_form', hol_form) for a in F:
return hol_form.coordinates() + coh_coordinates if (self.f.function - a*g.function in Rxyz):
print(self, [omega.serre_duality_pairing(self.f) for omega in holo_diffs]) self.f.function = self.f.function - a*g.function
raise ValueError('I arrived at a form (omega, 0), in which omega is not regular on U0. I hoped this wouldn t happen.') return vector(coh_coordinates)+vector(self.coordinates(threshold=threshold, basis = basis))
else:
self.omega0 -= self.f.diffn()
return vector(coh_coordinates) + vector(list(self.omega0.coordinates())+AS.genus()*[0])
raise ValueError("Increase threshold.")
def group_action(self, g): def group_action(self, g):
AS = self.curve AS = self.curve
omega = self.omega0 omega = self.omega0

View File

@ -335,7 +335,6 @@ class as_cover:
def lift_to_de_rham(self, fct, threshold = 30): def lift_to_de_rham(self, fct, threshold = 30):
'''Given function fct, find form eta regular on affine part such that eta - d(fct) is regular in infty. (Works for one place at infty now)''' '''Given function fct, find form eta regular on affine part such that eta - d(fct) is regular in infty. (Works for one place at infty now)'''
print(fct)
from itertools import product from itertools import product
x_series = self.x_series x_series = self.x_series
y_series = self.y_series y_series = self.y_series