# Stanley-Reisner ideal from polytope

Hi!

I'm just discovering how sage works and i need to get Stanley-Reisner ideal from polytope, knowing coordinates of verticies. Is there a way to do it? Stanley-Reisner ideal is generated by two relations:

• sum of \lambda_i*v_i
• multiplication of v_i1,...,v_ik if intersection F_i1,...,F_ik is empty

Danilov–Jurkiewicz theorem. See for example [https://www.mathnet.ru/php/getFT.phtml?jrnid=rm&paperid=9883&what=fullteng&option_lang=rus (https://www.mathnet.ru/php/getFT.phtm...), 8.6]

I got that data:

dim=4, vert=6
1 -1 0 0 0 0
0 0 1 0 0 -1
0 0 0 1 0 -1
0 0 0 0 1 -1


I know that first relation i get will look like this: v0-v1 v1-v3 v2-v5 v3-v5 v4-v5

But for second one i need more calculations, because i can't tell what faces are intersecting knowing only verticies (i need to calculate it hundreds of times, so thats why i need computer).

I did some calculations in polymake:

$p2= new Polytope(POINTS=>[[1, 1,0,0,0],[1, -1,0,0,0],[1, 0,1,0,0],[1, 0,0,1,0],[1, 0,0,0,1],[1, 0,-1,-1,-1]]);$HD2 = $p2->HASSE_DIAGRAM; print$HD2->FACES;

Then i figure out what sets are missing and find minimal of them. But at some point i got mistake, thats why i need some other way to calucalte that ideal.

I tried something like that:

P = Polyhedron(vertices=[[1,0,0,0],[-1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1],[0,-1,-1,-1]])
I = P.stanley_reisner_ideal()


But it is not working. As i can understand it's can be done in some more complicated way, that i cant discover. How can i do this?

edit retag close merge delete

Sort by » oldest newest most voted

The Stanley_Reisner_ideal function exists in SageMath for a rational polyhedral fan :

sage: fan = Fan([[0,1,3], [3,4], [2,0], [1,2,4]],
....:          [(-3, -2, 1), (0, 0, 1), (3, -2, 1), (-1, -1, 1), (1, -1, 1)])
sage: fan.Stanley_Reisner_ideal(PolynomialRing(QQ, 5, 'A, B, C, D, E'))
Ideal (A*E, C*D, A*B*C, B*D*E) of
Multivariate Polynomial Ring in A, B, C, D, E over Rational Field

sage: fan = Fan([[0,1,3], [3,4], [2,0], [1,2,4]],
....:           [(-3, -2, 1), (0, 0, 1), (3, -2, 1), (-1, -1, 1), (1, -1, 1)])
sage: X = ToricVariety(fan, coordinate_names='A B C D E', base_field=GF(5))
sage: SR = X.Stanley_Reisner_ideal(); SR
Ideal (A*E, C*D, A*B*C, B*D*E) of
Multivariate Polynomial Ring in A, B, C, D, E over Rational Field


Note that you may also compute the Stanley-Reisner ring of a simplicial complex. Here the method is not using capital letters:

sage: X = SimplicialComplex([[0,1,2], [0,2,3]])
sage: X.stanley_reisner_ring()
Quotient of Multivariate Polynomial Ring in x0, x1, x2, x3 over Integer Ring
by the ideal (x1*x3)


Hope this helps.

more

Thanks a lot! Now i see where to look for documentation. I found some functions like primitive_collections() that do exactly what i need. But i am still a little confused about making fan. Documentation says, that i need to provide cones in addition to rays if fan dimension is higher that 2, but all i respond is normal rays of polytope. Is there a way to construct fan of it without cones? I have idea that i can make polytope out of verticies, then somehow get its dual, and then get normal fan of it. And i work with reflexive polytopes, if it provides some better solutions for that problem

( 2024-06-12 17:43:22 +0200 )edit

I think i found a solution

points = [
[1, 0, 0, 0],
[-1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, -1, -1, -1]]
p = LatticePolytope(points)
fp = FaceFan(p)
fp.rays()
fp.primitive_collections()


I need some time to check it, but in general it does what i want

( 2024-06-12 19:06:42 +0200 )edit

There is a normal_fan method for polytopes. Also, you may read this quick tutorial or this longer introduction on polytopes in sagemath.

( 2024-06-12 19:13:41 +0200 )edit

Yeah, i saw normal_fan method, but it is good, if u have polytope coordinates and want to get it normal fan. In my situation i already got rays that are normal to facets of my polytope. So i want to construct fan from that rays, but in 4 dimensions, so i need cones. As i can understand, if i got rays vectors, i can construsct convex polytope of their ends, and then ask sage to make fan of its polytope by FaceFan(p) option. Then i can use rays of its fan that will be exactly what i started with, and then i can use fp.primitive_collections(), which provides all needed data (see primitive_collections() documentation note). Am i correct or missing something?

( 2024-06-12 21:25:49 +0200 )edit

Strictly speaking, the Stanley-Reisner ideal or ring is not defined for all polytopes, but simplicial ones, where one then looks at the boundary complex of the polytope. I added a second answer with this in mind.

( 2024-06-13 17:50:22 +0200 )edit

Strictly speaking, the Stanley-Reisner ideal or ring is not defined for all polytopes, but simplicial ones, where one then looks at the boundary complex of the polytope.

You can get the Stanley-Reisner ideal like so:

sage: P = Polyhedron(vertices=[[1,0,0,0],[-1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1],[0,-1,-1,-1]])
sage: BC = P.boundary_complex()
sage: SRR = BC.stanley_reisner_ring()
sage: I = SRR.defining_ideal(); I
Ideal (x1*x2*x3*x4, x0*x5) of Multivariate Polynomial Ring in x0, x1, x2, x3, x4, x5 over Integer Ring

more