Skip to content

Commit 6c9a1f1

Browse files
Add GSoC first stab
1 parent de43692 commit 6c9a1f1

4 files changed

Lines changed: 222 additions & 0 deletions

File tree

content/en/gsoc.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
---
2+
layout: "gsoc"
3+
bgImage: "/images/smalloverlap_510x510.png"
4+
---
5+
6+
# GSoC 2026 project ideas
7+
8+
This page contains a list of ideas for GSoC in 2026 within the
9+
[libsemigroups][] organisation:
10+
11+
1. [Julia bindings for libsemigroups](#1-julia-bindings-semigroupsjl-for-libsemigroups)
12+
2. [Formal verification of Knuth-Bendix and
13+
Todd-Coxeter](#2-formal-verification-of-knuth-bendix-and-todd-coxeter)
14+
3. [AI for auto-tuning undecidable
15+
problems](#3-ai-for-auto-tuning-undecidable-problems)
16+
4. [High-performance tropical algebra
17+
library](#4-high-performance-tropical-algebra-library)
18+
5. [Computing congruences of finite inverse
19+
semigroups](#5-computing-congruences-of-finite-inverse-semigroups)
20+
6. [Improving errors and their messages in
21+
GAP](#6-improving-errors-and-their-messages-in-gap)
22+
7. [Free bands](#7-free-bands)
23+
24+
### 1. Julia bindings Semigroups.jl for libsemigroups
25+
26+
This project would involve porting as much as possible of the functionality of
27+
[libsemigroups][] into [Semigroups.jl][]. Something similar already exists for
28+
python in [libsemigroups_pybind11][]. The aim is for [Semigroups.jl][] to
29+
expose the low-level functionality of [libsemigroups][] to be used as a
30+
foundation for a separate higher level package. In particular, a longer term
31+
aim of this project is to replace the kernel extension of the
32+
[GAP package Semigroups][] with [Semigroups.jl][].
33+
34+
This project may involve:
35+
36+
- some familiarity with modern C++ and Julia;
37+
- writing some tools to (at least partially) automate the generation of the
38+
Julia bindings, documentation, and tests;
39+
- making design decisions about how to map C++ idioms to Julia.
40+
41+
### 2. Formal verification of Knuth-Bendix and Todd-Coxeter
42+
43+
A computer algebra system may produce an answer, but how much confidence can we
44+
have that it is correct? We might compute the same solution using two different
45+
algorithms, if they match, then we have higher confidence! This project is to
46+
provide alternate implementations of some key parts of the [Knuth-Bendix][] and
47+
[Todd-Coxeter][] algorithms in [libsemigroups][] to permit the generation of a
48+
formal proof certificate in [rocq][] or [lean][] that _proves_ with 100%
49+
certainty that the output is correct.
50+
51+
This project may involve:
52+
53+
- some familiarity with modern C++ and [rocq][] or [lean][];
54+
- implementing a logged rewriter in modern C++;
55+
- understanding the mathematics behind [Knuth-Bendix][] and
56+
[Todd-Coxeter][] as applied to finitely presented semigroups and monoids.
57+
58+
### 3. AI for auto-tuning undecidable problems
59+
60+
In this project we aim to use techniques from AI and machine learning to guide
61+
computations related to undecidable problems. If a group or semigroup is
62+
defined by a presentation, then a classical undecidable problem is whether or
63+
not that semigroup is finite. Two key algorithms for attempting to determine
64+
whether or not a finitely presented semigroup is finite are the
65+
[Knuth-Bendix][] and [Todd-Coxeter][] algorithms. [Todd-Coxeter][] in
66+
particular terminates if and only if the semigroup is finite.
67+
68+
This project may involve:
69+
70+
- extensive testing of the existing implementation of [Knuth-Bendix][] and
71+
[Todd-Coxeter][] in [libsemigroups][];
72+
- figuring out what AI tools and/or machine learning techniques might be usable
73+
for this purpose.
74+
- implementing these techniques in modern C++.
75+
76+
### 4. High-performance tropical algebra library
77+
78+
There are a number of high-performance linear algebra packages for linear
79+
algebra involving matrix and vector manipulation over fields (usually the real
80+
numbers or finite fields. Some well-known examples among many others are:
81+
[LinBox](https://linalg.org) and [Eigen](https://libeigen.gitlab.io). This
82+
project will involve implementing (at least some of) the
83+
[BLAS](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms)
84+
specification for matrices and vectors of [tropical
85+
semirings](https://en.wikipedia.org/wiki/Tropical_semiring) in modern C++.
86+
Tropical semirings, often using min-plus or max-plus algebra, are powerful
87+
tools for solving optimization, scheduling, and combinatorial problems by
88+
replacing addition/multiplication with minimum/maximum/summation. As such a
89+
high-performance library implementing linear algebra over tropical semirings is
90+
likely to be widely applicable.
91+
92+
This project may involve:
93+
94+
- developing some familiarity with linear algebra over tropical semirings;
95+
- implementing low-level high-performance SIMD accelerated linear algebra over
96+
tropical semirings;
97+
- developing a new C++ library (build system, documentation, testing framework).
98+
99+
### 5. Computing congruences of finite inverse semigroups
100+
101+
In the paper
102+
103+
- "Computing congruences of finite inverse semigroups" by L. Elliott, A.
104+
Levine, and J. D. Mitchell [https://arxiv.org/abs/2406.09281][]
105+
106+
the authors present a novel algorithm for
107+
computing a congruence on an inverse semigroup from a collection of generating
108+
pairs. This algorithm uses a myriad of techniques from the theories of groups,
109+
automata, and inverse semigroups. An initial implementation of this algorithm
110+
outperforms existing implementations by several orders of magnitude. In this
111+
project, you would implement this algorithm either in [GAP package
112+
Semigroups][] or within the C++ library [libsemigroups][].
113+
114+
This project may involve:
115+
116+
- developing some familiarity with the theory of inverse semigroups;
117+
- implementing the algorithms described in
118+
[https://arxiv.org/abs/2406.09281][];
119+
- thoroughly testing and documenting the implementation.
120+
121+
<!-- Cuttings algorithm-->
122+
123+
<!-- Parallelising computer algebra -->
124+
125+
### 6. Improving errors and their messages in GAP
126+
127+
[GAP][] is a system for computational discrete algebra, with particular
128+
emphasis on Computational Group Theory. [GAP][] provides a programming
129+
language, a library of thousands of functions implementing algebraic algorithms
130+
written in the [GAP][] language as well as large data libraries of algebraic
131+
objects.
132+
133+
The aim of this project is to improve errors and their messages in [GAP][] in
134+
something of the same spirit as those introduced in [Python
135+
3.13](https://docs.python.org/3/whatsnew/3.13.html#improved-error-messages).
136+
137+
This project may involve:
138+
139+
- doing a wide-scale review of error messages in the [GAP][] library;
140+
- identification of error messages that can be improved;
141+
- standardisation of error messages across the [GAP][] library;
142+
- liaising with code owners to effect any changes;
143+
- improvements to the error message infrastructure in [GAP][] arising from the
144+
above.
145+
146+
<!-- ### Nielsen-Schreier free bases
147+
148+
Implement an algorithm for finding the free basis of a finitely generated
149+
subgroup of a free group (i.e. implement a proof of the Nielsen-Schreier
150+
theorem for finitely generated subgroups) (this is pretty nice actually and
151+
uses a similar word graph folding method to what Stephen's algorithm does);
152+
-->
153+
154+
### 7. Free bands
155+
156+
In the paper:
157+
158+
- "Polynomial time multiplication and normal forms in free band" by R.
159+
Cirpons and J. D. Mitchell [https://doi.org/10.1016/j.tcs.2023.113783](https://doi.org/10.1016/j.tcs.2023.113783)
160+
161+
the authors present efficient computational solutions to the problems of
162+
checking equality, performing multiplication, and computing minimal
163+
representatives of elements of free bands. A reference implementation of the
164+
algorithms from this paper is given in
165+
[https://doi.org/10.5281/zenodo.7071676](https://doi.org/10.5281/zenodo.7071676).
166+
In this project, the reference implementation would be re-implemented in modern
167+
C++ as part of [libsemigroups][]; and integrating subsemigroups of free bands
168+
and their quotients into the framework established in [https://arxiv.org/abs/1510.01868](https://arxiv.org/abs/1510.01868).
169+
170+
This project may involve:
171+
172+
- object oriented programming in modern C++;
173+
- some familiarity with automata and transducers;
174+
- integrating the C++ code into [libsemigroups_pybind11][],
175+
[Semigroups.jl][], and [GAP package Semigroups][];
176+
177+
<!-- Morphocompletion for Knuth-Bendix
178+
179+
Implement the morphocompletion algorithm using the stop and reinitialize
180+
method you mentioned before.
181+
182+
### High-performance finite state automata
183+
184+
Implement various algorithms for automata or incorporate a good enough
185+
automata library. In particular things like efficient products of automata.
186+
187+
### Todd-Coxeter for varieties
188+
189+
Implement something like the Todd-Coxeter algorithm for varieties from my
190+
thesis, either in full generality or for some specific classes (e.g. bands).
191+
-->
192+
193+
[libsemigroups]: https://libsemigroups.github.io/libsemigroups/
194+
[Semigroups.jl]: https://github.com/libsemigroups/Semigroups.jl
195+
[GAP package Semigroups]: https://semigroups.github.io/Semigroups/
196+
[libsemigroups_pybind11]: https://libsemigroups.github.io/libsemigroups_pybind11/
197+
[rocq]: https://rocq-prover.org
198+
[lean]: https://lean-lang.org
199+
[Todd-Coxeter]: https://link.springer.com/article/10.1007/s00233-024-10431-z
200+
[Knuth-Bendix]: https://en.wikipedia.org/wiki/Knuth–Bendix_completion_algorithm
201+
[https://arxiv.org/abs/2406.09281]: https://arxiv.org/abs/2406.09281
202+
[GAP]: https://www.gap-system.org

hugo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ font-size = "xs"
2222
# Theme-specific variables `.Site.Params.myParamName`
2323
[params]
2424

25+
bg = 'images/smalloverlap_510x510.png'
26+
2527
# The path to your "favicon". This should be a square (at least 32px x 32px) png-file.
2628
favicon = "images/favicon.png"
2729

layouts/gsoc.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{{ define "main" }}
2+
<main
3+
class="content page-template page-"
4+
style="
5+
background-image: url('{{ .Params.bgImage }}');
6+
background-size: cover;
7+
background-position: center;
8+
background-repeat: repeat-y;
9+
"
10+
>
11+
<style>
12+
a:visited {
13+
color: #12355b;
14+
}
15+
</style>
16+
<article class="post page">{{ .Content }}</article>
17+
</main>
18+
{{ end }}
63.9 KB
Loading

0 commit comments

Comments
 (0)