aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kummer_degree.sage572
-rw-r--r--tex/README7
-rw-r--r--tex/af_code.aux11
-rw-r--r--tex/af_code.log764
-rw-r--r--tex/af_code.pdfbin0 -> 212906 bytes
-rw-r--r--tex/af_code.synctex.gzbin0 -> 37116 bytes
-rw-r--r--tex/af_code.tex474
-rw-r--r--tex/old/compute_degree.aux14
-rw-r--r--tex/old/compute_degree.log706
-rw-r--r--tex/old/compute_degree.pdfbin0 -> 176578 bytes
-rw-r--r--tex/old/compute_degree.synctex.gzbin0 -> 44626 bytes
-rw-r--r--tex/old/compute_degree.tex320
-rw-r--r--tex/preprint.pdfbin0 -> 293067 bytes
13 files changed, 2616 insertions, 252 deletions
diff --git a/kummer_degree.sage b/kummer_degree.sage
index 161e8c9..3085efd 100644
--- a/kummer_degree.sage
+++ b/kummer_degree.sage
@@ -1,16 +1,3 @@
1#############################################################################
2# This program allows one to compute the degree of certain field extensions #
3# of the rational numbers. In particular, it can compute the degree over Q #
4# of extensions of the form Q( sqrt[N](G), \zeta_M ), where: #
5# - N and M are integers with N dividing M; #
6# - G is a finitely generated subgroup of the multiplicative group of Q #
7# - \zeta_M is a primitive M-th root of unity #
8# The group G does not have to be given in a particular format. A finite #
9# set of generators is sufficient. #
10#############################################################################
11
12from sage.misc.cachefunc import CachedFunction
13
14# Computes the "adelic Kummer failure", i.e. the degrees of the intersection 1# Computes the "adelic Kummer failure", i.e. the degrees of the intersection
15# of the the Kummer extension Q(\sqrt{2^n}{G}) with the M-th cyclotomic field 2# of the the Kummer extension Q(\sqrt{2^n}{G}) with the M-th cyclotomic field
16# over Q_{2^n}. 3# over Q_{2^n}.
@@ -18,12 +5,12 @@ from sage.misc.cachefunc import CachedFunction
18# Input: a good basis B for the torsion-free group G, organized as a list of 5# Input: a good basis B for the torsion-free group G, organized as a list of
19# lists, and a non negative integer d. They have to satisfy the following: 6# lists, and a non negative integer d. They have to satisfy the following:
20# 1. Each list B[i] contains all basis elements of 2-divisibility i. 7# 1. Each list B[i] contains all basis elements of 2-divisibility i.
21# 2. The basis given by B is 2-maximal, that is to say it satisfies Theorem 8# 2. The basis given by B is 2-maximal, that is to say it satisfies Theorem 14
22# 14 of Debry-Perucca; i.e. each element of B[i] is, up to plus or minus 9# of Debry-Perucca; i.e. each element of B[i] is, up to plus or minus 1, the
23# 1, the 2^i-th power of a strongly 2-indivisible rational. 10# 2^i-th power of a strongly 2-indivisible rational.
24# 3. For i != d every element of B[i] is positive, and B[d][0] is the only 11# 3. For i != d every element of B[i] is positive, and B[d][0] is the only
25# negative element of B[d] (if d=-1, then there is no negative element). 12# negative element of B[d] (if d=-1, then there is no negative element).
26# 3'. Notice that the existence on negative elements in B[0] does not change 13# 3'. Notice that the existence on negative elements in B[0] does not influence
27# the correctness of the algorithm; in fact, the function adjust_sign 14# the correctness of the algorithm; in fact, the function adjust_sign
28# produces a basis that may have negative elements of divisibility 0, and 15# produces a basis that may have negative elements of divisibility 0, and
29# this basis is given as input for adelic_failure_gb. 16# this basis is given as input for adelic_failure_gb.
@@ -32,9 +19,9 @@ from sage.misc.cachefunc import CachedFunction
32# integer such that the intersection of Q(\sqrt{2^n}{G}) with Q_\infty is 19# integer such that the intersection of Q(\sqrt{2^n}{G}) with Q_\infty is
33# contained in Q_M0. 20# contained in Q_M0.
34# The table ad_fail has N rows, where N is defined below. 21# The table ad_fail has N rows, where N is defined below.
35# Each row R=ad_fail[i] contains a variable number of pairs (d,r), where d 22# Each row R=ad_fail[i] contains a variable number of pairs (d,r), where d is a
36# is a divisor of M0 and r is the degree of Q(\sqrt{2^{i+1}}{G}) \cap Q_d 23# divisor of M0 and r is the degree of Q(\sqrt{2^{i+1}}{G}) \cap Q_d over
37# over Q_{2^n}. 24# Q_{2^n}.
38# Each divisor of M appears at most once on each row, and the last element of 25# Each divisor of M appears at most once on each row, and the last element of
39# the last row is of the form (M0,r0). 26# the last row is of the form (M0,r0).
40def adelic_failure_gb( B, d ): 27def adelic_failure_gb( B, d ):
@@ -42,48 +29,48 @@ def adelic_failure_gb( B, d ):
42 # The table to be returned (or printed at the end), as described above. 29 # The table to be returned (or printed at the end), as described above.
43 ad_fail = [] 30 ad_fail = []
44 31
45 # N is such that for every n > N the adelic failure of Q(\sqrt{2^n}{G}) 32 # N is such that for every n > N the adelic failure of Q(\sqrt{2^n}{G}) is
46 # is the same as that of Q(\sqrt{2^N}{G}). 33 # the same as that of Q(\sqrt{2^N}{G}).
47 # We always have to include n=3, because of problem with sqrt(2) in Q_8 34 # We always have to include n=3, because of problem with sqrt(2) in Q_8 (in
48 # (in theory, this is not necessary in some cases, e.g. if 2 does not 35 # theory, this is not necessary in some cases, e.g. if 2 does not divide
49 # divide any element of G). 36 # any element of G).
50 # If the negative generator is on the last level, we need to increase N 37 # If the negative generator is on the last level, we need to increase N by
51 # by 1, because it would contribute to the shortlist in the next level 38 # 1, because it would contribute to the shortlist in the next level (by
52 # (by taking the root of an even power). 39 # taking the root of an even power).
53 if d == len(B)-1: 40 if d == len(B)-1:
54 N = max(3,len(B)+1) 41 N = max(3,len(B)+1)
55 else: 42 else:
56 N = max(3,len(B)) 43 N = max(3,len(B))
57 44
58 # The intersection is given by adding the square roots of the elements of 45 # The intersection is given by adding the square roots of the elements of
59 # this shortlist (and a "special element", not always of the form sqrt d, 46 # this shortlist (and a "special element", not always of the form sqrt(d),
60 # coming from taking a suitable root of a negative generator; this 47 # coming from taking a suitable root of a negative generator; this special
61 # special element is dealt with later). The shortlist grows at each step, 48 # element is dealt with later). The shortlist grows at each step, so we
62 # so we declare it before starting to loop over n and we build it 49 # declare it before starting to loop over n and we build it incrementally.
63 # incrementally. The "special element" is of the form \zeta_{2^n}\sqrt b, 50 # The "special element" is of the form \zeta_{2^n}\sqrt{b}, which we encode
64 # which we encode as (n,b). We use the value (1,1) (special element -1) 51 # as (n,b). We use the value (1,1) (special element -1) to say that there
65 # to say that there is no special element at this level. 52 # isno special element at this level.
66 shortlist = [] 53 shortlist = []
67 special_element = (1,1) 54 special_element = (1,1)
68 55
69 # The integers M, giving the smallest cyclotomic field in which lies the 56 # The integers M, giving the smallest cyclotomic field in which lies the
70 # whole intersection with Q_\infty, grows with n. As with the shortlist, 57 # whole intersection with Q_\infty, also grows with n. As with the
71 # we declare it here and increase it appropriately at each step. 58 # shortlist, we declare it here and increase it appropriately at each step.
72 M = 1 59 M = 1
73 60
74 for n in range( 1, N+1 ): 61 for n in range( 1, N+1 ): # 1 \leq n \leq N
75 62
76 # We add the new elements to the shortlist, modifying M if needed. 63 # We add the new elements to the shortlist, modifying M if needed.
77 # This is not done in case we are in the extra "fake" level (this 64 # This is not done in case we are in the extra "fake" level (this case
78 # case dealt with immediately below). 65 # dealt with immediately below).
79 if n-1 < len(B): 66 if n-1 < len(B):
80 for g in B[n-1]: 67 for g in B[n-1]:
81 # Case of negative g 68 # Case of negative g
82 if g < 0 and n > 1: 69 if g < 0 and n > 1:
83 # Special element of the form \zeta_{2^{n+1}}\sqrt(b). 70 # Special element of the form \zeta_{2^{n+1}}\sqrt(b).
84 # It is contained in Q_{lcm(2^{n+1},cyc_emb(b))}, except 71 # It is contained in Q_{lcm(2^{n+1},cyc_emb(b))}, except in
85 # in case n=2 and b=2, in which case it is contained in 72 # case n=2 and b=2, in which case it is contained in Q_4.
86 # Q_4. We store it as as pair ( n+1, b ). 73 # We store it as as pair ( n+1, b ).
87 special_element = ( n+1, abs(g)^(1/(2^(n-1))) ) 74 special_element = ( n+1, abs(g)^(1/(2^(n-1))) )
88 M = lcm( M, special_embed( special_element ) ) 75 M = lcm( M, special_embed( special_element ) )
89 else: 76 else:
@@ -91,8 +78,8 @@ def adelic_failure_gb( B, d ):
91 shortlist.append( b ) 78 shortlist.append( b )
92 M = lcm( M, cyc_embed(b) ) 79 M = lcm( M, cyc_embed(b) )
93 80
94 # We add a root of an even power of the negative generator, as soon 81 # We add a root of an even power of the negative generator, as soon as
95 # as we are beyond its level. 82 # we are beyond its level.
96 if d != -1 and n == d+2: 83 if d != -1 and n == d+2:
97 b = abs(B[d][0])^(1/2^d) 84 b = abs(B[d][0])^(1/2^d)
98 shortlist.append( b ) 85 shortlist.append( b )
@@ -114,20 +101,19 @@ def adelic_failure_gb( B, d ):
114 101
115 # For each divisor dM of M, compute the degree of the intersection of 102 # For each divisor dM of M, compute the degree of the intersection of
116 # Q(\sqrt{2^n}{G}) with Q_dM over Q_{2^n}. We need to compute the 103 # Q(\sqrt{2^n}{G}) with Q_dM over Q_{2^n}. We need to compute the
117 # number r of elements in the subgroup of G generated by the 104 # number r of elements in the subgroup of G generated by the shortlist
118 # shortlist that lie in Q_dM. This is going to be a power of 2. The 105 # that lie in Q_dM. This is going to be a power of 2. The sought degree
119 # sought degree will be r, up to considering some special cases 106 # will be r, up to considering some special cases (described below).
120 # (described below).
121 # 107 #
122 # This algorithm could be inefficient for groups of big rank. It can 108 # This algorithm could be inefficient for groups of big rank. It can be
123 # be improved by precomputing subgroups of G/G^2 and the cyclotomic 109 # improved by precomputing subgroups of G/G^2 and the cyclotomic fields
124 # fields containing them. 110 # containing them.
125 111
126 aux = [] # Next line of ad_fail table 112 aux = [] # Next line of ad_fail table
127 113
128 for dM in divisors( M ): 114 for dM in divisors( M ):
129 # We only care of the intersection with Q_dM if it contains the 115 # We only care of the intersection with Q_dM if it contains the 2^n
130 # 2^n roots of unity. 116 # roots of unity.
131 if dM % (2^n) != 0: 117 if dM % (2^n) != 0:
132 continue 118 continue
133 119
@@ -144,7 +130,7 @@ def adelic_failure_gb( B, d ):
144 if n <= d and dM % (2^(n+1)) == 0 and n > 1: 130 if n <= d and dM % (2^(n+1)) == 0 and n > 1:
145 r *= 2 131 r *= 2
146 132
147 # We loose a factor of 2 if we have sqrt(2) in Q_8 or \zeta_8 in 133 # We loose a factor of 2 if we have sqrt(2) in Q_8 or \zeta_8 2 in
148 # Q_4. 134 # Q_4.
149 if 8 in H and dM % 8 == 0 and (n >= 3 or (n == 2 and n <= d)): 135 if 8 in H and dM % 8 == 0 and (n >= 3 or (n == 2 and n <= d)):
150 r = r/2 136 r = r/2
@@ -153,11 +139,11 @@ def adelic_failure_gb( B, d ):
153 # We have to consider all possible special elements arising from 139 # We have to consider all possible special elements arising from
154 # multiplying the given element with the other elements of the 140 # multiplying the given element with the other elements of the
155 # shortlist. 141 # shortlist.
156 # If any of them is of the form \zeta_8 2q for q a square, there 142 # If any of them is of the form \zeta_8 2q for q a square, there is
157 # is nothing to do: in fact \zeta_8 2 embeds in Q_4, which 143 # nothing to do: in fact \zeta_8 2 embeds in Q_4, which coincides
158 # coincides with Q_{2^n} (n must be 2); so we would double the 144 # with Q_{2^n} (n must be 2); so we would double the degree because
159 # degree because of the existence of the special element, but 145 # of the existence of the special element, butthen we would loose
160 # then we would loose another factor of 2 because of this. 146 # another factor of 2 because of this.
161 if special_element != (1,1) and special_element[0] == n+1: 147 if special_element != (1,1) and special_element[0] == n+1:
162 nothing_to_do = False 148 nothing_to_do = False
163 intersecting_QdM = False 149 intersecting_QdM = False
@@ -184,8 +170,11 @@ def cyc_embed( b ):
184 m *= 4 170 m *= 4
185 return abs(m) 171 return abs(m)
186 172
187# Computes the minimal cyclotomic field containing \zeta_{2^n}\sqrt(b). 173# Computes the minimal cyclotomic field containing \zeta_{2^n}\sqrt(b),
188def special_embed( (n,b) ): 174# where (n,b)=p
175def special_embed( p ):
176 n = p.first
177 n = p.second
189 m = squarefree_part(b) 178 m = squarefree_part(b)
190 if n == 3 and m % 2 == 0: 179 if n == 3 and m % 2 == 0:
191 return 4 * cyc_embed(m/2) 180 return 4 * cyc_embed(m/2)
@@ -201,7 +190,7 @@ def special_embed( (n,b) ):
201# degree of Q_{l^m,l^n} over Q_{l^m}, where l = L[i] 190# degree of Q_{l^m,l^n} over Q_{l^m}, where l = L[i]
202def total_l_adic_failure( B ): 191def total_l_adic_failure( B ):
203 192
204 bp = bad_primes(B) 193 bp = bad_primes( B )
205 ret = ( bp, [] ) 194 ret = ( bp, [] )
206 195
207 for l in bp: 196 for l in bp:
@@ -210,32 +199,35 @@ def total_l_adic_failure( B ):
210 return ret 199 return ret
211 200
212# Computes the "bad primes", i.e. the ones for which the l-adic part is not 201# Computes the "bad primes", i.e. the ones for which the l-adic part is not
213# maximal. Used by total_l_adic_failure. 202# maximal. Used by l_adic_degree and total_l_adic_failure.
214def bad_primes( B ): 203def bad_primes( B ):
215 M = exponent_matrix( B ) 204 M = exponent_matrix( B )
216 (a,b) = M.dimensions() 205 (a,b) = M.dimensions()
217
218 if a > b or M.rank() < a: 206 if a > b or M.rank() < a:
219 print "This is not a basis" 207 print( "This is not a basis" )
220 return 208 return
221 209
222 # Compute which primes l divide all minors of the exponent matrix 210 # Compute which primes l divide all minors of the exponent matrix
223 bad_p = list( prime_factors( gcd( M.minors(a) ) ) ) 211 ms = M.minors( a )
224 if 2 not in bad_p: 212 d = ms[0]
225 bad_p += [2] # 2 is always bad 213 for m in ms:
214 d = gcd( d, m )
215 bad_primes = list( prime_factors( d ) )
216 if 2 not in bad_primes:
217 bad_primes += [2] # 2 is always bad
218 bad_primes.sort() # Ensures 2 is always first
226 219
227 return sorted(bad_p) # Ensures 2 is always first 220 return bad_primes
228 221
229# Computes the l-adic failure for a specific l. Returns a "table" as 222# Computes the l-adic failure for a specific l. Returns a "table" as described
230# described above "total_l_adic_failure". 223# above "total_l_adic_failure".
231# B is any basis for G. 224# B is any basis for G.
232def l_adic_failure( B, l ): 225def l_adic_failure( B, l ):
233 226
234 r = len(B) 227 r = len(B)
235 GB = make_good_basis( B, l ) 228 GB = make_good_basis( B, l )
236 229
237 # Computes the parameters for G over Q4. For l odd, they are the same as 230 # Computes the parameters over Q4. For l odd, they are the same as over Q.
238 # over Q.
239 p = parameters_Q4( GB, l ) 231 p = parameters_Q4( GB, l )
240 maxM = max( [ sum(x) for x in p ] ) 232 maxM = max( [ sum(x) for x in p ] )
241 maxN = max( maxM, len(GB)-1 ) 233 maxN = max( maxM, len(GB)-1 )
@@ -277,6 +269,7 @@ def l_adic_failure_from_data( B, l, tablel, M, N ):
277 return 1 269 return 1
278 r = len(B) 270 r = len(B)
279 271
272 # Basically, the "dual" of what we do in l_adic_degree.
280 if m > len(tablel): 273 if m > len(tablel):
281 if n > len(tablel): 274 if n > len(tablel):
282 return l^tablel[-1][1] 275 return l^tablel[-1][1]
@@ -285,70 +278,127 @@ def l_adic_failure_from_data( B, l, tablel, M, N ):
285 278
286 return l^(r*n-tablel[m-1][0][n-1]) 279 return l^(r*n-tablel[m-1][0][n-1])
287 280
288# Returns the l-dvisibility parameters of G over Q, given a good basis b of 281# Computes the l-divisibility parameters of G over Q4, given a good basis b
289# G, as a list of pairs (di,hi).
290def parameters_Q( b, l ):
291 if l != 2:
292 return [x for a in [[(i,0)]*len(b[i]) for i in range(len(b))] \
293 for x in a]
294 else:
295 return [x for a in [[(i,1-max(0,sgn(g))) for g in b[i]] \
296 for i in range(len(b))] for x in a]
297
298# Computes the l-divisibility parameters of G over Q4, given a good basis gb
299# over Q for G. Returns a list of pairs (di,hi). 282# over Q for G. Returns a list of pairs (di,hi).
300# If l is odd it just uses the good basis given to compute the parameters. 283# If l is odd it just uses the good basis given to compute the parameters.
301# If l=2, it uses the results of PST-2.
302def parameters_Q4( gb, l ): 284def parameters_Q4( gb, l ):
285 # Converts from "good basis format" to simple list
286 b = []
287 for x in gb:
288 b += x
289 ret = []
290
303 if l != 2: 291 if l != 2:
304 return parameters_Q( gb, l ) 292 for i in range( len( gb ) ):
293 for j in gb[i]:
294 ret.append( (i,0) )
295 return ret
305 else: 296 else:
306 # Converts from "good basis format" to simple list 297 R.<y> = PolynomialRing( QQ )
307 b = [ x for a in gb for x in a ] 298 pol = R(y^2+1)
308 299 Q4.<eye> = NumberField( pol ) # I already use i for other things
309 M = exponent_matrix( b )
310 300
311 # Thanks to my bad notation, the elements of b are what are called 301 # Factorize basis elements over Q4 and so on.
312 # g_i in the article, while the elements of bb will be the b_i's. 302 d = []
313 bb = [ abs(b[i])^(2^(-divisibility(M[i],2))) for i in range(len(b)) ] 303 B = []
304 h = []
305 ideals_list = set()
306 M = [] # Exponent matrix of the Bi's
314 307
315 # Computing a combination of bb elements of the form 2 * square. 308 # Pre-process to find all ideals appearing in the factorization and fix
316 MM = exponent_matrix( bb + [2] ).change_ring( GF( 2 ) ) 309 # a chosen generator for each of them. This is important in order to
317 310 # compute the "sign" (h-parameter) of an element with respect to it Bi.
318 for a in MM.kernel().basis(): 311 for g in b:
319 if a[-1] != 0: 312 factorization_list = list( Q4.ideal(g).factor() )
320 # the vector a[0:-1] gives the coefficients for a combination 313 ideals_list |= set( [ x[0] for x in factorization_list ] )
321 # of the b_i's of the form 2 * square. 314 ideals_list = list( ideals_list )
322 315 # Chooses a generator of each principal ideal in the list
323 # Index of asis elements that do appear in the combination 316 irreducibles_list = [ J.gens_reduced()[0] for J in ideals_list ]
324 c = [ i for i in range(len(a[0:-1])) if a[i] != 0 ] 317
325 318 # Compute the Q4-parameters of the given basis b. Also computes the
326 # Change of basis to include the element of the form 319 # exponent matrix of the Bi's
327 # 2 * square to some power. 320 for g in b:
328 div_max = -1 321 factorization_list = list( Q4.ideal(g).factor() )
329 i_max = -1 322 exps = [ x[1] for x in factorization_list ]
330 for j in c: 323 d.append( divisibility( exps, l ) )
331 if divisibility(M[j],2) > div_max: 324 Bg = 1
332 div_max = divisibility(M[j],2) 325 for j in range(len(factorization_list)):
333 i_max = j 326 a = 0
334 b[i_max] = prod([b[j]^(2^(div_max-divisibility(M[j],2))) \ 327 for i in range( len( ideals_list ) ):
335 for j in c]) 328 if ideals_list[i] == factorization_list[j][0]:
336 M = exponent_matrix(b) 329 a = irreducibles_list[i]
330 break
331 Bg *= a ^ (exps[j]/(l^d[-1]))
332 B.append(Bg)
333 u = g / (Bg^(l^d[-1]))
334 if not u.is_unit():
335 print( "Error: g is not the right power of the computed Bg." )
336 print( "g:", g, ", Bg:", Bg, ", exponent:", l^d[-1] )
337 if u == 1:
338 h.append( 0 )
339 elif u == -1:
340 h.append( 1 )
341 else:
342 h.append( 2 )
343
344 # Make the exponent matrix M (for now as a list of rows)
345 for g in B:
346 row = [0] * len(ideals_list)
347 for i in range(len(ideals_list)):
348 I = ideals_list[i]
349 ee = 1
350 while (I^ee).divides(g):
351 ee += 1
352 row[i] = ee-1
353 M.append(row)
337 354
338 # Return the parameters, changing only those of the element 355 # If the Bi's are not strongly independent, apply the algorithm (only
339 # of highest divisibility that appears in the combination. 356 # once) to produce a new basis. The new basis has maximal parameters.
340 ret = [(divisibility(M[i],2),1-max(0,sgn(b[i]))) \ 357 coeffs = find_combination( matrix(M), l )
341 for i in range(len(b)) ] 358 if coeffs != []:
342 d1, h1 = ret[i_max]
343 if d1 == 1:
344 h1 = 1 - h1
345 elif d1 == 0:
346 h1 = 2
347 ret[i_max] = ( d1+1, h1 )
348 359
349 return ret 360 maxi = -1
361 maxd = -1
362 for i in range(len(d)):
363 if d[i] > maxd and coeffs[i] != 0:
364 maxd = d[i]
365 maxi = i
350 366
351 return parameters_Q( gb, 2 ) 367 x = [(a/coeffs[maxi]).lift() for a in coeffs] # Now a vector of int
368
369 new_element = 1
370 for i in range(len(d)):
371 new_element *= b[i]^( x[i] * l^(d[maxi]-d[i]) )
372
373 b[maxi] = new_element
374
375 # Compute new B, d and so on.
376 factorization_list = list( Q4.ideal(b[maxi]).factor() )
377 exps = [ x[1] for x in factorization_list ]
378 d[maxi] = divisibility( exps, l )
379 Bg = 1
380
381 for j in range(len(factorization_list)):
382 a = 0
383 for i in range( len( ideals_list ) ):
384 if ideals_list[i] == factorization_list[j][0]:
385 a = irreducibles_list[i]
386 break
387 Bg *= a ^ (exps[j]/(l^d[maxi]))
388 B[maxi] = Bg
389 M[maxi] = [ x[1] for x in list( Q4.ideal(Bg).factor() ) ]
390 u = b[maxi] / (Bg^(l^d[maxi]))
391 if not u.is_unit():
392 print( "Error: new element is not the right power of B." )
393 print( "New el.:",b[maxi],", B:",Bg,", exponent:",l^d[maxi] )
394 if u == 1:
395 h[maxi] = 0
396 elif u == -1:
397 h[maxi] = 1
398 else:
399 h[maxi] = 2
400
401 return [(d[i],h[i]) for i in range(len(d))]
352 402
353# Uses Theorem 18 to compute the degree of Kummer extensions. 403# Uses Theorem 18 to compute the degree of Kummer extensions.
354def compute_vl( p, n, m, r ): 404def compute_vl( p, n, m, r ):
@@ -358,26 +408,16 @@ def compute_vl( p, n, m, r ):
358 408
359 return M - m + r*n - sum( ni ) 409 return M - m + r*n - sum( ni )
360 410
361# Computes a basis for G from a frozen_set of generators.
362# Returns a pair (B,torsion) where B is a list of rational numbers and
363# torsion is true if -1 is in G and false otherwise.
364@CachedFunction
365def generators_to_basis( G ):
366 (BM,BM_primes) = exponent_matrix_with_sign_and_primes( list(G) )
367 BM = BM.echelon_form()
368 BM_primes.append(-1)
369
370 B = [prod([BM_primes[i]^r[i] for i in range(len(r))]) for r in BM.rows()]
371
372 return ( [ x for x in B if abs(x) != 1 ], -1 in B )
373
374
375# Given any basis b of a group G computes an l-good basis for G. This is done 411# Given any basis b of a group G computes an l-good basis for G. This is done
376# using the algorithm outlined in the proof of Theorem 14 of (Debry-Perucca). 412# using the algorithm outlined in the proof of Theorem 14 of (Debry-Perucca).
377def make_good_basis( b, l ): 413def make_good_basis( b, l ):
378 M = exponent_matrix( b ) 414 M = exponent_matrix( b )
379 d = [ divisibility(x,l) for x in M ] 415 d = []
380 B = [ abs(b[i])^(1/(l^d[i])) for i in range(len(b)) ] 416 B = []
417 for i in range(len(b)):
418 di = divisibility( M[i], l )
419 d.append( di )
420 B.append( abs(b[i])^(1/(l^di)) )
381 421
382 # Computes the coeffiecients of a linear combination of the rows of M 422 # Computes the coeffiecients of a linear combination of the rows of M
383 # that is zero modulo l. These coefficients are elements of F_l. 423 # that is zero modulo l. These coefficients are elements of F_l.
@@ -385,8 +425,8 @@ def make_good_basis( b, l ):
385 425
386 while coeffs != []: 426 while coeffs != []:
387 427
388 # Computes which basis element (with non-zero coefficient in the 428 # Computes which basis element (with non-zero coefficient in the linear
389 # linear combination above) has maximal divisibility. 429 # combination above) has maximal divisibility.
390 maxi = -1 430 maxi = -1
391 maxd = -1 431 maxd = -1
392 for i in range(len(d)): 432 for i in range(len(d)):
@@ -394,24 +434,31 @@ def make_good_basis( b, l ):
394 maxd = d[i] 434 maxd = d[i]
395 maxi = i 435 maxi = i
396 436
397 x = [ (a/coeffs[maxi]).lift() for a in coeffs ] # Now a vector of int 437 x = [ (a/coeffs[maxi]).lift() for a in coeffs ] # Now a vector of ints
398 438
399 new_elt = prod([b[i]^(x[i]*l^(d[maxi]-d[i])) for i in range(len(d))]) 439 new_element = 1
440 for i in range(len(d)):
441 new_element *= b[i]^( x[i] * l^(d[maxi]-d[i]) )
400 442
401 b[maxi] = new_elt 443 b[maxi] = new_element
402 M = exponent_matrix( b ) 444 M = exponent_matrix( b )
403 d[maxi] = divisibility( M[maxi], l ) 445 d[maxi] = divisibility( M[maxi], l )
404 B[maxi] = abs(b[maxi])^(1/(l^d[maxi])) 446 B[maxi] = abs(b[maxi])^(1/(l^d[maxi]))
405 447
406 coeffs = find_combination( exponent_matrix( B ), l ) 448 coeffs = find_combination( exponent_matrix( B ), l )
407 449
408 return [[b[i] for i in range(len(b)) if d[i]==j] for j in range(max(d)+1)] 450 GB = [[]]
451 for i in range(len(d)):
452 while( len(GB) <= d[i] ):
453 GB.append([])
454 GB[d[i]].append(b[i])
455 return GB
409 456
410# Takes a good basis B and adjusts the sign of the elements so that there is 457# Takes a good basis B and adjusts the sign of the elements so that there is at
411# at most one negative generator (of positive divisibility). The input is a 458# most one negative generator (of positive divisibility). The input is a good
412# good basis in the format returned by make_good_basis. 459# basis in the format returned by make_good_basis.
413# Returns a pair (B,d), where B is the updated basis and d is the 460# Returns a pair (B,d), where B is the updated basis and d is the divisibility
414# divisibility parameter of the only negative element remained. 461# parameter of the only negative element remained.
415# The sign of the d=0 elements is just ignored in the other steps of the 462# The sign of the d=0 elements is just ignored in the other steps of the
416# algorithm, so we keep them negative. 463# algorithm, so we keep them negative.
417def adjust_sign( B ): 464def adjust_sign( B ):
@@ -430,7 +477,6 @@ def adjust_sign( B ):
430# Given the exponent matrix M of a list of rational numbers B, returns the 477# Given the exponent matrix M of a list of rational numbers B, returns the
431# coefficients of a linear combination that is weakly l-divisible, or [] if 478# coefficients of a linear combination that is weakly l-divisible, or [] if
432# the B[i] are strongly l-independent. 479# the B[i] are strongly l-independent.
433@CachedFunction
434def find_combination( M, l ): 480def find_combination( M, l ):
435 M = M.change_ring( GF( l ) ) 481 M = M.change_ring( GF( l ) )
436 if M.rank() != min( M.dimensions() ): 482 if M.rank() != min( M.dimensions() ):
@@ -443,8 +489,8 @@ def find_combination( M, l ):
443# Returns the minimal l-valuation of the exponents. 489# Returns the minimal l-valuation of the exponents.
444def divisibility( A, l ): 490def divisibility( A, l ):
445 if len(A) == 0: 491 if len(A) == 0:
446 print "Warning: computing the divisibility of a torsion element.", 492 print( "Warning: computing the divisibility of a torsion element.", end="" )
447 print "Returning +Infinity." 493 print( "Returning +Infinity." )
448 return +Infinity 494 return +Infinity
449 return min( [ valuation( x, l ) for x in A ] ) 495 return min( [ valuation( x, l ) for x in A ] )
450 496
@@ -469,10 +515,11 @@ def exponent_matrix( B ):
469# Returns a pair (M,L) where M is the modified exponent matrix and L is the 515# Returns a pair (M,L) where M is the modified exponent matrix and L is the
470# list of primes appearing in the factorization. 516# list of primes appearing in the factorization.
471def exponent_matrix_with_sign_and_primes( B ): 517def exponent_matrix_with_sign_and_primes( B ):
472 518 prime_list = set()
473 prime_list = list({x for a in [prime_factors(g) for g in B] for x in a}) 519 for g in B:
520 prime_list |= set( prime_factors( g ) )
521 prime_list = list( prime_list )
474 np = len( prime_list ) 522 np = len( prime_list )
475
476 rows = [] 523 rows = []
477 for g in B: 524 for g in B:
478 rowg = [0] * np 525 rowg = [0] * np
@@ -480,19 +527,21 @@ def exponent_matrix_with_sign_and_primes( B ):
480 for i in range( np ): 527 for i in range( np ):
481 if f[0] == prime_list[i]: 528 if f[0] == prime_list[i]:
482 rowg[i] = f[1] 529 rowg[i] = f[1]
483 rowg.append( 1 - max(0,sgn(g)) ) 530 s = 0
531 if sgn(g) == -1:
532 s = 1
533 rowg.append( s )
484 rows.append( rowg ) 534 rows.append( rowg )
485 return ( matrix( rows ), prime_list ) 535 return ( matrix( rows ), prime_list )
486 536
487# The function TotalKummerFailure (with its many wrapper functions) computes 537# This is a wrapper function for total_kummer_failure( G, True ), see below.
488# the total table of Kummer Failures for the given group G. Moreover, the 538def TotalKummerFailure( G ):
489# result is cached for speeding up following computations on the same group, 539 total_kummer_failure( G, True )
490# even if the same group is given with a different set of generators. 540
491#
492# Input: any set of generators for a subgroup G of Q*. 541# Input: any set of generators for a subgroup G of Q*.
493# If output=False, returns a 4-uple (t,MM,NN,D): 542# If output=False, returns a 4-uple (t,MM,NN,D):
494# - t is a pair, where t[0] is the rank of G and t[1] is either True (if G 543# - t is a pair, where t[0] is the rank of G and t[1] is either True (if G has
495# has torsion) or False (is it does not). 544# torsion) or False (is it does not).
496# - MM is the pair (M0,divisors(M0)) 545# - MM is the pair (M0,divisors(M0))
497# - NN is the pair (N0,divisors(N0)) 546# - NN is the pair (N0,divisors(N0))
498# - D is a table F, where F[j][i] is the ration between phi(m)n^r and the 547# - D is a table F, where F[j][i] is the ration between phi(m)n^r and the
@@ -501,34 +550,42 @@ def exponent_matrix_with_sign_and_primes( B ):
501# computed for a torsion-free part of G. 550# computed for a torsion-free part of G.
502# If output is True, outputs this data in a human-readable way and does not 551# If output is True, outputs this data in a human-readable way and does not
503# return any value. 552# return any value.
553def total_kummer_failure( G, output ):
504 554
505def TotalKummerFailure( G ): 555 # Computing a basis.
506 total_kummer_failure( G, True ) 556 (BM,BM_primes) = exponent_matrix_with_sign_and_primes( G )
507 557 BM = BM.echelon_form()
508@CachedFunction 558 BM_primes.append(-1)
509def total_kummer_failure_cachable( G ): 559 B = []
510 B, torsion = generators_to_basis( G ) 560 torsion = False
511 return total_kummer_failure_cachable_basis( tuple(B), torsion )
512 561
513@CachedFunction 562 for r in BM.rows():
514def total_kummer_failure_cachable_basis( B, torsion ): 563 gr = product( [ BM_primes[i]^r[i] for i in range(len(r)) ] )
515 B = list(B) 564 if gr == -1:
516 r = len(B) # Rank of G 565 torsion = True
566 break
567 elif gr == 1:
568 break
569 else:
570 B.append(gr)
517 571
518 if r == 0: 572 if len(B) == 0:
519 print "G is torsion. The extension is cyclotomic. Stopping." 573 print( "G is torsion. The extension is cyclotomic. Stopping." )
520 return False 574 return False
521 575
576 r = len(B) # Rank of G
577
522 # Compute l-adic data (straightforward) 578 # Compute l-adic data (straightforward)
523 ( bad_p, l_adic_failure_table ) = total_l_adic_failure( B ) 579 ( bad_primes, l_adic_failure_table ) = total_l_adic_failure( B )
524 580
525 # Compute adelic data. 581 # Compute adelic data.
526 (GB,d) = adjust_sign( make_good_basis( B, 2 ) ) 582 (GB,d) = adjust_sign( make_good_basis( B, 2 ) )
527 adelic_failure_table = adelic_failure_gb( GB, d ) 583 adelic_failure_table = adelic_failure_gb( GB, d )
528 584
529 # Computing the bounds M0 and N0 585 # Computing the bounds M0 and N0
530 N0 = prod( [ bad_p[i] ^ len( l_adic_failure_table[i][-1][0] ) \ 586 N0 = 1
531 for i in range(len(bad_p)) ] ) 587 for i in range(len( bad_primes )):
588 N0 *= bad_primes[i] ^ len( l_adic_failure_table[i][-1][0] )
532 # Extra factors of 2 may come from the adelic failure 589 # Extra factors of 2 may come from the adelic failure
533 N0 = lcm( N0, 2^len( adelic_failure_table ) ) 590 N0 = lcm( N0, 2^len( adelic_failure_table ) )
534 divs_N0 = divisors(N0) 591 divs_N0 = divisors(N0)
@@ -555,20 +612,16 @@ def total_kummer_failure_cachable_basis( B, torsion ):
555 FT[j][l] = lcm( FT[j][l], pp[1] ) 612 FT[j][l] = lcm( FT[j][l], pp[1] )
556 613
557 # Adding l-adic failure to the table 614 # Adding l-adic failure to the table
558 for i in range( len( bad_p ) ): 615 for i in range( len( bad_primes ) ):
559 l = bad_p[i] 616 l = bad_primes[i]
560 for j in range(len(divs_N0)): 617 for j in range(len(divs_N0)):
561 dN = divs_N0[j] 618 dN = divs_N0[j]
562 fl = l_adic_failure_from_data(B,l,l_adic_failure_table[i],dN,dN) 619 fl = l_adic_failure_from_data(B,l,l_adic_failure_table[i],dN,dN)
563 for h in range(len(divs_M0)): 620 for h in range(len(divs_M0)):
564 FT[j][h] *= fl 621 FT[j][h] *= fl
565 622
566 return ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) 623 ret = ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT )
567 624
568def total_kummer_failure( G, output ):
569
570 ret = total_kummer_failure_cachable( frozenset(G) )
571
572 if output: 625 if output:
573 print_total_table( ret ) 626 print_total_table( ret )
574 # Uncomment following line for case list description. 627 # Uncomment following line for case list description.
@@ -581,9 +634,9 @@ def total_kummer_failure( G, output ):
581# as the ration between 2^eN^r and the degree of Q_{M,N} over Q_M, where e=1 634# as the ration between 2^eN^r and the degree of Q_{M,N} over Q_M, where e=1
582# if N is even and e=0 otherwise. 635# if N is even and e=0 otherwise.
583 636
584# Makes the failure table for the torsion case when M/N is even. In this 637# Makes the failure table for the torsion case when M/N is even. In this case,
585# case an entry of the table is doubled if the corresponding value of N 638# an entry of the table is doubled if the corresponding value of N (actually,
586# (actually, of gcd(N,N0) ) is even, and is kept the same otherwise. 639# of gcd(N,N0) ) is even, and is kept the same otherwise.
587# The expected degree (over Q) 2^e * phi(M) * N^r, where e=1 if N is even and 640# The expected degree (over Q) 2^e * phi(M) * N^r, where e=1 if N is even and
588# e=0 otherwise. 641# e=0 otherwise.
589def torsion_table_even( data ): 642def torsion_table_even( data ):
@@ -600,8 +653,8 @@ def torsion_table_even( data ):
600 653
601# Makes the failure table for the torsion case when M/N is odd. In this case 654# Makes the failure table for the torsion case when M/N is odd. In this case
602# the entry at (M,N) is taken from the torsion-free entry at (2M,N). 655# the entry at (M,N) is taken from the torsion-free entry at (2M,N).
603# In other words, the expected degree (over Q) 2^e * phi(M) * N^r, where e=1 656# In other words, the expected degree (over Q) 2^e * phi(M) * N^r, where e=1 if
604# if N is even and e=0 otherwise. 657# N is even and e=0 otherwise.
605def torsion_table_odd( data ): 658def torsion_table_odd( data ):
606 659
607 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data 660 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data
@@ -625,101 +678,114 @@ def print_total_table( data ):
625 678
626 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data 679 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data
627 680
628 print "M_0 =", M0 681 print( "M_0 =", M0 )
629 print "N_0 =", N0 682 print( "N_0 =", N0 )
630 print "" 683 print( "" )
631 print "The following table shows the total failure of Kummer", 684 print( "The following table shows the total failure of Kummer degrees", end="" )
632 if torsion:
633 print "degrees in case the quotient M/N is EVEN."
634 else:
635 print "degrees."
636 print "The degree of the Kummer extension (M,N) is e / f, where",
637 if torsion: 685 if torsion:
638 print "e = phi(M)*N^rank(G) if N is odd and e = 2*phi(M)*N^rank(G)", 686 print( "in\n case the quotient M/N is EVEN." )
639 print "if N is even",
640 else: 687 else:
641 print "e = phi(M)*N^rank(G)", 688 print( "." )
642 print "and f is the entry of the table below at the row labelled with", 689 print( "Columns correspond to values of M, rows to values of N" )
643 print "gcd(N,N0) and the column labelled with gcd(M,M0)." 690 print( "" )
644 print "" 691 print( "The degree of the Kummer extension (M,N) can be extracted by taking" )
645 692 print( "the value f (failure) of the entry at (gcd(N,N0),gcd(M,M0)) and" )
693 print( "simply computing ed(M,N) / f, where ed(M,N) is the expected degree" )
694 print( "of the Kummer extension." )
646 if torsion: 695 if torsion:
696 print( "In this case (-1 is in G), we have ed(M,N) = 2^e*phi(M)*N^r," )
697 print( "where e=1 if N is even and e=0 if N is odd." )
647 FT1 = torsion_table_even( data ) 698 FT1 = torsion_table_even( data )
648 else: 699 else:
700 print( "In this case (G is torsion-free) we have ed(M,N) = phi(M)*N^r," )
649 FT1 = FT 701 FT1 = FT
702 print( "where r is the rank of G." )
703 print( "" )
650 704
651 tt = [ ["","|"] + divs_M0 ] 705 tt = [ ["","|"] + divs_M0 ]
652 tt.append( "-" * (len(divs_M0)+2) ) 706 tt.append( "-" * (len(divs_M0)+2) )
653 for i in range(len(divs_N0)): 707 for i in range(len(divs_N0)):
654 tt.append( [ divs_N0[i] ] + ["|"] + FT1[i] ) 708 tt.append( [ divs_N0[i] ] + ["|"] + FT1[i] )
655 print table(tt) 709 print( table(tt) )
656 print "" 710 print( "" )
657 711
658 if torsion: 712 if torsion:
659 print "The following table shows the total failure of Kummer degrees", 713 print( "The following table shows the total failure of Kummer degrees in" )
660 print "if the quotient M/N is ODD and is read as the previous one." 714 print( "case the quotient M/N is ODD." )
661 print "" 715 print( "This table can be read exactly as the first one." )
716 print( "" )
662 717
663 # A good strategy is the following: 718 # A good strategy is the following:
664 # A little translation exercise: the failure at (M,N) in the torsion 719 # A little translation exercise: the failure at (M,N) in the torsion
665 # case is either the same as that for (2M,N) in the torsion-free 720 # case is either the same as that for (2M,N) in the torsion-free case
666 # case (if M is even) or its double (if M is odd). 721 # (if M is even) or its double (if M is odd).
667 # However, due to problems in reading the table for bigger M, it is 722 # However, due to problems in reading the table for bigger M, it is
668 # easier to just compute the degree every time, and then deduce the 723 # easier to just compute the degree every time, and then deduce the
669 # failure. This is not too inefficient, since we can use the data 724 # failure. This is not too inefficient, since we can use the data that
670 # that we have already computed via kummer_degree_from_total_table. 725 # we have already computed via kummer_degree_from_total_table.
671 new_FT = torsion_table_odd( data ) 726 new_FT = torsion_table_odd( data )
672 # Printing the new table 727 # Printing the new table
673 tt = [ ["","|"] + divs_M0 ] 728 tt = [ ["","|"] + divs_M0 ]
674 tt.append( "-" * (len(divs_M0)+2) ) 729 tt.append( "-" * (len(divs_M0)+2) )
675 for i in range(len(divs_N0)): 730 for i in range(len(divs_N0)):
676 tt.append( [ divs_N0[i] ] + ["|"] + new_FT[i] ) 731 tt.append( [ divs_N0[i] ] + ["|"] + new_FT[i] )
677 print table(tt) 732 print( table(tt) )
678 print "" 733 print( "" )
679 734
680def print_case_list( data ): 735def print_case_list( data ):
681 736
682 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data 737 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data
683 FT_odd = torsion_table_odd( data )
684 738
739 FT_odd = torsion_table_odd( data )
740 # FT1 is either FT or FT_even in the torsion case
741 FT1 = FT
685 if torsion: 742 if torsion:
686 FT1 = torsion_table_even( data ) 743 FT1 = torsion_table_even( data )
687 pf = sorted(list({ x for row in FT_odd for x in row })) 744 pf = []
688 else: 745 for row in FT1:
689 FT1 = FT 746 pf += row
690 pf = sorted(list({ x for row in FT1 for x in row })) 747 if torsion:
691 748 for row in FT_odd:
749 pf += row
750 pf = list(set(pf))
751 pf.sort()
692 for f in pf: 752 for f in pf:
693 print "Failure is", f, "if", 753 print( "Failure is", f, "if", end="" )
694 if torsion: 754 if torsion:
695 print "M/N is EVEN and", 755 print( "M/N is EVEN and", end="" )
696 print "(gcd(M,M0),gcd(N,N0)) is one of the following:" 756 print( "(gcd(M,M0),gcd(N,N0)) is one of the following:" )
697 print [ (divs_M0[j], divs_N0[i]) \ 757 lijst = []
698 for i in range(len(divs_N0)) for j in range(len(divs_M0)) \ 758 for i in range(len(divs_N0)):
699 if FT1[i][j] == f ] 759 for j in range(len(divs_M0)):
700 760 if FT1[i][j] == f:
761 lijst.append( ( divs_M0[j], divs_N0[i] ) )
762 print( lijst )
701 if torsion: 763 if torsion:
702 print "or if M/N is ODD and (gcd(M,M0)),gcd(N,N0)) is one of the", 764 print( "or if M/N is ODD and (gcd(M,M0)),gcd(N,N0)) is one of the", end="" )
703 print "following:" 765 print( "following:" )
704 print [ (divs_M0[j], divs_N0[i]) \
705 for i in range(len(divs_N0)) for j in range(len(divs_M0))\
706 if FT_odd[i][j] == f ]
707 766
708 print "" 767 lijst_odd = []
768 for i in range(len(divs_N0)):
769 for j in range(len(divs_M0)):
770 if FT_odd[i][j] == f:
771 lijst_odd.append( ( divs_M0[j], divs_N0[i] ) )
772 print( lijst_odd )
773
774 print( "" )
709 775
710# Extracts a specific value of failure from the total table. 776# Extracts a specific value of failure from the total table.
711def kummer_failure_from_total_table( M, N, data ): 777def kummer_failure_from_total_table( M, N, data ):
712 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data 778 ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data
713 779 FT1 = FT
714 if torsion: 780 if torsion:
715 if (M/N) % 2 == 0: 781 if (M/N) % 2 == 0:
716 FT1 = torsion_table_even( data ) 782 FT1 = torsion_table_even( data )
717 else: 783 else:
718 FT1 = torsion_table_odd( data ) 784 FT1 = torsion_table_odd( data )
719 else:
720 FT1 = FT
721 785
722 return FT1[divs_N0.index( gcd( N, N0 ) )][divs_M0.index( gcd( M, M0 ) )] 786 i = divs_N0.index( gcd( N, N0 ) )
787 j = divs_M0.index( gcd( M, M0 ) )
788 return FT1[i][j]
723 789
724# Computes the degree of the Kummer extension (M,N), by taking as input the 790# Computes the degree of the Kummer extension (M,N), by taking as input the
725# table computed by TotalKummerFailure. 791# table computed by TotalKummerFailure.
@@ -737,17 +803,20 @@ def kummer_degree_from_total_table( M, N, data ):
737# M must be a multiple of N. 803# M must be a multiple of N.
738def KummerDegree( G, M, N ): 804def KummerDegree( G, M, N ):
739 if M % N != 0: 805 if M % N != 0:
740 print "M is not a multiple of N" 806 print( "M is not a multiple of N" )
741 return -1 807 return -1
742 808
743 data = total_kummer_failure(G,False) 809 data = total_kummer_failure(G,False)
744 ((r,torsion),(M0,divs_M0),(N0,divs_N0),FT) = data 810 ((r,torsion),(M0,divs_M0),(N0,divs_N0),FT) = data
745 811
746 e_deg = euler_phi(M) * N^r 812 exp_deg = euler_phi(M) * N^r
747 813
748 if torsion and N % 2 == 0: 814 if torsion and N % 2 == 0:
749 e_deg *= 2 815 exp_deg *= 2
750 816
817 j = divs_M0.index(gcd(M,M0))
818 i = divs_N0.index(gcd(N,N0))
819
751 if torsion: 820 if torsion:
752 if (M/N)%2 == 0: 821 if (M/N)%2 == 0:
753 failure = torsion_table_even( data ) 822 failure = torsion_table_even( data )
@@ -756,5 +825,4 @@ def KummerDegree( G, M, N ):
756 else: 825 else:
757 failure = FT 826 failure = FT
758 827
759 return e_deg/failure[divs_N0.index(gcd(N,N0))][divs_M0.index(gcd(M,M0))] 828 return exp_deg / failure[i][j]
760
diff --git a/tex/README b/tex/README
new file mode 100644
index 0000000..0cfde24
--- /dev/null
+++ b/tex/README
@@ -0,0 +1,7 @@
1Here we collect some incomplete and work-in-progress documentation.
2
3In compute_degrees we prove that our way to compute the degrees gives the
4correct result.
5
6In af_code we break down the code for the "adelic failure" part of the script
7and we check that it computes the degrees as described in compute_degrees.
diff --git a/tex/af_code.aux b/tex/af_code.aux
new file mode 100644
index 0000000..1f8fc85
--- /dev/null
+++ b/tex/af_code.aux
@@ -0,0 +1,11 @@
1\relax
2\citation{PST1}
3\citation{PST1}
4\citation{DebryPerucca}
5\@writefile{loa}{\contentsline {algorithm}{\numberline {1}{\ignorespaces Compute the adelic failure}}{2}}
6\@writefile{loa}{\contentsline {algorithm}{\numberline {2}{\ignorespaces Adelic failure, case $G\leq \mathbb {Q}^\times $}}{4}}
7\@writefile{loa}{\contentsline {algorithm}{\numberline {3}{\ignorespaces Adelic failure, case $d\not =-1$, $n\leq d$}}{5}}
8\@writefile{loa}{\contentsline {algorithm}{\numberline {4}{\ignorespaces Adelic failure, case $d\not =-1$, $n\geq d+2$}}{6}}
9\@writefile{loa}{\contentsline {algorithm}{\numberline {5}{\ignorespaces Adelic failure, case $d\not =-1$, $n= d+1$}}{7}}
10\bibcite{DebryPerucca}{1}
11\bibcite{PST1}{2}
diff --git a/tex/af_code.log b/tex/af_code.log
new file mode 100644
index 0000000..126f78c
--- /dev/null
+++ b/tex/af_code.log
@@ -0,0 +1,764 @@
1This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2019.9.20) 20 SEP 2019 10:04
2entering extended mode
3 \write18 enabled.
4 %&-line parsing enabled.
5**af_code.tex
6(./af_code.tex
7LaTeX2e <2017-04-15>
8Babel <3.18> and hyphenation patterns for 18 language(s) loaded.
9(/usr/share/texlive/texmf-dist/tex/latex/base/report.cls
10Document Class: report 2014/09/29 v1.4h Standard LaTeX document class
11(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
12File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
13)
14\c@part=\count79
15\c@chapter=\count80
16\c@section=\count81
17\c@subsection=\count82
18\c@subsubsection=\count83
19\c@paragraph=\count84
20\c@subparagraph=\count85
21\c@figure=\count86
22\c@table=\count87
23\abovecaptionskip=\skip41
24\belowcaptionskip=\skip42
25\bibindent=\dimen102
26)
27(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
28Package: inputenc 2015/03/17 v1.2c Input encoding file
29\inpenc@prehook=\toks14
30\inpenc@posthook=\toks15
31
32(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def
33File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc
34Now handling font encoding OML ...
35... no UTF-8 mapping file for font encoding OML
36Now handling font encoding T1 ...
37... processing UTF-8 mapping file for font encoding T1
38
39(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu
40File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc
41 defining Unicode char U+00A0 (decimal 160)
42 defining Unicode char U+00A1 (decimal 161)
43 defining Unicode char U+00A3 (decimal 163)
44 defining Unicode char U+00AB (decimal 171)
45 defining Unicode char U+00AD (decimal 173)
46 defining Unicode char U+00BB (decimal 187)
47 defining Unicode char U+00BF (decimal 191)
48 defining Unicode char U+00C0 (decimal 192)
49 defining Unicode char U+00C1 (decimal 193)
50 defining Unicode char U+00C2 (decimal 194)
51 defining Unicode char U+00C3 (decimal 195)
52 defining Unicode char U+00C4 (decimal 196)
53 defining Unicode char U+00C5 (decimal 197)
54 defining Unicode char U+00C6 (decimal 198)
55 defining Unicode char U+00C7 (decimal 199)
56 defining Unicode char U+00C8 (decimal 200)
57 defining Unicode char U+00C9 (decimal 201)
58 defining Unicode char U+00CA (decimal 202)
59 defining Unicode char U+00CB (decimal 203)
60 defining Unicode char U+00CC (decimal 204)
61 defining Unicode char U+00CD (decimal 205)
62 defining Unicode char U+00CE (decimal 206)
63 defining Unicode char U+00CF (decimal 207)
64 defining Unicode char U+00D0 (decimal 208)
65 defining Unicode char U+00D1 (decimal 209)
66 defining Unicode char U+00D2 (decimal 210)
67 defining Unicode char U+00D3 (decimal 211)
68 defining Unicode char U+00D4 (decimal 212)
69 defining Unicode char U+00D5 (decimal 213)
70 defining Unicode char U+00D6 (decimal 214)
71 defining Unicode char U+00D8 (decimal 216)
72 defining Unicode char U+00D9 (decimal 217)
73 defining Unicode char U+00DA (decimal 218)
74 defining Unicode char U+00DB (decimal 219)
75 defining Unicode char U+00DC (decimal 220)
76 defining Unicode char U+00DD (decimal 221)
77 defining Unicode char U+00DE (decimal 222)
78 defining Unicode char U+00DF (decimal 223)
79 defining Unicode char U+00E0 (decimal 224)
80 defining Unicode char U+00E1 (decimal 225)
81 defining Unicode char U+00E2 (decimal 226)
82 defining Unicode char U+00E3 (decimal 227)
83 defining Unicode char U+00E4 (decimal 228)
84 defining Unicode char U+00E5 (decimal 229)
85 defining Unicode char U+00E6 (decimal 230)
86 defining Unicode char U+00E7 (decimal 231)
87 defining Unicode char U+00E8 (decimal 232)
88 defining Unicode char U+00E9 (decimal 233)
89 defining Unicode char U+00EA (decimal 234)
90 defining Unicode char U+00EB (decimal 235)
91 defining Unicode char U+00EC (decimal 236)
92 defining Unicode char U+00ED (decimal 237)
93 defining Unicode char U+00EE (decimal 238)
94 defining Unicode char U+00EF (decimal 239)
95 defining Unicode char U+00F0 (decimal 240)
96 defining Unicode char U+00F1 (decimal 241)
97 defining Unicode char U+00F2 (decimal 242)
98 defining Unicode char U+00F3 (decimal 243)
99 defining Unicode char U+00F4 (decimal 244)
100 defining Unicode char U+00F5 (decimal 245)
101 defining Unicode char U+00F6 (decimal 246)
102 defining Unicode char U+00F8 (decimal 248)
103 defining Unicode char U+00F9 (decimal 249)
104 defining Unicode char U+00FA (decimal 250)
105 defining Unicode char U+00FB (decimal 251)
106 defining Unicode char U+00FC (decimal 252)
107 defining Unicode char U+00FD (decimal 253)
108 defining Unicode char U+00FE (decimal 254)
109 defining Unicode char U+00FF (decimal 255)
110 defining Unicode char U+0100 (decimal 256)
111 defining Unicode char U+0101 (decimal 257)
112 defining Unicode char U+0102 (decimal 258)
113 defining Unicode char U+0103 (decimal 259)
114 defining Unicode char U+0104 (decimal 260)
115 defining Unicode char U+0105 (decimal 261)
116 defining Unicode char U+0106 (decimal 262)
117 defining Unicode char U+0107 (decimal 263)
118 defining Unicode char U+0108 (decimal 264)
119 defining Unicode char U+0109 (decimal 265)
120 defining Unicode char U+010A (decimal 266)
121 defining Unicode char U+010B (decimal 267)
122 defining Unicode char U+010C (decimal 268)
123 defining Unicode char U+010D (decimal 269)
124 defining Unicode char U+010E (decimal 270)
125 defining Unicode char U+010F (decimal 271)
126 defining Unicode char U+0110 (decimal 272)
127 defining Unicode char U+0111 (decimal 273)
128 defining Unicode char U+0112 (decimal 274)
129 defining Unicode char U+0113 (decimal 275)
130 defining Unicode char U+0114 (decimal 276)
131 defining Unicode char U+0115 (decimal 277)
132 defining Unicode char U+0116 (decimal 278)
133 defining Unicode char U+0117 (decimal 279)
134 defining Unicode char U+0118 (decimal 280)
135 defining Unicode char U+0119 (decimal 281)
136 defining Unicode char U+011A (decimal 282)
137 defining Unicode char U+011B (decimal 283)
138 defining Unicode char U+011C (decimal 284)
139 defining Unicode char U+011D (decimal 285)
140 defining Unicode char U+011E (decimal 286)
141 defining Unicode char U+011F (decimal 287)
142 defining Unicode char U+0120 (decimal 288)
143 defining Unicode char U+0121 (decimal 289)
144 defining Unicode char U+0122 (decimal 290)
145 defining Unicode char U+0123 (decimal 291)
146 defining Unicode char U+0124 (decimal 292)
147 defining Unicode char U+0125 (decimal 293)
148 defining Unicode char U+0128 (decimal 296)
149 defining Unicode char U+0129 (decimal 297)
150 defining Unicode char U+012A (decimal 298)
151 defining Unicode char U+012B (decimal 299)
152 defining Unicode char U+012C (decimal 300)
153 defining Unicode char U+012D (decimal 301)
154 defining Unicode char U+012E (decimal 302)
155 defining Unicode char U+012F (decimal 303)
156 defining Unicode char U+0130 (decimal 304)
157 defining Unicode char U+0131 (decimal 305)
158 defining Unicode char U+0132 (decimal 306)
159 defining Unicode char U+0133 (decimal 307)
160 defining Unicode char U+0134 (decimal 308)
161 defining Unicode char U+0135 (decimal 309)
162 defining Unicode char U+0136 (decimal 310)
163 defining Unicode char U+0137 (decimal 311)
164 defining Unicode char U+0139 (decimal 313)
165 defining Unicode char U+013A (decimal 314)
166 defining Unicode char U+013B (decimal 315)
167 defining Unicode char U+013C (decimal 316)
168 defining Unicode char U+013D (decimal 317)
169 defining Unicode char U+013E (decimal 318)
170 defining Unicode char U+0141 (decimal 321)
171 defining Unicode char U+0142 (decimal 322)
172 defining Unicode char U+0143 (decimal 323)
173 defining Unicode char U+0144 (decimal 324)
174 defining Unicode char U+0145 (decimal 325)
175 defining Unicode char U+0146 (decimal 326)
176 defining Unicode char U+0147 (decimal 327)
177 defining Unicode char U+0148 (decimal 328)
178 defining Unicode char U+014A (decimal 330)
179 defining Unicode char U+014B (decimal 331)
180 defining Unicode char U+014C (decimal 332)
181 defining Unicode char U+014D (decimal 333)
182 defining Unicode char U+014E (decimal 334)
183 defining Unicode char U+014F (decimal 335)
184 defining Unicode char U+0150 (decimal 336)
185 defining Unicode char U+0151 (decimal 337)
186 defining Unicode char U+0152 (decimal 338)
187 defining Unicode char U+0153 (decimal 339)
188 defining Unicode char U+0154 (decimal 340)
189 defining Unicode char U+0155 (decimal 341)
190 defining Unicode char U+0156 (decimal 342)
191 defining Unicode char U+0157 (decimal 343)
192 defining Unicode char U+0158 (decimal 344)
193 defining Unicode char U+0159 (decimal 345)
194 defining Unicode char U+015A (decimal 346)
195 defining Unicode char U+015B (decimal 347)
196 defining Unicode char U+015C (decimal 348)
197 defining Unicode char U+015D (decimal 349)
198 defining Unicode char U+015E (decimal 350)
199 defining Unicode char U+015F (decimal 351)
200 defining Unicode char U+0160 (decimal 352)
201 defining Unicode char U+0161 (decimal 353)
202 defining Unicode char U+0162 (decimal 354)
203 defining Unicode char U+0163 (decimal 355)
204 defining Unicode char U+0164 (decimal 356)
205 defining Unicode char U+0165 (decimal 357)
206 defining Unicode char U+0168 (decimal 360)
207 defining Unicode char U+0169 (decimal 361)
208 defining Unicode char U+016A (decimal 362)
209 defining Unicode char U+016B (decimal 363)
210 defining Unicode char U+016C (decimal 364)
211 defining Unicode char U+016D (decimal 365)
212 defining Unicode char U+016E (decimal 366)
213 defining Unicode char U+016F (decimal 367)
214 defining Unicode char U+0170 (decimal 368)
215 defining Unicode char U+0171 (decimal 369)
216 defining Unicode char U+0172 (decimal 370)
217 defining Unicode char U+0173 (decimal 371)
218 defining Unicode char U+0174 (decimal 372)
219 defining Unicode char U+0175 (decimal 373)
220 defining Unicode char U+0176 (decimal 374)
221 defining Unicode char U+0177 (decimal 375)
222 defining Unicode char U+0178 (decimal 376)
223 defining Unicode char U+0179 (decimal 377)
224 defining Unicode char U+017A (decimal 378)
225 defining Unicode char U+017B (decimal 379)
226 defining Unicode char U+017C (decimal 380)
227 defining Unicode char U+017D (decimal 381)
228 defining Unicode char U+017E (decimal 382)
229 defining Unicode char U+01CD (decimal 461)
230 defining Unicode char U+01CE (decimal 462)
231 defining Unicode char U+01CF (decimal 463)
232 defining Unicode char U+01D0 (decimal 464)
233 defining Unicode char U+01D1 (decimal 465)
234 defining Unicode char U+01D2 (decimal 466)
235 defining Unicode char U+01D3 (decimal 467)
236 defining Unicode char U+01D4 (decimal 468)
237 defining Unicode char U+01E2 (decimal 482)
238 defining Unicode char U+01E3 (decimal 483)
239 defining Unicode char U+01E6 (decimal 486)
240 defining Unicode char U+01E7 (decimal 487)
241 defining Unicode char U+01E8 (decimal 488)
242 defining Unicode char U+01E9 (decimal 489)
243 defining Unicode char U+01EA (decimal 490)
244 defining Unicode char U+01EB (decimal 491)
245 defining Unicode char U+01F0 (decimal 496)
246 defining Unicode char U+01F4 (decimal 500)
247 defining Unicode char U+01F5 (decimal 501)
248 defining Unicode char U+0218 (decimal 536)
249 defining Unicode char U+0219 (decimal 537)
250 defining Unicode char U+021A (decimal 538)
251 defining Unicode char U+021B (decimal 539)
252 defining Unicode char U+0232 (decimal 562)
253 defining Unicode char U+0233 (decimal 563)
254 defining Unicode char U+1E02 (decimal 7682)
255 defining Unicode char U+1E03 (decimal 7683)
256 defining Unicode char U+200C (decimal 8204)
257 defining Unicode char U+2010 (decimal 8208)
258 defining Unicode char U+2011 (decimal 8209)
259 defining Unicode char U+2012 (decimal 8210)
260 defining Unicode char U+2013 (decimal 8211)
261 defining Unicode char U+2014 (decimal 8212)
262 defining Unicode char U+2015 (decimal 8213)
263 defining Unicode char U+2018 (decimal 8216)
264 defining Unicode char U+2019 (decimal 8217)
265 defining Unicode char U+201A (decimal 8218)
266 defining Unicode char U+201C (decimal 8220)
267 defining Unicode char U+201D (decimal 8221)
268 defining Unicode char U+201E (decimal 8222)
269 defining Unicode char U+2030 (decimal 8240)
270 defining Unicode char U+2031 (decimal 8241)
271 defining Unicode char U+2039 (decimal 8249)
272 defining Unicode char U+203A (decimal 8250)
273 defining Unicode char U+2423 (decimal 9251)
274 defining Unicode char U+1E20 (decimal 7712)
275 defining Unicode char U+1E21 (decimal 7713)
276)
277Now handling font encoding OT1 ...
278... processing UTF-8 mapping file for font encoding OT1
279
280(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu
281File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc
282 defining Unicode char U+00A0 (decimal 160)
283 defining Unicode char U+00A1 (decimal 161)
284 defining Unicode char U+00A3 (decimal 163)
285 defining Unicode char U+00AD (decimal 173)
286 defining Unicode char U+00B8 (decimal 184)
287 defining Unicode char U+00BF (decimal 191)
288 defining Unicode char U+00C5 (decimal 197)
289 defining Unicode char U+00C6 (decimal 198)
290 defining Unicode char U+00D8 (decimal 216)
291 defining Unicode char U+00DF (decimal 223)
292 defining Unicode char U+00E6 (decimal 230)
293 defining Unicode char U+00EC (decimal 236)
294 defining Unicode char U+00ED (decimal 237)
295 defining Unicode char U+00EE (decimal 238)
296 defining Unicode char U+00EF (decimal 239)
297 defining Unicode char U+00F8 (decimal 248)
298 defining Unicode char U+0131 (decimal 305)
299 defining Unicode char U+0141 (decimal 321)
300 defining Unicode char U+0142 (decimal 322)
301 defining Unicode char U+0152 (decimal 338)
302 defining Unicode char U+0153 (decimal 339)
303 defining Unicode char U+0174 (decimal 372)
304 defining Unicode char U+0175 (decimal 373)
305 defining Unicode char U+0176 (decimal 374)
306 defining Unicode char U+0177 (decimal 375)
307 defining Unicode char U+0218 (decimal 536)
308 defining Unicode char U+0219 (decimal 537)
309 defining Unicode char U+021A (decimal 538)
310 defining Unicode char U+021B (decimal 539)
311 defining Unicode char U+2013 (decimal 8211)
312 defining Unicode char U+2014 (decimal 8212)
313 defining Unicode char U+2018 (decimal 8216)
314 defining Unicode char U+2019 (decimal 8217)
315 defining Unicode char U+201C (decimal 8220)
316 defining Unicode char U+201D (decimal 8221)
317)
318Now handling font encoding OMS ...
319... processing UTF-8 mapping file for font encoding OMS
320
321(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu
322File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc
323 defining Unicode char U+00A7 (decimal 167)
324 defining Unicode char U+00B6 (decimal 182)
325 defining Unicode char U+00B7 (decimal 183)
326 defining Unicode char U+2020 (decimal 8224)
327 defining Unicode char U+2021 (decimal 8225)
328 defining Unicode char U+2022 (decimal 8226)
329)
330Now handling font encoding OMX ...
331... no UTF-8 mapping file for font encoding OMX
332Now handling font encoding U ...
333... no UTF-8 mapping file for font encoding U
334 defining Unicode char U+00A9 (decimal 169)
335 defining Unicode char U+00AA (decimal 170)
336 defining Unicode char U+00AE (decimal 174)
337 defining Unicode char U+00BA (decimal 186)
338 defining Unicode char U+02C6 (decimal 710)
339 defining Unicode char U+02DC (decimal 732)
340 defining Unicode char U+200C (decimal 8204)
341 defining Unicode char U+2026 (decimal 8230)
342 defining Unicode char U+2122 (decimal 8482)
343 defining Unicode char U+2423 (decimal 9251)
344))
345(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
346Package: amsmath 2017/09/02 v2.17a AMS math features
347\@mathmargin=\skip43
348
349For additional information on amsmath, use the `?' option.
350(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
351Package: amstext 2000/06/29 v2.01 AMS text
352
353(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
354File: amsgen.sty 1999/11/30 v2.0 generic functions
355\@emptytoks=\toks16
356\ex@=\dimen103
357))
358(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
359Package: amsbsy 1999/11/29 v1.2d Bold Symbols
360\pmbraise@=\dimen104
361)
362(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
363Package: amsopn 2016/03/08 v2.02 operator names
364)
365\inf@bad=\count88
366LaTeX Info: Redefining \frac on input line 213.
367\uproot@=\count89
368\leftroot@=\count90
369LaTeX Info: Redefining \overline on input line 375.
370\classnum@=\count91
371\DOTSCASE@=\count92
372LaTeX Info: Redefining \ldots on input line 472.
373LaTeX Info: Redefining \dots on input line 475.
374LaTeX Info: Redefining \cdots on input line 596.
375\Mathstrutbox@=\box26
376\strutbox@=\box27
377\big@size=\dimen105
378LaTeX Font Info: Redeclaring font encoding OML on input line 712.
379LaTeX Font Info: Redeclaring font encoding OMS on input line 713.
380\macc@depth=\count93
381\c@MaxMatrixCols=\count94
382\dotsspace@=\muskip10
383\c@parentequation=\count95
384\dspbrk@lvl=\count96
385\tag@help=\toks17
386\row@=\count97
387\column@=\count98
388\maxfields@=\count99
389\andhelp@=\toks18
390\eqnshift@=\dimen106
391\alignsep@=\dimen107
392\tagshift@=\dimen108
393\tagwidth@=\dimen109
394\totwidth@=\dimen110
395\lineht@=\dimen111
396\@envbody=\toks19
397\multlinegap=\skip44
398\multlinetaggap=\skip45
399\mathdisplay@stack=\toks20
400LaTeX Info: Redefining \[ on input line 2817.
401LaTeX Info: Redefining \] on input line 2818.
402)
403(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty
404Package: amsthm 2017/10/31 v2.20.4
405\thm@style=\toks21
406\thm@bodyfont=\toks22
407\thm@headfont=\toks23
408\thm@notefont=\toks24
409\thm@headpunct=\toks25
410\thm@preskip=\skip46
411\thm@postskip=\skip47
412\thm@headsep=\skip48
413\dth@everypar=\toks26
414)
415(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty
416(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex Bootstrap'ing:
417catcodes, docmode, (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex
418) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex)
419
420 Xy-pic version 3.8.9 <2013/10/06>
421 Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others
422 Xy-pic is free software: see the User's Guide for details.
423
424Loading kernel: messages; fonts; allocations: state,
425\X@c=\dimen112
426\Y@c=\dimen113
427\U@c=\dimen114
428\D@c=\dimen115
429\L@c=\dimen116
430\R@c=\dimen117
431\Edge@c=\toks27
432\X@p=\dimen118
433\Y@p=\dimen119
434\U@p=\dimen120
435\D@p=\dimen121
436\L@p=\dimen122
437\R@p=\dimen123
438\Edge@p=\toks28
439\X@origin=\dimen124
440\Y@origin=\dimen125
441\X@xbase=\dimen126
442\Y@xbase=\dimen127
443\X@ybase=\dimen128
444\Y@ybase=\dimen129
445\X@min=\dimen130
446\Y@min=\dimen131
447\X@max=\dimen132
448\Y@max=\dimen133
449\lastobjectbox@=\box28
450\zerodotbox@=\box29
451\almostz@=\dimen134
452 direction,
453\d@X=\dimen135
454\d@Y=\dimen136
455\K@=\count100
456\KK@=\count101
457\Direction=\count102
458\K@dXdY=\dimen137
459\K@dYdX=\dimen138
460\xyread@=\read1
461\xywrite@=\write3
462\csp@=\count103
463\quotPTK@=\dimen139
464
465utility macros; pictures: \xy, positions,
466\swaptoks@@=\toks29
467\connectobjectbox@@=\box30
468 objects,
469\styletoks@=\toks30
470 decorations;
471kernel objects: directionals, circles, text; options; algorithms: directions,
472edges, connections; Xy-pic loaded)
473(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
474Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch
475)
476Package: xy 2013/10/06 Xy-pic version 3.8.9
477
478(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex
479 Xy-pic option: All features v.3.8
480(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex
481 Xy-pic option: Curve and Spline extension v.3.12 curve,
482\crv@cnt@=\count104
483\crvpts@=\toks31
484\splinebox@=\box31
485\splineval@=\dimen140
486\splinedepth@=\dimen141
487\splinetol@=\dimen142
488\splinelength@=\dimen143
489 circles,
490\L@=\dimen144
491 loaded)
492(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex
493 Xy-pic option: Frame and Bracket extension v.3.14 loaded)
494(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex
495 Xy-pic option: Computer Modern tip extension v.3.7
496(/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex
497 Xy-pic option: More Tips extension v.3.11 loaded) loaded)
498(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex
499 Xy-pic option: Line styles extension v.3.10
500\xylinethick@=\dimen145
501 loaded)
502(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex
503 Xy-pic option: Rotate and Scale extension v.3.8 loaded)
504(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex
505 Xy-pic option: Colour extension v.3.11 loaded)
506(/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex
507 Xy-pic option: Matrix feature v.3.14
508\Row=\count105
509\Col=\count106
510\queue@=\toks32
511\queue@@=\toks33
512\qcount@=\count107
513\qcount@@=\count108
514\matrixsize@=\count109
515 loaded)
516(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex
517 Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded)
518(/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex
519 Xy-pic option: Graph feature v.3.11 loaded) loaded)
520(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex
521 Xy-pic option: PDF driver v.1.7 Xy-pic pdf driver: `color' extension support
522(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex loaded)
523Xy-pic pdf driver: `curve' extension support
524(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex loaded)
525Xy-pic pdf driver: `frame' extension support
526(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex loaded)
527Xy-pic pdf driver: `line' extension support
528(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex loaded)
529Xy-pic pdf driver: `rotate' extension support
530(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex loaded) loaded))
531(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
532Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
533\symAMSa=\mathgroup4
534\symAMSb=\mathgroup5
535LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
536(Font) U/euf/m/n --> U/euf/b/n on input line 106.
537)
538(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty
539Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC)
540
541(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
542File: color.cfg 2016/01/02 v1.6 sample color configuration
543)
544Package color Info: Driver file: pdftex.def on input line 147.
545
546(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
547File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
548))
549(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
550Package: amssymb 2013/01/14 v3.01 AMS font symbols
551)
552(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty
553Package: float 2001/11/08 v1.3d Float enhancements (AL)
554\c@float@type=\count110
555\float@exts=\toks34
556\float@box=\box32
557\@float@everytoks=\toks35
558\@floatcapt=\box33
559)
560(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
561Package: geometry 2010/09/12 v5.6 Page Geometry
562
563(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
564Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
565\KV@toks@=\toks36
566)
567(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
568Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
569Package ifvtex Info: VTeX not detected.
570)
571(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
572Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
573)
574\Gm@cnth=\count111
575\Gm@cntv=\count112
576\c@Gm@tempcnt=\count113
577\Gm@bindingoffset=\dimen146
578\Gm@wd@mp=\dimen147
579\Gm@odd@mp=\dimen148
580\Gm@even@mp=\dimen149
581\Gm@layoutwidth=\dimen150
582\Gm@layoutheight=\dimen151
583\Gm@layouthoffset=\dimen152
584\Gm@layoutvoffset=\dimen153
585\Gm@dimlist=\toks37
586)
587(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty
588\lst@mode=\count114
589\lst@gtempboxa=\box34
590\lst@token=\toks38
591\lst@length=\count115
592\lst@currlwidth=\dimen154
593\lst@column=\count116
594\lst@pos=\count117
595\lst@lostspace=\dimen155
596\lst@width=\dimen156
597\lst@newlines=\count118
598\lst@lineno=\count119
599\lst@maxwidth=\dimen157
600
601(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty
602File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz)
603\c@lstnumber=\count120
604\lst@skipnumbers=\count121
605\lst@framebox=\box35
606)
607(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg
608File: listings.cfg 2015/06/04 1.6 listings configuration
609))
610Package: listings 2015/06/04 1.6 (Carsten Heinz)
611
612(/usr/share/texlive/texmf-dist/tex/latex/algorithms/algorithm.sty
613Package: algorithm 2009/08/24 v0.1 Document Style `algorithm' - floating enviro
614nment
615
616(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty
617Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
618)
619\@float@every@algorithm=\toks39
620\c@algorithm=\count122
621)
622(/usr/share/texlive/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty
623Package: algpseudocode
624
625(/usr/share/texlive/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty
626Package: algorithmicx 2005/04/27 v1.2 Algorithmicx
627
628Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style
629\c@ALG@line=\count123
630\c@ALG@rem=\count124
631\c@ALG@nested=\count125
632\ALG@tlm=\skip49
633\ALG@thistlm=\skip50
634\c@ALG@Lnr=\count126
635\c@ALG@blocknr=\count127
636\c@ALG@storecount=\count128
637\c@ALG@tmpcounter=\count129
638\ALG@tmplength=\skip51
639)
640Document Style - pseudocode environments for use with the `algorithmicx' style
641)
642\c@lemma=\count130
643 (./af_code.aux)
644\openout1 = `af_code.aux'.
645
646LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 105.
647LaTeX Font Info: ... okay on input line 105.
648LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 105.
649LaTeX Font Info: ... okay on input line 105.
650LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 105.
651LaTeX Font Info: ... okay on input line 105.
652LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 105.
653LaTeX Font Info: ... okay on input line 105.
654LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 105.
655LaTeX Font Info: ... okay on input line 105.
656LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 105.
657LaTeX Font Info: ... okay on input line 105.
658LaTeX Font Info: Try loading font information for U+msa on input line 105.
659 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
660File: umsa.fd 2013/01/14 v3.01 AMS symbols A
661)
662LaTeX Font Info: Try loading font information for U+msb on input line 105.
663
664(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
665File: umsb.fd 2013/01/14 v3.01 AMS symbols B
666)
667Package xypdf Info: Line width: 0.39998pt on input line 105.
668
669(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
670[Loading MPS to PDF converter (version 2006.09.02).]
671\scratchcounter=\count131
672\scratchdimen=\dimen158
673\scratchbox=\box36
674\nofMPsegments=\count132
675\nofMParguments=\count133
676\everyMPshowfont=\toks40
677\MPscratchCnt=\count134
678\MPscratchDim=\dimen159
679\MPnumerator=\count135
680\makeMPintoPDFobject=\count136
681\everyMPtoPDFconversion=\toks41
682)
683*geometry* driver: auto-detecting
684*geometry* detected driver: pdftex
685*geometry* verbose mode - [ preamble ] result:
686* driver: pdftex
687* paper: a4paper
688* layout: <same size as paper>
689* layoutoffset:(h,v)=(0.0pt,0.0pt)
690* modes:
691* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt)
692* v-part:(T,H,B)=(85.35826pt, 674.33032pt, 85.35826pt)
693* \paperwidth=597.50787pt
694* \paperheight=845.04684pt
695* \textwidth=455.24411pt
696* \textheight=674.33032pt
697* \oddsidemargin=-1.1381pt
698* \evensidemargin=-1.1381pt
699* \topmargin=-23.91173pt
700* \headheight=12.0pt
701* \headsep=25.0pt
702* \topskip=10.0pt
703* \footskip=30.0pt
704* \marginparwidth=57.0pt
705* \marginparsep=11.0pt
706* \columnsep=10.0pt
707* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
708* \hoffset=0.0pt
709* \voffset=0.0pt
710* \mag=1000
711* \@twocolumnfalse
712* \@twosidefalse
713* \@mparswitchfalse
714* \@reversemarginfalse
715* (1in=72.27pt=25.4mm, 1cm=28.453pt)
716
717\c@lstlisting=\count137
718LaTeX Font Info: Try loading font information for OMS+cmr on input line 117.
719
720(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd
721File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions
722)
723LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available
724(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 117.
725 [1
726
727
728{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] [3] [4] [5] [6] [7] [8
729
730] (./af_code.aux) )
731Here is how much of TeX's memory you used:
732 7341 strings out of 494283
733 92388 string characters out of 6169691
734 205701 words of memory out of 5000000
735 10561 multiletter control sequences out of 15000+600000
736 14410 words of font info for 60 fonts, out of 8000000 for 9000
737 497 hyphenation exceptions out of 8191
738 27i,13n,32p,3239b,350s stack positions out of 5000i,500n,10000p,200000b,80000s
739</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
740m/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx
74112.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pf
742b></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></us
743r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/shar
744e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share/texl
745ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></usr/share/texlive/tex
746mf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist
747/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/
748type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/type1/p
749ublic/amsfonts/cm/cmr5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/am
750sfonts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
751m/cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10
752.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb></
753usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/sha
754re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/share/texl
755ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/share/texlive/te
756xmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/share/texlive/texmf-di
757st/fonts/type1/public/amsfonts/symbols/msbm10.pfb>
758Output written on af_code.pdf (8 pages, 212906 bytes).
759PDF statistics:
760 111 PDF objects out of 1000 (max. 8388607)
761 80 compressed objects within 1 object stream
762 0 named destinations out of 1000 (max. 500000)
763 1 words of extra memory for PDF output out of 10000 (max. 10000000)
764
diff --git a/tex/af_code.pdf b/tex/af_code.pdf
new file mode 100644
index 0000000..9fccfd5
--- /dev/null
+++ b/tex/af_code.pdf
Binary files differ
diff --git a/tex/af_code.synctex.gz b/tex/af_code.synctex.gz
new file mode 100644
index 0000000..bbca130
--- /dev/null
+++ b/tex/af_code.synctex.gz
Binary files differ
diff --git a/tex/af_code.tex b/tex/af_code.tex
new file mode 100644
index 0000000..96bd1e6
--- /dev/null
+++ b/tex/af_code.tex
@@ -0,0 +1,474 @@
1\documentclass[10pt,a4paper]{report}
2\usepackage[utf8]{inputenc}
3\usepackage{amsmath}
4\usepackage{amsthm}
5\usepackage[all]{xy}
6\usepackage{amsfonts}
7\usepackage{color}
8\usepackage{amssymb}
9\usepackage{float}
10\usepackage[a4paper, top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry}
11\usepackage{listings}
12\usepackage{algorithm}
13%\usepackage{algorithmic}
14\usepackage{algpseudocode}
15
16\DeclareMathOperator{\alg}{alg}
17\DeclareMathOperator{\obj}{Obj}
18\DeclareMathOperator{\Hom}{Hom}
19\DeclareMathOperator{\End}{End}
20\DeclareMathOperator{\hol}{Hol}
21\DeclareMathOperator{\aut}{Aut}
22\DeclareMathOperator{\gal}{Gal}
23\DeclareMathOperator{\id}{id}
24\DeclareMathOperator{\res}{res}
25\DeclareMathOperator{\im}{Im}
26\DeclareMathOperator{\Id}{Id}
27\DeclareMathOperator{\fib}{Fib}
28\DeclareMathOperator{\spec}{Spec}
29\DeclareMathOperator{\proj}{Proj}
30\DeclareMathOperator{\trdeg}{trdeg}
31\DeclareMathOperator{\car}{char}
32\DeclareMathOperator{\Frac}{Frac}
33\DeclareMathOperator{\reduced}{red}
34\DeclareMathOperator{\real}{Re}
35\DeclareMathOperator{\imag}{Im}
36\DeclareMathOperator{\vol}{vol}
37\DeclareMathOperator{\den}{den}
38\DeclareMathOperator{\rank}{rank}
39\DeclareMathOperator{\lcm}{lcm}
40\DeclareMathOperator{\rad}{rad}
41\DeclareMathOperator{\ord}{ord}
42\DeclareMathOperator{\Br}{Br}
43\DeclareMathOperator{\inv}{inv}
44\DeclareMathOperator{\Nm}{Nm}
45\DeclareMathOperator{\Tr}{Tr}
46\DeclareMathOperator{\an}{an}
47\DeclareMathOperator{\op}{op}
48\DeclareMathOperator{\sep}{sep}
49\DeclareMathOperator{\unr}{unr}
50\DeclareMathOperator{\et}{\acute et}
51\DeclareMathOperator{\ev}{ev}
52\DeclareMathOperator{\gl}{GL}
53\DeclareMathOperator{\SL}{SL}
54\DeclareMathOperator{\mat}{Mat}
55\DeclareMathOperator{\ab}{ab}
56\DeclareMathOperator{\tors}{tors}
57\DeclareMathOperator{\ed}{ed}
58
59\newcommand{\grp}{\textsc{Grp}}
60\newcommand{\set}{\textsc{Set}}
61\newcommand{\x}{\mathbf{x}}
62\newcommand{\naturalto}{\overset{.}{\to}}
63\newcommand{\qbar}{\overline{\mathbb{Q}}}
64\newcommand{\zbar}{\overline{\mathbb{Z}}}
65
66\newcommand{\pro}{\mathbb{P}}
67\newcommand{\aff}{\mathbb{A}}
68\newcommand{\quat}{\mathbb{H}}
69\newcommand{\rea}{\mathbb{R}}
70\newcommand{\kiu}{\mathbb{Q}}
71\newcommand{\F}{\mathbb{F}}
72\newcommand{\zee}{\mathbb{Z}}
73\newcommand{\ow}{\mathcal{O}}
74\newcommand{\mcx}{\mathcal{X}}
75\newcommand{\mcy}{\mathcal{Y}}
76\newcommand{\mcs}{\mathcal{S}}
77\newcommand{\mca}{\mathcal{A}}
78\newcommand{\mcb}{\mathcal{B}}
79\newcommand{\mcf}{\mathcal{F}}
80\newcommand{\mcg}{\mathcal{G}}
81\newcommand{\mct}{\mathcal{T}}
82\newcommand{\mcq}{\mathcal{Q}}
83\newcommand{\mcr}{\mathcal{R}}
84\newcommand{\adl}{\mathbf{A}}
85\newcommand{\mbk}{\mathbf{k}}
86\newcommand{\m}{\mathfrak{m}}
87\newcommand{\p}{\mathfrak{p}}
88
89\newcommand{\kbar}{\overline{K}}
90
91\newtheorem{lemma}{Lemma}
92\newtheorem{proposition}[lemma]{Proposition}
93\newtheorem{conjecture}[lemma]{Conjecture}
94\newtheorem{corollary}[lemma]{Corollary}
95\newtheorem{definition}[lemma]{Definition}
96\newtheorem{theorem}[lemma]{Theorem}
97\newtheorem{cond-thm}[lemma]{Conditional Theorem}
98\theoremstyle{definition}
99\newtheorem{remark}[lemma]{Remark}
100
101%\author{Sebastiano Tronto}
102\title{Computation of the adelic failure}
103
104
105\begin{document}
106
107\chapter*{Computation of the adelic failure}
108
109The aim of this document is bridge the gap between the theory developed in \cite{PST1} and the function \texttt{adelic\_failure\_gb} that computes the adelic failure. By reading \cite{PST1}, the pseudo-code in this file and the (commented) SageMath code, one can verify that the script produces the correct results.
110
111We begin by giving the code for the function that computes the adelic failure, both in SageMath and in pseudocode. Then we procede to breaking it down into different subcases.
112
113\section*{The SageMath code}
114
115The function \texttt{adelic\_failure\_gb} takes two parameters as input: a list $B=\{B_0,\dots, B_t\}$ and an integer $d$. Each $B_i$ is itself a list of elements of $G$, and we require the following:
116\begin{itemize}
117\item Each element of $B_i=\{B_{i,0},\dots,B_{i,t_i}\}$ has $2$-divisibility $i$, using the terminology of \cite{DebryPerucca}.
118\item $\mathcal{B}=\bigcup_{i=1}^t B_i$ is a $2$-maximal basis for $G$.
119\item The integer $d$ is either $-1$ or $1\leq d\leq t$. For $i\in\{1,\dots,t\}\setminus\{d\}$ we have $B_i\subseteq \mathbb{Q}_+$. If $d\neq -1$ we have $B_{d,0}<0$ and $B_{d,j}>0$ for $j\neq 0$.
120\end{itemize}
121The output is a list $A=\{A_n\mid n\text{ divides }N_0\}$, indexed by the positive divisors of $N_0$, where $N_0=\max(3,t+1)$ if $d=t$, while $N_0=\max(3,t)$ otherwise. Each $A_n=\{A_{n,0},\dots,A_{n,r_n}\}$ is a list of pairs $A_{n,i}=(d_{n,i},f_{n,i})$. For each $n\mid N_0$ and each $i\leq r_n$, the integer $d_{n,i}$ is a divisor of $M_0=d_{N_0,r_{N_0}}$ and a multiple of $2^i$, and $f_{n,i}$ is the \emph{adelic failure}, that is the degree
122\begin{align*}
123f_{n,i}=\left[\mathbb{Q}_{2^i}\left(G^{1/2^i}\right)\cap \mathbb{Q}_{d_{n,i}}:\mathbb{Q}_{2^i}\right].
124\end{align*}
125
126%\lstset{language=Python}
127%\begin{lstlisting}
128%def adelic_failure_gb( B, d ):
129%
130% ad_fail = [] # The table to be returned at the end.
131%
132% if d == len(B)-1:
133% N = max(3,len(B)+1)
134% else:
135% N = max(3,len(B))
136%
137% # The shortlist grows at each step, so we build it incrementally.
138% shortlist = []
139% # The "special element" is (n,b) = \zeta_{2^n}\sqrt{b}.
140% special_element = (1,1)
141%
142% M = 1 # M also grows with n.
143%
144% for n in range( 1, N+1 ): # Read as: 1 \leq n \leq N
145%
146% # We add the new elements to the shortlist, modifying M if needed.
147% # This is not done in case we are in the extra "fake" level.
148% if n-1 < len(B):
149% for g in B[n-1]:
150% if g < 0 and n > 1:
151% special_element = ( n+1, abs(g)^(1/(2^(n-1))) )
152% M = lcm( M, special_embed( special_element ) )
153% else:
154% b = g^(1/(2^(n-1))) # b is 2-indivisible
155% shortlist.append( b )
156% M = lcm( M, cyc_embed(b) )
157%
158% # We add a root of an even power of the negative generator, as soon as
159% # we are beyond its level.
160% if d != -1 and n == d+2:
161% b = abs(B[d][0])^(1/2^d)
162% shortlist.append( b )
163% M = lcm( M, cyc_embed(b) )
164%
165% M = lcm(M,2^n)
166%
167% if n <= d:
168% M = lcm( M, 2^(n+1) )
169%
170% if n == 1 and d >= 1:
171% shortlist.append(-1)
172% if n > 1 and -1 in shortlist:
173% shortlist.remove(-1)
174%
175% aux = [] # Next line of ad_fail table
176%
177% for dM in divisors( M ):
178% if dM % (2^n) != 0:
179% continue
180%
181% S = [ product(s) for s in subsets( shortlist ) ]
182% H = [ cyc_embed( s ) for s in S ]
183% r = len( [ b for b in H if dM % b == 0 ] )
184%
185% if n <= d and dM % (2^(n+1)) == 0 and n > 1:
186% r *= 2
187%
188% if 8 in H and dM % 8 == 0 and (n >= 3 or (n == 2 and n <= d)):
189% r = r/2
190%
191% if special_element != (1,1) and special_element[0] == n+1:
192% nothing_to_do = False
193% intersecting_QdM = False
194% for s in S:
195% new_special = ( n+1, special_element[1] * s )
196% m = special_embed( new_special )
197% if n == 2 and m == 4: # \zeta_8 times 2 times square
198% nothing_to_do = True
199% if dM % m == 0:
200% intersecting_QdM = True
201% if intersecting_QdM and not nothing_to_do:
202% r *= 2
203%
204% aux.append( (dM,r) )
205%
206% ad_fail.append(aux)
207%
208% return ad_fail
209%\end{lstlisting}
210%
211%We have used the following auxiliary functions:
212%
213%\begin{lstlisting}
214%# Computes the minimal cyclotomic field containing \sqrt(b)
215%def cyc_embed( b ):
216% m = squarefree_part(b)
217% if m%4 != 1:
218% m *= 4
219% return abs(m)
220%
221%# Computes the minimal cyclotomic field containing \zeta_{2^n}\sqrt(b)
222%def special_embed( (n,b) ):
223% m = squarefree_part(b)
224% if n == 3 and m % 2 == 0:
225% return 4 * cyc_embed(m/2)
226% else:
227% return lcm( 2^n, cyc_embed(b) )
228%\end{lstlisting}
229\pagebreak
230
231\section*{The pseudo-code}
232We translate the SageMath code into pseudocode for ease of readability.
233
234\begin{algorithm}
235\caption{Compute the adelic failure}
236\begin{algorithmic}
237\State Let $B$, $t$, $d$ and $N$ as described in the previous section
238\State Let $M\leftarrow1$, $\texttt{special\_element}\leftarrow1$ and $\texttt{shortlist}\leftarrow[\,]$
239
240\State
241
242\For {$n=1$ to $N$}
243\If{$n-1<t$}
244\For{$g\in B_{n-1}$}
245\If{$g<0$ and $n>1$}
246\State $\texttt{special\_element}\leftarrow(n+1,\sqrt[2^{n-1}]{|g|})$
247\State $M\leftarrow\lcm(M,\texttt{special\_embed}(\texttt{special\_element}))$
248\Else
249\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist}
250\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$
251\EndIf
252\EndFor
253\EndIf
254
255\State
256
257\If{$n=d+2$ and $d\neq -1$}
258\State Add $\sqrt[2^{d}]{|B_{d,0}|}$ to \texttt{shortlist}
259\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(|B_{d,0}|))$
260\EndIf
261
262\State
263\If{$n\leq d$}
264\State $M\leftarrow\lcm(M,2^{n+1})$
265\Else
266\State $M\leftarrow\lcm(M,2^n)$
267\EndIf
268\State
269
270\If{$n=1$ and $d\geq 1$}
271\State Add $-1$ to \texttt{shortlist}
272\EndIf
273\State
274\If{$n>1$}
275\State Remove $-1$ from \texttt{shortlist} (if present)
276\EndIf
277\State
278\algstore{alg1}
279\end{algorithmic}
280\end{algorithm}
281\pagebreak
282
283\begin{algorithm}
284\begin{algorithmic}
285\algrestore{alg1}
286\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$}
287\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$
288\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$
289\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$
290\State
291\If{$q<n\leq d$ and $2^{n+1}\,|\,{d_M}$}
292\State $r\leftarrow 2r$
293\EndIf
294\State
295\If{$8\in H$ and $8\,|\,d_M$ and (either $n\geq 3$ or $n=2\leq d$)}
296\State $r\leftarrow r/2$
297\EndIf
298\State
299
300\If{$\texttt{special\_element}=\zeta_{2^{n+1}}\sqrt{b}$ for some $b\in\mathbb{Q}$}
301\State $\texttt{specials}\leftarrow\{\zeta_{2^{n+1}}\sqrt{bs}\,|\,s\in S\}$
302\If{$\exists x\in \texttt{specials}$ such that $x\in\mathbb{Q}_{d_M}$ and $\texttt{special\_embed}(s)\neq 4\,\forall s\in\texttt{specials}$}
303\State $r\leftarrow 2r$
304\EndIf
305\EndIf
306\State
307\State Declare $\left[\mathbb{Q}_{2^n}\left(\sqrt[2^n]{G}\right)\cap \mathbb{Q}_{d_M}:\mathbb{Q}_{2^n}\right]=r$.
308
309\EndFor
310\EndFor
311\end{algorithmic}
312\end{algorithm}
313
314\pagebreak
315
316\section*{Pseudo-code, the sub-cases}
317
318We divide the pseudocode in sub-cases. In each sub-case we apply the trivial simplifications to the pseudo-code above.
319
320\subsection*{Case $G\leq \mathbb{Q}_+^\times$}
321
322\begin{algorithm}
323\caption{Adelic failure, case $G\leq \mathbb{Q}^\times$}
324
325\begin{algorithmic}
326\For {$n=1$ to $N$}
327\For{$g\in B_{n-1}$}
328\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist}
329\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$
330\EndFor
331\State
332\State $M\leftarrow\lcm(M,2^n)$
333\State
334\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$}
335\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$
336\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$
337\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$
338%\State
339\State Declare $\left[\mathbb{Q}_{2^n}\left(\sqrt[2^n]{G}\right)\cap \mathbb{Q}_{d_M}:\mathbb{Q}_{2^n}\right]=\begin{cases}
340r/2&\text{ if }8\in H\text{ and }n\geq 3,\\
341r&\text{ otherwise}.
342\end{cases}$
343\EndFor
344\EndFor
345\end{algorithmic}
346
347\end{algorithm}
348\pagebreak
349\subsection*{Case $d\neq -1$, $n\leq d$}
350For this and the following cases, we assume we are already inside the main \texttt{for} cycle, since we have particular assumptions on $n$.
351\begin{algorithm}
352\caption{Adelic failure, case $d\neq -1$, $n\leq d$}
353\begin{algorithmic}
354\For{$g\in B_{n-1}$}
355\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist}
356\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$
357\EndFor
358\State
359\State $M\leftarrow\lcm(M,2^{n+1})$
360\State
361\If{$n=1$ and $d\geq 1$}
362\State Add $-1$ to \texttt{shortlist}
363\EndIf
364\State
365\If{$n>1$}
366\State Remove $-1$ from \texttt{shortlist} (if present)
367\EndIf
368\State
369\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$}
370\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$
371\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$
372\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$
373\State
374\If{$n>1$ and $2^{n+1}\,|\,d_M$}
375\State $r\leftarrow 2r$
376\EndIf
377\State Declare $\left[\mathbb{Q}_{2^n}\left(\sqrt[2^n]{G}\right)\cap \mathbb{Q}_{d_M}:\mathbb{Q}_{2^n}\right]=\begin{cases}
378r/2&\text{ if }8\in H\text{ and }n\geq 3,\\
379r/2&\text{ if }8\in H\text{ and }n=2\text{ and }8\,|\,d_M\\
380r&\text{ otherwise}.
381\end{cases}$
382\EndFor
383\end{algorithmic}
384
385\end{algorithm}
386
387
388\pagebreak
389\subsection*{Case $d\neq -1$, $n\geq d+2$}
390
391\begin{algorithm}
392\caption{Adelic failure, case $d\neq -1$, $n\geq d+2$}
393\begin{algorithmic}
394\If{$n-1<t$}
395\For{$g\in B_{n-1}$}
396\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist}
397\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$
398\EndFor
399\EndIf
400\State
401
402\If{$n=d+2$}
403\State Add $\sqrt[2^{d}]{|B_{d,0}|}$ to \texttt{shortlist}
404\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(|B_{d,0}|))$
405\EndIf
406
407\State
408\State $M\leftarrow\lcm(M,2^{n})$
409\State
410\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$}
411\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$
412\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$
413\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$
414\State Declare $\left[\mathbb{Q}_{2^n}\left(\sqrt[2^n]{G}\right)\cap \mathbb{Q}_{d_M}:\mathbb{Q}_{2^n}\right]=\begin{cases}
415r/2&\text{ if }8\in H,\\
416r&\text{ otherwise}.
417\end{cases}$
418\EndFor
419\end{algorithmic}
420
421\end{algorithm}
422
423\pagebreak
424
425\subsection*{Case $d\neq -1$, $n= d+1$}
426
427\begin{algorithm}
428\caption{Adelic failure, case $d\neq -1$, $n= d+1$}
429\begin{algorithmic}
430\For{$g\in B_{n-1}$}
431\If{$g<0$}
432\State $\texttt{special\_element}\leftarrow(n+1,\sqrt[2^{n-1}]{|g|})$
433\State $M\leftarrow\lcm(M,\texttt{special\_embed}(\texttt{special\_element}))$
434\Else
435\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist}
436\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$
437\EndIf
438\EndFor
439\State
440\State $M\leftarrow\lcm(M,2^{n})$
441\State
442\State Remove $-1$ from \texttt{shortlist} (if present)
443
444
445\State
446\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$}
447\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$
448\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$
449\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$
450\State
451%\State $\texttt{specials}\leftarrow\{\zeta_{2^{n+1}}\sqrt{bs}\,|\,s\in S\}$
452\If{$\exists x\in \{\zeta_{2^{n+1}}\sqrt{bs}\,|\,s\in S\}\cap\mathbb{Q}_{d_M}$ and $\texttt{special\_embed}(s)\neq 4\,\forall s\in\texttt{specials}$}
453\State $r\leftarrow 2r$
454\EndIf
455\State Declare $\left[\mathbb{Q}_{2^n}\left(\sqrt[2^n]{G}\right)\cap \mathbb{Q}_{d_M}:\mathbb{Q}_{2^n}\right]=\begin{cases}
456r/2&\text{ if }8\in H\text{ and }n\geq 3,\\
457r&\text{ otherwise}.
458\end{cases}$
459\EndFor
460\end{algorithmic}
461
462\end{algorithm}
463
464\begin{thebibliography}{10} \expandafter\ifx\csname url\endcsname\relax \def\url#1{\texttt{#1}}\fi \expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi
465
466\bibitem{DebryPerucca}
467\textsc{Debry, C. - Perucca, A.}: \emph{Reductions of algebraic integers}, J. Number Theory, {\bf 167} (2016), 259--283.
468
469\bibitem{PST1}
470\textsc{Perucca, A. - Sgobba, P. - Tronto, S.}: \emph{Explicit Kummer Theory for the rational numbers}, preprint.
471
472\end{thebibliography}
473
474\end{document} \ No newline at end of file
diff --git a/tex/old/compute_degree.aux b/tex/old/compute_degree.aux
new file mode 100644
index 0000000..8be55bd
--- /dev/null
+++ b/tex/old/compute_degree.aux
@@ -0,0 +1,14 @@
1\relax
2\citation{DebryPerucca}
3\citation{DebryPerucca}
4\newlabel{lemma_zero}{{1}{1}}
5\newlabel{degree}{{1}{1}}
6\@writefile{toc}{\contentsline {section}{\numberline {1}Case $G\leq \mathbb {Q}_+^\times $}{1}}
7\@writefile{toc}{\contentsline {section}{\numberline {2}General case}{2}}
8\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}General case, $n=1(\leq d)$}{2}}
9\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}General case, $n=2\leq d$}{2}}
10\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}General case, $3\leq n\leq d$}{2}}
11\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}General case, $n\geq d+2$}{3}}
12\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}General case, $n=d+1$}{3}}
13\bibcite{DebryPerucca}{1}
14\bibcite{PeruccaSgobba}{2}
diff --git a/tex/old/compute_degree.log b/tex/old/compute_degree.log
new file mode 100644
index 0000000..571b9ec
--- /dev/null
+++ b/tex/old/compute_degree.log
@@ -0,0 +1,706 @@
1This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2019.9.20) 20 SEP 2019 10:05
2entering extended mode
3 \write18 enabled.
4 %&-line parsing enabled.
5**compute_degree.tex
6(./compute_degree.tex
7LaTeX2e <2017-04-15>
8Babel <3.18> and hyphenation patterns for 18 language(s) loaded.
9(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
10Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
11(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
12File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
13)
14\c@part=\count79
15\c@section=\count80
16\c@subsection=\count81
17\c@subsubsection=\count82
18\c@paragraph=\count83
19\c@subparagraph=\count84
20\c@figure=\count85
21\c@table=\count86
22\abovecaptionskip=\skip41
23\belowcaptionskip=\skip42
24\bibindent=\dimen102
25)
26(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
27Package: inputenc 2015/03/17 v1.2c Input encoding file
28\inpenc@prehook=\toks14
29\inpenc@posthook=\toks15
30
31(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def
32File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc
33Now handling font encoding OML ...
34... no UTF-8 mapping file for font encoding OML
35Now handling font encoding T1 ...
36... processing UTF-8 mapping file for font encoding T1
37
38(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu
39File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc
40 defining Unicode char U+00A0 (decimal 160)
41 defining Unicode char U+00A1 (decimal 161)
42 defining Unicode char U+00A3 (decimal 163)
43 defining Unicode char U+00AB (decimal 171)
44 defining Unicode char U+00AD (decimal 173)
45 defining Unicode char U+00BB (decimal 187)
46 defining Unicode char U+00BF (decimal 191)
47 defining Unicode char U+00C0 (decimal 192)
48 defining Unicode char U+00C1 (decimal 193)
49 defining Unicode char U+00C2 (decimal 194)
50 defining Unicode char U+00C3 (decimal 195)
51 defining Unicode char U+00C4 (decimal 196)
52 defining Unicode char U+00C5 (decimal 197)
53 defining Unicode char U+00C6 (decimal 198)
54 defining Unicode char U+00C7 (decimal 199)
55 defining Unicode char U+00C8 (decimal 200)
56 defining Unicode char U+00C9 (decimal 201)
57 defining Unicode char U+00CA (decimal 202)
58 defining Unicode char U+00CB (decimal 203)
59 defining Unicode char U+00CC (decimal 204)
60 defining Unicode char U+00CD (decimal 205)
61 defining Unicode char U+00CE (decimal 206)
62 defining Unicode char U+00CF (decimal 207)
63 defining Unicode char U+00D0 (decimal 208)
64 defining Unicode char U+00D1 (decimal 209)
65 defining Unicode char U+00D2 (decimal 210)
66 defining Unicode char U+00D3 (decimal 211)
67 defining Unicode char U+00D4 (decimal 212)
68 defining Unicode char U+00D5 (decimal 213)
69 defining Unicode char U+00D6 (decimal 214)
70 defining Unicode char U+00D8 (decimal 216)
71 defining Unicode char U+00D9 (decimal 217)
72 defining Unicode char U+00DA (decimal 218)
73 defining Unicode char U+00DB (decimal 219)
74 defining Unicode char U+00DC (decimal 220)
75 defining Unicode char U+00DD (decimal 221)
76 defining Unicode char U+00DE (decimal 222)
77 defining Unicode char U+00DF (decimal 223)
78 defining Unicode char U+00E0 (decimal 224)
79 defining Unicode char U+00E1 (decimal 225)
80 defining Unicode char U+00E2 (decimal 226)
81 defining Unicode char U+00E3 (decimal 227)
82 defining Unicode char U+00E4 (decimal 228)
83 defining Unicode char U+00E5 (decimal 229)
84 defining Unicode char U+00E6 (decimal 230)
85 defining Unicode char U+00E7 (decimal 231)
86 defining Unicode char U+00E8 (decimal 232)
87 defining Unicode char U+00E9 (decimal 233)
88 defining Unicode char U+00EA (decimal 234)
89 defining Unicode char U+00EB (decimal 235)
90 defining Unicode char U+00EC (decimal 236)
91 defining Unicode char U+00ED (decimal 237)
92 defining Unicode char U+00EE (decimal 238)
93 defining Unicode char U+00EF (decimal 239)
94 defining Unicode char U+00F0 (decimal 240)
95 defining Unicode char U+00F1 (decimal 241)
96 defining Unicode char U+00F2 (decimal 242)
97 defining Unicode char U+00F3 (decimal 243)
98 defining Unicode char U+00F4 (decimal 244)
99 defining Unicode char U+00F5 (decimal 245)
100 defining Unicode char U+00F6 (decimal 246)
101 defining Unicode char U+00F8 (decimal 248)
102 defining Unicode char U+00F9 (decimal 249)
103 defining Unicode char U+00FA (decimal 250)
104 defining Unicode char U+00FB (decimal 251)
105 defining Unicode char U+00FC (decimal 252)
106 defining Unicode char U+00FD (decimal 253)
107 defining Unicode char U+00FE (decimal 254)
108 defining Unicode char U+00FF (decimal 255)
109 defining Unicode char U+0100 (decimal 256)
110 defining Unicode char U+0101 (decimal 257)
111 defining Unicode char U+0102 (decimal 258)
112 defining Unicode char U+0103 (decimal 259)
113 defining Unicode char U+0104 (decimal 260)
114 defining Unicode char U+0105 (decimal 261)
115 defining Unicode char U+0106 (decimal 262)
116 defining Unicode char U+0107 (decimal 263)
117 defining Unicode char U+0108 (decimal 264)
118 defining Unicode char U+0109 (decimal 265)
119 defining Unicode char U+010A (decimal 266)
120 defining Unicode char U+010B (decimal 267)
121 defining Unicode char U+010C (decimal 268)
122 defining Unicode char U+010D (decimal 269)
123 defining Unicode char U+010E (decimal 270)
124 defining Unicode char U+010F (decimal 271)
125 defining Unicode char U+0110 (decimal 272)
126 defining Unicode char U+0111 (decimal 273)
127 defining Unicode char U+0112 (decimal 274)
128 defining Unicode char U+0113 (decimal 275)
129 defining Unicode char U+0114 (decimal 276)
130 defining Unicode char U+0115 (decimal 277)
131 defining Unicode char U+0116 (decimal 278)
132 defining Unicode char U+0117 (decimal 279)
133 defining Unicode char U+0118 (decimal 280)
134 defining Unicode char U+0119 (decimal 281)
135 defining Unicode char U+011A (decimal 282)
136 defining Unicode char U+011B (decimal 283)
137 defining Unicode char U+011C (decimal 284)
138 defining Unicode char U+011D (decimal 285)
139 defining Unicode char U+011E (decimal 286)
140 defining Unicode char U+011F (decimal 287)
141 defining Unicode char U+0120 (decimal 288)
142 defining Unicode char U+0121 (decimal 289)
143 defining Unicode char U+0122 (decimal 290)
144 defining Unicode char U+0123 (decimal 291)
145 defining Unicode char U+0124 (decimal 292)
146 defining Unicode char U+0125 (decimal 293)
147 defining Unicode char U+0128 (decimal 296)
148 defining Unicode char U+0129 (decimal 297)
149 defining Unicode char U+012A (decimal 298)
150 defining Unicode char U+012B (decimal 299)
151 defining Unicode char U+012C (decimal 300)
152 defining Unicode char U+012D (decimal 301)
153 defining Unicode char U+012E (decimal 302)
154 defining Unicode char U+012F (decimal 303)
155 defining Unicode char U+0130 (decimal 304)
156 defining Unicode char U+0131 (decimal 305)
157 defining Unicode char U+0132 (decimal 306)
158 defining Unicode char U+0133 (decimal 307)
159 defining Unicode char U+0134 (decimal 308)
160 defining Unicode char U+0135 (decimal 309)
161 defining Unicode char U+0136 (decimal 310)
162 defining Unicode char U+0137 (decimal 311)
163 defining Unicode char U+0139 (decimal 313)
164 defining Unicode char U+013A (decimal 314)
165 defining Unicode char U+013B (decimal 315)
166 defining Unicode char U+013C (decimal 316)
167 defining Unicode char U+013D (decimal 317)
168 defining Unicode char U+013E (decimal 318)
169 defining Unicode char U+0141 (decimal 321)
170 defining Unicode char U+0142 (decimal 322)
171 defining Unicode char U+0143 (decimal 323)
172 defining Unicode char U+0144 (decimal 324)
173 defining Unicode char U+0145 (decimal 325)
174 defining Unicode char U+0146 (decimal 326)
175 defining Unicode char U+0147 (decimal 327)
176 defining Unicode char U+0148 (decimal 328)
177 defining Unicode char U+014A (decimal 330)
178 defining Unicode char U+014B (decimal 331)
179 defining Unicode char U+014C (decimal 332)
180 defining Unicode char U+014D (decimal 333)
181 defining Unicode char U+014E (decimal 334)
182 defining Unicode char U+014F (decimal 335)
183 defining Unicode char U+0150 (decimal 336)
184 defining Unicode char U+0151 (decimal 337)
185 defining Unicode char U+0152 (decimal 338)
186 defining Unicode char U+0153 (decimal 339)
187 defining Unicode char U+0154 (decimal 340)
188 defining Unicode char U+0155 (decimal 341)
189 defining Unicode char U+0156 (decimal 342)
190 defining Unicode char U+0157 (decimal 343)
191 defining Unicode char U+0158 (decimal 344)
192 defining Unicode char U+0159 (decimal 345)
193 defining Unicode char U+015A (decimal 346)
194 defining Unicode char U+015B (decimal 347)
195 defining Unicode char U+015C (decimal 348)
196 defining Unicode char U+015D (decimal 349)
197 defining Unicode char U+015E (decimal 350)
198 defining Unicode char U+015F (decimal 351)
199 defining Unicode char U+0160 (decimal 352)
200 defining Unicode char U+0161 (decimal 353)
201 defining Unicode char U+0162 (decimal 354)
202 defining Unicode char U+0163 (decimal 355)
203 defining Unicode char U+0164 (decimal 356)
204 defining Unicode char U+0165 (decimal 357)
205 defining Unicode char U+0168 (decimal 360)
206 defining Unicode char U+0169 (decimal 361)
207 defining Unicode char U+016A (decimal 362)
208 defining Unicode char U+016B (decimal 363)
209 defining Unicode char U+016C (decimal 364)
210 defining Unicode char U+016D (decimal 365)
211 defining Unicode char U+016E (decimal 366)
212 defining Unicode char U+016F (decimal 367)
213 defining Unicode char U+0170 (decimal 368)
214 defining Unicode char U+0171 (decimal 369)
215 defining Unicode char U+0172 (decimal 370)
216 defining Unicode char U+0173 (decimal 371)
217 defining Unicode char U+0174 (decimal 372)
218 defining Unicode char U+0175 (decimal 373)
219 defining Unicode char U+0176 (decimal 374)
220 defining Unicode char U+0177 (decimal 375)
221 defining Unicode char U+0178 (decimal 376)
222 defining Unicode char U+0179 (decimal 377)
223 defining Unicode char U+017A (decimal 378)
224 defining Unicode char U+017B (decimal 379)
225 defining Unicode char U+017C (decimal 380)
226 defining Unicode char U+017D (decimal 381)
227 defining Unicode char U+017E (decimal 382)
228 defining Unicode char U+01CD (decimal 461)
229 defining Unicode char U+01CE (decimal 462)
230 defining Unicode char U+01CF (decimal 463)
231 defining Unicode char U+01D0 (decimal 464)
232 defining Unicode char U+01D1 (decimal 465)
233 defining Unicode char U+01D2 (decimal 466)
234 defining Unicode char U+01D3 (decimal 467)
235 defining Unicode char U+01D4 (decimal 468)
236 defining Unicode char U+01E2 (decimal 482)
237 defining Unicode char U+01E3 (decimal 483)
238 defining Unicode char U+01E6 (decimal 486)
239 defining Unicode char U+01E7 (decimal 487)
240 defining Unicode char U+01E8 (decimal 488)
241 defining Unicode char U+01E9 (decimal 489)
242 defining Unicode char U+01EA (decimal 490)
243 defining Unicode char U+01EB (decimal 491)
244 defining Unicode char U+01F0 (decimal 496)
245 defining Unicode char U+01F4 (decimal 500)
246 defining Unicode char U+01F5 (decimal 501)
247 defining Unicode char U+0218 (decimal 536)
248 defining Unicode char U+0219 (decimal 537)
249 defining Unicode char U+021A (decimal 538)
250 defining Unicode char U+021B (decimal 539)
251 defining Unicode char U+0232 (decimal 562)
252 defining Unicode char U+0233 (decimal 563)
253 defining Unicode char U+1E02 (decimal 7682)
254 defining Unicode char U+1E03 (decimal 7683)
255 defining Unicode char U+200C (decimal 8204)
256 defining Unicode char U+2010 (decimal 8208)
257 defining Unicode char U+2011 (decimal 8209)
258 defining Unicode char U+2012 (decimal 8210)
259 defining Unicode char U+2013 (decimal 8211)
260 defining Unicode char U+2014 (decimal 8212)
261 defining Unicode char U+2015 (decimal 8213)
262 defining Unicode char U+2018 (decimal 8216)
263 defining Unicode char U+2019 (decimal 8217)
264 defining Unicode char U+201A (decimal 8218)
265 defining Unicode char U+201C (decimal 8220)
266 defining Unicode char U+201D (decimal 8221)
267 defining Unicode char U+201E (decimal 8222)
268 defining Unicode char U+2030 (decimal 8240)
269 defining Unicode char U+2031 (decimal 8241)
270 defining Unicode char U+2039 (decimal 8249)
271 defining Unicode char U+203A (decimal 8250)
272 defining Unicode char U+2423 (decimal 9251)
273 defining Unicode char U+1E20 (decimal 7712)
274 defining Unicode char U+1E21 (decimal 7713)
275)
276Now handling font encoding OT1 ...
277... processing UTF-8 mapping file for font encoding OT1
278
279(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu
280File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc
281 defining Unicode char U+00A0 (decimal 160)
282 defining Unicode char U+00A1 (decimal 161)
283 defining Unicode char U+00A3 (decimal 163)
284 defining Unicode char U+00AD (decimal 173)
285 defining Unicode char U+00B8 (decimal 184)
286 defining Unicode char U+00BF (decimal 191)
287 defining Unicode char U+00C5 (decimal 197)
288 defining Unicode char U+00C6 (decimal 198)
289 defining Unicode char U+00D8 (decimal 216)
290 defining Unicode char U+00DF (decimal 223)
291 defining Unicode char U+00E6 (decimal 230)
292 defining Unicode char U+00EC (decimal 236)
293 defining Unicode char U+00ED (decimal 237)
294 defining Unicode char U+00EE (decimal 238)
295 defining Unicode char U+00EF (decimal 239)
296 defining Unicode char U+00F8 (decimal 248)
297 defining Unicode char U+0131 (decimal 305)
298 defining Unicode char U+0141 (decimal 321)
299 defining Unicode char U+0142 (decimal 322)
300 defining Unicode char U+0152 (decimal 338)
301 defining Unicode char U+0153 (decimal 339)
302 defining Unicode char U+0174 (decimal 372)
303 defining Unicode char U+0175 (decimal 373)
304 defining Unicode char U+0176 (decimal 374)
305 defining Unicode char U+0177 (decimal 375)
306 defining Unicode char U+0218 (decimal 536)
307 defining Unicode char U+0219 (decimal 537)
308 defining Unicode char U+021A (decimal 538)
309 defining Unicode char U+021B (decimal 539)
310 defining Unicode char U+2013 (decimal 8211)
311 defining Unicode char U+2014 (decimal 8212)
312 defining Unicode char U+2018 (decimal 8216)
313 defining Unicode char U+2019 (decimal 8217)
314 defining Unicode char U+201C (decimal 8220)
315 defining Unicode char U+201D (decimal 8221)
316)
317Now handling font encoding OMS ...
318... processing UTF-8 mapping file for font encoding OMS
319
320(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu
321File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc
322 defining Unicode char U+00A7 (decimal 167)
323 defining Unicode char U+00B6 (decimal 182)
324 defining Unicode char U+00B7 (decimal 183)
325 defining Unicode char U+2020 (decimal 8224)
326 defining Unicode char U+2021 (decimal 8225)
327 defining Unicode char U+2022 (decimal 8226)
328)
329Now handling font encoding OMX ...
330... no UTF-8 mapping file for font encoding OMX
331Now handling font encoding U ...
332... no UTF-8 mapping file for font encoding U
333 defining Unicode char U+00A9 (decimal 169)
334 defining Unicode char U+00AA (decimal 170)
335 defining Unicode char U+00AE (decimal 174)
336 defining Unicode char U+00BA (decimal 186)
337 defining Unicode char U+02C6 (decimal 710)
338 defining Unicode char U+02DC (decimal 732)
339 defining Unicode char U+200C (decimal 8204)
340 defining Unicode char U+2026 (decimal 8230)
341 defining Unicode char U+2122 (decimal 8482)
342 defining Unicode char U+2423 (decimal 9251)
343))
344(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
345Package: amsmath 2017/09/02 v2.17a AMS math features
346\@mathmargin=\skip43
347
348For additional information on amsmath, use the `?' option.
349(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
350Package: amstext 2000/06/29 v2.01 AMS text
351
352(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
353File: amsgen.sty 1999/11/30 v2.0 generic functions
354\@emptytoks=\toks16
355\ex@=\dimen103
356))
357(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
358Package: amsbsy 1999/11/29 v1.2d Bold Symbols
359\pmbraise@=\dimen104
360)
361(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
362Package: amsopn 2016/03/08 v2.02 operator names
363)
364\inf@bad=\count87
365LaTeX Info: Redefining \frac on input line 213.
366\uproot@=\count88
367\leftroot@=\count89
368LaTeX Info: Redefining \overline on input line 375.
369\classnum@=\count90
370\DOTSCASE@=\count91
371LaTeX Info: Redefining \ldots on input line 472.
372LaTeX Info: Redefining \dots on input line 475.
373LaTeX Info: Redefining \cdots on input line 596.
374\Mathstrutbox@=\box26
375\strutbox@=\box27
376\big@size=\dimen105
377LaTeX Font Info: Redeclaring font encoding OML on input line 712.
378LaTeX Font Info: Redeclaring font encoding OMS on input line 713.
379\macc@depth=\count92
380\c@MaxMatrixCols=\count93
381\dotsspace@=\muskip10
382\c@parentequation=\count94
383\dspbrk@lvl=\count95
384\tag@help=\toks17
385\row@=\count96
386\column@=\count97
387\maxfields@=\count98
388\andhelp@=\toks18
389\eqnshift@=\dimen106
390\alignsep@=\dimen107
391\tagshift@=\dimen108
392\tagwidth@=\dimen109
393\totwidth@=\dimen110
394\lineht@=\dimen111
395\@envbody=\toks19
396\multlinegap=\skip44
397\multlinetaggap=\skip45
398\mathdisplay@stack=\toks20
399LaTeX Info: Redefining \[ on input line 2817.
400LaTeX Info: Redefining \] on input line 2818.
401)
402(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty
403Package: amsthm 2017/10/31 v2.20.4
404\thm@style=\toks21
405\thm@bodyfont=\toks22
406\thm@headfont=\toks23
407\thm@notefont=\toks24
408\thm@headpunct=\toks25
409\thm@preskip=\skip46
410\thm@postskip=\skip47
411\thm@headsep=\skip48
412\dth@everypar=\toks26
413)
414(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty
415(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex Bootstrap'ing:
416catcodes, docmode, (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex
417) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex)
418
419 Xy-pic version 3.8.9 <2013/10/06>
420 Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others
421 Xy-pic is free software: see the User's Guide for details.
422
423Loading kernel: messages; fonts; allocations: state,
424\X@c=\dimen112
425\Y@c=\dimen113
426\U@c=\dimen114
427\D@c=\dimen115
428\L@c=\dimen116
429\R@c=\dimen117
430\Edge@c=\toks27
431\X@p=\dimen118
432\Y@p=\dimen119
433\U@p=\dimen120
434\D@p=\dimen121
435\L@p=\dimen122
436\R@p=\dimen123
437\Edge@p=\toks28
438\X@origin=\dimen124
439\Y@origin=\dimen125
440\X@xbase=\dimen126
441\Y@xbase=\dimen127
442\X@ybase=\dimen128
443\Y@ybase=\dimen129
444\X@min=\dimen130
445\Y@min=\dimen131
446\X@max=\dimen132
447\Y@max=\dimen133
448\lastobjectbox@=\box28
449\zerodotbox@=\box29
450\almostz@=\dimen134
451 direction,
452\d@X=\dimen135
453\d@Y=\dimen136
454\K@=\count99
455\KK@=\count100
456\Direction=\count101
457\K@dXdY=\dimen137
458\K@dYdX=\dimen138
459\xyread@=\read1
460\xywrite@=\write3
461\csp@=\count102
462\quotPTK@=\dimen139
463
464utility macros; pictures: \xy, positions,
465\swaptoks@@=\toks29
466\connectobjectbox@@=\box30
467 objects,
468\styletoks@=\toks30
469 decorations;
470kernel objects: directionals, circles, text; options; algorithms: directions,
471edges, connections; Xy-pic loaded)
472(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
473Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch
474)
475Package: xy 2013/10/06 Xy-pic version 3.8.9
476
477(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex
478 Xy-pic option: All features v.3.8
479(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex
480 Xy-pic option: Curve and Spline extension v.3.12 curve,
481\crv@cnt@=\count103
482\crvpts@=\toks31
483\splinebox@=\box31
484\splineval@=\dimen140
485\splinedepth@=\dimen141
486\splinetol@=\dimen142
487\splinelength@=\dimen143
488 circles,
489\L@=\dimen144
490 loaded)
491(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex
492 Xy-pic option: Frame and Bracket extension v.3.14 loaded)
493(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex
494 Xy-pic option: Computer Modern tip extension v.3.7
495(/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex
496 Xy-pic option: More Tips extension v.3.11 loaded) loaded)
497(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex
498 Xy-pic option: Line styles extension v.3.10
499\xylinethick@=\dimen145
500 loaded)
501(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex
502 Xy-pic option: Rotate and Scale extension v.3.8 loaded)
503(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex
504 Xy-pic option: Colour extension v.3.11 loaded)
505(/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex
506 Xy-pic option: Matrix feature v.3.14
507\Row=\count104
508\Col=\count105
509\queue@=\toks32
510\queue@@=\toks33
511\qcount@=\count106
512\qcount@@=\count107
513\matrixsize@=\count108
514 loaded)
515(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex
516 Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded)
517(/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex
518 Xy-pic option: Graph feature v.3.11 loaded) loaded)
519(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex
520 Xy-pic option: PDF driver v.1.7 Xy-pic pdf driver: `color' extension support
521(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex loaded)
522Xy-pic pdf driver: `curve' extension support
523(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex loaded)
524Xy-pic pdf driver: `frame' extension support
525(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex loaded)
526Xy-pic pdf driver: `line' extension support
527(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex loaded)
528Xy-pic pdf driver: `rotate' extension support
529(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex loaded) loaded))
530(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
531Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
532\symAMSa=\mathgroup4
533\symAMSb=\mathgroup5
534LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
535(Font) U/euf/m/n --> U/euf/b/n on input line 106.
536)
537(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty
538Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC)
539
540(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
541File: color.cfg 2016/01/02 v1.6 sample color configuration
542)
543Package color Info: Driver file: pdftex.def on input line 147.
544
545(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
546File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
547))
548(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
549Package: amssymb 2013/01/14 v3.01 AMS font symbols
550)
551(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty
552Package: float 2001/11/08 v1.3d Float enhancements (AL)
553\c@float@type=\count109
554\float@exts=\toks34
555\float@box=\box32
556\@float@everytoks=\toks35
557\@floatcapt=\box33
558)
559(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
560Package: geometry 2010/09/12 v5.6 Page Geometry
561
562(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
563Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
564\KV@toks@=\toks36
565)
566(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
567Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
568Package ifvtex Info: VTeX not detected.
569)
570(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
571Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
572)
573\Gm@cnth=\count110
574\Gm@cntv=\count111
575\c@Gm@tempcnt=\count112
576\Gm@bindingoffset=\dimen146
577\Gm@wd@mp=\dimen147
578\Gm@odd@mp=\dimen148
579\Gm@even@mp=\dimen149
580\Gm@layoutwidth=\dimen150
581\Gm@layoutheight=\dimen151
582\Gm@layouthoffset=\dimen152
583\Gm@layoutvoffset=\dimen153
584\Gm@dimlist=\toks37
585)
586\c@lemma=\count113
587
588(./compute_degree.aux)
589\openout1 = `compute_degree.aux'.
590
591LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 100.
592LaTeX Font Info: ... okay on input line 100.
593LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 100.
594LaTeX Font Info: ... okay on input line 100.
595LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 100.
596LaTeX Font Info: ... okay on input line 100.
597LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 100.
598LaTeX Font Info: ... okay on input line 100.
599LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 100.
600LaTeX Font Info: ... okay on input line 100.
601LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 100.
602LaTeX Font Info: ... okay on input line 100.
603LaTeX Font Info: Try loading font information for U+msa on input line 100.
604
605(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
606File: umsa.fd 2013/01/14 v3.01 AMS symbols A
607)
608LaTeX Font Info: Try loading font information for U+msb on input line 100.
609
610(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
611File: umsb.fd 2013/01/14 v3.01 AMS symbols B
612)
613Package xypdf Info: Line width: 0.39998pt on input line 100.
614
615(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
616[Loading MPS to PDF converter (version 2006.09.02).]
617\scratchcounter=\count114
618\scratchdimen=\dimen154
619\scratchbox=\box34
620\nofMPsegments=\count115
621\nofMParguments=\count116
622\everyMPshowfont=\toks38
623\MPscratchCnt=\count117
624\MPscratchDim=\dimen155
625\MPnumerator=\count118
626\makeMPintoPDFobject=\count119
627\everyMPtoPDFconversion=\toks39
628)
629*geometry* driver: auto-detecting
630*geometry* detected driver: pdftex
631*geometry* verbose mode - [ preamble ] result:
632* driver: pdftex
633* paper: a4paper
634* layout: <same size as paper>
635* layoutoffset:(h,v)=(0.0pt,0.0pt)
636* modes:
637* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt)
638* v-part:(T,H,B)=(85.35826pt, 674.33032pt, 85.35826pt)
639* \paperwidth=597.50787pt
640* \paperheight=845.04684pt
641* \textwidth=455.24411pt
642* \textheight=674.33032pt
643* \oddsidemargin=-1.1381pt
644* \evensidemargin=-1.1381pt
645* \topmargin=-23.91173pt
646* \headheight=12.0pt
647* \headsep=25.0pt
648* \topskip=10.0pt
649* \footskip=30.0pt
650* \marginparwidth=57.0pt
651* \marginparsep=11.0pt
652* \columnsep=10.0pt
653* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
654* \hoffset=0.0pt
655* \voffset=0.0pt
656* \mag=1000
657* \@twocolumnfalse
658* \@twosidefalse
659* \@mparswitchfalse
660* \@reversemarginfalse
661* (1in=72.27pt=25.4mm, 1cm=28.453pt)
662
663[1
664
665{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
666LaTeX Font Info: Try loading font information for OMS+cmr on input line 217.
667
668
669(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd
670File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions
671)
672LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available
673(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 217.
674 [2] [3] [4]
675(./compute_degree.aux) )
676Here is how much of TeX's memory you used:
677 5407 strings out of 494283
678 64833 string characters out of 6169691
679 184730 words of memory out of 5000000
680 8655 multiletter control sequences out of 15000+600000
681 15245 words of font info for 62 fonts, out of 8000000 for 9000
682 497 hyphenation exceptions out of 8191
683 27i,16n,24p,3246b,313s stack positions out of 5000i,500n,10000p,200000b,80000s
684</usr/share/texlive/texmf-dist/fonts/type1/public/amsfo
685nts/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm
686/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc
68710.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb
688></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr
689/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share
690/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></usr/share/texliv
691e/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf
692-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/f
693onts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/ty
694pe1/public/amsfonts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/publ
695ic/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams
696fonts/cm/cmsy5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
697m/cmsy7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti1
6980.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10
699.pfb>
700Output written on compute_degree.pdf (4 pages, 176578 bytes).
701PDF statistics:
702 81 PDF objects out of 1000 (max. 8388607)
703 58 compressed objects within 1 object stream
704 0 named destinations out of 1000 (max. 500000)
705 1 words of extra memory for PDF output out of 10000 (max. 10000000)
706
diff --git a/tex/old/compute_degree.pdf b/tex/old/compute_degree.pdf
new file mode 100644
index 0000000..156383c
--- /dev/null
+++ b/tex/old/compute_degree.pdf
Binary files differ
diff --git a/tex/old/compute_degree.synctex.gz b/tex/old/compute_degree.synctex.gz
new file mode 100644
index 0000000..86cccf0
--- /dev/null
+++ b/tex/old/compute_degree.synctex.gz
Binary files differ
diff --git a/tex/old/compute_degree.tex b/tex/old/compute_degree.tex
new file mode 100644
index 0000000..836a229
--- /dev/null
+++ b/tex/old/compute_degree.tex
@@ -0,0 +1,320 @@
1\documentclass[10pt,a4paper]{article}
2\usepackage[utf8]{inputenc}
3\usepackage{amsmath}
4\usepackage{amsthm}
5\usepackage[all]{xy}
6\usepackage{amsfonts}
7\usepackage{color}
8\usepackage{amssymb}
9\usepackage{float}
10\usepackage[a4paper, top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry}
11
12\DeclareMathOperator{\alg}{alg}
13\DeclareMathOperator{\obj}{Obj}
14\DeclareMathOperator{\Hom}{Hom}
15\DeclareMathOperator{\End}{End}
16\DeclareMathOperator{\hol}{Hol}
17\DeclareMathOperator{\aut}{Aut}
18\DeclareMathOperator{\gal}{Gal}
19\DeclareMathOperator{\id}{id}
20\DeclareMathOperator{\res}{res}
21\DeclareMathOperator{\im}{Im}
22\DeclareMathOperator{\Id}{Id}
23\DeclareMathOperator{\fib}{Fib}
24\DeclareMathOperator{\spec}{Spec}
25\DeclareMathOperator{\proj}{Proj}
26\DeclareMathOperator{\trdeg}{trdeg}
27\DeclareMathOperator{\car}{char}
28\DeclareMathOperator{\Frac}{Frac}
29\DeclareMathOperator{\reduced}{red}
30\DeclareMathOperator{\real}{Re}
31\DeclareMathOperator{\imag}{Im}
32\DeclareMathOperator{\vol}{vol}
33\DeclareMathOperator{\den}{den}
34\DeclareMathOperator{\rank}{rank}
35\DeclareMathOperator{\lcm}{lcm}
36\DeclareMathOperator{\rad}{rad}
37\DeclareMathOperator{\ord}{ord}
38\DeclareMathOperator{\Br}{Br}
39\DeclareMathOperator{\inv}{inv}
40\DeclareMathOperator{\Nm}{Nm}
41\DeclareMathOperator{\Tr}{Tr}
42\DeclareMathOperator{\an}{an}
43\DeclareMathOperator{\op}{op}
44\DeclareMathOperator{\sep}{sep}
45\DeclareMathOperator{\unr}{unr}
46\DeclareMathOperator{\et}{\acute et}
47\DeclareMathOperator{\ev}{ev}
48\DeclareMathOperator{\gl}{GL}
49\DeclareMathOperator{\SL}{SL}
50\DeclareMathOperator{\mat}{Mat}
51\DeclareMathOperator{\ab}{ab}
52\DeclareMathOperator{\tors}{tors}
53\DeclareMathOperator{\ed}{ed}
54
55\newcommand{\grp}{\textsc{Grp}}
56\newcommand{\set}{\textsc{Set}}
57\newcommand{\x}{\mathbf{x}}
58\newcommand{\naturalto}{\overset{.}{\to}}
59\newcommand{\qbar}{\overline{\mathbb{Q}}}
60\newcommand{\zbar}{\overline{\mathbb{Z}}}
61
62\newcommand{\pro}{\mathbb{P}}
63\newcommand{\aff}{\mathbb{A}}
64\newcommand{\quat}{\mathbb{H}}
65\newcommand{\rea}{\mathbb{R}}
66\newcommand{\kiu}{\mathbb{Q}}
67\newcommand{\F}{\mathbb{F}}
68\newcommand{\zee}{\mathbb{Z}}
69\newcommand{\ow}{\mathcal{O}}
70\newcommand{\mcx}{\mathcal{X}}
71\newcommand{\mcy}{\mathcal{Y}}
72\newcommand{\mcs}{\mathcal{S}}
73\newcommand{\mca}{\mathcal{A}}
74\newcommand{\mcb}{\mathcal{B}}
75\newcommand{\mcf}{\mathcal{F}}
76\newcommand{\mcg}{\mathcal{G}}
77\newcommand{\mct}{\mathcal{T}}
78\newcommand{\mcq}{\mathcal{Q}}
79\newcommand{\mcr}{\mathcal{R}}
80\newcommand{\adl}{\mathbf{A}}
81\newcommand{\mbk}{\mathbf{k}}
82\newcommand{\m}{\mathfrak{m}}
83\newcommand{\p}{\mathfrak{p}}
84
85\newcommand{\kbar}{\overline{K}}
86
87\newtheorem{lemma}{Lemma}
88\newtheorem{proposition}[lemma]{Proposition}
89\newtheorem{conjecture}[lemma]{Conjecture}
90\newtheorem{corollary}[lemma]{Corollary}
91\newtheorem{definition}[lemma]{Definition}
92\newtheorem{theorem}[lemma]{Theorem}
93\newtheorem{cond-thm}[lemma]{Conditional Theorem}
94\theoremstyle{definition}
95\newtheorem{remark}[lemma]{Remark}
96
97\author{Sebastiano Tronto}
98
99
100\begin{document}
101
102\begin{lemma}
103\label{lemma_zero}
104Let $H\leq \mathbb{Q}^\times$ be a finitely generated subgroup. Assume that $H$ does not contain minus a square of $\mathbb{Q}^\times$ or that $m=1$. Then we have
105\begin{align*}
106\left[\mathbb{Q}_{2^m}\left(\sqrt{H}\right):\mathbb{Q}_{2^m}\right]=\begin{cases}
107\#\overline H/2 & \text{ if }m\geq 3\text{ and }\exists b\in H\text{ with }b\equiv\pm2\pmod{\mathbb{Q}^{\times 2}},\\
108\#\overline H&\text{ otherwise}.
109\end{cases}
110\end{align*}
111where $\overline{H}$ is the image of $H\cdot \mathbb{Q}^{\times 2}$ in $\mathbb{Q}^\times/\mathbb{Q}^{\times 2}$.
112\begin{proof}
113Clearly we may assume that $H$ is generated by suqarefree integers $\{g_1,\dots, g_r\}$, where $r=\#\overline H$. In fact, we have that $\mathbb{Q}_{2^m}(\sqrt{H})=\mathbb{Q}_{2^m}(\sqrt{H'})$ for any $H'$ such that $(H\cdot \mathbb{Q}^{\times 2})/\mathbb{Q}^{\times 2}=(H'\cdot \mathbb{Q}^{\times 2})/\mathbb{Q}^{\times 2}$. Recall moreover that by {\color{red}Lemma 13} if there is $\pm2$ times a square in $H$ we can assume that, say, $g_1=\pm 2$.
114
115Assume first that $m\geq 2$, so that $-1\not\in H$ by assumption. In this case we can work over $\mathbb Q_4$ and use Theorem 18 of \cite{DebryPerucca}. We just need to compute the divisibility parameters over $\mathbb{Q}_4$:
116\begin{align*}
117d_1=\begin{cases}
1180&\text{ if }g_1\neq\pm2\\
1191&\text{ if }g_1=\pm2
120\end{cases},
121&&
122d_i=0
123\quad \text{ for $i=2,\dots, r$},\\
124h_1=\begin{cases}
1250&\text{ if } 0\leq g_1\neq2\\
1261&\text{ if } -2\neq g_1<0\\
1272&\text{ if } g_1=\pm 2
128\end{cases}, &&
129h_i=\begin{cases}
1300&\text{ if }g_i>0\\
1311&\text{ if }g_i<0
132\end{cases}
133\quad \text{ for $i=2,\dots, r$}.
134\end{align*}
135Thus, keeping the notation of the aformentioned Theorem, we get
136\begin{align*}
137n_1=\min(1,d_1)=\begin{cases}
1380&\text{ if }g_1\neq\pm2\\
1391&\text{ if }g_1=\pm2
140\end{cases},&& n_i=0\quad \text{ for $i=2,\dots, r$}.
141\end{align*}
142Thus we get
143\begin{align*}
144v_2\left[\mathbb{Q}_{2^m}(\sqrt{H}):\mathbb Q_{2^m}\right]&=\max(h_1+n_1,\dots, h_r+n_r,m)-m+r-\sum_{i=1}^rn_i=\\
145&=\begin{cases}
146\max(3,m)-m+r-\sum_{i=1}^rn_i&\text{ if }\pm2\in H\\
147r-\sum_{i=1}^rn_i&\text{ if }\pm2\not \in H
148\end{cases}\\
149&=\begin{cases}
1501+r-1&\text{ if }m=2\text{ and }\pm2\in H\\
151r-1&\text{ if }m\geq3\text{ and }\pm2\in H\\
152r&\text{ if }\pm2\not\in H
153\end{cases}
154\end{align*}
155which is what we want.
156
157Assume now that $m=1$. If $-1\not\in H$, we get the desired result directly from Lemma 19 of \cite{DebryPerucca} applied with $G=H$, using the computations that we did in the previous case. In case $-1\in H$, let $H'$ be any subgroup of $H$ such that $H=H'\oplus\langle-1\rangle$. Notice that we have $\#\overline {H'}=r-1$, so that Lemma 19 with $G=H'$ again gives our result, and the Proposition is proved.
158\end{proof}
159\end{lemma}
160
161Let $G\leq \mathbb{Q}^\times$ be a finitely generated torsion-free subgroup of rank $r$ and let $M$ and $n$ be integers such that $2^n\,|\,M$. We want to compute the degree
162\begin{align}
163\label{degree}
164\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right].
165\end{align}
166
167We will use the same notation as that of Remark 17 of Pietro's file.
168
169\section{Case $G\leq \mathbb{Q}_+^\times$}
170
171Assume that $G\leq \mathbb{Q}_+^\times$. In this case, by Remark 17, we have that
172\begin{align*}
173\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M =\mathbb{Q}_{2^n}\left(\sqrt{H}\right).
174\end{align*}
175
176Let $\overline{H}$ be the image of $H$ in $\mathbb{Q^\times}/\mathbb{Q}^{\times 2}$. By Remark 17 and Lemma \ref{lemma_zero} above, the degree (\ref{degree}) is given by
177\begin{align*}
178\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=
179\begin{cases}
180\#\overline H/2 & \text{if }n\geq 3\text{ and }2\in H,\\
181\#\overline H&\text{ otherwise}.
182\end{cases}
183\end{align*}
184
185\section{General case}
186
187Let $\mathcal{B}$ be a basis for $G$ and let $\mathcal{B}_i\subseteq \mathcal{B}$ be the subset of basis elements of $2$-divisibility $i$. Call also $L=\max d_i$ the largest $2$-divisiblity parameter. In this way $\mathcal{B}_0,\dots,\mathcal{B}_L$ is a partition of $\mathcal{B}$.
188
189As explained in ({\color{red}ref}) we may assume that there is at most one negative basis element. Since we have dealt with the $G\subseteq \mathbb{Q}_+$ case in the previous section, we assume that such an element exists and that it has $2$-divisibility $d$. We call this element $g_0$.
190
191It is (or will be?) clear ({\color{red}but we should explain it}) that it actually does not matter if we have negative elements of divisibility $0$: that case is treated exactly as the case $G\subseteq \mathbb{Q}_+$. In conclusion, we assume that:
192\begin{align*}
193\mathcal{B}_1,\dots,\mathcal{B}_{d-1},\mathcal{B}_{d+1},\dots,\mathcal{B}_L\subseteq \mathbb{Q}_+,\\
194g_0<0 \text{ and }\mathcal{B}_d\setminus \{g_0\}\subseteq \mathbb{Q}_+,\\
195d\geq 1.
196\end{align*}
197
198We also let
199\begin{align*}
200N=\begin{cases}
201\max(3,L)&\text{if }d\neq L,\\
202\max(3,L+1)&\text{if }d=L.
203\end{cases}
204\end{align*}
205
206\subsection{General case, $n=1(\leq d)$}
207This case can be treated as follows: let $\mathcal{S}'=\mathcal{S}\cup \{-1\}$ and let $H'$ be constructed from $\mathcal{S}'$ in the exact same way as $H$ is constructed from $\mathcal{S}$. Then it's easy to check ({\color{red}it follows from the ``torsion case'' for $G$, it is for sure in some other file}) that $\mathbb{Q}_{2^n}\left(\sqrt{H'}\right)=\mathbb{Q}_{2^{w'}}\left(\sqrt{H}\right)$, where $w'=\min(v_2(M),n+1)$ (as in Remark 17). Then we can again use Lemma \ref{lemma_zero} and conclude that
208\begin{align*}
209\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=
210\#\overline{H'},
211\end{align*}
212where $\#\overline{H'}$ is the image of $H'$ in $\mathbb{Q}^\times/\mathbb{Q}^{\times 2}$.
213
214\subsection{General case, $n=2\leq d$}
215We consider two cases:
216\begin{itemize}
217\item If $v_2(M)=2$ we have $\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\left[\mathbb{Q}_4\left(\sqrt{H}\right):\mathbb{Q}_4\right]=\#\overline{H}$ by Lemma \ref{lemma_zero}.
218\item If $v_2(M)\geq 3$ we have
219\begin{align*}
220\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]&=\left[\mathbb{Q}_8\left(\sqrt{H}\right):\mathbb{Q}_4\right]=\left[\mathbb{Q}_8\left(\sqrt{H}\right):\mathbb{Q}_8\right]\cdot \left[\mathbb{Q}_8:\mathbb{Q}_4\right]=\\&=2\left[\mathbb{Q}_8\left(\sqrt{H}\right):\mathbb{Q}_8\right],
221\end{align*}
222which, by Lemma \ref{lemma_zero}, is given by $\#\overline{H}$ if $2 \in H$ and by $2\#\overline{H}$ otherwise.
223\end{itemize}
224
225\subsection{General case, $3\leq n\leq d$}
226We consider two cases:
227\begin{itemize}
228\item If $v_2(M)=3$, by lemma \ref{lemma_zero} we have
229\begin{align*}
230\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\left[\mathbb{Q}_8\left(\sqrt{H}\right):\mathbb{Q}_8\right]=\begin{cases}
231\#\overline H/2 & \text{ if }\pm 2\in H,\\
232\#\overline H&\text{ otherwise}.
233\end{cases}
234\end{align*}
235\item If $v_2(M)\geq 4$ we have
236\begin{align*}
237\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]&=\left[\mathbb{Q}_{16}\left(\sqrt{H}\right):\mathbb{Q}_8\right]=\left[\mathbb{Q}_{16}\left(\sqrt{H}\right):\mathbb{Q}_{16}\right]\cdot \left[\mathbb{Q}_{16}:\mathbb{Q}_8\right]=\\&=2\left[\mathbb{Q}_{16}\left(\sqrt{H}\right):\mathbb{Q}_{16}\right],
238\end{align*}
239which, by Lemma \ref{lemma_zero}, is given by $\#\overline{H}$ if $2 \in H$ and by $2\#\overline{H}$ otherwise.
240\end{itemize}
241
242\subsection{General case, $n\geq d+2$}
243By the corresponding case in Remark 17, we simply have
244\begin{align*}
245\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\begin{cases}
246\#\overline {H'}/2 & \text{ if }\pm 2\in H,\\
247\#\overline {H'}&\text{ otherwise}.
248\end{cases}
249\end{align*}
250where $H'$ is constructed from $\mathcal{S}'=\mathcal{S}\cup\{B_0\}$ and $\overline{H'}$ is the image of $H'$ in $\mathbb{Q}^\times/\mathbb{Q}^{\times 2}$.
251
252\subsection{General case, $n=d+1$}
253We distinguish between some cases.
254\begin{itemize}
255\item Assume $n=2$ (thus $d=3$) and $v_2(g_0)=2$ (i.e. $2$ divides the square-free part of $B_0$, where $g_0=-B_0^{2^d}$). Then we write the square-free part of $B_0$ as $2s$ for some odd square-free $s\in\mathbb{Z}$. Then letting $\mathcal{S}':=\mathcal{S}\cup \{s\}$ and construct $H'$ from $\mathcal{S}'$ in the usual way. By Remark 17 we have
256\begin{align*}
257\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\left[\mathbb{Q}_{2^n}\left(\sqrt{H'}\right):\mathbb{Q}_{2^n}\right]=\#\overline{H'}.
258\end{align*}
259But we can be more precise and say that
260\begin{align*}
261\#\overline{H'}=\begin{cases}
2622\#\overline{H}&\text{if }\sqrt{xs}\in\mathbb{Q}_M\text{ for some }x\in\mathcal{S}\text{ and }s\not\in \mathcal{S},\\
263\#\overline{H}&\text{otherwise}.
264\end{cases}
265\end{align*}
266%\item Assume $n=2$, $2^{n+1}\nmid M$ and either $v_2(g_0)>2$ or $g_0$ is odd. Then $\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\#\overline H$.
267%\item Assume $n=2$, $2^{n+1}\,|\,M$ and either $v_2(g_0)>2$ or $g_0$ is odd. ({\color{red}TODO})
268\item Assume $n\geq 2$ and $2^{n+1}\nmid M$. Then
269\begin{align*}
270\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\begin{cases}
271\#\overline H/2 & \text{ if }\pm 2\in H\text{ and }n\geq 3,\\
272\#\overline H&\text{ otherwise}.
273\end{cases}
274\end{align*}
275\item Assume $n\geq 2$ and $2^{n+1}\,|\,M$. Following the notation of Remark 17, we have
276\begin{align*}
277\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M=\mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right)
278\end{align*}
279hence
280\begin{align*}
281\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]&=\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right):\mathbb{Q}_{2^n}\right]=\\
282&=\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right):\mathbb{Q}_{2^n}\left(\sqrt{H}\right)\right]\cdot \left[\mathbb{Q}_{2^n}\left(\sqrt{H}\right):\mathbb{Q}_{2^n}\right].
283\end{align*}
284We claim that
285\begin{align*}
286\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right):\mathbb{Q}_{2^n}\left(\sqrt{H}\right)\right]=\begin{cases}
2871&\text{ if }H'=\emptyset\text{ or }H'=\{2\zeta_4\},\\
2882&\text{ otherwise}.
289\end{cases}
290\end{align*}
291To see this, notice that $\sqrt{2\zeta_4}=\zeta_8\sqrt{2}\in\mathbb{Q}_4\subseteq\mathbb{Q}_{2^n}\left(\sqrt{H}\right)$, so the first case is settled. Assume now that there is $x=\zeta_{2^n}b\in H'$ with $x\neq 2\zeta_4$. If $y=\zeta_{2^n}c$ is any other element of $H'$, then we have $\sqrt{x/y}=\sqrt{b/c}$. So if $x,y\in \mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right)$ we have also $\sqrt{b/c}\in \mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right)$, which by Kummer theory implies $bc\in H$. But then $y\in \mathbb{Q}_{2^n}\left(\sqrt{H}\right)\left(x\right)$. So we have $\mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right)=\mathbb{Q}_{2^n}\left(\sqrt{H}\right)(x)$, and the sought degree is $\left[\mathbb{Q}_{2^n}\left(\sqrt{H}\right)(x):\mathbb{Q}_{2^n}\left(\sqrt{H}\right)\right]$, which is in fact $2$ ({\color{red}Do we need to explain this better?}).
292
293We conclude that
294\begin{align*}
295\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\begin{cases}
296\#\overline{H}/2&\text{ if } n\geq 3,\,\pm2 \in H\text{ and }H'\subseteq\{2\zeta_4\},\\
297\#\overline{H}&\text{ if }(n<3\text{ or }\pm2\not\in H)\text{ and }H'\subseteq \{2\zeta_4\},\\
298\#\overline{H}&\text{ if } n\geq 3,\,\pm2 \in H\text{ and }H'\not\subseteq\{2\zeta_4\},\\
2992\cdot \#\overline{H}&\text{ if }(n<3\text{ or }\pm2\not\in H)\text{ and }H'\not\subseteq \{2\zeta_4\}.
300\end{cases}
301\end{align*}
302%Let $s$ as in the first subcase of this section and let $\mathcal{C}'$ and $H'$ be as in the last case of Remark 17. We have
303%\begin{align*}
304%\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=&\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H,\zeta_{2^n}H'\rangle}\right):\mathbb{Q}_{2^n}\right]=\\
305%=&\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H,\zeta_{2^n}H'\rangle}\right):\mathbb{Q}_{2^n}\left(\sqrt{H}\right)\right]\cdot \left[\mathbb{Q}_{2^n}\left(\sqrt{H}\right):\mathbb{Q}_{2^n}\right].
306%\end{align*}
307%Notice that, by construction of $H$ and $H'$, the degree $\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H,\zeta_{2^n}H'\rangle}\right):\mathbb{Q}_{2^n}\left(\sqrt{H}\right)\right]$ is either $1$
308\end{itemize}
309
310\begin{thebibliography}{10} \expandafter\ifx\csname url\endcsname\relax \def\url#1{\texttt{#1}}\fi \expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi
311
312\bibitem{DebryPerucca}
313\textsc{Debry, C. - Perucca, A.}: \emph{Reductions of algebraic integers}, J. Number Theory, {\bf 167} (2016), 259--283.
314
315\bibitem{PeruccaSgobba}
316\textsc{Perucca, A. - Sgobba, P.}: \emph{Kummer Theory for Number Fields}, preprint.
317
318\end{thebibliography}
319
320\end{document} \ No newline at end of file
diff --git a/tex/preprint.pdf b/tex/preprint.pdf
new file mode 100644
index 0000000..061fd7c
--- /dev/null
+++ b/tex/preprint.pdf
Binary files differ

Generated with cgit - Back to sebastiano.tronto.net