# Cone -- the class of all rational convex polyhedral cones

## Description

A Cone represents a rational convex polyhedral cone. It need not be full dimensional or may contain a proper linear subspace. It can be zero dimensional, i.e. the origin. It is saved as a hash table which contains the generating rays and the basis of the lineality space of the cone as well as the defining half-spaces and hyperplanes. The output of a Cone looks like this:
 ```i1 : coneFromVData matrix {{0,0,-1,-1,1},{2,-2,1,-1,0},{1,1,1,1,0}} o1 = Cone{...1...} o1 : Cone```

This table displays a short summary of the properties of the Cone. The number of rays is modulo the lineality space. However, one can not access the above information directly, because this is just a virtual hash table generated for the output. The data describing a Cone is extracted by the functions included in this package. A Cone can be constructed as the positive hull (coneFromVData)of a set of rays or as the intersection (coneFromHData) of a set of linear half-spaces and linear hyperplanes.

As examples for the positive hull consider the following cones:

 ```i2 : R = matrix{{1,2,3,1},{2,3,1,1},{3,1,2,1}} o2 = | 1 2 3 1 | | 2 3 1 1 | | 3 1 2 1 | 3 4 o2 : Matrix ZZ <--- ZZ``` ```i3 : C = coneFromVData R o3 = C o3 : Cone``` ```i4 : rays C o4 = | 2 3 1 | | 3 1 2 | | 1 2 3 | 3 3 o4 : Matrix ZZ <--- ZZ``` ```i5 : LS = matrix{{1},{1},{-2}} o5 = | 1 | | 1 | | -2 | 3 1 o5 : Matrix ZZ <--- ZZ``` ```i6 : C = coneFromVData(R,LS) o6 = C o6 : Cone``` ```i7 : rays C o7 = | 0 0 | | -1 1 | | 4 5 | 3 2 o7 : Matrix ZZ <--- ZZ```

On the other hand, we can use these matrices as defining half-spaces and hyperplanes for the intersection:

 ```i8 : HS = transpose R o8 = | 1 2 3 | | 2 3 1 | | 3 1 2 | | 1 1 1 | 4 3 o8 : Matrix ZZ <--- ZZ``` ```i9 : C = coneFromHData HS o9 = C o9 : Cone``` ```i10 : rays C o10 = | 1 7 -5 | | 7 -5 1 | | -5 1 7 | 3 3 o10 : Matrix ZZ <--- ZZ``` ```i11 : hyperplanesTmp = transpose LS o11 = | 1 1 -2 | 1 3 o11 : Matrix ZZ <--- ZZ``` ```i12 : C = coneFromHData(HS,hyperplanesTmp) o12 = C o12 : Cone``` ```i13 : rays C o13 = | 7 -2 | | -5 4 | | 1 1 | 3 2 o13 : Matrix ZZ <--- ZZ```

## Methods that use a convex rational cone :

• affineImage(Cone,Matrix), see affineImage(Matrix,Cone,Matrix) -- computes the affine image of a cone
• affineImage(Matrix,Cone), see affineImage(Matrix,Cone,Matrix) -- computes the affine image of a cone
• affineImage(Matrix,Cone,Matrix) -- computes the affine image of a cone
• affinePreimage(Cone,Matrix), see affinePreimage(Matrix,Cone,Matrix) -- computes the affine preimage of a cone
• affinePreimage(Matrix,Cone), see affinePreimage(Matrix,Cone,Matrix) -- computes the affine preimage of a cone
• affinePreimage(Matrix,Cone,Matrix) -- computes the affine preimage of a cone
• areCompatible(Cone,Cone), see areCompatible -- checks if the intersection of two cones/polyhedra is a face of each
• commonFace(Cone,Cone), see commonFace -- checks if the intersection is a face of both Cones or Polyhedra, or of cones with fans
• commonFace(Cone,Fan), see commonFace -- checks if the intersection is a face of both Cones or Polyhedra, or of cones with fans
• commonFace(Fan,Cone), see commonFace -- checks if the intersection is a face of both Cones or Polyhedra, or of cones with fans
• Cone * Cone -- computes the direct product of two cones
• Cone * Polyhedron -- computes the direct product of a cone and a polyhedron
• Cone + Cone -- computes the Minkowski sum of two cones
• Cone + Polyhedron -- computes the Minkowski sum of a cone and a polyhedron
• Cone == Cone -- equality
• Cone ? Cone -- compares the Cones
• coneFromVData(Cone,Cone), see coneFromVData -- computes the positive hull of rays, cones, and the cone over a polyhedron
• contains(Cone,Cone), see contains -- checks if the first argument contains the second argument
• contains(Cone,Matrix), see contains -- checks if the first argument contains the second argument
• contains(Cone,Polyhedron), see contains -- checks if the first argument contains the second argument
• contains(Fan,Cone), see contains -- checks if the first argument contains the second argument
• contains(List,Cone), see contains -- checks if the first argument contains the second argument
• contains(Polyhedron,Cone), see contains -- checks if the first argument contains the second argument
• directProduct(Cone,Cone) -- computes the direct product of polyhedra and cones
• directProduct(Cone,Polyhedron), see directProduct(Cone,Cone) -- computes the direct product of polyhedra and cones
• directProduct(Polyhedron,Cone), see directProduct(Cone,Cone) -- computes the direct product of polyhedra and cones
• dualCone(Cone), see dualCone -- computes the dual Cone
• dualFaceRepresentationMap(Cone) (missing documentation)
• facesAsCones(ZZ,Cone), see facesAsCones -- Returns the faces of a cone as actual cones.
• facets(Cone), see facets -- Giving the facet inequalities of a cone or polyhedron.
• fan(Cone), see fan -- generates a Fan
• halfspaces(Cone), see halfspaces -- computes the defining half-spaces of a Cone or a Polyhedron
• hilbertBasis(Cone) -- computes the Hilbert basis of a Cone
• hyperplanes(Cone), see hyperplanes -- computes the defining hyperplanes of a Cone or a Polyhedron
• imageFan(Matrix,Cone), see imageFan -- computes the fan of the image
• incompCones(Cone,Fan), see incompCones -- returns the pairs of incompatible cones
• incompCones(Fan,Cone), see incompCones -- returns the pairs of incompatible cones
• inInterior(Matrix,Cone), see inInterior -- checks if a point lies in the relative interior of a Cone/Polyhedron
• interiorVector(Cone), see interiorVector -- computes a vector in the relative interior of a Cone
• intersection(Cone,Cone), see intersection -- computes the intersection of cones, and polyhedra
• intersection(Cone,Polyhedron), see intersection -- computes the intersection of cones, and polyhedra
• intersection(Polyhedron,Cone), see intersection -- computes the intersection of cones, and polyhedra
• isFace(Cone,Cone), see isFace -- tests if the first argument is a face of the second
• isPointed(Cone), see isPointed -- checks if a Cone or Fan is pointed
• isSmooth(Cone), see isSmooth -- checks if a Cone or Fan is smooth
• isWellDefined(Cone) -- Checks whether a polyhedral object is well-defined.
• linSpace(Cone), see linSpace -- Deprecated version of @TO "linealitySpace"@
• maxFace(Matrix,Cone), see maxFace -- computes the face of a Polyhedron or Cone where a weight attains its maximum
• minFace(Matrix,Cone), see minFace -- computes the face of a Polyhedron or Cone where a weight attains its minimum
• minkowskiSum(Cone,Cone), see minkowskiSum -- computes the Minkowski sum of two convex objects
• minkowskiSum(Cone,Polyhedron), see minkowskiSum -- computes the Minkowski sum of two convex objects
• minkowskiSum(Polyhedron,Cone), see minkowskiSum -- computes the Minkowski sum of two convex objects
• polyhedron(Cone), see polyhedron -- Turn a cone into a polyhedron
• Polyhedron * Cone -- computes the direct product of a polyhedron and a cone
• Polyhedron + Cone -- computes the Minkowski sum of a polyhedron and a cone
• proximum(Matrix,Cone), see proximum -- computes the proximum of the Polyhedron/Cone to a point in euclidian metric
• smallestFace(Matrix,Cone), see smallestFace -- determines the smallest face of the Cone/Polyhedron containing a point

## For the programmer

The object Cone is a type, with ancestor classes PolyhedralObject < MutableHashTable < HashTable < Thing.