(* == Tri bubble *)

Fixpoint bubble_aux (x : list nat) : nat -> list nat :=
  fun n : nat =>
  match x with
  | Nil => Cons nat n (Nil nat)
  | Cons n0 l =>
      si (list nat) (inf_egal n n0) (Cons nat n (bubble_aux l n0))
        (Cons nat n0 (bubble_aux l n))
  end.Definition bubble (x : list nat) : list nat :=
  match x with
  | Nil => Nil nat
  | Cons n l => bubble_aux l n
  end.

Lemma bubble_eq1 : bubble (Nil nat) = Nil nat.