Macaulay2 is a great software for symbolic computations
and it has many features which are not yet available in Julia.
In this guide we show a possible workflow where the *symbolic* computations are happening
in Macaulay2 and the *numerical* work in Julia.

### Setting things up

Our goal is to have a function `writeSystem`

available which accepts
as input an ideal `I`

(or a list of polynomials) and a filename `f`

and generates a file `f`

containing the necessary Julia code to compute the solutions of `I`

using HomotopyContinuation.jl.

For example, the Macaulay2 code

```
R = QQ[x, y]
I = ideal(x^2 + y^2 + 1, x - y - 4)
writeSystem(I, "example1.jl")
```

should generate a file `example1.jl`

containing

```
# This file was auto generated from Macaulay2.
# For more information about HomotopyContinuation.jl visit:
# https://www.JuliaHomotopyContinuation.org
using HomotopyContinuation
@polyvar x y
f = [x^2+y^2+1, x-y-4];
result = solve(f)
```

The function `writeSystem`

can be achieved by the following code

You can copy and paste this code in your current Macaulay2 session and then you have the `writeSystem`

function available.
But since it is annoying to define this for every new session again we **recommend** to add the code to your `init.m2`

file.

**Acknowledgement**: A first version of the code was written by Tim Duff during a Macaulay2 workshop at the Max-Planck-Institute for Mathematics in the Sciences in Leipzig.

### An example from Schubert calculus

Let $M = (m_{ij})$ be a $3 \times 5$ matrix where the entries $m_{ij} \in \mathbb{Q}[x,y,z]$ are generic polynomials of degree 2. Schubert calculus tells us that the ideal $I$ generated by the maximal of minors of $M$ is zero dimensional with degree 80.

The code to generate $I$ is

```
R = QQ[x,y,z];
M = matrix apply(3,u->apply(5,t->random(2,R)+random(1,R)+random(0,R)))
I = minors(3,M);
```

Now we can use our new `writeSystem`

method to generate the necessary Julia code

```
writeSystem(I, "minors35.jl")
```

Now let’s start a Julia session and load the newly generated file

```
julia> include("minors35.jl")
```

```
Result with 80 solutions
==================================
• 80 non-singular solutions (4 real)
• 0 singular solutions (0 real)
• 216 paths tracked
• random seed: 488250
```

and we see that we found the correct number of solutions.