Documentation

Mathlib.Geometry.Convex.Cone.Pointed

Pointed cones #

A pointed cone is defined to be a submodule of a module where the scalars are restricted to be nonnegative. This is equivalent to saying that, as a set, a pointed cone is a convex cone which contains 0. This is a bundled version of ConvexCone.Pointed. We choose the submodule definition as it allows us to use the Module API to work with convex cones.

@[reducible, inline]
abbrev PointedCone (R : Type u_5) (E : Type u_6) [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] :
Type u_6

A pointed cone is a submodule of a module with scalars restricted to being nonnegative.

Instances For
    @[reducible, inline]
    abbrev PointedCone.ofSubmodule {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (S : Submodule R E) :

    A submodule is a pointed cone.

    Instances For
      @[implicit_reducible]
      instance PointedCone.instCoeSubmodule {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] :
      Coe (Submodule R E) (PointedCone R E)
      @[simp]
      theorem PointedCone.coe_ofSubmodule {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (S : Submodule R E) :
      โ†‘โ†‘S = โ†‘S
      theorem PointedCone.mem_ofSubmodule_iff {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {S : Submodule R E} {x : E} :
      x โˆˆ โ†‘S โ†” x โˆˆ S
      theorem PointedCone.ofSubmodule_inj {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {S T : Submodule R E} :
      โ†‘S = โ†‘T โ†” S = T
      @[reducible, inline]

      Coercion from submodules to pointed cones as an order embedding.

      Instances For
        @[reducible, inline]

        Coercion from submodules to pointed cones as a lattice homomorphism.

        Instances For
          theorem PointedCone.ofSubmodule_inf {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (S T : Submodule R E) :
          โ†‘(S โŠ“ T) = โ†‘S โŠ“ โ†‘T
          theorem PointedCone.ofSubmodule_sup {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (S T : Submodule R E) :
          โ†‘(S โŠ” T) = โ†‘S โŠ” โ†‘T
          theorem PointedCone.ofSubmodule_iInf {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (s : Set (Submodule R E)) :
          โ†‘(โจ… S โˆˆ s, S) = โจ… S โˆˆ s, โ†‘S
          theorem PointedCone.ofSubmodule_iSup {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (s : Set (Submodule R E)) :
          โ†‘(โจ† S โˆˆ s, S) = โจ† S โˆˆ s, โ†‘S
          def PointedCone.toConvexCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : PointedCone R E) :

          Every pointed cone is a convex cone.

          Instances For
            @[implicit_reducible]
            instance PointedCone.instCoeConvexCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] :
            Coe (PointedCone R E) (ConvexCone R E)
            @[simp]
            theorem PointedCone.pointed_toConvexCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : PointedCone R E) :
            (โ†‘C).Pointed
            @[simp]
            theorem PointedCone.mem_toConvexCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {C : PointedCone R E} {x : E} :
            x โˆˆ โ†‘C โ†” x โˆˆ C
            theorem PointedCone.ext {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {Cโ‚ Cโ‚‚ : PointedCone R E} (h : โˆ€ (x : E), x โˆˆ Cโ‚ โ†” x โˆˆ Cโ‚‚) :
            Cโ‚ = Cโ‚‚
            theorem PointedCone.ext_iff {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {Cโ‚ Cโ‚‚ : PointedCone R E} :
            Cโ‚ = Cโ‚‚ โ†” โˆ€ (x : E), x โˆˆ Cโ‚ โ†” x โˆˆ Cโ‚‚
            theorem PointedCone.convex {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : PointedCone R E) :
            Convex R โ†‘C
            theorem PointedCone.smul_mem {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {x : E} {r : R} (C : PointedCone R E) (hr : 0 โ‰ค r) (hx : x โˆˆ C) :
            r โ€ข x โˆˆ C
            def ConvexCone.toPointedCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : ConvexCone R E) (hC : C.Pointed) :

            The PointedCone constructed from a pointed ConvexCone.

            Instances For
              @[simp]
              theorem ConvexCone.mem_toPointedCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {C : ConvexCone R E} (hC : C.Pointed) (x : E) :
              x โˆˆ C.toPointedCone hC โ†” x โˆˆ C
              @[simp]
              theorem ConvexCone.coe_toPointedCone {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : ConvexCone R E) (hC : C.Pointed) :
              โ†‘(C.toPointedCone hC) = C
              def PointedCone.ofConeComb {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : Set E) (nonempty : C.Nonempty) (coneComb : โˆ€ x โˆˆ C, โˆ€ y โˆˆ C, โˆ€ (a : R), 0 โ‰ค a โ†’ โˆ€ (b : R), 0 โ‰ค b โ†’ a โ€ข x + b โ€ข y โˆˆ C) :

              Construct a pointed cone from closure under two-element conical combinations. I.e., a nonempty set closed under two-element conical combinations is a pointed cone.

              Instances For
                @[simp]
                theorem PointedCone.coe_ofConeComb {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : Set E) (nonempty : C.Nonempty) (coneComb : โˆ€ x โˆˆ C, โˆ€ y โˆˆ C, โˆ€ (a : R), 0 โ‰ค a โ†’ โˆ€ (b : R), 0 โ‰ค b โ†’ a โ€ข x + b โ€ข y โˆˆ C) :
                โ†‘(ofConeComb C nonempty coneComb) = C
                @[reducible, inline]
                abbrev PointedCone.hull (R : Type u_1) {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (s : Set E) :

                The cone hull of a set s is the smallest pointed cone that contains s.

                Pointed cones being defined as submodules over nonnegative scalars, this is implemented as the submodule span of s w.r.t. nonnegative scalars.

                Instances For
                  theorem PointedCone.subset_hull {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {s : Set E} :
                  s โІ โ†‘(hull R s)
                  @[deprecated PointedCone.subset_hull "`PointedCone.span` was renamed to `PointedCone.hull`" (since := "2026-03-22")]
                  theorem PointedCone.subset_span {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {s : Set E} :
                  s โІ โ†‘(hull R s)

                  Alias of PointedCone.subset_hull.

                  theorem PointedCone.mem_hull_set {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {x : E} {s : Set E} :
                  x โˆˆ hull R s โ†” โˆƒ (c : E โ†’โ‚€ R), โ†‘c.support โІ s โˆง (โˆ€ (y : E), 0 โ‰ค c y) โˆง (c.sum fun (m : E) (r : R) => r โ€ข m) = x

                  Elements of the cone hull are expressible as conical combination of elements from s.

                  @[deprecated PointedCone.mem_hull_set "`PointedCone.span` was renamed to `PointedCone.hull`" (since := "2026-03-22")]
                  theorem PointedCone.mem_span_set {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] {x : E} {s : Set E} :
                  x โˆˆ hull R s โ†” โˆƒ (c : E โ†’โ‚€ R), โ†‘c.support โІ s โˆง (โˆ€ (y : E), 0 โ‰ค c y) โˆง (c.sum fun (m : E) (r : R) => r โ€ข m) = x

                  Alias of PointedCone.mem_hull_set.


                  Elements of the cone hull are expressible as conical combination of elements from s.

                  Maps between pointed cones #

                  There is already a definition of maps between submodules, Submodule.map. In our case, these maps are induced from linear maps between the ambient modules that are linear over nonnegative scalars. Such maps are unlikely to be of any use in practice. So, we construct some API to define maps between pointed cones induced from linear maps between the ambient modules that are linear over all scalars.

                  def PointedCone.map {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] (f : E โ†’โ‚—[R] F) (C : PointedCone R E) :

                  The image of a pointed cone under an R-linear map is a pointed cone.

                  Instances For
                    @[simp]
                    theorem PointedCone.toConvexCone_map {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] (C : PointedCone R E) (f : E โ†’โ‚—[R] F) :
                    โ†‘(map f C) = ConvexCone.map f โ†‘C
                    @[simp]
                    theorem PointedCone.coe_map {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] (C : PointedCone R E) (f : E โ†’โ‚—[R] F) :
                    โ†‘(map f C) = โ‡‘f '' โ†‘C
                    @[simp]
                    theorem PointedCone.mem_map {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] {f : E โ†’โ‚—[R] F} {C : PointedCone R E} {y : F} :
                    y โˆˆ map f C โ†” โˆƒ x โˆˆ C, f x = y
                    theorem PointedCone.map_map {R : Type u_1} {E : Type u_2} {F : Type u_3} {G : Type u_4} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] [AddCommMonoid G] [Module R G] (g : F โ†’โ‚—[R] G) (f : E โ†’โ‚—[R] F) (C : PointedCone R E) :
                    map g (map f C) = map (g โˆ˜โ‚— f) C
                    @[simp]
                    theorem PointedCone.map_id {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] (C : PointedCone R E) :
                    def PointedCone.comap {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] (f : E โ†’โ‚—[R] F) (C : PointedCone R F) :

                    The preimage of a pointed cone under an R-linear map is a pointed cone.

                    Instances For
                      @[simp]
                      theorem PointedCone.coe_comap {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] (f : E โ†’โ‚—[R] F) (C : PointedCone R F) :
                      โ†‘(comap f C) = โ‡‘f โปยน' โ†‘C
                      theorem PointedCone.comap_comap {R : Type u_1} {E : Type u_2} {F : Type u_3} {G : Type u_4} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] [AddCommMonoid G] [Module R G] (g : F โ†’โ‚—[R] G) (f : E โ†’โ‚—[R] F) (C : PointedCone R G) :
                      comap f (comap g C) = comap (g โˆ˜โ‚— f) C
                      @[simp]
                      theorem PointedCone.mem_comap {R : Type u_1} {E : Type u_2} {F : Type u_3} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [Module R E] [AddCommMonoid F] [Module R F] {f : E โ†’โ‚—[R] F} {C : PointedCone R F} {x : E} :
                      x โˆˆ comap f C โ†” f x โˆˆ C

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

                      Instances For
                        @[simp]
                        theorem PointedCone.mem_positive (R : Type u_1) (E : Type u_2) [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommMonoid E] [PartialOrder E] [IsOrderedAddMonoid E] [Module R E] [PosSMulMono R E] {x : E} :
                        x โˆˆ positive R E โ†” 0 โ‰ค x
                        theorem PointedCone.to_isOrderedModule {R : Type u_1} {E : Type u_2} [Ring R] [PartialOrder R] [IsOrderedRing R] [AddCommGroup E] [PartialOrder E] [IsOrderedAddMonoid E] [Module R E] (C : PointedCone R E) (h : โˆ€ (x y : E), x โ‰ค y โ†” y - x โˆˆ C) :

                        Constructs an ordered module given an ordered group, a cone, and a proof that the order relation is the one defined by the cone.

                        def PointedCone.lineal {R : Type u_1} {E : Type u_2} [Ring R] [LinearOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] (C : PointedCone R E) :

                        The lineality space of a cone C is the submodule given by C โŠ“ -C.

                        Instances For
                          @[simp]
                          theorem PointedCone.coe_lineal {R : Type u_1} {E : Type u_2} [Ring R] [LinearOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] (C : PointedCone R E) :
                          โ†‘C.lineal = โ†‘C โˆฉ -โ†‘C
                          @[simp]
                          theorem PointedCone.ofSubmodule_lineal {R : Type u_1} {E : Type u_2} [Ring R] [LinearOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] (C : PointedCone R E) :
                          โ†‘C.lineal = C โŠ“ -C
                          @[simp]
                          theorem PointedCone.mem_lineal {R : Type u_1} {E : Type u_2} [Ring R] [LinearOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] {C : PointedCone R E} {x : E} :
                          x โˆˆ C.lineal โ†” x โˆˆ C โˆง -x โˆˆ C

                          The lineality space of a cone is the largest submodule contained in the cone.

                          theorem PointedCone.lineal_le {R : Type u_1} {E : Type u_2} [Ring R] [LinearOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] (C : PointedCone R E) :
                          โ†‘C.lineal โ‰ค C
                          theorem PointedCone.lineal_eq_sSup {R : Type u_1} {E : Type u_2} [Ring R] [LinearOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] (C : PointedCone R E) :
                          C.lineal = sSup {S : Submodule R E | โ†‘S โ‰ค C}
                          theorem PointedCone.salient_iff_inter_neg_eq_singleton {R : Type u_1} {E : Type u_2} [Semiring R] [PartialOrder R] [IsOrderedRing R] [AddCommGroup E] [Module R E] (C : PointedCone R E) :
                          (โ†‘C).Salient โ†” โ†‘C โˆฉ -โ†‘C = {0}

                          A pointed cone is salient iff the intersection of the cone with its negative is the set {0}.