(* == Tri par insertion *)
Fixpoint ins (n : nat) (l : list nat) {struct l} :
list nat :=
match l with
| Nil => Cons nat n (Nil nat)
| Cons m x =>
si (list nat) (inf_egal n m) (Cons nat n (Cons nat m x))
(Cons nat m (ins n x))
end.

(* Specifications: *)
Lemma ins_eq1 : forall n : nat, ins n (Nil nat) = Cons nat n (Nil nat).
Lemma ins_eq2 :
forall (n m : nat) (x : list nat),
ins n (Cons nat m x) =
si (list nat) (inf_egal n m) (Cons nat n (Cons nat m x))
(Cons nat m (ins n x)).