Inductive non_reduced: group_str -> Prop :=
  | intro_letter_inverse: forall (S T: group_str) (a: alphabet),
    non_reduced (S ++ (opposite a) :: a :: T).Inductive non_reduced: group_str -> Prop :=
  | intro_letter_inverse: forall (S T: group_str) (a: alphabet),
    non_reduced (S ++ (opposite a) :: a :: T).Definition reduced (S: group_str) : Prop :=
  not (non_reduced S).

(* Specifications: *)
Lemma empty_str_reduced: reduced (@nil alphabet).
Lemma single_letter_reduced: forall a:alphabet, reduced (a :: nil).
Lemma cons_to_nonreduced_gives_nonreduced: forall (S:group_str) (a:alphabet), non_reduced S -> non_reduced (a :: S).
Lemma split_non_reduced: forall (S: group_str) (a b:alphabet), non_reduced (a :: b :: S) -> non_reduced (b :: S) \/ a = opposite b.