Finite exposed-face API for rational polytopes #
Every nonempty exposed face of a finitely generated polytope is the convex hull of the generators which it contains. Consequently the custom face type used by this project is finite, even though an exposure is stored using arbitrary real affine data.
The generators of P which lie on a face. This finite set uniquely
determines the face.
Equations
- F.generatorFinset = {q ∈ P.generators | q ∈ F.carrier}
Instances For
An exposed face is the convex hull of precisely the chosen generators which lie on it.
Every nonempty exposed face contains at least one generator of the ambient polytope.
A code for a face as a member of the powerset of the given generating finset.
Equations
- F.generatorCode = ⟨F.generatorFinset, ⋯⟩
Instances For
A face carrier is convex.
Equations
- EGZ.RationalPolytope.Face.facePartialOrder P = PartialOrder.lift (fun (F : P.Face) => F.carrier) ⋯
The whole polytope is its top exposed face.
Equations
- EGZ.RationalPolytope.Face.top P = { carrier := P.carrier, is_exposed := ⋯, nonempty := ⋯ }
Instances For
Equations
- EGZ.RationalPolytope.Face.faceOrderTop P = { top := EGZ.RationalPolytope.Face.top P, le_top := ⋯ }
The intersection of two faces is a face whenever it is nonempty.
Equations
Instances For
The least number of generators among common upper faces.
Equations
- F.commonUpperMinCard G = Nat.find ⋯
Instances For
The common upper face with the fewest generating points. Intersecting with any other common upper face proves that it is the least one.
Equations
- F.supFace G = Classical.choose ⋯