Using the inner product on a definite quaternion order, we can use basis reduction and lattice isomorphism techniques to compute isomorphisms between orders and ideals. Note that two ideals may be isomorphic as algebras (in the general sense, not implying existence of a unity), even if they share no left or right order. Since the isomorphism is given by conjugation, this implies, in particular, that they have the same norm. On the other hand, left and right isomorphisms are defined to be isomorphisms of modules, which in general scales the ideal norm by the norm some element which defines the isomorphism by right or left multiplication.
Given two definite quaternion orders or ideals over Z, returns true if and only if they are isomorphic as algebras.
Given two isomorphic definite quaternion orders, or ideals over Z, returns an isomorphism as algebras.
Given two definite ideals over Z with the same left order S, 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.
Given two isomorphism left ideals over a definite order S, returns the S-module isomorphism between them, followed by the quaternion algebra element which defines the isomorphism by right multiplication.
Given two definite ideals over Z with the same right order S, 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.
Given two isomorphism right ideals over a definite order S, returns the S-module isomorphism between them, followed by the quaternion algebra element which defines the isomorphism by left multiplication.
> 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); true > 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 := I![1,2,-1,3]; > h(y); 185 - 11*i - 27*j - 10*k > x*y; 185 - 11*i - 27*j - 10*kThe existence of an isomorphism as a right ideal is due to the fact that the two 2-sided ideals of R do not have non-isomorphic counterparts in S.
> TwoSidedIdealClasses(R);
[
Quaternion Order of level (37, 1) with base ring Integer Ring,
Quaternion Ideal of level (37, 1) with base ring Integer Ring
]
> TwoSidedIdealClasses(S);
[
Quaternion Order of level (37, 1) with base ring Integer Ring
]
Thus while Conjugate(I)*J is in the nonprincipal R-ideal
class, the ideal I*Conjugate(J) represents the unique principal
ideal class of S.