Helper Functions For Freeness Of Hyperplane Arrangements#

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)[source]#

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]
]
>>> from sage.all import *
>>> from sage.geometry.hyperplane_arrangement.check_freeness import construct_free_chain
>>> H = HyperplaneArrangements(QQ, names=('x', 'y', 'z',)); (x, y, z,) = H._first_ngens(3)
>>> A = H(z, y+z, x+y+z)
>>> 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)[source]#

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]
>>> from sage.all import *
>>> from sage.geometry.hyperplane_arrangement.check_freeness import less_generators
>>> R = QQ['x, y, z']; (x, y, z,) = R._first_ngens(3)
>>> m = matrix([[Integer(1), Integer(0), Integer(0)], [Integer(0), z, -Integer(1)], [Integer(0), Integer(0), Integer(0)], [Integer(0), y, Integer(1)]])
>>> less_generators(m)
[ 1  0  0]
[ 0  z -1]
[ 0  y  1]