data Trichotomy : (a -> a -> Type) -> a -> a -> TypeTrichotomy formalises the fact that three relations are mutually
exclusive. A value of type `Trichotomy lt m n` proofs, that
exactly one of the relations `lt m n`, `m === n`, or `lt n m` holds.
All proofs held by a value of type `Trichotomous` are erased, so
at runtime such values get optimized to numbers 0, 1, or 2
respectively.
LT : (0 _ : lt v w) -> (0 _ : Not (v = w)) -> (0 _ : Not (lt w v)) -> Trichotomy lt v wEQ : (0 _ : Not (lt v w)) -> (0 _ : v = w) -> (0 _ : Not (lt w v)) -> Trichotomy lt v wGT : (0 _ : Not (lt v w)) -> (0 _ : Not (v = w)) -> (0 _ : lt w v) -> Trichotomy lt v wEq (Trichotomy lt m n)Ord (Trichotomy lt m n)Show (Trichotomy lt m n)conIndex : Trichotomy lt m n -> Bits8toOrdering : Trichotomy lt m n -> Orderingswap : Trichotomy lt m n -> Trichotomy lt n minterface Trichotomous : (a : Type) -> (a -> a -> Type) -> Typetrichotomy : (m : a) -> (n : a) -> Trichotomy rel m nStrict a rel -> Trichotomous a reltrichotomy : Trichotomous a rel => (m : a) -> (n : a) -> Trichotomy rel m ninterface Strict : (a : Type) -> (a -> a -> Type) -> Type0 irreflexive : Trichotomous a rel => rel x x -> Void0 Not_LT_and_GT : Trichotomous a lt => lt m n -> Not (lt n m)`m < n` implies `Not (m > n)`.
0 Not_LT_and_EQ : Trichotomous a lt => lt m n -> Not (m = n)`m < n` implies `Not (m === n)`.
0 Not_LT_and_GTE : Trichotomous a lt => lt m n -> Not (ReflexiveClosure lt n m)`m < n` implies `Not (m >= n)`.