Since I mentioned the idea of monoids as a formal models of computations, John Armstrong made the natural leap ahead, to the connection between monoids and monads – which are a common feature in programming language semantics, and a prominent language feature in Haskell, one of my favorite programming languages.
I’m jumping into this late, and it’s at least somewhat off topic for this
blog, although I’ll try to pull a few mathematical metaphors into it. But Michael
Egnor, that paragon of creationist stupidity, is back babbling about evolution and
bacterial antibiotic resistance. This is a subject which is very personal to me:
my father died almost a year ago – basically from an antibiotic resistant infection.
While doing some reading on rings, I came across some interesting stuff about
Monoids and syntax. That’s right up my alley, so I decided to write a post about that.
When I first talked about rings, I said that a ring is an algebraic
abstraction that, in a very loose way, describes the basic nature of integers. A ring is a full abelian group with respect to addition – because the integers
are an abelian group with respect to addition. Rings add multiplication with an
identity – because integers have multiplication with identity. Ring multiplication doesn’t include an inverse – because there is no multiplicative inverse in
But a ring isn’t just the set of integers with addition and multiplication. It’s an abstraction, and there are lots of thing that fit that abstraction beyond the basic realization of the ring of integers. So what are the elements of those
things? They can be pretty much anything – there are rings of topological spaces,
rings of letters, rings of polynomials. But can we use the abstraction of
the ring to create an abstraction of an object that resembles an integer, rather than an abstraction that resembles the set of all integers?