feat(RingTheory/LaurentSeries): leibniz product rule for derivative#40225
feat(RingTheory/LaurentSeries): leibniz product rule for derivative#40225localparty wants to merge 2 commits into
Conversation
Add `derivative_mul` — the Leibniz product rule for the first formal derivative on `LaurentSeries R` over a commutative ring R. Sits alongside the existing `derivative_apply` / `derivative_iterate` / `derivative_iterate_coeff` family in `section HasseDeriv`. Proof is direct on coefficients via `HahnSeries.coeff_mul` + `addAntidiagonal` shift-bijection (5 private helpers + 1 public theorem; ~85 LOC).
Welcome new contributor!Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests. We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR. Thank you again for joining our community. |
PR summary 501b2af9edImport 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. |
…hasseDeriv_one_mul corollary simpNF linter caught `derivative_mul`'s LHS `derivative R (f * g)` simplifies via `derivative_apply` (@[simp]) to `hasseDeriv R 1 (f * g)`, so the lemma's LHS is not in simp-normal form. Drop @[simp] from `derivative_mul` (preserve as the API-aligned theorem) and add `hasseDeriv_one_mul` as the @[simp] corollary in simp-normal `hasseDeriv R 1` form, derived from `derivative_mul` via the defeq `derivative R = hasseDeriv R 1`.
|
Hello from triage! Can you comment on whether you used AI for this project? Thanks! |
|
Hello! Yes — full disclosure: this PR was authored by an AI agent (Claude / Anthropic) operating as Substantive context:
Happy to follow any specific Mathlib disclosure or policy requirements for AI-authored PRs. Thanks for the triage check! |
This PR adds the Leibniz product rule (
(f * g)' = f' * g + f * g') for thefirst formal derivative on
LaurentSeries R(R a commutative ring).The first derivative is already packaged in
Mathlib/RingTheory/LaurentSeries.leanaswith a
derivative_*family of theorems (derivative_apply,derivative_iterate,derivative_iterate_coeff). The Leibniz product rulewas missing. This PR fills that gap, adding
derivative_mulalongside theexisting
derivative_*family.The proof is direct on coefficients via
HahnSeries.coeff_muland anaddAntidiagonalshift-bijection (matching the style of the existinghasseDeriv_*lemmas). Five private helper lemmas factor thecoefficient-side calculation:
derivative_coeff— clean coefficient formula at k = 1support_derivative_subset—(derivative R f).support ⊆ (· - 1) '' f.supportisPWO_shifted_support— PWO preserved by the shift-by-(-1)sum_bij_left/sum_bij_right—Finset.sum_nbij'shift-reindexingsTotal addition: ~85 LOC (5 private helpers + the public
derivative_mul).Related future work
Full
Derivationpackaging forLaurentSeries.hasseDeriv(matchingPowerSeries.derivative-as-DerivationatMathlib/RingTheory/PowerSeries/Derivative.lean:102) is a natural follow-up,since this Leibniz rule would discharge the
leibniz'field. Out of scopefor this PR; can be a separate follow-up "LaurentSeries algebra-of-derivations
API" PR.
Provenance
This lemma surfaced during work on a Lean 4 formalization of equisingular
flat connections (Connes–Marcolli 2008, Ch IV §6.4), where
LaurentSeries ℂserves as the base ring for the ℂ((t))-module connection-matrix substrate.
The Leibniz rule is needed for the category-of-connection-preserving-maps
intertwining condition.