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.