Local Lemma wmultZ_helper: forall a b k1 k2 p,
((a - k1 * p) * (b - k2 * p) = a * b - (k1 * b + k2 * a - k1 * k2 * p) * p)%Z.

Lemma word_ring_morph_Z: forall (sz: nat),
ring_morph (ZToWord sz 0) (ZToWord sz 1) (@wplus sz) (@wmult sz) (@wminus sz) (@wneg sz)
eq 0%Z 1%Z Z.add Z.mul Z.sub Z.opp Z.eqb
(ZToWord sz).