I took several courses on Abstract Algebra as an undergrad and graduate student in college. One core aspect of Abstract Algebra that we studied was Group Theory. Group theory is an underpinning of Category theory which has shown up quite a bit in programming lately with linq and functional programming. Group theory also shows up in physics and machine learning.

Let's start with what is a group? A "group" is a set of elements with an "action" that satisfies the following statements:

1. Given a and b in a set G, then `a*b` is in G (Closure)
2. `(a*b) *c = a*(b*c)` (Associativity)
3. special member `e` (called identity) such that `(a*e)= a = (e*a)`
4. every element has an inverse b such that `(a*b) = e = (b*a)`

Subgroup of a group is any subset of G that still forms a Group.

If you let H be a subgroup of G then you can form a coset of g denoted by gH where g is any element in G. Cosets partition a group. Every element belongs to only one coset.

### Examples of Groups

With any abstraction in math it's always good to look at concrete examples to understand the abstract concept better.

The real numbers are a group under addition. Under addition the identity element is 0. The inverse of any real number is it's negative.

The real numbers (without zero) are a group under multiplication. Under multiplication the identity element is 1. The inverse element of an element a is 1/a.

### Finite Groups

The reals under addition and multiplication are examples of groups that are of infinite order. It's extremely fascinating to look at groups of finite order. I will delve into groups of finite order in a future blog post.