kummer-degrees

Compute the degree of Kummer extensions
git clone https://git.tronto.net/kummer-degrees
Download | Log | Files | Refs | README | LICENSE

commit 1437da00eeb4a7581df1b54ffc7680ffb491d690
parent fe5b1e69a3b219d548a8b8b044660e9c936645cc
Author: Sebastiano Tronto <sebastiano.tronto@gmail.com>
Date:   Mon, 15 Feb 2021 11:30:51 +0100

Fixed for python3

Diffstat:
Mkummer_degree.sage | 584++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Atex/README | 7+++++++
Atex/af_code.aux | 11+++++++++++
Atex/af_code.log | 764+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atex/af_code.pdf | 0
Atex/af_code.synctex.gz | 0
Atex/af_code.tex | 475+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atex/old/compute_degree.aux | 14++++++++++++++
Atex/old/compute_degree.log | 706+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atex/old/compute_degree.pdf | 0
Atex/old/compute_degree.synctex.gz | 0
Atex/old/compute_degree.tex | 321+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atex/preprint.pdf | 0
13 files changed, 2624 insertions(+), 258 deletions(-)

diff --git a/kummer_degree.sage b/kummer_degree.sage @@ -1,16 +1,3 @@ -############################################################################# -# This program allows one to compute the degree of certain field extensions # -# of the rational numbers. In particular, it can compute the degree over Q # -# of extensions of the form Q( sqrt[N](G), \zeta_M ), where: # -# - N and M are integers with N dividing M; # -# - G is a finitely generated subgroup of the multiplicative group of Q # -# - \zeta_M is a primitive M-th root of unity # -# The group G does not have to be given in a particular format. A finite # -# set of generators is sufficient. # -############################################################################# - -from sage.misc.cachefunc import CachedFunction - # Computes the "adelic Kummer failure", i.e. the degrees of the intersection # of the the Kummer extension Q(\sqrt{2^n}{G}) with the M-th cyclotomic field # over Q_{2^n}. @@ -18,12 +5,12 @@ from sage.misc.cachefunc import CachedFunction # Input: a good basis B for the torsion-free group G, organized as a list of # lists, and a non negative integer d. They have to satisfy the following: # 1. Each list B[i] contains all basis elements of 2-divisibility i. -# 2. The basis given by B is 2-maximal, that is to say it satisfies Theorem -# 14 of Debry-Perucca; i.e. each element of B[i] is, up to plus or minus -# 1, the 2^i-th power of a strongly 2-indivisible rational. +# 2. The basis given by B is 2-maximal, that is to say it satisfies Theorem 14 +# of Debry-Perucca; i.e. each element of B[i] is, up to plus or minus 1, the +# 2^i-th power of a strongly 2-indivisible rational. # 3. For i != d every element of B[i] is positive, and B[d][0] is the only # negative element of B[d] (if d=-1, then there is no negative element). -# 3'. Notice that the existence on negative elements in B[0] does not change +# 3'. Notice that the existence on negative elements in B[0] does not influence # the correctness of the algorithm; in fact, the function adjust_sign # produces a basis that may have negative elements of divisibility 0, and # this basis is given as input for adelic_failure_gb. @@ -32,9 +19,9 @@ from sage.misc.cachefunc import CachedFunction # integer such that the intersection of Q(\sqrt{2^n}{G}) with Q_\infty is # contained in Q_M0. # The table ad_fail has N rows, where N is defined below. -# Each row R=ad_fail[i] contains a variable number of pairs (d,r), where d -# is a divisor of M0 and r is the degree of Q(\sqrt{2^{i+1}}{G}) \cap Q_d -# over Q_{2^n}. +# Each row R=ad_fail[i] contains a variable number of pairs (d,r), where d is a +# divisor of M0 and r is the degree of Q(\sqrt{2^{i+1}}{G}) \cap Q_d over +# Q_{2^n}. # Each divisor of M appears at most once on each row, and the last element of # the last row is of the form (M0,r0). def adelic_failure_gb( B, d ): @@ -42,48 +29,48 @@ def adelic_failure_gb( B, d ): # The table to be returned (or printed at the end), as described above. ad_fail = [] - # N is such that for every n > N the adelic failure of Q(\sqrt{2^n}{G}) - # is the same as that of Q(\sqrt{2^N}{G}). - # We always have to include n=3, because of problem with sqrt(2) in Q_8 - # (in theory, this is not necessary in some cases, e.g. if 2 does not - # divide any element of G). - # If the negative generator is on the last level, we need to increase N - # by 1, because it would contribute to the shortlist in the next level - # (by taking the root of an even power). + # N is such that for every n > N the adelic failure of Q(\sqrt{2^n}{G}) is + # the same as that of Q(\sqrt{2^N}{G}). + # We always have to include n=3, because of problem with sqrt(2) in Q_8 (in + # theory, this is not necessary in some cases, e.g. if 2 does not divide + # any element of G). + # If the negative generator is on the last level, we need to increase N by + # 1, because it would contribute to the shortlist in the next level (by + # taking the root of an even power). if d == len(B)-1: N = max(3,len(B)+1) else: N = max(3,len(B)) # The intersection is given by adding the square roots of the elements of - # this shortlist (and a "special element", not always of the form sqrt d, - # coming from taking a suitable root of a negative generator; this - # special element is dealt with later). The shortlist grows at each step, - # so we declare it before starting to loop over n and we build it - # incrementally. The "special element" is of the form \zeta_{2^n}\sqrt b, - # which we encode as (n,b). We use the value (1,1) (special element -1) - # to say that there is no special element at this level. + # this shortlist (and a "special element", not always of the form sqrt(d), + # coming from taking a suitable root of a negative generator; this special + # element is dealt with later). The shortlist grows at each step, so we + # declare it before starting to loop over n and we build it incrementally. + # The "special element" is of the form \zeta_{2^n}\sqrt{b}, which we encode + # as (n,b). We use the value (1,1) (special element -1) to say that there + # isno special element at this level. shortlist = [] special_element = (1,1) # The integers M, giving the smallest cyclotomic field in which lies the - # whole intersection with Q_\infty, grows with n. As with the shortlist, - # we declare it here and increase it appropriately at each step. + # whole intersection with Q_\infty, also grows with n. As with the + # shortlist, we declare it here and increase it appropriately at each step. M = 1 - for n in range( 1, N+1 ): + for n in range( 1, N+1 ): # 1 \leq n \leq N # We add the new elements to the shortlist, modifying M if needed. - # This is not done in case we are in the extra "fake" level (this - # case dealt with immediately below). + # This is not done in case we are in the extra "fake" level (this case + # dealt with immediately below). if n-1 < len(B): for g in B[n-1]: # Case of negative g if g < 0 and n > 1: # Special element of the form \zeta_{2^{n+1}}\sqrt(b). - # It is contained in Q_{lcm(2^{n+1},cyc_emb(b))}, except - # in case n=2 and b=2, in which case it is contained in - # Q_4. We store it as as pair ( n+1, b ). + # It is contained in Q_{lcm(2^{n+1},cyc_emb(b))}, except in + # case n=2 and b=2, in which case it is contained in Q_4. + # We store it as as pair ( n+1, b ). special_element = ( n+1, abs(g)^(1/(2^(n-1))) ) M = lcm( M, special_embed( special_element ) ) else: @@ -91,8 +78,8 @@ def adelic_failure_gb( B, d ): shortlist.append( b ) M = lcm( M, cyc_embed(b) ) - # We add a root of an even power of the negative generator, as soon - # as we are beyond its level. + # We add a root of an even power of the negative generator, as soon as + # we are beyond its level. if d != -1 and n == d+2: b = abs(B[d][0])^(1/2^d) shortlist.append( b ) @@ -114,20 +101,19 @@ def adelic_failure_gb( B, d ): # For each divisor dM of M, compute the degree of the intersection of # Q(\sqrt{2^n}{G}) with Q_dM over Q_{2^n}. We need to compute the - # number r of elements in the subgroup of G generated by the - # shortlist that lie in Q_dM. This is going to be a power of 2. The - # sought degree will be r, up to considering some special cases - # (described below). + # number r of elements in the subgroup of G generated by the shortlist + # that lie in Q_dM. This is going to be a power of 2. The sought degree + # will be r, up to considering some special cases (described below). # - # This algorithm could be inefficient for groups of big rank. It can - # be improved by precomputing subgroups of G/G^2 and the cyclotomic - # fields containing them. + # This algorithm could be inefficient for groups of big rank. It can be + # improved by precomputing subgroups of G/G^2 and the cyclotomic fields + # containing them. aux = [] # Next line of ad_fail table for dM in divisors( M ): - # We only care of the intersection with Q_dM if it contains the - # 2^n roots of unity. + # We only care of the intersection with Q_dM if it contains the 2^n + # roots of unity. if dM % (2^n) != 0: continue @@ -144,7 +130,7 @@ def adelic_failure_gb( B, d ): if n <= d and dM % (2^(n+1)) == 0 and n > 1: r *= 2 - # We loose a factor of 2 if we have sqrt(2) in Q_8 or \zeta_8 in + # We loose a factor of 2 if we have sqrt(2) in Q_8 or \zeta_8 2 in # Q_4. if 8 in H and dM % 8 == 0 and (n >= 3 or (n == 2 and n <= d)): r = r/2 @@ -153,11 +139,11 @@ def adelic_failure_gb( B, d ): # We have to consider all possible special elements arising from # multiplying the given element with the other elements of the # shortlist. - # If any of them is of the form \zeta_8 2q for q a square, there - # is nothing to do: in fact \zeta_8 2 embeds in Q_4, which - # coincides with Q_{2^n} (n must be 2); so we would double the - # degree because of the existence of the special element, but - # then we would loose another factor of 2 because of this. + # If any of them is of the form \zeta_8 2q for q a square, there is + # nothing to do: in fact \zeta_8 2 embeds in Q_4, which coincides + # with Q_{2^n} (n must be 2); so we would double the degree because + # of the existence of the special element, butthen we would loose + # another factor of 2 because of this. if special_element != (1,1) and special_element[0] == n+1: nothing_to_do = False intersecting_QdM = False @@ -184,8 +170,11 @@ def cyc_embed( b ): m *= 4 return abs(m) -# Computes the minimal cyclotomic field containing \zeta_{2^n}\sqrt(b). -def special_embed( (n,b) ): +# Computes the minimal cyclotomic field containing \zeta_{2^n}\sqrt(b), +# where (n,b)=p +def special_embed( p ): + n = p.first + n = p.second m = squarefree_part(b) if n == 3 and m % 2 == 0: return 4 * cyc_embed(m/2) @@ -201,7 +190,7 @@ def special_embed( (n,b) ): # degree of Q_{l^m,l^n} over Q_{l^m}, where l = L[i] def total_l_adic_failure( B ): - bp = bad_primes(B) + bp = bad_primes( B ) ret = ( bp, [] ) for l in bp: @@ -210,32 +199,35 @@ def total_l_adic_failure( B ): return ret # Computes the "bad primes", i.e. the ones for which the l-adic part is not -# maximal. Used by total_l_adic_failure. +# maximal. Used by l_adic_degree and total_l_adic_failure. def bad_primes( B ): M = exponent_matrix( B ) (a,b) = M.dimensions() - if a > b or M.rank() < a: - print "This is not a basis" + print( "This is not a basis" ) return # Compute which primes l divide all minors of the exponent matrix - bad_p = list( prime_factors( gcd( M.minors(a) ) ) ) - if 2 not in bad_p: - bad_p += [2] # 2 is always bad - - return sorted(bad_p) # Ensures 2 is always first + ms = M.minors( a ) + d = ms[0] + for m in ms: + d = gcd( d, m ) + bad_primes = list( prime_factors( d ) ) + if 2 not in bad_primes: + bad_primes += [2] # 2 is always bad + bad_primes.sort() # Ensures 2 is always first + + return bad_primes -# Computes the l-adic failure for a specific l. Returns a "table" as -# described above "total_l_adic_failure". +# Computes the l-adic failure for a specific l. Returns a "table" as described +# above "total_l_adic_failure". # B is any basis for G. def l_adic_failure( B, l ): r = len(B) GB = make_good_basis( B, l ) - # Computes the parameters for G over Q4. For l odd, they are the same as - # over Q. + # Computes the parameters over Q4. For l odd, they are the same as over Q. p = parameters_Q4( GB, l ) maxM = max( [ sum(x) for x in p ] ) maxN = max( maxM, len(GB)-1 ) @@ -277,6 +269,7 @@ def l_adic_failure_from_data( B, l, tablel, M, N ): return 1 r = len(B) + # Basically, the "dual" of what we do in l_adic_degree. if m > len(tablel): if n > len(tablel): return l^tablel[-1][1] @@ -285,70 +278,127 @@ def l_adic_failure_from_data( B, l, tablel, M, N ): return l^(r*n-tablel[m-1][0][n-1]) -# Returns the l-dvisibility parameters of G over Q, given a good basis b of -# G, as a list of pairs (di,hi). -def parameters_Q( b, l ): - if l != 2: - return [x for a in [[(i,0)]*len(b[i]) for i in range(len(b))] \ - for x in a] - else: - return [x for a in [[(i,1-max(0,sgn(g))) for g in b[i]] \ - for i in range(len(b))] for x in a] - -# Computes the l-divisibility parameters of G over Q4, given a good basis gb +# Computes the l-divisibility parameters of G over Q4, given a good basis b # over Q for G. Returns a list of pairs (di,hi). # If l is odd it just uses the good basis given to compute the parameters. -# If l=2, it uses the results of PST-2. def parameters_Q4( gb, l ): + # Converts from "good basis format" to simple list + b = [] + for x in gb: + b += x + ret = [] + if l != 2: - return parameters_Q( gb, l ) + for i in range( len( gb ) ): + for j in gb[i]: + ret.append( (i,0) ) + return ret else: - # Converts from "good basis format" to simple list - b = [ x for a in gb for x in a ] - - M = exponent_matrix( b ) - - # Thanks to my bad notation, the elements of b are what are called - # g_i in the article, while the elements of bb will be the b_i's. - bb = [ abs(b[i])^(2^(-divisibility(M[i],2))) for i in range(len(b)) ] - - # Computing a combination of bb elements of the form 2 * square. - MM = exponent_matrix( bb + [2] ).change_ring( GF( 2 ) ) + R.<y> = PolynomialRing( QQ ) + pol = R(y^2+1) + Q4.<eye> = NumberField( pol ) # I already use i for other things + + # Factorize basis elements over Q4 and so on. + d = [] + B = [] + h = [] + ideals_list = set() + M = [] # Exponent matrix of the Bi's + + # Pre-process to find all ideals appearing in the factorization and fix + # a chosen generator for each of them. This is important in order to + # compute the "sign" (h-parameter) of an element with respect to it Bi. + for g in b: + factorization_list = list( Q4.ideal(g).factor() ) + ideals_list |= set( [ x[0] for x in factorization_list ] ) + ideals_list = list( ideals_list ) + # Chooses a generator of each principal ideal in the list + irreducibles_list = [ J.gens_reduced()[0] for J in ideals_list ] + + # Compute the Q4-parameters of the given basis b. Also computes the + # exponent matrix of the Bi's + for g in b: + factorization_list = list( Q4.ideal(g).factor() ) + exps = [ x[1] for x in factorization_list ] + d.append( divisibility( exps, l ) ) + Bg = 1 + for j in range(len(factorization_list)): + a = 0 + for i in range( len( ideals_list ) ): + if ideals_list[i] == factorization_list[j][0]: + a = irreducibles_list[i] + break + Bg *= a ^ (exps[j]/(l^d[-1])) + B.append(Bg) + u = g / (Bg^(l^d[-1])) + if not u.is_unit(): + print( "Error: g is not the right power of the computed Bg." ) + print( "g:", g, ", Bg:", Bg, ", exponent:", l^d[-1] ) + if u == 1: + h.append( 0 ) + elif u == -1: + h.append( 1 ) + else: + h.append( 2 ) + + # Make the exponent matrix M (for now as a list of rows) + for g in B: + row = [0] * len(ideals_list) + for i in range(len(ideals_list)): + I = ideals_list[i] + ee = 1 + while (I^ee).divides(g): + ee += 1 + row[i] = ee-1 + M.append(row) + + # If the Bi's are not strongly independent, apply the algorithm (only + # once) to produce a new basis. The new basis has maximal parameters. + coeffs = find_combination( matrix(M), l ) + if coeffs != []: + + maxi = -1 + maxd = -1 + for i in range(len(d)): + if d[i] > maxd and coeffs[i] != 0: + maxd = d[i] + maxi = i + + x = [(a/coeffs[maxi]).lift() for a in coeffs] # Now a vector of int + + new_element = 1 + for i in range(len(d)): + new_element *= b[i]^( x[i] * l^(d[maxi]-d[i]) ) - for a in MM.kernel().basis(): - if a[-1] != 0: - # the vector a[0:-1] gives the coefficients for a combination - # of the b_i's of the form 2 * square. - - # Index of asis elements that do appear in the combination - c = [ i for i in range(len(a[0:-1])) if a[i] != 0 ] - - # Change of basis to include the element of the form - # 2 * square to some power. - div_max = -1 - i_max = -1 - for j in c: - if divisibility(M[j],2) > div_max: - div_max = divisibility(M[j],2) - i_max = j - b[i_max] = prod([b[j]^(2^(div_max-divisibility(M[j],2))) \ - for j in c]) - M = exponent_matrix(b) - - # Return the parameters, changing only those of the element - # of highest divisibility that appears in the combination. - ret = [(divisibility(M[i],2),1-max(0,sgn(b[i]))) \ - for i in range(len(b)) ] - d1, h1 = ret[i_max] - if d1 == 1: - h1 = 1 - h1 - elif d1 == 0: - h1 = 2 - ret[i_max] = ( d1+1, h1 ) - - return ret - - return parameters_Q( gb, 2 ) + b[maxi] = new_element + + # Compute new B, d and so on. + factorization_list = list( Q4.ideal(b[maxi]).factor() ) + exps = [ x[1] for x in factorization_list ] + d[maxi] = divisibility( exps, l ) + Bg = 1 + + for j in range(len(factorization_list)): + a = 0 + for i in range( len( ideals_list ) ): + if ideals_list[i] == factorization_list[j][0]: + a = irreducibles_list[i] + break + Bg *= a ^ (exps[j]/(l^d[maxi])) + B[maxi] = Bg + M[maxi] = [ x[1] for x in list( Q4.ideal(Bg).factor() ) ] + u = b[maxi] / (Bg^(l^d[maxi])) + if not u.is_unit(): + print( "Error: new element is not the right power of B." ) + print( "New el.:",b[maxi],", B:",Bg,", exponent:",l^d[maxi] ) + if u == 1: + h[maxi] = 0 + elif u == -1: + h[maxi] = 1 + else: + h[maxi] = 2 + + return [(d[i],h[i]) for i in range(len(d))] # Uses Theorem 18 to compute the degree of Kummer extensions. def compute_vl( p, n, m, r ): @@ -358,26 +408,16 @@ def compute_vl( p, n, m, r ): return M - m + r*n - sum( ni ) -# Computes a basis for G from a frozen_set of generators. -# Returns a pair (B,torsion) where B is a list of rational numbers and -# torsion is true if -1 is in G and false otherwise. -@CachedFunction -def generators_to_basis( G ): - (BM,BM_primes) = exponent_matrix_with_sign_and_primes( list(G) ) - BM = BM.echelon_form() - BM_primes.append(-1) - - B = [prod([BM_primes[i]^r[i] for i in range(len(r))]) for r in BM.rows()] - - return ( [ x for x in B if abs(x) != 1 ], -1 in B ) - - # Given any basis b of a group G computes an l-good basis for G. This is done # using the algorithm outlined in the proof of Theorem 14 of (Debry-Perucca). def make_good_basis( b, l ): M = exponent_matrix( b ) - d = [ divisibility(x,l) for x in M ] - B = [ abs(b[i])^(1/(l^d[i])) for i in range(len(b)) ] + d = [] + B = [] + for i in range(len(b)): + di = divisibility( M[i], l ) + d.append( di ) + B.append( abs(b[i])^(1/(l^di)) ) # Computes the coeffiecients of a linear combination of the rows of M # that is zero modulo l. These coefficients are elements of F_l. @@ -385,8 +425,8 @@ def make_good_basis( b, l ): while coeffs != []: - # Computes which basis element (with non-zero coefficient in the - # linear combination above) has maximal divisibility. + # Computes which basis element (with non-zero coefficient in the linear + # combination above) has maximal divisibility. maxi = -1 maxd = -1 for i in range(len(d)): @@ -394,24 +434,31 @@ def make_good_basis( b, l ): maxd = d[i] maxi = i - x = [ (a/coeffs[maxi]).lift() for a in coeffs ] # Now a vector of int + x = [ (a/coeffs[maxi]).lift() for a in coeffs ] # Now a vector of ints - new_elt = prod([b[i]^(x[i]*l^(d[maxi]-d[i])) for i in range(len(d))]) + new_element = 1 + for i in range(len(d)): + new_element *= b[i]^( x[i] * l^(d[maxi]-d[i]) ) - b[maxi] = new_elt + b[maxi] = new_element M = exponent_matrix( b ) d[maxi] = divisibility( M[maxi], l ) B[maxi] = abs(b[maxi])^(1/(l^d[maxi])) coeffs = find_combination( exponent_matrix( B ), l ) - return [[b[i] for i in range(len(b)) if d[i]==j] for j in range(max(d)+1)] - -# Takes a good basis B and adjusts the sign of the elements so that there is -# at most one negative generator (of positive divisibility). The input is a -# good basis in the format returned by make_good_basis. -# Returns a pair (B,d), where B is the updated basis and d is the -# divisibility parameter of the only negative element remained. + GB = [[]] + for i in range(len(d)): + while( len(GB) <= d[i] ): + GB.append([]) + GB[d[i]].append(b[i]) + return GB + +# Takes a good basis B and adjusts the sign of the elements so that there is at +# most one negative generator (of positive divisibility). The input is a good +# basis in the format returned by make_good_basis. +# Returns a pair (B,d), where B is the updated basis and d is the divisibility +# parameter of the only negative element remained. # The sign of the d=0 elements is just ignored in the other steps of the # algorithm, so we keep them negative. def adjust_sign( B ): @@ -430,7 +477,6 @@ def adjust_sign( B ): # Given the exponent matrix M of a list of rational numbers B, returns the # coefficients of a linear combination that is weakly l-divisible, or [] if # the B[i] are strongly l-independent. -@CachedFunction def find_combination( M, l ): M = M.change_ring( GF( l ) ) if M.rank() != min( M.dimensions() ): @@ -443,8 +489,8 @@ def find_combination( M, l ): # Returns the minimal l-valuation of the exponents. def divisibility( A, l ): if len(A) == 0: - print "Warning: computing the divisibility of a torsion element.", - print "Returning +Infinity." + print( "Warning: computing the divisibility of a torsion element.", end="" ) + print( "Returning +Infinity." ) return +Infinity return min( [ valuation( x, l ) for x in A ] ) @@ -469,10 +515,11 @@ def exponent_matrix( B ): # Returns a pair (M,L) where M is the modified exponent matrix and L is the # list of primes appearing in the factorization. def exponent_matrix_with_sign_and_primes( B ): - - prime_list = list({x for a in [prime_factors(g) for g in B] for x in a}) + prime_list = set() + for g in B: + prime_list |= set( prime_factors( g ) ) + prime_list = list( prime_list ) np = len( prime_list ) - rows = [] for g in B: rowg = [0] * np @@ -480,19 +527,21 @@ def exponent_matrix_with_sign_and_primes( B ): for i in range( np ): if f[0] == prime_list[i]: rowg[i] = f[1] - rowg.append( 1 - max(0,sgn(g)) ) + s = 0 + if sgn(g) == -1: + s = 1 + rowg.append( s ) rows.append( rowg ) return ( matrix( rows ), prime_list ) -# The function TotalKummerFailure (with its many wrapper functions) computes -# the total table of Kummer Failures for the given group G. Moreover, the -# result is cached for speeding up following computations on the same group, -# even if the same group is given with a different set of generators. -# +# This is a wrapper function for total_kummer_failure( G, True ), see below. +def TotalKummerFailure( G ): + total_kummer_failure( G, True ) + # Input: any set of generators for a subgroup G of Q*. # If output=False, returns a 4-uple (t,MM,NN,D): -# - t is a pair, where t[0] is the rank of G and t[1] is either True (if G -# has torsion) or False (is it does not). +# - t is a pair, where t[0] is the rank of G and t[1] is either True (if G has +# torsion) or False (is it does not). # - MM is the pair (M0,divisors(M0)) # - NN is the pair (N0,divisors(N0)) # - 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 ): # computed for a torsion-free part of G. # If output is True, outputs this data in a human-readable way and does not # return any value. +def total_kummer_failure( G, output ): -def TotalKummerFailure( G ): - total_kummer_failure( G, True ) + # Computing a basis. + (BM,BM_primes) = exponent_matrix_with_sign_and_primes( G ) + BM = BM.echelon_form() + BM_primes.append(-1) + B = [] + torsion = False + + for r in BM.rows(): + gr = product( [ BM_primes[i]^r[i] for i in range(len(r)) ] ) + if gr == -1: + torsion = True + break + elif gr == 1: + break + else: + B.append(gr) -@CachedFunction -def total_kummer_failure_cachable( G ): - B, torsion = generators_to_basis( G ) - return total_kummer_failure_cachable_basis( tuple(B), torsion ) + if len(B) == 0: + print( "G is torsion. The extension is cyclotomic. Stopping." ) + return False -@CachedFunction -def total_kummer_failure_cachable_basis( B, torsion ): - B = list(B) r = len(B) # Rank of G - if r == 0: - print "G is torsion. The extension is cyclotomic. Stopping." - return False - # Compute l-adic data (straightforward) - ( bad_p, l_adic_failure_table ) = total_l_adic_failure( B ) + ( bad_primes, l_adic_failure_table ) = total_l_adic_failure( B ) # Compute adelic data. (GB,d) = adjust_sign( make_good_basis( B, 2 ) ) adelic_failure_table = adelic_failure_gb( GB, d ) # Computing the bounds M0 and N0 - N0 = prod( [ bad_p[i] ^ len( l_adic_failure_table[i][-1][0] ) \ - for i in range(len(bad_p)) ] ) + N0 = 1 + for i in range(len( bad_primes )): + N0 *= bad_primes[i] ^ len( l_adic_failure_table[i][-1][0] ) # Extra factors of 2 may come from the adelic failure N0 = lcm( N0, 2^len( adelic_failure_table ) ) divs_N0 = divisors(N0) @@ -555,20 +612,16 @@ def total_kummer_failure_cachable_basis( B, torsion ): FT[j][l] = lcm( FT[j][l], pp[1] ) # Adding l-adic failure to the table - for i in range( len( bad_p ) ): - l = bad_p[i] + for i in range( len( bad_primes ) ): + l = bad_primes[i] for j in range(len(divs_N0)): dN = divs_N0[j] fl = l_adic_failure_from_data(B,l,l_adic_failure_table[i],dN,dN) for h in range(len(divs_M0)): FT[j][h] *= fl - return ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) + ret = ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) -def total_kummer_failure( G, output ): - - ret = total_kummer_failure_cachable( frozenset(G) ) - if output: print_total_table( ret ) # Uncomment following line for case list description. @@ -581,9 +634,9 @@ def total_kummer_failure( G, output ): # as the ration between 2^eN^r and the degree of Q_{M,N} over Q_M, where e=1 # if N is even and e=0 otherwise. -# Makes the failure table for the torsion case when M/N is even. In this -# case an entry of the table is doubled if the corresponding value of N -# (actually, of gcd(N,N0) ) is even, and is kept the same otherwise. +# Makes the failure table for the torsion case when M/N is even. In this case, +# an entry of the table is doubled if the corresponding value of N (actually, +# of gcd(N,N0) ) is even, and is kept the same otherwise. # The expected degree (over Q) 2^e * phi(M) * N^r, where e=1 if N is even and # e=0 otherwise. def torsion_table_even( data ): @@ -600,8 +653,8 @@ def torsion_table_even( data ): # Makes the failure table for the torsion case when M/N is odd. In this case # the entry at (M,N) is taken from the torsion-free entry at (2M,N). -# In other words, the expected degree (over Q) 2^e * phi(M) * N^r, where e=1 -# if N is even and e=0 otherwise. +# In other words, the expected degree (over Q) 2^e * phi(M) * N^r, where e=1 if +# N is even and e=0 otherwise. def torsion_table_odd( data ): ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data @@ -625,101 +678,114 @@ def print_total_table( data ): ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data - print "M_0 =", M0 - print "N_0 =", N0 - print "" - print "The following table shows the total failure of Kummer", - if torsion: - print "degrees in case the quotient M/N is EVEN." - else: - print "degrees." - print "The degree of the Kummer extension (M,N) is e / f, where", + print( "M_0 =", M0 ) + print( "N_0 =", N0 ) + print( "" ) + print( "The following table shows the total failure of Kummer degrees", end="" ) if torsion: - print "e = phi(M)*N^rank(G) if N is odd and e = 2*phi(M)*N^rank(G)", - print "if N is even", + print( "in\n case the quotient M/N is EVEN." ) else: - print "e = phi(M)*N^rank(G)", - print "and f is the entry of the table below at the row labelled with", - print "gcd(N,N0) and the column labelled with gcd(M,M0)." - print "" - + print( "." ) + print( "Columns correspond to values of M, rows to values of N" ) + print( "" ) + print( "The degree of the Kummer extension (M,N) can be extracted by taking" ) + print( "the value f (failure) of the entry at (gcd(N,N0),gcd(M,M0)) and" ) + print( "simply computing ed(M,N) / f, where ed(M,N) is the expected degree" ) + print( "of the Kummer extension." ) if torsion: + print( "In this case (-1 is in G), we have ed(M,N) = 2^e*phi(M)*N^r," ) + print( "where e=1 if N is even and e=0 if N is odd." ) FT1 = torsion_table_even( data ) else: + print( "In this case (G is torsion-free) we have ed(M,N) = phi(M)*N^r," ) FT1 = FT + print( "where r is the rank of G." ) + print( "" ) tt = [ ["","|"] + divs_M0 ] tt.append( "-" * (len(divs_M0)+2) ) for i in range(len(divs_N0)): tt.append( [ divs_N0[i] ] + ["|"] + FT1[i] ) - print table(tt) - print "" + print( table(tt) ) + print( "" ) if torsion: - print "The following table shows the total failure of Kummer degrees", - print "if the quotient M/N is ODD and is read as the previous one." - print "" + print( "The following table shows the total failure of Kummer degrees in" ) + print( "case the quotient M/N is ODD." ) + print( "This table can be read exactly as the first one." ) + print( "" ) # A good strategy is the following: # A little translation exercise: the failure at (M,N) in the torsion - # case is either the same as that for (2M,N) in the torsion-free - # case (if M is even) or its double (if M is odd). + # case is either the same as that for (2M,N) in the torsion-free case + # (if M is even) or its double (if M is odd). # However, due to problems in reading the table for bigger M, it is # easier to just compute the degree every time, and then deduce the - # failure. This is not too inefficient, since we can use the data - # that we have already computed via kummer_degree_from_total_table. + # failure. This is not too inefficient, since we can use the data that + # we have already computed via kummer_degree_from_total_table. new_FT = torsion_table_odd( data ) # Printing the new table tt = [ ["","|"] + divs_M0 ] tt.append( "-" * (len(divs_M0)+2) ) for i in range(len(divs_N0)): tt.append( [ divs_N0[i] ] + ["|"] + new_FT[i] ) - print table(tt) - print "" + print( table(tt) ) + print( "" ) def print_case_list( data ): ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data - FT_odd = torsion_table_odd( data ) + FT_odd = torsion_table_odd( data ) + # FT1 is either FT or FT_even in the torsion case + FT1 = FT if torsion: FT1 = torsion_table_even( data ) - pf = sorted(list({ x for row in FT_odd for x in row })) - else: - FT1 = FT - pf = sorted(list({ x for row in FT1 for x in row })) - + pf = [] + for row in FT1: + pf += row + if torsion: + for row in FT_odd: + pf += row + pf = list(set(pf)) + pf.sort() for f in pf: - print "Failure is", f, "if", + print( "Failure is", f, "if", end="" ) if torsion: - print "M/N is EVEN and", - print "(gcd(M,M0),gcd(N,N0)) is one of the following:" - print [ (divs_M0[j], divs_N0[i]) \ - for i in range(len(divs_N0)) for j in range(len(divs_M0)) \ - if FT1[i][j] == f ] - + print( "M/N is EVEN and", end="" ) + print( "(gcd(M,M0),gcd(N,N0)) is one of the following:" ) + lijst = [] + for i in range(len(divs_N0)): + for j in range(len(divs_M0)): + if FT1[i][j] == f: + lijst.append( ( divs_M0[j], divs_N0[i] ) ) + print( lijst ) if torsion: - print "or if M/N is ODD and (gcd(M,M0)),gcd(N,N0)) is one of the", - print "following:" - print [ (divs_M0[j], divs_N0[i]) \ - for i in range(len(divs_N0)) for j in range(len(divs_M0))\ - if FT_odd[i][j] == f ] + print( "or if M/N is ODD and (gcd(M,M0)),gcd(N,N0)) is one of the", end="" ) + print( "following:" ) - print "" + lijst_odd = [] + for i in range(len(divs_N0)): + for j in range(len(divs_M0)): + if FT_odd[i][j] == f: + lijst_odd.append( ( divs_M0[j], divs_N0[i] ) ) + print( lijst_odd ) + + print( "" ) # Extracts a specific value of failure from the total table. def kummer_failure_from_total_table( M, N, data ): ( ( r, torsion ), ( M0, divs_M0 ), ( N0, divs_N0 ), FT ) = data - + FT1 = FT if torsion: if (M/N) % 2 == 0: FT1 = torsion_table_even( data ) else: FT1 = torsion_table_odd( data ) - else: - FT1 = FT - return FT1[divs_N0.index( gcd( N, N0 ) )][divs_M0.index( gcd( M, M0 ) )] + i = divs_N0.index( gcd( N, N0 ) ) + j = divs_M0.index( gcd( M, M0 ) ) + return FT1[i][j] # Computes the degree of the Kummer extension (M,N), by taking as input the # table computed by TotalKummerFailure. @@ -737,17 +803,20 @@ def kummer_degree_from_total_table( M, N, data ): # M must be a multiple of N. def KummerDegree( G, M, N ): if M % N != 0: - print "M is not a multiple of N" + print( "M is not a multiple of N" ) return -1 data = total_kummer_failure(G,False) ((r,torsion),(M0,divs_M0),(N0,divs_N0),FT) = data - e_deg = euler_phi(M) * N^r + exp_deg = euler_phi(M) * N^r if torsion and N % 2 == 0: - e_deg *= 2 + exp_deg *= 2 + j = divs_M0.index(gcd(M,M0)) + i = divs_N0.index(gcd(N,N0)) + if torsion: if (M/N)%2 == 0: failure = torsion_table_even( data ) @@ -756,5 +825,4 @@ def KummerDegree( G, M, N ): else: failure = FT - return e_deg/failure[divs_N0.index(gcd(N,N0))][divs_M0.index(gcd(M,M0))] - + return exp_deg / failure[i][j] diff --git a/tex/README b/tex/README @@ -0,0 +1,7 @@ +Here we collect some incomplete and work-in-progress documentation. + +In compute_degrees we prove that our way to compute the degrees gives the +correct result. + +In af_code we break down the code for the "adelic failure" part of the script +and we check that it computes the degrees as described in compute_degrees. diff --git a/tex/af_code.aux b/tex/af_code.aux @@ -0,0 +1,11 @@ +\relax +\citation{PST1} +\citation{PST1} +\citation{DebryPerucca} +\@writefile{loa}{\contentsline {algorithm}{\numberline {1}{\ignorespaces Compute the adelic failure}}{2}} +\@writefile{loa}{\contentsline {algorithm}{\numberline {2}{\ignorespaces Adelic failure, case $G\leq \mathbb {Q}^\times $}}{4}} +\@writefile{loa}{\contentsline {algorithm}{\numberline {3}{\ignorespaces Adelic failure, case $d\not =-1$, $n\leq d$}}{5}} +\@writefile{loa}{\contentsline {algorithm}{\numberline {4}{\ignorespaces Adelic failure, case $d\not =-1$, $n\geq d+2$}}{6}} +\@writefile{loa}{\contentsline {algorithm}{\numberline {5}{\ignorespaces Adelic failure, case $d\not =-1$, $n= d+1$}}{7}} +\bibcite{DebryPerucca}{1} +\bibcite{PST1}{2} diff --git a/tex/af_code.log b/tex/af_code.log @@ -0,0 +1,764 @@ +This 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 +entering extended mode + \write18 enabled. + %&-line parsing enabled. +**af_code.tex +(./af_code.tex +LaTeX2e <2017-04-15> +Babel <3.18> and hyphenation patterns for 18 language(s) loaded. +(/usr/share/texlive/texmf-dist/tex/latex/base/report.cls +Document Class: report 2014/09/29 v1.4h Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@chapter=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2015/03/17 v1.2c Input encoding file +\inpenc@prehook=\toks14 +\inpenc@posthook=\toks15 + +(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc +Now handling font encoding OML ... +... no UTF-8 mapping file for font encoding OML +Now handling font encoding T1 ... +... processing UTF-8 mapping file for font encoding T1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AB (decimal 171) + defining Unicode char U+00AD (decimal 173) + defining Unicode char U+00BB (decimal 187) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C0 (decimal 192) + defining Unicode char U+00C1 (decimal 193) + defining Unicode char U+00C2 (decimal 194) + defining Unicode char U+00C3 (decimal 195) + defining Unicode char U+00C4 (decimal 196) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00C7 (decimal 199) + defining Unicode char U+00C8 (decimal 200) + defining Unicode char U+00C9 (decimal 201) + defining Unicode char U+00CA (decimal 202) + defining Unicode char U+00CB (decimal 203) + defining Unicode char U+00CC (decimal 204) + defining Unicode char U+00CD (decimal 205) + defining Unicode char U+00CE (decimal 206) + defining Unicode char U+00CF (decimal 207) + defining Unicode char U+00D0 (decimal 208) + defining Unicode char U+00D1 (decimal 209) + defining Unicode char U+00D2 (decimal 210) + defining Unicode char U+00D3 (decimal 211) + defining Unicode char U+00D4 (decimal 212) + defining Unicode char U+00D5 (decimal 213) + defining Unicode char U+00D6 (decimal 214) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00D9 (decimal 217) + defining Unicode char U+00DA (decimal 218) + defining Unicode char U+00DB (decimal 219) + defining Unicode char U+00DC (decimal 220) + defining Unicode char U+00DD (decimal 221) + defining Unicode char U+00DE (decimal 222) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E0 (decimal 224) + defining Unicode char U+00E1 (decimal 225) + defining Unicode char U+00E2 (decimal 226) + defining Unicode char U+00E3 (decimal 227) + defining Unicode char U+00E4 (decimal 228) + defining Unicode char U+00E5 (decimal 229) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00E7 (decimal 231) + defining Unicode char U+00E8 (decimal 232) + defining Unicode char U+00E9 (decimal 233) + defining Unicode char U+00EA (decimal 234) + defining Unicode char U+00EB (decimal 235) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F0 (decimal 240) + defining Unicode char U+00F1 (decimal 241) + defining Unicode char U+00F2 (decimal 242) + defining Unicode char U+00F3 (decimal 243) + defining Unicode char U+00F4 (decimal 244) + defining Unicode char U+00F5 (decimal 245) + defining Unicode char U+00F6 (decimal 246) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+00F9 (decimal 249) + defining Unicode char U+00FA (decimal 250) + defining Unicode char U+00FB (decimal 251) + defining Unicode char U+00FC (decimal 252) + defining Unicode char U+00FD (decimal 253) + defining Unicode char U+00FE (decimal 254) + defining Unicode char U+00FF (decimal 255) + defining Unicode char U+0100 (decimal 256) + defining Unicode char U+0101 (decimal 257) + defining Unicode char U+0102 (decimal 258) + defining Unicode char U+0103 (decimal 259) + defining Unicode char U+0104 (decimal 260) + defining Unicode char U+0105 (decimal 261) + defining Unicode char U+0106 (decimal 262) + defining Unicode char U+0107 (decimal 263) + defining Unicode char U+0108 (decimal 264) + defining Unicode char U+0109 (decimal 265) + defining Unicode char U+010A (decimal 266) + defining Unicode char U+010B (decimal 267) + defining Unicode char U+010C (decimal 268) + defining Unicode char U+010D (decimal 269) + defining Unicode char U+010E (decimal 270) + defining Unicode char U+010F (decimal 271) + defining Unicode char U+0110 (decimal 272) + defining Unicode char U+0111 (decimal 273) + defining Unicode char U+0112 (decimal 274) + defining Unicode char U+0113 (decimal 275) + defining Unicode char U+0114 (decimal 276) + defining Unicode char U+0115 (decimal 277) + defining Unicode char U+0116 (decimal 278) + defining Unicode char U+0117 (decimal 279) + defining Unicode char U+0118 (decimal 280) + defining Unicode char U+0119 (decimal 281) + defining Unicode char U+011A (decimal 282) + defining Unicode char U+011B (decimal 283) + defining Unicode char U+011C (decimal 284) + defining Unicode char U+011D (decimal 285) + defining Unicode char U+011E (decimal 286) + defining Unicode char U+011F (decimal 287) + defining Unicode char U+0120 (decimal 288) + defining Unicode char U+0121 (decimal 289) + defining Unicode char U+0122 (decimal 290) + defining Unicode char U+0123 (decimal 291) + defining Unicode char U+0124 (decimal 292) + defining Unicode char U+0125 (decimal 293) + defining Unicode char U+0128 (decimal 296) + defining Unicode char U+0129 (decimal 297) + defining Unicode char U+012A (decimal 298) + defining Unicode char U+012B (decimal 299) + defining Unicode char U+012C (decimal 300) + defining Unicode char U+012D (decimal 301) + defining Unicode char U+012E (decimal 302) + defining Unicode char U+012F (decimal 303) + defining Unicode char U+0130 (decimal 304) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0132 (decimal 306) + defining Unicode char U+0133 (decimal 307) + defining Unicode char U+0134 (decimal 308) + defining Unicode char U+0135 (decimal 309) + defining Unicode char U+0136 (decimal 310) + defining Unicode char U+0137 (decimal 311) + defining Unicode char U+0139 (decimal 313) + defining Unicode char U+013A (decimal 314) + defining Unicode char U+013B (decimal 315) + defining Unicode char U+013C (decimal 316) + defining Unicode char U+013D (decimal 317) + defining Unicode char U+013E (decimal 318) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0143 (decimal 323) + defining Unicode char U+0144 (decimal 324) + defining Unicode char U+0145 (decimal 325) + defining Unicode char U+0146 (decimal 326) + defining Unicode char U+0147 (decimal 327) + defining Unicode char U+0148 (decimal 328) + defining Unicode char U+014A (decimal 330) + defining Unicode char U+014B (decimal 331) + defining Unicode char U+014C (decimal 332) + defining Unicode char U+014D (decimal 333) + defining Unicode char U+014E (decimal 334) + defining Unicode char U+014F (decimal 335) + defining Unicode char U+0150 (decimal 336) + defining Unicode char U+0151 (decimal 337) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0154 (decimal 340) + defining Unicode char U+0155 (decimal 341) + defining Unicode char U+0156 (decimal 342) + defining Unicode char U+0157 (decimal 343) + defining Unicode char U+0158 (decimal 344) + defining Unicode char U+0159 (decimal 345) + defining Unicode char U+015A (decimal 346) + defining Unicode char U+015B (decimal 347) + defining Unicode char U+015C (decimal 348) + defining Unicode char U+015D (decimal 349) + defining Unicode char U+015E (decimal 350) + defining Unicode char U+015F (decimal 351) + defining Unicode char U+0160 (decimal 352) + defining Unicode char U+0161 (decimal 353) + defining Unicode char U+0162 (decimal 354) + defining Unicode char U+0163 (decimal 355) + defining Unicode char U+0164 (decimal 356) + defining Unicode char U+0165 (decimal 357) + defining Unicode char U+0168 (decimal 360) + defining Unicode char U+0169 (decimal 361) + defining Unicode char U+016A (decimal 362) + defining Unicode char U+016B (decimal 363) + defining Unicode char U+016C (decimal 364) + defining Unicode char U+016D (decimal 365) + defining Unicode char U+016E (decimal 366) + defining Unicode char U+016F (decimal 367) + defining Unicode char U+0170 (decimal 368) + defining Unicode char U+0171 (decimal 369) + defining Unicode char U+0172 (decimal 370) + defining Unicode char U+0173 (decimal 371) + defining Unicode char U+0174 (decimal 372) + defining Unicode char U+0175 (decimal 373) + defining Unicode char U+0176 (decimal 374) + defining Unicode char U+0177 (decimal 375) + defining Unicode char U+0178 (decimal 376) + defining Unicode char U+0179 (decimal 377) + defining Unicode char U+017A (decimal 378) + defining Unicode char U+017B (decimal 379) + defining Unicode char U+017C (decimal 380) + defining Unicode char U+017D (decimal 381) + defining Unicode char U+017E (decimal 382) + defining Unicode char U+01CD (decimal 461) + defining Unicode char U+01CE (decimal 462) + defining Unicode char U+01CF (decimal 463) + defining Unicode char U+01D0 (decimal 464) + defining Unicode char U+01D1 (decimal 465) + defining Unicode char U+01D2 (decimal 466) + defining Unicode char U+01D3 (decimal 467) + defining Unicode char U+01D4 (decimal 468) + defining Unicode char U+01E2 (decimal 482) + defining Unicode char U+01E3 (decimal 483) + defining Unicode char U+01E6 (decimal 486) + defining Unicode char U+01E7 (decimal 487) + defining Unicode char U+01E8 (decimal 488) + defining Unicode char U+01E9 (decimal 489) + defining Unicode char U+01EA (decimal 490) + defining Unicode char U+01EB (decimal 491) + defining Unicode char U+01F0 (decimal 496) + defining Unicode char U+01F4 (decimal 500) + defining Unicode char U+01F5 (decimal 501) + defining Unicode char U+0218 (decimal 536) + defining Unicode char U+0219 (decimal 537) + defining Unicode char U+021A (decimal 538) + defining Unicode char U+021B (decimal 539) + defining Unicode char U+0232 (decimal 562) + defining Unicode char U+0233 (decimal 563) + defining Unicode char U+1E02 (decimal 7682) + defining Unicode char U+1E03 (decimal 7683) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2010 (decimal 8208) + defining Unicode char U+2011 (decimal 8209) + defining Unicode char U+2012 (decimal 8210) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2015 (decimal 8213) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201A (decimal 8218) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) + defining Unicode char U+201E (decimal 8222) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+2039 (decimal 8249) + defining Unicode char U+203A (decimal 8250) + defining Unicode char U+2423 (decimal 9251) + defining Unicode char U+1E20 (decimal 7712) + defining Unicode char U+1E21 (decimal 7713) +) +Now handling font encoding OT1 ... +... processing UTF-8 mapping file for font encoding OT1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AD (decimal 173) + defining Unicode char U+00B8 (decimal 184) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0174 (decimal 372) + defining Unicode char U+0175 (decimal 373) + defining Unicode char U+0176 (decimal 374) + defining Unicode char U+0177 (decimal 375) + defining Unicode char U+0218 (decimal 536) + defining Unicode char U+0219 (decimal 537) + defining Unicode char U+021A (decimal 538) + defining Unicode char U+021B (decimal 539) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) +) +Now handling font encoding OMS ... +... processing UTF-8 mapping file for font encoding OMS + +(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) +) +Now handling font encoding OMX ... +... no UTF-8 mapping file for font encoding OMX +Now handling font encoding U ... +... no UTF-8 mapping file for font encoding U + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+02C6 (decimal 710) + defining Unicode char U+02DC (decimal 732) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2026 (decimal 8230) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2423 (decimal 9251) +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2017/09/02 v2.17a AMS math features +\@mathmargin=\skip43 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks16 +\ex@=\dimen103 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen104 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2016/03/08 v2.02 operator names +) +\inf@bad=\count88 +LaTeX Info: Redefining \frac on input line 213. +\uproot@=\count89 +\leftroot@=\count90 +LaTeX Info: Redefining \overline on input line 375. +\classnum@=\count91 +\DOTSCASE@=\count92 +LaTeX Info: Redefining \ldots on input line 472. +LaTeX Info: Redefining \dots on input line 475. +LaTeX Info: Redefining \cdots on input line 596. +\Mathstrutbox@=\box26 +\strutbox@=\box27 +\big@size=\dimen105 +LaTeX Font Info: Redeclaring font encoding OML on input line 712. +LaTeX Font Info: Redeclaring font encoding OMS on input line 713. +\macc@depth=\count93 +\c@MaxMatrixCols=\count94 +\dotsspace@=\muskip10 +\c@parentequation=\count95 +\dspbrk@lvl=\count96 +\tag@help=\toks17 +\row@=\count97 +\column@=\count98 +\maxfields@=\count99 +\andhelp@=\toks18 +\eqnshift@=\dimen106 +\alignsep@=\dimen107 +\tagshift@=\dimen108 +\tagwidth@=\dimen109 +\totwidth@=\dimen110 +\lineht@=\dimen111 +\@envbody=\toks19 +\multlinegap=\skip44 +\multlinetaggap=\skip45 +\mathdisplay@stack=\toks20 +LaTeX Info: Redefining \[ on input line 2817. +LaTeX Info: Redefining \] on input line 2818. +) +(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2017/10/31 v2.20.4 +\thm@style=\toks21 +\thm@bodyfont=\toks22 +\thm@headfont=\toks23 +\thm@notefont=\toks24 +\thm@headpunct=\toks25 +\thm@preskip=\skip46 +\thm@postskip=\skip47 +\thm@headsep=\skip48 +\dth@everypar=\toks26 +) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex Bootstrap'ing: +catcodes, docmode, (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex +) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex) + + Xy-pic version 3.8.9 <2013/10/06> + Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others + Xy-pic is free software: see the User's Guide for details. + +Loading kernel: messages; fonts; allocations: state, +\X@c=\dimen112 +\Y@c=\dimen113 +\U@c=\dimen114 +\D@c=\dimen115 +\L@c=\dimen116 +\R@c=\dimen117 +\Edge@c=\toks27 +\X@p=\dimen118 +\Y@p=\dimen119 +\U@p=\dimen120 +\D@p=\dimen121 +\L@p=\dimen122 +\R@p=\dimen123 +\Edge@p=\toks28 +\X@origin=\dimen124 +\Y@origin=\dimen125 +\X@xbase=\dimen126 +\Y@xbase=\dimen127 +\X@ybase=\dimen128 +\Y@ybase=\dimen129 +\X@min=\dimen130 +\Y@min=\dimen131 +\X@max=\dimen132 +\Y@max=\dimen133 +\lastobjectbox@=\box28 +\zerodotbox@=\box29 +\almostz@=\dimen134 + direction, +\d@X=\dimen135 +\d@Y=\dimen136 +\K@=\count100 +\KK@=\count101 +\Direction=\count102 +\K@dXdY=\dimen137 +\K@dYdX=\dimen138 +\xyread@=\read1 +\xywrite@=\write3 +\csp@=\count103 +\quotPTK@=\dimen139 + +utility macros; pictures: \xy, positions, +\swaptoks@@=\toks29 +\connectobjectbox@@=\box30 + objects, +\styletoks@=\toks30 + decorations; +kernel objects: directionals, circles, text; options; algorithms: directions, +edges, connections; Xy-pic loaded) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch +) +Package: xy 2013/10/06 Xy-pic version 3.8.9 + +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex + Xy-pic option: All features v.3.8 +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex + Xy-pic option: Curve and Spline extension v.3.12 curve, +\crv@cnt@=\count104 +\crvpts@=\toks31 +\splinebox@=\box31 +\splineval@=\dimen140 +\splinedepth@=\dimen141 +\splinetol@=\dimen142 +\splinelength@=\dimen143 + circles, +\L@=\dimen144 + loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex + Xy-pic option: Frame and Bracket extension v.3.14 loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex + Xy-pic option: Computer Modern tip extension v.3.7 +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex + Xy-pic option: More Tips extension v.3.11 loaded) loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex + Xy-pic option: Line styles extension v.3.10 +\xylinethick@=\dimen145 + loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex + Xy-pic option: Rotate and Scale extension v.3.8 loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex + Xy-pic option: Colour extension v.3.11 loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex + Xy-pic option: Matrix feature v.3.14 +\Row=\count105 +\Col=\count106 +\queue@=\toks32 +\queue@@=\toks33 +\qcount@=\count107 +\qcount@@=\count108 +\matrixsize@=\count109 + loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex + Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex + Xy-pic option: Graph feature v.3.11 loaded) loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex + Xy-pic option: PDF driver v.1.7 Xy-pic pdf driver: `color' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex loaded) +Xy-pic pdf driver: `curve' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex loaded) +Xy-pic pdf driver: `frame' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex loaded) +Xy-pic pdf driver: `line' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex loaded) +Xy-pic pdf driver: `rotate' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex loaded) loaded)) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty +Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package color Info: Driver file: pdftex.def on input line 147. + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols +) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count110 +\float@exts=\toks34 +\float@box=\box32 +\@float@everytoks=\toks35 +\@floatcapt=\box33 +) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks36 +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count111 +\Gm@cntv=\count112 +\c@Gm@tempcnt=\count113 +\Gm@bindingoffset=\dimen146 +\Gm@wd@mp=\dimen147 +\Gm@odd@mp=\dimen148 +\Gm@even@mp=\dimen149 +\Gm@layoutwidth=\dimen150 +\Gm@layoutheight=\dimen151 +\Gm@layouthoffset=\dimen152 +\Gm@layoutvoffset=\dimen153 +\Gm@dimlist=\toks37 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count114 +\lst@gtempboxa=\box34 +\lst@token=\toks38 +\lst@length=\count115 +\lst@currlwidth=\dimen154 +\lst@column=\count116 +\lst@pos=\count117 +\lst@lostspace=\dimen155 +\lst@width=\dimen156 +\lst@newlines=\count118 +\lst@lineno=\count119 +\lst@maxwidth=\dimen157 + +(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz) +\c@lstnumber=\count120 +\lst@skipnumbers=\count121 +\lst@framebox=\box35 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2015/06/04 1.6 listings configuration +)) +Package: listings 2015/06/04 1.6 (Carsten Heinz) + +(/usr/share/texlive/texmf-dist/tex/latex/algorithms/algorithm.sty +Package: algorithm 2009/08/24 v0.1 Document Style `algorithm' - floating enviro +nment + +(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC) +) +\@float@every@algorithm=\toks39 +\c@algorithm=\count122 +) +(/usr/share/texlive/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty +Package: algpseudocode + +(/usr/share/texlive/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty +Package: algorithmicx 2005/04/27 v1.2 Algorithmicx + +Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style +\c@ALG@line=\count123 +\c@ALG@rem=\count124 +\c@ALG@nested=\count125 +\ALG@tlm=\skip49 +\ALG@thistlm=\skip50 +\c@ALG@Lnr=\count126 +\c@ALG@blocknr=\count127 +\c@ALG@storecount=\count128 +\c@ALG@tmpcounter=\count129 +\ALG@tmplength=\skip51 +) +Document Style - pseudocode environments for use with the `algorithmicx' style +) +\c@lemma=\count130 + (./af_code.aux) +\openout1 = `af_code.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 105. +LaTeX Font Info: ... okay on input line 105. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 105. +LaTeX Font Info: ... okay on input line 105. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 105. +LaTeX Font Info: ... okay on input line 105. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 105. +LaTeX Font Info: ... okay on input line 105. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 105. +LaTeX Font Info: ... okay on input line 105. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 105. +LaTeX Font Info: ... okay on input line 105. +LaTeX Font Info: Try loading font information for U+msa on input line 105. + (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Try loading font information for U+msb on input line 105. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Package xypdf Info: Line width: 0.39998pt on input line 105. + +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count131 +\scratchdimen=\dimen158 +\scratchbox=\box36 +\nofMPsegments=\count132 +\nofMParguments=\count133 +\everyMPshowfont=\toks40 +\MPscratchCnt=\count134 +\MPscratchDim=\dimen159 +\MPnumerator=\count135 +\makeMPintoPDFobject=\count136 +\everyMPtoPDFconversion=\toks41 +) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: <same size as paper> +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt) +* v-part:(T,H,B)=(85.35826pt, 674.33032pt, 85.35826pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=455.24411pt +* \textheight=674.33032pt +* \oddsidemargin=-1.1381pt +* \evensidemargin=-1.1381pt +* \topmargin=-23.91173pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=10.0pt +* \footskip=30.0pt +* \marginparwidth=57.0pt +* \marginparsep=11.0pt +* \columnsep=10.0pt +* \skip\footins=9.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +\c@lstlisting=\count137 +LaTeX Font Info: Try loading font information for OMS+cmr on input line 117. + +(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd +File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 117. + [1 + + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] [3] [4] [5] [6] [7] [8 + +] (./af_code.aux) ) +Here is how much of TeX's memory you used: + 7341 strings out of 494283 + 92388 string characters out of 6169691 + 205701 words of memory out of 5000000 + 10561 multiletter control sequences out of 15000+600000 + 14410 words of font info for 60 fonts, out of 8000000 for 9000 + 497 hyphenation exceptions out of 8191 + 27i,13n,32p,3239b,350s stack positions out of 5000i,500n,10000p,200000b,80000s +</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c +m/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx +12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pf +b></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></us +r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/shar +e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share/texl +ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></usr/share/texlive/tex +mf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist +/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/ +type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/type1/p +ublic/amsfonts/cm/cmr5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/am +sfonts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c +m/cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10 +.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb></ +usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/sha +re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/share/texl +ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/share/texlive/te +xmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/share/texlive/texmf-di +st/fonts/type1/public/amsfonts/symbols/msbm10.pfb> +Output written on af_code.pdf (8 pages, 212906 bytes). +PDF statistics: + 111 PDF objects out of 1000 (max. 8388607) + 80 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/tex/af_code.pdf b/tex/af_code.pdf Binary files differ. diff --git a/tex/af_code.synctex.gz b/tex/af_code.synctex.gz Binary files differ. diff --git a/tex/af_code.tex b/tex/af_code.tex @@ -0,0 +1,474 @@ +\documentclass[10pt,a4paper]{report} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage[all]{xy} +\usepackage{amsfonts} +\usepackage{color} +\usepackage{amssymb} +\usepackage{float} +\usepackage[a4paper, top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry} +\usepackage{listings} +\usepackage{algorithm} +%\usepackage{algorithmic} +\usepackage{algpseudocode} + +\DeclareMathOperator{\alg}{alg} +\DeclareMathOperator{\obj}{Obj} +\DeclareMathOperator{\Hom}{Hom} +\DeclareMathOperator{\End}{End} +\DeclareMathOperator{\hol}{Hol} +\DeclareMathOperator{\aut}{Aut} +\DeclareMathOperator{\gal}{Gal} +\DeclareMathOperator{\id}{id} +\DeclareMathOperator{\res}{res} +\DeclareMathOperator{\im}{Im} +\DeclareMathOperator{\Id}{Id} +\DeclareMathOperator{\fib}{Fib} +\DeclareMathOperator{\spec}{Spec} +\DeclareMathOperator{\proj}{Proj} +\DeclareMathOperator{\trdeg}{trdeg} +\DeclareMathOperator{\car}{char} +\DeclareMathOperator{\Frac}{Frac} +\DeclareMathOperator{\reduced}{red} +\DeclareMathOperator{\real}{Re} +\DeclareMathOperator{\imag}{Im} +\DeclareMathOperator{\vol}{vol} +\DeclareMathOperator{\den}{den} +\DeclareMathOperator{\rank}{rank} +\DeclareMathOperator{\lcm}{lcm} +\DeclareMathOperator{\rad}{rad} +\DeclareMathOperator{\ord}{ord} +\DeclareMathOperator{\Br}{Br} +\DeclareMathOperator{\inv}{inv} +\DeclareMathOperator{\Nm}{Nm} +\DeclareMathOperator{\Tr}{Tr} +\DeclareMathOperator{\an}{an} +\DeclareMathOperator{\op}{op} +\DeclareMathOperator{\sep}{sep} +\DeclareMathOperator{\unr}{unr} +\DeclareMathOperator{\et}{\acute et} +\DeclareMathOperator{\ev}{ev} +\DeclareMathOperator{\gl}{GL} +\DeclareMathOperator{\SL}{SL} +\DeclareMathOperator{\mat}{Mat} +\DeclareMathOperator{\ab}{ab} +\DeclareMathOperator{\tors}{tors} +\DeclareMathOperator{\ed}{ed} + +\newcommand{\grp}{\textsc{Grp}} +\newcommand{\set}{\textsc{Set}} +\newcommand{\x}{\mathbf{x}} +\newcommand{\naturalto}{\overset{.}{\to}} +\newcommand{\qbar}{\overline{\mathbb{Q}}} +\newcommand{\zbar}{\overline{\mathbb{Z}}} + +\newcommand{\pro}{\mathbb{P}} +\newcommand{\aff}{\mathbb{A}} +\newcommand{\quat}{\mathbb{H}} +\newcommand{\rea}{\mathbb{R}} +\newcommand{\kiu}{\mathbb{Q}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\zee}{\mathbb{Z}} +\newcommand{\ow}{\mathcal{O}} +\newcommand{\mcx}{\mathcal{X}} +\newcommand{\mcy}{\mathcal{Y}} +\newcommand{\mcs}{\mathcal{S}} +\newcommand{\mca}{\mathcal{A}} +\newcommand{\mcb}{\mathcal{B}} +\newcommand{\mcf}{\mathcal{F}} +\newcommand{\mcg}{\mathcal{G}} +\newcommand{\mct}{\mathcal{T}} +\newcommand{\mcq}{\mathcal{Q}} +\newcommand{\mcr}{\mathcal{R}} +\newcommand{\adl}{\mathbf{A}} +\newcommand{\mbk}{\mathbf{k}} +\newcommand{\m}{\mathfrak{m}} +\newcommand{\p}{\mathfrak{p}} + +\newcommand{\kbar}{\overline{K}} + +\newtheorem{lemma}{Lemma} +\newtheorem{proposition}[lemma]{Proposition} +\newtheorem{conjecture}[lemma]{Conjecture} +\newtheorem{corollary}[lemma]{Corollary} +\newtheorem{definition}[lemma]{Definition} +\newtheorem{theorem}[lemma]{Theorem} +\newtheorem{cond-thm}[lemma]{Conditional Theorem} +\theoremstyle{definition} +\newtheorem{remark}[lemma]{Remark} + +%\author{Sebastiano Tronto} +\title{Computation of the adelic failure} + + +\begin{document} + +\chapter*{Computation of the adelic failure} + +The 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. + +We 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. + +\section*{The SageMath code} + +The 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: +\begin{itemize} +\item Each element of $B_i=\{B_{i,0},\dots,B_{i,t_i}\}$ has $2$-divisibility $i$, using the terminology of \cite{DebryPerucca}. +\item $\mathcal{B}=\bigcup_{i=1}^t B_i$ is a $2$-maximal basis for $G$. +\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$. +\end{itemize} +The 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 +\begin{align*} +f_{n,i}=\left[\mathbb{Q}_{2^i}\left(G^{1/2^i}\right)\cap \mathbb{Q}_{d_{n,i}}:\mathbb{Q}_{2^i}\right]. +\end{align*} + +%\lstset{language=Python} +%\begin{lstlisting} +%def adelic_failure_gb( B, d ): +% +% ad_fail = [] # The table to be returned at the end. +% +% if d == len(B)-1: +% N = max(3,len(B)+1) +% else: +% N = max(3,len(B)) +% +% # The shortlist grows at each step, so we build it incrementally. +% shortlist = [] +% # The "special element" is (n,b) = \zeta_{2^n}\sqrt{b}. +% special_element = (1,1) +% +% M = 1 # M also grows with n. +% +% for n in range( 1, N+1 ): # Read as: 1 \leq n \leq N +% +% # We add the new elements to the shortlist, modifying M if needed. +% # This is not done in case we are in the extra "fake" level. +% if n-1 < len(B): +% for g in B[n-1]: +% if g < 0 and n > 1: +% special_element = ( n+1, abs(g)^(1/(2^(n-1))) ) +% M = lcm( M, special_embed( special_element ) ) +% else: +% b = g^(1/(2^(n-1))) # b is 2-indivisible +% shortlist.append( b ) +% M = lcm( M, cyc_embed(b) ) +% +% # We add a root of an even power of the negative generator, as soon as +% # we are beyond its level. +% if d != -1 and n == d+2: +% b = abs(B[d][0])^(1/2^d) +% shortlist.append( b ) +% M = lcm( M, cyc_embed(b) ) +% +% M = lcm(M,2^n) +% +% if n <= d: +% M = lcm( M, 2^(n+1) ) +% +% if n == 1 and d >= 1: +% shortlist.append(-1) +% if n > 1 and -1 in shortlist: +% shortlist.remove(-1) +% +% aux = [] # Next line of ad_fail table +% +% for dM in divisors( M ): +% if dM % (2^n) != 0: +% continue +% +% S = [ product(s) for s in subsets( shortlist ) ] +% H = [ cyc_embed( s ) for s in S ] +% r = len( [ b for b in H if dM % b == 0 ] ) +% +% if n <= d and dM % (2^(n+1)) == 0 and n > 1: +% r *= 2 +% +% if 8 in H and dM % 8 == 0 and (n >= 3 or (n == 2 and n <= d)): +% r = r/2 +% +% if special_element != (1,1) and special_element[0] == n+1: +% nothing_to_do = False +% intersecting_QdM = False +% for s in S: +% new_special = ( n+1, special_element[1] * s ) +% m = special_embed( new_special ) +% if n == 2 and m == 4: # \zeta_8 times 2 times square +% nothing_to_do = True +% if dM % m == 0: +% intersecting_QdM = True +% if intersecting_QdM and not nothing_to_do: +% r *= 2 +% +% aux.append( (dM,r) ) +% +% ad_fail.append(aux) +% +% return ad_fail +%\end{lstlisting} +% +%We have used the following auxiliary functions: +% +%\begin{lstlisting} +%# Computes the minimal cyclotomic field containing \sqrt(b) +%def cyc_embed( b ): +% m = squarefree_part(b) +% if m%4 != 1: +% m *= 4 +% return abs(m) +% +%# Computes the minimal cyclotomic field containing \zeta_{2^n}\sqrt(b) +%def special_embed( (n,b) ): +% m = squarefree_part(b) +% if n == 3 and m % 2 == 0: +% return 4 * cyc_embed(m/2) +% else: +% return lcm( 2^n, cyc_embed(b) ) +%\end{lstlisting} +\pagebreak + +\section*{The pseudo-code} +We translate the SageMath code into pseudocode for ease of readability. + +\begin{algorithm} +\caption{Compute the adelic failure} +\begin{algorithmic} +\State Let $B$, $t$, $d$ and $N$ as described in the previous section +\State Let $M\leftarrow1$, $\texttt{special\_element}\leftarrow1$ and $\texttt{shortlist}\leftarrow[\,]$ + +\State + +\For {$n=1$ to $N$} +\If{$n-1<t$} +\For{$g\in B_{n-1}$} +\If{$g<0$ and $n>1$} +\State $\texttt{special\_element}\leftarrow(n+1,\sqrt[2^{n-1}]{|g|})$ +\State $M\leftarrow\lcm(M,\texttt{special\_embed}(\texttt{special\_element}))$ +\Else +\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$ +\EndIf +\EndFor +\EndIf + +\State + +\If{$n=d+2$ and $d\neq -1$} +\State Add $\sqrt[2^{d}]{|B_{d,0}|}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(|B_{d,0}|))$ +\EndIf + +\State +\If{$n\leq d$} +\State $M\leftarrow\lcm(M,2^{n+1})$ +\Else +\State $M\leftarrow\lcm(M,2^n)$ +\EndIf +\State + +\If{$n=1$ and $d\geq 1$} +\State Add $-1$ to \texttt{shortlist} +\EndIf +\State +\If{$n>1$} +\State Remove $-1$ from \texttt{shortlist} (if present) +\EndIf +\State +\algstore{alg1} +\end{algorithmic} +\end{algorithm} +\pagebreak + +\begin{algorithm} +\begin{algorithmic} +\algrestore{alg1} +\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$} +\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$ +\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$ +\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$ +\State +\If{$q<n\leq d$ and $2^{n+1}\,|\,{d_M}$} +\State $r\leftarrow 2r$ +\EndIf +\State +\If{$8\in H$ and $8\,|\,d_M$ and (either $n\geq 3$ or $n=2\leq d$)} +\State $r\leftarrow r/2$ +\EndIf +\State + +\If{$\texttt{special\_element}=\zeta_{2^{n+1}}\sqrt{b}$ for some $b\in\mathbb{Q}$} +\State $\texttt{specials}\leftarrow\{\zeta_{2^{n+1}}\sqrt{bs}\,|\,s\in S\}$ +\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}$} +\State $r\leftarrow 2r$ +\EndIf +\EndIf +\State +\State Declare $\left[\mathbb{Q}_{2^n}\left(\sqrt[2^n]{G}\right)\cap \mathbb{Q}_{d_M}:\mathbb{Q}_{2^n}\right]=r$. + +\EndFor +\EndFor +\end{algorithmic} +\end{algorithm} + +\pagebreak + +\section*{Pseudo-code, the sub-cases} + +We divide the pseudocode in sub-cases. In each sub-case we apply the trivial simplifications to the pseudo-code above. + +\subsection*{Case $G\leq \mathbb{Q}_+^\times$} + +\begin{algorithm} +\caption{Adelic failure, case $G\leq \mathbb{Q}^\times$} + +\begin{algorithmic} +\For {$n=1$ to $N$} +\For{$g\in B_{n-1}$} +\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$ +\EndFor +\State +\State $M\leftarrow\lcm(M,2^n)$ +\State +\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$} +\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$ +\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$ +\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$ +%\State +\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} +r/2&\text{ if }8\in H\text{ and }n\geq 3,\\ +r&\text{ otherwise}. +\end{cases}$ +\EndFor +\EndFor +\end{algorithmic} + +\end{algorithm} +\pagebreak +\subsection*{Case $d\neq -1$, $n\leq d$} +For this and the following cases, we assume we are already inside the main \texttt{for} cycle, since we have particular assumptions on $n$. +\begin{algorithm} +\caption{Adelic failure, case $d\neq -1$, $n\leq d$} +\begin{algorithmic} +\For{$g\in B_{n-1}$} +\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$ +\EndFor +\State +\State $M\leftarrow\lcm(M,2^{n+1})$ +\State +\If{$n=1$ and $d\geq 1$} +\State Add $-1$ to \texttt{shortlist} +\EndIf +\State +\If{$n>1$} +\State Remove $-1$ from \texttt{shortlist} (if present) +\EndIf +\State +\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$} +\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$ +\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$ +\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$ +\State +\If{$n>1$ and $2^{n+1}\,|\,d_M$} +\State $r\leftarrow 2r$ +\EndIf +\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} +r/2&\text{ if }8\in H\text{ and }n\geq 3,\\ +r/2&\text{ if }8\in H\text{ and }n=2\text{ and }8\,|\,d_M\\ +r&\text{ otherwise}. +\end{cases}$ +\EndFor +\end{algorithmic} + +\end{algorithm} + + +\pagebreak +\subsection*{Case $d\neq -1$, $n\geq d+2$} + +\begin{algorithm} +\caption{Adelic failure, case $d\neq -1$, $n\geq d+2$} +\begin{algorithmic} +\If{$n-1<t$} +\For{$g\in B_{n-1}$} +\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$ +\EndFor +\EndIf +\State + +\If{$n=d+2$} +\State Add $\sqrt[2^{d}]{|B_{d,0}|}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(|B_{d,0}|))$ +\EndIf + +\State +\State $M\leftarrow\lcm(M,2^{n})$ +\State +\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$} +\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$ +\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$ +\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$ +\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} +r/2&\text{ if }8\in H,\\ +r&\text{ otherwise}. +\end{cases}$ +\EndFor +\end{algorithmic} + +\end{algorithm} + +\pagebreak + +\subsection*{Case $d\neq -1$, $n= d+1$} + +\begin{algorithm} +\caption{Adelic failure, case $d\neq -1$, $n= d+1$} +\begin{algorithmic} +\For{$g\in B_{n-1}$} +\If{$g<0$} +\State $\texttt{special\_element}\leftarrow(n+1,\sqrt[2^{n-1}]{|g|})$ +\State $M\leftarrow\lcm(M,\texttt{special\_embed}(\texttt{special\_element}))$ +\Else +\State Add $\sqrt[2^{n-1}]{g}$ to \texttt{shortlist} +\State $M\leftarrow\lcm(M,\texttt{cyc\_embed}(g))$ +\EndIf +\EndFor +\State +\State $M\leftarrow\lcm(M,2^{n})$ +\State +\State Remove $-1$ from \texttt{shortlist} (if present) + + +\State +\ForAll{$d_M\in \texttt{divisors}(M)$ such that $2^n\,|\,M$} +\State $S\leftarrow\left\{\prod_{x\in T}x\,|\,T\subseteq\texttt{shortlist}\right\}$ +\State $H\leftarrow\left\{\min\left\{x\in\mathbb{Z}_{>0}\,|\sqrt{s}\in \mathbb{Q}_x\right\}\,|\,s\in S\right\}$ +\State $r\leftarrow\# \left\{s\in S\,|\, \sqrt{s}\in\mathbb{Q}_{d_M}\right\}$ +\State +%\State $\texttt{specials}\leftarrow\{\zeta_{2^{n+1}}\sqrt{bs}\,|\,s\in S\}$ +\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}$} +\State $r\leftarrow 2r$ +\EndIf +\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} +r/2&\text{ if }8\in H\text{ and }n\geq 3,\\ +r&\text{ otherwise}. +\end{cases}$ +\EndFor +\end{algorithmic} + +\end{algorithm} + +\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 + +\bibitem{DebryPerucca} +\textsc{Debry, C. - Perucca, A.}: \emph{Reductions of algebraic integers}, J. Number Theory, {\bf 167} (2016), 259--283. + +\bibitem{PST1} +\textsc{Perucca, A. - Sgobba, P. - Tronto, S.}: \emph{Explicit Kummer Theory for the rational numbers}, preprint. + +\end{thebibliography} + +\end{document} +\ No newline at end of file diff --git a/tex/old/compute_degree.aux b/tex/old/compute_degree.aux @@ -0,0 +1,14 @@ +\relax +\citation{DebryPerucca} +\citation{DebryPerucca} +\newlabel{lemma_zero}{{1}{1}} +\newlabel{degree}{{1}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Case $G\leq \mathbb {Q}_+^\times $}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}General case}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}General case, $n=1(\leq d)$}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}General case, $n=2\leq d$}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}General case, $3\leq n\leq d$}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}General case, $n\geq d+2$}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}General case, $n=d+1$}{3}} +\bibcite{DebryPerucca}{1} +\bibcite{PeruccaSgobba}{2} diff --git a/tex/old/compute_degree.log b/tex/old/compute_degree.log @@ -0,0 +1,706 @@ +This 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 +entering extended mode + \write18 enabled. + %&-line parsing enabled. +**compute_degree.tex +(./compute_degree.tex +LaTeX2e <2017-04-15> +Babel <3.18> and hyphenation patterns for 18 language(s) loaded. +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2015/03/17 v1.2c Input encoding file +\inpenc@prehook=\toks14 +\inpenc@posthook=\toks15 + +(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc +Now handling font encoding OML ... +... no UTF-8 mapping file for font encoding OML +Now handling font encoding T1 ... +... processing UTF-8 mapping file for font encoding T1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AB (decimal 171) + defining Unicode char U+00AD (decimal 173) + defining Unicode char U+00BB (decimal 187) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C0 (decimal 192) + defining Unicode char U+00C1 (decimal 193) + defining Unicode char U+00C2 (decimal 194) + defining Unicode char U+00C3 (decimal 195) + defining Unicode char U+00C4 (decimal 196) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00C7 (decimal 199) + defining Unicode char U+00C8 (decimal 200) + defining Unicode char U+00C9 (decimal 201) + defining Unicode char U+00CA (decimal 202) + defining Unicode char U+00CB (decimal 203) + defining Unicode char U+00CC (decimal 204) + defining Unicode char U+00CD (decimal 205) + defining Unicode char U+00CE (decimal 206) + defining Unicode char U+00CF (decimal 207) + defining Unicode char U+00D0 (decimal 208) + defining Unicode char U+00D1 (decimal 209) + defining Unicode char U+00D2 (decimal 210) + defining Unicode char U+00D3 (decimal 211) + defining Unicode char U+00D4 (decimal 212) + defining Unicode char U+00D5 (decimal 213) + defining Unicode char U+00D6 (decimal 214) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00D9 (decimal 217) + defining Unicode char U+00DA (decimal 218) + defining Unicode char U+00DB (decimal 219) + defining Unicode char U+00DC (decimal 220) + defining Unicode char U+00DD (decimal 221) + defining Unicode char U+00DE (decimal 222) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E0 (decimal 224) + defining Unicode char U+00E1 (decimal 225) + defining Unicode char U+00E2 (decimal 226) + defining Unicode char U+00E3 (decimal 227) + defining Unicode char U+00E4 (decimal 228) + defining Unicode char U+00E5 (decimal 229) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00E7 (decimal 231) + defining Unicode char U+00E8 (decimal 232) + defining Unicode char U+00E9 (decimal 233) + defining Unicode char U+00EA (decimal 234) + defining Unicode char U+00EB (decimal 235) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F0 (decimal 240) + defining Unicode char U+00F1 (decimal 241) + defining Unicode char U+00F2 (decimal 242) + defining Unicode char U+00F3 (decimal 243) + defining Unicode char U+00F4 (decimal 244) + defining Unicode char U+00F5 (decimal 245) + defining Unicode char U+00F6 (decimal 246) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+00F9 (decimal 249) + defining Unicode char U+00FA (decimal 250) + defining Unicode char U+00FB (decimal 251) + defining Unicode char U+00FC (decimal 252) + defining Unicode char U+00FD (decimal 253) + defining Unicode char U+00FE (decimal 254) + defining Unicode char U+00FF (decimal 255) + defining Unicode char U+0100 (decimal 256) + defining Unicode char U+0101 (decimal 257) + defining Unicode char U+0102 (decimal 258) + defining Unicode char U+0103 (decimal 259) + defining Unicode char U+0104 (decimal 260) + defining Unicode char U+0105 (decimal 261) + defining Unicode char U+0106 (decimal 262) + defining Unicode char U+0107 (decimal 263) + defining Unicode char U+0108 (decimal 264) + defining Unicode char U+0109 (decimal 265) + defining Unicode char U+010A (decimal 266) + defining Unicode char U+010B (decimal 267) + defining Unicode char U+010C (decimal 268) + defining Unicode char U+010D (decimal 269) + defining Unicode char U+010E (decimal 270) + defining Unicode char U+010F (decimal 271) + defining Unicode char U+0110 (decimal 272) + defining Unicode char U+0111 (decimal 273) + defining Unicode char U+0112 (decimal 274) + defining Unicode char U+0113 (decimal 275) + defining Unicode char U+0114 (decimal 276) + defining Unicode char U+0115 (decimal 277) + defining Unicode char U+0116 (decimal 278) + defining Unicode char U+0117 (decimal 279) + defining Unicode char U+0118 (decimal 280) + defining Unicode char U+0119 (decimal 281) + defining Unicode char U+011A (decimal 282) + defining Unicode char U+011B (decimal 283) + defining Unicode char U+011C (decimal 284) + defining Unicode char U+011D (decimal 285) + defining Unicode char U+011E (decimal 286) + defining Unicode char U+011F (decimal 287) + defining Unicode char U+0120 (decimal 288) + defining Unicode char U+0121 (decimal 289) + defining Unicode char U+0122 (decimal 290) + defining Unicode char U+0123 (decimal 291) + defining Unicode char U+0124 (decimal 292) + defining Unicode char U+0125 (decimal 293) + defining Unicode char U+0128 (decimal 296) + defining Unicode char U+0129 (decimal 297) + defining Unicode char U+012A (decimal 298) + defining Unicode char U+012B (decimal 299) + defining Unicode char U+012C (decimal 300) + defining Unicode char U+012D (decimal 301) + defining Unicode char U+012E (decimal 302) + defining Unicode char U+012F (decimal 303) + defining Unicode char U+0130 (decimal 304) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0132 (decimal 306) + defining Unicode char U+0133 (decimal 307) + defining Unicode char U+0134 (decimal 308) + defining Unicode char U+0135 (decimal 309) + defining Unicode char U+0136 (decimal 310) + defining Unicode char U+0137 (decimal 311) + defining Unicode char U+0139 (decimal 313) + defining Unicode char U+013A (decimal 314) + defining Unicode char U+013B (decimal 315) + defining Unicode char U+013C (decimal 316) + defining Unicode char U+013D (decimal 317) + defining Unicode char U+013E (decimal 318) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0143 (decimal 323) + defining Unicode char U+0144 (decimal 324) + defining Unicode char U+0145 (decimal 325) + defining Unicode char U+0146 (decimal 326) + defining Unicode char U+0147 (decimal 327) + defining Unicode char U+0148 (decimal 328) + defining Unicode char U+014A (decimal 330) + defining Unicode char U+014B (decimal 331) + defining Unicode char U+014C (decimal 332) + defining Unicode char U+014D (decimal 333) + defining Unicode char U+014E (decimal 334) + defining Unicode char U+014F (decimal 335) + defining Unicode char U+0150 (decimal 336) + defining Unicode char U+0151 (decimal 337) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0154 (decimal 340) + defining Unicode char U+0155 (decimal 341) + defining Unicode char U+0156 (decimal 342) + defining Unicode char U+0157 (decimal 343) + defining Unicode char U+0158 (decimal 344) + defining Unicode char U+0159 (decimal 345) + defining Unicode char U+015A (decimal 346) + defining Unicode char U+015B (decimal 347) + defining Unicode char U+015C (decimal 348) + defining Unicode char U+015D (decimal 349) + defining Unicode char U+015E (decimal 350) + defining Unicode char U+015F (decimal 351) + defining Unicode char U+0160 (decimal 352) + defining Unicode char U+0161 (decimal 353) + defining Unicode char U+0162 (decimal 354) + defining Unicode char U+0163 (decimal 355) + defining Unicode char U+0164 (decimal 356) + defining Unicode char U+0165 (decimal 357) + defining Unicode char U+0168 (decimal 360) + defining Unicode char U+0169 (decimal 361) + defining Unicode char U+016A (decimal 362) + defining Unicode char U+016B (decimal 363) + defining Unicode char U+016C (decimal 364) + defining Unicode char U+016D (decimal 365) + defining Unicode char U+016E (decimal 366) + defining Unicode char U+016F (decimal 367) + defining Unicode char U+0170 (decimal 368) + defining Unicode char U+0171 (decimal 369) + defining Unicode char U+0172 (decimal 370) + defining Unicode char U+0173 (decimal 371) + defining Unicode char U+0174 (decimal 372) + defining Unicode char U+0175 (decimal 373) + defining Unicode char U+0176 (decimal 374) + defining Unicode char U+0177 (decimal 375) + defining Unicode char U+0178 (decimal 376) + defining Unicode char U+0179 (decimal 377) + defining Unicode char U+017A (decimal 378) + defining Unicode char U+017B (decimal 379) + defining Unicode char U+017C (decimal 380) + defining Unicode char U+017D (decimal 381) + defining Unicode char U+017E (decimal 382) + defining Unicode char U+01CD (decimal 461) + defining Unicode char U+01CE (decimal 462) + defining Unicode char U+01CF (decimal 463) + defining Unicode char U+01D0 (decimal 464) + defining Unicode char U+01D1 (decimal 465) + defining Unicode char U+01D2 (decimal 466) + defining Unicode char U+01D3 (decimal 467) + defining Unicode char U+01D4 (decimal 468) + defining Unicode char U+01E2 (decimal 482) + defining Unicode char U+01E3 (decimal 483) + defining Unicode char U+01E6 (decimal 486) + defining Unicode char U+01E7 (decimal 487) + defining Unicode char U+01E8 (decimal 488) + defining Unicode char U+01E9 (decimal 489) + defining Unicode char U+01EA (decimal 490) + defining Unicode char U+01EB (decimal 491) + defining Unicode char U+01F0 (decimal 496) + defining Unicode char U+01F4 (decimal 500) + defining Unicode char U+01F5 (decimal 501) + defining Unicode char U+0218 (decimal 536) + defining Unicode char U+0219 (decimal 537) + defining Unicode char U+021A (decimal 538) + defining Unicode char U+021B (decimal 539) + defining Unicode char U+0232 (decimal 562) + defining Unicode char U+0233 (decimal 563) + defining Unicode char U+1E02 (decimal 7682) + defining Unicode char U+1E03 (decimal 7683) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2010 (decimal 8208) + defining Unicode char U+2011 (decimal 8209) + defining Unicode char U+2012 (decimal 8210) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2015 (decimal 8213) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201A (decimal 8218) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) + defining Unicode char U+201E (decimal 8222) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+2039 (decimal 8249) + defining Unicode char U+203A (decimal 8250) + defining Unicode char U+2423 (decimal 9251) + defining Unicode char U+1E20 (decimal 7712) + defining Unicode char U+1E21 (decimal 7713) +) +Now handling font encoding OT1 ... +... processing UTF-8 mapping file for font encoding OT1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AD (decimal 173) + defining Unicode char U+00B8 (decimal 184) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0174 (decimal 372) + defining Unicode char U+0175 (decimal 373) + defining Unicode char U+0176 (decimal 374) + defining Unicode char U+0177 (decimal 375) + defining Unicode char U+0218 (decimal 536) + defining Unicode char U+0219 (decimal 537) + defining Unicode char U+021A (decimal 538) + defining Unicode char U+021B (decimal 539) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) +) +Now handling font encoding OMS ... +... processing UTF-8 mapping file for font encoding OMS + +(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) +) +Now handling font encoding OMX ... +... no UTF-8 mapping file for font encoding OMX +Now handling font encoding U ... +... no UTF-8 mapping file for font encoding U + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+02C6 (decimal 710) + defining Unicode char U+02DC (decimal 732) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2026 (decimal 8230) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2423 (decimal 9251) +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2017/09/02 v2.17a AMS math features +\@mathmargin=\skip43 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks16 +\ex@=\dimen103 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen104 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2016/03/08 v2.02 operator names +) +\inf@bad=\count87 +LaTeX Info: Redefining \frac on input line 213. +\uproot@=\count88 +\leftroot@=\count89 +LaTeX Info: Redefining \overline on input line 375. +\classnum@=\count90 +\DOTSCASE@=\count91 +LaTeX Info: Redefining \ldots on input line 472. +LaTeX Info: Redefining \dots on input line 475. +LaTeX Info: Redefining \cdots on input line 596. +\Mathstrutbox@=\box26 +\strutbox@=\box27 +\big@size=\dimen105 +LaTeX Font Info: Redeclaring font encoding OML on input line 712. +LaTeX Font Info: Redeclaring font encoding OMS on input line 713. +\macc@depth=\count92 +\c@MaxMatrixCols=\count93 +\dotsspace@=\muskip10 +\c@parentequation=\count94 +\dspbrk@lvl=\count95 +\tag@help=\toks17 +\row@=\count96 +\column@=\count97 +\maxfields@=\count98 +\andhelp@=\toks18 +\eqnshift@=\dimen106 +\alignsep@=\dimen107 +\tagshift@=\dimen108 +\tagwidth@=\dimen109 +\totwidth@=\dimen110 +\lineht@=\dimen111 +\@envbody=\toks19 +\multlinegap=\skip44 +\multlinetaggap=\skip45 +\mathdisplay@stack=\toks20 +LaTeX Info: Redefining \[ on input line 2817. +LaTeX Info: Redefining \] on input line 2818. +) +(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2017/10/31 v2.20.4 +\thm@style=\toks21 +\thm@bodyfont=\toks22 +\thm@headfont=\toks23 +\thm@notefont=\toks24 +\thm@headpunct=\toks25 +\thm@preskip=\skip46 +\thm@postskip=\skip47 +\thm@headsep=\skip48 +\dth@everypar=\toks26 +) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex Bootstrap'ing: +catcodes, docmode, (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex +) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex) + + Xy-pic version 3.8.9 <2013/10/06> + Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others + Xy-pic is free software: see the User's Guide for details. + +Loading kernel: messages; fonts; allocations: state, +\X@c=\dimen112 +\Y@c=\dimen113 +\U@c=\dimen114 +\D@c=\dimen115 +\L@c=\dimen116 +\R@c=\dimen117 +\Edge@c=\toks27 +\X@p=\dimen118 +\Y@p=\dimen119 +\U@p=\dimen120 +\D@p=\dimen121 +\L@p=\dimen122 +\R@p=\dimen123 +\Edge@p=\toks28 +\X@origin=\dimen124 +\Y@origin=\dimen125 +\X@xbase=\dimen126 +\Y@xbase=\dimen127 +\X@ybase=\dimen128 +\Y@ybase=\dimen129 +\X@min=\dimen130 +\Y@min=\dimen131 +\X@max=\dimen132 +\Y@max=\dimen133 +\lastobjectbox@=\box28 +\zerodotbox@=\box29 +\almostz@=\dimen134 + direction, +\d@X=\dimen135 +\d@Y=\dimen136 +\K@=\count99 +\KK@=\count100 +\Direction=\count101 +\K@dXdY=\dimen137 +\K@dYdX=\dimen138 +\xyread@=\read1 +\xywrite@=\write3 +\csp@=\count102 +\quotPTK@=\dimen139 + +utility macros; pictures: \xy, positions, +\swaptoks@@=\toks29 +\connectobjectbox@@=\box30 + objects, +\styletoks@=\toks30 + decorations; +kernel objects: directionals, circles, text; options; algorithms: directions, +edges, connections; Xy-pic loaded) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch +) +Package: xy 2013/10/06 Xy-pic version 3.8.9 + +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex + Xy-pic option: All features v.3.8 +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex + Xy-pic option: Curve and Spline extension v.3.12 curve, +\crv@cnt@=\count103 +\crvpts@=\toks31 +\splinebox@=\box31 +\splineval@=\dimen140 +\splinedepth@=\dimen141 +\splinetol@=\dimen142 +\splinelength@=\dimen143 + circles, +\L@=\dimen144 + loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex + Xy-pic option: Frame and Bracket extension v.3.14 loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex + Xy-pic option: Computer Modern tip extension v.3.7 +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex + Xy-pic option: More Tips extension v.3.11 loaded) loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex + Xy-pic option: Line styles extension v.3.10 +\xylinethick@=\dimen145 + loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex + Xy-pic option: Rotate and Scale extension v.3.8 loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex + Xy-pic option: Colour extension v.3.11 loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex + Xy-pic option: Matrix feature v.3.14 +\Row=\count104 +\Col=\count105 +\queue@=\toks32 +\queue@@=\toks33 +\qcount@=\count106 +\qcount@@=\count107 +\matrixsize@=\count108 + loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex + Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex + Xy-pic option: Graph feature v.3.11 loaded) loaded) +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex + Xy-pic option: PDF driver v.1.7 Xy-pic pdf driver: `color' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex loaded) +Xy-pic pdf driver: `curve' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex loaded) +Xy-pic pdf driver: `frame' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex loaded) +Xy-pic pdf driver: `line' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex loaded) +Xy-pic pdf driver: `rotate' extension support +(/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex loaded) loaded)) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty +Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package color Info: Driver file: pdftex.def on input line 147. + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols +) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count109 +\float@exts=\toks34 +\float@box=\box32 +\@float@everytoks=\toks35 +\@floatcapt=\box33 +) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks36 +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count110 +\Gm@cntv=\count111 +\c@Gm@tempcnt=\count112 +\Gm@bindingoffset=\dimen146 +\Gm@wd@mp=\dimen147 +\Gm@odd@mp=\dimen148 +\Gm@even@mp=\dimen149 +\Gm@layoutwidth=\dimen150 +\Gm@layoutheight=\dimen151 +\Gm@layouthoffset=\dimen152 +\Gm@layoutvoffset=\dimen153 +\Gm@dimlist=\toks37 +) +\c@lemma=\count113 + +(./compute_degree.aux) +\openout1 = `compute_degree.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 100. +LaTeX Font Info: ... okay on input line 100. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 100. +LaTeX Font Info: ... okay on input line 100. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 100. +LaTeX Font Info: ... okay on input line 100. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 100. +LaTeX Font Info: ... okay on input line 100. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 100. +LaTeX Font Info: ... okay on input line 100. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 100. +LaTeX Font Info: ... okay on input line 100. +LaTeX Font Info: Try loading font information for U+msa on input line 100. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Try loading font information for U+msb on input line 100. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Package xypdf Info: Line width: 0.39998pt on input line 100. + +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count114 +\scratchdimen=\dimen154 +\scratchbox=\box34 +\nofMPsegments=\count115 +\nofMParguments=\count116 +\everyMPshowfont=\toks38 +\MPscratchCnt=\count117 +\MPscratchDim=\dimen155 +\MPnumerator=\count118 +\makeMPintoPDFobject=\count119 +\everyMPtoPDFconversion=\toks39 +) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: <same size as paper> +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt) +* v-part:(T,H,B)=(85.35826pt, 674.33032pt, 85.35826pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=455.24411pt +* \textheight=674.33032pt +* \oddsidemargin=-1.1381pt +* \evensidemargin=-1.1381pt +* \topmargin=-23.91173pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=10.0pt +* \footskip=30.0pt +* \marginparwidth=57.0pt +* \marginparsep=11.0pt +* \columnsep=10.0pt +* \skip\footins=9.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +[1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] +LaTeX Font Info: Try loading font information for OMS+cmr on input line 217. + + +(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd +File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 217. + [2] [3] [4] +(./compute_degree.aux) ) +Here is how much of TeX's memory you used: + 5407 strings out of 494283 + 64833 string characters out of 6169691 + 184730 words of memory out of 5000000 + 8655 multiletter control sequences out of 15000+600000 + 15245 words of font info for 62 fonts, out of 8000000 for 9000 + 497 hyphenation exceptions out of 8191 + 27i,16n,24p,3246b,313s stack positions out of 5000i,500n,10000p,200000b,80000s +</usr/share/texlive/texmf-dist/fonts/type1/public/amsfo +nts/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm +/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc +10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb +></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr +/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share +/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></usr/share/texliv +e/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf +-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/f +onts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/ty +pe1/public/amsfonts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/publ +ic/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams +fonts/cm/cmsy5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c +m/cmsy7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti1 +0.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10 +.pfb> +Output written on compute_degree.pdf (4 pages, 176578 bytes). +PDF statistics: + 81 PDF objects out of 1000 (max. 8388607) + 58 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/tex/old/compute_degree.pdf 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 Binary files differ. diff --git a/tex/old/compute_degree.tex b/tex/old/compute_degree.tex @@ -0,0 +1,320 @@ +\documentclass[10pt,a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage[all]{xy} +\usepackage{amsfonts} +\usepackage{color} +\usepackage{amssymb} +\usepackage{float} +\usepackage[a4paper, top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry} + +\DeclareMathOperator{\alg}{alg} +\DeclareMathOperator{\obj}{Obj} +\DeclareMathOperator{\Hom}{Hom} +\DeclareMathOperator{\End}{End} +\DeclareMathOperator{\hol}{Hol} +\DeclareMathOperator{\aut}{Aut} +\DeclareMathOperator{\gal}{Gal} +\DeclareMathOperator{\id}{id} +\DeclareMathOperator{\res}{res} +\DeclareMathOperator{\im}{Im} +\DeclareMathOperator{\Id}{Id} +\DeclareMathOperator{\fib}{Fib} +\DeclareMathOperator{\spec}{Spec} +\DeclareMathOperator{\proj}{Proj} +\DeclareMathOperator{\trdeg}{trdeg} +\DeclareMathOperator{\car}{char} +\DeclareMathOperator{\Frac}{Frac} +\DeclareMathOperator{\reduced}{red} +\DeclareMathOperator{\real}{Re} +\DeclareMathOperator{\imag}{Im} +\DeclareMathOperator{\vol}{vol} +\DeclareMathOperator{\den}{den} +\DeclareMathOperator{\rank}{rank} +\DeclareMathOperator{\lcm}{lcm} +\DeclareMathOperator{\rad}{rad} +\DeclareMathOperator{\ord}{ord} +\DeclareMathOperator{\Br}{Br} +\DeclareMathOperator{\inv}{inv} +\DeclareMathOperator{\Nm}{Nm} +\DeclareMathOperator{\Tr}{Tr} +\DeclareMathOperator{\an}{an} +\DeclareMathOperator{\op}{op} +\DeclareMathOperator{\sep}{sep} +\DeclareMathOperator{\unr}{unr} +\DeclareMathOperator{\et}{\acute et} +\DeclareMathOperator{\ev}{ev} +\DeclareMathOperator{\gl}{GL} +\DeclareMathOperator{\SL}{SL} +\DeclareMathOperator{\mat}{Mat} +\DeclareMathOperator{\ab}{ab} +\DeclareMathOperator{\tors}{tors} +\DeclareMathOperator{\ed}{ed} + +\newcommand{\grp}{\textsc{Grp}} +\newcommand{\set}{\textsc{Set}} +\newcommand{\x}{\mathbf{x}} +\newcommand{\naturalto}{\overset{.}{\to}} +\newcommand{\qbar}{\overline{\mathbb{Q}}} +\newcommand{\zbar}{\overline{\mathbb{Z}}} + +\newcommand{\pro}{\mathbb{P}} +\newcommand{\aff}{\mathbb{A}} +\newcommand{\quat}{\mathbb{H}} +\newcommand{\rea}{\mathbb{R}} +\newcommand{\kiu}{\mathbb{Q}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\zee}{\mathbb{Z}} +\newcommand{\ow}{\mathcal{O}} +\newcommand{\mcx}{\mathcal{X}} +\newcommand{\mcy}{\mathcal{Y}} +\newcommand{\mcs}{\mathcal{S}} +\newcommand{\mca}{\mathcal{A}} +\newcommand{\mcb}{\mathcal{B}} +\newcommand{\mcf}{\mathcal{F}} +\newcommand{\mcg}{\mathcal{G}} +\newcommand{\mct}{\mathcal{T}} +\newcommand{\mcq}{\mathcal{Q}} +\newcommand{\mcr}{\mathcal{R}} +\newcommand{\adl}{\mathbf{A}} +\newcommand{\mbk}{\mathbf{k}} +\newcommand{\m}{\mathfrak{m}} +\newcommand{\p}{\mathfrak{p}} + +\newcommand{\kbar}{\overline{K}} + +\newtheorem{lemma}{Lemma} +\newtheorem{proposition}[lemma]{Proposition} +\newtheorem{conjecture}[lemma]{Conjecture} +\newtheorem{corollary}[lemma]{Corollary} +\newtheorem{definition}[lemma]{Definition} +\newtheorem{theorem}[lemma]{Theorem} +\newtheorem{cond-thm}[lemma]{Conditional Theorem} +\theoremstyle{definition} +\newtheorem{remark}[lemma]{Remark} + +\author{Sebastiano Tronto} + + +\begin{document} + +\begin{lemma} +\label{lemma_zero} +Let $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 +\begin{align*} +\left[\mathbb{Q}_{2^m}\left(\sqrt{H}\right):\mathbb{Q}_{2^m}\right]=\begin{cases} +\#\overline H/2 & \text{ if }m\geq 3\text{ and }\exists b\in H\text{ with }b\equiv\pm2\pmod{\mathbb{Q}^{\times 2}},\\ +\#\overline H&\text{ otherwise}. +\end{cases} +\end{align*} +where $\overline{H}$ is the image of $H\cdot \mathbb{Q}^{\times 2}$ in $\mathbb{Q}^\times/\mathbb{Q}^{\times 2}$. +\begin{proof} +Clearly 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$. + +Assume 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$: +\begin{align*} +d_1=\begin{cases} +0&\text{ if }g_1\neq\pm2\\ +1&\text{ if }g_1=\pm2 +\end{cases}, +&& +d_i=0 +\quad \text{ for $i=2,\dots, r$},\\ +h_1=\begin{cases} +0&\text{ if } 0\leq g_1\neq2\\ +1&\text{ if } -2\neq g_1<0\\ +2&\text{ if } g_1=\pm 2 +\end{cases}, && +h_i=\begin{cases} +0&\text{ if }g_i>0\\ +1&\text{ if }g_i<0 +\end{cases} +\quad \text{ for $i=2,\dots, r$}. +\end{align*} +Thus, keeping the notation of the aformentioned Theorem, we get +\begin{align*} +n_1=\min(1,d_1)=\begin{cases} +0&\text{ if }g_1\neq\pm2\\ +1&\text{ if }g_1=\pm2 +\end{cases},&& n_i=0\quad \text{ for $i=2,\dots, r$}. +\end{align*} +Thus we get +\begin{align*} +v_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=\\ +&=\begin{cases} +\max(3,m)-m+r-\sum_{i=1}^rn_i&\text{ if }\pm2\in H\\ +r-\sum_{i=1}^rn_i&\text{ if }\pm2\not \in H +\end{cases}\\ +&=\begin{cases} +1+r-1&\text{ if }m=2\text{ and }\pm2\in H\\ +r-1&\text{ if }m\geq3\text{ and }\pm2\in H\\ +r&\text{ if }\pm2\not\in H +\end{cases} +\end{align*} +which is what we want. + +Assume 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. +\end{proof} +\end{lemma} + +Let $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 +\begin{align} +\label{degree} +\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]. +\end{align} + +We will use the same notation as that of Remark 17 of Pietro's file. + +\section{Case $G\leq \mathbb{Q}_+^\times$} + +Assume that $G\leq \mathbb{Q}_+^\times$. In this case, by Remark 17, we have that +\begin{align*} +\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M =\mathbb{Q}_{2^n}\left(\sqrt{H}\right). +\end{align*} + +Let $\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 +\begin{align*} +\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]= +\begin{cases} +\#\overline H/2 & \text{if }n\geq 3\text{ and }2\in H,\\ +\#\overline H&\text{ otherwise}. +\end{cases} +\end{align*} + +\section{General case} + +Let $\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}$. + +As 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$. + +It 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: +\begin{align*} +\mathcal{B}_1,\dots,\mathcal{B}_{d-1},\mathcal{B}_{d+1},\dots,\mathcal{B}_L\subseteq \mathbb{Q}_+,\\ +g_0<0 \text{ and }\mathcal{B}_d\setminus \{g_0\}\subseteq \mathbb{Q}_+,\\ +d\geq 1. +\end{align*} + +We also let +\begin{align*} +N=\begin{cases} +\max(3,L)&\text{if }d\neq L,\\ +\max(3,L+1)&\text{if }d=L. +\end{cases} +\end{align*} + +\subsection{General case, $n=1(\leq d)$} +This 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 +\begin{align*} +\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]= +\#\overline{H'}, +\end{align*} +where $\#\overline{H'}$ is the image of $H'$ in $\mathbb{Q}^\times/\mathbb{Q}^{\times 2}$. + +\subsection{General case, $n=2\leq d$} +We consider two cases: +\begin{itemize} +\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}. +\item If $v_2(M)\geq 3$ we have +\begin{align*} +\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], +\end{align*} +which, by Lemma \ref{lemma_zero}, is given by $\#\overline{H}$ if $2 \in H$ and by $2\#\overline{H}$ otherwise. +\end{itemize} + +\subsection{General case, $3\leq n\leq d$} +We consider two cases: +\begin{itemize} +\item If $v_2(M)=3$, by lemma \ref{lemma_zero} we have +\begin{align*} +\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} +\#\overline H/2 & \text{ if }\pm 2\in H,\\ +\#\overline H&\text{ otherwise}. +\end{cases} +\end{align*} +\item If $v_2(M)\geq 4$ we have +\begin{align*} +\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], +\end{align*} +which, by Lemma \ref{lemma_zero}, is given by $\#\overline{H}$ if $2 \in H$ and by $2\#\overline{H}$ otherwise. +\end{itemize} + +\subsection{General case, $n\geq d+2$} +By the corresponding case in Remark 17, we simply have +\begin{align*} +\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\begin{cases} +\#\overline {H'}/2 & \text{ if }\pm 2\in H,\\ +\#\overline {H'}&\text{ otherwise}. +\end{cases} +\end{align*} +where $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}$. + +\subsection{General case, $n=d+1$} +We distinguish between some cases. +\begin{itemize} +\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 +\begin{align*} +\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'}. +\end{align*} +But we can be more precise and say that +\begin{align*} +\#\overline{H'}=\begin{cases} +2\#\overline{H}&\text{if }\sqrt{xs}\in\mathbb{Q}_M\text{ for some }x\in\mathcal{S}\text{ and }s\not\in \mathcal{S},\\ +\#\overline{H}&\text{otherwise}. +\end{cases} +\end{align*} +%\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$. +%\item Assume $n=2$, $2^{n+1}\,|\,M$ and either $v_2(g_0)>2$ or $g_0$ is odd. ({\color{red}TODO}) +\item Assume $n\geq 2$ and $2^{n+1}\nmid M$. Then +\begin{align*} +\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\begin{cases} +\#\overline H/2 & \text{ if }\pm 2\in H\text{ and }n\geq 3,\\ +\#\overline H&\text{ otherwise}. +\end{cases} +\end{align*} +\item Assume $n\geq 2$ and $2^{n+1}\,|\,M$. Following the notation of Remark 17, we have +\begin{align*} +\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) +\end{align*} +hence +\begin{align*} +\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]=\\ +&=\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]. +\end{align*} +We claim that +\begin{align*} +\left[\mathbb{Q}_{2^n}\left(\sqrt{\langle H, H'\rangle}\right):\mathbb{Q}_{2^n}\left(\sqrt{H}\right)\right]=\begin{cases} +1&\text{ if }H'=\emptyset\text{ or }H'=\{2\zeta_4\},\\ +2&\text{ otherwise}. +\end{cases} +\end{align*} +To 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?}). + +We conclude that +\begin{align*} +\left[\mathbb{Q}_{2^n}\left(G^{1/2^n}\right)\cap \mathbb{Q}_M:\mathbb{Q}_{2^n}\right]=\begin{cases} +\#\overline{H}/2&\text{ if } n\geq 3,\,\pm2 \in H\text{ and }H'\subseteq\{2\zeta_4\},\\ +\#\overline{H}&\text{ if }(n<3\text{ or }\pm2\not\in H)\text{ and }H'\subseteq \{2\zeta_4\},\\ +\#\overline{H}&\text{ if } n\geq 3,\,\pm2 \in H\text{ and }H'\not\subseteq\{2\zeta_4\},\\ +2\cdot \#\overline{H}&\text{ if }(n<3\text{ or }\pm2\not\in H)\text{ and }H'\not\subseteq \{2\zeta_4\}. +\end{cases} +\end{align*} +%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 +%\begin{align*} +%\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]=\\ +%=&\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]. +%\end{align*} +%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$ +\end{itemize} + +\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 + +\bibitem{DebryPerucca} +\textsc{Debry, C. - Perucca, A.}: \emph{Reductions of algebraic integers}, J. Number Theory, {\bf 167} (2016), 259--283. + +\bibitem{PeruccaSgobba} +\textsc{Perucca, A. - Sgobba, P.}: \emph{Kummer Theory for Number Fields}, preprint. + +\end{thebibliography} + +\end{document} +\ No newline at end of file diff --git a/tex/preprint.pdf b/tex/preprint.pdf Binary files differ.