Documentation

Mathlib.Analysis.Convex.Cone.Proper

Proper cones #

We define a proper cone as a closed, pointed cone. Proper cones are used in defining conic programs which generalize linear programs. A linear program is a conic program for the positive cone. We then prove Farkas' lemma for conic programs following the proof in the reference below. Farkas' lemma is equivalent to strong duality. So, once we have the definitions of conic and linear programs, the results from this file can be used to prove duality theorems.

TODO #

The next steps are:

References #

structure ProperCone (๐•œ : Type u_1) (E : Type u_2) [OrderedSemiring ๐•œ] [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] extends Submodule :
Type u_2

A proper cone is a pointed cone K that is closed. Proper cones have the nice property that they are equal to their double dual, see ProperCone.dual_dual. This makes them useful for defining cone programs and proving duality theorems.

Instances For
    theorem ProperCone.isClosed' {๐•œ : Type u_1} {E : Type u_2} [OrderedSemiring ๐•œ] [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] (self : ProperCone ๐•œ E) :
    IsClosed self.carrier
    @[reducible, inline]
    abbrev ProperCone.toPointedCone {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] (C : ProperCone ๐•œ E) :
    Submodule { c : ๐•œ // 0 โ‰ค c } E

    A PointedCone is defined as an alias of submodule. We replicate the abbreviation here and define toPointedCone as an alias of toSubmodule.

    Equations
    • โ†‘C = C.toSubmodule
    Instances For
      instance ProperCone.instCoePointedCone {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] :
      Coe (ProperCone ๐•œ E) (PointedCone ๐•œ E)
      Equations
      • ProperCone.instCoePointedCone = { coe := ProperCone.toPointedCone }
      theorem ProperCone.toPointedCone_injective {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] :
      Function.Injective ProperCone.toPointedCone
      instance ProperCone.instSetLike {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] :
      SetLike (ProperCone ๐•œ E) E
      Equations
      • ProperCone.instSetLike = { coe := fun (K : ProperCone ๐•œ E) => K.carrier, coe_injective' := โ‹ฏ }
      theorem ProperCone.ext_iff {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] {S : ProperCone ๐•œ E} {T : ProperCone ๐•œ E} :
      S = T โ†” โˆ€ (x : E), x โˆˆ S โ†” x โˆˆ T
      theorem ProperCone.ext {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] {S : ProperCone ๐•œ E} {T : ProperCone ๐•œ E} (h : โˆ€ (x : E), x โˆˆ S โ†” x โˆˆ T) :
      S = T
      @[simp]
      theorem ProperCone.mem_coe {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] {x : E} {K : ProperCone ๐•œ E} :
      x โˆˆ โ†‘K โ†” x โˆˆ K
      instance ProperCone.instZero {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] (K : ProperCone ๐•œ E) :
      Zero โ†ฅK
      Equations
      theorem ProperCone.nonempty {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] (K : ProperCone ๐•œ E) :
      (โ†‘K).Nonempty
      theorem ProperCone.isClosed {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [Module ๐•œ E] (K : ProperCone ๐•œ E) :
      IsClosed โ†‘K
      def ProperCone.positive (๐•œ : Type u_1) (E : Type u_2) [OrderedSemiring ๐•œ] [OrderedAddCommGroup E] [Module ๐•œ E] [OrderedSMul ๐•œ E] [TopologicalSpace E] [OrderClosedTopology E] :
      ProperCone ๐•œ E

      The positive cone is the proper cone formed by the set of nonnegative elements in an ordered module.

      Equations
      Instances For
        @[simp]
        theorem ProperCone.mem_positive (๐•œ : Type u_2) (E : Type u_1) [OrderedSemiring ๐•œ] [OrderedAddCommGroup E] [Module ๐•œ E] [OrderedSMul ๐•œ E] [TopologicalSpace E] [OrderClosedTopology E] {x : E} :
        @[simp]
        theorem ProperCone.coe_positive (๐•œ : Type u_2) (E : Type u_1) [OrderedSemiring ๐•œ] [OrderedAddCommGroup E] [Module ๐•œ E] [OrderedSMul ๐•œ E] [TopologicalSpace E] [OrderClosedTopology E] :
        โ†‘โ†‘(ProperCone.positive ๐•œ E) = ConvexCone.positive ๐•œ E
        instance ProperCone.instZero_1 {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [T1Space E] [Module ๐•œ E] :
        Zero (ProperCone ๐•œ E)
        Equations
        • ProperCone.instZero_1 = { zero := { toSubmodule := 0, isClosed' := โ‹ฏ } }
        instance ProperCone.instInhabited {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [T1Space E] [Module ๐•œ E] :
        Inhabited (ProperCone ๐•œ E)
        Equations
        • ProperCone.instInhabited = { default := 0 }
        @[simp]
        theorem ProperCone.mem_zero {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [T1Space E] [Module ๐•œ E] (x : E) :
        x โˆˆ 0 โ†” x = 0
        @[simp]
        theorem ProperCone.coe_zero {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [T1Space E] [Module ๐•œ E] :
        โ†‘โ†‘0 = 0
        theorem ProperCone.pointed_zero {๐•œ : Type u_1} [OrderedSemiring ๐•œ] {E : Type u_2} [AddCommMonoid E] [TopologicalSpace E] [T1Space E] [Module ๐•œ E] :
        (โ†‘โ†‘0).Pointed
        theorem ProperCone.pointed {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] (K : ProperCone โ„ E) :
        (โ†‘โ†‘K).Pointed

        The closure of image of a proper cone under a continuous โ„-linear map is a proper cone. We use continuous maps here so that the comap of f is also a map between proper cones.

        Equations
        Instances For
          @[simp]
          theorem ProperCone.coe_map {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {F : Type u_2} [NormedAddCommGroup F] [InnerProductSpace โ„ F] (f : E โ†’L[โ„] F) (K : ProperCone โ„ E) :
          โ†‘(ProperCone.map f K) = (PointedCone.map โ†‘f โ†‘K).closure

          The inner dual cone of a proper cone is a proper cone.

          Equations
          Instances For
            @[simp]
            theorem ProperCone.coe_dual {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] (K : ProperCone โ„ E) :
            โ†‘โ†‘K.dual = (โ†‘K).innerDualCone
            @[simp]
            theorem ProperCone.mem_dual {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {K : ProperCone โ„ E} {y : E} :
            y โˆˆ K.dual โ†” โˆ€ โฆƒx : Eโฆ„, x โˆˆ K โ†’ 0 โ‰ค inner x y

            The preimage of a proper cone under a continuous โ„-linear map is a proper cone.

            Equations
            Instances For
              @[simp]

              The dual of the dual of a proper cone is itself.

              theorem ProperCone.hyperplane_separation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] [CompleteSpace E] {F : Type u_2} [NormedAddCommGroup F] [InnerProductSpace โ„ F] [CompleteSpace F] (K : ProperCone โ„ E) {f : E โ†’L[โ„] F} {b : F} :
              b โˆˆ ProperCone.map f K โ†” โˆ€ (y : F), (ContinuousLinearMap.adjoint f) y โˆˆ K.dual โ†’ 0 โ‰ค inner y b

              This is a relative version of ConvexCone.hyperplane_separation_of_nonempty_of_isClosed_of_nmem, which we recover by setting f to be the identity map. This is also a geometric interpretation of the Farkas' lemma stated using proper cones.

              theorem ProperCone.hyperplane_separation_of_nmem {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] [CompleteSpace E] {F : Type u_2} [NormedAddCommGroup F] [InnerProductSpace โ„ F] [CompleteSpace F] (K : ProperCone โ„ E) {f : E โ†’L[โ„] F} {b : F} (disj : b โˆ‰ ProperCone.map f K) :
              โˆƒ (y : F), (ContinuousLinearMap.adjoint f) y โˆˆ K.dual โˆง inner y b < 0