{"id":19981370,"url":"https://github.com/kalmarek/smallhyperbolic","last_synced_at":"2026-06-13T09:33:10.712Z","repository":{"id":43679944,"uuid":"297344413","full_name":"kalmarek/SmallHyperbolic","owner":"kalmarek","description":"Reproducing code for [2011.09276](https://arxiv.org/abs/2011.09276)","archived":false,"fork":false,"pushed_at":"2022-02-24T10:18:09.000Z","size":321,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-01T19:47:34.534Z","etag":null,"topics":["group-theory","hyperbolic-group","julia","property-t","triangle-group"],"latest_commit_sha":null,"homepage":"https://kalmarek.github.io/SmallHyperbolic/","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kalmarek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-09-21T13:15:32.000Z","updated_at":"2023-03-01T15:54:29.000Z","dependencies_parsed_at":"2022-09-02T06:53:07.397Z","dependency_job_id":null,"html_url":"https://github.com/kalmarek/SmallHyperbolic","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/kalmarek/SmallHyperbolic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalmarek%2FSmallHyperbolic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalmarek%2FSmallHyperbolic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalmarek%2FSmallHyperbolic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalmarek%2FSmallHyperbolic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kalmarek","download_url":"https://codeload.github.com/kalmarek/SmallHyperbolic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalmarek%2FSmallHyperbolic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34279898,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["group-theory","hyperbolic-group","julia","property-t","triangle-group"],"created_at":"2024-11-13T03:48:09.551Z","updated_at":"2026-06-13T09:33:10.688Z","avatar_url":"https://github.com/kalmarek.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"The repository contains code for running experiments for\n[_Hyperbolic generalized triangle groups, property (T) and finite simple quotients_](https://arxiv.org/abs/2011.09276) by\n[Pierre-Emmanuel Caprace](https://perso.uclouvain.be/pierre-emmanuel.caprace/),\n[Marston Conder](https://www.math.auckland.ac.nz/~conder/),\n[Marek Kaluba](https://kalmar.faculty.wmi.amu.edu.pl/) and\n[Stefan Witzel](https://www.math.uni-bielefeld.de/~switzel/).\n\n# Introduction\nIf you arrived here after reading the article looking for groups and\n 1. you don't understand any of this, you probably want to visit [this page](https://kalmarek.github.io/SmallHyperbolic/) instead;\n 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`);\n 3. you want to re-run some of the computations that lead to the results, then continue reading.\n\n# Computations\n\nThere are three disjoint computations covered in this repository:\n 1. certified eigenvalue computations for _PSL₂(p)_,\n 2. sum of squares computations in an attempt to prove property (T) by estimating spectral gap of the group Laplacian,\n 3. generation of magma files used to compute e.g. witnesses for non-hyperbolicity, rank of abelianization, etc.\n\n## Eigenvalues computations for _PSL₂(p)_\n\nThis computations uses package\n[RamanujanGraphs.jl](https://github.com/kalmarek/RamanujanGraphs.jl) which\nimplements (projective, special) linear groups of degree 2 (_PSL₂(p)_, _SL₂(p)_,\n_PGL₂(p)_ and _GL₂(p)_) and the irreducible representations for _SL₂(p)_.\n\nThe script `adj_psl2_eigvals.jl` computes a subset of irreps of _SL₂(p)_ which\ndescend to (mostly irreducible) representations of _PSL₂(p)_ in the following\nfashion.\n\n### Principal Series\n\nThese representations are associated to the induced representations of _B(p)_,\nthe _Borel subgroup_ (of upper triangular matrices) of _SL₂(p)_.\nAll representations of the Borel subgroup come from the representations of the\ntorus inside (i.e. diagonal matrices), hence are _1_-dimensional.\n\nTherefore to define a matrix representation of _SL₂(p)_ one needs to specify:\n * a complex character of 𝔽ₚ (finite field of _p_ elements)\n * an explicit set of representatives of _SL₂(p)/B(p)_.\n\nIn code this can be specified by\n\n```julia\np = 109 # our choice of a prime\nζ = root_of_unity((p-1)÷2, ...) # ζ is (p-1)÷2 -th root of unity\n# two particular generators of SL₂(109):\na = SL₂{p}([0 1; 108 11])\nb = SL₂{p}([57 2; 52 42])\n\nS = [a, b, inv(a), inv(b)] # symmetric generating set\nSL2p, _ = RamanujanGraphs.generate_balls(S, radius = 21)\n\nBorel_cosets = RamanujanGraphs.CosetDecomposition(SL2p, Borel(SL₂{p}))\n# the generator of 𝔽ₚˣ\nα = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0))\n\nν₅ = let k = 5 # k runs from 0 to (p-1)÷4, or (p-3)÷4 depending on p (mod 4)\n  νₖ = PrincipalRepr(\n      α =\u003e ζ^k, # character sending α ↦ ζᵏ\n      Borel_cosets\n    )\nend\n\n```\n\n### Discrete Series\n\nThese representations are associated with the action of _SL₂(p)_ (or in more\ngenerality of _GL₂(p)_) on ℂ[𝔽ₚ], the vector space of complex valued functions\non 𝔽ₚˣ. There are however multiple choices how to encode such action.\n\nLet _L_ = 𝔽ₚ(√_α_) be the unique quadratic extension of 𝔽ₚ by a square of a\ngenerator _α_ of 𝔽ₚˣ. Comples characters of _Lˣ_ can be separated into\n_decomposable_ (the ones that take constant 1 value on the unique cyclic\nsubgroup of order _(p+1)_ in _Lˣ_) and _nondecomposable_. Each _nondecomposable_\ncharacter corresponds to a representation of _SL₂(p)_ in discrete series.\n\nTo define matrix representatives one needs to specify\n* _χ_:𝔽ₚ⁺ → ℂ, a complex, non-trivial character of the _additive group_ of 𝔽ₚ\n* _ν_:_Lˣ_ → ℂ, a complex indecomposable character of _Lˣ_\n* a basis for ℂ[𝔽ₚ].\n\nContinuing the snippet above we can write\n\n```julia\nα = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0)) # a generator of 𝔽ₚˣ\nβ = RamanujanGraphs.generator_min(QuadraticExt(α))\n# a generator of _Lˣ_ of minimal \"Euclidean norm\"\n\nζₚ = root_of_unity(p, ...)\nζ = root_of_unity(p+1, ...)\n\nϱ₁₇ = let k = 17 # k runs from 1 to (p-1)÷4 or (p+1)÷4 depending on p (mod 4)\n    DiscreteRepr(\n    RamanujanGraphs.GF{p}(1) =\u003e ζₚ, # character of the additive group of 𝔽ₚ\n    β =\u003e ζ^k, # character of the multiplicative group of _L_\n    basis = [α^i for i in 1:p-1] # our choice for basis: the dual of\n)\n```\n\nA priori ζ needs to be a complex _(p²-1)_-th root of unity, however one can show\nthat a reduction to _(p+1)_-th Cyclotomic field is possible.\n\nThe script computing eigenvalues should be invoked by running\n\n```bash\njulia --project=. adj_psl2_eigvals.jl -p 109\n```\n\nThe results will be written into `log` directory.\n\n## Sum of squares approach to property (T)\n\n\u003e **NOTE**: This is mostly __unsuccessful computation__ as for none of the groups we examined\nthe computations returned positive result (with the exception of Ronan's\nexamples of groups acting on Ã₂-buildings).\n\nWe try to find a sum of squares for various finitely presented groups using\njulia package [PropertyT.jl](https://github.com/kalmarek/PropertyT.jl). For\nfull description of the method plesase refer to\n[1712.07167](https://arxiv.org/abs/1712.07167).\n\nThe groups available are in the `./data` directory in files\n`presentations*.txt` files (in Magma format). For example\n```\nG_8_40_54_2 := Group\u003c a, b, c  |\n    a^3, b^3, c^3,\n    b*a*b*a,\n    (c*b^-1*c*b)^2,\n    (c^-1*b^-1*c*b^-1)^2,\n    c*a*c^-1*a^-1*c^-1*a*c*a^-1,\n    (c*a*c^-1*a)^3\u003e\n```\nspecifies group `G_8_40_54_2` as finitely presented group.\n\nThe script needs GAP to be installed on the system (one can set `GAP_EXECUTABLE`\nenvironmental variable to point to `gap` exec). and tries to find both an\nautomatic structure and a confluent Knuth-Bendix rewriting system on the given\npresentation. To attempt sum of squares method for proving property (T) one can\nexecute\n```bash\nmake 8_40_54_2\n```\n\nOne can perform those computations in bulk by e.g. calling\n```bash\nmake 2_4_4\n```\nto run all examples in `presentations_2_4_4.txt` in parallel.\n\n## Creating the tables of [arXiv:2011.09276](https://arxiv.org/abs/2011.09276)\n\nThe scripts are located in `magma` directory and thoroughly commented.\nThere are two files, one contains the core Magma code used to create the tables,\nthe other one is a python script that augments the magma file by a list of\nhyperbolic words. To use it put both files in a common folder, run\n```bash\npython3 hyperbolic_words.py\n```\nand then load the resulting file `small_hyperbolic.magma` in Magma.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkalmarek%2Fsmallhyperbolic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkalmarek%2Fsmallhyperbolic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkalmarek%2Fsmallhyperbolic/lists"}