Units and Unit Groups

Let S be a definite quaternion order over Z, Fq[X] with q odd, or a number ring. In the first two cases, the unit group of S is finite and can be read off any reduced Gram matrix of S. If the base ring of S is some number ring R, then an explicit description of the finite quotient S * /R * is given in [Vig76].

NormOneGroup(S) : AlgAssVOrd -> GrpPerm, Map
NormOneGroup(S) : AlgQuatOrd -> GrpAb, Map
    ModScalars: BoolElt                 Default: false
Returns a group G isomorphic to the group S1 of elements in S with reduced norm 1 (unless ModScalars is set, in which case G is isomorphic to S1 modulo {∓ 1}).

The second object returned is a map from G to S expressing the isomorphism.

Units(S) : AlgQuatOrd -> SeqEnum
Units(S) : AlgAssVOrd -> SeqEnum
This intrinsic computes the set of units S * for the definite order S. When the base ring of S is Z or Fq[X], the returned sequence contains all units of S; when the base field is a number field, the returned sequence contains representatives modulo the unit group of the base ring (since the unit group is infinite in general).
MultiplicativeGroup(S) : AlgQuatOrd[RngInt] -> GrpPerm, Map
UnitGroup(S) : AlgQuatOrd[RngInt] -> GrpPerm, Map
MultiplicativeGroup(S) : AlgQuatOrd[RngUPol] -> GrpAb, Map
UnitGroup(S) : AlgQuatOrd[RngUPol] -> GrpAb, Map
MultiplicativeGroup(S) : AlgAssVOrd[RngOrd] -> GrpPerm, Map
UnitGroup(S) : AlgAssVOrd[RngOrd] -> GrpPerm, Map
This intrinsic computes the unit group S * of the definite quaternion order S. The function returns an abstract group G, and a map from G to S. When the base ring of S is Z or Fq[X], G represents the full group of units of S; when the base field is a number field, G represents the unit group of S modulo the unit group of the base ring (since the unit group is infinite in general).

Example AlgQuat_Unit_Group (H93E27)

The following example illustrates the unit group computation for an order in a definite quaternion algebra over Q.
> A := QuaternionAlgebra< RationalField() | -1, -1 >;
> S1 := MaximalOrder(A);
> S2 := QuaternionOrder(A,2);
> G1, h1 := UnitGroup(S1);
> #G1;
24
> [ A | h1(g) : g in G1 ];
[ 1, -1, -j, -k, i, -1/2 + 1/2*i - 1/2*j - 1/2*k, 1/2 + 1/2*i - 1/2*j + 1/2*k,
-1/2 - 1/2*i - 1/2*j + 1/2*k, -1/2 + 1/2*i + 1/2*j + 1/2*k, 1/2 - 1/2*i - 1/2*j
- 1/2*k, 1/2 + 1/2*i + 1/2*j - 1/2*k, 1/2 - 1/2*i + 1/2*j + 1/2*k, -1/2 - 1/2*i
+ 1/2*j - 1/2*k, 1/2 - 1/2*i + 1/2*j - 1/2*k, -1/2 + 1/2*i + 1/2*j - 1/2*k, 1/2
+ 1/2*i - 1/2*j - 1/2*k, -1/2 - 1/2*i - 1/2*j - 1/2*k, 1/2 + 1/2*i + 1/2*j +
1/2*k, -1/2 - 1/2*i + 1/2*j + 1/2*k, -1/2 + 1/2*i - 1/2*j + 1/2*k, 1/2 - 1/2*i -
1/2*j + 1/2*k, k, -i, j ]
> G2, h2 := UnitGroup(S2);
> #G2;
8
> [ A | h2(g) : g in G2 ];
[ 1, -1, -j, j, k, -k, -i, i ]
The unit groups of orders in indefinite quaternion algebras A are infinite arithmetic groups, which are twisted analogues of the groups SL2(Z) and their families of subgroups. These are studied in relation to their actions on the upper half complex plane, via an embedding in GL2(R) provided by some isomorphism A tensor R isomorphic to M2(R).

Example AlgQuat_Unit_Group_NumberRing (H93E28)

Now we exhibit unit group computations over a number ring.
> P<x> := PolynomialRing(Rationals());
> F := NumberField(x^3-3*x-1);
> Z_F := MaximalOrder(F);
> Foo := InfinitePlaces(F);
We use SetSeed since the following line makes random choices.
> SetSeed(1);
> A := QuaternionAlgebra(ideal<Z_F | 2>, Foo);
> IsDefinite(A);
true
> O := MaximalOrder(A);
> U, h := UnitGroup(O);
> U;
Permutation group U acting on a set of cardinality 12
Order = 12 = 2^2 * 3
    Id(U)
    (1, 2, 4)(3, 6, 7)(5, 9, 10)(8, 12, 11)
    (1, 3)(2, 5)(4, 8)(6, 11)(7, 9)(10, 12)
> #Units(O);
12
V2.28, 13 July 2023