Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168754
Image: ubuntu2004
This code is a test for lawful curves. Here I downloaded a list of elliptic curves over QQ(X^2+2) compiled by a student of William Stein. I ran this code on the list of those curves.
f = open('/home/sage/Desktop/table2.txt') listc = f.read().split('\n')
def quadr_symbol(a,P): av = a.valuation(P) if av%2==1: return -1 pi = P.number_field().uniformizer(P) b = a / pi^av return quadr_residue_symbol(b)
def quadr_residue_symbol(a,P): Kr=P.residue_field() return Kr(a).is_square() and 1 or -1
def cubic_residue_symbol(a,P): Kr=P.residue_field() try: Kr(a).nth_root(3) except: return -1 finally: return 1
def cubic_symbol(a,P): av = a.valuation(P) if av%3!=0: return -1 pi = P.number_field().uniformizer(P) b = a / pi^av return cubic_residue_symbol(b)
def is_irreducible_complete(gamma,P): if gamma.is_irreducible() == False: return False else: L.<b>=K.extension(gamma) l1=len(K.prime_factors(P)) if l1>1: return False else: return True
def local_lawful_2(E,P): disc=E.discriminant() x=polygen(K) gamma=x^8-6*E.c4()*x^4-8*E.c6()*x^2-3*(E.c4())^2 if quadr_residue_symbol(-3,P)==1 and is_irreducible_complete(gamma)==False: return True #########################NEED TESTING ################################### elif quadr_residue_symbol(-3,P)!=1 and cubic_symbol(disc,P)==1: L.<b>=K.extension(gamma) l1=len(L.prime_factors(P)) L1.<c>=L.extension(x^2+3) l2=len(L1.prime_factors(P)) if l1<l2: return True else: return False else: return False
def local_lawful_2(E,P): disc=E.discriminant() x=polygen(K) gamma=x^8-6*E.c4()*x^4-8*E.c6()*x^2-3*(E.c4())^2 if quadr_residue_symbol(-3,P)==1 and is_irreducible_complete(gamma,P)==False: return True #########################NEED TESTING ################################### elif quadr_residue_symbol(-3,P)!=1 and cubic_symbol(disc,P)==1: L.<b>=K.extension(gamma) l1=len(L.prime_factors(P)) L1.<c>=L.extension(x^2+3) l2=len(L1.prime_factors(P)) if l1<l2: return True else: return False else: return False
def is_lawful_local(E,P): K=E.base_field() Kr=P.residue_field() E1=E.local_minimal_model(P) ##################################################### disc=E1.discriminant() delta=disc.valuation(P) if delta==0: return True elif delta>0 and E1.j_invariant().valuation(P)<0: return False else: if Kr.characteristic()%2== 0: return local_lawful_2(E1,P) else: k=str(E1.kodaira_symbol(P)) l=quadr_residue_symbol(-1,P) #print (k,l,disc) ################################## if k=='I0*': return True #################################### elif (k=='III' or k=='III*') and l==1: return True #################################### elif (k=='II' or k=='II*' or k=='IV' or k=='IV*') and quadr_symbol(disc,P)==1: return True ##################################### else: return False ############################################
def is_lawful(E): K=E.base_field() (x,y)=K.signature() if x>0: return False if not E.j_invariant().is_integral(): return False for P,_ in E.conductor().factor(): if not is_lawful_local(E,P): return False return True
#This is to check the program# K.<a> = NumberField(x^2+1) E=EllipticCurve(K, '49a1') is_lawful(E)
True
K.<a> = NumberField(x^2+2) for c in listc: invs = c.split(); j = K(invs[4]) if j.is_integral() and j not in (0,1728,-1728): E = EllipticCurve(K,eval(invs[1])) if is_lawful(E)==True: print E