Macaulay2 is an interpreted, dynamically typed programming language intended to support research and experiments in algebraic geometry and commutative algebra through open sourced software.


A First Example

Here is an example of how to compute the minimal free resolution of the twisted cubic:

Code:

R = QQ[x, y, z, w]; -- defines a ring
I = monomialCurveIdeal(R, {1, 2, 3})
C = res I -- computes the resolution
betti I -- displays the Betti table


Getting help:

-- quick usage information
? monomialCurveIdeal
-- details and examples
help monomialCurveIdeal
-- documentation on the web
viewHelp monomialCurveIdeal
-- documentation headlines about curves
headlines about "curve"


Also try: (either click or copy & enter in M2)

Result:

i1 : R = QQ[x, y, z, w];
i2 : I = monomialCurveIdeal(R, {1, 2, 3})

             2                    2
o2 = ideal (z  - y*w, y*z - x*w, y  - x*z)

o2 : Ideal of R
i3 : C = res I

      1      3      2
o3 = R  <-- R  <-- R  <-- 0
                           
     0      1      2      3

o3 : ChainComplex
i4 : betti C

            0 1 2
o4 = total: 1 3 2
         0: 1 . .
         1: . 3 2

o4 : BettiTally


The recommended IDE for using Macaulay2 in research is Emacs.
Community plugins are also available for Vim, Atom, VSCode, and Sublime.

Here are some screenshots of Macaulay2’s interface in Emacs:


This website, LearnM2, is a personal project of Mahrud Sayrafi.
Bug reports and contributions are welcome on GitHub.