Eichler Orders
Miriam Ciavarella Università degli Studi di Torino Italy miriam.ciavarella@unito.it
Marina Marchisio Università degli Studi di Torino Italy marina.marchisio@unito.it
Introduction
The aim of this worsheet is to give an explicit description of some Eichler orders of an indefinite quaternion algebra B defined over Q, [V80], [CM2007]. Let we denote by the Legendre symbol. Let we fix a representation of B as a pair {-dN,p}, where d is the discriminant of B (e.i. the product of a finite even number of primes), N is a positive integer prime to d and p is a prime number such that:
for each
for each odd prime factor q of N.
Given an indefinite quaternion algebra B of discriminant d, it is always possible to find a prime number p as above, su that B can be represented as {-dN,p}. Unfortunately it does not exist an interval in which we are sure to find it. For this reason we give a procedure primo in Maple which returns, if it exists, a prime number p as above in the possible range [MinBound,MaxBound]; if it returns the null value, we can change the input data MinBound,MaxBound and try again.
This means that B can be expressed as where
Following Hashimoto [Has95] an Eichler order of level N of B can be expressed as the Z-lattice R(N)=with
where a is an integer number satisfying . This construction provides a very useful tool for working with Eichler orders. However it has the limitation of not respecting the natural inclusion of an Eichler order of level M in an Eichler order of level N for N dividing M.
Let q be a prime number not dividing the discriminant of B; it is well known that there are two natural inclusion maps of in R(N). In [CT2007] we provide a basis for a chain on Eichler orders in B. Our last procedure is based on this work and returns two bases: the first one is a basis of an Eichler order on level Nq in B and the second one is a basis of the other copy of R(Nq) in R(N) .
Initialization
restart:
with(numtheory):with(padic):
Representation of B as a pair {-dN,p}
Procedure Definition
We give a new procedure primo in Maple for computing a prime p as in the introduction.
Input data are:
Discr: the discriminant of the quaternion algebra B; it is a positive integer number, which is the product of a finite even number of primes;
LevelN: a positive integer prime to d;
MinBound: a positive integer number;
MaxBound: a positive integer number greater then MinBound.
Output data are:
or a prime number p contained in [MinBound,MaxBound], satisfying the conditions as in the introduction;
or a sequence of prime numbers contained in [MinBound,MaxBound], satisfying the conditions as in the introduction;
or the null value. In this last case we try to change the parameters MinBound and MaxBound.
primo:=proc(Discr,LevelN,MinBound,MaxBound) local d,N,Md,MN,a,b,l,t,p; if gcd(Discr,LevelN)<>1 then print("LevelN must be a number prime to the discriminant") end if: if MinBound>MaxBound then print("MinBound must be < MaxBound") end if: d:=Discr/(2^ordp(Discr,2)): N:=LevelN/(2^ordp(LevelN,2)): Md:=factorset(d): MN:=factorset(N): for p from MinBound to MaxBound do if type(p,prime) and modp(p,4)=1 then a:=1: for l from 1 to nops(Md) do if modp(p^((op(l,Md)-1)/2),op(l,Md))=(op(l,Md)-1) then a:=a*1 else a:=a*0 end if end do: b:=1: if LevelN>1 then for t from 1 to nops(MN) do if (modp(p^((op(t,MN)-1)/2),op(t,MN)))=1 then b:=b*1 else b:=b*0 end if end do end if: if a*b=1 and gcd(LevelN*Discr,2)=1 then print(p): end if: if a*b=1 and gcd(Discr,2)<>1 and modp(p,8)=5 then print(p): end if: if a*b=1 and gcd(LevelN,2)<>1 and modp(p,8)=1 then print(p): end if : end if end do end proc;
Examples
primo(35,5,5,20);
primo(35,3,20,5);
primo(35,3,5,10);
primo(35,3,5,20);
primo(35,3,5,8*35*3);
Basis for a Eichler Order of level N in B={-dN,p}
We give a new procedure EichlerN in Maple for computing a basis of an Eichler Order of level N (=LevelN) of B. This computation is based on a result of Hashimoto [Has95].
Discr: is the discriminant of the quaternion algebra B; it is a positive integer number, which is the product of a finite even number of primes;
LevelN: a positive integer prime to d, which is the level of the Eichler order;
p: a prime number satisfying the conditions as in the introduction. We can find it using the procedure primo;
Output data are the elements of a basis of the Eichler order of level N in B.
EichlerN:=proc(Discr,LevelN,p) local e1,e2,e3,e4,a; if gcd(Discr,LevelN)<>1 then print("Insert a level prime to the discriminant") else for a from 1 while modp(a^2*Discr*LevelN+1,p)<>0 do a:=a+1: end do: e1:=1: e2:=(1+j)/2: e3:=(i+k)/2: e4:=(a*Discr*LevelN*j+k)/p: print({e1,e2,e3,e4}): end if end proc;
EichlerN(35,5,13);
EichlerN(35,3,13);
Integera
We give a simple but useful procedure Integera in Maple for computing an integer a such that .
N: a positive integer prime to d;
Output data an integer number a such that .
Integera:=proc(Discr,N,p) local a; if gcd(Discr,N)<>1 then print("Insert N prime to the discriminant") else for a from 1 while modp(a^2*Discr*N+1,p)<>0 do a:=a+1: end do: print(a): end if end proc;
Integera(35,5,13);
Integera(35,3,13);
Basis for a Eichler Order R(Nq) of level Nq in B={-dN,p}
We give a new procedure EichlerNq in Maple for computing a basis of an Eichler Order of level Nq of B. This computation is based on a recent result of Ciavarella-Terracini [CT2007].
LevelN: a positive integer prime to d, which is the level of the Eichle order;
a: an integer number such that . We can find it using the procedure Integera;
q: a prime number, different from p and not dividing the discriminant of B.
Output data are a basis of the Eichler order R(Nq) in B and a basis of the twisted copy of R(Nq) in R(N).
EichlerNq:=proc(Discr,LevelN,p,a,q) local e1,e2,e3,e4,sol,x,y,c1,c2,f1,f2,f3,f4,g1,g2,g3,g4,c,cp,c4,AB; e1:=1: e2:=(1+j)/2: e3:=(i+k)/2: e4:=(a*Discr*LevelN*j+k)/p: if gcd(Discr,LevelN)<>1 then print("Insert a level prime to the discriminant"): return: end if: if type(q,prime)=false then print("q must be a prime number"): return: end if: if q=p then print("Insert a prime number q different from p"): return: end if: if gcd(q,Discr)<>1 then print("Insert a prime number q not dividing the discriminant of the quaternion algebra"): return: end if: if gcd(q,Discr*p)=1 and modp(p^((q-1)/2),q)=(q-1) then for x from 0 to (q-1) do for y from 0 to (q-1) do if modp(x^2-p*y^2+Discr*LevelN,q)=0 then break: end if: end do: if modp(x^2-p*y^2+Discr*LevelN,q)=0 then break: end if: end do: c1:=(y-x) mod q: c2:=p^(-1) mod q: f1:=e1: f2:=-c1*e2+e3: f3:=-2*c2*(a*Discr*LevelN-x)*e2+e4: f4:=q*e2: g1:=e1: g2:=c1*e2+e3: g3:=-2*c2*(a*Discr*LevelN+x)*e2+e4: g4:=q*e2: print(B(R(LevelN*q))={f1,f2,f3,f4}): print(B(twistR(LevelN*q))={g1,g2,g3,g4}): end if: if gcd(q,Discr)=1 and modp(p^((q-1)/2),q)=1 then c:=(p-sqrt(p))/2 mod q: cp:=(p+sqrt(p))/2: f1:=e1: f2:=e2: f3:=e3-c*e4: f4:=q*e4: g1:=e1: g2:=e2: g3:=e3-cp*e4: g4:=q*e4: print(B(R(LevelN*q))={f1,f2,f3,f4}): print(B(twistR(LevelN*q))={g1,g2,g3,g4}): end if: end proc;
References
[CT2007] Miriam Ciavarella and Lea Terracini, Some Explicit Constructions of Integral Structures in Quaternion Algebras, PrePrint, 2007.
[CM2007] Miriam Ciavarella and Marina Marchisio, Quaternion Algebras, Maplesoft Maple 11 [http://www.maplesoft.com], 2007.
[Has95] Ki-ichiro Hashimoto, Explicit form of quaternion modular embeddings, Osaka J. Math., 32 n. 3, 533-546,1995.
[V80] Marie-France Vigneras, Arithmétique des Algèbres de Quaternions, Lecture Notes in Mathematics, 800, Springer-Verlag, 1980.
Legal Notice: The copyright for this application is owned by the author(s). Neither Maplesoft nor the author are responsible for any errors contained within and are not liable for any damages resulting from the use of this material. This application is intended for non-commercial, non-profit use only. Contact the author for permission if you wish to use this application in for-profit activities.