# The L2-quotient algorithm

The L2-quotient algorithm computes for a finitely presented group all quotients isomorphic to PSL(2,q) or PGL(2,q), simultaneously for all prime powers q.

A Magma implementation is available here: l2.tgz. This includes an algorithm to compute minimal associated primes.
The algorithm requires a Magma version >= 2.19.

To use the algorithm, after starting magma, type

```> Attach("minass.magma");
> AttachSpec("l2.spec");
```

Note that the algorithm does not return images onto the groups PSL(2,2) = Sym(3), PSL(2,3) = Alt(4), and PSL(2,4) = PSL(2,5) = Alt(5).

## Basic usage

### L2Quotients

The main method is L2Quotients, which takes a finitely presented group and computes all L2-quotients.

```> G := Group< a,b | a^2, b^3, (a*b)^7, (a,b)^11 >;
> L2Quotients(G);
[
L_2(43)
]
> H := Group< a,b,c | a^3, b^7, c^19, (a*b)^2, (a*c)^2, (b*c)^2, (a*b*c)^2 >;
> L2Quotients(H);
[
L_2(113)
]
```
This means that G has PSL(2,43) as quotient, but no other PSL(2,q) or PGL(2,q) is a quotient of G. Similarly, the only L2-quotient of H is PSL(2,113).
```> G := Group< a,b | a^2, b^3, (a*b)^16, (a,b)^11 >;
> L2Quotients(G);
[
PGL(2,23),
PGL(2,23),
PGL(2,463)
]
```
In this example, PGL(2,23) occurs twice. This means that there are two epimorphisms of G onto PGL(2,23) which do not differ by an automorphism of PGL(2,23). In other words, the kernels of the epimorphisms are distinct.

Some groups have infinitely many L2-quotients. This is indicated by one of the L2-quotients L_2(infty^k), L_2(p^(infty^d)), or L_2(infty^(infty^d)). See below for an interpretation of this output, and how to use Magma to get more information about the quotients.
```> G := Group< a,b,c | a^3, b^7, (a*b)^2, (a*c)^2, (b*c)^2, (a*b*c)^2 >;
> L2Quotients(G);
[
L_2(infty^6)
]
> H := Group< a,b,c | a^3, (a,c) = (c,a^-1), a*b*a = b*a*b, a*b*a*c^-1 = c*a*b*a >;
> L2Quotients(H);
[
L_2(3^infty)
]
> K := Group< a,b | a^3*b^3 >;
> L2Quotients(K);
[
L_2(infty^infty)
]
```
Even without further interpretation of the output, this tells us that these groups are all infinite.

### GetMatrices

For a finite L2-quotient of G, that is, a quotient L_2(p^k) or PGL(2,p^k), we can compute the matrix images of the generators, using GetMatrices. This method takes an L2-quotient and returns a matrix group H and a list A of 2x2 matrices in H, where A[i] corresponds to the i-th generator of G.
```> H := Group< a,b,c | a^3, b^7, c^19, (a*b)^2, (a*c)^2, (b*c)^2, (a*b*c)^2 >;
> quot := L2Quotients(H); quot;
[
L_2(113)
]
> H, A := GetMatrices(quot[1]);
> H;
MatrixGroup(2, GF(113))
Generators:
[  0   1]
[112 112]

[  0  85]
[109  24]

[102 104]
[ 63  72]
> A;
[
[  0   1]
[112 112],

[  0  85]
[109  24],

[102 104]
[ 63  72]
]
```
Note that G -> H, G.i -> A[i] does in general not define a homomorphism, but the induced map G -> H/Z(H) does.

## Intermediate usage

### Coxeter groups

A Coxeter group is a finitely presented group on m generators, such that the only other relations are (g_i*g_j)^M[i,j], where M is a symmetric matrix with non-negative integer entries and 1's along the diagonal. The matrix M is also called a Coxeter matrix. Often when dealing with Coxeter groups we are only interested in smooth quotients, that is, those which preserve the orders. The method L2Quotients accepts a Coxeter matrix as input, and computes the smooth quotients of the associated Coxeter group. However, it omits the quotients in characteristic p if M[1,2] = p. Furthermore, if a quotient has characteristic p and p divides some entry of M, then the quotient is not guaranteed to be smooth.
```> M := Matrix([[1,2,3,3],[2,1,4,5],[3,4,1,6],[3,5,6,1]]);
> L2Quotients(M);
[
L_2(4391),
L_2(71)
]
```

### Specifying orders

Even if the finitely presented group in question is not a Coxeter group, we often are only interested in quotients where certain orders are satisfied (for instance, we might know that the generator must have a certain order). Usually this yields a great speed-up in the computation, or even allows the computation to finish in the first place.
The orders can be specified using the optional parameter exactOrders. This is a list of pairs, where the first entry is a word in the group, and the second entry is the order.
```> G< a,b,c > := Group< a,b,c | a^16, b^4, c^2, (a*b)^8, (a,b)^4 >;
> time quot := L2Quotients(G :
time> exactOrders := [< a, 16 >, < b, 4 >, < c, 2 >, < a*b ,8 >, < (a,b), 4 >]);
Time: 1.530
```

There are several parameters to influence the run of L2Quotients

### saturate

The algorithm discards prime ideals containing rho = x1^2 + x2^2 + x12^2 - x1*x2*x12 - 4. If the optional boolean parameter saturate is true (default: false), then prior to the primary decomposition the ideal is saturated at rho, which can be faster in some cases.

If the optional boolean parameter addMoreRelations is true (default: false), then the algorithm adds further relations to the ideal, which speeds up the computation in some cases.

### exclude

The optional boolean parameter exclude is a list of primes (default: []). The algorithm does not compute L2-quotients in characteristic p if p is in exclude.

### Parameters influencing minimal associated primes

The optional parameters useRandomTechniques, factorizationBound, trialDivisionBound, and groebnerBasisBound are passed to the method MinimalAssociatedPrimes (see documentation there).

## Handling infinite L2-quotients

There are three types of infinite quotients, L_2(infty^k), L_2(p^(infty^d)), and L_2(infty^(infty^d))

### Quotients of type L_2(infty^k)

If G has a quotient L_2(infty^k), then for almost all (all but finitely many) primes p, G has finitely many quotients of type PSL(2,p^r) or PGL(2,p^(r/2)) with r <= k. So L_2(infty^k) is a mnemonic, where infty in the base stands for infinitely many primes, and k stands for the highest possible exponent.

There are two basic methods to further investigate such quotients. The first is SpecifyCharacteristic, which takes an L2-quotient and an integer n, and computes the L2-quotients in characteristic p|n.
```> G := Group< a,b | a^2, b^3, (a*b)^7 >;
> quot := L2Quotients(G); quot;
[
L_2(infty^3)
]
> Q := quot[1];
> SpecifyCharacteristic(Q, 7);
[
L_2(7)
]
> SpecifyCharacteristic(Q, 11);
[
L_2(11^3)
]
> SpecifyCharacteristic(Q, 13);
[
L_2(13),
L_2(13),
L_2(13)
]
```
The second is AddGroupRelations, which takes an L2-quotient and a list of group elements interpreted as relations, and computes the L2-quotients which satisfy these relations.
```> G := Group< a,b | a^2, b^3, (a*b)^7 >;
> quot := L2Quotients(G); quot;
[
L_2(infty^3)
]
> Q := quot[1];
[
L_2(13),
L_2(7)
]
```

### Quotients of type L_2(p^(infty^d))

If G has a quotient L_2(p^(infty^d)), then there are infinitely many positive integers k such that G has a quotient of type PSL(2,p^k) or PGL(2,p^k). So L_2(p^(infty^d)) is a mnemonic, where infty in the exponent stands for infinitely many possible exponents. The parameter d describes the degree of infinity, and is ommited if d = 1.

Again, we can use AddGroupRelations to sudy this quotient further.
```> H< a,b,c > := Group< a,b,c | a^3, (a,c) = (c,a^-1), a*b*a = b*a*b, a*b*a*c^-1 = c*a*b*a >;
> quot := L2Quotients(H); quot;
[
L_2(3^infty)
]
> Q := quot[1];
[
L_2(3^2),
L_2(3^4)
]
```
Another possibility is to add further ring relations to the ideal describing the L2-quotient, using the method AddRingRelations. It takes an L2-quotient and a list of polynomials, and computes the L2-quotients whose traces satisfy these polynomial relations.
```> H< a,b,c > := Group< a,b,c | a^3, (a,c) = (c,a^-1), a*b*a = b*a*b, a*b*a*c^-1 = c*a*b*a >;
> quot := L2Quotients(H); quot;
[
L_2(3^infty)
]
> Q := quot[1];
> Q`Ideal;
Ideal of Graded Polynomial ring of rank 7 over Integer Ring
Order: Grevlex with weights [3, 2, 2, 2, 1, 1, 1]
Variables: x123, x23, x13, x12, x3, x2, x1
Variable weights: [3, 2, 2, 2, 1, 1, 1]
Inhomogeneous, Dimension >0
Groebner basis:
[
x123^2 + 2*x123*x3 + 1,
x23 + 2*x3,
x13 + 2*x3,
x12 + 2,
x2 + 1,
x1 + 1,
3
]
> R< x123, x23, x13, x12, x3, x2, x1 > := Generic(Q`Ideal);
[
L_2(3^2),
L_2(3^4),
L_2(3^4),
L_2(3^4),
L_2(3^4),
L_2(3^4),
L_2(3^4),
PGL(2,3^2),
PGL(2,3^2),
L_2(3^4),
L_2(3^8),
L_2(3^8),
L_2(3^8),
L_2(3^8),
L_2(3^8),
L_2(3^4)
]
```

### Quotients of type L_2(infty^(infty^d))

If G has a quotient L_2(infty^(infty^d)), then for almost all primes p and infinitely many positive integers k, G has a quotient of type PSL(2,p^k) or PGL(2,p^k). So L_2(infty^(infty^d)) is a mnemonic, where infty in the base stands for infinitely many primes, and infty in the exponent stands for infinitely many possible exponents. The parameter d describes the degree of infinity, and is ommited if d = 1. These quotients can be further investigated using the methods AddGroupRelations, AddRingRelations, and SpecifyCharacteristic.

## Verbose printing

Use SetVerbose("L2Quotients", d) to set the verbose printing for L2Quotients, where d is a value between 0 and 3.

## References

 [1] S. Jambor An L2-quotient algorithm for finitely presented groups on aribtrarily many generators Preprint (2014). [2] W. Plesken and A. Fabianska An L2-quotient algorithm for finitely presented groups J. Algebra 322 (2009), no. 3, 914--935.