(* A code is an association list *)
Definition code := list (A * list bool).(* 
  Predicate that tells that a message (a list of message) is in the
  alphabet of the code
*)
Definition in_alphabet (m : list A) (c : code) :=
  forall a : A, In a m -> exists l : list bool, In (a, l) c.

(* Specifications: *)
Theorem in_alphabet_incl : forall m1 m2 c, incl m1 m2 -> in_alphabet m2 c -> in_alphabet m1 c.
Theorem in_alphabet_nil : forall c, in_alphabet nil c.
Theorem in_alphabet_cons : forall (m : list A) c a ca, In (a, ca) c -> in_alphabet m c -> in_alphabet (a :: m) c.
Theorem in_alphabet_inv : forall (c : code) (a : A) (l : list A), in_alphabet (a :: l) c -> in_alphabet l c.