unfold left_cancellable;
intros;
rewrite < (e_is_left_unit ? ? (monoid_properties G));
-fold simplify (e G);
rewrite < (e_is_left_unit ? ? (monoid_properties G) z);
-fold simplify (e G);
rewrite < (opp_is_left_inverse ? ? (group_properties G) x);
-fold simplify (opp G);
rewrite > (semigroup_properties G);
-fold simplify (op G);
rewrite > (semigroup_properties G);
-fold simplify (op G);
apply eq_f;
assumption.
qed.