|
Two quaternion algebras A, B over a common field F are isomorphic
algebras if and only if they share the same ramified places. Finding
an explicit isomorphism is much harder. Currently Magma embeds the
first standard generator of A into B and then finds another element
perpendicular to that image having the correct minimal polynomial.
In particular, this requires the construction of two points on a conic
(or equivalently, the solution of two norm equations) over quadratic
extensions of F.
Isomorphism: BoolElt Default: false
Given two quaternion algebras A, B over Q, Fq(X) with q odd or
a number field, this function returns true if and only if they are
isomorphic.
If the algebras are isomorphic and Isomorphism is set to true, an
isomorphism A to B is also returned.
Two orders S, T in a quaternion algebra A are isomorphic if and only
if they are conjugate in A.
In a definite algebra, we use the fact that this conjugation induces an
isometry of the quadratic Z- or Fq[X]-modules S and T equipped
with the (absolute) norm form.
Over an indefinite algebra, we use the fact that any connecting ideal I
having left order S and right order T must be isomorphic to a right
ideal of T. See [KV10] for details.
IsIsomorphic(S, T) : AlgAssVOrd[RngOrd], AlgAssVOrd[RngOrd] -> BoolElt, Map, AlgQuatElt
IsConjugate(S, T) : AlgAssVOrd, AlgAssVOrd -> BoolElt, Map, AlgQuatElt
FindElement: BoolElt Default: false
ConnectingIdeal: AlgAssVOrdIdl Default:
Given orders S and T in a quaternion algebra A over Q, Fq(X)
(with q odd) or a number field, this function returns true if and
only if S and T are isomorphic.
For indefinite algebras, the orders are currently required to be maximal.
If FindElement is set, the second return value is an isomorphism from
S to T and the third return value is an element a with T = a - 1 S a,
inducing the isomorphism. For indefinite algebras, this search is expensive and
may sometimes fail (as in IsIsomorphic for ideals, see below).
For indefinite algebras defined over number fields, part of the computation
may be faster when a connecting ideal is specified using the parameter
ConnectingIdeal; this should be an ideal with left order S and right
order T.
Given two isomorphic definite quaternion orders S, T over Z or Fq[X]
(with q odd), this function returns an algebra isomorphism. For orders
over number rings the intrinsic IsIsomorphic should be used with the
optional argument FindElement set.
Two right (left) ideals I, J of an order O in a quaternion algebra A are
isomorphic O-modules if and only if xI=J (Ix=J) for some x ∈A * .
To decide whether I and J are isomorphic, we test whether the
colon ideal
(J:I) = {x ∈A: xI ⊂J} (similarly defined if I, J are left ideals)
is principal, or not.
Over Z, to accomplish this task we compute a Minkowski-reduced Gram matrix
of (J:I) which produces an element of smallest norm.
Over Fq[X] we compute a Gram matrix which has dominant diagonal form
(see [Ger03]) which also produces a suitable element.
Over other number rings R, we search (J:I) for an element of the
required norm by computing a reduced basis. This method runs very quickly
for "reasonably small" input. (See [KV10], [DD08]
for further details.)
Given ideals I and J of the same order O in a quaternion algebra A
over Q, Fq(X) (with q odd) or a number field, this function returns
true if and only if the quaternion ideals I and J are isomorphic
(left or right) O-ideals.
If I and J are isomorphic, there exists some x∈A such that
xI=J (in the case of right O-ideals) or Ix=J (for left ideals).
For definite algebras, such an element x is always returned. For indefinite
algebras over Z or a number ring, a search for such an element is made,
and if one is found then it is returned.
Given a left (or right) ideal I over Z, Fq[X] or a number ring,
this function returns true if and only if I is a principal ideal;
if so, a generator is returned as the second value.
IsRightIsomorphic(I, J) : AlgQuatOrdIdl, AlgQuatOrdIdl -> BoolElt, Map, AlgQuatElt
Given two definite ideals over Z or Fq[X] (with q odd) with the
same left (or right) order S, this function returns true if and
only if they are isomorphic as S-modules. The isomorphism and the
transforming scalar in the quaternion algebra are returned as second and
third values if true.
IsRightIsomorphic(I, J) : AlgAssVOrdIdl[RngOrd], AlgAssVOrdIdl[RngOrd] -> BoolElt, AlgQuatElt
Given two left (or right) ideals I and J over a number ring, with the
same left order O, this function returns true if and only if they
are isomorphic as O-modules. The isomorphism is given by multiplication
as a second return value.
Given two isomorphic left ideals over a definite order S over Z or
Fq[X], this function returns the S-module isomorphism between them,
followed by the quaternion algebra element which defines the isomorphism
by right-multiplication.
Given two isomorphic right ideals over a definite order S over Z or
Fq[X], this function returns the S-module isomorphism between them,
followed by the quaternion algebra element which defines the isomorphism
by left-multiplication.
In this example, we create two quaternion algebras over F 7, show that
they are isomorphic and find an isomorphism between them.
> F<x> := RationalFunctionField( GF(7) );
> Q1 := QuaternionAlgebra< F | (x^2+x-1)*(x+1), x >;
> a := x^3 + x^2 + 3;
> b := x^13 + 4*x^11 + 2*x^10 + x^9 + 6*x^8 + 4*x^5 + 3*x^4 + x;
> Q2:= QuaternionAlgebra< F | a, b >;
> ok, phi:= IsIsomorphic(Q1, Q2 : Isomorphism);
> ok;
true
> forall{ <x,y> : x,y in Basis(Q1) | phi(x*y) eq phi(x)*phi(y) };
true
In this example, we create two ideals, show that they have isomorphic right
orders, and then explicitly exhibit the isomorphism.
> A := QuaternionAlgebra(37);
> S := MaximalOrder(A);
> ideals := LeftIdealClasses(S);
> _, I, J := Explode(ideals);
> R := RightOrder(I);
> Q := RightOrder(J);
> IsIsomorphic(R,Q);
true
Now we find an element pi which conjugates R to Q,
and then check that it has this property.
> _, pi := Isomorphism(R,Q);
> J := lideal< S | [ x*pi : x in Basis(J) ] >;
> RightOrder(J) eq R;
true
We construct two non-isomorphic left ideals with
the same left and right orders, then investigate their isomorphisms
as right ideals.
> S := QuaternionOrder(37);
> ideals := LeftIdealClasses(S);
> _, I, J := Explode(ideals);
> R := RightOrder(I);
> _, pi := Isomorphism(R,RightOrder(J));
> J := lideal< S | [ x*pi : x in Basis(J) ] >;
> IsLeftIsomorphic(I,J);
false
> IsRightIsomorphic(I,J);
true Mapping from: AlgQuatOrd: I to AlgQuatOrd: J given by a rule [no inverse]
1 + i - 2*k
> h, x := RightIsomorphism(I,J);
> y := [1,2,-1,3];
> y := &+[y[i]*b[i] : i in [1 .. 4]] where b is Basis(I);
> h(y);
[-73 15 31 4]
> x*y;
-73 + 15*i + 31*j + 4*k
The existence of an isomorphism as a right ideal is due to the fact
that the two-sided ideals of R do not have non-isomorphic
counterparts in S.
> TwoSidedIdealClasses(R);
[ Ideal with basis Pseudo-matrix over Integer Ring
1 * [1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
, Ideal with basis Pseudo-matrix over Integer Ring
1 * [37 0 32 18]
[ 0 37 10 2]
[ 0 0 1 0]
[ 0 0 0 1]
]
> TwoSidedIdealClasses(S);
[ Ideal with basis Pseudo-matrix over Integer Ring
1 * [1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
]
Thus while Conjugate(I)*J is in the non-principal R-ideal
class, the ideal I*Conjugate(J) represents the unique principal
ideal class of S.
We exhibit isomorphism testing for ideals of orders over number rings.
> P<x> := PolynomialRing(Rationals());
> F<b> := NumberField(x^3-3*x-1);
> Z_F := MaximalOrder(F);
> F := FieldOfFractions(Z_F);
> A<alpha,beta,alphabeta> := QuaternionAlgebra<F | -3, b>;
> O := Order([alpha,beta,alphabeta]);
> O;
Order of Quaternion Algebra with base ring F
with coefficient ring Maximal Equation Order with defining polynomial x^3 - 3*x
- 1 over its ground order
> I := ideal<O | 2>;
> I eq (I + ideal<O | 2>);
true
> I eq (I + ideal<O | 3>);
false
>
> Foo := InfinitePlaces(F);
> A := QuaternionAlgebra(ideal<Z_F | 2*3*5>, Foo);
> IsDefinite(A);
true
> O := MaximalOrder(A);
> I := rideal<O | Norm(O.2), O.2>;
> J := rideal<O | Norm(O.3), O.3>;
> IsIsomorphic(I, J);
true (F.2 + F.3) + (27/9190*F.1 - 143/9190*F.2 - 73/9190*F.3)*i +
(-251/27570*F.1 + 7/2757*F.2 + 10/2757*F.3)*k
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|