Documentation

LeanPool.NandakumarRamanaRao.NRR.Geometry.ConvexBody.AffineOps

NRR.Geometry.ConvexBody — translations and positive scalings #

This module provides a reusable API for translations K.translate v and positive scalings K.scalePos r hr of solid convex bodies over a real normed vector space.

The two constructors are

together with carrier/membership simp lemmas, the identity/composition laws, and the translation–scaling interaction.

Why 0 < r #

Scaling by r = 0 collapses everything to a point and destroys the nonempty-interior (solidity) field of a ConvexBody; it is therefore excluded. For any r ≠ 0 scaling is a homeomorphism (Homeomorph.smulOfNeZero), and we specialise to the positive case as required by the downstream width / support-function development.

Mathlib lemmas reused #

Import policy #

Following the library-wide policy, Basic.lean already pulls in import Mathlib, so no extra imports are required here.

Translation #

The translate of a convex body by a vector v, as a convex body with carrier (fun x => v + x) '' K. Translation is a homeomorphism, so solidity is preserved.

Equations
  • K.translate v = { carrier := (fun (x : E) => v + x) '' K.carrier, convex' := ⋯, isCompact' := ⋯, interior_nonempty' := ⋯ }
Instances For
    @[simp]
    theorem NRR.Geometry.ConvexBody.translate_carrier {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (K : ConvexBody E) (v : E) :
    (K.translate v).carrier = (fun (x : E) => v + x) '' K.carrier

    Positive scaling #

    The positive scaling of a convex body by r > 0, as a convex body with carrier (fun x => r • x) '' K. Scaling by a nonzero scalar is a homeomorphism, so solidity is preserved.

    Equations
    • K.scalePos r hr = { carrier := (fun (x : E) => r • x) '' K.carrier, convex' := ⋯, isCompact' := ⋯, interior_nonempty' := ⋯ }
    Instances For
      @[simp]
      theorem NRR.Geometry.ConvexBody.scalePos_carrier {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (K : ConvexBody E) {r : ℝ} (hr : 0 < r) :
      (K.scalePos r hr).carrier = (fun (x : E) => r • x) '' K.carrier
      theorem NRR.Geometry.ConvexBody.mem_scalePos {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (K : ConvexBody E) {r : ℝ} (hr : 0 < r) (x : E) :
      theorem NRR.Geometry.ConvexBody.scalePos_scalePos {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (K : ConvexBody E) {r s : ℝ} (hr : 0 < r) (hs : 0 < s) :
      (K.scalePos r hr).scalePos s hs = K.scalePos (s * r) ⋯

      Interaction of scaling and translation #

      theorem NRR.Geometry.ConvexBody.scalePos_translate {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (K : ConvexBody E) {r : ℝ} (hr : 0 < r) (v : E) :
      (K.translate v).scalePos r hr = (K.scalePos r hr).translate (r • v)