Ask Your Question

non-negative integer relations on vertices

asked 2015-10-06 12:34:03 -0500

Moon gravatar image

updated 2015-10-07 11:17:58 -0500

tmonteil gravatar image

I would like to check whether there is a nonnegative integer relations between the vertices of my lattice polytope. Here is my code (I copied from sage math document):

vertices = [(1,1,-1,-1,-1),(-1,-1,1,1,-1),(1,-1,-1,-1,1),(-1,1,1,1,1),(1,-1,1,-1,-1)]
p = LatticePolytope(vertices)
print p.vertices_pc()
print lattice_polytope.positive_integer_relations(p.vertices_pc().column_matrix())

Obviously, the sum of the first four vectors is zero vector. However, sage returns an error:

TypeError: unable to make sense of Maxima expression '"Problemnotfeasible!"' in Sage

I would like to understand the reason. Is there some obvious thing I am missing? Interestingly, if I remove the last vertex from the list, then it gives the expected relation.

edit retag flag offensive close merge delete


I think that this is a bug. Sage sholud be trying to communicate that it cannot find the required relations (since Maxima returned "Problem not feasible!"). You can try looking at the source code for the integer relation function using lattice_polytope.positive_integer_relations?? (not sure if this will be of any help).

fidbc gravatar imagefidbc ( 2015-10-06 14:44:26 -0500 )edit

I've never even seen this error message coming from Maxima! I've opened for that (not for the bug itself).

kcrisman gravatar imagekcrisman ( 2015-10-07 14:55:24 -0500 )edit

2 answers

Sort by ยป oldest newest most voted

answered 2015-10-07 11:17:30 -0500

tmonteil gravatar image

It looks like a bug, you can indeed find your nontrivial relation as follows:

sage: p.vertices().column_matrix().right_kernel()
Free module of degree 5 and rank 1 over Integer Ring
Echelon basis matrix:
[1 1 1 1 0]

It is now trac ticket 19365. Thanks for reporting.

edit flag offensive delete link more

answered 2015-10-07 21:05:42 -0500


In the mean time you can use the following simple code

sage: M = matrix(vertices)
sage: nrows = M.nrows()
sage: ncols = M.ncols()
sage: eqns = [[0] + M[i,:].list() for i in range(nrows)]
sage: ieqs = [[0]*i + [1] + [0]*(ncols-i) for i in range(1,ncols+1)]
sage: [r.vector() for r in Polyhedron(eqns=eqns, ieqs=ieqs, base_ring=ZZ).rays()]
[(1, 0, 0, 1, 0)]


edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2015-10-06 12:34:03 -0500

Seen: 359 times

Last updated: Oct 07 '15