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