(* Compute the number of occurrences of an element in a message *)
Fixpoint number_of_occurrences (a : A) (l : list A) {struct l} : nat :=
  match l with
  | nil => 0
  | b :: l1 =>
      match eqA_dec a b with
      | left _ => S (number_of_occurrences a l1)
      | right _ => number_of_occurrences a l1
      end
  end.

Theorem number_of_occurrences_app : forall l1 l2 a, number_of_occurrences a (l1 ++ l2) = number_of_occurrences a l1 + number_of_occurrences a l2.