feat(Algebra.GroupWithZero): generalize SMulZeroClass to MonoidWithZero and lift MulDistribMulAction to nonZeroDivisors#40604
Conversation
…tance from GroupWithZero to MonoidWithZero The existing instance `SMulZeroClass α β` under `[Group α] [GroupWithZero β] [MulDistribMulAction α β]` is generalized: `GroupWithZero β` is weakened to `MonoidWithZero β`. The proof that `g • 0 = 0` uses only `smul_mul'`, `smul_inv_smul` (group invertibility of `α`), `zero_mul`, and `mul_zero`, so it does not require the invertibility of nonzero elements of `β`.
PR summary 61072572b3Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
✅ PR Title Formatted CorrectlyThe title of this PR has been updated to match our commit style conventions. |
…ds zero to zero; lift to nonZeroDivisors - Generalize the `SMulZeroClass α β` instance in `GroupWithZero.Action.Defs` from `[GroupWithZero β]` to `[MonoidWithZero β]`: the proof uses only `smul_mul'`, `smul_inv_smul`, and `mul_zero`, with no need for invertibility in `β`. - Add `smul_mem_nonZeroDivisorsLeft/Right`, `smul_mem_nonZeroDivisors`, and instances `SMul G M₀⁰`, `MulAction G M₀⁰`, `MulDistribMulAction G M₀⁰` in `NonZeroDivisors`.
…lAction-smul-zero
…lAction-smul-zero
The generalized `MulDistribMulAction.instSMulZeroClass` now provides `smul_zero` for `(ConjAct Rˣ) R`, so `units_smul_def` is no longer needed there.
|
!radar |
|
Benchmark results for 6107257 against e780b56 are in. No significant results found. @themathqueen
Medium changes (1🟥)
Small changes (1🟥)
|
Generalize the instance
SMulZeroClass α βunder[Group α] [GroupWithZero β] [MulDistribMulAction α β]to[Group α] [MonoidWithZero β] [MulDistribMulAction α β].From an action
[Group G] [MonoidWithZero M] [MulDistribMulAction G M], use this instance to construct an action on the nonzero divisors of 'M'.No diamond: there is no general instance giving an action on a submonoid as a target (that would need the submonoid to be invariant, which isn't automatic), so defining the action on
nonZeroDivisorsshould not clash with anything .🤖 This PR was extracted from the SKW project by Claude.