This PR implements `NatModule` normalization when the `AddRightCancel`
instance is not available. Note that in this case, the embedding into
`IntModule` is not injective. Therefore, we use a custom normalizer,
similar to the `CommSemiring` normalizer used in the `grind ring`
module. Example:
```lean
open Lean Grind
example [NatModule α] (a b c : α)
: 2•a + 2•(b + 2•c) + 3•a = 4•a + c + 2•b + 3•c + a := by
grind
```
|
||
|---|---|---|
| .. | ||
| exponents.lean | ||
| linarith_field.lean | ||
| nat_mod.lean | ||
| nat_semiring.lean | ||
| nlinarith.lean | ||
| products.lean | ||
| ring_normalization.lean | ||