This contains the algorithms to check for freeness of a hyperplane arrangement. See `sage.geometry.hyperplane_arrangement.HyperplaneArrangementElement.is_free()` for details.

Note

This could be extended to a freeness check for more general modules over a polynomial ring.

sage.geometry.hyperplane_arrangement.check_freeness.construct_free_chain(A)#

Construct the free chain for the hyperplanes `A`.

ALGORITHM:

We follow Algorithm 6.5 in [BC2012].

INPUT:

• `A` – a hyperplane arrangement

EXAMPLES:

```sage: from sage.geometry.hyperplane_arrangement.check_freeness import construct_free_chain
sage: H.<x,y,z> = HyperplaneArrangements(QQ)
sage: A = H(z, y+z, x+y+z)
sage: construct_free_chain(A)
[
[1 0 0]  [ 1  0  0]  [    0     1     0]
[0 1 0]  [ 0  z -1]  [y + z     0    -1]
[0 0 z], [ 0  y  1], [    x     0     1]
]
```
sage.geometry.hyperplane_arrangement.check_freeness.less_generators(X)#

Reduce the generator matrix of the module defined by `X`.

This is Algorithm 6.4 in [BC2012] and relies on the row syzygies of the matrix `X`.

EXAMPLES:

```sage: from sage.geometry.hyperplane_arrangement.check_freeness import less_generators
sage: R.<x,y,z> = QQ[]
sage: m = matrix([[1, 0, 0], [0, z, -1], [0, 0, 0], [0, y, 1]])
sage: less_generators(m)
[ 1  0  0]
[ 0  z -1]
[ 0  y  1]
```