Proof
fun x y z H H0
=> ex_ind
(fun u H1
=> op_intro_l (z + x) (z + y) u H0
|| a = u + (z + y) @a by <- op_is_assoc u z x
|| (u + z) + x = a @a by <- op_is_assoc u z y
|| a + x = a + y   @a by <- H1
|| a = 0 + y       @a by <- op_id_l x
|| x = a           @a by <- op_id_l y)
H.

(* Specifications: *)
(** Proves the right cancellation law for elements possessing a right inverse. *)
Theorem op_cancel_r
:  forall x y z : M, has_inv_r z -> x + z = y + z -> x = y.