[Merged by Bors] - feat(Algebra/Category): ConcreteCategory instance for ModuleCat#21125
[Merged by Bors] - feat(Algebra/Category): ConcreteCategory instance for ModuleCat#21125Vierkantor wants to merge 5 commits intomasterfrom
ConcreteCategory instance for ModuleCat#21125Conversation
This is a step towards a concrete category redesign, as outlined in this Zulip post: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Concrete.20category.20class.20redesign/near/493903980 This PR adds a `ConcreteCategory` instance for `ModuleCat`. It also replaces the `Hom.hom` structure projection with an alias for `ConcreteCategory.hom`. Sadly `ModuleCat.restrictScalars` and `PresheafOfModules` do not appreciate subtle changes in elaboration/defeq, and quite a few declarations need subtle fixes. Maybe a more structural fix exists? I have not tried to look for code that can be cleaned up now, only at what broke. I want to get started on cleanup when the other concrete category instances are in.
PR summary 560ea7a8eaImport changes for modified filesNo significant changes to the import graph Import changes for all files
|
| Current number | Change | Type |
|---|---|---|
| 1416 | 1 | erw |
| 12 | 1 | maxHeartBeats modifications |
Current commit 560ea7a8ea
Reference commit 12422efb2d
You can run this locally as
./scripts/technical-debt-metrics.sh pr_summary
- The
relativevalue is the weighted sum of the differences with weight given by the inverse of the current value of the statistic. - The
absolutevalue is therelativevalue divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).
| dsimp [tensorObjMap] | ||
| simp) | ||
| simp | ||
| rfl) -- `ModuleCat.restrictScalarsId'App_inv_apply` doesn't get picked up due to type mismatch |
There was a problem hiding this comment.
This file definitely gets worse off. Haven't figured out a way to make simp use ModuleCat.restrictScalarsId'App_inv_apply: replacing rfl with erw [ModuleCat.restrictScalarsId'App_inv_apply, ModuleCat.restrictScalarsId'App_inv_apply] also solves the goal.
| dsimp [map] | ||
| rw [tensorObj_map_tmul] | ||
| -- Need `erw` because of the type mismatch in `map` and the tensor product. | ||
| erw [ModuleCat.MonoidalCategory.tensorHom_tmul, tensorObj_map_tmul] |
There was a problem hiding this comment.
Similar story here: there's a type mismatch and we need erw to deal with it.
|
|
||
| variable (F : C ⥤ D) | ||
|
|
||
| set_option maxHeartbeats 400000 in -- Seems to be a timeout in type checking the definition |
There was a problem hiding this comment.
On my machine, type checking the definition costs 2,5 seconds, about a third of total elaboration time. I haven't been able to trace where all the extra time goes...
| obtain ⟨j', i, h⟩ := Concrete.colimit_rep_eq_zero (hx := hx) | ||
| obtain ⟨j'', H⟩ := H | ||
| simpa [elementwise_of% (colimit.w F), this, map_zero] using congr(colimit.ι F _ | ||
| simpa [elementwise_of% (colimit.w F), ← this, map_zero] using congr(colimit.ι F _ |
There was a problem hiding this comment.
Flipping the direction of this rewrite actually means getting rid of a few HasForget.instFunLikes!
|
!bench |
|
I'm not sure, since those only provide instances, and don't change general lemmas from |
|
But I'll try merging once both are in |
|
Here are the benchmark results for commit b81670f. Benchmark Metric Change
================================================================================
+ ~Mathlib.Algebra.Category.ModuleCat.Biproducts instructions -41.4%
- ~Mathlib.Algebra.Category.ModuleCat.ChangeOfRings instructions 4.2%
+ ~Mathlib.Algebra.Category.ModuleCat.Kernels instructions -48.7%
- ~Mathlib.Algebra.Category.ModuleCat.Monoidal.Closed instructions 27.3%
- ~Mathlib.Algebra.Category.ModuleCat.Presheaf instructions 18.7%
- ~Mathlib.Algebra.Category.ModuleCat.Presheaf.Pushforward instructions 9.5%
+ ~Mathlib.Algebra.Category.ModuleCat.Products instructions -51.1%
+ ~Mathlib.Algebra.Homology.ShortComplex.ModuleCat instructions -32.0%
+ ~Mathlib.AlgebraicGeometry.Modules.Tilde instructions -9.8% |
2 files, Instructions +5.0⬝10⁹
4 files, Instructions +3.0⬝10⁹
4 files, Instructions +2.0⬝10⁹
7 files, Instructions +1.0⬝10⁹
|
|
!bench |
My script found one `erw` call that could become a `rw`. (This can remain `rw` on #21125 too.)
My script found one `erw` call that could become a `rw`. (This can remain `rw` on #21125 too.)
|
Here are the benchmark results for commit 560ea7a. Benchmark Metric Change
================================================================================
+ ~Mathlib.Algebra.Category.ModuleCat.Biproducts instructions -41.2%
- ~Mathlib.Algebra.Category.ModuleCat.ChangeOfRings instructions 4.3%
+ ~Mathlib.Algebra.Category.ModuleCat.Kernels instructions -48.7%
- ~Mathlib.Algebra.Category.ModuleCat.Monoidal.Closed instructions 27.2%
- ~Mathlib.Algebra.Category.ModuleCat.Presheaf.Monoidal instructions 15.7%
- ~Mathlib.Algebra.Category.ModuleCat.Presheaf.Pushforward instructions 8.8%
+ ~Mathlib.Algebra.Category.ModuleCat.Products instructions -51.0%
+ ~Mathlib.Algebra.Homology.ShortComplex.ModuleCat instructions -32.0% |
2 files, Instructions +5.0⬝10⁹
4 files, Instructions +3.0⬝10⁹
4 files, Instructions +2.0⬝10⁹
7 files, Instructions +1.0⬝10⁹
|
|
bors merge |
…21125) This is a step towards a concrete category redesign, as outlined in this Zulip post: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Concrete.20category.20class.20redesign/near/493903980 This PR adds a `ConcreteCategory` instance for `ModuleCat`. It also replaces the `Hom.hom` structure projection with an alias for `ConcreteCategory.hom`. Sadly `ModuleCat.restrictScalars` and `PresheafOfModules` do not appreciate subtle changes in elaboration/defeq, and quite a few declarations need subtle fixes. Maybe a more structural fix exists? I have not tried to look for code that can be cleaned up now, only at what broke. I want to get started on cleanup when the other concrete category instances are in.
|
Pull request successfully merged into master. Build succeeded: |
ConcreteCategory instance for ModuleCatConcreteCategory instance for ModuleCat
* origin/master: (294 commits) feat: equalizers and coequalizers in the category of ind-objects (#21139) doc: turn more links to Stacks into `@[stacks]` tags (#21135) feat(Asymptotics): prove `IsLittleOTVS.add` (#20578) feat(Algebra/Polynomial): `Polynomial.aeval` for product algebras (#21062) chore: import Std in Mathlib.lean (#21126) feat(Data/Matroid/Circuit): fundamental circuits and extensionality (#21145) feat(CategoryTheory/Endofunctor): prove the dual form of Lambek's Lemma on terminal coalgebra (#21140) feat(SetTheory/Game/PGame): rewrite left moves of `-x` as right moves of `x` under binders (#21109) feat(RingTheory/Localization/Pi): localization of a finite direct product is a product of localizations (#19042) doc: fixed notation error in customizing category composition (#21132) feat(Matrix): more lemmas for `PEquiv.toMatrix` (#21143) chore(SupIndep): speedup the `Decidable` instance (#21114) fix(CI): use `Elab.async=false` for late importers workflow (#21147) feat(Topology/Algebra/Indicator): indicator of a clopen is continuous (#20687) feat(Data/Matroid/Rank/Cardinal): Cardinality-valued rank function (#20921) feat(Algebra): `Pi.single_induction` (#21141) chore(BigOperators/Fin): golf a proof (#21131) feat: generalize tangent cone lemmas to TVS (#20859) feat(CategoryTheory): `Comma.snd L R` is final if `R` is final and domains are filtered (#21136) refactor: unapply matrix lemmas (#21091) chore(Algebra/Category): `erw` -> `rw` (#21130) feat(CategoryTheory): filteredness of Comma catgories given finality of one of the functors (#21128) feat(Algebra/Category): `ConcreteCategory` instance for `ModuleCat` (#21125) feat: PSum of finite sorts is finite (#20285) feat: inequality on the integral of a convex function of a RN derivative (#21093) feat: `(v +ᵥ s) -ᵥ (v +ᵥ t) = s -ᵥ t` (#21058) chore: rename the fact that `(∀ a < a₁, a ≤ a₂) ↔ a₁ ≤ a₂` in a dense order (#20317) feat: a `RelHom` preserves directedness (#20080) feat(Combinatorics/SimpleGraph): add definitions and theorems about the coloring of sum graphs (#18677) chore(Data/Matrix/PEquiv): clean up names (#21108) feat(Algebra/Category): `ConcreteCategory` instances for rings (#20815) feat: define Descriptive.Tree (#18763) chore(Data/Complex/Exponential): split trig functions to new file (#21075) feat(Logic/IsEmpty/Relator): empty on sides (#20319) feat(Algebra/Category): `ConcreteCategory` instance for `AlgebraCat` (#21121) feat(NumberTheory/LSeries): results involving partial sums of coefficients (part 1) (#20661) feat(RingTheory/LaurentSeries): add algebraEquiv (#21004) chore(SetTheory/Game/Impartial): golf two proofs (#21074) feat(CategoryTheory/Subpresheaf): preimage/image/range of subpresheaves (#21047) feat(RingTheory/IntegralClosure): `Algebra.IsIntegral` transfers via surjective homomorphisms (#21023) feat(`InformationTheory/Hamming`): Add AddGroup instances (#20994) feat(RingTheory/IntegralClosure): prove `Module.Finite R (adjoin R S)` for finite set `S` of integral elements (#20970) feat(RingTheory/Artinian): `IsUnit a` iff `a ∈ R⁰` for an artinian ring `R` (#21084) feat: separating set in the category of ind-objects (#21082) feat: derivWithin lemmas (#21092) chore(Fintype): golf a proof (#21113) chore: golf using `funext₂` (#21106) chore(Algebra/Group/Submonoid/Operations): move instances to new file (#21067) doc(Algebra/BigOperators/Fin): change 'product' to 'sum' in doc-string of additivised declarations (#21101) doc(ComputeDegree): typos (#21095) ...
* polynomial-sequences: (308 commits) Use the lemma we already added. Minor reordering. This is true even for the trivial ring. Also add the lt versions and the other inj lemma. Also add the basis ne versions. This seems also like it should be simp. Back to sorry free. And the natDegree version. feat: equalizers and coequalizers in the category of ind-objects (#21139) doc: turn more links to Stacks into `@[stacks]` tags (#21135) feat(Asymptotics): prove `IsLittleOTVS.add` (#20578) feat(Algebra/Polynomial): `Polynomial.aeval` for product algebras (#21062) chore: import Std in Mathlib.lean (#21126) feat(Data/Matroid/Circuit): fundamental circuits and extensionality (#21145) feat(CategoryTheory/Endofunctor): prove the dual form of Lambek's Lemma on terminal coalgebra (#21140) feat(SetTheory/Game/PGame): rewrite left moves of `-x` as right moves of `x` under binders (#21109) feat(RingTheory/Localization/Pi): localization of a finite direct product is a product of localizations (#19042) doc: fixed notation error in customizing category composition (#21132) feat(Matrix): more lemmas for `PEquiv.toMatrix` (#21143) chore(SupIndep): speedup the `Decidable` instance (#21114) fix(CI): use `Elab.async=false` for late importers workflow (#21147) feat(Topology/Algebra/Indicator): indicator of a clopen is continuous (#20687) feat(Data/Matroid/Rank/Cardinal): Cardinality-valued rank function (#20921) feat(Algebra): `Pi.single_induction` (#21141) chore(BigOperators/Fin): golf a proof (#21131) feat: generalize tangent cone lemmas to TVS (#20859) feat(CategoryTheory): `Comma.snd L R` is final if `R` is final and domains are filtered (#21136) refactor: unapply matrix lemmas (#21091) chore(Algebra/Category): `erw` -> `rw` (#21130) feat(CategoryTheory): filteredness of Comma catgories given finality of one of the functors (#21128) feat(Algebra/Category): `ConcreteCategory` instance for `ModuleCat` (#21125) feat: PSum of finite sorts is finite (#20285) feat: inequality on the integral of a convex function of a RN derivative (#21093) feat: `(v +ᵥ s) -ᵥ (v +ᵥ t) = s -ᵥ t` (#21058) chore: rename the fact that `(∀ a < a₁, a ≤ a₂) ↔ a₁ ≤ a₂` in a dense order (#20317) feat: a `RelHom` preserves directedness (#20080) feat(Combinatorics/SimpleGraph): add definitions and theorems about the coloring of sum graphs (#18677) chore(Data/Matrix/PEquiv): clean up names (#21108) feat(Algebra/Category): `ConcreteCategory` instances for rings (#20815) feat: define Descriptive.Tree (#18763) chore(Data/Complex/Exponential): split trig functions to new file (#21075) feat(Logic/IsEmpty/Relator): empty on sides (#20319) feat(Algebra/Category): `ConcreteCategory` instance for `AlgebraCat` (#21121) feat(NumberTheory/LSeries): results involving partial sums of coefficients (part 1) (#20661) feat(RingTheory/LaurentSeries): add algebraEquiv (#21004) chore(SetTheory/Game/Impartial): golf two proofs (#21074) feat(CategoryTheory/Subpresheaf): preimage/image/range of subpresheaves (#21047) feat(RingTheory/IntegralClosure): `Algebra.IsIntegral` transfers via surjective homomorphisms (#21023) feat(`InformationTheory/Hamming`): Add AddGroup instances (#20994) feat(RingTheory/IntegralClosure): prove `Module.Finite R (adjoin R S)` for finite set `S` of integral elements (#20970) ...
This is a step towards a concrete category redesign, as outlined in this Zulip post: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Concrete.20category.20class.20redesign/near/493903980
This PR adds a
ConcreteCategoryinstance forModuleCat. It also replaces theHom.homstructure projection with an alias forConcreteCategory.hom. SadlyModuleCat.restrictScalarsandPresheafOfModulesdo not appreciate subtle changes in elaboration/defeq, and quite a few declarations need subtle fixes. Maybe a more structural fix exists?I have not tried to look for code that can be cleaned up now, only at what broke. I want to get started on cleanup when the other concrete category instances are in.