Definition reduced_string_product (S1 S2:group_str) : group_str :=
  reduction (S1 ++ S2).

(* Specifications: *)
Lemma reduced_string_product_equiv_to_concat: forall S1 S2:group_str, (reduced_string_product S1 S2) ~~ (S1 ++ S2).
Theorem reduced_string_product_assoc: forall (S1 S2 S3:group_str), reduced_string_product (reduced_string_product S1 S2) S3 = reduced_string_product S1 (reduced_string_product S2 S3).
Lemma empty_str_is_left_id: forall S: group_str, reduced S -> reduced_string_product nil S = S.
Lemma empty_str_is_right_id: forall S:group_str, reduced S -> reduced_string_product S nil = S.