(* == 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)).