partially fixed issue with de Rham basis and coordinates for more than one place at infty
This commit is contained in:
parent
aebf8c0a5b
commit
3843cfa550
@ -58,6 +58,7 @@ class as_cech:
|
||||
r = C.polynomial.degree()
|
||||
n = AS.height
|
||||
p = AS.characteristic
|
||||
delta = AS.nb_of_pts_at_infty
|
||||
RxyzQ, Rxyz, x, y, z = AS.fct_field
|
||||
if basis == 0:
|
||||
basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis(), AS.de_rham_basis(threshold=threshold)]
|
||||
@ -65,15 +66,8 @@ class as_cech:
|
||||
coh_basis = basis[1]
|
||||
dR = basis[2]
|
||||
F = AS.base_ring
|
||||
f_products = []
|
||||
for f in coh_basis:
|
||||
f_products += [[omega.serre_duality_pairing(f) for omega in holo_diffs]]
|
||||
product_of_fct_and_omegas = []
|
||||
fct = self.f
|
||||
product_of_fct_and_omegas = [omega.serre_duality_pairing(fct) for omega in holo_diffs]
|
||||
|
||||
V = (F^(AS.genus())).span_of_basis([vector(a) for a in f_products])
|
||||
coh_coordinates = V.coordinates(product_of_fct_and_omegas) #coeficients of self in the basis elts coming from cohomology of OX
|
||||
coh_coordinates = fct.coordinates(basis = [holo_diffs, coh_basis]) #coeficients of self in the basis elts coming from cohomology of OX
|
||||
for i in range(AS.genus()):
|
||||
self -= coh_coordinates[i]*dR[i+AS.genus()]
|
||||
coh_coordinates = AS.genus()*[0] + list(coh_coordinates)
|
||||
@ -88,8 +82,15 @@ class as_cech:
|
||||
g = (AS.x)^i*prod((AS.z[i1])^(k[i1]) for i1 in range(n))*(AS.y)^j
|
||||
S += [(g, g.expansion_at_infty())]
|
||||
S += [(self.f, self.f.expansion_at_infty())]
|
||||
fcts = holomorphic_combinations_fcts(S, 0)
|
||||
for g in fcts:
|
||||
S = holomorphic_combinations_fcts(S, 0)
|
||||
########
|
||||
for i in range(delta):
|
||||
for g in AS.fiber(place = i):
|
||||
if i!=0 or g != AS.group.one:
|
||||
S = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in S]
|
||||
S = holomorphic_combinations_fcts(S, 0)
|
||||
######
|
||||
for g in S:
|
||||
if g.function not in Rxyz:
|
||||
for a in F:
|
||||
if (self.f.function - a*g.function in Rxyz):
|
||||
|
@ -188,6 +188,7 @@ class as_cover:
|
||||
if len(forms) > self.genus():
|
||||
print(len(forms), forms)
|
||||
raise ValueError("Increase precision.")
|
||||
forms = [om.reduce() for om in forms]
|
||||
return forms
|
||||
|
||||
def cartier_matrix(self, prec=50):
|
||||
|
@ -69,10 +69,15 @@ class as_form:
|
||||
def reduce(self):
|
||||
RxyzQ, Rxyz, x, y, z = self.curve.fct_field
|
||||
m = self.curve.quotient.exponent
|
||||
aux = as_reduction(self.curve, RxyzQ(y^m*self.form))
|
||||
return as_form(self.curve, aux/y^m)
|
||||
#aux = as_reduction(self.curve, RxyzQ(self.form))
|
||||
#return as_form(self.curve, aux)
|
||||
#!!!! Problem: how to reduce?
|
||||
#####
|
||||
#####
|
||||
# OLD VERSION:
|
||||
#aux = as_reduction(self.curve, RxyzQ(y^m*self.form))
|
||||
#return as_form(self.curve, aux/y^m)
|
||||
# NEW VERSION:
|
||||
aux = as_reduction(self.curve, RxyzQ(self.form))
|
||||
return as_form(self.curve, aux)
|
||||
|
||||
def group_action(self, elt):
|
||||
C = self.curve
|
||||
@ -83,7 +88,9 @@ class as_form:
|
||||
|
||||
def coordinates(self, basis = 0):
|
||||
"""Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo."""
|
||||
print(self)
|
||||
self = self.reduce()
|
||||
print('s reduce', self)
|
||||
C = self.curve
|
||||
if basis == 0:
|
||||
basis = C.holomorphic_differentials_basis()
|
||||
|
@ -1,9 +1,13 @@
|
||||
def as_group_action_matrices(F, space, list_of_group_elements, basis):
|
||||
def as_group_action_matrices(F, space, list_of_group_elements, basis, info = 0):
|
||||
n = len(list_of_group_elements)
|
||||
d = len(space)
|
||||
A = [matrix(F, d, d) for i in range(n)]
|
||||
for i, g in enumerate(list_of_group_elements):
|
||||
if info:
|
||||
print("Matrix for group elt", g)
|
||||
for j, omega in enumerate(space):
|
||||
if info:
|
||||
print("coordinates of element " + str(j+1)+" out of " + str(len(space)))
|
||||
omega1 = omega.group_action(g)
|
||||
v1 = omega1.coordinates(basis = basis)
|
||||
A[i][:, j] = vector(v1)
|
||||
|
@ -43,6 +43,7 @@ def elementary_template(p, n):
|
||||
def elementary_cover(list_of_fcts, prec=10):
|
||||
n = len(list_of_fcts)
|
||||
C = list_of_fcts[0].curve
|
||||
p = C.characteristic
|
||||
return as_cover(C, elementary_template(p, n), list_of_fcts, branch_points = [], prec = prec)
|
||||
|
||||
def heisenberg_template(p):
|
||||
|
@ -39,7 +39,6 @@ class superelliptic_cech:
|
||||
return superelliptic_cech(C, superelliptic_form(C, Rx(0)), superelliptic_function(C, fct^p))
|
||||
|
||||
def coordinates(self, basis = 0):
|
||||
print('coord', self, self.omega8.valuation())
|
||||
C = self.curve
|
||||
F = C.base_ring
|
||||
m = C.exponent
|
||||
@ -48,8 +47,12 @@ class superelliptic_cech:
|
||||
FxRy.<y> = PolynomialRing(Fx)
|
||||
g = C.genus()
|
||||
if basis == 0:
|
||||
basis = C.de_rham_basis()
|
||||
|
||||
basis_dR = C.de_rham_basis()
|
||||
basis_h = C.holomorphic_differentials_basis()
|
||||
basis_s = C.cohomology_of_structure_sheaf_basis()
|
||||
else:
|
||||
basis_h, basis_s, basis_dR = basis
|
||||
|
||||
omega = self.omega0
|
||||
fct = self.f
|
||||
|
||||
@ -57,24 +60,21 @@ class superelliptic_cech:
|
||||
return vector((2*g)*[0])
|
||||
|
||||
if fct.function == Rx(0) and omega.form != Rx(0):
|
||||
print('A')
|
||||
result = list(omega.coordinates()) + g*[0]
|
||||
result = list(omega.coordinates(basis = Bh)) + g*[0]
|
||||
result = vector([F(a) for a in result])
|
||||
return result
|
||||
|
||||
coord = fct.coordinates()
|
||||
coord = fct.coordinates(basis = basis_h)
|
||||
coord = g*[0] + list(coord)
|
||||
coord = vector([F(a) for a in coord])
|
||||
aux = self
|
||||
for i in range(g, 2*g):
|
||||
aux -= coord[i]*basis[i]
|
||||
aux -= coord[i]*basis_dR[i]
|
||||
aux_f = decomposition_g0_g8(aux.f)[0]
|
||||
print('aux_f', aux_f, 'aux.f', aux.f)
|
||||
aux.omega0 -= aux_f.diffn()
|
||||
aux.f = 0*C.x
|
||||
aux.omega8 = aux.omega0
|
||||
print('B', aux)
|
||||
return coord + aux.coordinates()
|
||||
return coord + aux.coordinates(basis = basis)
|
||||
|
||||
def is_cocycle(self):
|
||||
w0 = self.omega0
|
||||
|
@ -91,7 +91,6 @@ class superelliptic_form:
|
||||
return -result
|
||||
|
||||
def coordinates(self, basis = 0):
|
||||
print('start', self)
|
||||
"""Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo."""
|
||||
C = self.curve
|
||||
if basis == 0:
|
||||
@ -102,7 +101,6 @@ class superelliptic_form:
|
||||
denom = LCM([denominator(omega.form) for omega in basis])
|
||||
basis = [denom*omega.form for omega in basis]
|
||||
self_with_no_denominator = denom*self.form
|
||||
print('stop', self_with_no_denominator)
|
||||
return linear_representation_polynomials(Rxy(self_with_no_denominator), [Rxy(omega) for omega in basis])
|
||||
|
||||
def jth_component(self, j):
|
||||
|
@ -94,16 +94,14 @@ class superelliptic_function:
|
||||
B = g.derivative(y)*f.derivative(x)/(m*y^(m-1))
|
||||
return superelliptic_form(C, A+B)
|
||||
|
||||
def coordinates(self, basis = 0, basis_holo = 0, prec=50):
|
||||
'''Find coordinates in H1(X, OX) in given basis basis with dual basis basis_holo.'''
|
||||
def coordinates(self, basis = 0, prec=50):
|
||||
'''Find coordinates in H1(X, OX) in given basis dual to basis *basis*.'''
|
||||
C = self.curve
|
||||
if basis == 0:
|
||||
basis = C.cohomology_of_structure_sheaf_basis()
|
||||
if basis_holo == 0:
|
||||
basis_holo = C.holomorphic_differentials_basis()
|
||||
basis = C.holomorphic_differentials_basis()
|
||||
g = C.genus()
|
||||
coordinates = g*[0]
|
||||
for i, omega in enumerate(basis_holo):
|
||||
for i, omega in enumerate(basis):
|
||||
coordinates[i] = omega.serre_duality_pairing(self, prec=prec)
|
||||
return coordinates
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user