NRR.Geometry.ConvexBody — cutting a convex body by a closed halfspace #
This module provides a reusable API for intersecting a solid ConvexBody with a closed
halfspace determined by a normal vector u and a threshold t. It is a core primitive for
cutting convex bodies by hyperplanes and building partitions.
Setup #
E is a real inner product space. For a normal vector u : E and threshold t : ℝ we
define the two closed halfspaces
lowerClosedHalfspace u t = {x | inner ℝ u x ≤ t};upperClosedHalfspace u t = {x | t ≤ inner ℝ u x}.
Each is convex (from linearity of the inner product) and closed (as the sublevel/superlevel set of a continuous functional).
Cuts #
Intersecting a convex body K with a closed halfspace always yields a compact convex
set (a closed subset of the compact K, and an intersection of convex sets). It is again a
solid ConvexBody only when its interior is nonempty, so the constructors
ConvexBody.cutLowerClosed K u t hIntConvexBody.cutUpperClosed K u t hInt
require the nonempty-interior hypothesis hInt explicitly. We do not claim the cut is a
ConvexBody unconditionally, and we do not introduce an axiom for the nonempty interior.
Halfspace definitions are local #
There is no oriented-hyperplane file over a general inner product space in the library yet
(the plane-specific NRR.Halfspace lives in a different, E2-specific development), so
the halfspace definitions are kept minimal here; downstream modules may generalize them.
Note on inner #
In the current Mathlib the real inner product is written inner ℝ u x (the scalar field is an
explicit argument), which is what appears throughout this file.
Import policy #
Following the library-wide policy, Basic.lean already pulls in import Mathlib, so no extra
imports are required here.
Closed halfspaces #
The closed lower halfspace with normal u and threshold t: {x | inner ℝ u x ≤ t}.
Instances For
The closed upper halfspace with normal u and threshold t: {x | t ≤ inner ℝ u x}.
Instances For
Compactness of the intersection #
The cuts #
The cut of a convex body K by the closed lower halfspace {x | inner ℝ u x ≤ t}, as a
ConvexBody. Solidity is not automatic, so the nonempty-interior hypothesis hInt is
required explicitly.
Equations
- K.cutLowerClosed u t hInt = { carrier := K.carrier ∩ NRR.Geometry.lowerClosedHalfspace u t, convex' := ⋯, isCompact' := ⋯, interior_nonempty' := hInt }
Instances For
The cut of a convex body K by the closed upper halfspace {x | t ≤ inner ℝ u x}, as a
ConvexBody. Solidity is not automatic, so the nonempty-interior hypothesis hInt is
required explicitly.
Equations
- K.cutUpperClosed u t hInt = { carrier := K.carrier ∩ NRR.Geometry.upperClosedHalfspace u t, convex' := ⋯, isCompact' := ⋯, interior_nonempty' := hInt }