Fixpoint inverse_str (S:group_str) : group_str :=
  match S with
  | nil => nil
  | a :: S0 => (inverse_str S0) ++ (opposite a) :: nil
  end.

(* Specifications: *)
Lemma inverse_str_reverses_concat: forall (S T:group_str), inverse_str (S ++ T) = (inverse_str T) ++ (inverse_str S).
Lemma inverse_str_involution: forall (S:group_str), inverse_str (inverse_str S) = S.
Lemma inverse_str_is_left_inverse: forall (S:group_str), reduced_string_product (inverse_str S) S = nil.
Lemma inverse_str_is_right_inverse: forall (S:group_str), reduced_string_product S (inverse_str S) = nil.