Attachment 'iwasawa_invariants.sage'

Download

   1 """
   2 Both of these should eventually become part of the pAdicLSeries class
   3 (or at least the ordinary version) THey could also be defined for general
   4 p-adic power series, but their usefulness in that setting is questionable
   5 """
   6 
   7 def powerseries_newton_polygon(self):
   8 	P = self
   9 	p = P.base_ring().prime()
  10 	aj = P.list()
  11         
  12 	"""
  13 	when P has coefficnets like O(p^8) the sequence of commands
  14 	f = P.polynomial(); f.newton_polygon() does not work so I replace
  15 	O(p^8) with zero.
  16 	"""
  17 	new_aj = []
  18         for j in range(len(aj)):
  19                 if aj[j] == 0:
  20                         new_aj.append(0)
  21                 else:
  22                         new_aj.append(aj[j])
  23 	K = Qp(p)
  24         R.<x> = K[]
  25         f = R(new_aj)
  26         newton = f.newton_polygon()
  27         return newton
  28 
  29 def powerseries_mu_lambda(self):
  30 	"""
  31 	takes a power series over Qp and returns its mu invariant
  32 	the user is responsible for knowing whether they have given
  33 	enough precision in the power series for the answer to be
  34 	reasonable
  35 	"""
  36 	P = self
  37 	newton_polygon = powerseries_newton_polygon(P)
  38 	mu_invariant = min([x[1] for x in newton_polygon])
  39 	lambda_invariant = min([x[0] for x in newton_polygon if x[1] == mu_invariant])
  40 	return (mu_invariant, lambda_invariant)
  41 
  42 def X1_optimal_curve(self):
  43 	"""
  44 	given an EllipticCurve, returns the curve
  45 	which is optimal for the X_1(N) parameterization. This is
  46 	given by the curve with the maximal area in its
  47 	fundamental parallelogram
  48 	"""
  49 	E = self
  50 	isogeny_class = E.isogeny_class()[0]
  51 	li = [(e.period_lattice().complex_area(), e) for e in isogeny_class]
  52 	li.sort()
  53 	return li[len(li)-1][1]
  54 
  55 def mu_invariant(self,p,N=None,X1_optimal=False):
  56 	"""
  57 	self = an elliptic curve
  58 	p = a prime
  59 	N = integer which gives degree to which we compute
  60 	  the p-adic L-series of E; higher N will give more sure answers
  61 	  large N become heavy on the processor
  62 
  63 	Find the mu-invariant of E at p
  64 	N tells me how long to look before I just return something
  65 	To compute quickly, we recommend N = 3.
  66 
  67 	Example:
  68 	E = EllipticCurve('11a3')
  69 	p = 5
  70 	mu = mu_invariant(E,p,N=3)
  71 	"""
  72 	E = self
  73 	correction = 0	
  74 	#switch to the X1-optimal curve
  75 	if X1_optimal == True:
  76 		Enew = X1_optimal_curve(E)
  77 		correction = Enew.isogeny_degree(E).ord(p)
  78 		E = Enew
  79 	if N == None:
  80 		N = max(3, floor(5*log(10)/log(p)) - 1)
  81 	if E.has_bad_reduction(p) or E.anlist(p)[p] % p == 0:	
  82 		raise ValueError, '%s does not have good ordinary reduction at %s' % (E.cremona_label(), p)
  83 	L = E.padic_lseries(p)
  84 	P = L.series(N)
  85 	return powerseries_mu_lambda(P)[0] + correction
  86 
  87 def lambda_invariant(self,p,N=None,X1_optimal=False):
  88 	"""
  89 	self = padic L-series attached to an elliptic curve
  90 
  91 	Find the lambda-invariant of E at p using the Newton polygon
  92 	If you want more accurate answers, you should raise N to compute more terms
  93 	in the E.padic_lseries(p). To compute quickly, we highly recommend
  94 	N = 3 (but less accurately)
  95 
  96 	Example:
  97         E = EllipticCurve('11a3')
  98         L = E.padic_lseries(5)
  99         lambda_inv = lambda_invariant(L,N=3)
 100 	"""
 101 	E = self
 102 	#switch to the X1-optimal curve
 103 	if X1_optimal == True:
 104 		E = X1_optimal_curve(E)
 105 
 106 	if N == None:
 107 		N = max(3, floor(5*log(10)/log(p)) - 1)
 108 	if E.has_bad_reduction(p) or E.anlist(p)[p] % p == 0:	
 109 		raise ValueError, '%s does not have good ordinary reduction at %s' % (E.cremona_label(), p)
 110 	L = E.padic_lseries(p)
 111 	P = L.series(N)
 112 	return powerseries_mu_lambda(P)

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2010-07-02 04:07:31, 1.7 KB) [[attachment:Teich-twist.sage]]
  • [get | view] (2010-07-01 03:45:20, 1.2 KB) [[attachment:abelian_field_dirichlet_group.sage]]
  • [get | view] (2010-06-29 16:42:10, 1.1 KB) [[attachment:approximation_of_integral.sage]]
  • [get | view] (2010-07-01 03:48:17, 3.6 KB) [[attachment:computing_modular_symbols_via_complex_integration.sage]]
  • [get | view] (2010-06-29 06:10:26, 1.3 KB) [[attachment:find_gamma.sage]]
  • [get | view] (2010-07-01 05:45:56, 3.3 KB) [[attachment:iwasawa_invariants.sage]]
  • [get | view] (2010-06-30 05:36:30, 1.5 KB) [[attachment:lp_teichmuller.sage]]
  • [get | view] (2010-06-29 00:30:16, 21.9 KB) [[attachment:lseries.m]]
  • [get | view] (2010-06-29 22:37:11, 573.6 KB) [[attachment:modular_symbols_and_padic_lfunctions.pdf]]
  • [get | view] (2010-06-29 00:29:47, 33.9 KB) [[attachment:pLseries.m]]
  • [get | view] (2010-06-29 22:35:43, 265.9 KB) [[attachment:padic_bsd.pdf]]
  • [get | view] (2010-07-02 04:06:18, 3.4 KB) [[attachment:prime5.txt]]
  • [get | view] (2010-07-02 04:06:47, 3.5 KB) [[attachment:prime7.txt]]
  • [get | view] (2010-07-01 07:10:40, 64.1 KB) [[attachment:sha_data_3_11a1_10000.txt]]
  • [get | view] (2010-07-01 07:10:58, 8.5 KB) [[attachment:sha_data_3_11a3_1000.txt]]
  • [get | view] (2010-07-01 07:11:20, 63.9 KB) [[attachment:sha_data_3_42a1_10000.txt]]
  • [get | view] (2010-06-29 00:29:16, 5.3 KB) [[attachment:sha_fast.sage]]
  • [get | view] (2010-07-01 07:18:18, 8.1 KB) [[attachment:sha_v2.sage]]
  • [get | view] (2010-07-01 22:23:54, 1.8 KB) [[attachment:teich_twist.sage]]
  • [get | view] (2010-06-29 04:02:51, 0.7 KB) [[attachment:test.sage]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.