Convex cones #
In a π
-module E
, we define a convex cone as a set s
such that a β’ x + b β’ y β s
whenever
x, y β s
and a, b > 0
. We prove that convex cones form a CompleteLattice
, and define their
images (ConvexCone.map
) and preimages (ConvexCone.comap
) under linear maps.
We define pointed, blunt, flat and salient cones, and prove the correspondence between convex cones and ordered modules.
We define Convex.toCone
to be the minimal cone that includes a given convex set.
Main statements #
In Mathlib/Analysis/Convex/Cone/Extension.lean
we prove
the M. Riesz extension theorem and a form of the Hahn-Banach theorem.
In Mathlib/Analysis/Convex/Cone/Dual.lean
we prove
a variant of the hyperplane separation theorem.
Implementation notes #
While Convex π
is a predicate on sets, ConvexCone π E
is a bundled convex cone.
References #
- https://en.wikipedia.org/wiki/Convex_cone
- [Stephen P. Boyd and Lieven Vandenberghe, Convex Optimization][boydVandenberghe2004]
- [Emo Welzl and Bernd GΓ€rtner, Cone Programming][welzl_garter]
Definition of ConvexCone
and basic properties #
A convex cone is a subset s
of a π
-module such that a β’ x + b β’ y β s
whenever a, b > 0
and x, y β s
.
- carrier : Set E
The carrier set underlying this cone: the set of points contained in it
Instances For
Equations
- ConvexCone.instSetLike = { coe := ConvexCone.carrier, coe_injective' := β― }
Two ConvexCone
s are equal if they have the same elements.
Equations
- β― = β―
Equations
- ConvexCone.instInf = { inf := fun (S T : ConvexCone π E) => { carrier := βS β© βT, smul_mem' := β―, add_mem' := β― } }
Equations
- ConvexCone.instInfSet = { sInf := fun (S : Set (ConvexCone π E)) => { carrier := β s β S, βs, smul_mem' := β―, add_mem' := β― } }
Equations
- ConvexCone.instBot π = { bot := { carrier := β , smul_mem' := β―, add_mem' := β― } }
Equations
- ConvexCone.instTop π = { top := { carrier := Set.univ, smul_mem' := β―, add_mem' := β― } }
Equations
- ConvexCone.instCompleteLattice π = let __src := SetLike.instPartialOrder; CompleteLattice.mk β― β― β― β― β― β―
Equations
- ConvexCone.instInhabited π = { default := β₯ }
The image of a convex cone under a π
-linear map is a convex cone.
Equations
- ConvexCone.map f S = { carrier := βf '' βS, smul_mem' := β―, add_mem' := β― }
Instances For
The preimage of a convex cone under a π
-linear map is a convex cone.
Equations
- ConvexCone.comap f S = { carrier := βf β»ΒΉ' βS, smul_mem' := β―, add_mem' := β― }
Instances For
Constructs an ordered module given an OrderedAddCommGroup
, a cone, and a proof that
the order relation is the one defined by the cone.
Convex cones with extra properties #
A convex cone is pointed if it includes 0
.
Instances For
A convex cone is blunt if it doesn't include 0
.
Equations
- S.Blunt = (0 β S)
Instances For
A convex cone is flat if it contains some nonzero vector x
and its opposite -x
.
Instances For
A convex cone is salient if it doesn't include x
and -x
for any nonzero x
.
Instances For
A flat cone is always pointed (contains 0
).
A blunt cone (one not containing 0
) is always salient.
A pointed convex cone defines a preorder.
Equations
- S.toPreorder hβ = Preorder.mk β― β― β―
Instances For
A pointed and salient cone defines a partial order.
Equations
- S.toPartialOrder hβ hβ = let __src := S.toPreorder hβ; PartialOrder.mk β―
Instances For
A pointed and salient cone defines an OrderedAddCommGroup
.
Equations
- S.toOrderedAddCommGroup hβ hβ = let __src := S.toPartialOrder hβ hβ; let __src_1 := let_fun this := inferInstance; this; OrderedAddCommGroup.mk β―
Instances For
Equations
- ConvexCone.instZero = { zero := { carrier := 0, smul_mem' := β―, add_mem' := β― } }
Equations
- ConvexCone.instAdd = { add := fun (Kβ Kβ : ConvexCone π E) => { carrier := {z : E | β x β Kβ, β y β Kβ, x + y = z}, smul_mem' := β―, add_mem' := β― } }
Equations
- ConvexCone.instAddZeroClass = AddZeroClass.mk β― β―
Equations
- ConvexCone.instAddCommSemigroup = AddCommSemigroup.mk β―
Submodules are cones #
Every submodule is trivially a convex cone.
Equations
- S.toConvexCone = { carrier := βS, smul_mem' := β―, add_mem' := β― }
Instances For
Positive cone of an ordered module #
The positive cone is the convex cone formed by the set of nonnegative elements in an ordered module.
Equations
- ConvexCone.positive π E = { carrier := Set.Ici 0, smul_mem' := β―, add_mem' := β― }
Instances For
The positive cone of an ordered module is always salient.
The positive cone of an ordered module is always pointed.
The cone of strictly positive elements.
Note that this naming diverges from the mathlib convention of pos
and nonneg
due to "positive
cone" (ConvexCone.positive
) being established terminology for the non-negative elements.
Equations
- ConvexCone.strictlyPositive π E = { carrier := Set.Ioi 0, smul_mem' := β―, add_mem' := β― }
Instances For
The strictly positive cone of an ordered module is always salient.
The strictly positive cone of an ordered module is always blunt.
Cone over a convex set #
The set of vectors proportional to those in a convex set forms a convex cone.
Equations
- Convex.toCone s hs = { carrier := β (c : π), β (_ : 0 < c), c β’ s, smul_mem' := β―, add_mem' := β― }
Instances For
hs.toCone s
is the least cone that includes s
.