as reduction (stare) plus macierz dzialania na bazie dR prawie dziala

This commit is contained in:
jgarnek 2022-12-22 13:44:57 +00:00
parent c098f37690
commit 6494187dfe
9 changed files with 944 additions and 14748 deletions

File diff suppressed because one or more lines are too long

View File

@ -36,4 +36,40 @@ class as_cech:
C = self.curve C = self.curve
omega = self.omega0 omega = self.omega0
f = self.f f = self.f
return as_form(C, constant*omega, constant*f) return as_cech(C, constant*omega, constant*f)
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().'''
AS = self.curve
if basis == 0:
basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis(), AS.de_rham_basis(threshold=threshold)]
holo_diffs = basis[0]
coh_basis = basis[1]
dR = basis[2]
F = AS.base_ring
f_products = []
for i, f in enumerate(coh_basis):
f_products += [[]]
for omega in holo_diffs:
f_products[i] += [sum((f*omega).residue(place = _) for _ in range(AS.nb_of_pts_at_infty))]
product_of_fct_and_omegas = []
fct = self.f
for omega in holo_diffs:
product_of_fct_and_omegas += [sum((fct*omega).residue(place = _) for _ in range(AS.nb_of_pts_at_infty))]
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()):
self -= coh_coordinates[i]*dR[i+AS.genus()]
hol_form = self.omega0 + self.f.diffn() #now this should be a holomorphic form
hol_form = hol_form
print(hol_form)
return hol_form.coordinates() + coh_coordinates
def group_action(self, g):
AS = self.curve
omega = self.omega0
f = self.f
return as_cech(self.curve, omega.group_action(g), f.group_action(g))

View File

@ -370,7 +370,7 @@ class as_cover:
def de_rham_basis(self, threshold = 30): def de_rham_basis(self, threshold = 30):
result = [] result = []
for omega in self.holomorphic_differentials_basis(): for omega in self.holomorphic_differentials_basis():
result += [(omega, 0)] result += [as_cech(self, omega, as_function(self, 0))]
for f in self.cohomology_of_structure_sheaf_basis(): for f in self.cohomology_of_structure_sheaf_basis():
omega = self.lift_to_de_rham(f, threshold = threshold) omega = self.lift_to_de_rham(f, threshold = threshold)
result += [as_cech(self, omega, f)] result += [as_cech(self, omega, f)]

View File

@ -69,19 +69,18 @@ class as_form:
g = self.form g = self.form
return as_form(C, g.substitute(sub_list)) return as_form(C, g.substitute(sub_list))
def coordinates(self, holo): def coordinates(self, basis = 0):
"""Find coordinates of the given 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
n = C.height if basis == 0:
gC = C.genus() basis = C.holomorphic_differentials_basis()
F = C.base_ring RxyzQ, Rxyz, x, y, z = C.fct_field
variable_names = 'x, y' # We need to have only polynomials to use monomial_coefficients in linear_representation_polynomials,
for j in range(n): # and sometimes basis elements have denominators. Thus we multiply by them.
variable_names += ', z' + str(j) denom = LCM([denominator(omega.form) for omega in basis])
Rxyz = PolynomialRing(F, n+2, variable_names) basis = [denom*omega for omega in basis]
x, y = Rxyz.gens()[:2] self_with_no_denominator = denom*self
z = Rxyz.gens()[2:] return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis])
return linear_representation_polynomials(Rxyz(self.form), holo)
def trace(self): def trace(self):
C = self.curve C = self.curve

View File

@ -0,0 +1,32 @@
def as_reduction(AS, fct):
'''Simplify rational function fct as a function in the function field of AS, so that z[i] appear in powers <p and only in numerator'''
n = AS.height
F = AS.base_ring
RxyzQ, Rxyz, x, y, z = AS.fct_field
ff = AS.functions
ff = [RxyzQ(F.function) for F in ff]
fct = RxyzQ(fct)
fct1 = numerator(fct)
fct2 = denominator(fct)
denom = as_function(AS, fct2)
denom_norm = prod(as_function(AS, fct2).group_action(g) for g in AS.group if list(g) != n*[0])
fct1 = Rxyz(fct1*denom_norm.function)
fct2 = Rxyz(fct2*denom_norm.function)
if fct2 != 1:
return as_reduction(AS, fct1)/as_reduction(AS, fct2)
result = RxyzQ(0)
change = 0
for a in fct1.monomials():
degrees_zi = [a.degree(z[i]) for i in range(n)]
d_div = [a.degree(z[i])//p for i in range(n)]
if d_div != n*[0]:
change = 1
d_rem = [a.degree(z[i])%p for i in range(n)]
monomial = fct1.monomial_coefficient(a)*x^(a.degree(x))*y^(a.degree(y))*prod(z[i]^(d_rem[i]) for i in range(n))*prod((z[i] + ff[i])^(d_div[i]) for i in range(n))
result += RxyzQ(monomial)
if change == 0:
return RxyzQ(result)
else:
return as_reduction(AS, RxyzQ(result))

View File

@ -1,4 +1,34 @@
def group_action_matrices(C_AS): def group_action_matrices(space, list_of_group_elements, basis):
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):
for j, omega in enumerate(space):
omega1 = omega.group_action(g)
v1 = omega1.coordinates(basis = basis)
A[i][:, j] = vector(v1)
return A
def group_action_matrices_holo(AS):
n = AS.height
generators = []
for i in range(n):
ei = n*[0]
ei[i] = 1
generators += [ei]
return group_action_matrices(AS.holomorphic_differentials_basis(), generators, basis = AS.holomorphic_differentials_basis())
def group_action_matrices_dR(AS, threshold=8):
n = AS.height
generators = []
for i in range(n):
ei = n*[0]
ei[i] = 1
generators += [ei]
basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis(), AS.de_rham_basis(threshold=threshold)]
return group_action_matrices(basis[2], generators, basis = basis)
def group_action_matrices_old(C_AS):
F = C_AS.base_ring F = C_AS.base_ring
n = C_AS.height n = C_AS.height
holo = C_AS.holomorphic_differentials_basis() holo = C_AS.holomorphic_differentials_basis()

View File

@ -10,7 +10,7 @@ f1 = superelliptic_function(C_super, x^2*y)
f2 = superelliptic_function(C_super, x^3) f2 = superelliptic_function(C_super, x^3)
AS = as_cover(C_super, [f1, f2], prec=1000) AS = as_cover(C_super, [f1, f2], prec=1000)
A, B = group_action_matrices(AS) A, B = group_action_matrices_holo(AS)
n = A.dimensions()[0] n = A.dimensions()[0]
print(A*B == B*A) print(A*B == B*A)
print(A^p == identity_matrix(n)) print(A^p == identity_matrix(n))

View File

@ -5,6 +5,7 @@ load('superelliptic/superelliptic_cech_class.sage')
load('as_covers/as_cover_class.sage') load('as_covers/as_cover_class.sage')
load('as_covers/as_function_class.sage') load('as_covers/as_function_class.sage')
load('as_covers/as_form_class.sage') load('as_covers/as_form_class.sage')
load('as_covers/as_cech_class.sage')
load('as_covers/as_reduction.sage') load('as_covers/as_reduction.sage')
load('as_covers/as_auxilliary.sage') load('as_covers/as_auxilliary.sage')
load('as_covers/dual_element.sage') load('as_covers/dual_element.sage')
@ -17,6 +18,6 @@ load('auxilliaries/linear_combination_polynomials.sage')
############## ##############
############## ##############
load('drafty/lift_to_de_rham.sage') load('drafty/lift_to_de_rham.sage')
load('drafty/draft3.sage') load('drafty/draft5.sage')
load('drafty/pole_numbers.sage') load('drafty/pole_numbers.sage')
#load('drafty/draft4.sage') #load('drafty/draft4.sage')

View File

@ -1,16 +1,16 @@
#print("as_cover_test:") #print("as_cover_test:")
#load('as_covers/tests/as_cover_test.sage') #load('as_covers/tests/as_cover_test.sage')
#print("group_action_matrices_test:") #print("group_action_matrices_test:")
#load('as_covers/tests/group_action_matrices_test.sage') load('as_covers/tests/group_action_matrices_test.sage')
#print("dual_element_test:") #print("dual_element_test:")
#load('as_covers/tests/dual_element_test.sage') #load('as_covers/tests/dual_element_test.sage')
print("ith_component_test:") #print("ith_component_test:")
load('as_covers/tests/ith_component_test.sage') #load('as_covers/tests/ith_component_test.sage')
#print("ith ramification group test:") #print("ith ramification group test:")
#load('as_covers/tests/ith_ramification_gp_test.sage') #load('as_covers/tests/ith_ramification_gp_test.sage')
#print("uniformizer test:") #print("uniformizer test:")
#load('as_covers/tests/uniformizer_test.sage') #load('as_covers/tests/uniformizer_test.sage')
#print("ramification jumps test:") #print("ramification jumps test:")
#load('as_covers/tests/ramification_jumps_test.sage') #load('as_covers/tests/ramification_jumps_test.sage')
print("diffn_test:") #print("diffn_test:")
load('as_covers/tests/diffn_test.sage') #load('as_covers/tests/diffn_test.sage')