The face generated by <whatever> should be a face::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
- sage: S = ( K.random_element() for idx in range(0,5) )
+ sage: S = ( K.random_element() for idx in range(5) )
sage: F = face_generated_by(K, S)
sage: F.is_face_of(K)
True
The face generated by a set should always contain that set::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
- sage: S = ( K.random_element() for idx in range(0,5) )
+ sage: S = ( K.random_element() for idx in range(5) )
sage: F = face_generated_by(K, S)
sage: all(F.contains(x) for x in S)
True
The generators of a proper cone are all extreme vectors of the cone,
and therefore generate their own faces::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8,
....: max_rays=10,
....: strictly_convex=True,
that ``x`` is in the relative interior of ``F`` if and only if
``F`` is the face generated by ``x`` [Tam]_::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
sage: x = K.random_element()
sage: S = [x]
and ``G`` in the face lattice is equal to the face generated by
``F + G`` (in the Minkowski sense) [Tam]_::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
sage: L = K.face_lattice()
sage: F = L.random_element()
Combining Proposition 3.1 and Corollary 3.9 in [Tam]_ gives the
following equality for any ``y`` in ``K``::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
sage: y = K.random_element()
sage: S = [y]
The dual face of ``K`` with respect to itself should be the
lineality space of its dual [Tam]_::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
sage: K_dual = K.dual()
sage: lKd_gens = ( dir*l for dir in [1,-1] for l in K_dual.lines() )
If ``K`` is proper, then the dual face of its trivial face is the
dual of ``K`` [Tam]_::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8,
....: max_rays=10,
....: strictly_convex=True,
The dual of the cone of ``K`` at ``y`` is the dual face of the face
of ``K`` generated by ``y`` ([Tam]_ Corollary 3.2)::
- sage: set_random_seed()
sage: K = random_cone(max_ambient_dim=8, max_rays=10)
sage: y = K.random_element()
sage: S = [y]
Since all faces of a polyhedral cone are exposed, the dual face of a
dual face should be the original face [HilgertHofmannLawson]_::
- sage: set_random_seed()
sage: def check_prop(K,F):
....: return dual_face(K.dual(), dual_face(K,F)).is_equivalent(F)
sage: K = random_cone(max_ambient_dim=8, max_rays=10)