(* 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_permutation : forall l1 l2 a, permutation l1 l2 -> number_of_occurrences a l1 = number_of_occurrences a l2.