Commit 2022-06-26 12:02 32b08ef8
View on Github →feat: add_monoid_with_one
, add_group_with_one
(#12182)
Adds two type classes add_monoid_with_one R
and add_group_with_one R
with operations for ℕ → R
and ℤ → R
, resp. The type classes extend add_monoid
and add_group
because those seem to be the weakest type classes where such a +₀₁
-homomorphism is guaranteed to exist. The nat.cast
function as well as coe : ℕ → R
are implemented in terms of add_monoid_with_one R
, removing the infamous nat.cast
diamond. Fixes #946.
Some lemmas are less general now because the algebraic hierarchy is not fine-grained enough, or because the lawful coercion only exists for monoids and above. This generality was not used in mathlib as far as I could tell. For example:
char_p.char_p_to_char_zero
now requires a group instead of a left-cancellative monoid, because we don't have theadd_left_cancel_monoid_with_one
classnat.norm_cast_le
now requires a seminormed ring instead of a seminormed group, because we don't havesemi_normed_group_with_one