Fixpoint nocc (n : nat) (l : list nat) {struct l} : nat :=
  match l with
  | Nil => 0
  | Cons m x => si nat (egal_nat n m) (S (nocc n x)) (nocc n x)
  end.

Theorem si_intro : forall (X : Set) (P : X -> Prop) (x y : X) (b : bool), (b = true :>bool -> P x) -> (b = false :>bool -> P y) -> P (si X b x y).