1
0
mirror of https://github.com/kalmarek/SmallHyperbolic synced 2024-07-27 13:05:31 +02:00
SmallHyperbolic/README.md

163 lines
6.6 KiB
Markdown
Raw Permalink Normal View History

2020-06-09 16:18:00 +02:00
The repository contains code for running experiments for
2021-09-20 14:16:44 +02:00
[_Hyperbolic generalized triangle groups, property (T) and finite simple quotients_](https://arxiv.org/abs/2011.09276) by
2020-06-09 16:18:00 +02:00
[Pierre-Emmanuel Caprace](https://perso.uclouvain.be/pierre-emmanuel.caprace/),
[Marston Conder](https://www.math.auckland.ac.nz/~conder/),
[Marek Kaluba](https://kalmar.faculty.wmi.amu.edu.pl/) and
[Stefan Witzel](https://www.math.uni-bielefeld.de/~switzel/).
2022-02-13 11:33:21 +01:00
# Introduction
If you arrived here after reading the article looking for groups and
1. you don't understand any of this, you probably want to visit [this page](https://kalmarek.github.io/SmallHyperbolic/) instead;
2. you want just the machine-readable data, then the `json` file is available [here](https://github.com/kalmarek/SmallHyperbolic/blob/master/data/triangle_groups.json) (the file was generated by calling `julia ./scripts/create_json/create_json.jl`);
3. you want to re-run some of the computations that lead to the results, then continue reading.
# Computations
There are three disjoint computations covered in this repository:
1. certified eigenvalue computations for _PSL₂(p)_,
2. sum of squares computations in an attempt to prove property (T) by estimating spectral gap of the group Laplacian,
3. generation of magma files used to compute e.g. witnesses for non-hyperbolicity, rank of abelianization, etc.
2020-06-09 16:18:00 +02:00
## Eigenvalues computations for _PSL₂(p)_
This computations uses package
[RamanujanGraphs.jl](https://github.com/kalmarek/RamanujanGraphs.jl) which
implements (projective, special) linear groups of degree 2 (_PSL₂(p)_, _SL₂(p)_,
_PGL₂(p)_ and _GL₂(p)_) and the irreducible representations for _SL₂(p)_.
The script `adj_psl2_eigvals.jl` computes a subset of irreps of _SL₂(p)_ which
descend to (mostly irreducible) representations of _PSL₂(p)_ in the following
fashion.
### Principal Series
These representations are associated to the induced representations of _B(p)_,
the _Borel subgroup_ (of upper triangular matrices) of _SL₂(p)_.
All representations of the Borel subgroup come from the representations of the
torus inside (i.e. diagonal matrices), hence are _1_-dimensional.
Therefore to define a matrix representation of _SL₂(p)_ one needs to specify:
* a complex character of 𝔽ₚ (finite field of _p_ elements)
* an explicit set of representatives of _SL₂(p)/B(p)_.
In code this can be specified by
```julia
p = 109 # our choice of a prime
ζ = root_of_unity((p-1)÷2, ...) # ζ is (p-1)÷2 -th root of unity
# two particular generators of SL₂(109):
a = SL₂{p}([0 1; 108 11])
b = SL₂{p}([57 2; 52 42])
S = [a, b, inv(a), inv(b)] # symmetric generating set
SL2p, _ = RamanujanGraphs.generate_balls(S, radius = 21)
Borel_cosets = RamanujanGraphs.CosetDecomposition(SL2p, Borel(SL₂{p}))
# the generator of 𝔽ₚˣ
α = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0))
ν₅ = let k = 5 # k runs from 0 to (p-1)÷4, or (p-3)÷4 depending on p (mod 4)
νₖ = PrincipalRepr(
α => ζ^k, # character sending α ↦ ζᵏ
Borel_cosets
)
end
```
### Discrete Series
These representations are associated with the action of _SL₂(p)_ (or in more
generality of _GL₂(p)_) on [𝔽ₚ], the vector space of complex valued functions
on 𝔽ₚˣ. There are however multiple choices how to encode such action.
Let _L_ = 𝔽ₚ(√_α_) be the unique quadratic extension of 𝔽ₚ by a square of a
generator _α_ of 𝔽ₚˣ. Comples characters of _Lˣ_ can be separated into
_decomposable_ (the ones that take constant 1 value on the unique cyclic
subgroup of order _(p+1)_ in _Lˣ_) and _nondecomposable_. Each _nondecomposable_
character corresponds to a representation of _SL₂(p)_ in discrete series.
To define matrix representatives one needs to specify
* _χ_:𝔽ₚ⁺ → , a complex, non-trivial character of the _additive group_ of 𝔽ₚ
* _ν_:_Lˣ_ → , a complex indecomposable character of _Lˣ_
* a basis for [𝔽ₚ].
Continuing the snippet above we can write
```julia
α = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0)) # a generator of 𝔽ₚˣ
β = RamanujanGraphs.generator_min(QuadraticExt(α))
# a generator of _Lˣ_ of minimal "Euclidean norm"
ζₚ = root_of_unity(p, ...)
ζ = root_of_unity(p+1, ...)
ϱ₁₇ = let k = 17 # k runs from 1 to (p-1)÷4 or (p+1)÷4 depending on p (mod 4)
DiscreteRepr(
RamanujanGraphs.GF{p}(1) => ζₚ, # character of the additive group of 𝔽ₚ
β => ζ^k, # character of the multiplicative group of _L_
basis = [α^i for i in 1:p-1] # our choice for basis: the dual of
)
```
A priori ζ needs to be a complex _(p²-1)_-th root of unity, however one can show
that a reduction to _(p+1)_-th Cyclotomic field is possible.
The script computing eigenvalues should be invoked by running
```bash
julia --project=. adj_psl2_eigvals.jl -p 109
```
The results will be written into `log` directory.
## Sum of squares approach to property (T)
> **NOTE**: This is mostly __unsuccessful computation__ as for none of the groups we examined
the computations returned positive result (with the exception of Ronan's
examples of groups acting on Ã₂-buildings).
We try to find a sum of squares for various finitely presented groups using
julia package [PropertyT.jl](https://github.com/kalmarek/PropertyT.jl). For
full description of the method plesase refer to
[1712.07167](https://arxiv.org/abs/1712.07167).
The groups available are in the `./data` directory in files
`presentations*.txt` files (in Magma format). For example
```
G_8_40_54_2 := Group< a, b, c |
a^3, b^3, c^3,
b*a*b*a,
(c*b^-1*c*b)^2,
(c^-1*b^-1*c*b^-1)^2,
c*a*c^-1*a^-1*c^-1*a*c*a^-1,
(c*a*c^-1*a)^3>
```
specifies group `G_8_40_54_2` as finitely presented group.
The script needs GAP to be installed on the system (one can set `GAP_EXECUTABLE`
environmental variable to point to `gap` exec). and tries to find both an
automatic structure and a confluent Knuth-Bendix rewriting system on the given
presentation. To attempt sum of squares method for proving property (T) one can
execute
```bash
make 8_40_54_2
```
One can perform those computations in bulk by e.g. calling
```bash
make 2_4_4
```
to run all examples in `presentations_2_4_4.txt` in parallel.
2021-09-20 14:16:44 +02:00
## Creating the tables of [arXiv:2011.09276](https://arxiv.org/abs/2011.09276)
The scripts are located in `magma` directory and thoroughly commented.
There are two files, one contains the core Magma code used to create the tables,
the other one is a python script that augments the magma file by a list of
hyperbolic words. To use it put both files in a common folder, run
```bash
python3 hyperbolic_words.py
```
and then load the resulting file `small_hyperbolic.magma` in Magma.