Corollary join_reduced: forall (S:group_str) (a b:alphabet),
  reduced (b :: S) -> a <> opposite b ->
  reduced (a :: b :: S).Definition alphabet_eq_dec: forall a b:alphabet,
  {a=b} + {a<>b}.(* define the left action of each letter on the set of reduced
   words *)
Definition letter_action (a:alphabet) (S:group_str) : group_str :=
  match S with
    | nil => a :: nil
    | b :: S0 => (if alphabet_eq_dec a (opposite b) then S0
                  else a :: b :: S0)
  end.

(* Specifications: *)
Lemma reduced_closed_under_letter_action: forall (a:alphabet) (S:group_str), reduced S -> reduced (letter_action a S).
Lemma opposites_give_inverse_actions: forall (S:group_str) (a:alphabet), reduced S -> letter_action (opposite a) (letter_action a S) = S.