Andrew Sneap

This file defines positive rationals, which are useful for metric spaces.

\begin{code}
{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan renaming (_+_ to _∔_)
open import Notation.Order
open import Rationals.Type
open import Rationals.Addition renaming (_+_ to _ℚ+_)
open import Rationals.Multiplication renaming (_*_ to _ℚ*_)
open import Rationals.Order

module Rationals.Positive where

ℚ₊ : 𝓤₀ ̇
ℚ₊ = Σ q ꞉ ℚ , 0ℚ < q

_<ℚ₊_ : (p q : ℚ₊) → 𝓤₀ ̇
(p , _) <ℚ₊ (q , _) = p < q

_≤ℚ₊_ : (p q : ℚ₊) → 𝓤₀ ̇
(p , _) ≤ℚ₊ (q , _) = p ≤ q

instance
 Strict-Order-ℚ₊-ℚ₊ : Strict-Order ℚ₊ ℚ₊
 _<_ {{Strict-Order-ℚ₊-ℚ₊}} = _<ℚ₊_

 Order-ℚ₊-ℚ₊ : Order ℚ₊ ℚ₊
 _≤_ {{Order-ℚ₊-ℚ₊}} = _≤ℚ₊_

 Strict-Order-ℚ₊-ℚ : Strict-Order ℚ₊ ℚ
 _<_ {{Strict-Order-ℚ₊-ℚ}} (p , _) q = p < q

 Strict-Order-ℚ-ℚ₊ : Strict-Order ℚ ℚ₊
 _<_ {{Strict-Order-ℚ-ℚ₊}} p (q , _) = p < q

_+_ : ℚ₊ → ℚ₊ → ℚ₊
(p , 0<p) + (q , 0<q) = p ℚ+ q , ℚ<-adding-zero p q 0<p 0<q

1ℚ₊ : ℚ₊
1ℚ₊ = 1ℚ , 0<1

_*_ : ℚ₊ → ℚ₊ → ℚ₊
(p , 0<p) * (q , 0<q)
 = p ℚ* q , ℚ<-pos-multiplication-preserves-order p q 0<p 0<q

1/2*_ : ℚ₊ → ℚ₊
1/2* p = (1/2 , 0<1/2) * p

1/4*_ : ℚ₊ → ℚ₊
1/4* p = (1/4 , 0<1/4) * p

\end{code}
