{-# OPTIONS --safe --warning=error #-} open import Agda.Primitive using (Level; lzero; lsuc; _⊔_) open import LogicalFormulae open import Functions module Orders where record PartialOrder {a b : _} (carrier : Set a) : Set (a ⊔ lsuc b) where field _<_ : Rel {a} {b} carrier irreflexive : {x : carrier} → (x < x) → False transitive : {a b c : carrier} → (a < b) → (b < c) → (a < c) record TotalOrder {a b : _} (carrier : Set a) : Set (a ⊔ lsuc b) where field order : PartialOrder {a} {b} carrier _<_ : Rel carrier _<_ = PartialOrder._<_ order _≤_ : Rel carrier _≤_ a b = (a < b) || (a ≡ b) field totality : (a b : carrier) → ((a < b) || (b < a)) || (a ≡ b) min : carrier → carrier → carrier min a b with totality a b min a b | inl (inl a