Documentation

Mathlib.Algebra.Order.Star.Basic

Star ordered rings #

We define the class StarOrderedRing R, which says that the order on R respects the star operation, i.e. an element r is nonnegative iff it is in the AddSubmonoid generated by elements of the form star s * s. In many cases, including all C⋆-algebras, this can be reduced to 0 ≤ r ↔ ∃ s, r = star s * s. However, this generality is slightly more convenient (e.g., it allows us to register a StarOrderedRing instance for ), and more closely resembles the literature (see the seminal paper The positive cone in Banach algebras)

In order to accommodate NonUnitalSemiring R, we actually don't characterize nonnegativity, but rather the entire relation with StarOrderedRing.le_iff. However, notice that when R is a NonUnitalRing, these are equivalent (see StarOrderedRing.nonneg_iff and StarOrderedRing.of_nonneg_iff).

It is important to note that while a StarOrderedRing often satisfies IsOrderedAddMonoid, it usually does not satisfy IsOrderedRing.

TODO #

theorem smul_mem_closure_star_mul {R : Type u_1} {A : Type u_2} [Semiring R] [StarRing R] [NonUnitalSemiring A] [StarRing A] [Module R A] [StarModule R A] [IsScalarTower R A A] [SMulCommClass R A A] {r : R} (hr : r AddSubmonoid.closure (Set.range fun (s : R) => star s * s)) {a : A} (ha : a AddSubmonoid.closure (Set.range fun (s : A) => star s * s)) :
r a AddSubmonoid.closure (Set.range fun (s : A) => star s * s)

An ordered *-ring is a *-ring with a partial order such that the nonnegative elements constitute precisely the AddSubmonoid generated by elements of the form star s * s.

If you are working with a NonUnitalRing and not a NonUnitalSemiring, it may be more convenient to declare instances using StarOrderedRing.of_nonneg_iff.

Instances

    A class to encode that self-adjoint elements may be expressed as the difference of nonnegative elements. This is satisfied by any type with a NonUnitalContinuousFunctionalCalculus ℝ A IsSelfAdjoint instance. However, it can also be satisfied by continuous linear functionals equipped with the intrinsic star operation.

    This type class can be used to guarantee PositiveLinearMap is a StarHomClass.

    • exists_nonneg_sub_nonneg {a : R} (ha : IsSelfAdjoint a) : ∃ (b : R) (c : R), 0 b 0 c a = b - c

      Every self-adjoint element is the difference of nonnegative elements.

    Instances
      theorem IsSelfAdjoint.exists_nonneg_sub_nonneg {R : Type u_3} [AddGroup R] [Star R] [PartialOrder R] [SelfAdjointDecompose R] {a : R} (ha : IsSelfAdjoint a) :
      ∃ (b : R) (c : R), 0 b 0 c a = b - c
      theorem StarOrderedRing.of_le_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] (h_le_iff : ∀ (x y : R), x y ∃ (s : R), y = x + star s * s) :

      To construct a StarOrderedRing instance it suffices to show that x ≤ y if and only if y = x + star s * s for some s : R.

      This is provided for convenience because it holds in some common scenarios (e.g.,ℝ≥0, C(X, ℝ≥0)) and obviates the hassle of AddSubmonoid.closure_induction when creating those instances.

      If you are working with a NonUnitalRing and not a NonUnitalSemiring, see StarOrderedRing.of_nonneg_iff for a more convenient version.

      theorem StarOrderedRing.pos_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      0 < x x 0 x AddSubmonoid.closure (Set.range fun (s : R) => star s * s)
      theorem StarOrderedRing.lt_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} [IsCancelAdd R] :
      x < y ∃ (p : R), p 0 p AddSubmonoid.closure (Set.range fun (s : R) => star s * s) y = x + p
      theorem StarOrderedRing.of_nonneg_iff {R : Type u_1} [NonUnitalRing R] [PartialOrder R] [StarRing R] (h_add : ∀ {x y : R}, x y∀ (z : R), z + x z + y) (h_nonneg_iff : ∀ (x : R), 0 x x AddSubmonoid.closure (Set.range fun (s : R) => star s * s)) :

      When R is a non-unital ring, to construct a StarOrderedRing instance it suffices to show that the nonnegative elements are precisely those elements in the AddSubmonoid generated by star s * s for s : R.

      theorem StarOrderedRing.of_nonneg_iff' {R : Type u_1} [NonUnitalRing R] [PartialOrder R] [StarRing R] (h_add : ∀ {x y : R}, x y∀ (z : R), z + x z + y) (h_nonneg_iff : ∀ (x : R), 0 x ∃ (s : R), x = star s * s) :

      When R is a non-unital ring, to construct a StarOrderedRing instance it suffices to show that the nonnegative elements are precisely those elements of the form star s * s for s : R.

      This is provided for convenience because it holds in many common scenarios (e.g.,, , or any C⋆-algebra), and obviates the hassle of AddSubmonoid.closure_induction when creating those instances.

      theorem IsSelfAdjoint.of_ge {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} (h : x y) (hx : IsSelfAdjoint x) :
      @[deprecated IsSelfAdjoint.of_ge (since := "2026-06-12")]
      theorem IsSelfAdjoint.mono {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} (h : x y) (hx : IsSelfAdjoint x) :

      Alias of IsSelfAdjoint.of_ge.

      theorem LE.le.isSelfAdjoint {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} (hx : 0 x) :

      An alias of IsSelfAdjoint.of_nonneg for use with dot notation.

      theorem LE.le.star_eq {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} (hx : 0 x) :
      star x = x

      The combination (IsSelfAdjoint.star_eq <| .of_nonneg ·) for use with dot notation.

      @[simp]
      theorem star_mul_self_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] (r : R) :
      0 star r * r
      @[simp]
      theorem mul_star_self_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] (r : R) :
      0 r * star r

      A star projection is non-negative in a star-ordered ring.

      theorem star_left_conjugate_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : 0 a) (c : R) :
      0 star c * a * c
      theorem star_right_conjugate_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : 0 a) (c : R) :
      0 c * a * star c
      theorem IsSelfAdjoint.conjugate_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : 0 a) {c : R} (hc : IsSelfAdjoint c) :
      0 c * a * c
      theorem conjugate_nonneg_of_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : 0 a) {c : R} (hc : 0 c) :
      0 c * a * c
      theorem star_left_conjugate_le_conjugate {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a b) (c : R) :
      star c * a * c star c * b * c
      theorem star_right_conjugate_le_conjugate {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a b) (c : R) :
      c * a * star c c * b * star c
      theorem IsSelfAdjoint.conjugate_le_conjugate {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a b) {c : R} (hc : IsSelfAdjoint c) :
      c * a * c c * b * c
      theorem conjugate_le_conjugate_of_nonneg {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a b) {c : R} (hc : 0 c) :
      c * a * c c * b * c
      @[simp]
      theorem star_le_star_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} :
      star x star y x y
      @[simp]
      theorem star_lt_star_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} :
      star x < star y x < y
      theorem star_le_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} :
      star x y x star y
      theorem star_lt_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} :
      star x < y x < star y
      @[simp]
      theorem star_nonneg_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      0 star x 0 x
      @[simp]
      theorem star_nonpos_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      star x 0 x 0
      @[simp]
      theorem star_pos_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      0 < star x 0 < x
      @[simp]
      theorem star_neg_iff {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      star x < 0 x < 0
      theorem star_left_conjugate_lt_conjugate {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a < b) {c : R} (hc : IsRegular c) :
      star c * a * c < star c * b * c
      theorem star_right_conjugate_lt_conjugate {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a < b) {c : R} (hc : IsRegular c) :
      c * a * star c < c * b * star c
      theorem star_left_conjugate_pos {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : 0 < a) {c : R} (hc : IsRegular c) :
      0 < star c * a * c
      theorem star_right_conjugate_pos {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : 0 < a) {c : R} (hc : IsRegular c) :
      0 < c * a * star c
      theorem star_mul_self_pos {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] [Nontrivial R] {x : R} (hx : IsRegular x) :
      0 < star x * x
      theorem mul_star_self_pos {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] [Nontrivial R] {x : R} (hx : IsRegular x) :
      0 < x * star x
      theorem IsSelfAdjoint.of_le {R : Type u_1} [NonUnitalRing R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a b : R} (hab : a b) :

      Alias of the reverse direction of IsSelfAdjoint.iff_of_le.

      @[simp]
      theorem one_le_star_iff {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      1 star x 1 x
      @[simp]
      theorem star_le_one_iff {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      star x 1 x 1
      @[simp]
      theorem one_lt_star_iff {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      1 < star x 1 < x
      @[simp]
      theorem star_lt_one_iff {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x : R} :
      star x < 1 x < 1
      theorem IsSelfAdjoint.sq_nonneg {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {a : R} (ha : IsSelfAdjoint a) :
      0 a ^ 2
      theorem IsUnit.star_right_conjugate_nonneg_iff {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {u x : R} (hu : IsUnit u) :
      0 u * x * star u 0 x
      theorem IsUnit.star_left_conjugate_nonneg_iff {R : Type u_1} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {u x : R} (hu : IsUnit u) :
      0 star u * x * u 0 x
      theorem IsSelfAdjoint.map' {F : Type u_6} {E : Type u_7} {R : Type u_8} [AddCommGroup E] [PartialOrder E] [StarAddMonoid E] [NonUnitalRing R] [PartialOrder R] [StarRing R] [StarOrderedRing R] [SelfAdjointDecompose E] [FunLike F E R] [OrderHomClass F E R] [AddMonoidHomClass F E R] {a : E} (ha : IsSelfAdjoint a) (f : F) :

      While IsSelfAdjoint.map assumes the map is star-preserving, this lemma instead assumes the map is an order-preserving additive map from a space where self-adjoint elements can be expressed as differences of nonnegative elemens, and whose codomain is a star-ordered ring. When such maps are linear over , they are also star-preserving, and this lemma is used to establish that one by splitting into real and imaginary parts.

      @[deprecated IsSelfAdjoint.map' (since := "2026-06-12")]
      theorem map_isSelfAdjoint {F : Type u_6} {E : Type u_7} {R : Type u_8} [AddCommGroup E] [PartialOrder E] [StarAddMonoid E] [NonUnitalRing R] [PartialOrder R] [StarRing R] [StarOrderedRing R] [SelfAdjointDecompose E] [FunLike F E R] [OrderHomClass F E R] [AddMonoidHomClass F E R] {a : E} (ha : IsSelfAdjoint a) (f : F) :

      Alias of IsSelfAdjoint.map'.


      While IsSelfAdjoint.map assumes the map is star-preserving, this lemma instead assumes the map is an order-preserving additive map from a space where self-adjoint elements can be expressed as differences of nonnegative elemens, and whose codomain is a star-ordered ring. When such maps are linear over , they are also star-preserving, and this lemma is used to establish that one by splitting into real and imaginary parts.

      theorem IsStarProjection.le_one {R : Type u_1} [Ring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {p : R} (hp : IsStarProjection p) :
      p 1
      theorem IsStarProjection.mem_Icc {R : Type u_1} [Ring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {p : R} (hp : IsStarProjection p) :
      p Set.Icc 0 1

      For a star projection p, we have 0 ≤ p ≤ 1.

      theorem IsStarProjection.le_of_mul_eq_left {R : Type u_1} [NonUnitalRing R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {p q : R} (hp : IsStarProjection p) (hq : IsStarProjection q) (hpq : p * q = p) :
      p q

      A star projection p is less than or equal to a star projection q when p * q = p.

      theorem IsStarProjection.le_of_mul_eq_right {R : Type u_1} [NonUnitalRing R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {p q : R} (hp : IsStarProjection p) (hq : IsStarProjection q) (hpq : q * p = p) :
      p q

      A star projection p is less than or equal to a star projection q when q * p = p.