added fiber and stabilizer; uniformizer works but is complicated
This commit is contained in:
parent
1818e1a301
commit
4a07181dad
@ -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])
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
@ -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
|
Loading…
Reference in New Issue
Block a user