Question

I am going to start learning Abstract Algebra- Groups, Rings,etc. I am interested to know any programming language, if at all which can help me learn/try the concepts I learn in theory.

EDIT: I am not really looking at implementing what I learn. I am interested to know any language which already supports them.

Was it helpful?

Solution

The text that you want here is Abstract Algebra, A Computational Approach by Chuck Sims. The author will recommend that you use the APL programming language. The book is out of print, but you can probably find it in your library.

There is also the GAP Computer Algebra System which is fun to use for group theory.

Advanced resources:

Magma: fairly sophisticated CAS that can handle a wide range of concepts from abstract algebra.
Macaulay 2: used to study polynomial rings, especially Gröbner bases.
SINGULAR: used to study polynomial rings.

A key fact in studying group theory is that every group is isomorphic to a permutation group by the regular action. Thus, the key to understanding group theory is to understand the permutation groups.

Finally, any language that supports defining your own objects and defining a binary operator on two instances of the object will support learning the theory through programming.

OTHER TIPS

Maybe a slightly different take on your question, but still... The functional language Haskell uses concepts from algebra (particularly category theory) such as monads, monoids, arrows and whatnot.

Using Haskell's typeclasses, you could also make any object into a group, or a ring, for example, simply by defining operations (operators) on them. Guaranteeing that the operations you define actually comply to the group/ring axioms would be your responsibility, however.

If you're playing with groups, you may want to visualize them using Group explorer.

Mathematica has a lot of useful functions for dealing with concepts in abstract algebra. Unfortunately, it's proprietary software and very expensive. Sage is a free alternative, which also has a pretty good repertoire of abstract algebra functions, although I haven't used it as extensively so I can't comment much more on it.

Any language with fixed size unsigned integers (eg. the unsigned int type in C) is an example of such an implementation. Addition with unsigned values is essentially the same as addition over Z232 (ie. the integers modulo 232), which you are probably learning about in your abstract algebra class.

Modular addition over such a group is not terribly interesting, though. More interesting might be modular addition over a group of size N where N has prime factors other than just 2, or size P where P is a prime. To experiment with such groups, you may have to implement such arithmetic operations yourself (it's not hard). Languages with operator overloading can make the implementation a lot more convenient to use.

Use the language that makes the most sense to you. Abstract algebra contains a lot of symbol manipulation (symbol pushing) and rewriting, a modest amount of induction, and a fair amount of tediousness. To me that sounds like logic or functional programming; Epigram and Agda do a bit of this, and Haskell does to some extent (though I disagree that monoid is correct, mzero and mappend okay, mconcat: bad). For abstract algebra, the best programming language is Definition notebook and tons paper. Though this one is becoming quite esoteric these days.

Hmm ... sorry to say but I don't think it's effective to learn some fancy new programming language in order to help you learn abstract algebra.

Yes Haskellers love to talk category theory but this is not really a good starting point.

GAP and co. are used to help grown up group theorists to find new "monsters" - they are bad tools to learn group theory.

Maybe you can have a look at this: http://freecomputerbooks.com/mathAlgebraBooks.html - there are a lot of free books around this topic.

It is a bit surprising that so far no one has mentioned CoCoA (an acronym for Computations in Commutative Algebra), a link to the main site : http://cocoa.dima.unige.it/ where one can download the newest CoCoA 5.0 for major platforms (Linux, MacOS X, Windows), (a helpful manual for CoCoA 4.7 can also be found there, for 5.0 is to be updated).
A freely available computer algebra system (written in C) being developed for over 20 years. Its target are professional, scientific applications, among them Gröbner bases calculations, polynomial factorization, exact linear algebra, Hilbert functions, toric ideals etc.

There are good monographs like Computational Commutative Algebra (2 vol.) by Kreutzer and Robbiano dealing with CoCoA: http://cocoa.dima.unige.it/kr/

In the field of commutative algebra it has more advanced and specialized functionality than Mathematica, although in M there are brilliant capabilities (absent in CoCoA) for quantifier elimination (helpful in dealing with systems of polynomial equations and inequalities) : http://www.wolfram.com/learningcenter/tutorialcollection/AdvancedAlgebra/.

The only computer language book I read that tries to deal seriously with concepts of Abstract algebra is Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples by John J. Barton, Lee R. Nackman.

It is a good book on C++, although quite old.

I can't tell if the approach is 100% mathematically correct.

In a similar vein to Greg's answer, groups have a nice representation in the form a matrix multiplication, so you often see examples done using matlab or similar tools...

EAAM its a mathematica specific package and can be installed as well.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top