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.