====== BigObject Polytope ====== //from application [[..:polytope|polytope]]//\\ \\ Not necessarily bounded convex polyhedron, i.e., the feasible region of a linear program. Nonetheless, the name "Polytope" is used for two reasons: Firstly, as far as the combinatorics is concerned we always deal with polytopes; see the description of ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'' for details. Note that a pointed polyhedron is projectively equivalent to a polytope. The second reason is historical. We use homogeneous coordinates, which is why Polytope is derived from ''[[..:polytope:Cone |Cone]]''. ? Type Parameters: :: ''Scalar'': numeric data type used for the coordinates, must be an ordered field. Default is ''[[..:common#Rational |Rational]]''. ? derived from: : ''[[..:polytope:Cone |Cone]]'' ? Specializations: :: ''Polytope::Lattice'': A polytope all of whose vertex coordinates are integral. :: ''Polytope'': A pointed polyhedron with float coordinates realized in Rd. It mainly exists for visualization. Convex hull and related algorithms use floating-point arithmetics. Due to numerical errors inherent to this kind of computations, the resulting combinatorial description can be arbitrarily far away from the truth, or even not correspond to any valid polytope. You have been warned. None of the standard construction clients produces objects of this type. If you want to get one, create it with the explicit constructor or ''[[..:polytope#convert_to |convert_to]]''. :: ''Polytope'': A rational polyhedron realized in Q^d :: ''Symmetry'': These specializations capture information of the object that is concerned with the action of permutation groups. ? Example: :: To construct a polytope as the convex hull of three points in the plane use :: > $p=new Polytope(POINTS=>[[1,0,0],[1,1,0],[1,0,1]]); > print $p->N_FACETS 3 :: Note that homogeneous coordinates are used throughout. ? Example: :: Many standard constructions are available directly. For instance, to get a regular 120-cell (which is 4-dimensional) use: :: > $c=regular_120_cell(); > print $c->VOLUME; 1575+705r5 :: This is the exact volume 1575+705*\sqrt{5}. polymake has limited support for polytopes with non-rational coordinates. ===== Properties ===== ==== Input property ==== These properties are for input only. They allow redundant information. ---- {{anchor:equations:}} ? **''EQUATIONS''** :: Equations that hold for all points of the polyhedron. A vector (A0, A1, ..., Ad) describes the hyperplane of all points (1, x1, ..., xd) such that A0 + A1 x1 + ... + Ad xd = 0. All vectors in this section must be non-zero. Input section only. Ask for ''[[..:polytope:Polytope#AFFINE_HULL |AFFINE_HULL]]'' if you want to see an irredundant description of the affine span. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:inequalities:}} ? **''INEQUALITIES''** :: Inequalities that describe half-spaces such that the polyhedron is their intersection. Redundancies are allowed. Dual to ''[[..:polytope:Polytope#POINTS |POINTS]]''. A vector (A0, A1, ..., Ad) defines the (closed affine) half-space of points (1, x1, ..., xd) such that A0 + A1 x1 + ... + Ad xd >= 0. Input section only. Ask for ''[[..:polytope:Cone#FACETS |FACETS]]'' and ''[[..:polytope:Polytope#AFFINE_HULL |AFFINE_HULL]]'' if you want to compute an H-representation from a V-representation. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:points:}} ? **''POINTS''** :: Points such that the polyhedron is their convex hull. Redundancies are allowed. The vector (x0, x1, ... xd) represents a point in d-space given in homogeneous coordinates. Affine points are identified by x0 > 0. Points with x0 = 0 can be interpreted as rays. polymake automatically normalizes each coordinate vector, dividing them by the first non-zero element. The clients and rule subroutines can always assume that x0 is either 0 or 1. All vectors in this section must be non-zero. Dual to ''[[..:polytope:Polytope#INEQUALITIES |INEQUALITIES]]''. Input section only. Ask for ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' if you want to compute a V-representation from an H-representation. Alias for property ''[[..:polytope:Cone#INPUT_RAYS |INPUT_RAYS]]''. ? Type: :''[[..:common#Matrix |Matrix]]'' ? Example: :: Given some (homogeneous) points in 3-space we first construct a matrix containing them. Assume we don't know wether these are all vertices of their convex hull or not. To safely produce a polytope from these points, we set the input to the matrix representing them. In the following the points under consideration are the vertices of the 3-simplex together with their barycenter, which will be no vertex: :: > $M = new Matrix([[1,0,0,0],[1,1,0,0],[1,0,1,0],[1,0,0,1],[1,1/4,1/4,1/4]]); > $p = new Polytope(POINTS=>$M); > print $p->VERTICES; 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 ---- ==== Combinatorics ==== These properties capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice. ---- {{anchor:balance:}} ? **''BALANCE''** :: Maximal dimension in which all facets are balanced. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: The following full dimensional polytope given by 10 specific vertices on the 8-dimensional sphere is 3-neighborly. Hence the dual polytope is 3-balanced, where we first center and then polarize it. :: > $p = rand_sphere(8,10,seed=>8866463); > $q = polarize(center($p)); > print $q->BALANCE; 3 ---- {{anchor:balanced:}} ? **''BALANCED''** :: Dual to ''[[..:polytope:Polytope#NEIGHBORLY |NEIGHBORLY]]''. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: Since cyclic polytopes generated by vertices on the moment curve are neighborly, their dual polytopes are balanced. The following checks this for the 4-dimensional case by centering the cyclic polytope and then polarizing it: :: > $p = cyclic(4,6); > $q = polarize(center($p)); > print $q->BALANCED; true ---- {{anchor:cd_index_coefficients:}} ? **''CD_INDEX_COEFFICIENTS''** :: Coefficients of the cd-index. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:cocubical:}} ? **''COCUBICAL''** :: Dual to ''[[..:polytope:Polytope#CUBICAL |CUBICAL]]''. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: Since the cross-polytope is dual to a cube of same dimension, it is cocubical. The following checks this for the 3-dimensional case: :: > print cross(3)->COCUBICAL; true ---- {{anchor:cocubicality:}} ? **''COCUBICALITY''** :: Dual to ''[[..:polytope:Polytope#CUBICALITY |CUBICALITY]]''. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: After stacking a facet of the 3-dimensional cube, its cubicality is lowered to 2. Hence its dual polytope has cocubicality 2 as well. The following produces such a stacked cube and asks for its cocubicality after polarization: :: > $p = stack(cube(3),5); > print polarize($p)->COCUBICALITY; 2 ---- {{anchor:complexity:}} ? **''COMPLEXITY''** :: Parameter describing the shape of the face-lattice of a 4-polytope. ? Type: :''[[..:common#Float |Float]]'' ---- {{anchor:cubical:}} ? **''CUBICAL''** :: True if all facets are cubes. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: A k-dimensional cube has k-1-dimensional cubes as facets and is therefore cubical. The following checks if this holds for the 3-dimensional case: :: > print cube(3)->CUBICAL; true ? Example: :: This checks if a zonotope generated by 4 random points on the 3-dimensional sphere is cubical, which is always the case. :: > print zonotope(rand_sphere(3,4)->VERTICES)->CUBICAL; true ---- {{anchor:cubicality:}} ? **''CUBICALITY''** :: Maximal dimension in which all facets are cubes. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: We will modify the 3-dimensional cube in two different ways. While stacking some facets (in this case facets 4 and 5) preserves the cubicality up to dimension 2, truncating an arbitrary vertex reduces the cubicality to 1. :: > print stack(cube(3),[4,5])->CUBICALITY; 2 :: > print truncation(cube(3),5)->CUBICALITY; 1 ---- {{anchor:cubical_h_vector:}} ? **''CUBICAL_H_VECTOR''** :: Cubical h-vector. Defined for cubical polytopes. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:dual_bounded_h_vector:}} ? **''DUAL_BOUNDED_H_VECTOR''** :: h-vector of the bounded subcomplex, defined for not necessarily bounded polyhedra which are simple (as polyhedra, i.e., ''[[..:polytope:Cone#VERTEX_DEGREES |VERTEX_DEGREES]]'' on the ''[[..:polytope:Polytope#FAR_FACE |FAR_FACE]]'' do not matter). Coincides with the reverse h-vector of the dual simplicial ball. Note that this vector will usually start with a number of zero entries. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:dual_graph:}} ? **''DUAL_GRAPH''** :: ? Type: :''[[..:graph:Graph |Graph]]<[[..:common#Undirected |Undirected]]>'' ? Properties of DUAL_GRAPH: : ? **''DIHEDRAL_ANGLES''** :: Dihedral angles (in radians) between the two facets corresponding to each edge of the dual graph, i.e. the ridges of the polytope. ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],[[..:common#Float |Float]]>'' ---- {{anchor:dual_h_vector:}} ? **''DUAL_H_VECTOR''** :: Dual h-vector, defined via recursion on the face lattice of a polytope. Coincides for simple polytopes with the combinatorial definition of the h-vector via abstract objective functions. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:edge_orientable:}} ? **''EDGE_ORIENTABLE''** :: True if there exists an edge-orientation (see ''[[..:polytope:Polytope#EDGE_ORIENTATION |EDGE_ORIENTATION]]'' for a definition). The polytope is required to be 2-cubical. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: The following checks a 3-dimensional cube for edge orientability: :: > $p = cube(3); > print $p->EDGE_ORIENTABLE; true ? Example: :: A 3-dimensinal cube with one stacked facet is still 2-cubical. Therefore we can check for edge orientability: :: > $p = stack(cube(3),5); > print $p->EDGE_ORIENTABLE; true ---- {{anchor:edge_orientation:}} ? **''EDGE_ORIENTATION''** :: List of all edges with orientation, such that for each 2-face the opposite edges point in the same direction. Each line is of the form (u v), which indicates that the edge {u,v} is oriented from u to v. The polytope is required to be 2-cubical. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Int |Int]],[[..:common#NonSymmetric |NonSymmetric]]>'' ? Example: :: The following prints a list of oriented edges of a 2-dimensional cube such that opposing edges have the same orientation: :: > $p = cube(2); > print $p->EDGE_ORIENTATION; 0 2 1 3 0 1 2 3 ---- {{anchor:excess_vertex_degree:}} ? **''EXCESS_VERTEX_DEGREE''** :: Measures the deviation of the cone from being simple in terms of the ''[[..:polytope:Polytope#GRAPH |GRAPH]]''. Alias for property ''[[..:polytope:Cone#EXCESS_RAY_DEGREE |EXCESS_RAY_DEGREE]]''. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: The excess vertex degree of an egyptian pyramid is one. :: > print pyramid(cube(2))->EXCESS_VERTEX_DEGREE; 1 ---- {{anchor:f2_vector:}} ? **''F2_VECTOR''** :: fik is the number of incident pairs of i-faces and k-faces; the main diagonal contains the ''[[..:polytope:Polytope#F_VECTOR |F_VECTOR]]''. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Integer |Integer]],[[..:common#NonSymmetric |NonSymmetric]]>'' ? Example: :: The following prints the f2-vector of a 3-dimensional cube: :: > print cube(3)->F2_VECTOR; 8 24 24 24 12 24 24 24 6 ---- {{anchor:facets_thru_vertices:}} ? **''FACETS_THRU_VERTICES''** :: transposed ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'' Notice that this is a temporary property; it will not be stored in any file. Alias for property ''[[..:polytope:Cone#FACETS_THRU_RAYS |FACETS_THRU_RAYS]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:face_simplicity:}} ? **''FACE_SIMPLICITY''** :: Maximal dimension in which all faces are simple polytopes. This checks the 3-dimensional cube for face simplicity. Since the cube is dual to the cross-polytope of equal dimension and it is simplicial, the result is 3. > print cube(3)->SIMPLICITY; | 3 ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:fatness:}} ? **''FATNESS''** :: Parameter describing the shape of the face-lattice of a 4-polytope. ? Type: :''[[..:common#Float |Float]]'' ---- {{anchor:foldable_max_signature_upper_bound:}} ? **''FOLDABLE_MAX_SIGNATURE_UPPER_BOUND''** :: An upper bound for the maximal signature of a foldable triangulation of a polytope The signature is the absolute difference of the normalized volumes of black minus white maximal simplices, where only odd normalized volumes are taken into account. ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:f_vector:}} ? **''F_VECTOR''** :: fk is the number of k-faces. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ? Example: :: This prints the f-vector of a 3-dimensional cube. The first entry represents the vertices. :: > print cube(3)->F_VECTOR; 8 12 6 ? Example: :: This prints the f-vector of the 3-dimensional cross-polytope. Since the cube and the cross polytope of equal dimension are dual, their f-vectors are the same up to reversion. :: > print cross(3)->F_VECTOR; 6 12 8 ? Example: :: After truncating the first standard basis vector of the 3-dimensional cross-polytope the f-vector changes. Only segments of the incident edges of the cut off vertex remain and the intersection of these with the new hyperplane generate four new vertices. These also constitute four new edges and a new facet. :: > print truncation(cross(3),4)->F_VECTOR; 9 16 9 ---- {{anchor:graph:}} ? **''GRAPH''** :: ? Type: :''[[..:graph:Graph |Graph]]<[[..:common#Undirected |Undirected]]>'' ? Properties of GRAPH: : ? **''EDGE_DIRECTIONS''** :: Difference of the vertices for each edge (only defined up to signs). ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],[[..:common#Vector |Vector]]>%%'' ? **''SQUARED_EDGE_LENGTHS''** :: Squared Euclidean length of each edge ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],Scalar>'' ? **''LATTICE_ACCUMULATED_EDGE_LENGTHS''** :: a map associating to each edge length of the polytope the number of edges with this length the lattice edge length of an edge is one less than the number of lattice points on that edge ? Type: :''[[..:common#Map |Map]]<[[..:common#Integer |Integer]],[[..:common#Int |Int]]>'' ? **''LATTICE_EDGE_LENGTHS''** :: the lattice lengths of the edges of the polytope i.e. for each edge one less than the number of lattice points on that edge ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],[[..:common#Integer |Integer]]>'' ---- {{anchor:g_vector:}} ? **''G_VECTOR''** :: (Toric) g-vector, defined via the (generalized) h-vector as gi = hi - hi-1. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:hasse_diagram:}} ? **''HASSE_DIAGRAM''** :: ? Type: :''[[..:graph:PartiallyOrderedSet |PartiallyOrderedSet]]<[[..:graph#BasicDecoration |BasicDecoration]],[[..:graph#Sequential |Sequential]]>'' ---- {{anchor:h_vector:}} ? **''H_VECTOR''** :: (Toric) h-vector, defined via recursion on the face lattice of a polytope. Coincides for simplicial polytopes with the combinatorial definition of the h-vector via shellings. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:minimal_non_faces:}} ? **''MINIMAL_NON_FACES''** :: Minimal non-faces of a ''[[..:polytope:Polytope#SIMPLICIAL |SIMPLICIAL]]'' polytope. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:moebius_strip_edges:}} ? **''MOEBIUS_STRIP_EDGES''** :: Ordered list of edges of a Moebius strip with parallel interior edges. Consists of k lines of the form (vi wi), for i=1, ..., k. The Moebius strip in question is given by the quadrangles (vi, wi, wi+1,vi+1), for i=1, ..., k-1, and the quadrangle (v1, w1, vk, wk). Validity can be verified with the client ''[[..:polytope#validate_moebius_strip |validate_moebius_strip]]''. The polytope is required to be 2-cubical. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Int |Int]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:moebius_strip_quads:}} ? **''MOEBIUS_STRIP_QUADS''** :: Unordered list of quads which forms a Moebius strip with parallel interior edges. Each line lists the vertices of a quadrangle in cyclic order. Validity can be verified with the client ''[[..:polytope#validate_moebius_strip_quads |validate_moebius_strip_quads]]''. The polytope is required to be 2-cubical. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Int |Int]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:neighborliness:}} ? **''NEIGHBORLINESS''** :: Maximal dimension in which all facets are neighborly. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: This determines that the full dimensional polytope given by 10 specific vertices on the 8-dimensional sphere is 3-neighborly, i.e. all 3-dimensional faces are tetrahedra. Hence the polytope is not neighborly. :: > print rand_sphere(8,10,seed=>8866463)->NEIGHBORLINESS; 3 ---- {{anchor:neighborly:}} ? **''NEIGHBORLY''** :: True if the polytope is neighborly. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: This checks the 4-dimensional cyclic polytope with 6 points on the moment curve for neighborliness, i.e. if it is ⌊dim/2⌋ neighborly: :: > print cyclic(4,6)->NEIGHBORLY; true ---- {{anchor:n_vertex_facet_inc:}} ? **''N_VERTEX_FACET_INC''** :: Number of pairs of incident vertices and facets. Alias for property ''[[..:polytope:Cone#N_RAY_FACET_INC |N_RAY_FACET_INC]]''. ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:n_vertices:}} ? **''N_VERTICES''** :: Number of ''[[..:polytope:Polytope#VERTICES |VERTICES]]''. Alias for property ''[[..:polytope:Cone#N_RAYS |N_RAYS]]''. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: The following prints the number of vertices of a 3-dimensional cube: :: > print cube(3)->N_VERTICES; 8 ? Example: :: The following prints the number of vertices of the convex hull of 10 specific points lying in the unit square [0,1]^2: :: > print rand_box(2,10,1,seed=>4583572)->N_VERTICES; 4 ---- {{anchor:self_dual:}} ? **''SELF_DUAL''** :: True if the polytope is self-dual. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: The following checks if the centered square with side length 2 is self dual: :: > print cube(2)->SELF_DUAL; true ? Example: :: The elongated square pyramid (Johnson solid 8) is dual to itself, since the apex of the square pyramid attachted to the cube and the opposing square of the cube swap roles. The following checks this property and prints the result: :: > print johnson_solid(8)->SELF_DUAL; true ---- {{anchor:simple:}} ? **''SIMPLE''** :: True if the polytope is simple. Dual to ''[[..:polytope:Polytope#SIMPLICIAL |SIMPLICIAL]]''. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: This determines if a 3-dimensional cube is simple or not: :: > print cube(3)->SIMPLE; true ---- {{anchor:simplexity_lower_bound:}} ? **''SIMPLEXITY_LOWER_BOUND''** :: A lower bound for the minimal number of simplices in a triangulation ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:simplicial:}} ? **''SIMPLICIAL''** :: True if the polytope is simplicial. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: A polytope with random vertices uniformly distributed on the unit sphere is simplicial. The following checks this property and prints the result for 8 points in dimension 3: :: > print rand_sphere(3,8)->SIMPLICIAL; true ---- {{anchor:simpliciality:}} ? **''SIMPLICIALITY''** :: Maximal dimension in which all faces are simplices. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: The 3-dimensional cross-polytope is simplicial, i.e. its simplicity is 2. After truncating an arbitrary vertex the simplicity is reduced to 1. :: > print cross(3)->SIMPLICIALITY; 2 :: > print truncation(cross(3),4)->SIMPLICIALITY; 1 ---- {{anchor:simplicity:}} ? **''SIMPLICITY''** :: Maximal dimension in which all dual faces are simplices. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: This checks the 3-dimensional cube for simplicity. Since the cube is dual to the cross-polytope of equal dimension and all its faces are simplices, the result is 2. :: > print cube(3)->SIMPLICITY; 2 ---- {{anchor:subridge_sizes:}} ? **''SUBRIDGE_SIZES''** :: Lists for each occurring size (= number of incident facets or ridges) of a subridge how many there are. ? Type: :''[[..:common#Map |Map]]<[[..:common#Int |Int]],[[..:common#Int |Int]]>'' ---- {{anchor:two_face_sizes:}} ? **''TWO_FACE_SIZES''** :: Lists for each occurring size (= number of incident vertices or edges) of a 2-face how many there are. ? Type: :''[[..:common#Map |Map]]<[[..:common#Int |Int]],[[..:common#Int |Int]]>'' ? Example: :: This prints the number of facets spanned by 3,4 or 5 vertices a truncated 3-dimensional cube has. :: > $p = truncation(cube(3),5); > print $p->TWO_FACE_SIZES; {(3 1) (4 3) (5 3)} ---- {{anchor:vertex_sizes:}} ? **''VERTEX_SIZES''** :: Number of incident facets for each vertex. Alias for property ''[[..:polytope:Cone#RAY_SIZES |RAY_SIZES]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#Int |Int]]>'' ? Example: :: The following prints the number of incident facets for each vertex of the elongated pentagonal pyramid (Johnson solid 9) :: > print johnson_solid(9)->VERTEX_SIZES; 5 4 4 4 4 4 3 3 3 3 3 ---- {{anchor:vertices_in_facets:}} ? **''VERTICES_IN_FACETS''** :: Vertex-facet incidence matrix, with rows corresponding to facets and columns to vertices. Vertices and facets are numbered from 0 to ''[[..:polytope:Polytope#N_VERTICES |N_VERTICES]]''-1 rsp. ''[[..:polytope:Cone#N_FACETS |N_FACETS]]''-1, according to their order in ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' rsp. ''[[..:polytope:Cone#FACETS |FACETS]]''. This property is at the core of all combinatorial properties. It has the following semantics: (1) The combinatorics of an unbounded and pointed polyhedron is defined to be the combinatorics of the projective closure. (2) The combiantorics of an unbounded polyhedron which is not pointed is defined to be the combinatorics of the quotient modulo the lineality space. Therefore: ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'' and each other property which is grouped under "Combinatorics" always refers to some polytope. Alias for property ''[[..:polytope:Cone#RAYS_IN_FACETS |RAYS_IN_FACETS]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ? Example: :: The following prints the vertex-facet incidence matrix of a 5-gon by listing all facets as a set of contained vertices in a cyclic order (each line corresponds to an edge): :: > print n_gon(5)->VERTICES_IN_FACETS; {1 2} {2 3} {3 4} {0 4} {0 1} ? Example: :: The following prints the Vertex_facet incidence matrix of the standard 3-simplex together with the facet numbers: :: > print rows_numbered(simplex(3)->VERTICES_IN_FACETS); 0:1 2 3 1:0 2 3 2:0 1 3 3:0 1 2 ---- ==== Geometry ==== These properties capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets. ---- {{anchor:affine_hull:}} ? **''AFFINE_HULL''** :: Dual basis of the affine hull of the polyhedron. The property ''[[..:polytope:Polytope#AFFINE_HULL |AFFINE_HULL]]'' appears only in conjunction with the property ''[[..:polytope:Cone#FACETS |FACETS]]''. The specification of the property ''[[..:polytope:Cone#FACETS |FACETS]]'' requires the specification of ''[[..:polytope:Polytope#AFFINE_HULL |AFFINE_HULL]]'', and vice versa. Alias for property ''[[..:polytope:Cone#LINEAR_SPAN |LINEAR_SPAN]]''. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:bounded:}} ? **''BOUNDED''** :: True if and only if ''[[..:polytope:Cone#LINEALITY_SPACE |LINEALITY_SPACE]]'' trivial and ''[[..:polytope:Polytope#FAR_FACE |FAR_FACE]]'' is trivial. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: A pyramid over a square is bounded. Removing the base square yields an unbounded pointed polyhedron (the vertices with first entry equal to zero correspond to rays). :: > $p = pyramid(cube(2)); > print $p->BOUNDED; true :: > $q = facet_to_infinity($p,4); > print $q->BOUNDED; false ---- {{anchor:centered:}} ? **''CENTERED''** :: True if (1, 0, 0, ...) is in the relative interior. If full-dimensional then polar to ''[[..:polytope:Polytope#BOUNDED |BOUNDED]]''. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: The cube [0,1]^3 is not centered, since the origin is on the boundary. By a small translation we can make it centered: :: > $p = cube(3,0,0); > print $p->CENTERED; false :: > $t = new Vector([-1/2,-1/2,-1/2]); > print translate($p,$t)->CENTERED; true ---- {{anchor:centered_zonotope:}} ? **''CENTERED_ZONOTOPE''** :: is the zonotope calculated from ZONOTOPE_INPUT_POINTS or ZONOTOPE_INPUT_VECTORS to be centered at the origin? The zonotope is always calculated as the Minkowski sum of all segments conv {x,v}, where * v ranges over the ZONOTOPE_INPUT_POINTS or ZONOTOPE_INPUT_VECTORS, and * x = -v if CENTERED_ZONOTOPE = 1, * x = 0 if CENTERED_ZONOTOPE = 0. .. Input section only. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:centrally_symmetric:}} ? **''CENTRALLY_SYMMETRIC''** :: True if P = -P. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: A centered 3-cube is centrally symmetric. By stacking a single facet (5), this property is lost. We can recover it by stacking the opposing facet (4) as well. :: > $p = cube(3); > print $p->CENTRALLY_SYMMETRIC; true :: > print stack($p,5)->CENTRALLY_SYMMETRIC; false :: > print stack($p,new Set(4,5))->CENTRALLY_SYMMETRIC; true ---- {{anchor:centroid:}} ? **''CENTROID''** :: Centroid (center of mass) of the polytope. ? Type: :''[[..:common#Vector |Vector]]'' ---- {{anchor:cone_ambient_dim:}} ? **''CONE_AMBIENT_DIM''** :: One more than the dimension of the space in which the polyhedron lives. = dimension of the space in which the homogenization of the polyhedron lives ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:cone_dim:}} ? **''CONE_DIM''** :: One more than the dimension of the affine hull of the polyhedron = one more than the dimension of the polyhedron. = dimension of the homogenization of the polyhedron If the polytope is given purely combinatorially, this is the dimension of a minimal embedding space ? Type: :''[[..:common#Int |Int]]'' ? Example: :: This prints the cone dimension of a 3-cube. Since the dimension of its affine closure is 3, the result is 4. :: > print cube(3)->CONE_DIM; 4 ---- {{anchor:cs_permutation:}} ? **''CS_PERMUTATION''** :: The permutation induced by the central symmetry, if present. ? Type: :''[[..:common#Array |Array]]<[[..:common#Int |Int]]>'' ---- {{anchor:facets_thru_points:}} ? **''FACETS_THRU_POINTS''** :: similar to ''[[..:polytope:Polytope#FACETS_THRU_VERTICES |FACETS_THRU_VERTICES]]'', but with ''[[..:polytope:Polytope#POINTS |POINTS]]'' instead of ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' Notice that this is a temporary property; it will not be stored in any file. Alias for property ''[[..:polytope:Cone#FACETS_THRU_INPUT_RAYS |FACETS_THRU_INPUT_RAYS]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:facet_volumes:}} ? **''FACET_VOLUMES''** :: The (d-1)-dimensional Euclidean volumes of the facets of an d-dimensional rational polytope emedded in R^d. Each entry in the returned Array is the volume of one facet of the polytope, where the facets are indexed as in [[..:polytope:Cone#FACETS |FACETS]]. ? Type: :''[[..:common#Array |Array]]<[[..:common#QuadraticExtension |QuadraticExtension]]<[[..:common#Rational |Rational]]%%>>%%'' ? Example: :: The 2-dimensional cross-polytope is a rational polytope whose edges (facets) all have lengths sqrt(2). :: > print cross(2)->FACET_VOLUMES; 0+1r2 0+1r2 0+1r2 0+1r2 ---- {{anchor:far_hyperplane:}} ? **''FAR_HYPERPLANE''** :: Valid strict inequality for all affine points of the polyhedron. ? Type: :''[[..:common#Vector |Vector]]'' ---- {{anchor:feasible:}} ? **''FEASIBLE''** :: True if the polyhedron is not empty. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:gale_transform:}} ? **''GALE_TRANSFORM''** :: Coordinates of the Gale transform. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:inequalities_thru_vertices:}} ? **''INEQUALITIES_THRU_VERTICES''** :: transposed ''[[..:polytope:Polytope#VERTICES_IN_INEQUALITIES |VERTICES_IN_INEQUALITIES]]'' Alias for property ''[[..:polytope:Cone#INEQUALITIES_THRU_RAYS |INEQUALITIES_THRU_RAYS]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:lattice:}} ? **''LATTICE''** :: A rational polytope is lattice if each bounded vertex has integer coordinates. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:minimal_ball:}} ? **''MINIMAL_BALL''** :: The minimal Ball which contains a the Polytope. The ball is given by its center c and the square of it radius r. ? Type: :''[[..:common#Pair |Pair]]>%%'' ? Example: :: > $P = new Polytope(POINTS=>[[1,0],[1,4]]); > print $P->MINIMAL_BALL; 4 <1 2> ---- {{anchor:minimal_vertex_angle:}} ? **''MINIMAL_VERTEX_ANGLE''** :: The minimal angle between any two vertices (seen from the ''[[..:polytope:Polytope#VERTEX_BARYCENTER |VERTEX_BARYCENTER]]''). ? Type: :''[[..:common#Float |Float]]'' ---- {{anchor:minkowski_cone:}} ? **''MINKOWSKI_CONE''** :: The cone of all Minkowski summands of the polytope P. Up to scaling, a polytope S is a Minkowski summand of P if and only if the edge directions of S are a subset of those of P, and the closing condition around any 2-face of P is preserved. Coordinates of the cone correspond to the rescaled lengths of the edges of the graph of P (in the order given by the property ''[[..:graph:Graph#EDGES |EDGES]]'' of the ''[[..:polytope:Cone#GRAPH |GRAPH]]'' of P). The Minkowski cone is defined as the intersection of all equations given by the closing condition around 2-faces with the positive orthant. For more information see e.g. Klaus Altmann: The versal deformation of an isolated toric Gorenstein singularity ? Type: :''[[..:polytope:Cone |Cone]]<[[..:common#Rational |Rational]]>'' ---- {{anchor:n_01points:}} ? **''N_01POINTS''** :: Number of points with 0/1-coordinates in a polytope. ? Type: :''[[..:common#Int |Int]]'' ? depends on extension: : [[:external_software|azove]] ---- {{anchor:n_points:}} ? **''N_POINTS''** :: Number of ''[[..:polytope:Polytope#POINTS |POINTS]]''. Alias for property ''[[..:polytope:Cone#N_INPUT_RAYS |N_INPUT_RAYS]]''. ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:one_vertex:}} ? **''ONE_VERTEX''** :: A vertex of a pointed polyhedron. Alias for property ''[[..:polytope:Cone#ONE_RAY |ONE_RAY]]''. ? Type: :''[[..:common#Vector |Vector]]'' ? Example: :: This prints the first vertex of the 3-cube (corresponding to the first row in the vertex matrix). :: > print cube(3)->ONE_VERTEX; 1 -1 -1 -1 ---- {{anchor:pointed:}} ? **''POINTED''** :: True if the polyhedron does not contain an affine line. ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: A square does not contain an affine line and is therefore pointed. Removing one facet does not change this, although it is no longer bounded. After removing two opposing facets, it contains infinitely many affine lines orthogonal to the removed facets. :: > $p = cube(2); > print $p->POINTED; true :: > print facet_to_infinity($p,0)->POINTED; true :: > print new Polytope(INEQUALITIES=>$p->FACETS->minor([0,1],All))->POINTED; false ---- {{anchor:points_in_facets:}} ? **''POINTS_IN_FACETS''** :: Similar to ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'', but with columns corresponding to ''[[..:polytope:Polytope#POINTS |POINTS]]'' instead of ''[[..:polytope:Polytope#VERTICES |VERTICES]]''. This property is a byproduct of convex hull computation algorithms. It is discarded as soon as ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'' is computed. Alias for property ''[[..:polytope:Cone#INPUT_RAYS_IN_FACETS |INPUT_RAYS_IN_FACETS]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:quotient_space:}} ? **''QUOTIENT_SPACE''** :: A topological quotient space obtained from a polytope by identifying faces. ? Type: :''[[..:polytope:QuotientSpace |QuotientSpace]]'' ---- {{anchor:slack_ideal:}} ? **''SLACK_IDEAL''** :: The slack ideal of the polytope as described in > João Gouveia, Antonio Macchia, Rekha R. Thomas, Amy Wiebe: > The Slack Realization Space of a Polytope > (https://arxiv.org/abs/1708.04739) Since saturation is computationally expensive, a non-saturated version of the ideal is stored in the property ''[[..:ideal:SlackIdeal#NON_SATURATED |NON_SATURATED]]''. Asking for ''[[..:ideal:Ideal#GENERATORS |GENERATORS]]'' will do the saturation. ? Type: :''[[..:ideal:SlackIdeal |SlackIdeal]]'' ? depends on extension: : [[:external_software|singular]] ? Example: :: > $c = cube(2,1,0); > $I = $c->SLACK_IDEAL; > $I->properties; type: SlackIdeal NON_SATURATED type: Ideal :: > $I->NON_SATURATED->properties; type: Ideal N_VARIABLES 8 GENERATORS x_0*x_3*x_5*x_6 - x_1*x_2*x_4*x_7 :: > print $I->GENERATORS; x_0*x_3*x_5*x_6 - x_1*x_2*x_4*x_7 ---- {{anchor:slack_matrix:}} ? **''SLACK_MATRIX''** :: The slack matrix of the polytope. The (i,j)-th entry is the value of the j-th facet on the i-th vertex. See > João Gouveia, Antonio Macchia, Rekha R. Thomas, Amy Wiebe: > The Slack Realization Space of a Polytope > (https://arxiv.org/abs/1708.04739) ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:special_facets:}} ? **''SPECIAL_FACETS''** :: The following is defined for ''[[..:polytope:Polytope#CENTERED |CENTERED]]'' polytopes only: A facet is special if the cone over that facet with the origin as the apex contains the ''[[..:polytope:Polytope#VERTEX_BARYCENTER |VERTEX_BARYCENTER]]''. Motivated by Obro's work on Fano polytopes. ? Type: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- {{anchor:splits:}} ? **''SPLITS''** :: The splits of the polytope, i.e., hyperplanes cutting the polytope in two parts such that we have a regular subdivision. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:split_compatibility_graph:}} ? **''SPLIT_COMPATIBILITY_GRAPH''** :: Two ''[[..:polytope:Polytope#SPLITS |SPLITS]]'' are compatible if the defining hyperplanes do not intersect in the interior of the polytope. This defines a graph. ? Type: :''[[..:graph:Graph |Graph]]<[[..:common#Undirected |Undirected]]>'' ---- {{anchor:steiner_point:}} ? **''STEINER_POINT''** :: Steiner point of the whole polytope. ? Type: :''[[..:common#Vector |Vector]]'' ---- {{anchor:steiner_points:}} ? **''STEINER_POINTS''** :: A weighted inner point depending on the outer angle called Steiner point for all faces of dimensions 2 to d. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- {{anchor:tiling_lattice:}} ? **''TILING_LATTICE''** :: An affine lattice L such that P + L tiles the affine span of P ? Type: :''[[..:polytope:AffineLattice |AffineLattice]]'' ---- {{anchor:valid_point:}} ? **''VALID_POINT''** :: Some point belonging to the polyhedron. ? Type: :''[[..:common#Vector |Vector]]'' ? Example: :: This stores a (homogeneous) point belonging to the 3-cube as a vector and prints its coordinates: :: > $v = cube(3)->VALID_POINT; > print $v; 1 -1 -1 -1 ---- {{anchor:vertex_barycenter:}} ? **''VERTEX_BARYCENTER''** :: The center of gravity of the vertices of a bounded polytope. ? Type: :''[[..:common#Vector |Vector]]'' ? Example: :: This prints the vertex barycenter of the standard 3-simplex: :: > print simplex(3)->VERTEX_BARYCENTER; 1 1/4 1/4 1/4 ---- {{anchor:vertex_normals:}} ? **''VERTEX_NORMALS''** :: The i-th row is the normal vector of a hyperplane separating the i-th vertex from the others. This property is a by-product of redundant point elimination algorithm. All vectors in this section must be non-zero. Alias for property ''[[..:polytope:Cone#RAY_SEPARATORS |RAY_SEPARATORS]]''. ? Type: :''[[..:common#Matrix |Matrix]]'' ? Example: :: This prints a matrix in which each row represents a normal vector of a hyperplane seperating one vertex of a centered square with side length 2 from the other ones. The first and the last hyperplanes as well as the second and third hyperplanes are the same up to orientation. :: > print cube(2)->VERTEX_NORMALS; 0 1/2 1/2 0 -1/2 1/2 0 1/2 -1/2 0 -1/2 -1/2 ---- {{anchor:vertices:}} ? **''VERTICES''** :: Vertices of the polyhedron. No redundancies are allowed. All vectors in this section must be non-zero. The coordinates are normalized the same way as ''[[..:polytope:Polytope#POINTS |POINTS]]''. Dual to ''[[..:polytope:Cone#FACETS |FACETS]]''. This section is empty if and only if the polytope is empty. The property ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' appears only in conjunction with the property ''[[..:polytope:Cone#LINEALITY_SPACE |LINEALITY_SPACE]]''. The specification of the property ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' requires the specification of ''[[..:polytope:Cone#LINEALITY_SPACE |LINEALITY_SPACE]]'', and vice versa. Alias for property ''[[..:polytope:Cone#RAYS |RAYS]]''. ? Type: :''[[..:common#Matrix |Matrix]]'' ? Example: :: To print the vertices (in homogeneous coordinates) of the standard 2-simplex, i.e. a right-angled isoceles triangle, type this: :: > print simplex(2)->VERTICES; (3) (0 1) 1 1 0 1 0 1 ? Example: :: If we know some points to be vertices of their convex hull, we can store them as rows in a Matrix and construct a new polytope with it. The following produces a 3-dimensioanl pyramid over the standard 2-simplex with the specified vertices: :: > $M = new Matrix([[1,0,0,0],[1,1,0,0],[1,0,1,0],[1,0,0,3]]); > $p = new Polytope(VERTICES=>$M); ? Example: :: The following adds a (square) pyramid to one facet of a 3-cube. We do this by extracting the vertices of the cube via the built-in method and then attach the apex of the pyramid to the matrix. :: > $v = new Vector([1,0,0,3/2]); > $M = cube(3)->VERTICES / $v; > $p = new Polytope(VERTICES=>$M); ---- {{anchor:vertices_in_inequalities:}} ? **''VERTICES_IN_INEQUALITIES''** :: Similar to ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'', but with rows corresponding to ''[[..:polytope:Polytope#INEQUALITIES |INEQUALITIES]]'' instead of ''[[..:polytope:Cone#FACETS |FACETS]]''. This property is a byproduct of convex hull computation algorithms. It is discarded as soon as ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'' is computed. Alias for property ''[[..:polytope:Cone#RAYS_IN_INEQUALITIES |RAYS_IN_INEQUALITIES]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:vertices_in_ridges:}} ? **''VERTICES_IN_RIDGES''** :: Alias for property ''[[..:polytope:Cone#RAYS_IN_RIDGES |RAYS_IN_RIDGES]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:weakly_centered:}} ? **''WEAKLY_CENTERED''** :: True if (1, 0, 0, ...) is contained (possibly in the boundary). ? Type: :''[[..:common#Bool |Bool]]'' ? Example: :: The cube [0,1]^3 is only weakly centered, since the origin is on the boundary. :: > $p = cube(3,0,0); > print $p->WEAKLY_CENTERED; true :: > print $p->CENTERED; false ---- {{anchor:zonotope_input_points:}} ? **''ZONOTOPE_INPUT_POINTS''** :: The rows of this matrix contain a configuration of affine points in homogeneous cooordinates. The zonotope is obtained as the Minkowski sum of all rows, normalized to x_0 = 1. Thus, if the input matrix has n columns, the ambient affine dimension of the resulting zonotope is n-1. ? Type: :''[[..:common#Matrix |Matrix]]'' ---- ==== Lattice points in cones ==== These properties capture information that depends on the lattice structure of the cone. polymake always works with the integer lattice. ---- {{anchor:canonical:}} ? **''CANONICAL''** :: The polytope is __canonical__ if there is exactly one interior lattice point. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:compressed:}} ? **''COMPRESSED''** :: True if the ''[[..:polytope:Polytope#FACET_WIDTH |FACET_WIDTH]]'' is one. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:ehrhart_polynomial:}} ? **''EHRHART_POLYNOMIAL''** :: The Ehrhart polynomial. ? Type: :''[[..:common#UniPolynomial |UniPolynomial]]<[[..:common#Rational |Rational]],[[..:common#Int |Int]]>'' ? depends on extension: : [[:external_software|latte or libnormaliz]] ---- {{anchor:ehrhart_quasi_polynomial:}} ? **''EHRHART_QUASI_POLYNOMIAL''** :: The Ehrhart quasi-polynomial of a rational polytope. Coefficients are periodic functions of integral period. ? Type: :''[[..:common#Array |Array]]<[[..:common#UniPolynomial |UniPolynomial]]<[[..:common#Rational |Rational]],[[..:common#Int |Int]]%%>>%%'' ? depends on extension: : [[:external_software|libnormaliz]] ? Example: :: To obtain the Ehrhart quasi-polynomial of a scaled 2-dimensional cross polytope write: :: > $p=scale(cross(2),1/3); > local_var_names>(qw(t)); print join("\n",@{$p->EHRHART_QUASI_POLYNOMIAL}); 2/9*t^2 + 2/3*t + 1 2/9*t^2 + 2/9*t + 5/9 2/9*t^2 -2/9*t + 5/9 ---- {{anchor:facet_vertex_lattice_distances:}} ? **''FACET_VERTEX_LATTICE_DISTANCES''** :: The entry (i,j) equals the lattice distance of vertex j from facet i. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Integer |Integer]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:facet_width:}} ? **''FACET_WIDTH''** :: The maximal integral width of the polytope with respect to the facet normals. ? Type: :''[[..:common#Integer |Integer]]'' ---- {{anchor:facet_widths:}} ? **''FACET_WIDTHS''** :: The integral width of the polytope with respect to each facet normal. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:gorenstein:}} ? **''GORENSTEIN''** :: The polytope is __Gorenstein__ if a dilation of the polytope is ''[[..:polytope:Polytope#REFLEXIVE |REFLEXIVE]]'' up to translation. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:gorenstein_index:}} ? **''GORENSTEIN_INDEX''** :: If the polytope is ''[[..:polytope:Polytope#GORENSTEIN |GORENSTEIN]]'' then this is the multiple such that the polytope is ''[[..:polytope:Polytope#REFLEXIVE |REFLEXIVE]]''. ? Type: :''[[..:common#Integer |Integer]]'' ---- {{anchor:gorenstein_vector:}} ? **''GORENSTEIN_VECTOR''** :: If the polytope is ''[[..:polytope:Polytope#GORENSTEIN |GORENSTEIN]]'', then this is the unique interior lattice point in the multiple of the polytope that is ''[[..:polytope:Polytope#REFLEXIVE |REFLEXIVE]]''. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:lattice_basis:}} ? **''LATTICE_BASIS''** :: ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' are interpreted as coefficient vectors for this basis given in affine form assumed to the the standard basis if not explicitely specified. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Rational |Rational]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:lattice_codegree:}} ? **''LATTICE_CODEGREE''** :: ''[[..:polytope:Cone#COMBINATORIAL_DIM |COMBINATORIAL_DIM]]''+1-''[[..:polytope:Polytope#LATTICE_DEGREE |LATTICE_DEGREE]]'' or the smallest integer k such that k*P has an interior lattice point. ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:lattice_degree:}} ? **''LATTICE_DEGREE''** :: The degree of the h*-polynomial or Ehrhart polynomial. ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:lattice_empty:}} ? **''LATTICE_EMPTY''** :: True if the polytope contains no lattice points other than the vertices. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:lattice_volume:}} ? **''LATTICE_VOLUME''** :: The normalized volume of the polytope. ? Type: :''[[..:common#Integer |Integer]]'' ---- {{anchor:lattice_width:}} ? **''LATTICE_WIDTH''** :: The minimal width of the polytope. ? Type: :''Scalar'' ---- {{anchor:lattice_width_direction:}} ? **''LATTICE_WIDTH_DIRECTION''** :: One direction which realizes ''[[..:polytope:Polytope#LATTICE_WIDTH |LATTICE_WIDTH]]'' of the polytope. ? Type: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:normal:}} ? **''NORMAL''** :: The polytope is __normal__ if the Hilbert basis of the cone spanned by P x {1} is at height 1. Equivalently points in integral dilates of P are positive integral sums of lattice points of P. ? Type: :''[[..:common#Bool |Bool]]'' ? depends on extension: : [[:external_software|4ti2 or libnormaliz]] ---- {{anchor:polar_smooth:}} ? **''POLAR_SMOOTH''** :: The lattice polytope is __polar to smooth__ if it is ''[[..:polytope:Polytope#REFLEXIVE |REFLEXIVE]]'' and the polar of the polytope (wrt to its interior point) is a ''[[..:polytope:Polytope#SMOOTH |SMOOTH]]'' lattice polytope. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:reflexive:}} ? **''REFLEXIVE''** :: True if the polytope and its dual have integral vertices. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:smooth:}} ? **''SMOOTH''** :: The polytope is __smooth__ if the associated projective variety is smooth; the determinant of the edge directions is +/-1 at every vertex. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:spanning:}} ? **''SPANNING''** :: The polytope is __spanning__ if the lattice points generate the lattice ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:terminal:}} ? **''TERMINAL''** :: The polytope is __terminal__ if there is exactly one interior lattice point and all other lattice points are vertices. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:toric_ideal:}} ? **''TORIC_IDEAL''** :: The toric ideal of the lattice polytope. Roughly speaking, this is an algebraic structure associated with the vertices of the lattice polytope, which contains rich information about the combinatorics and geometry of the polytope. The toric ideal is represented by a groebner basis, so, in order to compute the toric ideal of a lattice polytope, one additionally needs to specify the term order. See the example for details. ? Type: :''[[..:ideal:Ideal |Ideal]]'' ? Example: :: The following computes the groebner basis of the toric ideal of the square in lex order. This requires example 4ti2 to be configured. :: > $p = cube(2); > print $p->TORIC_IDEAL->GROEBNER(ORDER_NAME=>"lp")->BINOMIAL_BASIS; 0 0 0 0 0 0 1 -2 1 0 0 0 0 1 -1 -1 1 0 0 0 0 0 1 -1 0 -1 1 0 0 0 1 -2 1 0 0 0 0 0 0 1 -1 0 -1 1 0 0 0 0 1 0 -1 -1 0 1 0 0 1 0 -2 0 1 0 0 0 0 1 0 -1 -1 0 1 0 0 0 1 0 0 -2 0 0 1 0 1 -1 -1 1 0 0 0 0 0 1 -1 0 -1 1 0 0 0 0 1 0 -1 -1 0 1 0 0 0 1 0 0 -2 0 0 1 0 0 1 0 0 -1 -1 0 0 1 1 -2 1 0 0 0 0 0 0 1 -1 0 -1 1 0 0 0 0 1 0 -1 -1 0 1 0 0 0 1 0 0 -2 0 0 1 0 0 1 0 0 -1 -1 0 0 1 0 1 0 0 0 -2 0 0 0 1 ---- {{anchor:very_ample:}} ? **''VERY_AMPLE''** :: The polytope is __very ample__ if the Hilbert Basis of the cone spanned by the edge-directions of any vertex lies inside the polytope. ? Type: :''[[..:common#Bool |Bool]]'' ? depends on extension: : [[:external_software|4ti2 or libnormaliz]] ---- ==== Lattice points in polytopes ==== These properties capture information that depends on the lattice structure of the polytope. polymake always works with the integer lattice. ---- {{anchor:boundary_lattice_points:}} ? **''BOUNDARY_LATTICE_POINTS''** :: The lattice points on the boundary of the polytope, including the vertices. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Integer |Integer]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:interior_lattice_points:}} ? **''INTERIOR_LATTICE_POINTS''** :: The lattice points strictly in the interior of the polytope ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Integer |Integer]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:lattice_points_generators:}} ? **''LATTICE_POINTS_GENERATORS''** :: The lattice points generators in the polytope. The output consists of three matrices [P,R,L], where P are lattice points which are contained in the polytope R are rays and L is the lineality. Together they form a description of all lattice points. Every lattice point can be described as p + lambda*R + mu*L where p is a row in P and lambda has only non-negative integral coordinates and mu has arbitrary integral coordinates. ? Type: :''[[..:common#Array |Array]]<[[..:common#Matrix |Matrix]]<[[..:common#Integer |Integer]],[[..:common#NonSymmetric |NonSymmetric]]%%>>%%'' ? depends on extension: : [[:external_software|4ti2 for unbounded polytopes]] ---- {{anchor:n_boundary_lattice_points:}} ? **''N_BOUNDARY_LATTICE_POINTS''** :: The number of ''[[..:polytope:Polytope#BOUNDARY_LATTICE_POINTS |BOUNDARY_LATTICE_POINTS]]'' ? Type: :''[[..:common#Integer |Integer]]'' ---- {{anchor:n_interior_lattice_points:}} ? **''N_INTERIOR_LATTICE_POINTS''** :: The number of ''[[..:polytope:Polytope#INTERIOR_LATTICE_POINTS |INTERIOR_LATTICE_POINTS]]'' ? Type: :''[[..:common#Integer |Integer]]'' ---- {{anchor:n_lattice_points:}} ? **''N_LATTICE_POINTS''** :: The number of ''[[..:polytope:Polytope#LATTICE_POINTS |LATTICE_POINTS]]'' ? Type: :''[[..:common#Integer |Integer]]'' ---- ==== Matroid properties ==== Properties which belong to the corresponding (oriented) matroid ---- {{anchor:chirotope:}} ? **''CHIROTOPE''** :: Chirotope corresponding to the ''[[..:polytope:Polytope#VERTICES |VERTICES]]''. TOPCOM format. ? Type: :''[[..:common#Text |Text]]'' ? depends on extension: : [[:external_software|topcom]] ---- {{anchor:circuits:}} ? **''CIRCUITS''** :: Circuits in ''[[..:polytope:VectorConfiguration#VECTORS |VECTORS]]'' ? Type: :''[[..:common#Set |Set]]<[[..:common#Pair |Pair]]<[[..:common#Set |Set]]<[[..:common#Int |Int]]>,[[..:common#Set |Set]]<[[..:common#Int |Int]]%%>>%%>'' ? depends on extension: : [[:external_software|topcom]] ---- {{anchor:cocircuits:}} ? **''COCIRCUITS''** :: Cocircuits in ''[[..:polytope:VectorConfiguration#VECTORS |VECTORS]]'' ? Type: :''[[..:common#Set |Set]]<[[..:common#Pair |Pair]]<[[..:common#Set |Set]]<[[..:common#Int |Int]]>,[[..:common#Set |Set]]<[[..:common#Int |Int]]%%>>%%>'' ? depends on extension: : [[:external_software|topcom]] ---- ==== Optimization ==== These properties provide tools from linear, integer and dicrete optimization. In particular, linear programs are defined here. ---- {{anchor:lp:}} ? **''LP''** :: Linear program applied to the polytope ? Type: :''[[..:polytope:LinearProgram |LinearProgram]]'' ---- {{anchor:milp:}} ? **''MILP''** :: Mixed integer linear program applied to the polytope ? Type: :''[[..:polytope:MixedIntegerLinearProgram |MixedIntegerLinearProgram]]'' ---- ==== Symmetry ==== These properties capture information of the object that is concerned with the action of permutation groups. ---- {{anchor:group:}} ? **''GROUP''** :: ? derived from: : ''[[..:polytope:Cone#GROUP |GROUP]]'' ? Type: :''[[..:group:Group |Group]]'' ? Methods of GROUP: : ? **''REPRESENTATIVE_INEQUALITIES''** ::UNDOCUMENTED ? Properties of GROUP: : ? **''COORDINATE_ACTION''** :: ? Type: :''[[..:group:PermutationAction |PermutationAction]]<[[..:common#Int |Int]],[[..:common#Rational |Rational]]>'' ? Properties of COORDINATE_ACTION: : ? **''CP_INDICES''** :: The row indices of all core points among the ''[[..:polytope:Polytope#REPRESENTATIVE_CERTIFIERS |REPRESENTATIVE_CERTIFIERS]]''. ? Type: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ? **''NOP_GRAPH''** :: The NOP-graph of ''[[..:polytope:Polytope#POINTS_GENERATORS |POINTS_GENERATORS]]'' with respect to the ''[[..:polytope:Polytope#GROUP |GROUP]]''. The nodes of the NOP-graph correspond to the ''[[..:polytope:Polytope#REPRESENTATIVE_CERTIFIERS |REPRESENTATIVE_CERTIFIERS]]'', which represent the different orbit polytopes contained in the given orbit polytope. ? Type: :''[[..:graph:Graph |Graph]]<[[..:common#Directed |Directed]]>'' ? **''N_POINTS_GENERATORS''** :: Alias for property ''[[..:group:Action#N_INPUT_RAYS_GENERATORS |N_INPUT_RAYS_GENERATORS]]''. ? Type: :''[[..:common#Int |Int]]'' ? **''N_REPRESENTATIVE_CERTIFIERS''** :: The number of ''[[..:polytope:Polytope#REPRESENTATIVE_CERTIFIERS |REPRESENTATIVE_CERTIFIERS]]''. ? Type: :''[[..:common#Int |Int]]'' ? **''N_REPRESENTATIVE_CORE_POINTS''** :: The number of ''[[..:polytope:Polytope#REPRESENTATIVE_CORE_POINTS |REPRESENTATIVE_CORE_POINTS]]''. ? Type: :''[[..:common#Int |Int]]'' ? **''N_VERTICES_GENERATORS''** :: Alias for property ''[[..:group:Action#N_RAYS_GENERATORS |N_RAYS_GENERATORS]]''. ? Type: :''[[..:common#Int |Int]]'' ? **''POINTS_GENERATORS''** :: Alias for property ''[[..:group:Action#INPUT_RAYS_GENERATORS |INPUT_RAYS_GENERATORS]]''. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Rational |Rational]],[[..:common#NonSymmetric |NonSymmetric]]>'' ? **''REPRESENTATIVE_CERTIFIERS''** :: A matrix of representatives of all certifiers for ''[[..:polytope:Polytope#POINTS_GENERATORS |POINTS_GENERATORS]]'' with respect to the ''[[..:polytope:Polytope#GROUP |GROUP]]''. A certifier is an integer point in the given orbit polytope. Note that the representative certifiers must be in the same order as the corresponding nodes in the ''[[..:polytope:Polytope#NOP_GRAPH |NOP_GRAPH]]''. Further, the ''[[..:polytope:Polytope#CP_INDICES |CP_INDICES]]'' refer to row indices of this property. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Rational |Rational]],[[..:common#NonSymmetric |NonSymmetric]]>'' ? **''REPRESENTATIVE_CORE_POINTS''** :: A matrix of representatives of all core points in the given orbit polytope. A core point is an integer point whose orbit polytope is lattice-free (i.e. does not contain integer points besides its vertices). ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Rational |Rational]],[[..:common#NonSymmetric |NonSymmetric]]>'' ? **''VERTICES_GENERATORS''** :: Alias for property ''[[..:group:Action#RAYS_GENERATORS |RAYS_GENERATORS]]''. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Rational |Rational]],[[..:common#NonSymmetric |NonSymmetric]]>'' ? **''MATRIX_ACTION''** :: ? derived from: : ''[[..:polytope:Cone#MATRIX_ACTION |MATRIX_ACTION]]'' ? Type: :''[[..:group:MatrixActionOnVectors |MatrixActionOnVectors]]'' ? Properties of MATRIX_ACTION: : ? **''VERTICES_ORBITS''** :: Alias for property ''[[..:group:MatrixActionOnVectors#VECTORS_ORBITS |VECTORS_ORBITS]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#Set |Set]]<[[..:common#Int |Int]]%%>>%%'' ? **''POINTS_ACTION''** :: Alias for property ''[[..:group:Group#INPUT_RAYS_ACTION |INPUT_RAYS_ACTION]]''. ? Type: :''[[..:group:PermutationAction |PermutationAction]]<[[..:common#Int |Int]],[[..:common#Rational |Rational]]>'' ? **''REPRESENTATIVE_VERTICES''** :: Alias for property ''[[..:polytope:Cone#REPRESENTATIVE_RAYS |REPRESENTATIVE_RAYS]]''. ? Type: :''[[..:common#Matrix |Matrix]]'' ? **''SYMMETRIC_FACETS''** :: ? Type: :''[[..:common#Matrix |Matrix]]'' ? **''SYMMETRIC_RAYS''** :: ? Type: :''[[..:common#Matrix |Matrix]]'' ? **''VERTICES_ACTION''** :: ? Type: :''[[..:group:PermutationAction |PermutationAction]]<[[..:common#Int |Int]],[[..:common#Rational |Rational]]>'' ? Properties of VERTICES_ACTION: : ? **''SYMMETRIZED_COCIRCUIT_EQUATIONS''** :: The cocircuit equations, projected to a certain direct sum of isotypic components ? Type: :''[[..:polytope:SymmetrizedCocircuitEquations |SymmetrizedCocircuitEquations]]'' ---- ==== Triangulation and volume ==== Everything in this group is defined for ''[[..:polytope:Polytope#BOUNDED |BOUNDED]]'' polytopes only. ---- {{anchor:mahler_volume:}} ? **''MAHLER_VOLUME''** :: Mahler volume (or volume product) of the polytope. Defined as the volume of the polytope and the volume of its polar (for ''[[..:polytope:Polytope#BOUNDED |BOUNDED]]'', ''[[..:polytope:Polytope#CENTERED |CENTERED]]'' and ''[[..:polytope:Cone#FULL_DIM |FULL_DIM]]'' polytopes only). Often studied for centrally symmetric convex bodies, where the regular cubes are conjectured to be the global minimiers. ? Type: :''Scalar'' ? Example: :: The following prints the Mahler volume of the centered 2-cube: :: > print cube(2)->MAHLER_VOLUME; 8 ---- {{anchor:polytopal_subdivision:}} ? **''POLYTOPAL_SUBDIVISION''** :: ? Type: :''[[..:fan:SubdivisionOfPoints |SubdivisionOfPoints]]'' ? Properties of POLYTOPAL_SUBDIVISION: : ? **''REFINED_SPLITS''** :: The splits that are coarsenings of the subdivision. If the subdivision is regular these form the unique split decomposition of the corresponding weight function. ? Type: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- {{anchor:relative_volume:}} ? **''RELATIVE_VOLUME''** :: The //k//-dimensional Euclidean volume of a //k//-dimensional rational polytope embedded in R^n. This value is obtained by summing the square roots of the entries in SQUARED_RELATIVE_VOLUMES using the function //naive_sum_of_square_roots//. Since this latter function does not try very hard to compute the real value, you may have to resort to a computer algebra package. The value is encoded as a map collecting the coefficients of various roots encountered in the sum. For example, {(3 1/2),(5 7)} represents sqrt{3}/2 + 7 sqrt{5}. If the output is not satisfactory, please use a symbolic algebra package. ? Type: :''[[..:common#Map |Map]]<[[..:common#Rational |Rational]],[[..:common#Rational |Rational]]>'' ? Example: :: The following prints the 2-dimensional volume of a centered square with side length 2 embedded in the 3-space (the result is 4): :: > $M = new Matrix([1,-1,1,0],[1,-1,-1,0],[1,1,-1,0],[1,1,1,0]); > $p = new Polytope(VERTICES=>$M); > print $p->RELATIVE_VOLUME; {(1 4)} ---- {{anchor:squared_relative_volumes:}} ? **''SQUARED_RELATIVE_VOLUMES''** :: Array of the squared relative //k//-dimensional volumes of the simplices in a triangulation of a //d//-dimensional polytope. ? Type: :''[[..:common#Array |Array]]'' ---- {{anchor:triangulation:}} ? **''TRIANGULATION''** :: ? derived from: : ''[[..:polytope:Cone#TRIANGULATION |TRIANGULATION]]'' ? Type: :''[[..:topaz:GeometricSimplicialComplex |GeometricSimplicialComplex]]'' ? Properties of TRIANGULATION: : ? **''GKZ_VECTOR''** :: GKZ-vector > See Chapter 7 in Gelfand, Kapranov, and Zelevinsky: > Discriminants, Resultants and Multidimensional Determinants, Birkhäuser 1994 ? Type: :''[[..:common#Vector |Vector]]'' ---- {{anchor:volume:}} ? **''VOLUME''** :: Volume of the polytope. ? Type: :''Scalar'' ? Example: :: The following prints the volume of the centered 3-dimensional cube with side length 2: :: > print cube(3)->VOLUME; 8 ---- ==== Unbounded polyhedra ==== These properties collect geometric information of a polytope only relevant if it is unbounded, e. g. the far face or the complex of bounded faces. ---- {{anchor:bounded_complex:}} ? **''BOUNDED_COMPLEX''** :: ? Type: :''[[..:fan:PolyhedralComplex |PolyhedralComplex]]'' ? Properties of BOUNDED_COMPLEX: : ? **''GRAPH''** :: ? derived from: : ''[[..:graph:Graph |Graph]]'' ? Type: :''[[..:graph:Graph |Graph]]<[[..:common#Undirected |Undirected]]>'' ? Properties of GRAPH: : ? **''EDGE_COLORS''** :: Each edge indicates the maximal dimension of a bounded face containing it. Mainly used for visualization purposes. ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],[[..:common#Int |Int]]>'' ? **''EDGE_DIRECTIONS''** :: Difference of the vertices for each edge (only defined up to signs). ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],[[..:common#Vector |Vector]]>%%'' ? **''EDGE_LENGTHS''** :: The length of each edge measured in the maximum metric. ? Type: :''[[..:common#EdgeMap |EdgeMap]]<[[..:common#Undirected |Undirected]],Scalar>'' ? **''TOTAL_LENGTH''** :: Sum of all ''[[..:polytope:Polytope#EDGE_LENGTHS |EDGE_LENGTHS]]''. ? Type: :''Scalar'' ? **''VERTEX_MAP''** :: For every row of ''[[..:fan:PolyhedralComplex#VERTICES |VERTICES]]'' this indicates the corresponding row in the ''[[..:fan:PolyhedralComplex#VERTICES |VERTICES]]'' of the parent polytope. ? Type: :''[[..:common#Array |Array]]<[[..:common#Int |Int]]>'' ---- {{anchor:far_face:}} ? **''FAR_FACE''** :: Indices of vertices that are rays. ? Type: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- {{anchor:n_bounded_vertices:}} ? **''N_BOUNDED_VERTICES''** :: Number of bounded vertices (non-rays). ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:simple_polyhedron:}} ? **''SIMPLE_POLYHEDRON''** :: True if each bounded vertex of a (possibly unbounded) d-polyhedron has vertex degree d in the ''[[..:polytope:Polytope#GRAPH |GRAPH]]''. The vertex degrees of the vertices on the ''[[..:polytope:Polytope#FAR_FACE |FAR_FACE]]'' do not matter. ? Type: :''[[..:common#Bool |Bool]]'' ---- {{anchor:towards_far_face:}} ? **''TOWARDS_FAR_FACE''** :: A linear objective function for which each unbounded edge is increasing; only defined for unbounded polyhedra. ? Type: :''[[..:common#Vector |Vector]]'' ---- {{anchor:unbounded_facets:}} ? **''UNBOUNDED_FACETS''** :: Indices of facets that are unbounded. ? Type: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- ==== Visualization ==== These properties are for visualization. ---- {{anchor:facet_labels:}} ? **''FACET_LABELS''** :: Unique names assigned to the ''[[..:polytope:Cone#FACETS |FACETS]]'', analogous to ''[[..:polytope:Polytope#VERTEX_LABELS |VERTEX_LABELS]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#String |String]]>'' ---- {{anchor:ftv_cyclic_normal:}} ? **''FTV_CYCLIC_NORMAL''** :: Reordered transposed ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]''. Dual to ''[[..:polytope:Polytope#VIF_CYCLIC_NORMAL |VIF_CYCLIC_NORMAL]]''. Alias for property ''[[..:polytope:Cone#FTR_CYCLIC_NORMAL |FTR_CYCLIC_NORMAL]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#Array |Array]]<[[..:common#Int |Int]]%%>>%%'' ---- {{anchor:gale_vertices:}} ? **''GALE_VERTICES''** :: Coordinates of points for an affine Gale diagram. ? Type: :''[[..:common#Matrix |Matrix]]<[[..:common#Float |Float]],[[..:common#NonSymmetric |NonSymmetric]]>'' ---- {{anchor:inequality_labels:}} ? **''INEQUALITY_LABELS''** :: Unique names assigned to the ''[[..:polytope:Polytope#INEQUALITIES |INEQUALITIES]]'', analogous to ''[[..:polytope:Polytope#VERTEX_LABELS |VERTEX_LABELS]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#String |String]]>'' ---- {{anchor:neighbor_vertices_cyclic_normal:}} ? **''NEIGHBOR_VERTICES_CYCLIC_NORMAL''** :: Reordered ''[[..:polytope:Polytope#GRAPH |GRAPH]]''. Dual to ''[[..:polytope:Cone#NEIGHBOR_FACETS_CYCLIC_NORMAL |NEIGHBOR_FACETS_CYCLIC_NORMAL]]''. Alias for property ''[[..:polytope:Cone#NEIGHBOR_RAYS_CYCLIC_NORMAL |NEIGHBOR_RAYS_CYCLIC_NORMAL]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#Array |Array]]<[[..:common#Int |Int]]%%>>%%'' ---- {{anchor:point_labels:}} ? **''POINT_LABELS''** :: Unique names assigned to the ''[[..:polytope:Polytope#POINTS |POINTS]]'', analogous to ''[[..:polytope:Polytope#VERTEX_LABELS |VERTEX_LABELS]]''. Alias for property ''[[..:polytope:Cone#INPUT_RAY_LABELS |INPUT_RAY_LABELS]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#String |String]]>'' ---- {{anchor:schlegel_diagram:}} ? **''SCHLEGEL_DIAGRAM''** :: Holds one special projection (the Schlegel diagram) of the polytope. ? Type: :''[[..:polytope:SchlegelDiagram |SchlegelDiagram]]'' ---- {{anchor:vertex_labels:}} ? **''VERTEX_LABELS''** :: Unique names assigned to the ''[[..:polytope:Polytope#VERTICES |VERTICES]]''. If specified, they are shown by visualization tools instead of vertex indices. For a polytope build from scratch, you should create this property by yourself, either manually in a text editor, or with a client program. If you build a polytope with a construction function taking some other input polytope(s), the labels are created the labels automatically except if you call the function with a //no_labels// option. The exact format of the abels is dependent on the construction, and is described in the corresponding help topic. Alias for property ''[[..:polytope:Cone#RAY_LABELS |RAY_LABELS]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#String |String]]>'' ---- {{anchor:vif_cyclic_normal:}} ? **''VIF_CYCLIC_NORMAL''** :: Reordered ''[[..:polytope:Polytope#VERTICES_IN_FACETS |VERTICES_IN_FACETS]]'' for 2d and 3d-polytopes. Vertices are listed in the order of their appearance when traversing the facet border counterclockwise seen from outside of the polytope. For a 2d-polytope (which is a closed polygon), lists all vertices in the border traversing order. Alias for property ''[[..:polytope:Cone#RIF_CYCLIC_NORMAL |RIF_CYCLIC_NORMAL]]''. ? Type: :''[[..:common#Array |Array]]<[[..:common#Array |Array]]<[[..:common#Int |Int]]%%>>%%'' ---- ===== Methods ===== ==== Combinatorics ==== These methods capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice. ---- {{anchor:cd_index:}} ? **''CD_INDEX()''** :: Prettily print the cd-index given in ''[[..:polytope:Polytope#CD_INDEX_COEFFICIENTS |CD_INDEX_COEFFICIENTS]]'' ? Returns: :''[[..:common#String |String]]'' ---- ==== Geometry ==== These methods capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets. ---- {{anchor:ambient_dim:}} ? **''AMBIENT_DIM()''** :: returns the dimension of the ambient space of the polytope ? Returns: :''[[..:common#Int |Int]]'' ---- {{anchor:dim:}} ? **''DIM()''** :: returns the dimension of the polytope ? Returns: :''[[..:common#Int |Int]]'' ---- {{anchor:inner_description:}} ? **''INNER_DESCRIPTION()''** :: Returns the inner description of a Polytope: [V,L] where V are the vertices and L is the lineality space ? Returns: :''[[..:common#Array |Array]]<[[..:common#Matrix |Matrix]]>%%'' ---- {{anchor:minkowski_cone_coeff:}} ? **''MINKOWSKI_CONE_COEFF([[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]> coeff)''** :: returns the Minkowski summand of a polytope P given by a coefficient vector to the rays of the ''[[..:polytope:Polytope#MINKOWSKI_CONE |MINKOWSKI_CONE]]''. ? Parameters: :: ''[[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]>'' ''coeff'': coefficient vector to the rays of the Minkowski summand cone ? Returns: :''[[..:polytope:Polytope |Polytope]]<[[..:common#Rational |Rational]]>'' ---- {{anchor:minkowski_cone_point:}} ? **''MINKOWSKI_CONE_POINT([[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]> point)''** :: returns the Minkowski summand of a polytope P given by a point in the ''[[..:polytope:Polytope#MINKOWSKI_CONE |MINKOWSKI_CONE]]''. ? Parameters: :: ''[[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]>'' ''point'': point in the Minkowski summand cone ? Returns: :''[[..:polytope:Polytope |Polytope]]<[[..:common#Rational |Rational]]>'' ---- {{anchor:outer_description:}} ? **''OUTER_DESCRIPTION()''** :: Returns the outer description of a Polytope: [F,A] where F are the facets and A is the affine hull ? Returns: :''[[..:common#Array |Array]]<[[..:common#Matrix |Matrix]]>%%'' ---- {{anchor:contained_in_ball:}} ? **''contained_in_ball([[..:common#Vector |Vector]] c, Scalar r)''** :: check if a given Ball B(c,r) contains a Polytope ? Parameters: :: ''[[..:common#Vector |Vector]]'' ''c'': the center of the ball :: ''Scalar'' ''r'': the radius of the ball ? Returns: :''[[..:common#Bool |Bool]]'' ---- {{anchor:contains_ball:}} ? **''contains_ball([[..:common#Vector |Vector]] c, Scalar r)''** :: checks if a given Ball B(c,r) is contained in a Polytope ? Parameters: :: ''[[..:common#Vector |Vector]]'' ''c'': the center of the ball :: ''Scalar'' ''r'': the radius of the ball ? Returns: :''[[..:common#Bool |Bool]]'' ---- {{anchor:labeled_vertices:}} ? **''labeled_vertices([[..:common#String |String]] label ...)''** :: Find the vertices by given labels. ? Parameters: :: ''[[..:common#String |String]]'' ''label ...'': vertex labels ? Returns: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- ==== Lattice points in cones ==== These methods capture information that depends on the lattice structure of the cone. polymake always works with the integer lattice. ---- {{anchor:ehrhart_polynomial_coeff:}} ? **''EHRHART_POLYNOMIAL_COEFF()''** :: Vector containing the coefficients of the ''[[..:polytope:Polytope#EHRHART_POLYNOMIAL |EHRHART_POLYNOMIAL]]'', ordered by increasing degree of the corresponding term. ? Returns: :''[[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]>'' ---- {{anchor:facet_point_lattice_distances:}} ? **''FACET_POINT_LATTICE_DISTANCES([[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]> v)''** :: Vector containing the distances of a given point //v// from all facets ? Parameters: :: ''[[..:common#Vector |Vector]]<[[..:common#Rational |Rational]]>'' ''v'': point in the ambient space of the polytope ? Returns: :''[[..:common#Vector |Vector]]<[[..:common#Integer |Integer]]>'' ---- {{anchor:n_lattice_points_in_dilation:}} ? **''N_LATTICE_POINTS_IN_DILATION([[..:common#Int |Int]] n)''** :: The number of ''[[..:polytope:Polytope#LATTICE_POINTS |LATTICE_POINTS]]'' in the //n//-th dilation of the polytope ? Parameters: :: ''[[..:common#Int |Int]]'' ''n'': dilation factor ? Returns: :''[[..:common#Int |Int]]'' ---- {{anchor:polytope_in_std_basis:}} ? **''POLYTOPE_IN_STD_BASIS([[..:polytope:Polytope |Polytope]]<[[..:common#Rational |Rational]]> P)''** :: returns a polytope in the integer lattice basis if a ''[[..:polytope:Polytope#LATTICE_BASIS |LATTICE_BASIS]]'' is given ? Parameters: :: ''[[..:polytope:Polytope |Polytope]]<[[..:common#Rational |Rational]]>'' ''P'': polytope ? Returns: :''[[..:polytope:Polytope |Polytope]]<[[..:common#Rational |Rational]]>'' ---- ==== Lattice points in polytopes ==== These methods capture information that depends on the lattice structure of the polytope. polymake always works with the integer lattice. ---- {{anchor:lattice_points:}} ? **''LATTICE_POINTS()''** :: Returns the lattice points in bounded Polytopes. ? Returns: :''[[..:common#Matrix |Matrix]]<[[..:common#Integer |Integer]]>'' ---- ==== Symmetry ==== These methods capture information of the object that is concerned with the action of permutation groups. ---- {{anchor:visual_nop:}} ? **''VISUAL_NOP(ARRAY colors_ref, ARRAY trans_ref)''** :: Visualizes all (nested) orbit polytopes contained in //orb// in one picture. ? Parameters: :: ''ARRAY'' ''colors_ref'': the reference to an array of colors :: ''ARRAY'' ''trans_ref'': the reference to an array of transparency values ---- {{anchor:visual_nop_graph:}} ? **''VISUAL_NOP_GRAPH([[..:common#String |String]] filename)''** :: Visualizes the NOP-graph of an orbit polytope. Requires 'graphviz' and a Postscript viewer. Produces a file which is to be processed with the program 'dot' from the graphviz package. If 'dot' is installed, the NOP-graph is visualized by the Postscript viewer. ? Parameters: :: ''[[..:common#String |String]]'' ''filename'': the filename for the 'dot' file ---- ==== Triangulation and volume ==== These methods collect information about triangulations of the object and properties usually computed from such, as the volume. ---- {{anchor:triangulation_int_signs:}} ? **''TRIANGULATION_INT_SIGNS()''** :: the orientation of the simplices of ''[[..:polytope:Cone#TRIANGULATION_INT |TRIANGULATION_INT]]'' in the given order of the ''[[..:polytope:Polytope#POINTS |POINTS]]'' ? Returns: :''[[..:common#Array |Array]]<[[..:common#Int |Int]]>'' ---- ==== Unbounded polyhedra ==== These methods collect geometric information of a polytope only relevant if it is unbounded, e. g. the far face or the complex of bounded faces. ---- {{anchor:bounded_dual_graph:}} ? **''BOUNDED_DUAL_GRAPH''** :: Dual graph of the bounded subcomplex. ---- {{anchor:bounded_facets:}} ? **''BOUNDED_FACETS()''** :: Indices of ''[[..:polytope:Cone#FACETS |FACETS]]'' that are bounded. ? Returns: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- {{anchor:bounded_graph:}} ? **''BOUNDED_GRAPH''** :: Graph of the bounded subcomplex. ---- {{anchor:bounded_hasse_diagram:}} ? **''BOUNDED_HASSE_DIAGRAM''** :: ''[[..:polytope:Polytope#HASSE_DIAGRAM |HASSE_DIAGRAM]]'' constrained to affine vertices Nodes representing the maximal inclusion-independent faces are connected to the top-node regardless of their dimension ---- {{anchor:bounded_vertices:}} ? **''BOUNDED_VERTICES()''** :: Indices of ''[[..:polytope:Polytope#VERTICES |VERTICES]]'' that are no rays. ? Returns: :''[[..:common#Set |Set]]<[[..:common#Int |Int]]>'' ---- ==== Visualization ==== These methods are for visualization. ---- {{anchor:gale:}} ? **''GALE()''** :: Generate the Gale diagram of a //d//-polyhedron with at most //d+4// vertices. ? Returns: :''[[..:polytope:Visual_Gale |Visual::Gale]]'' ---- {{anchor:schlegel:}} ? **''SCHLEGEL()''** :: Create a Schlegel diagram and draw it. ? Options: : :: ''[[..:graph#Visual_Graph_decorations |Visual::Graph::decorations]]'' ''proj_facet'': decorations for the edges of the projection face : option list ''[[..:polytope#schlegel_init |schlegel_init]]'' : option list ''[[..:common#Visual_Wire_decorations |Visual::Wire::decorations]]'' ? Returns: :''[[..:polytope:Visual_SchlegelDiagram |Visual::SchlegelDiagram]]'' ---- {{anchor:visual:}} ? **''VISUAL()''** :: Visualize a polytope as a graph (if 1d), or as a solid object (if 2d or 3d), or as a Schlegel diagram (4d). ? Options: : option list ''[[..:common#Visual_Polygons_decorations |Visual::Polygons::decorations]]'' : option list ''[[..:common#Visual_Wire_decorations |Visual::Wire::decorations]]'' : option list ''[[..:common#Visual_PointSet_decorations |Visual::PointSet::decorations]]'' : option list ''[[..:common#geometric_options |geometric_options]]'' ? Returns: :''[[..:polytope:Visual_Polytope |Visual::Polytope]]'' ---- {{anchor:visual_bounded_graph:}} ? **''VISUAL_BOUNDED_GRAPH()''** :: Visualize the ''[[..:polytope:Polytope#GRAPH |GRAPH]]'' of a polyhedron. ? Options: : :: ''[[..:common#Int |Int]]'' ''seed'': random seed value for the string embedder : option list ''[[..:graph#Visual_Graph_decorations |Visual::Graph::decorations]]'' ? Returns: :''[[..:polytope:Visual_PolytopeGraph |Visual::PolytopeGraph]]'' ---- {{anchor:visual_dual:}} ? **''VISUAL_DUAL()''** :: Visualize the dual polytope as a solid 3-d object. The polytope must be ''[[..:polytope:Polytope#BOUNDED |BOUNDED]]'' and ''[[..:polytope:Polytope#CENTERED |CENTERED]]''. ? Options: : option list ''[[..:common#Visual_Polygons_decorations |Visual::Polygons::decorations]]'' : option list ''[[..:common#geometric_options |geometric_options]]'' ? Returns: :''[[..:common:Visual_Object |Visual::Object]]'' ---- {{anchor:visual_dual_face_lattice:}} ? **''VISUAL_DUAL_FACE_LATTICE()''** :: Visualize the dual [[..:polytope:Polytope#HASSE_DIAGRAM |face lattice]] of a polyhedron as a multi-layer graph. ? Options: : :: ''[[..:common#Int |Int]]'' ''seed'': random seed value for the node placement : option list ''[[..:graph#Visual_Lattice_decorations |Visual::Lattice::decorations]]'' ? Returns: :''[[..:polytope:Visual_PolytopeLattice |Visual::PolytopeLattice]]'' ---- {{anchor:visual_dual_graph:}} ? **''VISUAL_DUAL_GRAPH()''** :: Visualize the ''[[..:polytope:Polytope#DUAL_GRAPH |DUAL_GRAPH]]'' of a polyhedron. ? Options: : :: ''[[..:common#Int |Int]]'' ''seed'': random seed value for the string embedder : option list ''[[..:graph#Visual_Graph_decorations |Visual::Graph::decorations]]'' ? Returns: :''[[..:graph:Visual_Graph |Visual::Graph]]'' ---- {{anchor:visual_face_lattice:}} ? **''VISUAL_FACE_LATTICE()''** :: Visualize the ''[[..:polytope:Polytope#HASSE_DIAGRAM |HASSE_DIAGRAM]]'' of a polyhedron as a multi-layer graph. ? Options: : :: ''[[..:common#Int |Int]]'' ''seed'': random seed value for the node placement : option list ''[[..:graph#Visual_Lattice_decorations |Visual::Lattice::decorations]]'' ? Returns: :''[[..:polytope:Visual_PolytopeLattice |Visual::PolytopeLattice]]'' ---- {{anchor:visual_graph:}} ? **''VISUAL_GRAPH()''** :: Visualize the ''[[..:polytope:Polytope#GRAPH |GRAPH]]'' of a polyhedron. ? Options: : :: ''[[..:common#Int |Int]]'' ''seed'': random seed value for the string embedder : option list ''[[..:graph#Visual_Graph_decorations |Visual::Graph::decorations]]'' ? Returns: :''[[..:polytope:Visual_PolytopeGraph |Visual::PolytopeGraph]]'' ---- {{anchor:visual_orbit_colored_graph:}} ? **''VISUAL_ORBIT_COLORED_GRAPH()''** :: Visualizes the graph of a symmetric cone: All nodes belonging to one orbit get the same color. ? Options: : option list ''[[..:graph#Visual_Graph_decorations |Visual::Graph::decorations]]'' ? Returns: :''[[..:polytope:Visual_PolytopeGraph |Visual::PolytopeGraph]]'' ---- {{anchor:write_stl:}} ? **''write_stl([[..:common#String |String]] filename)''** :: Take a 3-polytope and write ASCII STL output. ? Parameters: :: ''[[..:common#String |String]]'' ''filename'' ? Example: :: > dodecahedron()->write_stl("/tmp/dodecahedron.stl"); ---- ==== no category ==== {{anchor:lattice_hollow:}} ? **''LATTICE_HOLLOW''** ::UNDOCUMENTED ----