Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Small Minkowski bounds for small degree number fields.

73 views
#Data of the minimum discrimiant (from nftables) for degree <= 7 ︠0a4c5165-7a6b-45c6-8261-a86c428a5720s︠ min_discs = [[2,0,-3],\ [2,2,5],\ [3,1,-31],\ [3,3,49],\ [4,0,117],\ [4,2,-275],\ [4,4,725],\ [5,1,1609],\ [5,3,-4511],\ [5,5,14641],\ [6,0,-9747],\ [6,2,28037],\ [6,4,-92779],\ [6,6,300125],\ [7,1,-184607],\ [7,3,612233],\ [7,5,-2306599],\ [7,7,20134393]] len(min_discs)
18
colors = rainbow(len(min_discs))
i = len(min_discs)-1 P = plot(2,(x,1,min_discs[i][2].abs()*10),color='black',thickness=0.75, title=r'Minkowski bounds for number fields of degree $n$ at most 7 with $r_1$ real places', title_pos=[0.5,1.2]) for i in range(0, len(min_discs)): P += plot_loglog((4/pi)^((min_discs[i][0]-min_discs[i][1])/2) * min_discs[i][0].factorial() / min_discs[i][0]^min_discs[i][0] * sqrt(x), (x, min_discs[i][2].abs(), min_discs[i][2].abs()*10), color=colors[i], legend_label=min_discs[i][0:2])
P.show(ymax=28, legend_loc='right', legend_title=r'$[n,r_1]$')
P.save('Minkowski_bounds.pdf', ymax=28, legend_loc='right', legend_title=r'$[n,r_1]$')
P.save('Minkowski_bounds.png', ymax=28, legend_loc='right', legend_title=r'$[n,r_1]$', figsize=[10.24,5.12])
#The above plot shows that one needs only check [n,r_1] with n <=4, r_1 <= 3 ︠01e5cc38-c598-48e0-9f02-4b11a7ed8825s︠ import re R = PolynomialRing(ZZ, 'x')
nr1s = [(n,r1) for n, r1, _ in min_discs if n <= 4 and r1 <= 3] counts = dict(zip(nr1s, [0]*6)) fields = [] n = 2 r1 = 0 for d in srange(2, 20): if not is_fundamental_discriminant(-d): continue K = QuadraticField(-d) if K.minkowski_bound() < 2: counts[n,r1] += 1 fields.append(K) else: print "Break condition reached at Delta =", -d, "with bound =", K.minkowski_bound().n() break r1 = 2 for d in srange(2, 20): if not is_fundamental_discriminant(d): continue K = QuadraticField(d) if K.minkowski_bound() < 2: counts[n,r1] += 1 fields.append(K) else: print "Break condition reached at Delta =", d, "with bound =", K.minkowski_bound().n() break for n, r1 in nr1s[2:]: file = open('T%s%s.gp'%(n,r1),'r') for line in file: tokens = re.split("[\[\],]", line[1:-1]) coeffs = tokens[tokens.index('')+1:] coeffs = coeffs[:coeffs.index('')] coeffs.reverse() K = NumberField(R([ZZ(aa) for aa in coeffs]), name='a') if K.minkowski_bound() < 2: counts[n,r1] += 1 fields.append(K) else: print "Break condition reached at Delta = " + tokens[0], "with bound =", K.minkowski_bound().n() break
Break condition reached at Delta = -11 with bound = 2.11142891906473 Break condition reached at Delta = 17 with bound = 2.06155281280883 Break condition reached at Delta = -59 with bound = 2.17331967001348 Break condition reached at Delta = 81 with bound = 2.00000000000000 Break condition reached at Delta = 189 with bound = 2.08940397094590 Break condition reached at Delta = -283 with bound = 2.00805041776001
for aa in nr1s: print aa, counts[aa]
(2, 0) 4 (2, 2) 4 (3, 1) 3 (3, 3) 1 (4, 0) 3 (4, 2) 1
save(fields,'Number_fields_MK_less_than_2.sobj')