Andrew Sneap, February-March 2022
In this file I define min and max for rationals.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan renaming (_+_ to _∔_)
open import Notation.Order
open import UF.Base
open import MLTT.Plus-Properties
open import Rationals.Type
open import Rationals.Order
module Rationals.MinMax where
max' : (x y : ℚ) → (x < y) ∔ (x = y) ∔ (y < x) → ℚ
max' x y (inl _) = y
max' x y (inr _) = x
max : ℚ → ℚ → ℚ
max p q = max' p q (ℚ-trichotomous p q)
max'-to-max : (x y : ℚ)
→ (t : (x < y) ∔ (x = y) ∔ (y < x))
→ max' x y t = max x y
max'-to-max x y t = equality-cases t I II
where
I : (l : x < y) → t = inl l → max' x y t = max x y
I l e = max' x y t =⟨ ap (max' x y) e ⟩
max' x y (inl l) =⟨ ap (max' x y) (ℚ-trich-a x y l ⁻¹) ⟩
max' x y (ℚ-trichotomous x y) =⟨ by-definition ⟩
max x y ∎
II : (l : (x = y) ∔ y < x) → t = inr l → max' x y t = max x y
II r e = max' x y t =⟨ ap (max' x y) e ⟩
max' x y (inr r) =⟨ ap (max' x y) (ℚ-trich-b x y r ⁻¹) ⟩
max' x y (ℚ-trichotomous x y) =⟨ by-definition ⟩
max x y ∎
max'-refl : (q : ℚ) → (t : (q < q) ∔ (q = q) ∔ (q < q)) → max' q q t = q
max'-refl q (inl l) = 𝟘-elim (ℚ<-irrefl q l)
max'-refl q (inr (inl l)) = l
max'-refl q (inr (inr l)) = 𝟘-elim (ℚ<-irrefl q l)
max-refl : (q : ℚ) → max q q = q
max-refl q = I (ℚ-trichotomous q q)
where
I : (q < q) ∔ (q = q) ∔ (q < q) → max q q = q
I t = max q q =⟨ max'-to-max q q t ⁻¹ ⟩
max' q q t =⟨ max'-refl q t ⟩
q ∎
max'-comm : (x y : ℚ)
→ (s : (x < y) ∔ (x = y) ∔ (y < x))
→ (t : (y < x) ∔ (y = x) ∔ (x < y))
→ max' x y s = max' y x t
max'-comm x y (inl s) (inl t) = 𝟘-elim (ℚ<-irrefl x (ℚ<-trans x y x s t))
max'-comm x y (inl s) (inr (inl t)) = 𝟘-elim (ℚ<-irrefl y (transport (_< y) (t ⁻¹) s))
max'-comm x y (inl s) (inr (inr t)) = refl
max'-comm x y (inr (inl s)) (inl t) = refl
max'-comm x y (inr (inr s)) (inl t) = refl
max'-comm x y (inr (inl s)) (inr (inl t)) = s
max'-comm x y (inr (inl s)) (inr (inr t)) = s
max'-comm x y (inr (inr s)) (inr (inl t)) = t ⁻¹
max'-comm x y (inr (inr s)) (inr (inr t)) = 𝟘-elim (ℚ<-irrefl x (ℚ<-trans x y x t s))
max-comm : (p q : ℚ) → max p q = max q p
max-comm x y =
max x y =⟨ max'-to-max x y (ℚ-trichotomous x y) ⟩
max' x y (ℚ-trichotomous x y) =⟨ max'-comm x y (ℚ-trichotomous x y) (ℚ-trichotomous y x) ⟩
max' y x (ℚ-trichotomous y x) =⟨ max'-to-max y x (ℚ-trichotomous y x) ⟩
max y x ∎
max'-to-≤ : (p q : ℚ) → (t : (p < q) ∔ (p = q) ∔ (q < p))
→ (p ≤ q) × (max' p q t = q)
∔ (q ≤ p) × (max' p q t = p)
max'-to-≤ p q (inl t) = Cases (ℚ-trichotomous p q) I II
where
I : p < q → (p ≤ q) × (max' p q (inl t) = q) ∔ q ≤ p × (max' p q (inl t) = p)
I l = inl ((ℚ<-coarser-than-≤ p q l) , refl)
II : (p = q) ∔ q < p
→ (p ≤ q)
× (max' p q (inl t) = q) ∔ q ≤ p × (max' p q (inl t) = p)
II (inl e) = 𝟘-elim (ℚ<-irrefl p (transport (p <_) (e ⁻¹) t))
II (inr l) = 𝟘-elim (ℚ<-irrefl p (ℚ<-trans p q p t l))
max'-to-≤ p q (inr t) = inr (I t , refl)
where
I : (p = q) ∔ q < p → q ≤ p
I (inl l) = transport (q ≤_) (l ⁻¹) (ℚ≤-refl q)
I (inr l) = ℚ<-coarser-than-≤ q p l
max-to-≤ : (p q : ℚ) → (p ≤ q) × (max p q = q) ∔ q ≤ p × (max p q = p)
max-to-≤ p q = I (max'-to-≤ p q (ℚ-trichotomous p q))
where
I : (p ≤ q) × (max' p q (ℚ-trichotomous p q) = q)
∔ (q ≤ p) × (max' p q (ℚ-trichotomous p q) = p)
→ (p ≤ q) × (max p q = q) ∔ (q ≤ p) × (max p q = p)
I (inl t) = inl t
I (inr t) = inr t
decide-max : (p q : ℚ) → (max p q = q) ∔ (max p q = p)
decide-max p q = +functor pr₂ pr₂ (max-to-≤ p q)
max≤ : (p q : ℚ) → p ≤ max p q
max≤ p q = I (max-to-≤ p q)
where
I : (p ≤ q) × (max p q = q) ∔ (q ≤ p) × (max p q = p) → p ≤ max p q
I (inl (p≤q , e)) = transport (p ≤_) (e ⁻¹) p≤q
I (inr (q≤p , e)) = transport (p ≤_) (e ⁻¹) (ℚ≤-refl p)
max≤' : (p q : ℚ) → q ≤ max p q
max≤' p q = transport (q ≤_) (max-comm q p) (max≤ q p)
min' : (x y : ℚ) → (x < y) ∔ (x = y) ∔ (y < x) → ℚ
min' x y (inl _) = x
min' x y (inr _) = y
min : ℚ → ℚ → ℚ
min p q = min' p q (ℚ-trichotomous p q)
min'-to-min : (x y : ℚ)
→ (t : (x < y) ∔ (x = y) ∔ (y < x)) → min' x y t = min x y
min'-to-min x y t = equality-cases t I II
where
I : (k : x < y) → t = inl k → min' x y t = min x y
I k e = min' x y t =⟨ ap (min' x y) e ⟩
min' x y (inl k) =⟨ ap (min' x y) (ℚ-trich-a x y k ⁻¹) ⟩
min' x y (ℚ-trichotomous x y) =⟨ by-definition ⟩
min x y ∎
II : (k : (x = y) ∔ y < x) → t = inr k → min' x y t = min x y
II k e = min' x y t =⟨ ap (min' x y) e ⟩
min' x y (inr k) =⟨ ap (min' x y) (ℚ-trich-b x y k ⁻¹) ⟩
min' x y (ℚ-trichotomous x y) =⟨ by-definition ⟩
min x y ∎
min'-refl : (q : ℚ) → (t : (q < q) ∔ (q = q) ∔ (q < q)) → min' q q t = q
min'-refl q (inl l) = 𝟘-elim (ℚ<-irrefl q l)
min'-refl q (inr (inl l)) = l
min'-refl q (inr (inr l)) = 𝟘-elim (ℚ<-irrefl q l)
min-refl : (q : ℚ) → min q q = q
min-refl q = I (ℚ-trichotomous q q)
where
I : (q < q) ∔ (q = q) ∔ (q < q) → min q q = q
I t = min q q =⟨ min'-to-min q q t ⁻¹ ⟩
min' q q t =⟨ min'-refl q t ⟩
q ∎
min'-comm : (x y : ℚ)
→ (s : (x < y) ∔ (x = y) ∔ (y < x))
→ (t : (y < x) ∔ (y = x) ∔ (x < y))
→ min' x y s = min' y x t
min'-comm x y (inl s) (inl t) = 𝟘-elim (ℚ<-irrefl x (ℚ<-trans x y x s t))
min'-comm x y (inl s) (inr (inl t)) = 𝟘-elim (ℚ<-irrefl y (transport (_< y) (t ⁻¹) s))
min'-comm x y (inl s) (inr (inr t)) = refl
min'-comm x y (inr (inl s)) (inl t) = refl
min'-comm x y (inr (inr s)) (inl t) = refl
min'-comm x y (inr (inl s)) (inr (inl t)) = t
min'-comm x y (inr (inl s)) (inr (inr t)) = s ⁻¹
min'-comm x y (inr (inr s)) (inr (inl t)) = t
min'-comm x y (inr (inr s)) (inr (inr t)) = 𝟘-elim (ℚ<-irrefl x (ℚ<-trans x y x t s))
min-comm : (p q : ℚ) → min p q = min q p
min-comm x y =
min x y =⟨ min'-to-min x y (ℚ-trichotomous x y) ⟩
min' x y (ℚ-trichotomous x y) =⟨ min'-comm x y (ℚ-trichotomous x y) (ℚ-trichotomous y x) ⟩
min' y x (ℚ-trichotomous y x) =⟨ min'-to-min y x (ℚ-trichotomous y x) ⟩
min y x ∎
min'-to-≤ : (p q : ℚ) → (t : (p < q) ∔ (p = q) ∔ (q < p))
→ (p ≤ q) × (min' p q t = p)
∔ (q ≤ p) × (min' p q t = q)
min'-to-≤ p q (inl t) = Cases (ℚ-trichotomous p q) I II
where
I : p < q
→ (p ≤ q) × (min' p q (inl t) = p) ∔ (q ≤ p) × (min' p q (inl t) = q)
I l = inl ((ℚ<-coarser-than-≤ p q l) , refl)
II : (p = q) ∔ q < p
→ (p ≤ q) × (min' p q (inl t) = p) ∔ (q ≤ p) × (min' p q (inl t) = q)
II (inl e) = 𝟘-elim (ℚ<-irrefl p (transport (p <_) (e ⁻¹) t))
II (inr l) = 𝟘-elim (ℚ<-irrefl p (ℚ<-trans p q p t l))
min'-to-≤ p q (inr t) = inr (I t , refl)
where
I : (p = q) ∔ q < p → q ≤ p
I (inl l) = transport (q ≤_) (l ⁻¹) (ℚ≤-refl q)
I (inr l) = ℚ<-coarser-than-≤ q p l
min-to-≤ : (p q : ℚ) → (p ≤ q) × (min p q = p) ∔ (q ≤ p) × (min p q = q)
min-to-≤ p q = I (min'-to-≤ p q (ℚ-trichotomous p q))
where
I : (p ≤ q) × (min' p q (ℚ-trichotomous p q) = p)
∔ (q ≤ p) × (min' p q (ℚ-trichotomous p q) = q)
→ (p ≤ q) × (min p q = p) ∔ q ≤ p × (min p q = q)
I (inl t) = inl t
I (inr t) = inr t
decide-min : (p q : ℚ) → (min p q = p) ∔ (min p q = q)
decide-min p q = +functor pr₂ pr₂ (min-to-≤ p q)
min≤ : (p q : ℚ) → min p q ≤ p
min≤ p q = I (min-to-≤ p q)
where
I : (p ≤ q) × (min p q = p) ∔ (q ≤ p) × (min p q = q)
→ min p q ≤ p
I (inl (p≤q , e)) = transport (_≤ p) (e ⁻¹) (ℚ≤-refl p)
I (inr (q≤p , e)) = transport (_≤ p) (e ⁻¹) q≤p
min≤' : (p q : ℚ) → min p q ≤ q
min≤' p q = transport (_≤ q) (min-comm q p) (min≤ q p)
≤-to-min' : (x y : ℚ) → x ≤ y
→ (t : (x < y) ∔ (x = y) ∔ (y < x)) → x = min' x y t
≤-to-min' x y l (inl t) = refl
≤-to-min' x y l (inr (inl t)) = t
≤-to-min' x y l (inr (inr t)) = I (ℚ≤-split x y l)
where
I : (x < y) ∔ (x = y) → x = min' x y (inr (inr t))
I (inl s) = 𝟘-elim (ℚ<-irrefl x (ℚ<-trans x y x s t))
I (inr s) = s
≤-to-min : (x y : ℚ) → x ≤ y → x = min x y
≤-to-min x y l = ≤-to-min' x y l (ℚ-trichotomous x y)
<-to-min : (x y : ℚ) → x < y → x = min x y
<-to-min x y l = ≤-to-min x y (ℚ<-coarser-than-≤ x y l)
≤-to-max' : (x y : ℚ) → x ≤ y → (t : (x < y) ∔ (x = y) ∔ (y < x)) → y = max' x y t
≤-to-max' x y l (inl t) = refl
≤-to-max' x y l (inr (inl t)) = t ⁻¹
≤-to-max' x y l (inr (inr t)) = I (ℚ≤-split x y l)
where
I : x < y ∔ (x = y) → y = max' x y (inr (inr t))
I (inl s) = 𝟘-elim (ℚ<-irrefl x (ℚ<-trans x y x s t))
I (inr s) = s ⁻¹
≤-to-max : (x y : ℚ) → x ≤ y → y = max x y
≤-to-max x y l = ≤-to-max' x y l (ℚ-trichotomous x y)
<-to-max : (x y : ℚ) → x < y → y = max x y
<-to-max x y l = ≤-to-max x y (ℚ<-coarser-than-≤ x y l)
min-assoc : (x y z : ℚ) → min (min x y) z = min x (min y z)
min-assoc x y z = I (min-to-≤ x y) (min-to-≤ (min x y) z) (min-to-≤ y z) (min-to-≤ x (min y z))
where
I : (x ≤ y) × (min x y = x) ∔ (y ≤ x) × (min x y = y)
→ (min x y ≤ z) × (min (min x y) z = min x y)
∔ (z ≤ min x y) × (min (min x y) z = z)
→ y ≤ z × (min y z = y)
∔ (z ≤ y) × (min y z = z)
→ (x ≤ min y z) × (min x (min y z) = x)
∔ (min y z ≤ x) × (min x (min y z) = min y z)
→ min (min x y) z = min x (min y z)
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ap (λ - → min x -) (e₃ ⁻¹)
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti x z (transport (_≤ z) e₁ l₂) (transport (_≤ x) e₃ l₄) ∙ e₃ ⁻¹ ∙ (e₄ ⁻¹)
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z x (transport (z ≤_) e₁ l₂) (ℚ≤-trans x y z l₁ l₃) ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z y (ℚ≤-trans z x y (transport (z ≤_) e₁ l₂) l₁) l₃ ∙ (e₃ ⁻¹) ∙ (e₄ ⁻¹)
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = ap (λ - → min - z) e₁ ∙ ap (λ - → min x -) (e₃ ⁻¹)
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ (e₃ ⁻¹) ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti y x l₁ (transport (x ≤_) e₃ l₄) ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ e₁ ∙ (e₃ ⁻¹) ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti y x l₁ (ℚ≤-trans x z y (transport (x ≤_) e₃ l₄) l₃) ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti y z (transport (_≤ z) e₁ l₂) l₃ ∙ (e₃ ⁻¹) ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z y (transport (z ≤_) e₁ l₂) l₃ ∙ e₁ ⁻¹ ∙ ap (λ - → min x -) (e₃ ⁻¹)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = ap (λ - → min - z) e₁ ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z x (ℚ≤-trans z y x l₃ l₁) (transport (x ≤_) e₃ l₄) ∙ (e₄ ⁻¹)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ (e₃ ⁻¹) ∙ (e₄ ⁻¹)
min-to-max : (x y : ℚ) → min x y = x → max x y = y
min-to-max x y e = I (min-to-≤ x y)
where
I : (x ≤ y) × (min x y = x) ∔ y ≤ x × (min x y = y)
→ max x y = y
I (inl (l₁ , e₁)) = ≤-to-max x y l₁ ⁻¹
I (inr (l₂ , e₂)) = ≤-to-max x y (transport (_≤ y) (II ⁻¹) (ℚ≤-refl y)) ⁻¹
where
II : x = y
II = (e ⁻¹) ∙ e₂
max-assoc : (x y z : ℚ) → max (max x y) z = max x (max y z)
max-assoc x y z = I (max-to-≤ x y) (max-to-≤ (max x y) z) (max-to-≤ y z) (max-to-≤ x (max y z))
where
I : (x ≤ y) × (max x y = y) ∔ y ≤ x × (max x y = x)
→ (max x y ≤ z) × (max (max x y) z = z)
∔ (z ≤ max x y) × (max (max x y) z = max x y)
→ (y ≤ z) × (max y z = z)
∔ (z ≤ y) × (max y z = y)
→ (x ≤ max y z) × (max x (max y z) = max y z)
∔ (max y z ≤ x) × (max x (max y z) = x)
→ max (max x y) z = max x (max y z)
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z x (transport (_≤ x) e₃ l₄) (ℚ≤-trans x y z l₁ l₃) ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z y l₃ (transport (_≤ z) e₁ l₂) ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z x (ℚ≤-trans z y x l₃ (transport (_≤ x) e₃ l₄)) (ℚ≤-trans x y z l₁ (transport (_≤ z) e₁ l₂)) ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti y z l₃ (transport (z ≤_) e₁ l₂) ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti y x (ℚ≤-trans y z x l₃ (transport (_≤ x) e₃ l₄)) l₁ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ap (λ - → max x -) (e₃ ⁻¹)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z x (transport (_≤ x) e₃ l₄) (transport (_≤ z) e₁ l₂) ∙ e₄ ⁻¹
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z y l₃ (ℚ≤-trans y x z l₁ (transport (_≤ z) e₁ l₂)) ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ℚ≤-anti z x (ℚ≤-trans z y x l₃ (transport (_≤ x) e₃ l₄)) (transport (_≤ z) e₁ l₂) ∙ e₄ ⁻¹
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ e₁ ∙ ℚ≤-anti x z (transport (x ≤_) e₃ l₄) (transport (z ≤_) e₁ l₂) ∙ e₃ ⁻¹ ∙ e₄ ⁻¹
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inl (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ e₁ ∙ e₄ ⁻¹
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inl (l₄ , e₄)) = e₂ ∙ ap (λ - → max x -) (e₃ ⁻¹)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) (inr (l₃ , e₃)) (inr (l₄ , e₄)) = e₂ ∙ ap (λ - → max x -) (e₃ ⁻¹)
min₃ : (a b c : ℚ) → ℚ
min₃ a b c = min (min a b) c
min₄ : (a b c d : ℚ) → ℚ
min₄ a b c d = min (min (min a b) c) d
max₃ : (a b c : ℚ) → ℚ
max₃ a b c = max (max a b) c
max₄ : (a b c d : ℚ) → ℚ
max₄ a b c d = max (max (max a b) c) d
min≤max : (a b : ℚ) → min a b ≤ max a b
min≤max a b = I (min-to-≤ a b)
where
I : (a ≤ b) × (min a b = a)
∔ (b ≤ a) × (min a b = b)
→ min a b ≤ max a b
I (inl (a≤b , e)) = transport₂ _≤_ (e ⁻¹) (min-to-max a b e ⁻¹) a≤b
I (inr (b≤a , e)) = transport₂ _≤_ (e ⁻¹) (min-to-max b a (min-comm b a ∙ e) ⁻¹ ∙ max-comm b a) b≤a
min₃≤max₃ : (a b c : ℚ) → min₃ a b c ≤ max₃ a b c
min₃≤max₃ a b c = I (min-to-≤ (min a b) c) (max-to-≤ (max a b) c)
where
I : (min a b ≤ c) × (min (min a b) c = min a b)
∔ (c ≤ (min a b)) × (min (min a b) c = c)
→ (max a b ≤ c) × (max (max a b) c = c)
∔ (c ≤ max a b) × (max (max a b) c = max a b)
→ min₃ a b c ≤ max₃ a b c
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) l₁
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) (min≤max a b)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) (ℚ≤-refl c)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) l₂
min₄≤max₄ : (a b c d : ℚ) → min₄ a b c d ≤ max₄ a b c d
min₄≤max₄ a b c d = I (min-to-≤ (min₃ a b c) d) (max-to-≤ (max₃ a b c) d)
where
I : (min₃ a b c ≤ d) × (min (min₃ a b c) d = min₃ a b c)
∔ (d ≤ min₃ a b c) × (min (min₃ a b c) d = d)
→ (max₃ a b c ≤ d) × (max (max₃ a b c) d = d)
∔ (d ≤ max₃ a b c) × (max (max₃ a b c) d = max₃ a b c)
→ min₄ a b c d ≤ max₄ a b c d
I (inl (l₁ , e₁)) (inl (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) l₁
I (inl (l₁ , e₁)) (inr (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) (min₃≤max₃ a b c)
I (inr (l₁ , e₁)) (inl (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) (ℚ≤-refl d)
I (inr (l₁ , e₁)) (inr (l₂ , e₂)) = transport₂ _≤_ (e₁ ⁻¹) (e₂ ⁻¹) l₂
\end{code}