Idris2Doc : Data.Prim.Ord

Data.Prim.Ord

(source)
Axioms and propsitions for primitive types with an
`Ord` implementation.

Reexports

importpublic Data.Trichotomy

Definitions

dataEither0 : Type->Type->Type
  Similar to `Either` but with erased fields.

Totality: total
Visibility: public export
Constructors:
Left0 : (0_ : a) ->Either0ab
Right0 : (0_ : b) ->Either0ab
strictRefl : (0_ : a=b) -> Lazy c->c
  We often don't trust values of type `a === b`, as they might
have been magically crafted using `believe_me` or `assert_total`
followed by `idris_crash`. If a value of another type follows
from a (potentially) magically crafted one, we only want the
second value to reduce at compile time, if the first value
reduces to `Refl`. Otherwise, we risk blowing up the compiler
in an absurd context.

Totality: total
Visibility: export
interfaceTotal : (a : Type) -> (a->a->Type) ->Type
  This interface is a witness that the given primitive type
comes with a relation `lt`, with `lt` being a strict total order.
We typically define the following aliases
(or name the relation accordingly):

`m < n` := lt m n
`m > n` := lt n m
`m <= n` := Either (lt m n) (m === n)
`m >= n` := Either (lt n m) (n === m)
`m /= n` := Either (lt m n) (lt n m)

The following axioms must hold:
1. (<) is transitive: From `k < m` and `m < n` follows `k < n`.

2. Trichotomy: For all values `m` and `n` exactly one of the
following holds: `m < n`, `m === n`, or `n < m`.

It is in the nature of a primitive that we can't proof these axioms
in Idris itself. We must therefore assume that they hold on all backends,
and it is the responsibility of programmers implementing
interface `Total` to make sure that the axioms actually hold.

Parameters: a, lt
Methods:
0transLT : ltkm->ltmn->ltkn
  Axiom I: `<` is transitive.
trichotomy : (m : a) -> (n : a) ->Trichotomyltmn
  Axiom II: Trichotomy of `<`, `===`, and `>`.

Implementations:
TotalInteger(<)
TotalInt(<)
TotalChar(<)
TotalBits8(<)
TotalBits16(<)
TotalBits32(<)
TotalBits64(<)
TotalInt8(<)
TotalInt16(<)
TotalInt32(<)
TotalInt64(<)
TotalString(<)
Totalalt=>Total (Maybea) (LTlt)
Totalalt=>Total (Maybea) (LTlt)
0transLT : Totalalt=>ltkm->ltmn->ltkn
  Axiom I: `<` is transitive.

Totality: total
Visibility: public export
trichotomy : Totalalt=> (m : a) -> (n : a) ->Trichotomyltmn
  Axiom II: Trichotomy of `<`, `===`, and `>`.

Totality: total
Visibility: public export
testLT : Totalalt=> (x : a) -> (y : a) ->Either0 (ltxy) (Either (ltyx) (y=x))
  Tests if the first value is strictly less than the second or not

Totality: total
Visibility: export
testGT : Totalalt=> (x : a) -> (y : a) ->Either0 (ltyx) (Either (ltxy) (x=y))
  Tests if the first value is strictly greater than the second or not

Totality: total
Visibility: export
testEQ : Totalalt=> (x : a) -> (y : a) ->Either0 (x=y) (Either (ltxy) (ltyx))
  Tests if the two values are provably equal or not

Totality: total
Visibility: export
0irrefl : Totalalt=>Not (ltmm)
  `<` is irreflexive.

Totality: total
Visibility: export
0trans : Totalalt=>ltkm->ltmn->ltkn
  This is an alias for `transLT`

Totality: total
Visibility: export
0trans_EQ_NEQ : Totalalt=>k=m->Either (ltmn) (ltnm) ->Either (ltkn) (ltnk)
  `k === m` and `m /= n` implies `k /= n`.

Totality: total
Visibility: export
0trans_NEQ_EQ : Totalalt=>Either (ltkm) (ltmk) ->m=n->Either (ltkn) (ltnk)
  `k === m` and `m /= n` implies `k /= n`.

Totality: total
Visibility: export
0trans_LT_EQ : Totalalt=>ltkm->m=n->ltkn
  `k < m` and `m === n` implies `k < n`

Totality: total
Visibility: export
0trans_EQ_LT : Totalalt=>k=m->ltmn->ltkn
  `k === m` and `m < n` implies `k < n`

Totality: total
Visibility: export
0trans_LTE_LT : Totalalt=>Either (ltkm) (k=m) ->ltmn->ltkn
  `k <= m` and `m < n` implies `k < n`

Totality: total
Visibility: export
0trans_LT_LTE : Totalalt=>ltkm->Either (ltmn) (m=n) ->ltkn
  `k < m` and `m <= n` implies `k < n`

Totality: total
Visibility: export
0trans_GT_EQ : Totalalt=>ltmk->m=n->ltnk
  `k > m` and `m === n` implies `k > n`

Totality: total
Visibility: export
0trans_EQ_GT : Totalalt=>k=m->ltnm->ltnk
  `k === m` and `m > n` implies `k > n`

Totality: total
Visibility: export
0trans_GTE_GT : Totalalt=>Either (ltmk) (m=k) ->ltnm->ltnk
  `k >= m` and `m > n` implies `k > n`

Totality: total
Visibility: export
0trans_GT_GTE : Totalalt=>ltmk->Either (ltnm) (n=m) ->ltnk
  `k > m` and `m >= n` implies `k > n`

Totality: total
Visibility: export
0refl : Totalalt=>Either (ltmm) (m=m)
  `<=` is reflexive.

Totality: total
Visibility: export
0trans : Totalalt=>Either (ltkm) (k=m) ->Either (ltmn) (m=n) ->Either (ltkn) (k=n)
  `<=` is transitive.

Totality: total
Visibility: export
0antisym : Totalalt=>Either (ltmn) (m=n) ->Either (ltnm) (m=n) ->m=n
  `<=` is antisymmetric.

Totality: total
Visibility: export
0trans_LTE_EQ : Totalalt=>Either (ltkm) (k=m) ->m=n->Either (ltkn) (k=n)
  `k <= m` and `m === n` implies `k <= n`

Totality: total
Visibility: export
0trans_EQ_LTE : Totalalt=>k=m->Either (ltmn) (m=n) ->Either (ltkn) (k=n)
  `k === m` and `m <= n` implies `(k <= n)`

Totality: total
Visibility: export
0trans : Totalalt=>Either (ltmk) (m=k) ->Either (ltnm) (n=m) ->Either (ltnk) (n=k)
  `>=` is transitive.

Totality: total
Visibility: export
0antisym : Totalalt=>Either (ltnm) (m=n) ->Either (ltmn) (m=n) ->m=n
  `>=` is antisymmetric.

Totality: total
Visibility: export
0trans_GTE_EQ : Totalalt=>Either (ltmk) (m=k) ->m=n->Either (ltnk) (n=k)
  `k >= m` and `m === n` implies `k >= n`

Totality: total
Visibility: export
0trans_EQ_GTE : Totalalt=>k=m->Either (ltnm) (n=m) ->Either (ltnk) (n=k)
  `k === m` and `m <= n` implies `(k <= n)`

Totality: total
Visibility: export
0LT_not_GT : Totalalt=>ltmn->Not (ltnm)
  `m < n` implies `Not (m > n)`.

Totality: total
Visibility: export
0LT_not_EQ : Totalalt=>ltmn->Not (m=n)
  `m < n` implies `Not (m === n)`.

Totality: total
Visibility: export
0LT_not_GTE : Totalalt=>ltmn->Not (Either (ltnm) (n=m))
  `m < n` implies `Not (m >= n)`.

Totality: total
Visibility: export
0Not_LT_to_GTE : Totalalt=>Not (ltmn) ->Either (ltnm) (n=m)
  `Not (m < n)` implies `m >= n`.

Totality: total
Visibility: export
0EQ_not_LT : Totalalt=>m=n->Not (ltmn)
  `m === n` implies `Not (m < n)`.

Totality: total
Visibility: export
0EQ_not_GT : Totalalt=>m=n->Not (ltnm)
  `m === n` implies `Not (m > n)`.

Totality: total
Visibility: export
0EQ_not_NEQ : Totalalt=>m=n->Not (Either (ltmn) (ltnm))
  `m === n` implies `Not (m /= n)`.

Totality: total
Visibility: export
0Not_EQ_to_NEQ : Totalalt=>Not (m=n) ->Either (ltmn) (ltnm)
  `Not (m < n)` implies `m /= n`.

Totality: total
Visibility: export
0GT_not_LT : Totalalt=>ltnm->Not (ltmn)
  `m > n` implies `Not (m < n)`.

Totality: total
Visibility: export
0GT_not_EQ : Totalalt=>ltnm->Not (m=n)
  `m > n` implies `Not (m === n)`.

Totality: total
Visibility: export
0GT_not_LTE : Totalalt=>ltnm->Not (Either (ltmn) (m=n))
  `m > n` implies `Not (m <= n)`.

Totality: total
Visibility: export
0Not_GT_to_LTE : Totalalt=>Not (ltnm) ->Either (ltmn) (m=n)
  `Not (m > n)` implies `m <= n`.

Totality: total
Visibility: export
0LTE_not_GT : Totalalt=>Either (ltmn) (m=n) ->Not (ltnm)
  `m <= n` implies `Not (m > n)`.

Totality: total
Visibility: export
0Not_LTE_to_GT : Totalalt=>Not (Either (ltmn) (m=n)) ->ltnm
  `Not (m <= n)` implies `m > n`.

Totality: total
Visibility: export
0LTE_and_GTE_to_EQ : Totalalt=>Either (ltmn) (m=n) ->Either (ltnm) (n=m) ->m=n
  `m <= n` and `m >= n` implies `m === n`.

Totality: total
Visibility: export
0LTE_and_NEQ_to_LT : Totalalt=>Either (ltmn) (m=n) ->Either (ltmn) (ltnm) ->ltmn
  `m <= n` and `m /= n` implies `m < n`.

Totality: total
Visibility: export
0NEQ_not_EQ : Totalalt=>Either (ltmn) (ltnm) ->Not (m=n)
  `m /= n` implies `Not (m === n)`.

Totality: total
Visibility: export
0Not_NEQ_to_EQ : Totalalt=>Not (Either (ltmn) (ltnm)) ->m=n
  `Not (m /= n)` implies `m === n`.

Totality: total
Visibility: export
0NEQ_and_LTE_to_LT : Totalalt=>Either (ltmn) (ltnm) ->Either (ltmn) (m=n) ->ltmn
  `m /= n` and `m <= n` implies `m < n`.

Totality: total
Visibility: export
0NEQ_and_GTE_to_GT : Totalalt=>Either (ltmn) (ltnm) ->Either (ltnm) (n=m) ->ltnm
  `m /= n` and `m <= n` implies `m < n`.

Totality: total
Visibility: export
0GTE_not_LT : Totalalt=>Either (ltnm) (n=m) ->Not (ltmn)
  `m >= n` implies `Not (m < n)`.

Totality: total
Visibility: export
0Not_GTE_to_LT : Totalalt=>Not (Either (ltnm) (n=m)) ->ltmn
  `Not (m >= n)` implies `m < n`.

Totality: total
Visibility: export
0GTE_and_LTE_to_EQ : Totalalt=>Either (ltnm) (n=m) ->Either (ltmn) (m=n) ->m=n
  `m >= n` and `m <= n` implies `m === n`.

Totality: total
Visibility: export
0GTE_and_NEQ_to_GT : Totalalt=>Either (ltnm) (n=m) ->Either (ltmn) (ltnm) ->ltnm
  `m >= n` and `m /= n` implies `m > n`.

Totality: total
Visibility: export