Nonnegative rationals #
This file defines the nonnegative rationals as a subtype of Rat
and provides its algebraic order
structure.
We also define an instance CanLift ℚ ℚ≥0
. This instance can be used by the lift
tactic to
replace x : ℚ
and hx : 0 ≤ x
in the proof context with x : ℚ≥0
while replacing all occurrences
of x
with ↑x
. This tactic also works for a function f : α → ℚ
with a hypothesis
hf : ∀ x, 0 ≤ f x
.
Notation #
Reinterpret a rational number q
as a non-negative rational number. Returns 0
if q ≤ 0
.
Instances For
toNNRat
and (↑) : ℚ≥0 → ℚ
form a Galois insertion.
Instances For
The rational numbers are an algebra over the non-negative rationals.
instance
NNRat.instDistribMulActionNNRatToMonoidToMonoidWithZeroToSemiringToStrictOrderedSemiringToLinearOrderedSemiringToLinearOrderedCommSemiringToLinearOrderedSemifieldInstNNRatCanonicallyLinearOrderedSemifieldToAddMonoid
{α : Type u_1}
[AddCommMonoid α]
[DistribMulAction ℚ α]
:
A DistribMulAction
over ℚ
restricts to a DistribMulAction
over ℚ≥0
.
@[simp]
theorem
NNRat.coe_indicator
{α : Type u_1}
(s : Set α)
(f : α → NNRat)
(a : α)
:
↑(Set.indicator s f a) = Set.indicator s (fun x => ↑(f x)) a
theorem
NNRat.coe_multiset_sum
(s : Multiset NNRat)
:
↑(Multiset.sum s) = Multiset.sum (Multiset.map Subtype.val s)
theorem
NNRat.coe_multiset_prod
(s : Multiset NNRat)
:
↑(Multiset.prod s) = Multiset.prod (Multiset.map Subtype.val s)
theorem
NNRat.coe_sum
{α : Type u_1}
{s : Finset α}
{f : α → NNRat}
:
↑(Finset.sum s fun a => f a) = Finset.sum s fun a => ↑(f a)
theorem
NNRat.toNNRat_sum_of_nonneg
{α : Type u_1}
{s : Finset α}
{f : α → ℚ}
(hf : ∀ (a : α), a ∈ s → 0 ≤ f a)
:
Rat.toNNRat (Finset.sum s fun a => f a) = Finset.sum s fun a => Rat.toNNRat (f a)
theorem
NNRat.coe_prod
{α : Type u_1}
{s : Finset α}
{f : α → NNRat}
:
↑(Finset.prod s fun a => f a) = Finset.prod s fun a => ↑(f a)
theorem
NNRat.toNNRat_prod_of_nonneg
{α : Type u_1}
{s : Finset α}
{f : α → ℚ}
(hf : ∀ (a : α), a ∈ s → 0 ≤ f a)
:
Rat.toNNRat (Finset.prod s fun a => f a) = Finset.prod s fun a => Rat.toNNRat (f a)
Alias of the reverse direction of Rat.toNNRat_eq_zero
.
@[simp]
theorem
Rat.toNNRat_le_toNNRat_iff
{p : ℚ}
{q : ℚ}
(hp : 0 ≤ p)
:
Rat.toNNRat q ≤ Rat.toNNRat p ↔ q ≤ p
@[simp]
theorem
Rat.toNNRat_lt_toNNRat_iff'
{p : ℚ}
{q : ℚ}
:
Rat.toNNRat q < Rat.toNNRat p ↔ q < p ∧ 0 < p
theorem
Rat.toNNRat_lt_toNNRat_iff
{p : ℚ}
{q : ℚ}
(h : 0 < p)
:
Rat.toNNRat q < Rat.toNNRat p ↔ q < p
theorem
Rat.toNNRat_lt_toNNRat_iff_of_nonneg
{p : ℚ}
{q : ℚ}
(hq : 0 ≤ q)
:
Rat.toNNRat q < Rat.toNNRat p ↔ q < p
@[simp]
theorem
Rat.toNNRat_add
{p : ℚ}
{q : ℚ}
(hq : 0 ≤ q)
(hp : 0 ≤ p)
:
Rat.toNNRat (q + p) = Rat.toNNRat q + Rat.toNNRat p
theorem
Rat.toNNRat_mul
{p : ℚ}
{q : ℚ}
(hp : 0 ≤ p)
:
Rat.toNNRat (p * q) = Rat.toNNRat p * Rat.toNNRat q
theorem
Rat.toNNRat_div
{p : ℚ}
{q : ℚ}
(hp : 0 ≤ p)
:
Rat.toNNRat (p / q) = Rat.toNNRat p / Rat.toNNRat q
theorem
Rat.toNNRat_div'
{p : ℚ}
{q : ℚ}
(hq : 0 ≤ q)
:
Rat.toNNRat (p / q) = Rat.toNNRat p / Rat.toNNRat q