Hi.
I think math is really cool, but, most people (sadly) don't think so. This includes many programmers who in fact enjoy many of the same things that mathematicians do, but, are more practical for most of the time.
I'll show you why abstract algebra (in particular, group theory) is really cool, and why you don't have to be a freaking genius to get it.
Firstly, in order to understand most of this, you'll need to understand a tiny bit of Set theory, and to save time, I'll just refer you to wikipedia for that one (you just need to understand basic unions and intersections).
Let's begin with a simple definition, of a group (note: for hardcore types, this isn't fully rigorous because I haven't defined what an operation is, but, you get the idea).
A group is defined:
1)
A set (usually called $S$) with an operation attached (we call the operation $*$), so, if $G$ is a group,
$G = <S, *>$
2) Closure is one property that all groups must have in order for them to be a group. Closure means:
If $G = <S, *>$ and $x \epsilon S$ and $y \epsilon S$, then $x*y \epsilon S$
Note: $*$ does NOT NECESSARILY MEAN MULTIPLICATION!
3)
All groups have an identity element $e$, such that ( we are still considering the group $G$ with operation $*$):
For all $x \epsilon S$, $x*e = x$
4)
All elements in a group have an inverse,
If $a \epsilon S$, $a^{-1} \epsilon S$ such that:
$a * a^{-1} = e$
5)
The operation $*$ is associative. That means:
$(a*b)*c = a*(b*c)$
Alright, why in the world would anyone in their right mind define something like that?!
Let's take a step back, and understand where this comes from.
Around the 19th century or so, people realized that elementary algebra wasn't the only type of algebra that existed. There were all kinds of other algebras, like matrix algebra, and vector algebra and boolean algebra, and all these new all these new kinds of algebras kept cropping up with all these new rules (like, matrix multplication isn't commutative, that means: $A*B$ is not necessarily equal to $B*A$ when $B$ and $A$ are matrices) because mathematicians now had to solve all kinds of new problems.
And, the problem was, mathematics was losing its "connectivity", all these new algebras had little to no connection to each other, and it was very difficult to make progress in a few of these algebras at once.
Then, there was a clever idea. All of these algebras still were only doing a few operations on a set (or crossproducts of sets) and then were equating those operations on sets. That's how abstract algebra came along. Mathematicians realized that they could define "algebraic structures" (i.e. define algebraic systems so they followed a few axioms), and prove things about those algebraic structures, and any algebra that was then invented that could be proven to fit that algebraic structure would automatically have all the properties that people had proved about those structures!
Basically, if you came up with a new algebra, called "Cheese Algebra" and it has all these funny rules, but, it handles only one operation and you can prove that Cheese Algebra has all the properties of a Group, you're done! That means that all the things people have proven for Groups are automatically true for Cheese Algebra!
Isn't that awesome?
Let's try it.
The definition of a group is pretty simple, but, there are a few catches. First and foremost, the $*$ operation is not multiplication. Read the sentence over again. And again.
Secondly, in a group $a*b$ is not necessarily equal to $b*a$. Groups in which this is true are called Abelian groups and they make your life much easier, but, not all groups are like that.
Then, there are some basic theorems about groups that can be proven, and these are some important ones:
The first one is pretty easy, we assume there are two identities, $e_1$ and $e_2$ for a group $G = <S, *>$ and this would mean,
$e_1*e_2 = e_1$ (consider $e_2$ as the identity element)
$e_1*e_2 = e_2$ (consider $e_1$ as the identity element)
Which means $e_1=e_2$, which is a contradiction.
The second one is really similar, so, I won't go into the details.
The third one is a bit different, you first prove $(a*b)^-1 = b^{-1} * a^{-1}$ and then use the associative property of groups.
Okay, so, what does this mean?
Well, each of these properties hold for every algebraic system that's a group!
So, for example, matrices (the ones that do have inverses) form a group under the operation of multiplication, so, we've figured out a bunch of cool properties about matrices, like
The inverse of the inverse of a matrix is the matrix itself.
And, we haven't dealt with a single $a_ij$ component (although we would in proving that "inverseable" matrices do indeed form a group under multiplication)!
Also, the real numbers (excluding zero) form a group under multiplication, so, we can say this, too,
The reciprocal of the recipocral of a real number is the real number itself.
And, vectors form a group under addition (this one's really easy to prove, I suggest you try with the axioms given, hint: the identity is the vector <0,0,0>), too:
If you negate the negative of a vector, you get the vector itself.
Notice that the inverse operations change with each of them, but, the idea is still the same, so, with the single idea of a group, we've solved problems in a bunch of different areas of mathematics.
Let's try something a bit more complex, let's solve an equation on a group. What does that mean? Well, we can't use our knowledge of existing algebra, we can only use the axioms about groups, and the things we proved from them in order to solve the equation.
Now, I'll show you the equation, but, try solving it first if you can before looking at the solution, it'll give you a different kind of appreciation for the solution.
Solve the equation $a*x*b = c$ for $x$ in terms of $a, b, c$, which are constants.
Solution
=======
Multiply both sides by $b^{-1}$,
$a*x*b*b^{-1} = c*b^{-1}$
Since $b*b^{-1} = e$,
$a*x*e = c*b^{-1}$
Since, $a*x*e = (a*x)*e = a*x$,
$a*x = c*b^{-1}$
Now, since each element of the group has a unique inverse, we can take the inverse of both sides of the equation, and the equation will still hold true:
$(a*x)^-1 = (c*b^{-1})^{-1}$
Which is the same as:
$x^{-1}*a^{-1} = b*c^{-1}$
Multiply both sides by $a$,
$x^{-1} = b*c^{-1}*a$
Take the inverse of both sides again, and notcie $(a^{-1})^{-1}$,
$x = a^{-1}*c*b^{-1}$
Yay!
Now, what's (again) really cool, is that this works for every, single freaking algebraic system that you can think of that's a group. Matrices with multiplication? Done. Real numbers with multiplication (aside from 0)? Done. Vectors with addition? Done.
Abstract algebra doesn't stop there, it defines all these structures that have similar properties like Rings and Fields that you can use to prove things in a bunch of different algebras in one fell swoop.
I hope you liked this article, and I'd love your feedback, email me at dhaivatpandya at g mail dot com, or comment below :)
EDIT: I forgot to mention some applications to CS.
Alright, you guys know how Haskell?
Haskell (and any ML-type language, really) uses something known as Algebraic data types, which basically let you specify datatypes that follow certain axioms, in a way.
Even though it is completely your responsibility to make sure that these structures form some kind of helpful algebra, the relation is still there.
And, about classes in OOP languages, there's a very close correlation.
You can very nearly think of classes as a algebraic structure that have many operations (methods) and elements (fields, variables, etc.), but, this isn't a perfect correlation because of many things that OOP languages let you do that are functionally "impure", and mathematics is a completely pure functional language (which is why it maps to Haskell so nicely), there is no state.
I think math is really cool, but, most people (sadly) don't think so. This includes many programmers who in fact enjoy many of the same things that mathematicians do, but, are more practical for most of the time.
I'll show you why abstract algebra (in particular, group theory) is really cool, and why you don't have to be a freaking genius to get it.
Firstly, in order to understand most of this, you'll need to understand a tiny bit of Set theory, and to save time, I'll just refer you to wikipedia for that one (you just need to understand basic unions and intersections).
Let's begin with a simple definition, of a group (note: for hardcore types, this isn't fully rigorous because I haven't defined what an operation is, but, you get the idea).
A group is defined:
1)
A set (usually called $S$) with an operation attached (we call the operation $*$), so, if $G$ is a group,
$G = <S, *>$
2) Closure is one property that all groups must have in order for them to be a group. Closure means:
If $G = <S, *>$ and $x \epsilon S$ and $y \epsilon S$, then $x*y \epsilon S$
Note: $*$ does NOT NECESSARILY MEAN MULTIPLICATION!
3)
All groups have an identity element $e$, such that ( we are still considering the group $G$ with operation $*$):
For all $x \epsilon S$, $x*e = x$
4)
All elements in a group have an inverse,
If $a \epsilon S$, $a^{-1} \epsilon S$ such that:
$a * a^{-1} = e$
5)
The operation $*$ is associative. That means:
$(a*b)*c = a*(b*c)$
Alright, why in the world would anyone in their right mind define something like that?!
Let's take a step back, and understand where this comes from.
Around the 19th century or so, people realized that elementary algebra wasn't the only type of algebra that existed. There were all kinds of other algebras, like matrix algebra, and vector algebra and boolean algebra, and all these new all these new kinds of algebras kept cropping up with all these new rules (like, matrix multplication isn't commutative, that means: $A*B$ is not necessarily equal to $B*A$ when $B$ and $A$ are matrices) because mathematicians now had to solve all kinds of new problems.
And, the problem was, mathematics was losing its "connectivity", all these new algebras had little to no connection to each other, and it was very difficult to make progress in a few of these algebras at once.
Then, there was a clever idea. All of these algebras still were only doing a few operations on a set (or crossproducts of sets) and then were equating those operations on sets. That's how abstract algebra came along. Mathematicians realized that they could define "algebraic structures" (i.e. define algebraic systems so they followed a few axioms), and prove things about those algebraic structures, and any algebra that was then invented that could be proven to fit that algebraic structure would automatically have all the properties that people had proved about those structures!
Basically, if you came up with a new algebra, called "Cheese Algebra" and it has all these funny rules, but, it handles only one operation and you can prove that Cheese Algebra has all the properties of a Group, you're done! That means that all the things people have proven for Groups are automatically true for Cheese Algebra!
Isn't that awesome?
Let's try it.
The definition of a group is pretty simple, but, there are a few catches. First and foremost, the $*$ operation is not multiplication. Read the sentence over again. And again.
Secondly, in a group $a*b$ is not necessarily equal to $b*a$. Groups in which this is true are called Abelian groups and they make your life much easier, but, not all groups are like that.
Then, there are some basic theorems about groups that can be proven, and these are some important ones:
- A group has a single, unique identity element
- Every element of a group has a single, unique inverse
- $(a_1*a_2*a_3* ... * a_n)^ {-1} = (a_n^{-1} * a_{n-1}^{-1} * a_{n-2}^{-1} * ... * a_1^{-1})$
- $(a^{-1})^{-1} = a$
The first one is pretty easy, we assume there are two identities, $e_1$ and $e_2$ for a group $G = <S, *>$ and this would mean,
$e_1*e_2 = e_1$ (consider $e_2$ as the identity element)
$e_1*e_2 = e_2$ (consider $e_1$ as the identity element)
Which means $e_1=e_2$, which is a contradiction.
The second one is really similar, so, I won't go into the details.
The third one is a bit different, you first prove $(a*b)^-1 = b^{-1} * a^{-1}$ and then use the associative property of groups.
Okay, so, what does this mean?
Well, each of these properties hold for every algebraic system that's a group!
So, for example, matrices (the ones that do have inverses) form a group under the operation of multiplication, so, we've figured out a bunch of cool properties about matrices, like
The inverse of the inverse of a matrix is the matrix itself.
And, we haven't dealt with a single $a_ij$ component (although we would in proving that "inverseable" matrices do indeed form a group under multiplication)!
Also, the real numbers (excluding zero) form a group under multiplication, so, we can say this, too,
The reciprocal of the recipocral of a real number is the real number itself.
And, vectors form a group under addition (this one's really easy to prove, I suggest you try with the axioms given, hint: the identity is the vector <0,0,0>), too:
If you negate the negative of a vector, you get the vector itself.
Notice that the inverse operations change with each of them, but, the idea is still the same, so, with the single idea of a group, we've solved problems in a bunch of different areas of mathematics.
Let's try something a bit more complex, let's solve an equation on a group. What does that mean? Well, we can't use our knowledge of existing algebra, we can only use the axioms about groups, and the things we proved from them in order to solve the equation.
Now, I'll show you the equation, but, try solving it first if you can before looking at the solution, it'll give you a different kind of appreciation for the solution.
Solve the equation $a*x*b = c$ for $x$ in terms of $a, b, c$, which are constants.
Solution
=======
Multiply both sides by $b^{-1}$,
$a*x*b*b^{-1} = c*b^{-1}$
Since $b*b^{-1} = e$,
$a*x*e = c*b^{-1}$
Since, $a*x*e = (a*x)*e = a*x$,
$a*x = c*b^{-1}$
Now, since each element of the group has a unique inverse, we can take the inverse of both sides of the equation, and the equation will still hold true:
$(a*x)^-1 = (c*b^{-1})^{-1}$
Which is the same as:
$x^{-1}*a^{-1} = b*c^{-1}$
Multiply both sides by $a$,
$x^{-1} = b*c^{-1}*a$
Take the inverse of both sides again, and notcie $(a^{-1})^{-1}$,
$x = a^{-1}*c*b^{-1}$
Yay!
Now, what's (again) really cool, is that this works for every, single freaking algebraic system that you can think of that's a group. Matrices with multiplication? Done. Real numbers with multiplication (aside from 0)? Done. Vectors with addition? Done.
Abstract algebra doesn't stop there, it defines all these structures that have similar properties like Rings and Fields that you can use to prove things in a bunch of different algebras in one fell swoop.
I hope you liked this article, and I'd love your feedback, email me at dhaivatpandya at g mail dot com, or comment below :)
EDIT: I forgot to mention some applications to CS.
Alright, you guys know how Haskell?
Haskell (and any ML-type language, really) uses something known as Algebraic data types, which basically let you specify datatypes that follow certain axioms, in a way.
Even though it is completely your responsibility to make sure that these structures form some kind of helpful algebra, the relation is still there.
And, about classes in OOP languages, there's a very close correlation.
You can very nearly think of classes as a algebraic structure that have many operations (methods) and elements (fields, variables, etc.), but, this isn't a perfect correlation because of many things that OOP languages let you do that are functionally "impure", and mathematics is a completely pure functional language (which is why it maps to Haskell so nicely), there is no state.