|
4.24 fan
-
Every fan has an ambient dimension.
-
Every cone (of a fan) must have the same lineality space. (This follows
from the mathematical definition of a fan.)
-
The lineality space of a fan equals the intersection of all cones in the fan.
(Hence, the lineality space is equal to the lineality space of each cone.)
-
In particular, the lineality space of the empty fan is the entire ambient
space.
-
There may be symmetry in a fan: S_n acts on R^n by permuting coordinates;
thereby it acts on rays, cones and the entire fan.
-
When a fan is invariant under the action of a subgroup of S_n then one may
want to store not only cones but also that subgroup. Then we also only need
to store one cone from each orbit. That is what ZFan (= SINGULAR's fan object)
does.
-
Mathematically, adding a cone to a given fan will also automatically add all
faces (of every dimension) of that cone. Therefore the implementation only
stores a subset of the cones in the fan. Hence in the implementation, a cone
of a fan represents itself and all its faces.
-
Internally, there are two ways of representing fans: as a set of (mutually
distinct) cones and as a complex on the set of rays. The second
representation allows for the computation of both all orbits (under the
group action) and orbits of maximal cones, only.
Once the fan representation has been switched from the former to the latter
representation, insertion and deletion of cones will not work anymore.
(A warning will be given.)
-
A ray intersected with its orthogonal complement is a one-dimensional ray
containing a uniqe non-zero primitive vector. Consequently, these vectors
can be computed uniquely, and stored as rows of a matrix which we will refer
to as the matrix of ray generators.
-
Access to cones of the fan is provided in three different ways:
-
1. access to the cones as provided by the user (by means of insertion, removal,
extraction)
-
2. access to the representatives of all orbits (under the group action)
coming from maximal cones
-
3. access to the representatives of all orbits (under the group action), i.e.,
of the orbits of all faces of maximal cones
For variants 2. and 3. access is possible dimension-wise, as specified by the
user. Then the returned object can be either a list of indices (to rows of
the matrix of ray generators) or a list of ZCones.
In the first case, an index must be provided and a ZCone will be returned.
| fan f; // ambient dim 0, no cones, lineality
// space = ambient space
fan f = fan_empty(int n); // ambient dim = n, no cones,
// symmetry subgroup = <e>
fan f = n; // synonymous convenience method for
// 'fan f = fan_empty(n)'
fan f = emptyFan(
optional intmat G); // symmetry group generated by rows of
// G; ambient dim = number of columns
// of G
// Here a row r = r_1, ...r_n represents the permutation
// which takes i to r_i. SINGULAR will check for the validity
// of the provided rows, i.e. whether {r_1,...,r_n} = {1,...,n}
fan f = fullFan(int n); // ambient dim = n, the fan consists of
// one cone which equals the ambient
// space, symmetry subgroup = <e>
fan f = fullFan(
optional intmat G); // symmetry group generated by rows of
// G; ambient dim = number of columns
// of G; the fan consists of one cone
// which equals the ambient space
|
|