added fiber and stabilizer; uniformizer works but is complicated

This commit is contained in:
jgarnek 2024-06-12 11:23:24 +00:00
parent 1818e1a301
commit 4a07181dad
5 changed files with 53 additions and 49 deletions

View File

@ -52,7 +52,6 @@ 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
@ -95,10 +94,8 @@ 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

@ -90,10 +90,7 @@ class as_cover:
result += aux_fct.derivative(y)*dy_super
dz += [-result]
self.dz = dz
def __repr__(self):
n = self.height
p = self.characteristic
@ -265,49 +262,53 @@ class as_cover:
return forms
def uniformizer(self, place = 0):
def uniformizer(self, place = 0, threshold = 10):
'''Return uniformizer of curve self at place-th place at infinity.'''
p = self.characteristic
n = self.height
F = self.base_ring
RxyzQ, Rxyz, x, y, z = self.fct_field
fx = as_function(self, x)
z = [as_function(self, zi) for zi in z]
# We create a list of functions. We add there all variables...
list_of_fcts = [fx]+z
vfx = fx.valuation(place)
vz = [zi.valuation(place) for zi in z]
# Then we subtract powers of variables with the same valuation (so that 1/t^(kp) cancels) and add to this list.
for j1 in range(n):
for j2 in range(n):
if j1>j2:
a = gcd(vz[j1] , vz[j2])
vz1 = vz[j1]/a
vz2 = vz[j2]/a
for b in F:
if (z[j1]^(vz2) - b*z[j2]^(vz1)).valuation(place) > (z[j2]^(vz1)).valuation(place):
list_of_fcts += [z[j1]^(vz2) - b*z[j2]^(vz1)]
for j1 in range(n):
a = gcd(vz[j1], vfx)
vzj = vz[j1] /a
vfx = vfx/a
for b in F:
if (fx^(vzj) - b*z[j1]^(vfx)).valuation(place) > (z[j1]^(vfx)).valuation(place):
list_of_fcts += [fx^(vzj) - b*z[j1]^(vfx)]
#Finally, we check if on the list there are two elements with the same valuation.
list_of_fcts = self.at_most_poles(threshold)
for f1 in list_of_fcts:
for f2 in list_of_fcts:
d, a, b = xgcd(f1.valuation(place), f2.valuation(place))
if d == 1:
return f1^a*f2^b
raise ValueError("My method of generating fcts with relatively prime valuation failed.")
raise ValueError("Increase threshold.")
def ith_ramification_gp(self, i, place = 0):
def stabilizer(self, place = 0):
result = []
for g in self.group.elts:
flag = 1
for i in range(self.height):
if self.z[i].valuation(place = place) > 0:
fct = self.z[i]
elif self.z[i].valuation(place = place) < 0:
fct = self.one/self.z[i]
if fct.group_action(g).valuation(place = place) <= 0:
flag = 0
if flag:
result += [g]
return result
def fiber(self, place = 0):
'Gives representatives for the quotient G/G_P for given place. Those are in bijection with the fiber.'
result = [(0, 0, 0)]
p = self.characteristic
H = self.stabilizer(place = place)
for g in self.group.elts:
flag = 1
for v in result:
if heisenberg_mult(g, heisenberg_inv(v, p), p) in H:
flag = 0
if flag:
result += [g]
return result
def ith_ramification_gp(self, i, place = 0, uniformizer = 0):
'''Find ith ramification group at place at infty of nb place.'''
G = self.group.elts
t = self.uniformizer(place)
if uniformizer == 0:
t = self.uniformizer(place)
Gi = [G[0]]
for g in G:
if g != G[0]:
@ -317,15 +318,27 @@ class as_cover:
Gi += [g]
return Gi
def ramification_jumps(self, place = 0):
def ramification_jumps(self, place = 0, uniformizer = 0):
'''Return list of lower ramification jumps at at place at infty of nb place.'''
G = self.group.elts
G = self.stabilizer(place = place)
ramification_jps = []
i = 0
if uniformizer == 0:
t = self.uniformizer(place)
while len(G) > 1:
Gi = self.ith_ramification_gp(i+1, place)
print(G, i)
Gi = [G[0]]
for g in G:
print('g', g, type(g))
if g != G[0]:
tg = t.group_action(g)
print('tg')
v = (tg - t).valuation(place)
print('v')
if v >= i+1:
Gi += [g]
if len(Gi) < len(G):
ramification_jps += [i]
ramification_jps += [i-1]
G = Gi
i+=1
return ramification_jps

View File

@ -80,9 +80,7 @@ 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, '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

@ -117,7 +117,7 @@ class as_function:
return as_function(C, g.substitute(sub_list))
result = self
for i in range(len(G.gens)):
if isinstance(elt, list): #elt can be a tuple...
if isinstance(elt, list) or isinstance(elt, tuple): #elt can be a tuple...
range_limit = elt[i]
else: # ... or an integer.
range_limit = elt

View File

@ -4,11 +4,7 @@ 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