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}