Semifield structure on the type of nonnegative elements #
This file defines instances and prove some properties about the nonnegative elements
{x : α // 0 ≤ x} of an arbitrary type α.
This is used to derive algebraic structures on ℝ≥0 and ℚ≥0 automatically.
Main declarations #
{x : α // 0 ≤ x}is aCanonicallyLinearOrderedSemifieldifαis aLinearOrderedField.
theorem
NNRat.cast_nonneg
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(q : ℚ≥0)
:
theorem
nnqsmul_nonneg
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
{a : α}
(q : ℚ≥0)
(ha : 0 ≤ a)
:
def
Nonneg.unitsEquivPos
(R : Type u_2)
[DivisionSemiring R]
[PartialOrder R]
[IsStrictOrderedRing R]
[PosMulReflectLT R]
:
In an ordered field, the units of the nonnegative elements are the positive elements.
Instances For
@[simp]
theorem
Nonneg.val_unitsEquivPos_symm_apply_coe
(R : Type u_2)
[DivisionSemiring R]
[PartialOrder R]
[IsStrictOrderedRing R]
[PosMulReflectLT R]
(r : { r : R // 0 < r })
:
↑↑((unitsEquivPos R).symm r) = ↑r
@[simp]
theorem
Nonneg.val_inv_unitsEquivPos_symm_apply_coe
(R : Type u_2)
[DivisionSemiring R]
[PartialOrder R]
[IsStrictOrderedRing R]
[PosMulReflectLT R]
(r : { r : R // 0 < r })
:
↑↑((unitsEquivPos R).symm r)⁻¹ = (↑r)⁻¹
@[simp]
theorem
Nonneg.unitsEquivPos_apply_coe
(R : Type u_2)
[DivisionSemiring R]
[PartialOrder R]
[IsStrictOrderedRing R]
[PosMulReflectLT R]
(r : { r : R // 0 ≤ r }ˣ)
:
↑((unitsEquivPos R) r) = ↑↑r
@[implicit_reducible]
instance
Nonneg.inv
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
:
Inv { x : α // 0 ≤ x }
@[simp]
theorem
Nonneg.coe_inv
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(a : { x : α // 0 ≤ x })
:
@[simp]
theorem
Nonneg.inv_mk
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
{x : α}
(hx : 0 ≤ x)
:
@[implicit_reducible]
instance
Nonneg.div
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
:
Div { x : α // 0 ≤ x }
@[simp]
theorem
Nonneg.coe_div
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(a b : { x : α // 0 ≤ x })
:
↑(a / b) = ↑a / ↑b
@[simp]
theorem
Nonneg.mk_div_mk
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
{x y : α}
(hx : 0 ≤ x)
(hy : 0 ≤ y)
:
⟨x, hx⟩ / ⟨y, hy⟩ = ⟨x / y, ⋯⟩
@[implicit_reducible]
instance
Nonneg.zpow
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
:
Pow { x : α // 0 ≤ x } ℤ
@[simp]
theorem
Nonneg.coe_zpow
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(a : { x : α // 0 ≤ x })
(n : ℤ)
:
↑(a ^ n) = ↑a ^ n
@[simp]
theorem
Nonneg.mk_zpow
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
{x : α}
(hx : 0 ≤ x)
(n : ℤ)
:
⟨x, hx⟩ ^ n = ⟨x ^ n, ⋯⟩
@[implicit_reducible]
instance
Nonneg.instNNRatCast
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
:
@[implicit_reducible]
instance
Nonneg.instNNRatSMul
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
:
@[simp]
theorem
Nonneg.coe_nnratCast
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(q : ℚ≥0)
:
↑↑q = ↑q
@[simp]
theorem
Nonneg.mk_nnratCast
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(q : ℚ≥0)
:
⟨↑q, ⋯⟩ = ↑q
@[simp]
theorem
Nonneg.coe_nnqsmul
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(q : ℚ≥0)
(a : { x : α // 0 ≤ x })
:
↑(q • a) = q • ↑a
@[simp]
theorem
Nonneg.mk_nnqsmul
{α : Type u_1}
[Semifield α]
[LinearOrder α]
[IsStrictOrderedRing α]
(q : ℚ≥0)
(a : α)
(ha : 0 ≤ a)
:
↑⟨q • a, ⋯⟩ = q • a
@[implicit_reducible]
@[implicit_reducible]
instance
Nonneg.linearOrderedCommGroupWithZero
{α : Type u_1}
[Field α]
[LinearOrder α]
[IsStrictOrderedRing α]
:
LinearOrderedCommGroupWithZero { x : α // 0 ≤ x }