|
Let A be a quaternion algebra over Q, Fq(X) (with q odd) or a
number field F with defining elements a, b, and let v be
a place of F. If v is unramified in A
(i.e. A tensor F Fv isomorphic to M2(Fv), we define the Hilbert symbol
(a, b)v to be 1, and otherwise we define (a, b)v= - 1.
HilbertSymbol(a, b, p) : FldFunRatElt, FldFunRatElt, RngElt p -> RngIntElt
HilbertSymbol(a, b, p) : FldNumElt, FldNumElt, RngOrdIdl -> RngIntElt
HilbertSymbol(A, p) : AlgQuat[FldRat], RngIntElt -> RngIntElt
HilbertSymbol(A, p) : AlgQuat[FldFunRat], RngElt -> RngIntElt
HilbertSymbol(A, p) : AlgQuat, RngOrdIdl -> RngIntElt
Al: MonStgElt Default: "NormResidueSymbol"
Computes the Hilbert symbol for the quaternion algebra A over F,
namely (a, b)p, where a, b ∈F and p is either a prime
(if a, b ∈Q or Fq(X)) or a prime ideal. If a, b ∈Q,
by default table-lookup is used to compute the Hilbert symbol; one
can optionally insist on using the full algorithm by setting the
parameter Al to the value "Evaluate".
IsUnramified(p, A) : RngElt, AlgQuat -> BoolElt
IsRamified(p, A) : RngUPol, AlgQuat[FldFunRat] -> BoolElt
IsUnramified(p, A) : RngUPol, AlgQuat[FldFunRat] -> BoolElt
IsRamified(p, A) : RngOrdIdl, AlgQuat[FldAlg] -> BoolElt
IsUnramified(p, A) : RngOrdIdl, AlgQuat[FldAlg] -> BoolElt
Returns true if and only if the prime or prime ideal p is ramified
(unramified) in the quaternion algebra A.
We first verify the correctness of all Hilbert symbols over the rationals.
> QQ := Rationals();
> for a,b in [1..8] do
> bl := HilbertSymbol(QQ ! a, QQ ! b,2 : Al := "Evaluate")
> eq NormResidueSymbol(a,b,2);
> print <a,b,bl>;
> if not bl then
> break a;
> end if;
> end for;
<1, 1, true>
<1, 2, true>
<1, 3, true>
...
For a second test, we input a quaternion algebra which is unramified at all finite
places.
> P<x> := PolynomialRing(Rationals());
> F<b> := NumberField(x^3-3*x-1);
> Z_F := MaximalOrder(F);
> A := QuaternionAlgebra<F | -3,b>;
> symbols := [];
> for p in [p : p in [2..100] | IsPrime(p)] do
> pps := Decomposition(Z_F,p);
> for pp in pps do
> Append(~symbols,HilbertSymbol(A,pp[1]));
> end for;
> end for;
> symbols;
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
Finally, we test "random" quaternion algebras over quadratic extensions at
even primes, the hardest case. We use the fact that the quaternion algebra (a, b)
is ramified at a prime ideal p if and only if b is a norm from the extension
F(Sqrt(a)), so we can test this condition using IsLocalNorm. Note that
this takes substantially more time.
> for c in [2,-2,6,-6,-1,3,-3] do
> K<s> := NumberField(x^2-c);
> Z_K := MaximalOrder(K);
> Z_Kmod8, f8 := quo<Z_K | 8>;
> PPK<xK> := PolynomialRing(K);
> for i := 1 to 10 do
> S := [x+y*Z_K.2 : x,y in [0..7] | x*y ne 0];
> a := Random(S);
> b := Random(S);
> A := QuaternionAlgebra<K | a,b>;
> for pp in Decomposition(Z_K,2) do
> hsym := HilbertSymbol(A,pp[1]);
> if not IsIrreducible(xK^2-a) then
> print <c, a, b, hsym eq 1>;
> if hsym ne 1 then
> break c;
> end if;
> else
> lclsym := IsLocalNorm(AbelianExtension(ext<K | xK^2-a>),Z_K ! b,pp[1]);
> bl := (hsym eq 1) eq lclsym;
> print <c, a, b, bl>;
> if not bl then
> break c;
> end if;
> end if;
> end for;
> end for;
> end for;
<2, 5/1*Z_K.1 + 3/1*Z_K.2, Z_K.1 + 7/1*Z_K.2, true>
<2, 6/1*Z_K.1 + 4/1*Z_K.2, 4/1*Z_K.1 + Z_K.2, true>
<2, 7/1*Z_K.1 + Z_K.2, 2/1*Z_K.1 + 2/1*Z_K.2, true>
...
pMatrixRing(A, p) : AlgQuat, RngElt -> AlgMat, Map, Map
pMatrixRing(O, p) : AlgAssVOrd, RngOrdIdl -> AlgMat, Map, Map
pMatrixRing(O, p) : AlgQuatOrd, RngElt -> AlgMat, Map, Map
pMatrixRing(O, p) : AlgQuatOrd[RngInt], RngInt -> AlgMat, Map, Map
Precision: RngIntElt Default:
Let A be a quaternion algebra A over a field F where F is the
rationals, a number field or Fq(x) with q odd. Given A and
a prime (ideal) p of the ring of integers R of F such that p
is unramified in A, this function returns the matrix ring over the
completion Fp of F at p, a map from A to M2(Fp) and the
embedding F to Fp.
Given a p-maximal order O in A, the map from A to M2(Fp)
induces a map from O to <Meta>-2(Rp).
HasEmbedding(K, A) : Fld, AlgQuat -> BoolElt, AlgQuatElt, Map
ComputeEmbedding: BoolElt Default: false
Given a quaternion algebra A defined over Q, Fq(X)
(with q odd) or a number field F and K a quadratic extension
of F, the function returns true if and only if there exists an
embedding K to A over F. This is done by comparison of ramified
places in K and A (see [Vig80, Cor. III.3.5]).
If no embedding exists, the second return value
will be a witness place. If an embedding exists and the optional
argument ComputeEmbedding is set to true, the second and
third return values contain the result of a call to
Embed as described below.
Al: MonStgElt Default: "NormEquation"
Given a quaternion algebra A defined over Q, Fq(X)
(with q odd) or
a number field F and K a quadratic extension of F,
returns an embedding K to A over F, given as
an element of A, the image of the primitive
generator of K, and the map K to A.
The algorithm by default involves solving a relative
norm equation. Alternatively, a naive search algorithm
may be selected by setting the optional parameter
Al:="Search".
If there is no embedding, a runtime error occurs
(or the "Search" runs forever).
To check whether an embedding exists, use HasEmbedding
(see immediately above).
Al: MonStgElt Default: "NormEquation"
Given a quadratic order Oc with base number ring R
and a quaternion order O with base ring R, the function
computes an embedding Oc -> O over R.
It returns the image of the second generator Oc.2 of
Oc; secondly it returns the embedding map Oc to O.
The algorithm by default involves solving a relative
norm equation. Alternatively, a naive search algorithm
may be selected by setting the optional parameter
Al:="Search".
Notes. Let K be the number field containing Oc.
(i) Oc.1, Oc.2 are the generators of Oc as a
module, and Oc.2 is unrelated to K.1,
where K is the number field containing Oc.
(ii) To check whether an embedding of K into the algebra exists,
one can use HasEmbedding(K, Algebra(O) : ComputeEmbedding:=false).
> F<b> := NumberField(Polynomial([1,-3,0,1]));
> A := QuaternionAlgebra<F | -3, b>;
> K := ext<F | Polynomial([2,-1,1])>;
> mu, iota := Embed(K, A);
> mu;
1/2 + 1/6*(-2*b^2 + 2*b + 7)*i + 1/2*(2*b^2 + b - 6)*j + 1/6*(-2*b^2 - b + 4)*k
> MinimalPolynomial(mu);
$.1^2 - $.1 + 2
> iota(K.1) eq mu;
true
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|