Fact nat_sorted_injective ll : nat_sorted ll -> list_injective ll.Fact nat_list_insert_length x l : length (nat_list_insert x l) <= S (length l).Fact nat_list_insert_incl x l : incl (nat_list_insert x l) (x::l)
                             /\ incl (x::l) (nat_list_insert x l).Fact nat_list_insert_Forall (P : nat -> Prop) x l : 
      P x -> Forall P l -> Forall P (nat_list_insert x l).Fact nat_list_insert_sorted x l : nat_sorted l -> nat_sorted (nat_list_insert x l).Definition nat_sort := fold_right (nat_list_insert) nil.Fact nat_sort_length l : length (nat_sort l) <= length l.Fact nat_sort_eq l : incl (nat_sort l) l /\ incl l (nat_sort l).Fact nat_sort_sorted l : nat_sorted (nat_sort l).Fact nat_sinc (f : nat -> nat) a b : 
      (forall x, a <= x < b -> f x < f (S x)) 
   -> (forall x y, a <= x < y /\ y <= b -> f x < f y).Fact nat_sinc_inj f a b : 
      (forall x y,  a <= x < y /\ y <= b -> f x < f y) 
   -> (forall x y,  a <= x <= b -> a <= y <= b -> f x = f y -> x = y).

(* Specifications: *)
Theorem nat_rev_ind (P : nat -> Prop) (HP : forall n, P (S n) -> P n) x y : x <= y -> P y -> P x.