(** Tle is decidable. This is crutial in conversion from le to Tle. *)
(** This is prety straightforward. *)
Definition Tle_le {n m : nat} : n ≤ m → le n m.
(** The contrapositive of conversion from le to Tle. *)
Definition NTle_Nle {n m : nat} : (n ≤ m → False) → (le n m → False).
(** This is the actual conversion from le to Tle.  Here, the trick is that we use decidability of Tle. In case the relation holds, we have the proof. In case it does not, we can refute the le relation.  Hence, this conversion is (as expected) does not preform an explicit elimination of le (as it is impossible) and hence is not computationally simplifiable. *)
Definition le_Tle {n m : nat} : le n m → n ≤ m.

(* Specifications: *)
(** We show that (homotopy-type-theoretically speaking) Tle is a mere proposition. That is, any two proofs of a ≤ b are equal. Note that Tle is in Type and not in Pop and hence we can't use proof-irrelevance.  This is a proof in a hurry, and can perhaps be simplified later. *)
Theorem Tle_is_HProp {n m : nat} (H H' : Tle n m) : H = H'.
Definition OmegaPreOrder :=
{|
PreOrder_car := nat : Type;
PreOrder_rel := Tle : _ → _ → Type;
PreOrder_rel_isProp :=
fun _ _ h h' => Tle_is_HProp h h';
PreOrder_refl := Tle_n;
PreOrder_trans := Tle_trans
|}.