quaternion template; fiber fixed
This commit is contained in:
parent
3d0e352a37
commit
63c189e753
@ -108,23 +108,32 @@ class as_cover:
|
||||
jumps = self.jumps
|
||||
gY = self.quotient.genus()
|
||||
n = self.height
|
||||
branch_pts = self.branch_points
|
||||
p = self.characteristic
|
||||
return p^n*gY + (p^n - 1)*(len(branch_pts) - 1) + sum(p^(n-j-1)*(jumps[pt][j]-1)*(p-1)/2 for j in range(n) for pt in branch_pts)
|
||||
return p^n*(gY-1) + 1 + 1/2*sum(self.exponent_of_different(place)*len(self.fiber(place)) for place in self.branch_points)
|
||||
|
||||
def exponent_of_different(self, place = 0):
|
||||
jumps = self.jumps
|
||||
n = self.height
|
||||
delta = self.nb_of_pts_at_infty
|
||||
p = self.characteristic
|
||||
return sum(p^(n-j-1)*(jumps[place][j]+1)*(p-1) for j in range(n))
|
||||
dd = [0]
|
||||
for i in range(1, n+1):
|
||||
if jumps[place][i-1] == 0:
|
||||
dd += [dd[i-1]]
|
||||
else:
|
||||
dd += [(jumps[place][i-1]+1)*(p-1) + p*dd[i-1]]
|
||||
return dd[n]
|
||||
|
||||
def exponent_of_different_prim(self, place = 0):
|
||||
jumps = self.jumps
|
||||
n = self.height
|
||||
delta = self.nb_of_pts_at_infty
|
||||
p = self.characteristic
|
||||
return sum(p^(n-j-1)*(jumps[place][j])*(p-1) for j in range(n))
|
||||
dd = [0]
|
||||
for i in range(1, n+1):
|
||||
if jumps[place][i-1] == 0:
|
||||
dd += [dd[i-1]]
|
||||
else:
|
||||
dd += [jumps[place][i-1]*(p-1) + p*dd[i-1]]
|
||||
return dd[n]
|
||||
|
||||
def holomorphic_differentials_basis(self, threshold = 8):
|
||||
from itertools import product
|
||||
@ -160,7 +169,8 @@ class as_cover:
|
||||
|
||||
if len(forms) < self.genus():
|
||||
print("I haven't found all forms, only ", len(forms), " of ", self.genus())
|
||||
return holomorphic_differentials_basis(self, threshold = threshold + 1)
|
||||
raise ValueError("Increase threshold.")
|
||||
#return holomorphic_differentials_basis(self, threshold = threshold + 1)
|
||||
if len(forms) > self.genus():
|
||||
raise ValueError("Increase precision.")
|
||||
return forms
|
||||
@ -283,11 +293,9 @@ class as_cover:
|
||||
F = self.base_ring
|
||||
rr_space = self.at_most_poles(threshold)
|
||||
list_of_fcts = [ff for ff in rr_space if ff.valuation(place)%p != 0]
|
||||
print(len(list_of_fcts))
|
||||
list_of_fcts2 = [len(str(ff)) for ff in list_of_fcts]
|
||||
i_min = list_of_fcts2.index(min(list_of_fcts2))
|
||||
result = list_of_fcts.pop(i_min)
|
||||
print(result)
|
||||
flag = 1
|
||||
while flag == 1:
|
||||
flag = 0
|
||||
@ -298,7 +306,6 @@ class as_cover:
|
||||
list_of_fcts2 = [len(str(ff)) for ff in list_of_fcts]
|
||||
i_min = list_of_fcts2.index(min(list_of_fcts2))
|
||||
result = list_of_fcts.pop(i_min)
|
||||
print(result)
|
||||
return result
|
||||
|
||||
def stabilizer(self, place = 0):
|
||||
@ -320,11 +327,12 @@ class as_cover:
|
||||
'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
|
||||
G = self.group
|
||||
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:
|
||||
if (G.elt(g)*(-G.elt(v))).as_tuple in H:
|
||||
flag = 0
|
||||
if flag:
|
||||
result += [g]
|
||||
@ -376,6 +384,15 @@ class as_cover:
|
||||
i+=1
|
||||
return result
|
||||
|
||||
def upper_ramification_jumps(self, place = 0, quasiuniformizer = 0, threshold = 20):
|
||||
lj = self.ramification_jumps(place = place, quasiuniformizer = quasiuniformizer, threshold = threshold)
|
||||
result = []
|
||||
result += [lj[0]]
|
||||
for j in range(1, len(lj)):
|
||||
aux = len(self.stabilizer(place=place))//len(self.ith_ramification_gp(lj[j], place = place, quasiuniformizer = quasiuniformizer, threshold = threshold))
|
||||
result += [result[j-1] + (lj[j] - lj[j-1])//aux]
|
||||
return result
|
||||
|
||||
def a_number(self):
|
||||
g = self.genus()
|
||||
return g - self.cartier_matrix().rank()
|
||||
|
@ -94,3 +94,28 @@ def heisenberg(p):
|
||||
gens = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
|
||||
gp = group(name, short_name, elts, one, mult, inv, gens)
|
||||
return gp
|
||||
|
||||
def quaternion_mult(aa, bb):
|
||||
result = [(aa[0] + bb[0] + 2*aa[1]*bb[0])%4, (aa[1]+bb[1])%4]
|
||||
if result[1]%4 == 2 or result[1]%4 == 3:
|
||||
result[0] = (result[0] + 2)%4
|
||||
result[1] = (result[1] - 2)%4
|
||||
return tuple(result)
|
||||
|
||||
def quaternion_inv(aa):
|
||||
result = [((-1)^(aa[0]*aa[1])*(-aa[0]))%4, (-aa[1])%4]
|
||||
if result[1]%4 == 2 or result[1]%4 == 3:
|
||||
result[0] = (result[0] + 2)%4
|
||||
result[1] = (result[1] - 2)%4
|
||||
return tuple(result)
|
||||
|
||||
def quaternion_gp():
|
||||
name = "Q8"
|
||||
short_name = name
|
||||
elts = [(i, j) for i in range(4) for j in range(2)]
|
||||
mult = quaternion_mult
|
||||
inv = quaternion_inv
|
||||
gens = [(1, 0), (0, 1)]
|
||||
one = (0, 0)
|
||||
gp = group(name, short_name, elts, one, mult, inv, gens)
|
||||
return gp
|
@ -37,6 +37,11 @@ def elementary_template(p, n):
|
||||
gp_action = [[z[j] + (i == j) for j in range(n)] for i in range(n)]
|
||||
return template(height, field, group, fcts, gp_action)
|
||||
|
||||
def elementary_cover(list_of_fcts, prec=10):
|
||||
n = len(list_of_fcts)
|
||||
C = list_of_fcts[0].curve
|
||||
return as_cover(C, elementary_template(p, n), list_of_fcts, branch_points = [], prec = prec)
|
||||
|
||||
def heisenberg_template(p):
|
||||
group = heisenberg(p)
|
||||
field = GF(p)
|
||||
@ -57,6 +62,10 @@ def heisenberg_template(p):
|
||||
gp_action = [[z[0] + 1, z[1], z[2] + z[1]], [z[0] + 1, z[1] + 1, z[2]], [z[0], z[1], z[2] - 1]]
|
||||
return template(height, field, group, fcts, gp_action)
|
||||
|
||||
def heisenberg_cover(list_of_fcts, prec=10):
|
||||
n = len(list_of_fcts)
|
||||
C = list_of_fcts[0].curve
|
||||
return as_cover(C, heisenberg_template(p), list_of_fcts, branch_points = [], prec = prec)
|
||||
|
||||
def witt_pol(X, p, n):
|
||||
n = len(X)
|
||||
@ -134,3 +143,32 @@ def witt_template(p, n):
|
||||
aux
|
||||
gp_action = [gp_action]
|
||||
return template(height, field, group, fcts, gp_action)
|
||||
|
||||
def witt_cover(list_of_fcts, prec=10):
|
||||
n = len(list_of_fcts)
|
||||
C = list_of_fcts[0].curve
|
||||
return as_cover(C, witt_template(p, n), list_of_fcts, branch_points = [], prec = prec)
|
||||
|
||||
def quaternion_template():
|
||||
field = GF(2)
|
||||
height = 3
|
||||
n = 3
|
||||
variable_names = ''
|
||||
for i in range(n):
|
||||
variable_names += 'z'+str(i)+','
|
||||
for i in range(n):
|
||||
variable_names += 'f'+str(i)
|
||||
if i!=n-1:
|
||||
variable_names += ','
|
||||
R = PolynomialRing(field, 2*n, variable_names)
|
||||
z = R.gens()[:n]
|
||||
f = R.gens()[n:]
|
||||
group = quaternion_gp()
|
||||
fcts = [f[0], f[1], f[2] + z[0]*f[0]+z[1]*(f[0] + f[1])]
|
||||
gp_action = [[z[0]+1, z[1], z[2] + z[0]], [z[0], z[1] + 1, z[2] + z[1] + z[0]]]
|
||||
return template(height, field, group, fcts, gp_action)
|
||||
|
||||
def quaternion_cover(list_of_fcts, prec=10):
|
||||
n = len(list_of_fcts)
|
||||
C = list_of_fcts[0].curve
|
||||
return as_cover(C, quaternion_template(), list_of_fcts, branch_points = [], prec = prec)
|
30
init.sage
30
init.sage
@ -35,21 +35,21 @@ load('auxilliaries/laurent_analytic_part.sage')
|
||||
#load('as_drw/as_witt.sage')
|
||||
#load('as_drw/as_witt_form.sage')
|
||||
#load('as_drw/as_compability.sage')
|
||||
load('quaternion_covers/quaternion_covers.sage')
|
||||
load('quaternion_covers/quaternion_function_class.sage')
|
||||
load('quaternion_covers/quaternion_form_class.sage')
|
||||
load('quaternion_covers/quaternion_polyforms.sage')
|
||||
load('quaternion_covers/quaternion_reduction.sage')
|
||||
load('quaternion_covers/quaternion_group_action_matrices.sage')
|
||||
load('heisenberg_covers/heisenberg_covers.sage')
|
||||
load('heisenberg_covers/heisenberg_function_class.sage')
|
||||
load('heisenberg_covers/heisenberg_form_class.sage')
|
||||
load('heisenberg_covers/heisenberg_polyforms.sage')
|
||||
load('heisenberg_covers/heisenberg_reduction.sage')
|
||||
load('heisenberg_covers/heisenberg_group_action_matrices.sage')
|
||||
load('heisenberg_covers/dual_element.sage')
|
||||
load('heisenberg_covers/ith_magical_component.sage')
|
||||
load('heisenberg_covers/heisenberg_group.sage')
|
||||
#load('quaternion_covers/quaternion_covers.sage')
|
||||
#load('quaternion_covers/quaternion_function_class.sage')
|
||||
#load('quaternion_covers/quaternion_form_class.sage')
|
||||
#load('quaternion_covers/quaternion_polyforms.sage')
|
||||
#load('quaternion_covers/quaternion_reduction.sage')
|
||||
#load('quaternion_covers/quaternion_group_action_matrices.sage')
|
||||
#load('heisenberg_covers/heisenberg_covers.sage')
|
||||
#load('heisenberg_covers/heisenberg_function_class.sage')
|
||||
#load('heisenberg_covers/heisenberg_form_class.sage')
|
||||
#load('heisenberg_covers/heisenberg_polyforms.sage')
|
||||
#load('heisenberg_covers/heisenberg_reduction.sage')
|
||||
#load('heisenberg_covers/heisenberg_group_action_matrices.sage')
|
||||
#load('heisenberg_covers/dual_element.sage')
|
||||
#load('heisenberg_covers/ith_magical_component.sage')
|
||||
#load('heisenberg_covers/heisenberg_group.sage')
|
||||
##############
|
||||
##############
|
||||
def init(lista, tests = False, init=True):
|
||||
|
Loading…
Reference in New Issue
Block a user