template - matrix for dR works

This commit is contained in:
jgarnek 2024-06-11 18:57:12 +00:00
parent 0300d463ed
commit 1818e1a301
8 changed files with 20 additions and 15 deletions

View File

@ -52,6 +52,7 @@ class as_cech:
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().'''
print(self, 'H1dR(X)', self.omega8.valuation())
AS = self.curve
C = AS.quotient
m = C.exponent
@ -94,8 +95,10 @@ class as_cech:
for a in F:
if (self.f.function - a*g.function in Rxyz):
self.f.function = self.f.function - a*g.function
print(g, self.omega8.valuation())
return vector(coh_coordinates)+vector(self.coordinates(threshold=threshold, basis = basis))
else:
print('else', self.omega8.valuation())
self.omega0 -= self.f.diffn()
return vector(coh_coordinates) + vector(list(self.omega0.coordinates(basis=holo_diffs))+AS.genus()*[0])

View File

@ -3,9 +3,7 @@ class as_cover:
self.quotient = C
self.cover_template = cover_template
self.functions = list_of_fcts
print('a')
self.height = len(list_of_fcts)
print('b')
F = C.base_ring
self.base_ring = F
p = C.characteristic
@ -40,7 +38,6 @@ class as_cover:
for j in range(n):
####
#
print(cover_template.fcts[j], {zgen[i] : z_series[i] for i in range(j)} | {zgen[i] : 0 for i in range(j, n)} | {fgen[i] : list_of_power_series[i] for i in range(n)})
power_series = Rzf(cover_template.fcts[j]).subs({zgen[i] : z_series[i] for i in range(j)} | {zgen[i] : 0 for i in range(j, n)} | {fgen[i] : list_of_power_series[i] for i in range(n)})
####
jump, correction, t_old, z = artin_schreier_transform(power_series, prec = prec)
@ -100,7 +97,7 @@ class as_cover:
def __repr__(self):
n = self.height
p = self.characteristic
result = str(self.group)
result = "("+self.group.short_name+")"
result += "-cover of " + str(self.quotient)+" with the equations: \n"
for i in range(n):
result += 'z'+str(i)+'^p - z'+str(i) + ' = '

View File

@ -80,8 +80,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)
print(self, 'H0(OmegaX)', self.valuation())
self = self.reduce()
print(self, self.valuation(), 'after reduce')
C = self.curve
if basis == 0:
basis = C.holomorphic_differentials_basis()

View File

@ -122,7 +122,6 @@ class as_function:
else: # ... or an integer.
range_limit = elt
for j in range(range_limit):
print(G.gens[i])
result = result.group_action(G.gens[i])
return result

View File

@ -1,6 +1,5 @@
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'''
print(fct, fct.parent())
n = AS.height
F = AS.base_ring
RxyzQ, Rxyz, x, y, z = AS.fct_field
@ -25,7 +24,7 @@ def as_reduction(AS, fct):
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((AS.rhs[i])^(d_div[i]) 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]+AS.rhs[i])^(d_div[i]) for i in range(n))
result += RxyzQ(monomial)
if change == 0:

View File

@ -1,5 +1,5 @@
class group:
def __init__(self, name, elts, one, mult, inv, gens):
def __init__(self, name, short_name, elts, one, mult, inv, gens):
self.name = name
self.elts = elts
self.one = one
@ -7,6 +7,7 @@ class group:
self.inv = inv
self.order = len(self.elts)
self.gens = gens
self.short_name = short_name
def __repr__(self):
return self.name
@ -55,16 +56,18 @@ class group_elt:
def cyclic_gp(p, n):
name = "cyclic group of order " + str(p) + "^" + str(n)
short_name = "Z/p^n"
elts = [i for i in range(p^n)]
one = 0
mult = lambda i1, i2: (i1 + i2) % (p ** n)
inv = lambda i: (-i) % (p ** n)
gens = [1]
gp = group(name, elts, one, mult, inv, gens)
gp = group(name, short_name, elts, one, mult, inv, gens)
return gp
def elementary_gp(p, n):
name = "(Z/" + str(p) + ")" + "^" + str(n)
short_name = name
pr = [list(GF(p)) for _ in range(n)]
from itertools import product
elts = []
@ -78,17 +81,16 @@ def elementary_gp(p, n):
e = n*[0]
e[i] = 1
gens += [tuple(e)]
gp = group(name, elts, one, mult, inv, gens)
gp = group(name, short_name, elts, one, mult, inv, gens)
return gp
def heisenberg(p):
name = "Heisenberg group E(" + str(p) + "^3)"
short_name = "E(p^3)"
elts = [(i, j, k) for i in range(p) for j in range(p) for k in range(p)]
one = 0
mult = lambda elt1, elt2 : ((elt1[0] + elt2[0])%p, (elt1[1] + elt2[1])%p, (-elt1[1]*elt2[0] + elt1[2] + elt2[2])%p)
inv = lambda elt : (p-elt[0], p-elt[1], (p - elt[2] - (p-elt[0])*(p-elt[1]))%p)
gens = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
gp = group(name, elts, one, mult, inv, gens)
gp = group(name, short_name, elts, one, mult, inv, gens)
return gp

View File

@ -4,7 +4,11 @@ def as_group_action_matrices(F, space, list_of_group_elements, basis):
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):
if isinstance(omega, as_cech):
print('A:', omega.omega8.valuation(), omega)
omega1 = omega.group_action(g)
if isinstance(omega, as_cech):
print('B:', omega1.omega8.valuation(), omega1)
v1 = omega1.coordinates(basis = basis)
A[i][:, j] = vector(v1)
return A

View File

@ -129,7 +129,7 @@ def witt_template(p, n):
rhs += [rhs_aux]
gp_action_aux = aux.subs({Xpn[ii] : z[ii] for ii in range(i+1)}|{Ypn[ii] : ii == 0 for ii in range(i+1)})
gp_action += [gp_action_aux]
fcts = [rhs[i] - z[i]^p + z[i] + f[i] for i in range(n)]
fcts = [-rhs[i] + z[i]^p - z[i] + f[i] for i in range(n)]
########
aux
gp_action = [gp_action]