Algebraic structures on the set of positive numbers #
In this file we define various instances (AddSemigroup
, OrderedCommMonoid
etc) on the
type {x : R // 0 < x}
. In each case we try to require the weakest possible typeclass
assumptions on R
but possibly, there is a room for improvements.
@[simp]
theorem
Positive.coe_add
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
(x y : { x : M // 0 < x })
:
instance
Positive.addSemigroup
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
:
AddSemigroup { x : M // 0 < x }
Equations
- Positive.addSemigroup = Function.Injective.addSemigroup (fun (a : { x : M // 0 < x }) => ↑a) ⋯ ⋯
instance
Positive.addCommSemigroup
{M : Type u_3}
[AddCommMonoid M]
[Preorder M]
[AddLeftStrictMono M]
:
AddCommSemigroup { x : M // 0 < x }
Equations
- Positive.addCommSemigroup = Function.Injective.addCommSemigroup (fun (a : { x : M // 0 < x }) => ↑a) ⋯ ⋯
instance
Positive.addLeftCancelSemigroup
{M : Type u_3}
[AddLeftCancelMonoid M]
[Preorder M]
[AddLeftStrictMono M]
:
AddLeftCancelSemigroup { x : M // 0 < x }
Equations
- Positive.addLeftCancelSemigroup = Function.Injective.addLeftCancelSemigroup (fun (a : { x : M // 0 < x }) => ↑a) ⋯ ⋯
instance
Positive.addRightCancelSemigroup
{M : Type u_3}
[AddRightCancelMonoid M]
[Preorder M]
[AddLeftStrictMono M]
:
AddRightCancelSemigroup { x : M // 0 < x }
Equations
- Positive.addRightCancelSemigroup = Function.Injective.addRightCancelSemigroup (fun (a : { x : M // 0 < x }) => ↑a) ⋯ ⋯
instance
Positive.addLeftStrictMono
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
:
AddLeftStrictMono { x : M // 0 < x }
instance
Positive.addRightStrictMono
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
[AddRightStrictMono M]
:
AddRightStrictMono { x : M // 0 < x }
instance
Positive.addLeftReflectLT
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
[AddLeftReflectLT M]
:
AddLeftReflectLT { x : M // 0 < x }
instance
Positive.addRightReflectLT
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
[AddRightReflectLT M]
:
AddRightReflectLT { x : M // 0 < x }
instance
Positive.addLeftReflectLE
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
[AddLeftReflectLE M]
:
AddLeftReflectLE { x : M // 0 < x }
instance
Positive.addRightReflectLE
{M : Type u_1}
[AddMonoid M]
[Preorder M]
[AddLeftStrictMono M]
[AddRightReflectLE M]
:
AddRightReflectLE { x : M // 0 < x }
instance
Positive.addLeftMono
{M : Type u_1}
[AddMonoid M]
[PartialOrder M]
[AddLeftStrictMono M]
:
AddLeftMono { x : M // 0 < x }
@[simp]
@[simp]
theorem
Positive.val_pow
{R : Type u_2}
[StrictOrderedSemiring R]
(x : { x : R // 0 < x })
(n : ℕ)
:
Equations
- Positive.instSemigroupSubtypeLtOfNat = Function.Injective.semigroup Subtype.val ⋯ ⋯
Equations
- Positive.instDistribSubtypeLtOfNat = Function.Injective.distrib (fun (a : { x : R // 0 < x }) => ↑a) ⋯ ⋯ ⋯
Equations
- Positive.instOneSubtypeLtOfNat = { one := ⟨1, ⋯⟩ }
Equations
- Positive.instMonoidSubtypeLtOfNat = Function.Injective.monoid (fun (a : { x : R // 0 < x }) => ↑a) ⋯ ⋯ ⋯ ⋯
instance
Positive.orderedCommMonoid
{R : Type u_2}
[StrictOrderedCommSemiring R]
:
OrderedCommMonoid { x : R // 0 < x }
Equations
- Positive.orderedCommMonoid = OrderedCommMonoid.mk ⋯
instance
Positive.linearOrderedCancelCommMonoid
{R : Type u_2}
[LinearOrderedCommSemiring R]
:
LinearOrderedCancelCommMonoid { x : R // 0 < x }
If R
is a nontrivial linear ordered commutative semiring, then {x : R // 0 < x}
is a linear
ordered cancellative commutative monoid.
Equations
- Positive.linearOrderedCancelCommMonoid = LinearOrderedCancelCommMonoid.mk ⋯ LinearOrder.decidableLE LinearOrder.decidableEq LinearOrder.decidableLT ⋯ ⋯ ⋯