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 is an OrderedAddCommMonoid it is often not an OrderedSemiring.

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
    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.mono {R : Type u_1} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] {x y : R} (h : x y) (hx : IsSelfAdjoint x) :
    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 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 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 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 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 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 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 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 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
    @[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
    @[deprecated smul_lt_smul_of_pos_left (since := "2025-08-24")]
    theorem StarModule.smul_lt_smul_of_pos {R : Type u_1} {A : Type u_2} [Semiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R] [NonUnitalSemiring A] [StarRing A] [PartialOrder A] [StarOrderedRing A] [Module R A] [StarModule R A] [IsScalarTower R A A] [SMulCommClass R A A] [IsCancelAdd A] [NoZeroSMulDivisors R A] {a b : A} {c : R} (hab : a < b) (hc : 0 < c) :
    c a < c b
    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.