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):
|
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().'''
|
'''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
|
AS = self.curve
|
||||||
C = AS.quotient
|
C = AS.quotient
|
||||||
m = C.exponent
|
m = C.exponent
|
||||||
@ -95,10 +94,8 @@ class as_cech:
|
|||||||
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):
|
||||||
self.f.function = self.f.function - a*g.function
|
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))
|
return vector(coh_coordinates)+vector(self.coordinates(threshold=threshold, basis = basis))
|
||||||
else:
|
else:
|
||||||
print('else', self.omega8.valuation())
|
|
||||||
self.omega0 -= self.f.diffn()
|
self.omega0 -= self.f.diffn()
|
||||||
return vector(coh_coordinates) + vector(list(self.omega0.coordinates(basis=holo_diffs))+AS.genus()*[0])
|
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
|
result += aux_fct.derivative(y)*dy_super
|
||||||
dz += [-result]
|
dz += [-result]
|
||||||
self.dz = dz
|
self.dz = dz
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
n = self.height
|
n = self.height
|
||||||
p = self.characteristic
|
p = self.characteristic
|
||||||
@ -265,49 +262,53 @@ class as_cover:
|
|||||||
|
|
||||||
return forms
|
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.'''
|
'''Return uniformizer of curve self at place-th place at infinity.'''
|
||||||
p = self.characteristic
|
p = self.characteristic
|
||||||
n = self.height
|
n = self.height
|
||||||
F = self.base_ring
|
F = self.base_ring
|
||||||
RxyzQ, Rxyz, x, y, z = self.fct_field
|
list_of_fcts = self.at_most_poles(threshold)
|
||||||
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.
|
|
||||||
for f1 in list_of_fcts:
|
for f1 in list_of_fcts:
|
||||||
for f2 in list_of_fcts:
|
for f2 in list_of_fcts:
|
||||||
d, a, b = xgcd(f1.valuation(place), f2.valuation(place))
|
d, a, b = xgcd(f1.valuation(place), f2.valuation(place))
|
||||||
if d == 1:
|
if d == 1:
|
||||||
return f1^a*f2^b
|
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.'''
|
'''Find ith ramification group at place at infty of nb place.'''
|
||||||
G = self.group.elts
|
G = self.group.elts
|
||||||
t = self.uniformizer(place)
|
if uniformizer == 0:
|
||||||
|
t = self.uniformizer(place)
|
||||||
Gi = [G[0]]
|
Gi = [G[0]]
|
||||||
for g in G:
|
for g in G:
|
||||||
if g != G[0]:
|
if g != G[0]:
|
||||||
@ -317,15 +318,27 @@ class as_cover:
|
|||||||
Gi += [g]
|
Gi += [g]
|
||||||
return Gi
|
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.'''
|
'''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 = []
|
ramification_jps = []
|
||||||
i = 0
|
i = 0
|
||||||
|
if uniformizer == 0:
|
||||||
|
t = self.uniformizer(place)
|
||||||
while len(G) > 1:
|
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):
|
if len(Gi) < len(G):
|
||||||
ramification_jps += [i]
|
ramification_jps += [i-1]
|
||||||
G = Gi
|
G = Gi
|
||||||
i+=1
|
i+=1
|
||||||
return ramification_jps
|
return ramification_jps
|
||||||
|
@ -80,9 +80,7 @@ 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, 'H0(OmegaX)', self.valuation())
|
|
||||||
self = self.reduce()
|
self = self.reduce()
|
||||||
print(self, self.valuation(), 'after reduce')
|
|
||||||
C = self.curve
|
C = self.curve
|
||||||
if basis == 0:
|
if basis == 0:
|
||||||
basis = C.holomorphic_differentials_basis()
|
basis = C.holomorphic_differentials_basis()
|
||||||
|
@ -117,7 +117,7 @@ class as_function:
|
|||||||
return as_function(C, g.substitute(sub_list))
|
return as_function(C, g.substitute(sub_list))
|
||||||
result = self
|
result = self
|
||||||
for i in range(len(G.gens)):
|
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]
|
range_limit = elt[i]
|
||||||
else: # ... or an integer.
|
else: # ... or an integer.
|
||||||
range_limit = elt
|
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)]
|
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):
|
||||||
for j, omega in enumerate(space):
|
for j, omega in enumerate(space):
|
||||||
if isinstance(omega, as_cech):
|
|
||||||
print('A:', omega.omega8.valuation(), omega)
|
|
||||||
omega1 = omega.group_action(g)
|
omega1 = omega.group_action(g)
|
||||||
if isinstance(omega, as_cech):
|
|
||||||
print('B:', omega1.omega8.valuation(), omega1)
|
|
||||||
v1 = omega1.coordinates(basis = basis)
|
v1 = omega1.coordinates(basis = basis)
|
||||||
A[i][:, j] = vector(v1)
|
A[i][:, j] = vector(v1)
|
||||||
return A
|
return A
|
Loading…
Reference in New Issue
Block a user