\documentclass{article} \usepackage[margin=1.2in]{geometry} \usepackage{parskip} \usepackage{amsfonts} \usepackage{amsmath} \usepackage{amsthm} \usepackage{hyperref} \title{Faster Inner Products in Character Spaces} \author{Kaashif Hymabaccus, Robert Moore} \newtheorem{prop}{Proposition} \begin{document} \maketitle \begin{abstract} A common problem in the representation theory of finite groups is to examine the structure of a representation by computing characters and performing inner products. By writing an open source Rust library to perform these inner products, we demonstrate how the implementation of cyclotomic field arithmetic can be adapted to this use case to yield speed improvements over current computer algebra systems. \end{abstract} \section{Background} Let $G$ be a finite group and $\rho : G \to \text{GL}(\mathbb{C})$ be a representation of $G$. Let $n$ be the exponent of $G$. Due to a theorem by Brauer \cite{Brauer1945}, any such $\rho$ can be realised over a cyclotomic field $K = \mathbb{Q}(\zeta_n)$ where $\zeta_n$ is an $n$th primitive root of unity. We will now consider all representations of $G$ to be realised over $K$. Let $\chi_\rho : G \to K$ be the character of $\rho$, $\rho_1, \ldots, \rho_N$ the irreducible representations of $G$ over $K$, and $\chi_1, \ldots, \chi_N$ the corresponding irreducible characters. These characters can be computed by, for example, the Dixon-Schneider \cite{Schneider1990} or Baum-Clausen \cite{Baum1994} algorithms. Both of these algorithms are implemented in the GAP computer algebra system \cite{Gap2020}, which was used to generate most of our examples and benchmarks. Given that $\chi_\rho$ and the $\chi_i$ have already been computed, our problem is to compute the inner product: $$\langle \chi_\rho, \chi_i \rangle = \frac{1}{|G|} \sum_{g \in G} \chi_\rho(g) \overline{\chi_i(g)}$$ From basic results in character theory, this will give the multiplicity of the representation $\rho_i$ in the direct sum decomposition of $\rho$ into irreducibles. \section{Optimisations} TODO: rephrase most of this, but it's right. The key optimisation is in the data structures used to represent elements $z \in K$. There are two broad approaches: a dense approach, representing $z$ as a $\mathbb{Q}$-vector in the $\varphi(n)$-dimensional $\mathbb{Q}$-vector space $K$; and a sparse approach, where only the nonzero elements of this vector are stored. A problem that's not entirely obvious is that we have to make a choice of basis for $K$. The obvious choice is $\{ \zeta_n^i : 0 \leq i \leq \varphi(n)-1 \}$, but multiplying vectors in this space would require explicitly operating modulo the cyclotomic polynomial $\Phi_n(x)$. We have implemented and benchmarked this approach to show that the running time grows very quickly. GAP takes the approach of defining a basis and canonicalising into that basis after each multiplication. This turns out to be unnecessary in our case, since we know that the final result $\langle \chi_\rho, \chi_i \rangle$ will not only be rational, but a nonnegative integer. This means we can just operate modulo $x^n-1$ (easy, just mod all powers by $n$) and at the end just take the first nonzero integer coefficient we see as our result. \section{Benchmarks} TODO: rephrase all of this GAP computes the irreducible characters and passes them to our program. These times are for the computation of the inner products given the characters and class sizes. TODO: graphs showing our library is fast vs Antic and GAP We can pick a really pathological examples with really huge orders e.g. cyclic groups or extraspecial groups. The only problem is that GAP is really slow computing extraspecial characters. Maybe we could speed that up but that would require implementing a LOT of stuff. \section{Conclusions and Future Work} Here's the source code: \url{https://github.com/CyclotomicFields/cyclotomic}. In the future we could extend this code to interface with GAP more directly and perform more advanced computations. Or SageMath, which used to have their own handwritten cyclotomic field implementation. Also there is this great paper with some sick algorithms by Hymabaccus et al \cite{Hymabaccus2020}, we could speed those up. \bibliographystyle{unsrt} \bibliography{paper} \end{document}