Paul Orland
# Computational Group Theory in F#

An educational submission for the 2019 Applied F# Challenge

F# is a great language for symbolic programming, and for modeling mathematical ideas in general. There are plenty of resources out there that cover simple examples, like building an algebraic expression and taking its derivative. My goal is to show a more advanced example that might be interesting to a professional mathematician (or physicist, or chemist, or other user of advanced algebra), and that may even persuade them to choose F# over a tool like Mathematica for their next project.

Unfortunately I suspect that F# is foreign to most mathematicians, and group theory is foreign to most F# programmers. I've tried to include some background material on both, but I've erred on the side of making this material accessible to the F# crowd. I hope I've managed to include enough detail to pique your curiosity, and maybe I'll get a chance to expand with some more articles in the future.

- Doing symbolic algebra in F# covers how to model algebraic expressions in F#. This isn't anything new, but its a useful starting point if you haven't seen it before.
- Algebra beyond numbers covers a few kinds of entities
*other than*numbers that are of interest in modern algebra. Objects like vectors, matrices, functions, and permutations each come equipped with certain operations that have distinctive algebraic characteristics.

- Finite groups in F# covers the definition of
*finite groups*, finite collections of objects equipped with operations that make them "look like" composition of invertible functions. F# generics, higher order functions, and function types make it easy to translate the algebraic ideas into code. - Computations in finite groups covers a number of important facts you can compute about finite groups. In F#, it's easy to write generic algorithms that compute facts about groups, and apply them to groups consisting of objects of different types.