# *ord-axiomata* When using `Data.Type.Ord`, there are many facts one intuitively expects to hold that GHC is not clever enough to infer. We rectify this situation with `TotalOrder` and related typeclasses that not only enable comparison of singletons, but also provide axiomata allowing one to safely prove such facts to GHC. ## Axiomata Due to the expression of equivalence and ordering in terms of `Compare`, the phrasing of the axiomata is a little different than normal—some are reduced to consistency conditions for the following definitions. $$ \begin{alignat*}{3} &a < b &&\iff &&\mathrm{Compare} \kern3pt a \kern3pt b \sim \mathrm{LT} \\ &a = b &&\iff &&\mathrm{Compare} \kern3pt a \kern3pt b \sim \mathrm{EQ} \\ &a > b &&\iff &&\mathrm{Compare} \kern3pt a \kern3pt b \sim \mathrm{GT} \\ &a \leq b &&\iff &&a < b \lor a = b \\ &a \geq b &&\iff &&a > b \lor a = b \end{alignat*} $$ ### Equivalence $$ \begin{alignat*}{3} &\text{decidability} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a = b \lor a \neq b \\ &\text{reflexivity} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a \sim b \implies a = b \\ &\text{substitutability} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a = b \implies a \sim b \\ \end{alignat*} $$ ### Total Ordering $$ \begin{alignat*}{3} &\text{connectivity} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a \lt b \lor a = b \lor a \gt b \\ &\text{anti-symmetry} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a \le b \implies b \ge a \\ &\text{transitivity} \quad\quad\quad && \forall a, b, c \kern-2pt : \kern6pt && a \leq b \land b \leq c \implies a \leq c \\ \end{alignat*} $$ ### Bounding $$ \begin{alignat*}{3} &\text{bounded below} \quad\quad\quad && \exists b_l \forall a \kern-2pt : \kern6pt && b_l \leq a \\ &\text{bounded above} \quad\quad\quad && \exists b_u \forall a \kern-2pt : \kern6pt && a \leq b_u \\ \end{alignat*} $$ ## Lemmata With the above at our disposal, we can prove general, reusable facts. ### Equivalence $$ \begin{alignat*}{3} &\text{symmetry} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a = b \iff b = a \\ &\text{transitivity} \quad\quad\quad && \forall a, b, c \kern-2pt : \kern6pt && a = b \land b = c \implies a = c \\ \end{alignat*} $$ ### Minimum $$ \begin{alignat*}{3} &\text{deflationary} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && \mathrm{min} \kern3pt a \kern3pt b \leq a, b \\ &\text{monotonicity} \quad\quad\quad && \forall a, b, c, d \kern-2pt : \kern6pt && a \leq c \land b \leq d \implies \mathrm{min} \kern3pt a \kern3pt b \leq \mathrm{min} \kern3pt c \kern3pt d \\ \end{alignat*} $$ ### Maximum $$ \begin{alignat*}{3} &\text{inflationary} \quad\quad\quad && \forall a, b \kern-2pt : \kern6pt && a, b \leq \mathrm{max} \kern3pt a \kern3pt b \\ &\text{monotonicity} \quad\quad\quad && \forall a, b, c, d \kern-2pt : \kern6pt && a \leq c \land b \leq d \implies \mathrm{max} \kern3pt a \kern3pt b \leq \mathrm{max} \kern3pt c \kern3pt d \\ \end{alignat*} $$