The mathlib review queue

Welcome to the mathlib review page. Everybody's help with reviewing is appreciated. Reviewing contributions is important, and everybody is welcome to review pull requests! If you're not sure how, the pull request review guide is there to help you.
This page contains tables of

This dashboard was last updated on: August 21, 2025 at 02:49 UTC

Review queue

Number Author Title Description Labels +/- Modified files (first 100) 📝 💬 All users who commented or reviewed Assignee(s) Updated Last status change total time in review
24333 xcloudyunx
author:xcloudyunx
feat(Combinatorics/SimpleGraph): cycle graph implementation for generic vertex types The existing `cycleGraph` implementation under Combinatorics/SimpleGraph/Circulant.lean only operates over `Fin n`. This PR implements a cycle graph implementation over any generic vertex type. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 187/0 Mathlib.lean,Mathlib/Combinatorics/SimpleGraph/Cycle.lean 2 29 ['IvanRenison', 'github-actions'] kmill
assignee:kmill
91-6031
2 months ago
119-3588
3 months ago
119-3639
119 days
24050 Paul-Lez
author:Paul-Lez
feat(Data/Finsupp/Pointwise): generalise pointwise scalar multiplication of finsupps As pointed out by @eric-wieser, this creates an instance diamond with `SMul (α → β) (α →₀ (α → β))` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 7/4 Mathlib/Data/Finsupp/Pointwise.lean 1 6 ['Paul-Lez', 'eric-wieser', 'github-actions'] nobody
86-34723
2 months ago
128-23021
4 months ago
128-23070
128 days
26284 plp127
author:plp127
feat: faster implementation of `Nat.primeFactorsList` + `@[csimp]` lemma Add a function `Nat.primeFactorsListFast` that `#eval`s faster, and a `@[csimp]` lemma `Nat.primeFactorsList_eq_primeFactorsListFast` that shows `Nat.primeFactorsList = Nat.primeFactorsListFast`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 95/0 Mathlib/Data/Nat/Factors.lean 1 1 ['github-actions'] nobody
58-80052
1 month ago
58-80075
1 month ago
59-7591
59 days
22039 YaelDillies
author:YaelDillies
feat: simproc for computing `Finset.Ixx` of natural numbers --- - [x] depends on: #22290 - [x] depends on: #22559 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-meta 315/0 Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/FinsetInterval.lean,Mathlib/Util/Qq.lean 4 59 ['FLDutchmann', 'Paul-Lez', 'YaelDillies', 'eric-wieser', 'github-actions', 'grunweg', 'kim-em', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'urkud'] eric-wieser
assignee:eric-wieser
48-46225
1 month ago
126-59608
4 months ago
182-20327
182 days
26710 metakunt
author:metakunt
feat (Data/Nat/Digits/Lemmas): Add digits_getD Adds digits_getD, an explicit computation of the i-th digits of n in base b representation. t-data new-contributor 64/0 Mathlib/Data/Nat/Digits/Lemmas.lean 1 1 ['github-actions'] nobody
48-9746
1 month ago
48-9877
1 month ago
48-9929
48 days
26021 vasnesterov
author:vasnesterov
feat(Data/Real): representation of reals from `[0, 1]` in positional system * Introduce `ofDigits {b : ℕ} (digits : ℕ → Fin b) : ℝ`, representing a real number of the form `0.d₀d₁d₂...` (where `dᵢ = digits i`) as an infinite sum. * Prove that this sum converges to a number in the interval `[0, 1]`. * Prove `ofDigits_close_of_common_prefix`: if the first `n` digits of two numbers are equal, then their difference is bounded by `b⁻ⁿ`. * Introduce `Real.digits`, which converts a real number into its sequence of digits. * Prove that `ofDigits (toDigits x b) = x`. [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Base.20n.20expansion.20of.20real.20numbers.3F/near/502937293) --- - [x] depends on: #26004 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 238/0 Mathlib.lean,Mathlib/Data/Real/OfDigits.lean,scripts/noshake.json 3 11 ['alreadydone', 'eric-wieser', 'github-actions', 'mathlib4-dependent-issues-bot', 'vasnesterov', 'wwylele'] nobody
46-68663
1 month ago
49-83431
1 month ago
49-83989
49 days
26838 vlad902
author:vlad902
feat: add lemmas about `List.scanr` This PR continues the work from #25188. Original PR: https://github.com/leanprover-community/mathlib4/pull/25188 t-data 84/19 Mathlib/Data/List/Scan.lean 1 12 ['github-actions', 'vihdzp', 'vlad902'] nobody
39-67528
1 month ago
44-70037
1 month ago
44-70091
44 days
11563 YaelDillies
author:YaelDillies
feat: `∑ i ∈ s with hi : p i, f i hi` syntax for big operators Define new notation for `Finset.sum`/`Finset.prod`. `∑ i ∈ s with hi : p i, f i hi` now is notation for `∑ i : s.filter p, f i.1 (mem_filter.1 i.2).2`. --- - [x] depends on: #6795 Other notations we could have are * `∑ hi : i ∈ s, f i hi` as notation for `∑ i : s, f i.1 i.2` * `∑ hi : i ∈ s with p i, f i hi` as notation for `∑ i : s.filter p, f i.1 (mem_filter.1 i.2).1` * `∑ hi : i ∈ s with hpi : p i, f i hi hpi` as notation for `∑ i : s.filter p, f i.1 (mem_filter.1 i.2).1 (mem_filter.1 i.2).2` but Eric seems mildly unhappy about them. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra t-meta
label:t-algebra$
27/18 Mathlib/Algebra/BigOperators/Group/Finset/Defs.lean 1 28 ['YaelDillies', 'b-mehta', 'eric-wieser', 'github-actions', 'kbuzzard', 'kmill', 'leanprover-community-bot-assistant', 'leanprover-community-mathlib4-bot'] kmill
assignee:kmill
36-38629
1 month ago
36-38653
1 month ago
198-26610
198 days
27242 hugh-fox
author:hugh-fox
feat: add Gauss-like formula for sums of digit sums Adds `sum_digit_sum_base_pow_eq` to show a Gauss-like formula across sums of digit sums. This relies on an additional two simp lemmas, named `digits_sum_eq_self`, `digits_sum_base_mul_cancel`. Lastly, includes a specialization (which is a good bit simpler than the general formula) to base 10 named `sum_digit_sum_ten_pow_eq`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-data new-contributor 113/0 Mathlib/Data/Nat/Digits/Lemmas.lean 1 5 ['github-actions', 'hugh-fox', 'kckennylau'] nobody
32-23042
1 month ago
34-420
1 month ago
34-467
34 days
26847 joelriou
author:joelriou
feat: multicoequalizers in the category of types This PR gives a concrete criteria for a multicofork in the category of types to be a multicoequalizer, and this is used in order to show that if a (sub)set `A : Set X` is the union of certain subsets `U i`, then the type `A` is the multicoequalizer of the `U i`s along their intersections `V i j`. (A similar result for `Subpresheaf` rather than `Set` will be deduced in a separate PR, and this shall be very important in the study of the homotopy theory of simplicial sets, as this will allow the construction of morphisms from horns.) --- - [x] depends on: #25823 - [x] depends on: #22205 - [x] depends on: #26037 This PR continues the work from #23872. Original PR: https://github.com/leanprover-community/mathlib4/pull/23872 t-category-theory 96/0 Mathlib.lean,Mathlib/CategoryTheory/Limits/Types/Multicoequalizer.lean 2 n/a ['adomani', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] nobody
28-54446
28 days ago
unknown
unknown
27500 Komyyy
author:Komyyy
feat: the Riemann zeta function is meromorphic Also proves that the Hurwitz zeta function is meromorphic. This PR is split from #27499 to leave a good git diff history. --- The `large-import` change occurs only in the new module, so it poses no problem. - [x] depends on: #27499 This PR continues the work from #25597. Original PR: https://github.com/leanprover-community/mathlib4/pull/25597 large-import t-analysis 51/3 Mathlib.lean,Mathlib/Analysis/Meromorphic/Complex.lean,Mathlib/Analysis/Meromorphic/Gamma.lean 3 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
24-83986
24 days ago
24-84802
24 days ago
24-85418
24 days
27548 euprunin
author:euprunin
chore(Control/Functor/Multivariate): remove use of `erw` in `f` (`private def f`) t-data 1/1 Mathlib/Control/Functor/Multivariate.lean 1 1 ['github-actions'] nobody
24-41612
24 days ago
24-41618
24 days ago
24-41670
24 days
26031 joelriou
author:joelriou
feat(Algebra/Homology): the derived category of a linear abelian category is linear --- - [x] depends on: #25931 This PR continues the work from #24596. Original PR: https://github.com/leanprover-community/mathlib4/pull/24596 t-category-theory 71/0 Mathlib.lean,Mathlib/Algebra/Homology/DerivedCategory/Linear.lean,Mathlib/Algebra/Homology/HomotopyCategory/Shift.lean,Mathlib/Algebra/Homology/HomotopyCategory/SingleFunctors.lean 4 n/a ['AntoineChambert-Loir', 'github-actions', 'joelriou', 'mathlib4-dependent-issues-bot'] nobody
24-27655
24 days ago
unknown
unknown
27566 wwylele
author:wwylele
feat(Data/Real): Archimedean.embedReal is a ring hom when M is an ordered ring Also shows that this ends up the same as `LinearOrderedField.inducedOrderRingHom` for fields --- This is a spin-off from #27268 ~~because I got bored~~ . This is not in a high priority as I don't need it for anything yet, but the last lemma shows that `embedReal` is a generalization of `LinearOrderedField.inducedOrderRingHom` (which is only stated for field, and I didn't find when I was making the group embedding). Perhaps we should refactor `Mathlib/Algebra/Order/CompleteField.lean` with the definition here. Indeed, if we replace every `ℝ` with `(R : Type*)[ConditionallyCompleteLinearOrderedField R]` in `Data/Real/Embedding.lean`, the proof still works. What do you think? [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-data 220/3 Mathlib/Data/Real/Embedding.lean 1 1 ['github-actions'] nobody
24-21583
24 days ago
24-21590
24 days ago
24-21643
24 days
27682 FernandoChu
author:FernandoChu
Chore: Added `vecAppend_empty` lemma Added the `vecAppend_empty`. t-data new-contributor 5/0 Mathlib/Data/Fin/VecNotation.lean 1 1 ['github-actions'] nobody
21-46250
21 days ago
21-46250
21 days ago
21-46461
21 days
25864 plp127
author:plp127
feat(Nat/Digits): use fuel in `Nat.digits` Add a `fuel` parameter to `Nat.digitsAux` to make it structurally recursive. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 47/14 Mathlib/Data/Nat/Digits/Defs.lean 1 2 ['github-actions', 'leanprover-community-bot-assistant'] ericrbg
assignee:ericrbg
21-25671
21 days ago
32-16347
1 month ago
52-62905
52 days
25875 robin-carlier
author:robin-carlier
feat(CategoryTheory/Monoidal/Action): actions as monoidal functors to endofunctors Given a monoidal category `C` and a category `D`, we show that left actions of `C` on `D` correspond to monoidal functors `C ⥤ (D ⥤ D)ᴹᵒᵖ` by showing that the composition of `curriedAction C D` with `mopFunctor` is monoidal, and in the other direction by defining an action of `C` on `D` out of the data of such a monoidal functor. Similarly, we show that monoidal functors `C ⥤ (D ⥤ D)` correspond to right actions of `C` on `D`. We use this to define the "evaluation" right action of `(C ⥤ C)` (with the composition monoidal structure) on `C` as the action corresponding to the identity functor `(C ⥤ C) ⥤ (C ⥤ C)`. --- - [x] depends on: #25840 - [x] depends on: #25766 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 222/3 Mathlib.lean,Mathlib/CategoryTheory/Monoidal/Action/Basic.lean,Mathlib/CategoryTheory/Monoidal/Action/End.lean,Mathlib/CategoryTheory/Monoidal/Opposite.lean 4 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] joelriou
assignee:joelriou
21-25670
21 days ago
46-45370
1 month ago
59-9853
59 days
26945 gasparattila
author:gasparattila
feat(LinearAlgebra/AffineSpace/AffineSubspace): basic properties of `sInf` and `iInf` These properties are analogous to the existing ones for the binary infimum. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
48/1 Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean 1 4 ['Ruben-VandeVelde', 'gasparattila', 'github-actions'] eric-wieser
assignee:eric-wieser
21-25663
21 days ago
42-30064
1 month ago
42-30110
42 days
26986 WangYiran01
author:WangYiran01
feat(Partition): add bijection for partitions with max part ≤ r ## Summary This PR adds a new theorem `partition_max_equals_bound` to `Mathlib.Combinatorics.Enumerative.Partition`. It constructs a bijection between: - The set of partitions of `n` in which `r ∈ π.parts` and all parts are `≤ r`, and - The set of partitions of `n - r` whose largest part is at most `r`. This provides a constructive proof via removing/adding `r` from/to the partition multiset, in line with classical enumerative combinatorics. ## Implementation notes - The proof uses `Multiset.erase` and `Multiset.cons` with basic properties of `sum`, `sup`, and `Partition` structures. - The bijection is implemented explicitly via `f` and `g`, and proven mutually inverse via `Subtype.ext`. ## Linting - [x] Passes `lake build` - [x] Linter clean (no commandStart or longLine issues) ## Author Contributed by Yiran Wang. new-contributor t-combinatorics 85/0 Mathlib/Combinatorics/Enumerative/Partition.lean 1 2 ['WangYiran01', 'github-actions'] b-mehta
assignee:b-mehta
21-25662
21 days ago
40-62865
1 month ago
40-62909
40 days
27697 BoltonBailey
author:BoltonBailey
chore(Data/Fintype): use `univ` instead of `Fintype.elems` A short PR to keep the API consistent with its surroundings. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 2/2 Mathlib/Data/Fintype/Defs.lean 1 1 ['github-actions', 'vihdzp'] nobody
21-21843
21 days ago
21-25722
21 days ago
21-25768
21 days
25889 plp127
author:plp127
fix(Tactic/Widget/Conv): fix various issues Fixes various issues with the `conv?` widget. Closes #25162. ([Zulip thread](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/bug.20in.20.60conv.3F.60)) Specifically, fixes issues with `conv?` where - when converting a `SubExpr.Pos` to conv directions, it always uses the goal expression as reference, even when working on a hypothesis, this often leads to bad results and makes it unusable on hypotheses - it refuses to go all the way in to a function (for example in `Nat.succ 0`, you can't access `Nat.succ`) - it refuses to enter binders where the name of the bound variable contains the character `0` (try it on `∀ (x0 : Nat), x0 = x0`) - it panics if it can't find a binder name instead of just coming up with one itself, this also means usually you can't enter either side of a non-dependent arrow since those usually don't have binder names (try it on `False → False`) - you can't enter the type of a binder, you end up going into the body instead (try it on `fun (x : False) => (x.elim : False → Nat) x.elim`) - you can't partially enter a function, you end up going to the top argument after instead (for example, in the expression `id (id id) 0`, when you click on `id (id id)`, you end up going to `id id`) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 419/84 Mathlib/Tactic/Widget/Conv.lean,MathlibTest/conv?.lean 2 4 ['bryangingechen', 'github-actions', 'plp127'] bryangingechen
assignee:bryangingechen
20-85760
20 days ago
67-126
2 months ago
67-171
67 days
27738 ChrisHughes24
author:ChrisHughes24
feat(Rat): Decidable instance for IsSquare --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 3/0 Mathlib/Data/Rat/Lemmas.lean 1 1 ['github-actions'] nobody
20-62458
20 days ago
20-62462
20 days ago
20-62510
20 days
26155 xroblot
author:xroblot
feat(DedekindDomain/Different): add the transitivity formula This PR proves the transitivity formula for the different ideal. It introduces ~~two~~ one increase~~s~~ in imports: - `RingTheory.FractionalIdeal.Extended`: this is a short leaf file and I think the import makes sense there - ~~`RingTheory.Localization.Defs.lean `: the file `Algebra.Algebra.Basic` is added since it is necessary to have the definition of `noZeroSMulDivisors` to get that some algebra map is injective. The import could be removed by stating the hypothesis as `Function.Injective (algebraMap * *)` but it is not the usual spelling (and cannot be synthesized by Lean). In the end, it appears that the increased import only affects three files so maybe it's fine.~~ The PR also adds two new instances: - `FiniteDimensional (FractionRing A) (FractionRing B)` deduced from `Module.Finite A B` when `B` is a Dedekind domain. - `IsScalarTower (FractionRing A) (FractionRing B) (FractionRing C)` deduced from `IsScalarTower A B C` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra
label:t-algebra$
207/4 Mathlib/RingTheory/DedekindDomain/Different.lean,Mathlib/RingTheory/DedekindDomain/IntegralClosure.lean,Mathlib/RingTheory/FractionalIdeal/Extended.lean,Mathlib/RingTheory/Localization/Basic.lean,Mathlib/RingTheory/Localization/FractionRing.lean 5 13 ['erdOne', 'github-actions', 'xroblot'] Vierkantor
assignee:Vierkantor
20-57630
20 days ago
54-50262
1 month ago
59-47270
59 days
26453 jburroni
author:jburroni
feat(Data/PNat/Basic): add order-related instances to PNat Add `SuccAddOrder ℕ+` and `NoMaxOrder ℕ+` instances. This allows, for example, the use of lemmas related to `Intervals` built with ℕ+. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-data new-contributor 18/0 Mathlib/Data/PNat/Basic.lean 1 3 ['eric-wieser', 'github-actions', 'jburroni'] ericrbg
assignee:ericrbg
20-57628
20 days ago
55-29449
1 month ago
55-29494
55 days
26790 FlAmmmmING
author:FlAmmmmING
feat(Combinatorics/Enumerative/Bell.lean): define standard Bell number --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 38/1 Mathlib/Combinatorics/Enumerative/Bell.lean 1 11 ['AntoineChambert-Loir', 'FlAmmmmING', 'eric-wieser', 'github-actions', 'kckennylau', 'madvorak'] awainverse
assignee:awainverse
20-57626
20 days ago
46-38305
1 month ago
46-38351
46 days
26793 FlAmmmmING
author:FlAmmmmING
feat(Algebra/Group /ForwardDiff.lean): add five theorems for forward difference --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-algebra
label:t-algebra$
212/3 Mathlib/Algebra/Group/ForwardDiff.lean 1 35 ['AntoineChambert-Loir', 'DAE123456', 'FlAmmmmING', 'Ruben-VandeVelde', 'github-actions', 'kckennylau', 'madvorak'] mariainesdff
assignee:mariainesdff
20-57625
20 days ago
33-84215
1 month ago
46-36702
46 days
27742 ChrisHughes24
author:ChrisHughes24
feat(Nat/nth): inequalities about Nat.nth --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 58/0 Mathlib/Data/Nat/Nth.lean 1 1 ['github-actions'] nobody
20-56906
20 days ago
20-56914
20 days ago
20-56960
20 days
25225 xcloudyunx
author:xcloudyunx
feat(Combinatorics/SimpleGraph): Eulerian walk in connected graph contains all vertices --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 16/0 Mathlib/Combinatorics/SimpleGraph/Trails.lean 1 3 ['IvanRenison', 'github-actions'] kmill
assignee:kmill
20-20722
20 days ago
86-12273
2 months ago
86-12327
86 days
25856 MichaelStollBayreuth
author:MichaelStollBayreuth
perf(Data.Real.Sqrt): make Real.sqrt irreducible We try to see what happens if we make Real.sqrt irreducible. There are cases where this makes unification very significantly faster, compare [#mathlib4 > Coercion triggers timeout @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Coercion.20triggers.20timeout/near/517177117). (Migrated manually from #24752) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) migrated-from-branch t-data 1/0 Mathlib/Data/Real/Sqrt.lean 1 1 ['github-actions'] ericrbg
assignee:ericrbg
20-20718
20 days ago
67-51283
2 months ago
67-54987
67 days
26287 mbkybky
author:mbkybky
feat(Data/ENat/Lattice): coercion to `WithBot ℕ∞` commutes with `biSup` The coercion from `ℕ∞` to `WithBot ℕ∞` commutes with `biSup` and `biInf`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 19/0 Mathlib/Data/ENat/Lattice.lean 1 1 ['github-actions'] ericrbg
assignee:ericrbg
20-20718
20 days ago
58-80002
1 month ago
59-1352
59 days
26370 b-mehta
author:b-mehta
chore(Archive): golf and generalise ascending-descending sequences This proof was 5 years old, not in a good generality, and overly long. We fix the latter two points. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 96/120 Archive/Wiedijk100Theorems/AscendingDescendingSequences.lean 1 12 ['b-mehta', 'github-actions', 'grunweg'] ericrbg
assignee:ericrbg
20-20714
20 days ago
55-59262
1 month ago
57-27800
57 days
26909 gasparattila
author:gasparattila
feat(LinearAlgebra/Projectivization/Subspace): correspondence between linear and projective subspaces --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
51/3 Mathlib/LinearAlgebra/Projectivization/Subspace.lean 1 1 ['github-actions'] Vierkantor
assignee:Vierkantor
20-20712
20 days ago
43-24104
1 month ago
43-24152
43 days
25500 eric-wieser
author:eric-wieser
feat: delaborators for metadata Being able to see these is very important when debugging tactic failures. Probably these could be upstreamed, but I don't think that's a reason not to merge them here first. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-meta 75/3 Mathlib/Util/Delaborators.lean,Mathlib/Util/PPOptions.lean,MathlibTest/delaborators.lean 3 11 ['JovanGerb', 'Rob23oba', 'eric-wieser', 'github-actions'] alexjbest
assignee:alexjbest
20-16154
20 days ago
76-21063
2 months ago
76-21121
76 days
26189 tb65536
author:tb65536
feat(FieldTheory/Galois/Basic): Add simp-lemma for `FixedPoints.intermediateField` This PR adds a simp-lemma `FixedPoints.mem_intermediateField_iff` for the definition `FixedPoints.intermediateField`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
4/0 Mathlib/FieldTheory/Galois/Basic.lean 1 1 ['github-actions'] joneugster
assignee:joneugster
20-16152
20 days ago
58-40952
1 month ago
62-12202
62 days
26841 xroblot
author:xroblot
feat(FieldTheory/IsGalois): map induced by the restriction to a subfield For `E/L` a field extension and `K` a subfield of `E`, we define the map `(E ≃ₐ[L] E) →* (K ≃ₐ[F] K)` induced by the restriction to `K` (with `F` a subfield of `K` and `L` such that `K/F` is normal) and study when it is injective and surjective. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
63/0 Mathlib/FieldTheory/Galois/Basic.lean 1 1 ['github-actions'] Vierkantor
assignee:Vierkantor
20-16146
20 days ago
44-67830
1 month ago
44-67877
44 days
27066 vasnesterov
author:vasnesterov
feat(Tactic/Order): frontend for `order` * Support `order [h1, h2]` and `order only [h1, h2]` syntax. * Split conjunctions while extracting facts from the context. E.g. hypotheses in the form `A ∧ B` are converted into two facts `A` and `B`. * Similarly, extract facts from existential quantifiers in the hypotheses. --- - [x] depends on: #26354 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) This PR continues the work from #22073. Original PR: https://github.com/leanprover-community/mathlib4/pull/22073 t-meta 91/37 Mathlib.lean,Mathlib/Tactic/Linarith/Frontend.lean,Mathlib/Tactic/Order.lean,Mathlib/Tactic/Order/CollectFacts.lean,Mathlib/Util/ElabWithoutMVars.lean,MathlibTest/order.lean 6 22 ['JovanGerb', 'github-actions', 'mathlib4-dependent-issues-bot', 'vasnesterov'] alexjbest
assignee:alexjbest
20-16142
20 days ago
38-62469
1 month ago
38-62497
38 days
27304 jano-wol
author:jano-wol
feat: invariant dual submodules define Lie ideals Invariant dual submodules define Lie ideals --- PR shows that Invariant dual submodules define Lie ideals. This work is part of the framework: https://github.com/orgs/leanprover-community/projects/17 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
358/0 Mathlib.lean,Mathlib/Algebra/Lie/Weights/InvariantSubmoduleLieIdeal.lean,Mathlib/Algebra/Lie/Weights/Killing.lean,Mathlib/Algebra/Lie/Weights/RootSystem.lean 4 1 ['github-actions'] jcommelin
assignee:jcommelin
20-16140
20 days ago
31-54079
1 month ago
31-54126
31 days
26843 vasnesterov
author:vasnesterov
feat(Tactic/Simproc): nested quantifiers in `existsAndEq` Generalize the `existsAndEq` simproc to nested existential quantifiers. For example `∃ a, p a ∧ ∃ b, a = f b ∧ q b` now simplifies to `∃ b, p (f b) ∧ q b`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) This PR continues the work from #23365. Original PR: https://github.com/leanprover-community/mathlib4/pull/23365 migrated-from-branch large-import t-meta 452/73 Mathlib/Data/List/ProdSigma.lean,Mathlib/Tactic/Simproc/ExistsAndEq.lean,MathlibTest/Simproc/ExistsAndEq.lean 3 10 ['JovanGerb', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot', 'vasnesterov'] kmill
assignee:kmill
19-67419
19 days ago
19-67442
19 days ago
44-53182
44 days
25069 erdOne
author:erdOne
feat(EllipticCurve): rational points of singular nodal cubics --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-geometry 251/0 Mathlib.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Basic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Singular/Node.lean 3 11 ['Multramate', 'acmepjz', 'erdOne', 'github-actions'] kim-em
assignee:kim-em
19-59272
19 days ago
92-1546
3 months ago
92-1601
92 days
25861 robin-carlier
author:robin-carlier
feat(CategoryTheory/Monoidal/Action): action of opposite categories Given a monoidal category `C` and a category `D`, we show that left (resp. right) `C`-actions on `D` induce left (resp. right) `Cᵒᵖ`-actions on `Dᵒᵖ`. Conversely, we show that left/right actions of `Cᵒᵖ` on `Dᵒᵖ` induce left/right actions of `C` on `D`. --- - [ ] depends on: #25860 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 272/0 Mathlib/CategoryTheory/Monoidal/Action/Opposites.lean 1 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] joelriou
assignee:joelriou
19-59268
19 days ago
46-45536
1 month ago
46-49813
46 days
25907 mans0954
author:mans0954
Low order roots of unity This PR continues the work from #25470. Original PR: https://github.com/leanprover-community/mathlib4/pull/25470 t-algebra
label:t-algebra$
182/0 Mathlib/Algebra/CharP/Invertible.lean,Mathlib/RingTheory/RootsOfUnity/Complex.lean 2 2 ['github-actions', 'mans0954'] kim-em
assignee:kim-em
19-59265
19 days ago
66-51953
2 months ago
66-52002
66 days
27047 YaelDillies
author:YaelDillies
feat: `MonoidHom.toAdditive''` as a `MulEquiv` From Toric --- I haven't yet been very thorough with the new lemmas. I first want to hear thoughts about the names [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-algebra
label:t-algebra$
31/7 Mathlib/Algebra/Group/TypeTags/Hom.lean 1 1 ['github-actions'] adomani
assignee:adomani
19-59240
19 days ago
38-73120
1 month ago
39-18577
39 days
27820 FLDutchmann
author:FLDutchmann
chore(NumberTheory/SelbergSieve): turn `BoundingSieve` into a struct Based on a discussion [on zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/BoundingSieve.20is.20a.20class.3F.3F). I wound up removing the custom notation as well, since not everybody was fond of it and I had some trouble getting it to work properly with structure inheritance and the corresponding coersions. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis t-number-theory 51/84 Mathlib/NumberTheory/SelbergSieve.lean 1 1 ['github-actions'] nobody
19-49719
19 days ago
19-49742
19 days ago
19-49778
19 days
25974 scholzhannah
author:scholzhannah
feat(Topology/Compactness/CompactlyCoherentSpace): compact coherentification (k-ification) This PR defines the notion of turning an arbitrary topological space into a compactly coherent space. Compactly coherent spaces are commonly referred to as "compactly generated spaces" or "k-spaces" in the literature while the operation of turning a space into such as space is called the "k-ification". There are however three different notions that are described with this name. To disambiguate we use the names "compactly coherent space" and "compactcoherentification" here. See [this wikipedia page](https://en.wikipedia.org/wiki/Compactly_generated_space) for an explanation of these notions. This PR continues the work from #25318. Original PR: https://github.com/leanprover-community/mathlib4/pull/25318 Co-authored-by: Floris van Doorn large-import t-topology 175/5 Mathlib/Topology/Compactness/CompactlyCoherentSpace.lean 1 2 ['github-actions', 'scholzhannah'] ADedecker
assignee:ADedecker
19-36197
19 days ago
65-24763
2 months ago
65-24811
65 days
23460 Timeroot
author:Timeroot
feat: Definition of `Clone` Basics about Clones. Part of #20051 --- - [x] depends on: #23459 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
326/0 Mathlib.lean,Mathlib/Algebra/Clone/Basic.lean,Mathlib/Algebra/Clone/Defs.lean,Mathlib/Data/Fin/Basic.lean 4 2 ['github-actions', 'mathlib4-dependent-issues-bot'] dagurtomas
assignee:dagurtomas
19-6505
19 days ago
57-84948
1 month ago
57-86239
57 days
22662 plp127
author:plp127
feat: Localization.Away.lift (computably) This PR adds `Localization.Away.lift'` and `Localization.Away.lift`, computable alternatives to `Localization.awayLift`. --- - [x] depends on: #24791 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
74/0 Mathlib/RingTheory/Localization/Away/Basic.lean 1 12 ['eric-wieser', 'github-actions', 'mathlib4-dependent-issues-bot', 'plp127', 'vihdzp'] mariainesdff
assignee:mariainesdff
19-6505
19 days ago
101-10884
3 months ago
167-10867
167 days
25758 YaelDillies
author:YaelDillies
chore: shortcut instance `CompleteLattice α → PartialOrder α` This avoids using the path `CompleteLattice α → CompletePartialOrder α → PartialOrder α` that goes through `Order.CompletePartialOrder` and makes it appear used to our automation, such as `shake` or `#min_imports`. This is a followup to #25358. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 7/0 Mathlib/Order/CompleteLattice/Defs.lean 1 6 ['Ruben-VandeVelde', 'eric-wieser', 'github-actions', 'leanprover-bot'] bryangingechen
assignee:bryangingechen
19-6504
19 days ago
50-14244
1 month ago
69-64829
69 days
25843 mitchell-horner
author:mitchell-horner
feat(Combinatorics/SimpleGraph): define `between` subgraphs The simple graph `G.between s t` is the subgraph of `G` containing edges that connect a vertex in the set `s` to a vertex in the set `t`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #24948.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24948* t-combinatorics 95/0 Mathlib/Combinatorics/SimpleGraph/Bipartite.lean 1 1 ['github-actions'] awainverse
assignee:awainverse
19-6503
19 days ago
68-47255
2 months ago
68-47239
68 days
26398 ChrisHughes24
author:ChrisHughes24
feat(ModelTheory): definable functions --- Possibly this should be generalized to partial functions. I migrated the PR by hand instead of using the script. - [x] depends on: #20166 - [x] depends on: #20161 - [x] depends on: #20115 - [x] depends on: #20174 - [x] depends on: #20175 - [x] depends on: #21948 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-logic 618/0 Mathlib.lean,Mathlib/ModelTheory/FunctionalFormula.lean 2 3 ['ChrisHughes24', 'github-actions', 'mathlib4-dependent-issues-bot'] fpvandoorn
assignee:fpvandoorn
19-6501
19 days ago
56-63769
1 month ago
56-64028
56 days
26462 PSchwahn
author:PSchwahn
feat(LinearAlgebra/Projection): add results about inverse of `Submodule.prodEquivOfIsCompl` Add two theorems `Submodule.prodEquivOfIsCompl_symm_apply` and `Submodule.prodEquivOfIsCompl_symm_add`, which are API for `Submodule.prodEquivOfIsCompl`. We believe these theorems are useful; for example, we have used their statements in a [classification formalization project](https://github.com/LieLean/LowDimSolvClassification). I am not sure whether the `prodEquivOfIsCompl_symm_apply` theorem should be tagged with `@[simp]`; this might lead to confluence issues. Opinions are welcome! Co-authored by: - [Viviana del Barco](https://github.com/vdelbarc) - [Gustavo Infanti](https://github.com/GuQOliveira) - [Exequiel Rivas](https://github.com/erivas) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
9/0 Mathlib/LinearAlgebra/Projection.lean 1 5 ['PSchwahn', 'github-actions', 'kckennylau'] joelriou
assignee:joelriou
19-6500
19 days ago
54-84835
1 month ago
54-84960
54 days
26870 grunweg
author:grunweg
feat: mdifferentiableOn_section_of_mem_baseSet₀ From the path towards geodesics and the Levi-Civita connection. Co-authored-by: Patrick Massot --- - [x] depends on: #26866 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-differential-geometry 125/0 Mathlib/Geometry/Manifold/VectorBundle/MDifferentiable.lean 1 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] PatrickMassot
assignee:PatrickMassot
19-6498
19 days ago
34-48282
1 month ago
34-48443
34 days
26955 mariainesdff
author:mariainesdff
feat(LinearAlgebra/OnSup): extend linear maps to sums of modules Let `A` be a ring, `X, Y` be `A`-modules, and `M, N` be `A`-submodules of `X`. Given two linear maps `f : M →ₗ[A] Y` and `g : N →ₗ[A] Y` that agree on `M ∩ N`, there is a unique linear map `M + N →ₗ[A] Y` that simultaneously extends `f` and `g`. Co-authored-by: @AntoineChambert-Loir --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
153/0 Mathlib.lean,Mathlib/LinearAlgebra/OnSup.lean 2 15 ['AntoineChambert-Loir', 'eric-wieser', 'github-actions', 'wwylele'] alreadydone
assignee:alreadydone
18-60417
18 days ago
37-55612
1 month ago
38-20119
38 days
27864 BoltonBailey
author:BoltonBailey
feat(Data/{Finset,Multiset}/Sort): give sort functions ≤ default argument Changes the `Finset.sort` and `Multiset.sort` functions to take `≤` as the default relation argument. Then removes this argument where possible through the rest of the library. This involves switching the order of arguments, but I think this is fine, as this function is mostly called by dot notation anyway, and I think it is more typical for the first argument of such functions to have the type that matches the namespace. Thanks to @eric-wieser for suggesting this approach --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 121/97 Mathlib/Algebra/Polynomial/Basic.lean,Mathlib/Data/Finset/Sort.lean,Mathlib/Data/Multiset/Sort.lean,Mathlib/Data/Nat/Nth.lean,Mathlib/GroupTheory/Perm/Cycle/Factors.lean,Mathlib/GroupTheory/Perm/Sign.lean,Mathlib/Logic/Equiv/Finset.lean,Mathlib/Logic/Equiv/Multiset.lean,Mathlib/NumberTheory/ADEInequality.lean 9 4 ['BoltonBailey', 'eric-wieser', 'github-actions'] nobody
18-41224
18 days ago
18-41224
18 days ago
19-8364
19 days
25920 BoltonBailey
author:BoltonBailey
feat(Data/Finsupp/Basic): `Finsupp.optionElim'` Similar to how Finsupp.cons constructs a map Fin (n + 1) →₀ M from a map Fin n →₀ M, we define Finsupp.optionElim' to construct a map Option α →₀ M from a map α →₀ M, given an additional value for none. We base this on the new optionEquiv definition. As a function, it behaves as Option.elim', hence the name. We prove a variety of API lemmas, based on those for Finsupp.cons, to bring the definitions more in line with the contents of Data/Finsupp/Fin. We also refactor to a new file to help avoid a too-long file and make this more analogous to Finsupp.cons Original PR: https://github.com/leanprover-community/mathlib4/pull/13861 - [x] depends on: #26309 migrated-from-branch t-data 124/25 Mathlib/Algebra/Category/MonCat/Adjunctions.lean,Mathlib/Data/Finsupp/Option.lean 2 14 ['BoltonBailey', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] nobody
18-39168
18 days ago
32-85914
1 month ago
55-6497
55 days
25724 bryangingechen
author:bryangingechen
chore: disable scheduled runs of stale issues workflow There's no point in having this run on schedule while it's still in limbo. --- This also seems to have been [completely broken](https://github.com/leanprover-community/mathlib4/actions/workflows/stale.yml) since #21681, since the search string is too long. Maybe we should just delete this. CI 1/2 .github/workflows/stale.yml 1 1 ['github-actions'] robertylewis
assignee:robertylewis
18-6478
18 days ago
69-82305
2 months ago
69-82287
69 days
25812 vlad902
author:vlad902
feat(data): List.Chain' helper lemmas Add two helpers lemmas to go from a List.Chain' hypothesis to a concrete predicate about two consecutive elements, one in the positive and one in the negative. t-data 29/0 Mathlib/Data/List/Chain.lean 1 4 ['BoltonBailey', 'github-actions', 'vlad902'] ericrbg
assignee:ericrbg
18-6477
18 days ago
48-65308
1 month ago
61-67896
61 days
26130 kmill
author:kmill
feat: make `reassoc_of%` be able to defer `Category` instance This PR modifies the elaboration of `reassoc_of%` so that the `Category` instance can be synthesized later, like any other instance metavariable, rather than needing to be synthesized up front, when the category itself might not yet be known. This fixes an issue reported by Robert Maxton [on Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/reassoc_of.25.20misleading.20error/near/524678383), where in the following `reassoc_of% Sigma.ι_desc` was failing. ```lean import Mathlib.CategoryTheory.Limits.Shapes.Products open CategoryTheory Limits set_option autoImplicit true variable {C : Type u} [Category.{v, u} C] {β : Type w} {f : β → C} [HasCoproduct f] {P : C} (p : (b : β) → f b ⟶ P) (b : β) example {Q : C} (g : P ⟶ Q) : Sigma.ι f b ≫ Sigma.desc p ≫ g = p b ≫ g := by rw [reassoc_of% Sigma.ι_desc] ``` Without this PR, a workaround is writing `reassoc_of% @Sigma.ι_desc`. The PR adds `Lean.Meta.withEnsuringLocalInstance` for temporarily adding a metavariable as a local instance if it can't yet be synthesized. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 91/20 Mathlib/Lean/Meta/Basic.lean,Mathlib/Tactic/CategoryTheory/IsoReassoc.lean,Mathlib/Tactic/CategoryTheory/Reassoc.lean,MathlibTest/CategoryTheory/Reassoc.lean 4 6 ['github-actions', 'kmill', 'leanprover-bot', 'sgouezel'] robertylewis
assignee:robertylewis
18-6475
18 days ago
62-78585
2 months ago
62-78568
62 days
26240 grunweg
author:grunweg
perf(CommandLinterLinter): use Substring more Probably, these changes make little difference, but let's find out. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-linter RFC 14/15 Mathlib/Tactic/Linter/CommandStart.lean 1 5 ['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] joneugster
assignee:joneugster
18-6474
18 days ago
61-15450
2 months ago
61-20062
61 days
26371 Timeroot
author:Timeroot
feat(NumberTheory): Niven's theorem This file proves Niven's theorem, that the only rational cosines of angles that are rational multiples of pi, are [-1, -1/2, 0, 1/2, 1]. This is one of the theorems missing from 1000.yaml. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-number-theory 119/0 Mathlib.lean,Mathlib/NumberTheory/Niven.lean,docs/1000.yaml 3 9 ['Timeroot', 'github-actions', 'grunweg', 'plp127'] mariainesdff
assignee:mariainesdff
18-6473
18 days ago
57-27523
1 month ago
57-27570
57 days
27021 grunweg
author:grunweg
feat: custom elaborators for differential geometry Add two sets of custom elaborators for differential geometry, to - infer the model with corners in `MDifferentiable{WithinAt,At,On}` or `ContMDiff{WithinAt,At,On}` expressions from the local context, and provide shorter notation in that setting - do the same for mfderiv: `mfderiv% f` is shorthand for `mfderiv I J f`; `mfderiv[s] f x` is short for `mfderivWithin I J f s` - convert a fibre bundle section from a dependent section to a function into the total space, making working with differentiability of sections of fibre bundles less cumbersome This was [discussed on zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Differential.20geometry.20elaborators.20experiment/with/528035295), to overall broad consensus. This code has substantial tests and has been tried in the branch in #26221 (uncovering minor issues, but not substantial ones). The implementation itself is of prototype quality and will be cleaned up in the future. Once it is more robust, more differential geometry files can be converted to use it. Co-authored-by: Patrick Massot ----------- I agree that merging not fully polished code is not ideal, but propose doing so for two reasons: - the work in #26221 used these elaborators extensively (to test them). Reverting those changes, merging the code, only to re-apply them is not a good use of time. Merging this PR now enables merging the work in #26221 soon. - the feature is clearly useful and not going away: in the files that use it, it works well already. Holding off on further adopting, but merging it now seems like a good compromise. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-differential-geometry t-meta 782/0 Mathlib.lean,Mathlib/Geometry/Manifold/Elaborators.lean,Mathlib/Geometry/Manifold/Traces.lean,MathlibTest/DifferentialGeometry/Elaborators.lean,scripts/noshake.json 5 4 ['github-actions', 'grunweg', 'sgouezel'] robertylewis
assignee:robertylewis
18-6469
18 days ago
39-66158
1 month ago
39-66231
39 days
25760 robin-carlier
author:robin-carlier
feat(CategoryTheory/Bicategory): (2,1)-categories and `Pith` This PR introduces a class `IsLocallyGroupoid` on bicategories, asserting that every hom-category has an `IsGroupoid` instance. With this definition, `IsLocallyGroupoid (LocallyDiscrete C)` is correctly inferred. Given a bicategory `B`, we introduce a type alias `Pith B` for `B` (realized as a one-field structure), and we equip it with a `Bicategory` instance where the hom-categories are the cores of the hom-categories of `B`. We show that this bicategory is a (2,1)-category, construct an inclusion pseudo-functor from `Pith B` to `B`, and show that every pseudofunctor from a (2,1)-category to `B` factors through this inclusion. --- We can’t fully state the fact that `(pseudofunctorToPith F).comp (inclusion F)` "is" `F` because #18254 is still not merged. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #25150.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/25150* t-category-theory 191/0 Mathlib.lean,Mathlib/CategoryTheory/Bicategory/LocallyGroupoid.lean 2 2 ['b-mehta', 'github-actions'] joelriou
assignee:joelriou
17-36712
17 days ago
69-64678
2 months ago
69-64661
69 days
26914 quangvdao
author:quangvdao
feat(Data/PFunctor/Univariate): more definitions for univariate `PFunctor` This PR defines several basic definitions of `PFunctor`, including zero, one, constants, monomials, coproduct (sum), product, sigma, pi, tensor product, universe lifting, and equivalence. We also add: (1) simple lemmas connecting the basic definitions, (2) an automatically derived ext lemma for `PFunctor` via `@[ext]` attribute Some things I'm not clear on: - I define `HAdd` and `HMul` instances for coproduct and product of poly functors having different universe levels. Should I also define `Add` and `Mul` instances for poly functors having the same universe level? - Is it ok to define notation for tensor product, i.e. `@[inherit_doc] scoped infixr:80 " ⊗ " => tensor`? I'm worried it might clash with other notation. - Need a double-check on the priority of notation. Some future definitions to add: - Various equivalences arising from arithmetic identities, e.g., `P + 0 ≃ₚ P`. - Definitions of Lenses and Charts (each of them will be a file or even a folder) - Exponential objects (corresponding to both `prod` and `tensor`) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 144/5 Mathlib/Data/PFunctor/Univariate/Basic.lean 1 19 ['alexkeizer', 'eric-wieser', 'github-actions', 'quangvdao'] nobody
17-9061
17 days ago
43-7570
1 month ago
43-7615
43 days
25042 alreadydone
author:alreadydone
feat(Topology): restriction/extension of Trivialization and composition with Homeomorph --- - [x] depends on: #25041 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 148/2 Mathlib/Topology/FiberBundle/Trivialization.lean,Mathlib/Topology/Maps/Basic.lean 2 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] ADedecker
assignee:ADedecker
17-6481
17 days ago
36-58345
1 month ago
92-41613
92 days
26061 kckennylau
author:kckennylau
feat(AlgebraicGeometry): define Projective Space This defines the projective space over a scheme, indexed by an arbitrary type. --- Zulip discussion: [#maths > Projective Space](https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/Projective.20Space/with/524057860) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-geometry 63/0 Mathlib.lean,Mathlib/AlgebraicGeometry/ProjectiveSpace.lean 2 14 ['callesonne', 'erdOne', 'github-actions', 'kckennylau'] erdOne
assignee:erdOne
17-6478
17 days ago
64-8219
2 months ago
64-8265
64 days
26299 adomani
author:adomani
perf: the `commandStart` linter only acts on modified files Introduces an `IO.Ref` to allow the `commandStart` linter to only run on files that git considers modified with respect to `master`. The linter is also active on files that have had some error, as these are likely being modified! The PR should also mitigate the speed-up that the linter introduced: [#mathlib4 > A whitespace linter @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/A.20whitespace.20linter/near/525091877) Assuming that this goes well, a similar mechanism could be applied to several linters that do not need to run on all code, just on the modified code. Implementation detail: the linter is currently either on or off in "whole" files. It may be also a future development to make this more granular and only run the linter on "modifed commands in modified files", but this is not currently the plan for this modification! --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-linter 48/0 Mathlib/Tactic/Linter/CommandStart.lean 1 5 ['adomani', 'github-actions', 'grunweg', 'leanprover-bot'] joneugster
assignee:joneugster
17-6477
17 days ago
58-46767
1 month ago
58-51399
58 days
26478 JovanGerb
author:JovanGerb
chore(LibraryRewrite): replace `rw??` with `rw?` As suggested by @YaelDillies, now `rw?` overwrites Lean core's implementation of `rw?`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 56/49 Mathlib/Tactic/Widget/LibraryRewrite.lean,MathlibTest/LibraryRewrite.lean,MathlibTest/rewrites.lean 3 5 ['YaelDillies', 'erdOne', 'github-actions', 'leanprover-community-bot-assistant'] alexjbest
assignee:alexjbest
17-6475
17 days ago
25-14646
25 days ago
39-76393
39 days
26484 peabrainiac
author:peabrainiac
feat(Geometry/Diffeology): basics of diffeological spaces Introduces diffeological spaces, smooth maps between them, the D-topology and the standard diffeology on finite-dimensional normed spaces. --- This PR continues the work from #21969. t-differential-geometry 471/0 Mathlib.lean,Mathlib/Geometry/Diffeology/Basic.lean,docs/references.bib 3 9 ['JovanGerb', 'github-actions', 'lecopivo', 'peabrainiac'] fpvandoorn
assignee:fpvandoorn
17-6474
17 days ago
53-85747
1 month ago
54-4099
54 days
26510 alreadydone
author:alreadydone
feat(Matroid): exchange lemmas involving closure --- for #24350 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data t-combinatorics 37/0 Mathlib/Data/Matroid/Closure.lean 1 1 ['github-actions'] kmill
assignee:kmill
17-6473
17 days ago
52-44893
1 month ago
52-44938
52 days
26912 pechersky
author:pechersky
chore(Algebra/Ring/Subring): simp tag `Subring.smul_def` s-multiplying by a subtype is easiest to manipulate when both terms are in the ambient type. Many places that had to use the _def lemma for a rewrite, or to include it in a simp set, no longer have to. Ported from #25308 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) I found this being not-simp frustrating when talking about submodules over a valuation subring. maintainer-merge t-algebra
label:t-algebra$
68/67 Mathlib/Algebra/Algebra/Subalgebra/Basic.lean,Mathlib/Algebra/Field/Subfield/Basic.lean,Mathlib/Algebra/Group/Subgroup/Actions.lean,Mathlib/Algebra/Group/Submonoid/MulAction.lean,Mathlib/Algebra/Module/LocalizedModule/Basic.lean,Mathlib/Algebra/Module/LocalizedModule/Exact.lean,Mathlib/Algebra/Module/LocalizedModule/IsLocalization.lean,Mathlib/Algebra/Module/LocalizedModule/Submodule.lean,Mathlib/Algebra/Ring/Periodic.lean,Mathlib/Algebra/Ring/Subring/Basic.lean,Mathlib/Algebra/Ring/Subsemiring/Basic.lean,Mathlib/Analysis/CStarAlgebra/Basic.lean,Mathlib/FieldTheory/KummerExtension.lean,Mathlib/GroupTheory/GroupAction/Defs.lean,Mathlib/GroupTheory/GroupAction/MultiplePrimitivity.lean,Mathlib/GroupTheory/GroupAction/MultipleTransitivity.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfFixingSubgroup.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfStabilizer.lean,Mathlib/LinearAlgebra/RootSystem/Irreducible.lean,Mathlib/LinearAlgebra/RootSystem/RootPositive.lean,Mathlib/LinearAlgebra/RootSystem/WeylGroup.lean,Mathlib/RingTheory/Etale/Kaehler.lean,Mathlib/RingTheory/LocalProperties/Projective.lean,Mathlib/RingTheory/Localization/InvSubmonoid.lean,Mathlib/RingTheory/OreLocalization/Basic.lean 25 16 ['eric-wieser', 'github-actions', 'j-loreaux', 'linesthatinterlace', 'pechersky'] joelriou
assignee:joelriou
17-6470
17 days ago
29-21184
29 days ago
40-36058
40 days
27076 Komyyy
author:Komyyy
refactor: don't require `DecidablePred` to state `PrimrecPred` ```lean def PrimrecPred {α} [Primcodable α] (p : α → Prop) [DecidablePred p] := Primrec fun a => decide (p a) ``` Currently, `DecidablePred` is required to **state** `PrimrecPred`, so this PR changes the definition and adds convenient APIs for this new definition: ```lean def PrimrecPred {α} [Primcodable α] (p : α → Prop) := open scoped Classical in Primrec fun a => decide (p a) ``` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-computability 117/67 Mathlib/Computability/Halting.lean,Mathlib/Computability/Partrec.lean,Mathlib/Computability/Primrec.lean,Mathlib/Computability/Reduce.lean 4 10 ['Komyyy', 'YaelDillies', 'digama0', 'eric-wieser', 'github-actions'] YaelDillies
assignee:YaelDillies
16-73799
16 days ago
16-73799
16 days ago
38-40498
38 days
26956 mariainesdff
author:mariainesdff
feat(RingTheory/DividedPowers/Basic): add divided power structure on pZp We construct a divided power structure on the ideal `(p) ⊆ ℤ_[p]`, given by the family of maps `fun n x ↦ x^n / n!`. Co-authored-by: @AntoineChambert-Loir --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 561/2 Mathlib.lean,Mathlib/Data/Nat/Factorial/NatCast.lean,Mathlib/RingTheory/DividedPowers/Padic.lean,Mathlib/RingTheory/DividedPowers/RatAlgebra.lean 4 1 ['github-actions'] mattrobball
assignee:mattrobball
16-60203
16 days ago
16-60203
16 days ago
41-63705
41 days
26347 mans0954
author:mans0954
feature(Data/Finset/RangeDistance): abs_sub_lt_of_mem_finset_range This PR continues the work from #23161. Original PR: https://github.com/leanprover-community/mathlib4/pull/23161 t-data 30/0 Mathlib.lean,Mathlib/Algebra/Order/Group/Unbundled/Abs.lean,Mathlib/Data/Finset/RangeDistance.lean 3 2 ['github-actions', 'mans0954'] alreadydone
assignee:alreadydone
16-59880
16 days ago
16-59880
16 days ago
57-69294
57 days
27933 grunweg
author:grunweg
chore(OrdNode): format code example in code blocks Wrap them in code blocks (and unindent them; that indentation is not needed any more). This also avoids warnings from the linter in #27898. ------- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 459/212 Mathlib/Data/Ordmap/Ordnode.lean 1 3 ['eric-wieser', 'github-actions', 'grunweg'] nobody
16-57084
16 days ago
16-65600
16 days ago
16-65647
16 days
27926 euprunin
author:euprunin
chore(Geometry/RingedSpace): remove one porting note and one `erw` ---
Show trace profiling of colimitPresheafObjIsoComponentwiseLimit_inv_ι_app ### Trace profiling of `colimitPresheafObjIsoComponentwiseLimit_inv_ι_app` before PR 27926 ``` info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.command] [1.040188] @[simp] theorem colimitPresheafObjIsoComponentwiseLimit_inv_ι_app (F : J ⥤ PresheafedSpace.{_, _, v} C) (U : Opens (Limits.colimit F).carrier) (j : J) : (colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j) := by delta colimitPresheafObjIsoComponentwiseLimit rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] dsimp rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] -- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block set f := _ change _ ≫ f = _ suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id] erw [← (F.obj j).presheaf.map_id] change (F.obj j).presheaf.map _ ≫ _ = _ simp [Elab.definition.header] [0.097144] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app [Elab.step] [0.025268] expected type: Type v, term Opens (Limits.colimit F).carrier [Elab.step] [0.020151] expected type: Type ?u.174516, term (Limits.colimit F).carrier [Elab.step] [0.019933] expected type: , term (Limits.colimit F) [Elab.step] [0.019920] expected type: , term Limits.colimit F [Meta.synthInstance] [0.018758] ✅️ HasColimit F [Elab.step] [0.070061] expected type: Prop, term (colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j) [Elab.step] [0.070046] expected type: Prop, term binrel% Eq✝ ((colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U)) (limit.π _ (op j)) [Meta.synthInstance] [0.058249] ✅️ HasLimit (componentwiseDiagram F U) [Elab.attribute] [0.937317] applying [simp] info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.async] [0.937262] elaborating proof of AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app [Elab.definition.value] [0.927035] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app [Elab.step] [0.922546] delta colimitPresheafObjIsoComponentwiseLimit rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] dsimp rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] -- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block set f := _ change _ ≫ f = _ suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id] erw [← (F.obj j).presheaf.map_id] change (F.obj j).presheaf.map _ ≫ _ = _ simp [Elab.step] [0.922530] delta colimitPresheafObjIsoComponentwiseLimit rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] dsimp rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] -- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block set f := _ change _ ≫ f = _ suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id] erw [← (F.obj j).presheaf.map_id] change (F.obj j).presheaf.map _ ≫ _ = _ simp [Elab.step] [0.146177] rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] [Elab.step] [0.146159] (rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.146150] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.146140] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.144815] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] [Meta.check] [0.016973] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.014416] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a.app (op U)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.010654] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.023805] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Elab.step] [0.046171] dsimp [Elab.step] [0.362200] rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] [Elab.step] [0.361801] (rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.361793] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.361787] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.361130] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] [Meta.check] [0.046061] ✅️ fun _a ↦ ((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv) ≫ ((colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ _a) ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.014339] ✅️ autoParam (∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f) _auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.014330] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.014288] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.013035] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom [Meta.isDefEq] [0.013017] ✅️ inst✝³.toCategoryStruct.3 (((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f) (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =?= inst✝³.toCategoryStruct.3 (((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f) (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom [Meta.check] [0.027427] ✅️ fun _a ↦ ((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv) ≫ _a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.019082] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.023213] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.014000] ✅️ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (colimit.ι F j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (Hom.c ?β).app ?U ≫ (Hom.c ?α).app (op ((Opens.map (Hom.base ?β)).obj (unop ?U))) ≫ ?h [Meta.isDefEq] [0.011423] ✅️ (colimit.ι F j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (Hom.c ?α).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))))) ≫ ?h [Meta.check] [0.019734] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.041226] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.013545] ✅️ (({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯)) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (?f ≫ ?g) ≫ ?h [Meta.check] [0.022526] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.010494] ✅️ autoParam (∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f) _auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.010484] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.010433] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Elab.step] [0.153503] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] [Elab.step] [0.149349] rw (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] [Elab.step] [0.149342] (rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.149338] rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.149333] rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.148668] rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] [Meta.isDefEq] [0.018626] ✅️ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h [Meta.isDefEq.delta] [0.018438] ✅️ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h [Meta.isDefEq] [0.015684] ✅️ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ ?h [Meta.isDefEq.delta] [0.015635] ✅️ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ ?h [Meta.isDefEq] [0.012504] ✅️ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq.delta] [0.012467] ✅️ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.check] [0.032205] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.011807] ✅️ autoParam (∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f) _auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.011776] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.011697] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.010926] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom [Meta.isDefEq] [0.010889] ✅️ inst✝³.toCategoryStruct.3 (((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f) (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =?= inst✝³.toCategoryStruct.3 (((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f) (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom [Meta.synthInstance] [0.032731] ✅️ HasLimit (componentwiseDiagram F U) [Meta.synthInstance] [0.037409] ✅️ HasLimit ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Elab.step] [0.014221] suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id] [Elab.step] [0.012150] refine_lift suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_ [Elab.step] [0.012144] focus (refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_); rotate_right) [Elab.step] [0.012137] (refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_); rotate_right) [Elab.step] [0.012133] (refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_); rotate_right) [Elab.step] [0.012129] (refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_); rotate_right) [Elab.step] [0.012125] refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_); rotate_right [Elab.step] [0.012121] refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_); rotate_right [Elab.step] [0.012108] refine no_implicit_lambda% (suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]; ?_) [Elab.step] [0.013093] change (F.obj j).presheaf.map _ ≫ _ = _ [Elab.step] [0.168494] simp [Meta.isDefEq] [0.021985] ❌️ eqToHom ?p =?= eqToHom ⋯ [Meta.isDefEq] [0.021872] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.021293] ❌️ eqToHom ?p =?= eqToHom ⋯ [Meta.isDefEq] [0.021164] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.010555] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯) [Meta.isDefEq.delta] [0.010532] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯) [Meta.isDefEq] [0.010242] ✅️ eqToHom ?p =?= eqToHom ⋯ [Meta.isDefEq] [0.010214] ✅️ ?p =?= colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign] [0.010212] ✅️ ?p := colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign.checkTypes] [0.010174] ✅️ (?p : op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι F j).base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)))) := (colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) : (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.010170] ✅️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι F j).base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) =?= (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:319:8: [Elab.async] [0.072478] Lean.addDecl [Kernel] [0.072444] typechecking declarations [AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app] ``` ### Trace profiling of `colimitPresheafObjIsoComponentwiseLimit_inv_ι_app` after PR 27926 ```diff diff --git a/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean b/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean index 5771499b70..cbf879186d 100644 --- a/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean +++ b/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean @@ -316,2 +316,3 @@ def colimitPresheafObjIsoComponentwiseLimit (F : J ⥤ PresheafedSpace.{_, _, v} +set_option trace.profiler true in @[simp] @@ -329,8 +330,2 @@ theorem colimitPresheafObjIsoComponentwiseLimit_inv_ι_app (F : J ⥤ Presheafed erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] - -- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block - set f := _ - change _ ≫ f = _ - suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id] - erw [← (F.obj j).presheaf.map_id] - change (F.obj j).presheaf.map _ ≫ _ = _ simp ``` ``` info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.command] [1.024539] @[simp] theorem colimitPresheafObjIsoComponentwiseLimit_inv_ι_app (F : J ⥤ PresheafedSpace.{_, _, v} C) (U : Opens (Limits.colimit F).carrier) (j : J) : (colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j) := by delta colimitPresheafObjIsoComponentwiseLimit rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] dsimp rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] simp [Elab.definition.header] [0.078196] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app [Elab.step] [0.012578] expected type: Type v, term Opens (Limits.colimit F).carrier [Elab.step] [0.064806] expected type: Prop, term (colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j) [Elab.step] [0.064794] expected type: Prop, term binrel% Eq✝ ((colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U)) (limit.π _ (op j)) [Meta.synthInstance] [0.046124] ✅️ HasLimit (componentwiseDiagram F U) [Elab.attribute] [0.941447] applying [simp] info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.async] [0.941493] elaborating proof of AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app [Elab.definition.value] [0.933934] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app [Elab.step] [0.922601] delta colimitPresheafObjIsoComponentwiseLimit rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] dsimp rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] simp [Elab.step] [0.922582] delta colimitPresheafObjIsoComponentwiseLimit rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] dsimp rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] simp [Elab.step] [0.135785] rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] [Elab.step] [0.135770] (rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.135762] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.135756] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.135146] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app, congr_app (Iso.symm_inv _)] [Meta.check] [0.011988] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.013908] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a.app (op U)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.010543] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.020840] ✅️ fun _a ↦ (((Limits.lim.mapIso (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯)).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).inv) ≫ _a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Elab.step] [0.043416] dsimp [Elab.step] [0.347288] rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] [Elab.step] [0.347048] (rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.347040] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.347035] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.346402] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc] [Meta.check] [0.032750] ✅️ fun _a ↦ ((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv) ≫ ((colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ _a) ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.028063] ✅️ fun _a ↦ ((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv) ≫ _a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫ (colimit.ι F j).c.app (op U) = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.019057] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.022883] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.013327] ✅️ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (colimit.ι F j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (Hom.c ?β).app ?U ≫ (Hom.c ?α).app (op ((Opens.map (Hom.base ?β)).obj (unop ?U))) ≫ ?h [Meta.isDefEq] [0.011046] ✅️ (colimit.ι F j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (Hom.c ?α).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))))) ≫ ?h [Meta.check] [0.019487] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.check] [0.042766] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) = limit.π (componentwiseDiagram F U) (op j) [Meta.isDefEq] [0.013346] ✅️ (({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯)) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (?f ≫ ?g) ≫ ?h [Meta.check] [0.019948] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Elab.step] [0.157932] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] [Elab.step] [0.154595] rw (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] [Elab.step] [0.154588] (rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.154584] rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.154579] rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.153927] rewrite (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc] [Meta.isDefEq] [0.012088] ✅️ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h [Meta.isDefEq.delta] [0.012000] ✅️ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).inv ≫ ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ (F.obj j).presheaf.map (eqToHom ⋯) ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h [Meta.check] [0.023999] ✅️ fun _a ↦ limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫ _a = limit.π (componentwiseDiagram F U) (op j) [Meta.synthInstance] [0.043793] ✅️ HasLimit (componentwiseDiagram F U) [Meta.synthInstance] [0.050911] ✅️ HasLimit ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Elab.step] [0.237283] simp [Meta.isDefEq] [0.020018] ✅️ (NatIso.ofComponents ?app ?naturality).inv.app ?X =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv.app (op j) [Meta.isDefEq.delta] [0.019991] ✅️ (NatIso.ofComponents ?app ?naturality).inv.app ?X =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv.app (op j) [Meta.isDefEq] [0.019797] ✅️ (NatIso.ofComponents ?app ?naturality).inv =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv [Meta.isDefEq.delta] [0.019779] ✅️ (NatIso.ofComponents ?app ?naturality).inv =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv [Meta.isDefEq] [0.019743] ✅️ NatIso.ofComponents ?app ?naturality =?= NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯ [Meta.isDefEq] [0.017808] ✅️ ?naturality =?= @colimitPresheafObjIsoComponentwiseLimit._proof_5 J inst✝⁴ C inst✝³ inst✝² inst✝¹ inst✝ F (hasColimitOfHasColimitsOfShape F) U [Meta.isDefEq.assign] [0.017806] ✅️ ?naturality := @colimitPresheafObjIsoComponentwiseLimit._proof_5 J inst✝⁴ C inst✝³ inst✝² inst✝¹ inst✝ F (hasColimitOfHasColimitsOfShape F) U [Meta.isDefEq.assign.checkTypes] [0.017713] ✅️ (?naturality : autoParam (∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f) _auto✝) := (@colimitPresheafObjIsoComponentwiseLimit._proof_5 J inst✝⁴ C inst✝³ inst✝² inst✝¹ inst✝ F (hasColimitOfHasColimitsOfShape F) U : ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f) [Meta.isDefEq] [0.017709] ✅️ autoParam (∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f) _auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.017679] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y), ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.017646] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom = (mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f [Meta.isDefEq] [0.016839] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f ≫ (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom [Meta.isDefEq] [0.016824] ✅️ inst✝³.toCategoryStruct.3 (((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f) (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =?= inst✝³.toCategoryStruct.3 (((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f) (mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom [Meta.isDefEq] [0.014645] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map f =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map f [Meta.isDefEq] [0.014628] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).toPrefunctor.2 f =?= ((pushforwardDiagramToColimit F).leftOp ⋙ (evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).toPrefunctor.2 f [Meta.isDefEq] [0.014549] ✅️ ((evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).map ((pushforwardDiagramToColimit F).leftOp.map f) =?= ((evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).map ((pushforwardDiagramToColimit F).leftOp.map f) [Meta.isDefEq] [0.014534] ✅️ ((evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))).toPrefunctor.2 ((pushforwardDiagramToColimit F).leftOp.map f) =?= ((evaluation (Opens ↑↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ C).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))).toPrefunctor.2 ((pushforwardDiagramToColimit F).leftOp.map f) [Meta.isDefEq] [0.014406] ✅️ ((pushforwardDiagramToColimit F).leftOp.map f).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= ((pushforwardDiagramToColimit F).leftOp.map f).app ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U)) [Meta.isDefEq] [0.014386] ✅️ ((pushforwardDiagramToColimit F).leftOp.map f).1 (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= ((pushforwardDiagramToColimit F).leftOp.map f).1 ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U)) [Meta.isDefEq] [0.010919] ✅️ ((pushforward C (colimit.ι (F ⋙ forget C) (unop X))).map (F.map f.unop).c).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) ≫ ((Pushforward.comp ((F ⋙ forget C).map f.unop) (colimit.ι (F ⋙ forget C) (unop X)) (F.obj (unop Y)).presheaf).inv ≫ (pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= ((pushforward C (colimit.ι (F ⋙ forget C) (unop X))).map (F.map f.unop).c).app ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U)) ≫ ((Pushforward.comp ((F ⋙ forget C).map f.unop) (colimit.ι (F ⋙ forget C) (unop X)) (F.obj (unop Y)).presheaf).inv ≫ (pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U)) [Meta.isDefEq] [0.010872] ✅️ inst✝³.toCategoryStruct.3 (((pushforward C (colimit.ι (F ⋙ forget C) (unop X))).map (F.map f.unop).c).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) (((Pushforward.comp ((F ⋙ forget C).map f.unop) (colimit.ι (F ⋙ forget C) (unop X)) (F.obj (unop Y)).presheaf).inv ≫ (pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) =?= inst✝³.toCategoryStruct.3 (((pushforward C (colimit.ι (F ⋙ forget C) (unop X))).map (F.map f.unop).c).app ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))) (((Pushforward.comp ((F ⋙ forget C).map f.unop) (colimit.ι (F ⋙ forget C) (unop X)) (F.obj (unop Y)).presheaf).inv ≫ (pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj (op U))) [Meta.isDefEq] [0.036880] ❌️ eqToHom ?p =?= eqToHom ⋯ [Meta.isDefEq] [0.036754] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign] [0.014492] ❌️ ?p := colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign.checkTypes] [0.014435] ❌️ (?p : op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) := (colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) : (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.014433] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.013670] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.013662] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.toPrefunctor.1 (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.013635] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= op ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).obj (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)))) [Meta.isDefEq] [0.013607] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).obj (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.013597] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).toPrefunctor.1 ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).toPrefunctor.1 (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.013549] ❌️ { carrier := ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹' ↑((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U), is_open' := ⋯ } =?= { carrier := ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹' ↑(unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))), is_open' := ⋯ } [Meta.isDefEq] [0.013528] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹' ↑((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹' ↑(unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.delta] [0.010260] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹' ↑((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹' ↑(unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.010255] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) =?= ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) [Meta.isDefEq] [0.010244] ❌️ ((fun X Y ↦ ContinuousMap.instFunLike) (↑(F.obj j)) (Limits.colimit (F ⋙ forget C))).1 (ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) =?= ((fun X Y ↦ ContinuousMap.instFunLike) ↑(F.obj j) ↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt).1 (ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) [Meta.isDefEq] [0.010227] ❌️ (ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)).toFun =?= (ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).toFun [Meta.isDefEq] [0.010215] ❌️ (ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)).1 =?= (ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).1 [Meta.isDefEq.assign] [0.017826] ❌️ ?p := colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign.checkTypes] [0.017754] ❌️ (?p : op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) := (colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) : fun {β} ↦ (Opens.map β.base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.017751] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= fun {β} ↦ (Opens.map β.base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.017746] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.017009] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.017001] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.toPrefunctor.1 (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) [Meta.isDefEq] [0.016976] ❌️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) =?= op ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).obj (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)))) [Meta.isDefEq] [0.016946] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).obj (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.016936] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).toPrefunctor.1 ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).toPrefunctor.1 (unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.016889] ❌️ { carrier := ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹' ↑((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U), is_open' := ⋯ } =?= { carrier := ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹' ↑(unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))), is_open' := ⋯ } [Meta.isDefEq] [0.016868] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹' ↑((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹' ↑(unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.delta] [0.013665] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹' ↑((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U) =?= ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹' ↑(unop (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.013661] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) =?= ⇑(ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) [Meta.isDefEq] [0.013651] ❌️ ((fun X Y ↦ ContinuousMap.instFunLike) (↑(F.obj j)) (Limits.colimit (F ⋙ forget C))).1 (ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) =?= ((fun X Y ↦ ContinuousMap.instFunLike) ↑(F.obj j) ↑{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.pt).1 (ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base) [Meta.isDefEq] [0.013633] ❌️ (ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)).toFun =?= (ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).toFun [Meta.isDefEq] [0.013622] ❌️ (ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)).1 =?= (ConcreteCategory.hom (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).1 [Meta.isDefEq] [0.021315] ❌️ eqToHom ?p =?= eqToHom ⋯ [Meta.isDefEq] [0.021164] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.010396] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯) [Meta.isDefEq.delta] [0.010372] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯) [Meta.isDefEq] [0.010074] ✅️ eqToHom ?p =?= eqToHom ⋯ [Meta.isDefEq] [0.010047] ✅️ ?p =?= colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign] [0.010045] ✅️ ?p := colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq.assign.checkTypes] [0.010004] ✅️ (?p : op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι F j).base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)))) := (colimit.isoColimitCocone_ι_hom { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸ Eq.refl ((Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) : (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) [Meta.isDefEq] [0.010000] ✅️ op ((Opens.map (colimit.ι (F ⋙ forget C) j)).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = op ((Opens.map (colimit.ι F j).base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.base).obj ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U))) =?= (Opens.map ({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) = (Opens.map (colimit.ι F j ≫ (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom).base).op.obj (op ((Opens.map (colimit.isoColimitCocone { cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj U)) info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:319:8: [Elab.async] [0.056169] Lean.addDecl [Kernel] [0.056142] typechecking declarations [AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app] ```
t-algebraic-geometry 0/6 Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean 1 2 ['euprunin', 'github-actions'] nobody
16-53740
16 days ago
16-74654
16 days ago
16-74700
16 days
27120 YaelDillies
author:YaelDillies
feat: the category of commutative bialgebras Define the bundled category `CommBialgCat R` of commutative bialgebras over a fixed commutative ring `R` along with the forgetful functor to `CommAlgCat`. From Toric Co-authored-by: Andrew Yang Co-authored-by: Michał Mrugała --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-algebra
label:t-algebra$
235/0 Mathlib.lean,Mathlib/Algebra/Category/CommBialgCat.lean 2 9 ['Whysoserioushah', 'YaelDillies', 'github-actions'] dagurtomas
assignee:dagurtomas
16-37075
16 days ago
37-71998
1 month ago
37-72068
37 days
27944 grunweg
author:grunweg
feat: lint module names with a period This would have caught the mis-placed file in #27796. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-linter 16/0 Mathlib/Tactic/Linter/TextBased.lean,scripts/lint-style.lean 2 2 ['github-actions', 'grunweg'] nobody
16-31883
16 days ago
16-31953
16 days ago
16-31937
16 days
27245 rirarika
author:rirarika
MvPolynomial.Irreducible --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
88/0 Mathlib.lean,Mathlib/Algebra/MvPolynomial/Irreducible.lean 2 5 ['alreadydone', 'github-actions', 'mbkybky'] alreadydone
assignee:alreadydone
16-26724
16 days ago
33-67746
1 month ago
33-67790
33 days
19668 YaelDillies
author:YaelDillies
refactor: define `≤`/`<` on `WithBot`/`WithTop` by induction The motivation for this change is that it is really confusing to run `intro r s shouldnthaveintroedthat` on a goal of the form `∀ r s : ℝ≥0∞, r ≤ s` and get the nonsense-looking goal `r = ↑shouldnthaveintroedthat → ∃ b : α, s = ↑b ∧ shouldnthaveintroedthat ≤ b⟩` instead of an error, and similarly when destructing something of the form `∃ r s : ℝ≥0∞, r < s`. Furthermore, I suspect this improves performance. --- - [x] depends on: #20317 - [x] depends on: #20318 - [x] depends on: #21274 - [x] depends on: #22109 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 68/51 Mathlib/Algebra/Order/Monoid/Unbundled/WithTop.lean,Mathlib/Analysis/Analytic/OfScalars.lean,Mathlib/Analysis/Oscillation.lean,Mathlib/Data/Finset/Lattice/Fold.lean,Mathlib/Data/Finset/Max.lean,Mathlib/LinearAlgebra/Eigenspace/Triangularizable.lean,Mathlib/MeasureTheory/Integral/Lebesgue/Countable.lean,Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean,Mathlib/Order/Interval/Basic.lean,Mathlib/Order/Interval/Set/WithBotTop.lean,Mathlib/Order/KrullDimension.lean,Mathlib/Order/WithBot.lean,Mathlib/Probability/Moments/Variance.lean,Mathlib/RingTheory/PowerBasis.lean,Mathlib/Topology/MetricSpace/Holder.lean,Mathlib/Topology/MetricSpace/HolderNorm.lean,MathlibTest/hint.lean 17 22 ['JovanGerb', 'YaelDillies', 'b-mehta', 'eric-wieser', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'urkud'] Vierkantor
assignee:Vierkantor
16-23634
16 days ago
95-68482
3 months ago
145-61033
145 days
22231 pechersky
author:pechersky
feat(Algebra/Valued): `AdicExpansion` initial defns --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra t-topology
label:t-algebra$
299/0 Mathlib.lean,Mathlib/Topology/Algebra/Valued/AdicExpansion.lean 2 2 ['Thmoas-Guan', 'github-actions'] jcommelin
assignee:jcommelin
16-6486
16 days ago
177-85621
5 months ago
177-85743
177 days
26154 ADedecker
author:ADedecker
refactor: add refactored APIs for algebraic filter bases This PR continues the work from #18437. Original PR: https://github.com/leanprover-community/mathlib4/pull/18437 t-topology 651/0 Mathlib.lean,Mathlib/Topology/Algebra/FilterBasis.lean,Mathlib/Topology/Algebra/FilterBasisNew.lean,Mathlib/Topology/Algebra/Nonarchimedean/Bases.lean,Mathlib/Topology/Algebra/Nonarchimedean/BasesNew.lean 5 2 ['ADedecker', 'github-actions'] PatrickMassot
assignee:PatrickMassot
16-6484
16 days ago
62-51072
2 months ago
62-51131
62 days
26301 Ivan-Sergeyev
author:Ivan-Sergeyev
feat(LinearAlgebra/Matrix/Determinant/TotallyUnimodular): Empty matrices are totally unimodular. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
15/0 Mathlib/LinearAlgebra/Matrix/Determinant/TotallyUnimodular.lean 1 1 ['github-actions'] kim-em
assignee:kim-em
16-6483
16 days ago
58-47452
1 month ago
58-47496
58 days
27108 pechersky
author:pechersky
chore(RingTheory/AdicValuation): golf using WithZero.log with helper lemma of how `log` preserves order --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra t-number-theory
label:t-algebra$
15/16 Mathlib/Algebra/Order/GroupWithZero/Canonical.lean,Mathlib/RingTheory/DedekindDomain/AdicValuation.lean 2 2 ['YaelDillies', 'github-actions'] mariainesdff
assignee:mariainesdff
16-6480
16 days ago
37-42138
1 month ago
37-51929
37 days
27182 eric-wieser
author:eric-wieser
feat: add bundled versions of `Equiv.cast` These are essentially the non-categorical versions of `eqToHom`. These are helpful to state some functorial results about things like `DFinsupp.equivCongrLeft` (with the alternative being to use an evil triangle somewhere instead). [#Is there code for X? > LinearEquiv.cast / AddEquiv.cast etc @ 💬](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/LinearEquiv.2Ecast.20.2F.20AddEquiv.2Ecast.20etc/near/521390380) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
31/0 Mathlib/Algebra/Algebra/Equiv.lean,Mathlib/Algebra/Group/Equiv/Defs.lean,Mathlib/Algebra/Module/Equiv/Defs.lean,Mathlib/Algebra/Ring/Equiv.lean 4 3 ['github-actions', 'pechersky', 'plp127'] kim-em
assignee:kim-em
16-6479
16 days ago
36-14692
1 month ago
36-14735
36 days
27482 alreadydone
author:alreadydone
chore(RingTheory/SimpleModule): golf and generalize lifting_property --- Build succeeded but there's a strange post-build step error. https://github.com/leanprover-community/mathlib4/actions/runs/16527173966/job/46744293147?pr=27482 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
11/14 Mathlib/RingTheory/SimpleModule/Basic.lean,Mathlib/RingTheory/SimpleModule/InjectiveProjective.lean 2 2 ['github-actions', 'smorel394'] Vierkantor
assignee:Vierkantor
16-6474
16 days ago
26-36553
26 days ago
26-36538
26 days
26885 pechersky
author:pechersky
feat(Topology/ValuativeRel): ValuativeTopology 𝒪[K] and even when not a field, `ValuativeRel 𝒪[K]` This is an example of something achievable with the new declarations that wasn't possible with Valued Such that we can discuss the valuations on the subring without always using coercions But to achieve this, one needs some juggling of the value groups --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) - [x] depends on: #26834 t-algebra t-topology t-number-theory
label:t-algebra$
73/0 Mathlib/RingTheory/Valuation/ValuativeRel.lean,Mathlib/Topology/Algebra/Valued/ValuativeRel.lean 2 5 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] alreadydone
assignee:alreadydone
16-2244
16 days ago
16-2263
16 days ago
43-27838
43 days
26277 AntoineChambert-Loir
author:AntoineChambert-Loir
feat(RingTheory/Congruence/Hom): prove basic isomorphisms theorems for ring congruences This file contains elementary definitions involving congruence relations and morphisms for semirings, rings, and algebras. * `RingCon.ker`: the kernel of a monoid homomorphism as a congruence relation * `RingCon.lift`, `RingCon.liftₐ`: the homomorphism / the algebra morphism on the quotient given that the congruence is in the kernel * `RingCon.map`, `RingCon.mapₐ`: homomorphism / algebra morphism from a smaller to a larger quotient * `RingCon.quotientKerEquivRangeS`, `RingCon.quotientKerEquivRange`, `RingCon.quotientKerEquivRangeₐ` : the first isomorphism theorem for semirings (using `RingHom.rangeS`), rings (using `RingHom.range`) and algebras (using `AlgHom.range`). * `RingCon.comapQuotientEquivRangeS`, `RingCon.comapQuotientEquivRange`, `RingCon.comapQuotientEquivRangeₐ` : the second isomorphism theorem for semirings (using `RingHom.rangeS`), rings (using `RingHom.range`) and algebras (using `AlgHom.range`). * `RingCon.quotientQuotientEquivQuotient`, `RingCon.quotientQuotientEquivQuotientₐ` : the third isomorphism theorem for semirings (or rings) and algebras It is an adaptation of what existed for multiplicative congruences (docs#Con) and is only useful for semirings which are not rings. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 555/2 Mathlib.lean,Mathlib/Algebra/Ring/Subsemiring/Basic.lean,Mathlib/Algebra/RingQuot.lean,Mathlib/RingTheory/Congruence/Basic.lean,Mathlib/RingTheory/Congruence/Defs.lean,Mathlib/RingTheory/Congruence/Hom.lean 6 1 ['github-actions'] joneugster
assignee:joneugster
15-61946
15 days ago
15-61946
15 days ago
59-18169
59 days
26054 FMLJohn
author:FMLJohn
feat(RingTheory/GradedAlgebra/Homogeneous/Subsemiring): homogeneous subsemirings of a graded semiring --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) In this pull request, we have defined homogeneous subsemirings of `GradedRing 𝒜` where `𝒜 : ι → σ`, `SetLike σ A` and `AddSubmonoidClass σ A`. ## Main definitions For any `R : Subsemiring A`: * `Subsemiring.IsHomogeneous 𝒜 R`: The property that a subsemiring is closed under `GradedRing.proj`. * `HomogeneousSubsemiring 𝒜`: The structure extending subsemirings which satisfy `Subsemiring.IsHomogeneous`. t-ring-theory 120/0 Mathlib.lean,Mathlib/RingTheory/GradedAlgebra/Homogeneous/Subsemiring.lean 2 1 ['github-actions'] kim-em
assignee:kim-em
15-61824
15 days ago
15-61824
15 days ago
64-30544
64 days
25905 mans0954
author:mans0954
feat(RingTheory/Polynomial/SmallDegreeVieta): polynomial versions of results in Algebra.QuadraticDiscriminant This PR continues the work from #25605. Original PR: https://github.com/leanprover-community/mathlib4/pull/25605 t-ring-theory 76/8 Mathlib/Algebra/Polynomial/Coeff.lean,Mathlib/RingTheory/Polynomial/SmallDegreeVieta.lean 2 42 ['github-actions', 'kckennylau', 'mans0954', 'ocfnash'] ocfnash
assignee:ocfnash
15-61797
15 days ago
15-61797
15 days ago
65-76055
65 days
24730 YaelDillies
author:YaelDillies
feat(RingTheory): group-like elements Define group-like elements in a bialgebra, ie elements such that `η a = 1` and `Δ a = a ⊗ₜ a`. We prove that group-like elements of a coalgebra over a domain are linearly independent, group-like elements of a bialgebra form a monoid, group-like elements of a Hopf algebra form a group. From Toric Co-authored-by: Michał Mrugała --- - [x] depends on: #24747 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory toric 309/0 Mathlib.lean,Mathlib/RingTheory/Bialgebra/GroupLike.lean,Mathlib/RingTheory/Coalgebra/GroupLike.lean,Mathlib/RingTheory/HopfAlgebra/GroupLike.lean 4 42 ['Julian-Kuelshammer', 'Parcly-Taxel', 'Whysoserioushah', 'YaelDillies', 'erdOne', 'eric-wieser', 'github-actions', 'leanprover-bot', 'mathlib4-dependent-issues-bot', 'smorel394'] eric-wieser
assignee:eric-wieser
15-61718
15 days ago
15-61718
15 days ago
102-18776
102 days
22322 mariainesdff
author:mariainesdff
feat(RingTheory/DividedPowers/RatAlgebra): add definitions In this file we show that, for certain choices of a commutative (semi)ring `A` and an ideal `I` of `A`, the family of maps `ℕ → A → A` given by `fun n x ↦ x^n/n!` is a divided power structure on `I`. Co-authored-by: AntoineChambert-Loir --- - [x] depends on: #22237 - [x] depends on: #22239 - [x] depends on: #22240 - [x] depends on: #24439 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 324/2 Mathlib.lean,Mathlib/Data/Nat/Factorial/NatCast.lean,Mathlib/RingTheory/DividedPowers/RatAlgebra.lean 3 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] dagurtomas
assignee:dagurtomas
15-61623
15 days ago
15-61623
15 days ago
50-11325
50 days
22151 alreadydone
author:alreadydone
feat(RingTheory): a semiprimary ring is Noetherian/Artinian iff its Jacobson radical is fg A key fact used is `Module.FG.smul`: if `I` is a two-sided ideal of `R` that is f.g. as a left ideal and `N` is a f.g. `R`-module, then `I • M` is also a f.g. `R`-module. Many lemmas about coprimality of ideals are also generalized to the noncommutative, two-sided setting. --- - [x] depends on: #21904 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 217/157 Mathlib/Algebra/Algebra/Operations.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean,Mathlib/NumberTheory/RamificationInertia/Basic.lean,Mathlib/RingTheory/Extension/Basic.lean,Mathlib/RingTheory/Finiteness/Basic.lean,Mathlib/RingTheory/Finiteness/Ideal.lean,Mathlib/RingTheory/HopkinsLevitzki.lean,Mathlib/RingTheory/Ideal/Maps.lean,Mathlib/RingTheory/Ideal/Operations.lean 9 8 ['alreadydone', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] eric-wieser
assignee:eric-wieser
15-61612
15 days ago
15-61612
15 days ago
168-62429
168 days
26644 kckennylau
author:kckennylau
feat(SetTheory/ZFC): Define the language of sets and state the ZFC axioms --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-set-theory 381/0 Mathlib.lean,Mathlib/SetTheory/ZFC/Axioms.lean,docs/references.bib 3 46 ['github-actions', 'kckennylau', 'leanprover-community-bot-assistant', 'staroperator', 'vihdzp'] nobody
15-57618
15 days ago
15-57638
15 days ago
37-577
37 days
26078 kckennylau
author:kckennylau
feat(AlgebraicGeometry): add x, y, px, py for points on elliptic curves --- Split from #25218. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-geometry 44/0 Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean 1 11 ['MichaelStollBayreuth', 'Multramate', 'acmepjz', 'github-actions', 'kckennylau'] dagurtomas
assignee:dagurtomas
15-57067
15 days ago
63-52852
2 months ago
63-52896
63 days
27292 gasparattila
author:gasparattila
feat: asymptotic cone of a set This PR defines the asymptotic cone of a set in a normed affine space and proves its main properties. This is partial progress towards showing that an unbounded finite-dimensional convex set contains a ray. --- - [x] depends on: #27221 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge new-contributor t-analysis 453/0 Mathlib.lean,Mathlib/Analysis/Normed/Affine/AsymptoticCone.lean,Mathlib/Order/Filter/Map.lean 3 44 ['AntoineChambert-Loir', 'YaelDillies', 'gasparattila', 'github-actions', 'mathlib4-dependent-issues-bot'] YaelDillies
assignee:YaelDillies
15-33054
15 days ago
15-36339
15 days ago
29-53880
29 days
27995 kckennylau
author:kckennylau
feat(RingTheory/Valuation): alternate constructors for Valuation --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 69/0 Mathlib/FieldTheory/RatFunc/Degree.lean,Mathlib/NumberTheory/Padics/PadicNumbers.lean,Mathlib/RingTheory/Valuation/Basic.lean 3 18 ['YaelDillies', 'github-actions', 'kckennylau', 'pechersky'] nobody
15-22212
15 days ago
15-28376
15 days ago
15-28359
15 days
27990 kckennylau
author:kckennylau
feat(Counterexamples): a nontrivial valuation with discrete topology This file constructs a valuation on `K[X]` satisfying `IsValuativeTopology K[X] ∧ Nonempty (valuation K[X]).RankOne ∧ IsNontrivial K[X] ∧ DiscreteTopology K[X]`, and proves that `IsValuativeTopology F ∧ IsNontrivial F ∧ DiscreteTopology F` is not possible if `F` is a field. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 172/0 Counterexamples.lean,Counterexamples/DiscreteTopologyWithNontrivialValuation.lean 2 n/a ['github-actions', 'kckennylau', 'pechersky'] nobody
15-21223
15 days ago
unknown
unknown
27392 Paul-Lez
author:Paul-Lez
feat(Tactic/SimpUtils): add simproc finding commands This PR adds some commands to allow users to find simprocs/dsimprocs/simp theorems that match on a given pattern. Thanks to Robin Arnez for telling me about `simprocDeclExt` :) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 690/0 Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/SimpUtils.lean,MathlibTest/SimpUtils.lean 4 8 ['Paul-Lez', 'eric-wieser', 'github-actions'] nobody
15-20443
15 days ago
15-20538
15 days ago
17-21209
17 days
22043 YaelDillies
author:YaelDillies
chore: shortcut instance for `Neg ℤˣ` This lets us avoid importing `Ring` in downstream files (most of the effect is to come). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) file-removed t-algebra
label:t-algebra$
20/47 Mathlib.lean,Mathlib/Algebra/GCDMonoid/Nat.lean,Mathlib/Algebra/Group/Int/Units.lean,Mathlib/Algebra/Order/Ring/Abs.lean,Mathlib/Algebra/Ring/Int/Units.lean,Mathlib/Algebra/Ring/NegOnePow.lean,Mathlib/Data/Fintype/Units.lean,Mathlib/Data/Int/AbsoluteValue.lean,Mathlib/Data/Int/Associated.lean,Mathlib/GroupTheory/HNNExtension.lean,Mathlib/NumberTheory/NumberField/Basic.lean,MathlibTest/Zify.lean 12 16 ['YaelDillies', 'eric-wieser', 'github-actions', 'j-loreaux', 'leanprover-community-bot-assistant', 'mathlib-bors'] erdOne
assignee:erdOne
15-6493
15 days ago
98-48334
3 months ago
183-21367
183 days
25814 vlad902
author:vlad902
feat(SimpleGraph): Weaker condition for paths in acyclic graphs `IsAcyclic.isPath_iff_chain'` defines a weaker condition for proving that a walk is a path, in particular it shows that rather than proving that all vertices in the support of a walk are distinct, one must only show that consecutive edges are distinct (e.g. every other vertex must be distinct.) This leads to a simple corollary that trails are also paths in acyclic graphs. I had a need for this when formalizing Cayley graphs, since this condition maps cleanly onto words in free groups being reduced. --- *This PR continues the work from #25630.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/25630* t-combinatorics 43/0 Mathlib/Combinatorics/SimpleGraph/Acyclic.lean,Mathlib/Combinatorics/SimpleGraph/Paths.lean 2 2 ['github-actions', 'vlad902'] kmill
assignee:kmill
15-6490
15 days ago
69-45090
2 months ago
69-45073
69 days
26190 tb65536
author:tb65536
feat(FieldTheory/Galois/IsGaloisGroup): Subgroups of a Galois group are Galois groups This PR gives an instance `IsGaloisGroup H (FixedPoints.intermediateField H : IntermediateField K L) L` from `IsGaloisGroup G K L`, and a numerical corollary. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
11/0 Mathlib/FieldTheory/Galois/IsGaloisGroup.lean 1 1 ['github-actions'] kim-em
assignee:kim-em
15-6488
15 days ago
58-37913
1 month ago
62-7514
62 days
26580 vasnesterov
author:vasnesterov
feat(Tactic/Order): translate linear orders to `Int` It was [pointed out](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/tactic.20for.20partial.20orders/near/515897754) that `order` is not complete for linear orders with lattice operations (while it remains complete for linear orders without lattice operations and for general lattices without assuming linearity). The problem for linear orders with lattice operations is NP-hard, but it can be translated from an arbitrary type to `Int` and then solved using a smart and efficient procedure (such as `omega`). This PR implements such a translation within the `order` tactic. Co-authored-by: Aaron Liu --- - [x] depends on: #26354 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-meta 302/22 Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Order.lean,Mathlib/Tactic/Order/Graph/Basic.lean,Mathlib/Tactic/Order/Preprocessing.lean,Mathlib/Tactic/Order/ToInt.lean,MathlibTest/order.lean 7 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'vasnesterov'] alexjbest
assignee:alexjbest
15-6487
15 days ago
38-61176
1 month ago
38-62876
38 days
26670 yu-yama
author:yu-yama
feat(GroupExtension/Abelian): define `conjClassesEquivH1` This PR continues the work from #21837. Original PR: https://github.com/leanprover-community/mathlib4/pull/21837 t-algebra
label:t-algebra$
162/5 Mathlib.lean,Mathlib/GroupTheory/GroupExtension/Abelian.lean,Mathlib/GroupTheory/GroupExtension/Basic.lean,Mathlib/GroupTheory/GroupExtension/Defs.lean,docs/references.bib 5 2 ['erdOne', 'github-actions', 'yu-yama'] erdOne
assignee:erdOne
15-6485
15 days ago
48-40828
1 month ago
48-40880
48 days
26766 MichaelStollBayreuth
author:MichaelStollBayreuth
feat(Topology/MetricSpace/Bounded): add some results We add two pairs of results: ```lean lemma isBounded_of_abs_le (C : α) : Bornology.IsBounded {x : α | |x| ≤ C} := ... lemma isBounded_of_abs_lt (C : α) : Bornology.IsBounded {x : α | |x| < C} := ... ``` (under suitable assumptions on `α`) and a version of the *Extreme Value Theorem* that I found convenient: ```lean theorem exists_forall_le_of_isBounded {f : β → α} (hf : Continuous f) (x₀ : β) (h : Bornology.IsBounded {x : β | f x ≤ f x₀}) : ∃ x, ∀ y, f x ≤ f y := ... theorem exists_forall_ge_of_isBounded {f : β → α} (hf : Continuous f) (x₀ : β) (h : Bornology.IsBounded {x : β | f x₀ ≤ f x}) : ∃ x, ∀ y, f y ≤ f x := ... ``` (under suitable assumptions on `α` and `β`). For an application, see [GelfandMazur.lean](https://github.com/MichaelStollBayreuth/Heights/blob/master/Heights/GelfandMazur.lean) in [Heights](https://github.com/MichaelStollBayreuth/Heights/tree/master). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 56/0 Mathlib/Topology/MetricSpace/Bounded.lean 1 1 ['github-actions'] grunweg
assignee:grunweg
15-6484
15 days ago
47-26553
1 month ago
47-26536
47 days
27527 peabrainiac
author:peabrainiac
feat(Topology): some `IsOpenMap` lemmas Some lemmas for `IsOpenMap` that I needed. I've also added variants for `IsClosedMap` to maintain symmetry in the API. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 46/0 Mathlib/Topology/Constructions.lean 1 2 ['github-actions', 'peabrainiac'] fpvandoorn
assignee:fpvandoorn
15-6481
15 days ago
25-9581
25 days ago
25-9604
25 days
27602 mitchell-horner
author:mitchell-horner
feat(Combinatorics/SimpleGraph): define `completeBipartiteSubgraph` Define the complete bipartite subgraphs of `s` and `t` parts as a "left" subset of `s` vertices and a "right" subset of `t` vertices such that every vertex in the "left" subset is adjacent to every vertex in the "right" subset. In this case `Nonempty (G.completeBipartiteSubgraph (card α) (card β))` is equivalent to `completeBipartiteGraph α β ⊑ G`, that is, finding a "left" subset of `s` vertices and a "right" subset of `t` vertices such that every vertex in the "left" subset is adjacent to every vertex in the "right" subset is equivalent to finding an injective homomorphism `completeBipartiteGraph α β` to `G`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-combinatorics 88/0 Mathlib/Combinatorics/SimpleGraph/Bipartite.lean 1 1 ['github-actions'] awainverse
assignee:awainverse
15-6480
15 days ago
23-32491
23 days ago
23-32542
23 days
26679 robin-carlier
author:robin-carlier
feat(CategoryTheory/Limits/Shapes/Pullback/Categorical): 2-functoriality of `CatCommSqOver` This PR uses the notion of categorical cospan transforms from #26412 and its bicategory-like notations from #26447 to provide API for 2-functoriality of the construction `CatCommSqOver F G X`. We show that `ψ : CatCospanTransform F G F' G'` defines a functor `CatCommSqOver F G X ⥤ CatCommSqOver F' G' X`, and that a functor `U : X ⥤ Y` induces a functor `CatCommSqOver F G Y ⥤ CatCommSqOver F G X` via precomposition. We give the battery of lemma that shows that these constructions are components of a `Cat`-valued "bipseudofunctor", although we cannot state it this way to keep things unbundled and universe polymorphic. --- - [x] depends on: #26447 I apologize in advance, for this one is very boring. As usual, the higher order lemmas are found by aesop_cat and are not marked simp, but I still want to state these explicitly so that in case automation goes wrong, "manual formal bicategory manipulations" remain an option. A design choice was made here. Instead of stating this kind of functoriality for the categorical pullback itself, I chose to state everything in terms of `CatCommSqOver`, i.e in terms of the pseudofunctorial construction corepresented by the categorical pullback. The rationale here is that while we could have done everything only at the level of the categorical pullback itself, I believe this design will allow for easier manipulations of categorical pullback *squares*. Actual bifunctoriality of the categorical pullback (and thus equivalence invariance, which is the key point of the notion compared to the strict pullback) will be in future PRs. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 364/1 Mathlib/CategoryTheory/Limits/Shapes/Pullback/Categorical/Basic.lean 1 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'robin-carlier'] dagurtomas
assignee:dagurtomas
14-68611
14 days ago
26-42922
26 days ago
35-76564
35 days
28025 kim-em
author:kim-em
feat: grind annotations in Logic/Equiv/Defs t-logic 153/80 Mathlib/Logic/Equiv/Array.lean,Mathlib/Logic/Equiv/Defs.lean,Mathlib/Logic/Equiv/Embedding.lean,Mathlib/Logic/Equiv/Finset.lean,Mathlib/Logic/Equiv/Fintype.lean,Mathlib/Logic/Equiv/Option.lean,Mathlib/Logic/Equiv/Prod.lean 7 6 ['github-actions', 'kim-em', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] nobody
14-62947
14 days ago
14-74720
14 days ago
14-80085
14 days
25788 Parcly-Taxel
author:Parcly-Taxel
feat: number of edges in the Turán graph We provide two theorems, the first `card_edgeFinset_turanGraph` providing the exact number of edges and the other `card_edgeFinset_turanGraph_le` providing a (slightly) looser bound whose main advantage is its lack of integer division/modulus operations. The bound in `card_edgeFinset_turanGraph_le` is also the bound provided in [Motzkin and Straus (1965)](https://doi.org/10.4153%2FCJM-1965-053-6). large-import t-combinatorics 132/0 Mathlib/Combinatorics/SimpleGraph/Turan.lean,Mathlib/Data/Nat/ModEq.lean 2 3 ['YaelDillies', 'github-actions', 'leanprover-community-bot-assistant'] awainverse
assignee:awainverse
14-6493
14 days ago
24-5249
24 days ago
69-53931
69 days
26225 Raph-DG
author:Raph-DG
feat(AlgebraicGeometry): Add some minimal API for orders on schemes In this PR we add some minimal api for the ordering on schemes defined in #26204. We chose split these PRs because we expect there will be more discussion about this API, and having the preorder instance is useful in its own right without much added API. - [] depends on: #26204 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-geometry 14/0 Mathlib/AlgebraicGeometry/Properties.lean,Mathlib/AlgebraicGeometry/Scheme.lean 2 4 ['Raph-DG', 'github-actions', 'joelriou', 'leanprover-community-bot-assistant'] erdOne
assignee:erdOne
14-6493
14 days ago
23-70167
23 days ago
59-49815
59 days
26770 Jun2M
author:Jun2M
feat(Combinatorics/Graph) : subgraph relations and operations on `Graph` This PR creates a new file `Combinatorics/Graph/Subgraph.lean`. In it, the PR introduces a partial order on graphs by subgraph relation, defines relations `IsInducedSubgraph`, `IsSpanningSubgraph` and `IsClosedSubgraph`. Further, it introduce operations `EdgeRestrict`, `EdgeDelete`, `induce` and `VertexDelete`. Co-authored-by: Peter Nelson --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-combinatorics 703/0 Mathlib.lean,Mathlib/Combinatorics/Graph/Subgraph.lean 2 1 ['github-actions'] awainverse
assignee:awainverse
14-6492
14 days ago
47-17970
1 month ago
47-18014
47 days
26798 robin-carlier
author:robin-carlier
feat(CategoryTheory/Monoidal/DayConvolution): `LawfulDayConvolutionMonoidalCategoryStruct` Given monoidal categories `C`, `V` and a category `D` with a pre-existing `MonoidalCategoryStruct`, we introduce a typeclass `LawfulDayConvolutionMonoidalCategoryStruct C V D` that bundles the required data and equations that the structure on `D` must have to be a monoidal subcategory of `C ⥤ V` if the latter was endowed with the day convolution monoidal structure. The data in question is that of a faithful functor `ι : D ⥤ C ⥤ V`, as well as explicit natural transformations `ι.obj d ⊠ (ι.obj d') ⟶ tensor C ⋙ ι.obj (d ⊗ d')` that exhibit `ι.obj (d ⊗ d')` as a Day convolution of `ι.obj d` and `(ι.obj d')`, as well as similar data asserting that `ι.obj (𝟙_ D)` is a Day convolution unit. The equations required are identical to the ones that characterize the unitors and associators for Day convolution with respect to the Kan extensions units. Given such a structure, using that the corresponding relations hold in `C ⥤ V`, we show that the monoidal category structure on `D` defines a `MonoidalCategory D`, i.e that all the required equations such as the pentagon/triangular equalities, bifunctoriality of the tensor product etc. are satisfied. Thus, we can think of `LawfulDayConvolutionMonoidalCategoryStruct C V D` as a constructor for monoidal categories. While this is a step towards a Day convolution monoidal structure in (a type alias) `C ⥤ V`, the framework is yet incomplete, as it assumes a pre-existing monoidal category structure. We will give constructors for (`MonoidalCategoryStruct` and) `LawfulDayConvolutionMonoidalCategoryStruct C V D` with various degree of definitional control over the resulting structure in a forthcoming PR. --- - [x] depends on: #25757 I recommend the reviewer to at least have a glance at #26820 to see where this is going, and how this one fits in the design I have in mind. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 336/8 Mathlib/CategoryTheory/Monoidal/DayConvolution.lean 1 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] adamtopaz
assignee:adamtopaz
14-6491
14 days ago
24-39917
24 days ago
38-15995
38 days
27635 Ruben-VandeVelde
author:Ruben-VandeVelde
chore: deprecate SubsemiringClass.coe_pow --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 2/7 Mathlib/Algebra/Ring/Subsemiring/Defs.lean,Mathlib/Analysis/Normed/Ring/Basic.lean 2 3 ['Ruben-VandeVelde', 'github-actions', 'grunweg'] awainverse
assignee:awainverse
14-6484
14 days ago
22-48105
22 days ago
22-51104
22 days
27658 euprunin
author:euprunin
chore(Geometry/RingedSpace): remove use of `erw` in `app_inv_app'` t-algebraic-geometry 3/1 Mathlib/Geometry/RingedSpace/OpenImmersion.lean 1 1 ['github-actions'] erdOne
assignee:erdOne
14-6484
14 days ago
22-14765
22 days ago
22-14811
22 days
27229 WilliamCoram
author:WilliamCoram
feat(GroupTheory/DoubleCoset): multiple lemmas From FLT --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-group-theory new-contributor 106/0 Mathlib/GroupTheory/DoubleCoset.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] mariainesdff
assignee:mariainesdff
13-50363
13 days ago
13-51096
13 days ago
30-12662
30 days
27991 sinianluoye
author:sinianluoye
feat (Rat): add Rat.den_eq_of_add_den_eq_one and its dependent lemmas ```lean4 example {q r : ℚ} (h : (q + r).den = 1) : q.den = r.den := by ``` It is so simple, but I couldn't find it in current mathlib repo. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 28/0 Mathlib/Data/Rat/Lemmas.lean 1 14 ['github-actions', 'sinianluoye', 'themathqueen'] nobody
13-33078
13 days ago
15-6081
15 days ago
15-34135
15 days
25969 101damnations
author:101damnations
feat(RepresentationTheory/Homological/GroupHomology/Functoriality): the degree 1 part of the corestriction-coinflation exact sequence Given a `G`-representation `A` and a normal subgroup `S` of `G`, this PR defines the corestriction-coinflation short complex `H₁(S, A) ⟶ H₁(G, A) ⟶ H₁(G ⧸ S, A_S)` induced by the natural inclusion `S → G` and projections `G → G / S, A → A_S`. We prove it's exact, and that the righthand map is an epimorphism. --- - [x] depends on: #21652 - [x] depends on: #21732 - [x] depends on: #21733 - [x] depends on: #21735 - [x] depends on: #21736 - [x] depends on: #21738 - [x] depends on: #25868 - [x] depends on: #25873 - [x] depends on: #25880 - [x] depends on: #25884 - [x] depends on: #25888 - [x] depends on: #25939 - [x] depends on: #25952 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *Earlier version at #22656.* t-algebra
label:t-algebra$
227/4 Mathlib/Algebra/Homology/ShortComplex/ModuleCat.lean,Mathlib/RepresentationTheory/Coinvariants.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/Basic.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/Functoriality.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/LowDegree.lean 5 n/a ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
13-27062
13 days ago
unknown
unknown
23940 YaelDillies
author:YaelDillies
feat: polytopes From Toric Co-authored-by: Matthew Johnson --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-analysis 65/0 Mathlib.lean,Mathlib/Geometry/Convex/Polytope.lean,Mathlib/Geometry/Convex/README.md 3 9 ['Parcly-Taxel', 'YaelDillies', 'eric-wieser', 'github-actions', 'jsm28', 'leanprover-community-bot-assistant'] hrmacbeth
assignee:hrmacbeth
13-6494
13 days ago
70-26388
2 months ago
131-12110
131 days
26765 KiringYJ
author:KiringYJ
feat(MeasureTheory/PiSystem): add π-λ theorem and SetLike instance Add two small features to `MeasureTheory/PiSystem`: 1. SetLike instance `instance : SetLike (DynkinSystem α) (Set α)` This lets us write `s ⊆ d` and `t ∈ d` for a DynkinSystem `d`, matching usual mathlib style. 2. `DynkinSystem.pi_lambda` lemma Classical π‑λ theorem: if a π‑system `s` is contained in a Dynkin system `d`, every set measurable for `σ(s)` is also in `d`. Currently, mathlib exposes this result only indirectly (e.g. via `generateFrom_eq`). Although logically equivalent, it is not obvious at first glance that those lemmas are the π‑λ theorem. The new lemma states the result in its familiar textbook form, so users can recognise and cite it immediately. Both pieces are under 10 lines, term‑mode only, and do not modify existing APIs. No breaking changes. No dependencies. new-contributor t-measure-probability 13/0 Mathlib/MeasureTheory/PiSystem.lean 1 13 ['EtienneC30', 'KiringYJ', 'github-actions', 'ocfnash'] RemyDegenne
assignee:RemyDegenne
13-6491
13 days ago
20-42540
20 days ago
47-30384
47 days
27118 Timeroot
author:Timeroot
feat(Matrix/Charpoly/Eigs): Roots of Matrix.charpoly are the eigenvalues. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra
label:t-algebra$
58/0 Mathlib/LinearAlgebra/Matrix/Charpoly/Eigs.lean,scripts/noshake.json 2 1 ['github-actions'] adomani
assignee:adomani
13-6488
13 days ago
37-74439
1 month ago
37-74482
37 days
27400 dleijnse
author:dleijnse
feat: define geometrically reduced algebras Define geometrically reduced algebras, and prove that if all finitely generated subalgebras of an algebra `A` are geometrically reduced, then `A` is geometrically reduced. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
111/0 Mathlib.lean,Mathlib/RingTheory/Nilpotent/GeometricallyReduced.lean 2 23 ['dleijnse', 'github-actions', 'kckennylau'] joelriou
assignee:joelriou
13-6486
13 days ago
28-25156
28 days ago
28-25202
28 days
27639 staroperator
author:staroperator
feat(Algebra/Order/Sub): `Sub` instance for linearly canonically ordered monoid There is a `Sub` instance for linearly canonically ordered monoid using choice that satisfies `OrderedSub`. --- Thanks @eric-wieser for the suggestion in #27341! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
28/0 Mathlib/Algebra/Order/Sub/Basic.lean 1 1 ['github-actions'] eric-wieser
assignee:eric-wieser
13-6484
13 days ago
22-43640
22 days ago
22-43687
22 days
27534 PierreQuinton
author:PierreQuinton
feat: a typeclass for `sSup`/`sInf` to be lawful Adds lawful infima and suprema type classes. A preorder with lawful suprema: whenever a set has a least upper bound, `sSup` returns a least upper bound for that set. A preorder with lawful infima: whenever a set has a greatest lower bound, `sInf` returns a greastest lower bound for that set. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 121/8 Mathlib.lean,Mathlib/Order/CompleteLattice/Defs.lean,Mathlib/Order/LawfulSupInf.lean 3 25 ['PierreQuinton', 'YaelDillies', 'github-actions', 'plp127', 'vihdzp'] YaelDillies
assignee:YaelDillies
12-56668
12 days ago
24-39965
24 days ago
24-40000
24 days
28111 euprunin
author:euprunin
chore: remove tactic `simp_lex` and use `simp` instead Motivation: `simp_lex` is just shorthand for `refine toLex.surjective.forall₃.2 ?_; rintro (a | a) (b | b) (c | c) <;> simp`, so plain `simp` seems preferable. t-data 4/10 Mathlib/Data/Sum/Interval.lean 1 5 ['eric-wieser', 'euprunin', 'github-actions'] nobody
12-44151
12 days ago
12-44234
12 days ago
12-51865
12 days
27498 Komyyy
author:Komyyy
feat: Group isomorphisms between (`Equiv.Perm`|`alternatingGroup`)s Required to prove that A_n is simple iff n = 3 or 5 ≤ n(#26051). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
29/0 Mathlib/Algebra/Group/End.lean,Mathlib/GroupTheory/SpecificGroups/Alternating.lean 2 2 ['github-actions', 'tb65536'] erdOne
assignee:erdOne
12-35010
12 days ago
26-8129
26 days ago
26-8114
26 days
23238 YaelDillies
author:YaelDillies
feat: extended floor and ceil My motivation for this is to prove `ENat.toENNReal (⨆ i, f i) = ⨆ i, ENat.toENNReal (f i)` and `ENat.toENNReal (⨅ i, f i) = ⨅ i, ENat.toENNReal (f i)`. Kalle Kytölä independently needs this for his formalisation of statistical physics. From MiscYD --- - [x] depends on: #24781 - [x] depends on: #24782 See #15269 for a past attempt. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
235/0 Mathlib.lean,Mathlib/Algebra/Order/Floor/Extended.lean 2 24 ['YaelDillies', 'b-mehta', 'eric-wieser', 'github-actions', 'kkytola', 'mathlib4-dependent-issues-bot', 'urkud'] alreadydone
assignee:alreadydone
12-6511
12 days ago
101-31504
3 months ago
148-83722
148 days
24095 lecopivo
author:lecopivo
feat: `fun_prop` for Is(Bounded)LinearMap + notation `fun x ↦L[R] f x` Sets up `fun_prop` for `IsLinearMap` and `IsBoundedLinearMap` also adds notation `fun x ↦ₗ[R] f x` and `fun x ↦L[R] f x` to write bundled versions like lambda function instead of the currently used pointfree notation. large-import t-algebra
label:t-algebra$
352/22 Mathlib.lean,Mathlib/Algebra/Algebra/Bilinear.lean,Mathlib/Algebra/Module/LinearMap/Defs.lean,Mathlib/Algebra/Module/LinearMap/End.lean,Mathlib/Algebra/Module/LinearMap/Pi.lean,Mathlib/Algebra/Module/LinearMap/Prod.lean,Mathlib/Analysis/Normed/Operator/BoundedLinearMaps.lean,scripts/noshake.json 8 22 ['eric-wieser', 'github-actions', 'lecopivo'] dagurtomas
assignee:dagurtomas
12-6511
12 days ago
83-31240
2 months ago
83-49622
83 days
25779 robin-carlier
author:robin-carlier
feat(CategoryTheory/Bicategory/NaturalTransformations): strong and lax natural transformations of lax functors Given two lax functors `F G` between bicategories, we define lax natural transformations as families of 1-morphisms `∀ a : B, F.obj a ⟶ G.obj a` equipped with a naturality 2-cell `∀ {a b : B} (f : a ⟶ b), app a ≫ G.map f ⟶ F.map f ≫ app b` that are required to satisfy conditions such as naturality, and compatibility with the `mapId` and `mapComp` fields of the source and target functors. This notion dualizes the existing notion of oplax natural transformations between, and tries to narrow the current gap between lax and oplax functors in the library, where the latter has much more formalized API. For maintainability, The code tries to stay as aligned as possible with the code in `CategoryTheory.Bicategory.Naturaltransformations.Oplax`. --- I followed the book by Johnson and Yau for the definition. I made @yuma-mizuno and @callesonne authors of the files, as they are the authors of the original code for Oplax functors, which I basically copy-pasted and modified to make it work with lax functors. They should feel free to modify this if they want. Next thing on the list is to tackle modifications between lax/strong natural transforms of lax transforms, as well as the category instance on lax functors. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #25565.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/25565* t-category-theory 286/0 Mathlib.lean,Mathlib/CategoryTheory/Bicategory/NaturalTransformation/Lax.lean,scripts/noshake.json 3 3 ['github-actions', 'yuma-mizuno'] joelriou
assignee:joelriou
12-6510
12 days ago
46-68127
1 month ago
68-26495
68 days
26899 robin-carlier
author:robin-carlier
feat(CategoryTheory/Functor/KanExtension): transitivity of left Kan extensions In this PR, we show that left Kan extensions are "transitive" in the following sense : if `α : F₀ ⟶ L ⋙ F₁` exhibits `F₁` as a left Kan extension of `F₀` along `L : C ⥤ D`, then given a functor `L' : D ⥤ D'` an an extension `(β : F₁ ⟶ L' ⋙ F₂)`, the "pasted extension" formed by `α` and `β` exhibits `F₂` as a left Kan extension of `F₀` along `L ⋙ L'` if and only if `β` exhibits `F₂` as a left Kan extension of `F₁` along `L'`. This refines the current theorems in mathlib that only treat the case where we pre or post-compose by an equivalence. The actual statement we prove is "fully weak" and lets us pick a functor isomorphic to `L ⋙ L'` and an extension isomorphic to the pasted one if needed. --- I will PR the dual version of everything for right Kan extensions as soon as we settle on the final form of this one. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 144/0 Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean 1 9 ['github-actions', 'joelriou', 'robin-carlier'] adamtopaz
assignee:adamtopaz
12-6508
12 days ago
21-64192
21 days ago
39-7885
39 days
27468 IvanRenison
author:IvanRenison
feat(Combinatorics/SimpleGraph): add theorem `SimpleGraph.Connected.diff_dist_adj` This contribution was created as part of the Utrecht Summerschool "Formalizing Mathematics in Lean" in July 2025. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-combinatorics 16/0 Mathlib/Combinatorics/SimpleGraph/Metric.lean 1 1 ['github-actions'] awainverse
assignee:awainverse
12-6505
12 days ago
26-50562
26 days ago
26-50661
26 days
27664 pechersky
author:pechersky
feat(Topology,Analysis): discrete topology metric space and normed groups Explicit construction of the discrete topology metric space and normed groups where `dist x y = 1` for all `x != y` Provide PseudoMetricSpace, MetricSpace, Seminormed(Add)Group, and Normed(Add)Group constructions --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 137/0 Mathlib/Analysis/Normed/Group/Basic.lean,Mathlib/Topology/MetricSpace/Basic.lean,Mathlib/Topology/MetricSpace/Pseudo/Constructions.lean 3 3 ['github-actions', 'kckennylau', 'pechersky'] urkud
assignee:urkud
12-6502
12 days ago
21-82914
21 days ago
21-82908
21 days
25770 Parcly-Taxel
author:Parcly-Taxel
chore: fix more induction/recursor branch names These were found using the regex `\| h. =>` and `def.*rec.*\(h. :`. tech debt 75/68 Mathlib/Analysis/Convolution.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/Data/Fin/Tuple/Basic.lean,Mathlib/Data/Fin/Tuple/NatAntidiagonal.lean,Mathlib/Data/Seq/Computation.lean,Mathlib/Data/Set/Card.lean,Mathlib/Data/WSeq/Basic.lean,Mathlib/Logic/Function/Iterate.lean,Mathlib/NumberTheory/ArithmeticFunction.lean,Mathlib/Order/SuccPred/Archimedean.lean,Mathlib/Order/Synonym.lean 11 16 ['Parcly-Taxel', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] Vierkantor
assignee:Vierkantor
11-79496
11 days ago
12-38380
12 days ago
67-66008
67 days
28140 YaelDillies
author:YaelDillies
feat: a `PointedCone`-valued version of `Submodule.span` This is merely to guide typing. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-convex-geometry toric 10/1 Mathlib/Geometry/Convex/Cone/Pointed.lean 1 1 ['github-actions'] nobody
11-70249
11 days ago
11-70249
11 days ago
11-70397
11 days
27265 pechersky
author:pechersky
feat(Topology/Valued): discrete topology on a valued field when trivial valuation or when there is a nonzero term in the valuation codomain that is smaller than all nonzero valuations --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 33/0 Mathlib/Topology/Algebra/Valued/ValuationTopology.lean 1 1 ['github-actions'] dagurtomas
assignee:dagurtomas
11-6477
11 days ago
33-19129
1 month ago
33-19173
33 days
27882 euprunin
author:euprunin
chore: golf using `grind [Nat.cast_*]` --- I'll post profiling results for these changes as soon as we've agreed on the correct procedure: specifically, which profiling commands to use and what to report (see https://github.com/leanprover-community/mathlib4/pull/27856#issuecomment-3146781779 for the current experimental profiling script output). 9/26 Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Proper.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Cotangent.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/EulerSineProd.lean,Mathlib/GroupTheory/CommutingProbability.lean,Mathlib/NumberTheory/Bernoulli.lean,Mathlib/RingTheory/ZMod/UnitsCyclic.lean 6 4 ['github-actions', 'kim-em', 'leanprover-bot'] urkud
assignee:urkud
11-6470
11 days ago
18-30019
18 days ago
18-30002
18 days
28115 bwangpj
author:bwangpj
feat(AlgebraicGeometry/EllipticCurve): reduction of elliptic curves Define the reduction of elliptic curves over the fraction field of a DVR, following Silverman. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebraic-geometry 230/1 Mathlib.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Reduction.lean,Mathlib/RingTheory/Valuation/Discrete/Basic.lean 3 14 ['Multramate', 'bwangpj', 'github-actions', 'kbuzzard'] nobody
10-79448
10 days ago
12-70094
12 days ago
12-70139
12 days
28164 bryangingechen
author:bryangingechen
fix(Cache): add put* commands to leanTarArgs Without this, running `lake exe cache put` fails if `leantar` is not already installed. --- What label should this get? `CI` and `t-meta` don't seem right. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) easy 2/2 Cache/Main.lean 1 1 ['github-actions'] nobody
10-56188
10 days ago
11-19214
11 days ago
11-19198
11 days
27567 themathqueen
author:themathqueen
feat(LinearAlgebra/TensorProduct/Tower): add `lid` and `assoc` tensor lemmas This adds `TensorProduct.lid_tensor` and `TensorProduct.assoc_tensor`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
33/0 Mathlib/LinearAlgebra/TensorProduct/Tower.lean 1 3 ['github-actions', 'themathqueen'] mariainesdff
assignee:mariainesdff
10-28079
10 days ago
10-28079
10 days ago
24-20916
24 days
28195 gasparattila
author:gasparattila
feat: separating a convex compact set and its neighborhood with a polytope --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-analysis 26/1 Mathlib/Analysis/Normed/Affine/Convex.lean 1 2 ['FrankieNC', 'github-actions'] nobody
10-18363
10 days ago
10-22420
10 days ago
10-22474
10 days
25774 Parcly-Taxel
author:Parcly-Taxel
chore: deprime `induction` in `AlgebraicTopology/CategoryTheory` Most replacements that are also in #23676 have been copied over, but some have been optimised further. tech debt 130/121 Mathlib/AlgebraicTopology/DoldKan/Decomposition.lean,Mathlib/AlgebraicTopology/DoldKan/Degeneracies.lean,Mathlib/AlgebraicTopology/DoldKan/NCompGamma.lean,Mathlib/AlgebraicTopology/DoldKan/Projections.lean,Mathlib/AlgebraicTopology/SimplexCategory/MorphismProperty.lean,Mathlib/AlgebraicTopology/SimplicialObject/Split.lean,Mathlib/AlgebraicTopology/SimplicialSet/Degenerate.lean,Mathlib/AlgebraicTopology/SimplicialSet/NerveAdjunction.lean,Mathlib/AlgebraicTopology/SimplicialSet/StdSimplex.lean,Mathlib/CategoryTheory/Abelian/GrothendieckCategory/EnoughInjectives.lean,Mathlib/CategoryTheory/Abelian/GrothendieckCategory/Subobject.lean,Mathlib/CategoryTheory/Action/Concrete.lean,Mathlib/CategoryTheory/Action/Monoidal.lean,Mathlib/CategoryTheory/ComposableArrows.lean,Mathlib/CategoryTheory/Extensive.lean,Mathlib/CategoryTheory/Filtered/Basic.lean,Mathlib/CategoryTheory/Galois/Decomposition.lean,Mathlib/CategoryTheory/Galois/EssSurj.lean,Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean,Mathlib/CategoryTheory/Limits/Shapes/SequentialProduct.lean,Mathlib/CategoryTheory/Limits/VanKampen.lean,Mathlib/CategoryTheory/Quotient.lean,Mathlib/CategoryTheory/Sites/Sheaf.lean,Mathlib/CategoryTheory/Subobject/Basic.lean,Mathlib/CategoryTheory/Subobject/FactorThru.lean,Mathlib/CategoryTheory/Subobject/Lattice.lean,Mathlib/CategoryTheory/Triangulated/TStructure/Basic.lean 27 6 ['Parcly-Taxel', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'madvorak'] grunweg
assignee:grunweg
10-6485
10 days ago
22-39847
22 days ago
67-32339
67 days
27455 pechersky
author:pechersky
chore(NumberTheory/Padics/Hensel): rephrase using `aeval` This is easier to use at call site, because on need not pass `Polynomial.map (algebraMap _ _ )` in the use of `hensels_lemma` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt t-algebra t-number-theory
label:t-algebra$
158/139 Mathlib/NumberTheory/Padics/Hensel.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] jcommelin
assignee:jcommelin
10-6480
10 days ago
17-18509
17 days ago
26-47523
26 days
28119 JasperMS
author:JasperMS
feat(Data/Set/Pairwise): prove pairwise results for Chains, move `Set.pairwise_iUnion₂` Initiate a new file `Data/Set/Pairwise/Chain.lean` which makes some `Pairwise` results available to the `IsChain` predicate. In the process, move `Set.pairwise_iUnion₂` to group it with similar results. Perform some variable harmonization. Part of Carleson, original result by Edward van de Meent. Moves: - Set.pairwise_iUnion₂: from Data.Set.Lattice to Data.Set.Pairwise.Lattice --- This PR was discussed and advice was given in [#mathlib4 > Novice questions on style and structure](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Novice.20questions.20on.20style.20and.20structure/with/533462814). Many thanks to those who helped me out! Mathlib PRs are still new to me, so please point out where I can improve! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) carleson t-data new-contributor 56/12 Mathlib.lean,Mathlib/Data/Set/Lattice.lean,Mathlib/Data/Set/Pairwise/Chain.lean,Mathlib/Data/Set/Pairwise/Lattice.lean 4 11 ['JasperMS', 'Ruben-VandeVelde', 'edegeltje', 'github-actions'] nobody
9-77400
9 days ago
12-45696
12 days ago
12-46139
12 days
27712 kim-em
author:kim-em
chore: remove old irrelevant attributes in Logic/Basic This PR removes some attributes from Logic/Basic that appear to have no effect on Mathlib. t-logic 0/2 Mathlib/Logic/Basic.lean 1 6 ['Parcly-Taxel', 'github-actions', 'kim-em', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] fpvandoorn
assignee:fpvandoorn
9-70971
9 days ago
20-84169
20 days ago
21-2668
21 days
26981 JovanGerb
author:JovanGerb
chore: golf using `grw` This PR cleans up some proofs using `grw`. It also tags a few lemmas with `@[gcongr]` that were required for the proofs. --- - [x] depends on: #26907 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import 179/200 Archive/Wiedijk100Theorems/CubingACube.lean,Mathlib/Algebra/Category/ModuleCat/Topology/Basic.lean,Mathlib/Algebra/Group/Subgroup/Basic.lean,Mathlib/Algebra/Lie/Engel.lean,Mathlib/Algebra/Lie/IdealOperations.lean,Mathlib/Algebra/Module/Submodule/IterateMapComap.lean,Mathlib/Algebra/Order/Archimedean/Basic.lean,Mathlib/Algebra/Order/CauSeq/BigOperators.lean,Mathlib/Algebra/Order/Field/Basic.lean,Mathlib/Algebra/Order/Group/Multiset.lean,Mathlib/Algebra/Order/Kleene.lean,Mathlib/Algebra/Order/Rearrangement.lean,Mathlib/Algebra/Order/Ring/Unbundled/Basic.lean,Mathlib/Analysis/BoxIntegral/Integrability.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Isometric.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Convex/Gauge.lean,Mathlib/Analysis/Convex/Slope.lean,Mathlib/Analysis/Distribution/SchwartzSpace.lean,Mathlib/Analysis/Normed/Affine/AddTorsor.lean,Mathlib/Analysis/Normed/Order/UpperLower.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/NNNorm.lean,Mathlib/Analysis/Oscillation.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean,Mathlib/Combinatorics/Hall/Finite.lean,Mathlib/Data/NNReal/Defs.lean,Mathlib/Data/Real/Cardinality.lean,Mathlib/Dynamics/Ergodic/MeasurePreserving.lean,Mathlib/FieldTheory/IntermediateField/Adjoin/Basic.lean,Mathlib/LinearAlgebra/AffineSpace/Ordered.lean,Mathlib/MeasureTheory/Covering/LiminfLimsup.lean,Mathlib/MeasureTheory/Integral/Bochner/Basic.lean,Mathlib/MeasureTheory/Integral/Bochner/Set.lean,Mathlib/MeasureTheory/Integral/Bochner/VitaliCaratheodory.lean,Mathlib/MeasureTheory/Integral/DominatedConvergence.lean,Mathlib/MeasureTheory/Integral/IntegralEqImproper.lean,Mathlib/MeasureTheory/Measure/Content.lean,Mathlib/MeasureTheory/Measure/EverywherePos.lean,Mathlib/MeasureTheory/Measure/IntegralCharFun.lean,Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean,Mathlib/MeasureTheory/Measure/Stieltjes.lean,Mathlib/MeasureTheory/OuterMeasure/Caratheodory.lean,Mathlib/MeasureTheory/OuterMeasure/Induced.lean,Mathlib/MeasureTheory/OuterMeasure/OfFunction.lean,Mathlib/NumberTheory/ClassNumber/AdmissibleCardPowDegree.lean,Mathlib/NumberTheory/FLT/Polynomial.lean,Mathlib/NumberTheory/ModularForms/JacobiTheta/TwoVariable.lean,Mathlib/NumberTheory/Transcendental/Lindemann/AnalyticalPart.lean,Mathlib/Order/Basic.lean,Mathlib/Order/BooleanAlgebra/Basic.lean,Mathlib/Order/Closure.lean,Mathlib/Order/ConditionallyCompleteLattice/Basic.lean,Mathlib/Order/Height.lean,Mathlib/Order/Interval/Set/Monotone.lean,Mathlib/Order/Monotone/Extension.lean,Mathlib/Order/PrimeSeparator.lean,Mathlib/Probability/Martingale/Upcrossing.lean,Mathlib/Probability/Process/HittingTime.lean,Mathlib/RingTheory/Ideal/Operations.lean,Mathlib/RingTheory/MvPowerSeries/PiTopology.lean,Mathlib/RingTheory/Polynomial/Basic.lean,Mathlib/SetTheory/Cardinal/Arithmetic.lean,Mathlib/SetTheory/Cardinal/Ordinal.lean,Mathlib/SetTheory/Ordinal/Basic.lean,Mathlib/SetTheory/Ordinal/Enum.lean,Mathlib/SetTheory/Ordinal/FixedPointApproximants.lean,Mathlib/Topology/Maps/Basic.lean,Mathlib/Topology/MetricSpace/Holder.lean,Mathlib/Topology/MetricSpace/Kuratowski.lean,Mathlib/Topology/MetricSpace/Thickening.lean,Mathlib/Topology/NhdsSet.lean,Mathlib/Topology/Order.lean 73 20 ['JovanGerb', 'github-actions', 'grunweg', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] grunweg
assignee:grunweg
9-52095
9 days ago
9-52113
9 days ago
20-13485
20 days
28077 ShreckYe
author:ShreckYe
feat(Data/Finset/Card): add some more Pigeonhole Principle theorems `exists_ne_map_eq_of_card_image_lt` and `not_injOn_of_card_image_lt` `exists_ne_map_eq_of_card_image_lt` is a special case of `exists_ne_map_eq_of_card_lt_of_maps_to` where `t` is `s.image f`, and `not_injOn_of_card_image_lt` is its variant using `Set.InjOn`. I ran into some cases where such theorems would save me some time. t-data new-contributor 10/0 Mathlib/Data/Finset/Card.lean 1 4 ['ShreckYe', 'github-actions', 'themathqueen'] nobody
9-47189
9 days ago
13-58971
13 days ago
13-59019
13 days
28045 ShreckYe
author:ShreckYe
feat(Data/Finset/Image): add `subset_univ_image_iff` This is a special case of `subset_image_iff`, which corresponds to `Set.subset_range_iff_exists_image_eq` for `Set`. t-data new-contributor 13/0 Mathlib/Data/Finset/Image.lean 1 2 ['github-actions', 'themathqueen'] nobody
9-47084
9 days ago
14-43876
14 days ago
14-43938
14 days
28139 YaelDillies
author:YaelDillies
refactor: make the cone explicit in `ConvexCone.toPointedCone` Otherwise it is impossible to know which cone we are talking about from the infoview as proofs are elided. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-convex-geometry toric maintainer-merge 3/3 Mathlib/Analysis/Convex/Cone/Closure.lean,Mathlib/Geometry/Convex/Cone/Pointed.lean 2 2 ['Ruben-VandeVelde', 'github-actions'] nobody
9-22677
9 days ago
9-22677
9 days ago
11-70971
11 days
27896 JovanGerb
author:JovanGerb
style: prefer `some`/`none` over `.some`/`.none` The notation `.some` and `.none` are very useful when working with other inductive types such as `LOption` which have fields names `some` and/or `none`. But for `Option`, we prefer to simply write `some`/`none`. [#mathlib4 > style: `.some`/`.none` vs `some`/`none`](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/style.3A.20.60.2Esome.60.2F.60.2Enone.60.20vs.20.60some.60.2F.60none.60) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 240/241 Cache/IO.lean,Counterexamples/ZeroDivisorsInAddMonoidAlgebras.lean,LongestPole/Main.lean,Mathlib/Algebra/Order/BigOperators/Expect.lean,Mathlib/Algebra/Order/BigOperators/Ring/Finset.lean,Mathlib/Data/DFinsupp/Notation.lean,Mathlib/Data/EReal/Operations.lean,Mathlib/Data/Fin/Tuple/Reflection.lean,Mathlib/Data/Fin/VecNotation.lean,Mathlib/Data/Finsupp/Option.lean,Mathlib/Data/Option/Basic.lean,Mathlib/Data/Seq/Seq.lean,Mathlib/Lean/Meta.lean,Mathlib/Lean/Meta/Simp.lean,Mathlib/Logic/Function/Basic.lean,Mathlib/Tactic/Algebraize.lean,Mathlib/Tactic/CategoryTheory/Bicategory/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Coherence/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Coherence/PureCoherence.lean,Mathlib/Tactic/CategoryTheory/Monoidal/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Monoidal/Normalize.lean,Mathlib/Tactic/CategoryTheory/Monoidal/PureCoherence.lean,Mathlib/Tactic/DefEqTransformations.lean,Mathlib/Tactic/ENatToNat.lean,Mathlib/Tactic/FastInstance.lean,Mathlib/Tactic/FunProp/Core.lean,Mathlib/Tactic/FunProp/Decl.lean,Mathlib/Tactic/FunProp/Elab.lean,Mathlib/Tactic/FunProp/FunctionData.lean,Mathlib/Tactic/FunProp/Mor.lean,Mathlib/Tactic/FunProp/Theorems.lean,Mathlib/Tactic/FunProp/Types.lean,Mathlib/Tactic/Linarith/Oracle/SimplexAlgorithm/Datatypes.lean,Mathlib/Tactic/Linarith/Oracle/SimplexAlgorithm/Gauss.lean,Mathlib/Tactic/Linarith/Oracle/SimplexAlgorithm/SimplexAlgorithm.lean,Mathlib/Tactic/Linter/GlobalAttributeIn.lean,Mathlib/Tactic/NormNum/Irrational.lean,Mathlib/Tactic/Order/Graph/Basic.lean,Mathlib/Tactic/PNatToNat.lean,Mathlib/Tactic/Positivity/Finset.lean,Mathlib/Tactic/ProxyType.lean,Mathlib/Tactic/ReduceModChar.lean,Mathlib/Tactic/RewriteSearch.lean,Mathlib/Tactic/Simproc/ExistsAndEq.lean,Mathlib/Tactic/Simps/Basic.lean,Mathlib/Tactic/SuccessIfFailWithMsg.lean,Mathlib/Tactic/Widget/StringDiagram.lean,Mathlib/Util/Superscript.lean,MathlibTest/toAdditive.lean 49 5 ['JovanGerb', 'alreadydone', 'eric-wieser', 'github-actions'] kmill
assignee:kmill
9-11472
9 days ago
17-59223
17 days ago
17-59206
17 days
24850 pechersky
author:pechersky
feat(Topology/UniformSpace/Ultra): uniform spaces induced by pseudometrics are ultra if system is ultra Any uniform space has a natural system of pseudometrics definable on it, comprised of those pseudometrics constructed from a descending chain of equivalence relation entourages. In a nonarchimedean uniformity, this pseudometric system induces the uniformity. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) - [x] depends on: #23111 t-topology 509/1 Mathlib.lean,Mathlib/Topology/MetricSpace/BundledFun.lean,Mathlib/Topology/UniformSpace/Ultra/Pseudometrizable.lean 3 8 ['ADedecker', 'fpvandoorn', 'github-actions', 'mathlib4-dependent-issues-bot', 'pechersky'] urkud
assignee:urkud
9-6508
9 days ago
71-80218
2 months ago
87-25753
87 days
26089 WilliamCoram
author:WilliamCoram
feat: restricted power series form a ring We define restricted power series over a normed ring R, and show they form a ring when R has the ultrametric property This is an update of [#23338](https://github.com/leanprover-community/mathlib4/pull/23338) to meet new expectations of PRs from forks. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra t-number-theory
label:t-algebra$
182/0 Mathlib.lean,Mathlib/RingTheory/PowerSeries/Restricted.lean 2 7 ['CBirkbeck', 'WilliamCoram', 'github-actions'] riccardobrasca
assignee:riccardobrasca
9-6506
9 days ago
34-43801
1 month ago
53-33234
53 days
26547 robin-carlier
author:robin-carlier
feat(CategoryTheory/Limits/Shapes/Pullback/Categorical/CatCospanTransform): more lemmas about isomorphisms of `CatCospanTransform` We construct ways to extract left, right or base components of ismorphisms of `CatCospanTransform`, as well as various `IsIso` instances, and lemmas allowing to compute the left, right or base component of the inverse of a `CatCospanTransformMorphism` that has an `IsIso` instance. --- - [x] depends on: #26412 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 70/0 Mathlib/CategoryTheory/Limits/Shapes/Pullback/Categorical/CatCospanTransform.lean 1 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] TwoFX
assignee:TwoFX
9-6504
9 days ago
46-62441
1 month ago
46-65488
46 days
26968 vihdzp
author:vihdzp
feat(Order/Concept): sets in a concept are codisjoint ...and other small lemmata. --- - [x] depends on: #26976 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 33/2 Mathlib/Order/Concept.lean 1 8 ['github-actions', 'leanprover-community-bot-assistant', 'linesthatinterlace', 'mathlib4-dependent-issues-bot', 'plp127', 'vihdzp'] bryangingechen
assignee:bryangingechen
9-6503
9 days ago
38-10406
1 month ago
38-39958
38 days
27000 gasparattila
author:gasparattila
feat(Analysis/Normed/Group/Quotient): isometric versions of isomorphisms This PR adds an isometric version of the third isomorphism theorem for groups and modules. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-analysis 49/2 Mathlib/Analysis/Normed/Group/Quotient.lean 1 1 ['github-actions'] urkud
assignee:urkud
9-6503
9 days ago
40-45630
1 month ago
40-45682
40 days
27049 BoltonBailey
author:BoltonBailey
doc(Analysis/BoxIntegral/Partition/Filter): field docstrings Split of #25917. Adds docstrings to the fields of this structure (Taken from the docstring of the structure itself). Note: this documentation was originally changed by asking Cursor (Claude 3.5 sonnet) to write the docstrings, but I think ultimately the docstring of the struct was reworked. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis documentation 13/14 Mathlib/Analysis/BoxIntegral/Partition/Filter.lean 1 2 ['BoltonBailey', 'github-actions'] hrmacbeth
assignee:hrmacbeth
9-6502
9 days ago
18-38220
18 days ago
39-15394
39 days
27441 judithludwig
author:judithludwig
feat(RingTheory/Polynomial/Quotient): Lemma on PIDs This is part of a course project at Heidelberg University: https://matematiflo.github.io/CompAssistedMath2025/ feat(RingTheory/Polynomial/Quotient): add lemma: Let $$R$$ be an integral domain and assume $$R[X]$$ is a PID, then $$R$$ is a field. This lemma is useful for proving that some rings are not PIDs, such as $$\mathbb{Z}[X]$$. Co-authored-by: Philipp Sivov @Silipp182 Co-authored-by: Veliyan Taslev @hubavelko --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 11/0 Mathlib/RingTheory/Polynomial/Quotient.lean 1 4 ['alreadydone', 'github-actions'] erdOne
assignee:erdOne
9-6501
9 days ago
16-32914
16 days ago
27-24670
27 days
27815 BGuillemet
author:BGuillemet
feat(CategoryTheory/Limits/Shapes/Products): add limMapPi and sigmaMapColim Add the canonical morphism from a limit to the product over its objects. Prove that it is a monomorphism. Dually, add the canonical morphism to a colimit from the coproduc of its objects and prove that it is an epimorphism. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-category-theory 44/0 Mathlib/CategoryTheory/Limits/Shapes/Products.lean 1 1 ['github-actions'] jcommelin
assignee:jcommelin
9-6498
9 days ago
19-52600
19 days ago
19-52626
19 days
26110 YaelDillies
author:YaelDillies
feat: sharp monoids Define sharp monoids, which are the monoids whose only unit is `1`. This concept is useful in log geometry and in particular shows up in the theory of affine monoids. This concept already existed in the guise of `Subsingleton Mˣ`, but giving it a name makes it easier to refer to and uncovers some missing instances. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-algebra
label:t-algebra$
51/30 Mathlib/Algebra/BigOperators/Associated.lean,Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean,Mathlib/Algebra/GCDMonoid/Basic.lean,Mathlib/Algebra/Group/Irreducible/Defs.lean,Mathlib/Algebra/Group/Pi/Units.lean,Mathlib/Algebra/Group/Prod.lean,Mathlib/Algebra/Group/Submonoid/Units.lean,Mathlib/Algebra/Group/Units/Basic.lean,Mathlib/Algebra/Group/Units/Defs.lean,Mathlib/Algebra/GroupWithZero/Associated.lean,Mathlib/Algebra/GroupWithZero/Divisibility.lean,Mathlib/Data/List/Prime.lean,Mathlib/Data/ZMod/Basic.lean,Mathlib/NumberTheory/DirichletCharacter/Basic.lean,Mathlib/RingTheory/ChainOfDivisors.lean,Mathlib/RingTheory/IntegralDomain.lean,Mathlib/RingTheory/UniqueFactorizationDomain/NormalizedFactors.lean,Mathlib/RingTheory/Valuation/Integers.lean 18 3 ['b-mehta', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] adomani
assignee:adomani
8-77280
8 days ago
8-77301
8 days ago
62-85341
62 days
28226 ShreckYe
author:ShreckYe
feat(Data/Finset): `Multiset.eq_of_le_of_card_eq` and `Finset.eq_of_subet_of_card_eq` As the conditions `s ⊆ t` for `Finset` and `s ≤ t` for `Multiset` both imply `card s ≤ card t`, the conditions `card t ≤ card s` in both `Finset.eq_of_subset_of_card_le` and `Multiset.eq_of_le_of_card_le` can be specialized to `card s = card t`, and due to this I'd argue `card s = card t` might be more common than `card t ≤ card s` in some cases. A similar theorem `Sublist.eq_of_length` for `Sublist` is already available in Lean. Adding these two theorems can aid proof search in such cases. t-data new-contributor easy 6/0 Mathlib/Data/Finset/Card.lean,Mathlib/Data/Multiset/Defs.lean 2 3 ['Ruben-VandeVelde', 'ShreckYe', 'github-actions'] nobody
8-67614
8 days ago
9-61306
9 days ago
9-61359
9 days
26282 AntoineChambert-Loir
author:AntoineChambert-Loir
feat: a theorem of Jordan on primitive subgroups of the permutation group A theorem of Jordan on the primitive subgroups of a permutation group: * if it contains a swap, it is equal to the permutation group, * if it contains a 3-cycle, it contains the alternating group. This PR continues the work from #24131. - [x] depends on: #26281 - [x] depends on: #26280 - [x] depends on: #26279 Original PR: https://github.com/leanprover-community/mathlib4/pull/24131 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-group-theory large-import 1044/136 Mathlib.lean,Mathlib/Data/Set/Card.lean,Mathlib/GroupTheory/GroupAction/Jordan.lean,Mathlib/GroupTheory/GroupAction/MultiplePrimitivity.lean,Mathlib/GroupTheory/GroupAction/MultipleTransitivity.lean,Mathlib/GroupTheory/GroupAction/Primitive.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfFixingSubgroup.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfStabilizer.lean,Mathlib/GroupTheory/Perm/Cycle/Type.lean,Mathlib/SetTheory/Cardinal/Embedding.lean 10 n/a ['AntoineChambert-Loir', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'tb65536'] nobody
8-63711
8 days ago
unknown
unknown
28241 alreadydone
author:alreadydone
chore(Data): `SetLike Finset` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 54/62 Counterexamples/AharoniKorman.lean,Mathlib/Algebra/BigOperators/Finprod.lean,Mathlib/Algebra/Group/Pointwise/Finset/Basic.lean,Mathlib/Algebra/Module/FinitePresentation.lean,Mathlib/Combinatorics/Additive/RuzsaCovering.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/WalkCounting.lean,Mathlib/Data/DFinsupp/Defs.lean,Mathlib/Data/Finset/Defs.lean,Mathlib/Data/Finset/Insert.lean,Mathlib/Data/Finset/Union.lean,Mathlib/FieldTheory/Perfect.lean,Mathlib/GroupTheory/Perm/Centralizer.lean,Mathlib/GroupTheory/Perm/Cycle/Basic.lean,Mathlib/LinearAlgebra/Finsupp/LinearCombination.lean,Mathlib/LinearAlgebra/Finsupp/Supported.lean,Mathlib/LinearAlgebra/LinearIndependent/Basic.lean,Mathlib/LinearAlgebra/LinearIndependent/Defs.lean,Mathlib/MeasureTheory/Integral/IntegrableOn.lean,Mathlib/ModelTheory/Semantics.lean,Mathlib/Order/CountableDenseLinearOrder.lean,Mathlib/Probability/Independence/Kernel.lean,Mathlib/RingTheory/Ideal/Quotient/Index.lean,Mathlib/RingTheory/IntegralClosure/IsIntegral/Basic.lean,Mathlib/RingTheory/Spectrum/Prime/Polynomial.lean,Mathlib/Topology/Separation/Basic.lean 25 1 ['github-actions'] nobody
8-58058
8 days ago
8-58058
8 days ago
8-58042
8 days
27059 Komyyy
author:Komyyy
feat: Linear upper or lower sets topologies are completely normal The primary motivation for this theorem is to prove that Sierpiński space is completely normal. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 77/1 Mathlib.lean,Mathlib/Topology/Order/UpperLowerSetTopology.lean,Mathlib/Topology/Separation/LinearUpperLowerSetTopology.lean 3 4 ['alreadydone', 'github-actions'] alreadydone
assignee:alreadydone
8-56970
8 days ago
38-72839
1 month ago
38-72822
38 days
28242 robin-carlier
author:robin-carlier
feat(CategoryTheory/Bicategory): EqToHom for bicategories We generalize the `eqToHom` construction from `Category` to `CategoryStruct`, allowing its usage in bicategorical contexts. We introduce a file `CategoryTheory/Bicategory/EqToHom` that records some of the properties of `eqToHom`s 1-morphisms and 2-morphisms, such as the transitivity up to isomorphism of `eqToHom` 1-morphisms, and congruence lemmas for unitors, associators and whiskering with respects to `eqToHom` 2-morphisms. This generalization and these congruence lemmas will be used to define icons between lax functors, and work with categories of strictly unitary lax/pseudo-functors (e.g for pseudocomposable arrows and lax-composable arrows in bicategories, which are part of the definitions of nerve constructions in bicategories). --- A follow-up PR will move some existing `eqToHom`-related lemmas from `CategoryTheory/Bicategory/Strict` to this new file. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 150/4 Mathlib.lean,Mathlib/CategoryTheory/Bicategory/EqToHom.lean,Mathlib/CategoryTheory/EqToHom.lean 3 1 ['github-actions'] nobody
8-54500
8 days ago
8-54507
8 days ago
9-44392
9 days
27634 agjftucker
author:agjftucker
fix(Analysis/Calculus/Implicit): consistently rename {`map`, `fun`, `function`} to `fun` There are several clear naming issues in the file Implicit.lean, such as ``` theorem prod_map_implicitFunction : ∀ᶠ p : F × G in 𝓝 (φ.prodFun φ.pt), φ.prodFun (φ.implicitFunction p.1 p.2) = p := ``` where `prod_map` and `prodFun` both refer to the same thing. In this PR I have done my best to resolve these as consistently as possible by renaming everything `map`, also everything `function`, to `fun`. This has the added benefit of making some long names a little shorter. In passing I rewrapped some comments and replaced `haveI` with `have` where it had been used like `haveI` in Lean 3. Moves: - ImplicitFunctionData -> ImplicitFunData - ImplicitFunctionData.implicitFunction -> ImplicitFunData.implicitFun - ImplicitFunctionData.prod_map_implicitFunction -> ImplicitFunData.prodFun_implicitFun - ImplicitFunctionData.left_map_implicitFunction -> ImplicitFunData.leftFun_implicitFun - ImplicitFunctionData.right_map_implicitFunction -> ImplicitFunData.rightFun_implicitFun - ImplicitFunctionData.implicitFunction_apply_image -> ImplicitFunData.implicitFun_apply_image - ImplicitFunctionData.implicitFunction_hasStrictFDerivAt -> ImplicitFunData.hasStrictFDerivAt_implicitFun - HasStrictFDerivAt.implicitFunctionDataOfComplemented -> HasStrictFDerivAt.implicitFunDataOfComplemented - HasStrictFDerivAt.implicitFunctionOfComplemented -> HasStrictFDerivAt.implicitFunOfComplemented - HasStrictFDerivAt.map_implicitFunctionOfComplemented_eq -> HasStrictFDerivAt.map_implicitFunOfComplemented_eq - HasStrictFDerivAt.eq_implicitFunctionOfComplemented -> HasStrictFDerivAt.eq_implicitFunOfComplemented - HasStrictFDerivAt.implicitFunctionOfComplemented_apply_image -> HasStrictFDerivAt.implicitFunOfComplemented_apply_image - HasStrictFDerivAt.to_implicitFunctionOfComplemented -> HasStrictFDerivAt.to_implicitFunOfComplemented - HasStrictFDerivAt.implicitFunction -> HasStrictFDerivAt.implicitFun - HasStrictFDerivAt.tendsto_implicitFunction -> HasStrictFDerivAt.tendsto_implicitFun - _root_.Filter.Tendsto.implicitFunction -> _root_.Filter.Tendsto.implicitFun - HasStrictFDerivAt.map_implicitFunction_eq -> HasStrictFDerivAt.map_implicitFun_eq - HasStrictFDerivAt.implicitFunction_apply_image -> HasStrictFDerivAt.implicitFun_apply_image - HasStrictFDerivAt.eq_implicitFunction -> HasStrictFDerivAt.eq_implicitFun - HasStrictFDerivAt.to_implicitFunction -> HasStrictFDerivAt.to_implicitFun --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 165/121 Mathlib/Analysis/Calculus/Implicit.lean,docs/1000.yaml,docs/overview.yaml,docs/undergrad.yaml 4 1 ['github-actions'] nobody
8-36922
8 days ago
8-36923
8 days ago
22-53509
22 days
26192 kckennylau
author:kckennylau
feat(LinearAlgebra): symmetric tensor power This file defines the symmetric tensor power of a module over a ring. The finite powers will form a grading of the symmetric algebra. The n-th symmetric R-tensor power of M will also correspond to global sections of a line bundle on Proj(M) of degree n. It also has a universal property where maps out of it correspond to symmetric multilinear forms. --- Zulip: [#mathlib4 > Proposal: Symmetric Tensor Power](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Proposal.3A.20Symmetric.20Tensor.20Power/with/524795235) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
137/0 Mathlib.lean,Mathlib/LinearAlgebra/TensorPower/Symmetric.lean 2 12 ['AntoineChambert-Loir', 'erdOne', 'eric-wieser', 'github-actions', 'kckennylau', 'mattrobball'] nobody
8-35928
8 days ago
9-69201
9 days ago
59-17977
59 days
27339 pechersky
author:pechersky
chore(RingTheory/Laurent): use WithZero.exp to golf statements and proofs about valuation on K((X)) Done as part of refactor of Valued in #27314. This PR does not change any definitions. Instead, uses `WithZero.exp` instead of coercion + Multiplicative.ofAdd. And some helper simp lemmas about valuations of RatFunc vis a vis LaurentSeries. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt t-algebra t-number-theory
label:t-algebra$
78/77 Mathlib/FieldTheory/RatFunc/AsPolynomial.lean,Mathlib/RingTheory/LaurentSeries.lean,Mathlib/Topology/Algebra/Valued/WithVal.lean 3 2 ['faenuccio', 'github-actions'] Vierkantor
assignee:Vierkantor
8-32212
8 days ago
29-42769
29 days ago
30-365
30 days
25804 erdOne
author:erdOne
feat: `∑ z ∈ L, ‖z - x‖⁻ʳ` converges for lattices `L` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #21673.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/21673* t-analysis 319/0 Mathlib.lean,Mathlib/Algebra/BigOperators/Group/Finset/Disjoint.lean,Mathlib/Algebra/Module/ZLattice/Summable.lean,Mathlib/Order/Disjointed.lean 4 3 ['github-actions', 'wwylele'] fpvandoorn
assignee:fpvandoorn
8-25364
8 days ago
69-55338
2 months ago
69-55321
69 days
27308 xyzw12345
author:xyzw12345
feat(LinearAlgebra/SymmetricAlgebra): IsSymmetricAlgebra This PR continues the work from #24602. Original PR: https://github.com/leanprover-community/mathlib4/pull/24602 t-algebra
label:t-algebra$
78/0 Mathlib/LinearAlgebra/SymmetricAlgebra/Basic.lean,Mathlib/LinearAlgebra/SymmetricAlgebra/Basis.lean 2 2 ['github-actions', 'mattrobball'] mattrobball
assignee:mattrobball
8-23550
8 days ago
31-43836
1 month ago
31-43889
31 days
22300 chrisflav
author:chrisflav
feat(RingTheory/GoingDown): lift `LTSeries` of primes Inductive version of `Ideal.exists_ideal_lt_liesOver_of_lt`. Co-authored by: Sihan Su Co-authored by: Yi Song --- - [x] depends on: #22299 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 27/0 Mathlib/RingTheory/Ideal/GoingDown.lean 1 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] alreadydone
assignee:alreadydone
8-6498
8 days ago
15-61618
15 days ago
93-37396
93 days
24533 robertmaxton42
author:robertmaxton42
feat (ULift): conjugation by ULift.up/down, misc cast/heq lemmas * Adds the convenience def `ULift.conj x := `down (f (up x))`, and corresponding basic lemmas * Adds lemmas showing that `ULift.up` and `.down` commute with casts and preserve `HEq`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 31/0 Mathlib/Data/ULift.lean 1 14 ['eric-wieser', 'github-actions', 'robertmaxton42'] ericrbg
assignee:ericrbg
8-6497
8 days ago
110-62654
3 months ago
110-70566
110 days
24829 urkud
author:urkud
fix(Topology/Homotopy): fix name&args order of `comp` `ContinuousMap.Homotopy.hcomp` used name & arguments order that matches Mathlib's category theory conventions, not topology conventions. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 30/19 Mathlib/Topology/Homotopy/Basic.lean,Mathlib/Topology/Homotopy/Contractible.lean,Mathlib/Topology/Homotopy/Equiv.lean,Mathlib/Topology/Homotopy/Lifting.lean 4 5 ['github-actions', 'grunweg', 'urkud'] grunweg
assignee:grunweg
8-6496
8 days ago
99-80701
3 months ago
99-80752
99 days
26357 javra
author:javra
feat(CategoryTheory): linear categories as `ModuleCat R`-enriched categories Continues #23826. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-category-theory 195/0 Mathlib.lean,Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean,Mathlib/CategoryTheory/Enriched/Linear.lean,Mathlib/CategoryTheory/Linear/Basic.lean,Mathlib/CategoryTheory/Monoidal/Linear.lean 5 1 ['github-actions'] adamtopaz
assignee:adamtopaz
8-6494
8 days ago
16-59890
16 days ago
57-48111
57 days
27073 pechersky
author:pechersky
feat(Archive/Examples/Local): files showcasing properties of local fields for p-adics, completions of number fields, laurent series, and fraction rings of witt vectors Should get filled in as more data/instances are declared --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-number-theory 139/0 Archive.lean,Archive/Examples/Local/Laurent.lean,Archive/Examples/Local/NumberField.lean,Archive/Examples/Local/Padic.lean,Archive/Examples/Local/Witt.lean 5 1 ['github-actions'] alexjbest
assignee:alexjbest
8-6491
8 days ago
16-60339
16 days ago
38-44101
38 days
27166 joelriou
author:joelriou
feat(AlgebraicTopology): the functor `II : SimplexCategory ⥤ SimplexCategoryᵒᵖ` by Gabriel and Zisman In this file, we construct a cosimplicial object `SimplexCategory.II` in `SimplexCategoryᵒᵖ`, i.e. a functor `SimplexCategory ⥤ SimplexCategoryᵒᵖ`. If we identify `SimplexCategory` with the category of finite nonempty linearly ordered types, this functor could be interpreted as the contravariant functor which sends a finite nonempty linearly ordered type `T` to `T →o Fin 2`; in particular, it sends `Fin (n + 1)` to a linearly ordered type which is isomorphic to `Fin (n + 2)`. As a result, we define `SimplexCategory.II` as a functor which sends `⦋n⦌` to `⦋n + 1⦌`: on morphisms, it sends faces to degeneracies and vice versa. (I plan to use this in order to show that the topological realization from simplicial sets to `TopCat` preserves finite limits (at least after forgetting the topology), following the proof by Gabriel and Zisman.) --- Suggestions for a better (short) name are welcome. `II` is the name given is the original source. - [x] depends on: #27153 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology 258/0 Mathlib.lean,Mathlib/AlgebraicTopology/SimplicialObject/II.lean 2 3 ['github-actions', 'joelriou', 'mathlib4-dependent-issues-bot'] robin-carlier
assignee:robin-carlier
8-6490
8 days ago
20-53477
20 days ago
35-71573
35 days
27638 plp127
author:plp127
feat: subsingleton `ℕ` and `ℤ` modules Provide some instances `AddCommMonoid.subsingletonNatModule` and `AddCommMonoid.subsingletonIntModule`. Also move some of the theorems about `ℕ` and `ℤ` modules from `Algebra/Module/End` to `Algebra/Module/NatInt`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
53/45 Mathlib/Algebra/Algebra/Rat.lean,Mathlib/Algebra/Module/End.lean,Mathlib/Algebra/Module/NatInt.lean,Mathlib/Algebra/Module/Submodule/RestrictScalars.lean,Mathlib/Data/ZMod/Basic.lean,Mathlib/RingTheory/OreLocalization/Ring.lean 6 3 ['github-actions', 'plp127'] mattrobball
assignee:mattrobball
8-6489
8 days ago
22-44103
22 days ago
22-44149
22 days
27659 euprunin
author:euprunin
chore(Geometry/RingedSpace): remove use of `erw` in `vPullbackConeIsLimit` t-algebraic-geometry 4/1 Mathlib/Geometry/RingedSpace/PresheafedSpace/Gluing.lean 1 1 ['github-actions'] erdOne
assignee:erdOne
8-6488
8 days ago
22-14382
22 days ago
22-14427
22 days
28321 kim-em
author:kim-em
chore: make OmegaCompletePartialOrder a mixin I've noted typeclass searches often getting distracted looking for a `OmegaCompletePartialOrder` when they just want an `LE` or a `Preorder`. Let's benchmark to see it if has a nontrivial effect. Not certain if this is desirable if the performance change is neutral (or even negative). 68/43 Mathlib/Control/LawfulFix.lean,Mathlib/Data/Nat/Nth.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean,Mathlib/Order/Category/OmegaCompletePartialOrder.lean,Mathlib/Order/OmegaCompletePartialOrder.lean,Mathlib/Topology/OmegaCompletePartialOrder.lean 6 4 ['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] nobody
7-79104
7 days ago
7-79104
7 days ago
8-2658
8 days
28292 bwangpj
author:bwangpj
feat(Geometry/Manifold/ContMDiff): add product lemmas for `ContMDiff` Add product lemmas for `ContMDiff`. These are analogous to the corresponding lemmas for `Continuous` in [`Mathlib.Topology.Constructions.SumProd`](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Constructions/SumProd.html#ContinuousAt.comp%E2%82%82). This is upstreamed from [https://github.com/girving/ray](https://github.com/girving/ray). Co-authored-by: Geoffrey Irving --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor 42/0 Mathlib/Geometry/Manifold/ContMDiff/Constructions.lean 1 1 ['github-actions'] nobody
7-77617
7 days ago
8-44322
8 days ago
8-44315
8 days
27552 Equilibris
author:Equilibris
refactor: make universe levels visible in typevec This will be needed to allow `M.corec` to be generic across universes --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor easy 16/10 Mathlib/Data/TypeVec.lean 1 9 ['Equilibris', 'eric-wieser', 'github-actions', 'plp127'] nobody
7-74045
7 days ago
8-26464
8 days ago
24-38984
24 days
28150 Equilibris
author:Equilibris
chore: clean up proofs typevec proofs While adding variable universe corecs I found a lot of theorems in typevec that could do with a bit of a clean-up --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 24/26 Mathlib/Data/TypeVec.lean 1 6 ['Equilibris', 'alexkeizer', 'github-actions'] nobody
7-66093
7 days ago
7-66093
7 days ago
11-61691
11 days
28185 Sebi-Kumar
author:Sebi-Kumar
feat(Topology/Path): add theorem about casting with rfl Prove the trivial result `p.cast rfl rfl = p` for a path `p`, which serves as a useful result for the simplifier to know. Suggested by Aaron Liu at the discussion [#Is there code for X? > Dealing with `Path.cast`](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Dealing.20with.20.60Path.2Ecast.60). --- To provide additional context, I am relatively new when it comes to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-topology easy 2/0 Mathlib/Topology/Path.lean 1 1 ['github-actions', 'kckennylau', 'plp127'] nobody
7-47078
7 days ago
7-47078
7 days ago
10-39202
10 days
28325 pechersky
author:pechersky
feat(WithZeroTopology): `locallyCompactSpace_iff_locallyFiniteOrder_units` On the way to golf/generalize the proof that locally compact valued fields have locally finite valuation groups as embodied in `Valued.integer.locallyFiniteOrder_units_mrange_of_isCompact_integer` ] --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-order t-topology 160/2 Mathlib/Topology/Algebra/GroupWithZero.lean,Mathlib/Topology/Algebra/WithZeroTopology.lean,Mathlib/Topology/Compactness/Compact.lean 3 1 ['github-actions'] nobody
7-44278
7 days ago
7-75096
7 days ago
7-77806
7 days
28350 themathqueen
author:themathqueen
feat(Topology/Algebra/Module/LinearMap): `range (f.smulRight x) = span {x}` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra t-topology
label:t-algebra$
14/0 Mathlib/Topology/Algebra/Module/LinearMap.lean 1 2 ['github-actions', 'themathqueen'] nobody
7-37264
7 days ago
7-38572
7 days ago
7-41163
7 days
28337 joelriou
author:joelriou
feat(AlgebraicTopology): nondegenerate simplices in the nerve of a partially ordered type In this PR, we show that nondegenerate simplices in the nerve of a partially ordered type `X` correspond to strictly monotone functions `Fin (n + 1) → X`. (Incidentally, better normal formal are used for the RHS of lemmas involving (non)degenerate simplices of dimension `0`.) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology 102/11 Mathlib.lean,Mathlib/AlgebraicTopology/SimplicialNerve.lean,Mathlib/AlgebraicTopology/SimplicialSet/Degenerate.lean,Mathlib/AlgebraicTopology/SimplicialSet/Nerve.lean,Mathlib/AlgebraicTopology/SimplicialSet/NerveNondegenerate.lean 5 1 ['github-actions'] nobody
7-30807
7 days ago
7-58290
7 days ago
7-58274
7 days
28182 themathqueen
author:themathqueen
feat(Data/Matrix/Basis): `center (Matrix n n α) = scalar n '' center α` The center of `Matrix n n α` is trivial for semiring `α`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 39/13 Mathlib/Algebra/Central/Matrix.lean,Mathlib/Data/Matrix/Basis.lean 2 37 ['eric-wieser', 'github-actions', 'kckennylau', 'themathqueen'] nobody
7-28560
7 days ago
10-44558
10 days ago
10-44603
10 days
26035 fbarroero
author:fbarroero
feat(Analysis/Polynomial/MahlerMeasure): the Mahler measure of a complex polynomial We introduce the Mahler measure of a complex polynomial and prove some basic facts. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 127/1 Mathlib.lean,Mathlib/Analysis/Polynomial/MahlerMeasure.lean,Mathlib/MeasureTheory/Integral/CircleIntegral.lean 3 1 ['github-actions'] fpvandoorn
assignee:fpvandoorn
7-27965
7 days ago
63-37266
2 months ago
63-37269
63 days
27934 JasperMS
author:JasperMS
feat(Order): no basic lemmas and some SuccOrder `biUnion` lemmas Documents that not all possible interval inclusion lemmas will be added to `Basic.lean`. Also proves some `biUnion` results about `SuccOrder`. ------- See also [Zulip: #mathlib4 > New contributor: #27934 (Order/Interval)](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/New.20contributor.3A.20.2327934.20.28Order.2FInterval.29). This is my first attempt at a Mathlib PR, I have worked on the [Carleson project](https://github.com/fpvandoorn/carleson) so far. I have tried to find natural homes for these results, and worked to make them as general as possible. Your feedback is welcome! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) carleson new-contributor t-order 40/10 Mathlib/Order/Interval/Set/Basic.lean,Mathlib/Order/SuccPred/Archimedean.lean,Mathlib/Order/SuccPred/IntervalSucc.lean 3 10 ['JasperMS', 'YaelDillies', 'github-actions'] YaelDillies
assignee:YaelDillies
7-26481
7 days ago
8-67647
8 days ago
16-57999
16 days
25292 YaelDillies
author:YaelDillies
feat: the `ConvexCone` generated by a set Define `ConvexCone.copy` and `ConvexCone.hull` and use them to golf the `CompleteLattice` instance. From Toric --- - [x] depends on: #25291 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-convex-geometry toric 94/35 Mathlib/Analysis/Convex/Cone/Basic.lean,Mathlib/Geometry/Convex/Cone/Basic.lean 2 8 ['YaelDillies', 'b-mehta', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] nobody
7-25500
7 days ago
24-58441
24 days ago
62-10368
62 days
27390 alreadydone
author:alreadydone
feat(FieldTheory/Galois): normal basis theorem Co-authored-by: Madison Crim @maddycrim Co-authored-by: Aaron Liu @plp127 Co-authored-by: Justus Springer @justus-springer from [*Formalizing Class Field Theory*](https://www.claymath.org/events/formalizing-class-field-theory/) --- - [x] depends on: #27355 - [x] depends on: #27368 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
156/1 Mathlib.lean,Mathlib/Algebra/Module/PID.lean,Mathlib/Algebra/Polynomial/Module/AEval.lean,Mathlib/FieldTheory/Galois/NormalBasis.lean,Mathlib/LinearAlgebra/Dual/Lemmas.lean,Mathlib/LinearAlgebra/LinearIndependent/Basic.lean,docs/references.bib 7 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
7-21364
7 days ago
7-23152
7 days ago
7-23136
7 days
27842 alreadydone
author:alreadydone
chore(MonoidLocalization): get rid of Submonoid.LocalizationWithZeroMap because every `Submonoid.LocalizationMap` automatically preserves zero. Also removes a condition from `isLeftRegular_of_le_isCancelMulZero` by proving `map_isRegular`, which is used to prove other related lemmas. `toMap_injective_iff` is moved from MonoidWithZero.lean to Basic.lean. --- `Submonoid.LocalizationMap` could potentially be made a FunLike and MonoidWithZeroHomClass, but it's also reasonable (and maybe useful) to unbundle it and use the same predicate as `IsLocalization`. - [x] depends on: #27791 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
81/98 Mathlib/GroupTheory/MonoidLocalization/Basic.lean,Mathlib/GroupTheory/MonoidLocalization/MonoidWithZero.lean,Mathlib/RingTheory/Localization/Defs.lean,Mathlib/RingTheory/OrderOfVanishing.lean 4 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
7-20849
7 days ago
18-10804
18 days ago
18-10788
18 days
24184 YaelDillies
author:YaelDillies
feat: `[G : H]` notation for the index of `H : Subgroup G` This is a cute notation which I wrote for FLT. Not sure whether we want it in mathlib nor how to include `relindex` in the picture. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra RFC
label:t-algebra$
5/0 Mathlib/GroupTheory/Index.lean 1 7 ['YaelDillies', 'erdOne', 'github-actions', 'j-loreaux', 'kbuzzard'] eric-wieser
assignee:eric-wieser
7-6502
7 days ago
100-81946
3 months ago
124-19663
124 days
25736 robin-carlier
author:robin-carlier
feat(AlgebraicTopology/SimplexCategory/GeneratorsRelations/NormalForms): Normal forms for `P_σ`s We prove that admissible lists indeed provide a normal form for morphisms of satisfying `P_σ`. To this end, we introduce `standardσ`, a construction that takes a list and turn it into a composition of `σ i`s in `SimplexCategoryGenRel`. We then prove that, thangs to the fifth simplicial identity, composition on the right corresponds to simplicial insertion in the list. This gives existence of a normal form for every morphism satisfying `P_σ`. For unicity, we introduce an auxiliary function `simplicialEvalσ : (List ℕ) → ℕ → ℕ` and show that for admissible lists, it lifts to `ℕ` the `orderHom` attached to `toSimplexCategory.map standardσ`, and that we can recover elements of the list only by looking at values of this function. Part of a series of PR formalising that `SimplexCategoryGenRel` is equivalent to `SimplexCategory`. --- - [x] depends on: #21744 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #21745.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/21745* t-algebraic-topology large-import 253/7 Mathlib/AlgebraicTopology/SimplexCategory/GeneratorsRelations/NormalForms.lean 1 2 ['github-actions', 'mathlib4-dependent-issues-bot'] mattrobball
assignee:mattrobball
7-6501
7 days ago
20-53690
20 days ago
69-69854
69 days
25947 qawbecrdtey
author:qawbecrdtey
feat(Data/Nat/Factors): added lemmas including `primeFactorsList_length_ne_zero` --- Added lemmas `primeFactorsList_length_ne_zero`, `primeFactorsList_prime_iff`, and `primeFactorsList_length_eq_one`. ```lean theorem primeFactorsList_length_ne_zero (n : ℕ) : n.primeFactorsList.length ≠ 0 ↔ 2 ≤ n theorem primeFactorsList_prime_iff {p : ℕ} : p.primeFactorsList = [p] ↔ p.Prime @[simp] theorem primeFactorsList_length_eq_one (n : ℕ) : n.primeFactorsList.length = 1 ↔ n.Prime ``` [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 21/3 Mathlib/Data/Nat/Factors.lean 1 5 ['Ruben-VandeVelde', 'github-actions', 'qawbecrdtey'] ericrbg
assignee:ericrbg
7-6500
7 days ago
65-58303
2 months ago
65-66904
65 days
26332 Timeroot
author:Timeroot
feat(ModelTheory/Definability): TermDefinable functions This PR continues the work from #23506. Original PR: https://github.com/leanprover-community/mathlib4/pull/23506 large-import t-logic 159/0 Mathlib/Data/Rel.lean,Mathlib/ModelTheory/Definability.lean,scripts/noshake.json 3 2 ['Timeroot', 'github-actions'] fpvandoorn
assignee:fpvandoorn
7-6499
7 days ago
16-59854
16 days ago
57-85547
57 days
27754 Parcly-Taxel
author:Parcly-Taxel
feat: `finCycle` as iterated `finRotate` Originally used in #25786, but eventually discovered to be unnecessary. t-logic 26/5 Mathlib/Logic/Equiv/Fin/Rotate.lean 1 1 ['github-actions'] fpvandoorn
assignee:fpvandoorn
7-6494
7 days ago
20-41250
20 days ago
20-41304
20 days
27790 pechersky
author:pechersky
feat(Topology): `IsDenseInducing.isUniformInducing_extend` extending along a uniform inducing function with another uniform inducing function with dense ranges of both creates a uniform inducing extension golfs a proof in #27696 and discussed in https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/isUniformInducing_extension --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 113/0 Mathlib/Data/Set/Operations.lean,Mathlib/Topology/Constructions.lean,Mathlib/Topology/DenseEmbedding.lean,Mathlib/Topology/UniformSpace/AbstractCompletion.lean,Mathlib/Topology/UniformSpace/Completion.lean,Mathlib/Topology/UniformSpace/UniformEmbedding.lean 6 3 ['github-actions', 'plp127'] ocfnash
assignee:ocfnash
7-6493
7 days ago
20-16700
20 days ago
20-16732
20 days
28374 euprunin
author:euprunin
chore(Analysis/CStarAlgebra/Module): golf entire `map_top_submodule` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 1/5 Mathlib/Analysis/CStarAlgebra/Module/Synonym.lean 1 1 ['github-actions'] nobody
6-81098
6 days ago
6-81739
6 days ago
6-81786
6 days
28371 euprunin
author:euprunin
chore(Analysis/SpecialFunctions/Pow): golf entire `tendsto_rpow_atBot_of_base_gt_one` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 1/5 Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean 1 1 ['github-actions'] nobody
6-81067
6 days ago
6-82090
6 days ago
6-82136
6 days
28379 euprunin
author:euprunin
chore(Analysis/NormedSpace/OperatorNorm): golf entire `opNorm_subsingleton` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 1/5 Mathlib/Analysis/NormedSpace/OperatorNorm/Basic.lean 1 1 ['github-actions'] nobody
6-80135
6 days ago
6-80463
6 days ago
6-80509
6 days
28381 euprunin
author:euprunin
chore(Analysis/Asymptotics): golf `isLittleO_pow_sub_pow_sub` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 1/4 Mathlib/Analysis/Asymptotics/Lemmas.lean 1 1 ['github-actions'] nobody
6-79910
6 days ago
6-79952
6 days ago
6-80001
6 days
28384 euprunin
author:euprunin
chore(Algebra/Order/Ring): golf entire `cast_natAbs` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
1/4 Mathlib/Algebra/Order/Ring/Cast.lean 1 1 ['github-actions'] nobody
6-79265
6 days ago
6-79274
6 days ago
6-79320
6 days
28385 euprunin
author:euprunin
chore(Algebra/BigOperators/Finsupp): golf entire `Finsupp.sum_sum_index` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
1/4 Mathlib/Algebra/BigOperators/Finsupp/Basic.lean 1 1 ['github-actions'] nobody
6-79185
6 days ago
6-79195
6 days ago
6-79240
6 days
28378 euprunin
author:euprunin
chore(Algebra): golf entire `eq_lift_comp_mkRingHom` and `eq_liftAlgHom_comp_mkAlgHom` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
4/8 Mathlib/Algebra/RingQuot.lean 1 1 ['github-actions'] nobody
6-69116
6 days ago
6-80758
6 days ago
6-80803
6 days
28376 euprunin
author:euprunin
chore(Analysis/Calculus/Deriv): golf entire `differentiableAt_comp_const_add` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 2/6 Mathlib/Analysis/Calculus/Deriv/Add.lean 1 1 ['github-actions'] nobody
6-69106
6 days ago
6-81282
6 days ago
6-81327
6 days
28373 euprunin
author:euprunin
chore(AlgebraicGeometry/Morphisms): golf entire `isOpenImmersion_iff_stalk` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-geometry 1/4 Mathlib/AlgebraicGeometry/Morphisms/OpenImmersion.lean 1 1 ['github-actions'] nobody
6-68799
6 days ago
6-81860
6 days ago
6-81914
6 days
28398 euprunin
author:euprunin
chore(Data/TypeVec): deprecate `subtypeVal_diagSub` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 2/8 Mathlib/Data/TypeVec.lean 1 1 ['github-actions'] nobody
6-67633
6 days ago
6-67634
6 days ago
6-67688
6 days
28399 Ruben-VandeVelde
author:Ruben-VandeVelde
feat: ring-theoretic fractions in Rat --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 47/0 Mathlib.lean,Mathlib/RingTheory/Localization/Rat.lean 2 0 [] nobody
6-65843
6 days ago
6-65912
6 days ago
6-65895
6 days
26448 YaelDillies
author:YaelDillies
refactor: simplify `(f₁ ⊗ₘ f₂) ≫ (g₁ ⊗ₘ g₂)` to `(f₁ ≫ g₁) ⊗ₘ (f₂ ≫ g₂)` ... instead of the other way around. This is motivated by the fact that homs happening "in parallel" is a non-concept (time along a branch can always be reparametrised), while homs happening "in series" is a well-defined concept. One should not simp the well-defined concept into the non-concept but instead the other way around. This is also motivated by the advent of the `mon_tauto` simp set in #26057. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-category-theory 115/119 Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean,Mathlib/Algebra/Category/ModuleCat/Presheaf/Monoidal.lean,Mathlib/CategoryTheory/Bicategory/End.lean,Mathlib/CategoryTheory/Dialectica/Monoidal.lean,Mathlib/CategoryTheory/Enriched/Basic.lean,Mathlib/CategoryTheory/Enriched/FunctorCategory.lean,Mathlib/CategoryTheory/GradedObject/Braiding.lean,Mathlib/CategoryTheory/GradedObject/Monoidal.lean,Mathlib/CategoryTheory/Localization/Monoidal.lean,Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean,Mathlib/CategoryTheory/Monoidal/Braided/Reflection.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Basic.lean,Mathlib/CategoryTheory/Monoidal/Category.lean,Mathlib/CategoryTheory/Monoidal/Free/Basic.lean,Mathlib/CategoryTheory/Monoidal/Functor.lean,Mathlib/CategoryTheory/Monoidal/FunctorCategory.lean,Mathlib/CategoryTheory/Monoidal/Internal/Limits.lean,Mathlib/CategoryTheory/Monoidal/Limits/Basic.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Monoidal/NaturalTransformation.lean,Mathlib/CategoryTheory/Monoidal/Opposite.lean,Mathlib/CategoryTheory/Monoidal/Preadditive.lean,Mathlib/CategoryTheory/Monoidal/Transport.lean,Mathlib/CategoryTheory/Monoidal/Types/Coyoneda.lean 24 15 ['YaelDillies', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot', 'robin-carlier', 'yuma-mizuno'] kim-em
assignee:kim-em
6-58901
6 days ago
6-58968
6 days ago
52-26127
52 days
26988 YaelDillies
author:YaelDillies
feat(Rel): more API Some of this API already exists in `Topology.UniformSpace.Defs` but not spelled with `SetRel`, some of it was written for #24173. --- `Topology.UniformSpace.Defs` will be refactored to use these new lemmas in #23181. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 179/8 Mathlib/Combinatorics/SimpleGraph/Basic.lean,Mathlib/Data/Rel.lean 2 2 ['github-actions', 'mathlib4-merge-conflict-bot'] nobody
6-58517
6 days ago
7-73928
7 days ago
40-48168
40 days
28220 kim-em
author:kim-em
chore: cleanup three #adaptation_notes --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge 5/26 Mathlib/Data/Bool/Basic.lean,Mathlib/Logic/Function/Defs.lean,Mathlib/Tactic/NormNum/Pow.lean 3 6 ['bryangingechen', 'github-actions', 'grunweg', 'kim-em', 'mathlib4-merge-conflict-bot'] nobody
6-57072
6 days ago
7-11568
7 days ago
9-27470
9 days
27288 themathqueen
author:themathqueen
chore(LinearAlgebra/TensorProduct/Basic): semi-linearize `map` and `lift` Semi-linearizing `TensorProduct.map`. Part of #27353. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
40/27 Mathlib/Algebra/Category/ModuleCat/ChangeOfRings.lean,Mathlib/LinearAlgebra/TensorProduct/Basic.lean,Mathlib/RingTheory/Coalgebra/Hom.lean 3 5 ['ADedecker', 'eric-wieser', 'github-actions', 'themathqueen'] ADedecker
assignee:ADedecker
6-56242
6 days ago
16-19463
16 days ago
27-42796
27 days
28178 joelriou
author:joelriou
feat(CategoryTheory): locally presentable and accessible categories In this PR, we introduce the notions of locally presentable and locally accessible categories. The definitions involve the existence of certain colimits, and the fact that any object identifies as a filtered colimit of a given set of presentable objects. In particular, we show that in these categories, all the objects are presentable. --- This PR continues the work from #20263. Original PR: https://github.com/leanprover-community/mathlib4/pull/20263 t-category-theory 265/3 Mathlib.lean,Mathlib/CategoryTheory/Presentable/Basic.lean,Mathlib/CategoryTheory/Presentable/CardinalFilteredPresentation.lean,Mathlib/CategoryTheory/Presentable/LocallyPresentable.lean,Mathlib/SetTheory/Cardinal/HasCardinalLT.lean 5 n/a ['github-actions'] nobody
6-54639
6 days ago
unknown
unknown
28356 JovanGerb
author:JovanGerb
chore(Data/Rat/Cast/CharZero): rename `Rat.cast_mk` to `Rat.cast_divInt` The symbol `/.` is notation for `Rat.divInt`, not `Rat.mk`, so this PR renames `Rat.cast_mk` to `Rat.cast_divInt`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 5/3 Mathlib/Data/Rat/Cast/CharZero.lean,Mathlib/Data/Rat/Defs.lean,Mathlib/Data/Real/Irrational.lean 3 1 ['github-actions'] nobody
6-52616
6 days ago
7-26415
7 days ago
7-26461
7 days
28390 euprunin
author:euprunin
chore(Analysis/LocallyConvex): golf entire `polar_weak_closed` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 1/4 Mathlib/Analysis/LocallyConvex/Polar.lean 1 1 ['JonBannon', 'github-actions'] nobody
6-51448
6 days ago
6-78459
6 days ago
6-78504
6 days
28377 euprunin
author:euprunin
chore(Algebra/ContinuedFractions/Computation): golf `get?_of_eq_some_of_get?_intFractPair_stream_fr_ne_zero` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
2/4 Mathlib/Algebra/ContinuedFractions/Computation/Translations.lean 1 1 ['JonBannon', 'github-actions'] nobody
6-51209
6 days ago
6-81092
6 days ago
6-81139
6 days
28057 plp127
author:plp127
feat(SuccOrder): simp lemma to refold `Order.succ` and `Order.pred` Adds `SuccOrder.succ_eq_succ` and `PredOrder.pred_eq_pred` to refold `SuccOrder.succ` and `PredOrder.pred` into `Order.succ` and `Order.pred`. These lemmas are marked `@[simp]`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 8/2 Mathlib/Order/SuccPred/Basic.lean 1 3 ['YaelDillies', 'github-actions', 'plp127', 'vihdzp'] bryangingechen
assignee:bryangingechen
6-50596
6 days ago
14-31775
14 days ago
14-31825
14 days
27875 grunweg
author:grunweg
style(AkraBazzi): use more standard indentation Also do some minor golfing, such as removing superfluous `by exact` or using `filter_upwards` slightly more. --- - [x] depends on: #27871 to avoid conflicts [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-computability 576/586 Mathlib/Computability/AkraBazzi/AkraBazzi.lean,Mathlib/Computability/AkraBazzi/SumTransform.lean 2 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
6-47652
6 days ago
6-47983
6 days ago
6-59468
6 days
28404 joelriou
author:joelriou
feat(AlgebraicTopology): the covariant involution of SimplexCategory In this PR, we introduce the functor `rev : SimplexCategory ⥤ SimplexCategory` which, via the equivalence between the simplex category and the category of nonempty finite linearly ordered types, corresponds to the *covariant* functor which sends a type `α` to `αᵒᵈ`. We also define the induced functors/equivalences on simplicial objects and simplicial sets. This is introduced in order to handle the symmetry between horns (some combinatorial results shall be shown for all horns but one: this symmetry will allow to deduce the remaining case). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology 187/0 Mathlib.lean,Mathlib/AlgebraicTopology/SimplexCategory/Rev.lean,Mathlib/AlgebraicTopology/SimplicialObject/Rev.lean,Mathlib/AlgebraicTopology/SimplicialSet/Rev.lean,Mathlib/CategoryTheory/Whiskering.lean 5 1 ['github-actions'] nobody
6-46011
6 days ago
6-47098
6 days ago
6-47082
6 days
24015 alreadydone
author:alreadydone
feat(RingTheory): lemmas on finiteness of `LinearMap` and `Module.End` --- One less lemma than #24012, but with the advantage of not depending on #23963. - [x] depends on: #24115 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 137/79 Mathlib/Algebra/Module/LinearMap/End.lean,Mathlib/GroupTheory/GroupAction/SubMulAction.lean,Mathlib/LinearAlgebra/BilinearMap.lean,Mathlib/LinearAlgebra/Dual/Lemmas.lean,Mathlib/LinearAlgebra/Projection.lean,Mathlib/RingTheory/Finiteness/Basic.lean,Mathlib/RingTheory/SimpleModule/Basic.lean 7 26 ['alreadydone', 'erdOne', 'eric-wieser', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'leanprover-community-mathlib4-bot', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'themathqueen'] erdOne
assignee:erdOne
6-45199
6 days ago
6-45251
6 days ago
126-12323
126 days
28375 euprunin
author:euprunin
chore(Analysis/SpecialFunctions/Pow): golf entire `rpow_lt_rpow_of_exponent_neg`, `rpow_le_rpow_of_exponent_nonpos`, `rpow_le_of_le_log` and `rpow_lt_of_lt_log` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 8/22 Mathlib/Analysis/SpecialFunctions/Pow/Real.lean 1 2 ['JonBannon', 'Ruben-VandeVelde', 'github-actions'] nobody
6-44949
6 days ago
6-81401
6 days ago
6-81446
6 days
28389 euprunin
author:euprunin
chore(Algebra/Group/Subgroup): golf entire `subgroupOf_sup` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
2/6 Mathlib/Algebra/Group/Subgroup/Ker.lean 1 1 ['Ruben-VandeVelde', 'github-actions'] nobody
6-44448
6 days ago
6-78589
6 days ago
6-78634
6 days
27672 b-reinke
author:b-reinke
feat(GroupTheory/FreeGroup): add definition of cyclically reduced words This PR adds the definition of cyclically reduced words for free groups. It is a part of a series of PR on the theory of cyclically reduced words. Upstreamed from the [EquationalTheories](https://github.com/teorth/equational_theories) project. - [ ] depends on: #25966 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-group-theory 72/0 Mathlib.lean,Mathlib/GroupTheory/FreeGroup/CyclicallyReduced.lean 2 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
6-41671
6 days ago
6-41689
6 days ago
6-44823
6 days
28312 LLaurance
author:LLaurance
feat(Combinatorics/SimpleGraph): minimum degree of nontrivial tree is one Add basic facts about nontrivial preconnected SimpleGraphs and that a nontrivial tree has a vertex of degree one. The motivation for this is to ultimately show that any connected graph contains a vertex that, when removed, leaves the graph connected. Any connected graph has a spanning tree which contains a vertex of degree one that fulfils the role of the vertex to be removed. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-combinatorics 33/2 Mathlib/Combinatorics/SimpleGraph/Acyclic.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/Connected.lean 2 6 ['LLaurance', 'eric-wieser', 'github-actions'] nobody
6-36151
6 days ago
8-14012
8 days ago
8-22150
8 days
23986 ShouxinZhang
author:ShouxinZhang
feat(FieldTheory/RatFunc): add RatFunc.toFractionRingAlgEquiv --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
12/2 Mathlib/FieldTheory/RatFunc/Basic.lean 1 33 ['ShouxinZhang', 'eric-wieser', 'github-actions', 'joneugster', 'kckennylau', 'mathlib4-merge-conflict-bot', 'plp127'] kim-em
assignee:kim-em
6-35051
6 days ago
6-35058
6 days ago
129-78799
129 days
28416 Timeroot
author:Timeroot
feat(Topology/Order): Add OrderIso.instContinuousMapClass saying that ``` instance {α : Type u_1} {β : Type u_2} [Preorder α] [Preorder β] [TopologicalSpace α] [TopologicalSpace β] [OrderTopology α] [OrderTopology β] : ContinuousMapClass (α ≃o β) α β where map_continuous := OrderIso.continuous ``` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 3/0 Mathlib/Topology/Order/MonotoneContinuity.lean 1 1 ['github-actions'] nobody
6-33456
6 days ago
6-33456
6 days ago
6-33532
6 days
28419 euprunin
author:euprunin
chore(Data/Matroid/Rank): deprecate `Indep.exists_insert_of_encard_lt` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 2/8 Mathlib/Data/Matroid/Rank/ENat.lean 1 1 ['github-actions'] nobody
6-30732
6 days ago
6-30732
6 days ago
6-30785
6 days
26403 riccardobrasca
author:riccardobrasca
feat: add `isPrincipalIdealRing_of_isPrincipal_of_lt_or_isPrincipal_of_mem_primesOver_of_mem_Icc` This PR continues the work from #25186. Original PR: https://github.com/leanprover-community/mathlib4/pull/25186 maintainer-merge t-number-theory 49/13 Mathlib/NumberTheory/NumberField/ClassNumber.lean 1 8 ['faenuccio', 'github-actions', 'grunweg', 'loefflerd', 'riccardobrasca', 'xroblot'] faenuccio and jcommelin
assignee:jcommelin assignee:faenuccio
6-30546
6 days ago
6-30546
6 days ago
56-45221
56 days
28420 euprunin
author:euprunin
chore(Data/Nat/Digits): deprecate `coe_int_ofDigits` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 2/6 Mathlib/Data/Nat/Digits/Defs.lean,Mathlib/Data/Nat/Digits/Lemmas.lean 2 1 ['github-actions'] nobody
6-30199
6 days ago
6-30205
6 days ago
6-30251
6 days
28421 euprunin
author:euprunin
chore(Probability/Kernel): golf entire `measurable_condExpKernel` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 1/6 Mathlib/Probability/Kernel/Condexp.lean 1 1 ['github-actions'] nobody
6-30085
6 days ago
6-30099
6 days ago
6-30145
6 days
28422 euprunin
author:euprunin
chore(Data/Fin): deprecate `Fin.mul_one'` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 3/8 Mathlib/Data/Fin/Basic.lean,Mathlib/Data/ZMod/Defs.lean 2 2 ['eric-wieser', 'github-actions'] nobody
6-28527
6 days ago
6-29736
6 days ago
6-29787
6 days
28426 euprunin
author:euprunin
chore(NumberTheory/NumberField/CanonicalEmbedding): golf entire `measurableSet_interior_paramSet` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-number-theory 1/6 Mathlib/NumberTheory/NumberField/CanonicalEmbedding/NormLeOne.lean 1 1 ['github-actions'] nobody
6-27375
6 days ago
6-27375
6 days ago
6-27429
6 days
28427 euprunin
author:euprunin
chore(LinearAlgebra/Matrix/Charpoly): deprecate `det_of_card_zero` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
3/7 Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean 1 1 ['github-actions'] nobody
6-27373
6 days ago
6-27378
6 days ago
6-27423
6 days
28428 euprunin
author:euprunin
chore(Topology): deprecate `mem_iff_one_sub_mem` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 3/5 Mathlib/Analysis/Normed/Unbundled/SmoothingSeminorm.lean,Mathlib/Topology/UnitInterval.lean 2 1 ['github-actions'] nobody
6-27116
6 days ago
6-27186
6 days ago
6-27169
6 days
28429 euprunin
author:euprunin
chore(GroupTheory/Perm/Cycle): golf entire `Disjoint.cycleType_mul` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-group-theory 1/6 Mathlib/GroupTheory/Perm/Cycle/Type.lean 1 1 ['github-actions'] nobody
6-26884
6 days ago
6-26901
6 days ago
6-26948
6 days
28393 tristan-f-r
author:tristan-f-r
chore(WithZero): clean We replace `erw` this with defeq abuse (which seems to be accepted as okay inside proofs), and clean up the rest of the file. I might start trying to remove `erw`s in Mathlib. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data easy 14/16 Mathlib/Data/Int/WithZero.lean 1 7 ['Ruben-VandeVelde', 'github-actions', 'tristan-f-r'] nobody
6-26765
6 days ago
6-72131
6 days ago
6-75056
6 days
26534 winstonyin
author:winstonyin
feat: IsIntegralCurve for solutions to ODEs I define `IsIntegralCurve` etc. for solutions to ODEs on vector spaces. The translation and scaling lemmas are also included. This parallels `IsMIntegralCurve` etc. for manifolds. Question for reviewers: how should I state the deprecation notice? - [ ] depends on: #26563 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-dynamics t-analysis t-differential-geometry 0/0 0 7 ['github-actions', 'grunweg', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'winstonyin'] nobody
6-26540
6 days ago
6-26561
6 days ago
6-27338
6 days
28430 euprunin
author:euprunin
chore(RingTheory/UniqueFactorizationDomain): deprecate `dvd_of_mem_normalizedFactors` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 37/40 Mathlib/NumberTheory/NumberField/ClassNumber.lean,Mathlib/NumberTheory/RamificationInertia/Basic.lean,Mathlib/RingTheory/ChainOfDivisors.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean,Mathlib/RingTheory/Radical.lean,Mathlib/RingTheory/UniqueFactorizationDomain/NormalizedFactors.lean 6 1 ['github-actions'] nobody
6-26450
6 days ago
6-26526
6 days ago
6-26509
6 days
28432 euprunin
author:euprunin
chore(CategoryTheory/Monoidal): golf entire `counitInv_app_comp_functor_map_η_inverse` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 2/5 Mathlib/CategoryTheory/Monoidal/Functor.lean 1 1 ['github-actions'] nobody
6-25821
6 days ago
6-25828
6 days ago
6-25877
6 days
28433 euprunin
author:euprunin
chore(Probability/Kernel): golf entire `snd_compProd_prodMkLeft` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 1/5 Mathlib/Probability/Kernel/Composition/Prod.lean 1 1 ['github-actions'] nobody
6-25680
6 days ago
6-25717
6 days ago
6-25763
6 days
28434 euprunin
author:euprunin
chore(FieldTheory/IntermediateField/Adjoin): golf entire `adjoin.range_algebraMap_subset` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
2/5 Mathlib/FieldTheory/IntermediateField/Adjoin/Defs.lean 1 1 ['github-actions'] nobody
6-25575
6 days ago
6-25584
6 days ago
6-25632
6 days
28435 euprunin
author:euprunin
chore(RingTheory/Valuation): golf entire `algebraMap_injective` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 2/5 Mathlib/RingTheory/Valuation/Extension.lean 1 1 ['github-actions'] nobody
6-25435
6 days ago
6-25449
6 days ago
6-25494
6 days
28437 euprunin
author:euprunin
chore(Data/Finset): deprecate `exists_ne_of_one_lt_card` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 7/11 Mathlib/Algebra/Group/UniqueProds/Basic.lean,Mathlib/Data/Finset/Card.lean,Mathlib/Data/Set/Card.lean,Mathlib/GroupTheory/Perm/Cycle/Type.lean,Mathlib/LinearAlgebra/Matrix/SemiringInverse.lean 5 1 ['github-actions'] nobody
6-23788
6 days ago
6-23856
6 days ago
6-23839
6 days
28439 euprunin
author:euprunin
chore(LinearAlgebra/Matrix/Determinant): golf entire `det_eq_zero_of_not_linearIndependent_rows` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
1/5 Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean 1 1 ['github-actions'] nobody
6-23522
6 days ago
6-23529
6 days ago
6-23576
6 days
28445 mitchell-horner
author:mitchell-horner
feat: `one_sub_one_div_cast_*` theorems --- Needed for a proof of the Erdős-Stone-Simonovits theorem in future PR. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 18/0 Mathlib/Data/Nat/Cast/Order/Field.lean 1 1 ['github-actions'] nobody
6-17636
6 days ago
6-17644
6 days ago
6-17690
6 days
25831 ScottCarnahan
author:ScottCarnahan
feat (RingTheory/HahnSeries): Powers of a binomial This PR introduces powers of a binomial `single g 1 - single g' 1` in a Hahn series, where the powers take values in a binomial ring. These series behave as one would expect with respect to addition of powers, and comparison with natural number powers. They are often used in the theory of vertex algebras. --- - [x] depends on: #25830 - [x] depends on: #27497 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #24102.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24102* t-ring-theory 111/0 Mathlib.lean,Mathlib/RingTheory/HahnSeries/Binomial.lean,Mathlib/RingTheory/HahnSeries/HEval.lean,Mathlib/RingTheory/HahnSeries/Multiplication.lean 4 5 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
6-15754
6 days ago
6-15953
6 days ago
6-17416
6 days
28386 euprunin
author:euprunin
chore(Analysis/InnerProductSpace/Projection): golf entire `orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 1/3 Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean 1 2 ['JonBannon', 'github-actions'] nobody
6-10157
6 days ago
6-78930
6 days ago
6-78980
6 days
28441 euprunin
author:euprunin
chore(GroupTheory/Perm): golf entire `mem_of_formPerm_ne_self` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-group-theory 2/5 Mathlib/GroupTheory/Perm/List.lean 1 1 ['JonBannon', 'github-actions'] nobody
6-10016
6 days ago
6-20942
6 days ago
6-20991
6 days
25491 tannerduve
author:tannerduve
feat(Control/Monad/Free): define free monad, prove it lawful, and implement standard effects This PR introduces the `Free` monad. This implementation uses the "freer monad" approach as the traditional free monad (eg from [Haskell](https://hackage.haskell.org/package/free-5.2/docs/Control-Monad-Free.html)) is not safely definable in Lean due to termination checking (it's not strictly positive). The main contributions are: * Definition of the `Free` monad as an inductive type which generates a monad given any type constructor `F : Type -> Type`. * Functor and Monad instances for `Free F`, along with proofs of the `LawfulFunctor` and `LawfulMonad` laws. * Canonical instances of `Free` with standard effect signatures: * `FreeState s` for stateful computations, defined via a `StateF s` functor with `get` and `put` operations. * `FreeWriter w` for logging computations, defined via a `WriterF w` functor with a `tell` operation. * `FreeCont r` for continuation-passing computations, using the CPS functor `(α → r) → r`. In this construction, computations are represented as **trees of effects**. Each node (`liftBind`) represents a request to perform an effect, accompanied by a continuation specifying how the computation proceeds after the effect. The leaves (`pure`) represent completed computations with final results. A key insight is that `FreeM F` satisfies the **universal property of free monads**: for any monad `M` and effect handler `f : F → M`, there exists a unique way to interpret `FreeM F` computations in `M` that respects the effect semantics given by `f`. This unique interpreter is `liftM f`, which acts as the canonical **fold** for free monads. To execute or interpret these computations, we provide two approaches: 1. **Hand-written interpreters** (`FreeState.run`, `FreeWriter.run`, `FreeCont.run`) that directly pattern-match on the tree structure 2. **Canonical interpreters** (`FreeState.toStateM`, `FreeWriter.toWriteT`, `FreeCont.toContT`) derived from the universal property via `liftM` And then prove that these approaches are equivalent --- This PR adds new files and definitions; no breaking changes. **Tags:** free monad, freer monad, effect systems, state monad, writer monad, continuation monad, operational semantics, verified interpreters t-data maintainer-merge 696/0 Mathlib.lean,Mathlib/Control/Monad/Free.lean,Mathlib/Control/Monad/Free/Effects.lean,MathlibTest/freemonad.lean,docs/references.bib 5 147 ['YaelDillies', 'copilot-pull-request-reviewer', 'eric-wieser', 'github-actions', 'plp127', 'quangvdao', 'srghma', 'tannerduve'] ericrbg
assignee:ericrbg
6-6493
6 days ago
64-42296
2 months ago
74-61378
74 days
27516 gaetanserre
author:gaetanserre
feat: add rational approximation lemma for suprema in `unitInterval` Add `sSup_eq_iUnion_rat` lemma that provides a rational approximation characterization of suprema in the unit interval. For monotone functions `f : α → I → ℝ`, the lemma establishes that the set of pairs where `a < sSup {x | f e.1 x < e.2}` equals the union over all rationals `q ∈ I` with `q > a` of the sets `{e | f e.1 q < e.2}`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 21/0 Mathlib/Topology/UnitInterval.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] ocfnash
assignee:ocfnash
6-6485
6 days ago
15-27875
15 days ago
25-23248
25 days
27817 zhuyizheng
author:zhuyizheng
feat: add IMO2025P1 Add a solution to IMO2025P1, the original problem statement from https://github.com/jsm28/IMOLean --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) IMO new-contributor 1443/0 Archive.lean,Archive/Imo/Imo2025Q1.lean 2 1 ['github-actions'] dwrensha
assignee:dwrensha
6-6482
6 days ago
19-51859
19 days ago
19-51907
19 days
27849 robin-carlier
author:robin-carlier
feat(CategoryTheory/Bicategory/Functor): strictly unitary lax/pseudo functors We define strictly unitary lax/pseudo functors between bicategories. A lax (resp. pseudo-)functor from `C` to `D` is strictly unitary if `F.map(𝟙 X) = 𝟙 (F.obj X)` and if the 2-cell `mapId` is the identity 2-cell induced by this equality. We provide a constructor for those that do not require the `mapId` field. Although this structure is somewhat "evil" from a purely categorical perspective (it mentions non-definitonal equality of objects in a 1-category), these class of functors are of interest: strictly unitary lax functors are part of the definition of the Duskin nerve of a bicategory (which embeds bicategories in the theory of simplicial sets), while strictly unitary pseudofunctors are part of the definition of the 2-nerve of a bicategory, which embeds bicategories into the theory of simplicial categories. This PR is part of an ongoing work that will hopefully culminate with the construction of the Duskin Nerve, as well as a proof of the fact that the Duskin nerve of a locally groupoidal bicategory is a quasicategory. --- Two designs were possible here: making `StrictlyUnitary` a class on lax/pseudo-functors to state that some functors/constructions are strictly unitary, or bundling it as a structure on its own. Since my plan for the follow-up PRs is to use the type of strictly lax unitary functors between some bicategories (e.g to define lax-composable arrows in a bicategory `C`, which will be by definition `StrictlyUnitaryLaxFunctor (LocallyDiscrete (Fin n)) C`), I chose to bundle them directly, to avoid an extra layer when working with the type of those objects. I did include strict associativity for strictly unitary lax functors but not for pseudofunctors. The reason is that the Duskin nerve mentions the 1-category of bicategories and strictly unitary lax functors (hence, this strict associativity/unitality), but the 2-nerve mentions the bicategory of bicategories, strictly unitary pseudofunctors and "icons" (identity-component oplax natural transformations): the statement for associativity for pseudofunctors will wait for icons, and will probably not be stated as an equality of pseudofunctors. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 318/0 Mathlib.lean,Mathlib/CategoryTheory/Bicategory/Functor/StrictlyUnitary.lean 2 1 ['github-actions'] adamtopaz
assignee:adamtopaz
6-6480
6 days ago
19-23519
19 days ago
19-23572
19 days
27946 plp127
author:plp127
refactor: have `MetrizableSpace` not depend on `MetricSpace` Some theorems for uniform spaces with a countably generated uniformity do not mention their uniformity in any of the hypotheses or the conclusion (for example `UniformSpace.isCompact_iff_isSeqCompact`). This PR allows those theorems to be stated for (pseudo)metrizable spaces without importing the real numbers. See also #2032 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 129/102 Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Topology/Compactness/PseudometrizableLindelof.lean,Mathlib/Topology/GDelta/MetrizableSpace.lean,Mathlib/Topology/Metrizable/Basic.lean,Mathlib/Topology/Metrizable/ContinuousMap.lean,Mathlib/Topology/Metrizable/Real.lean,Mathlib/Topology/Metrizable/Uniformity.lean 7 7 ['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] urkud
assignee:urkud
6-6479
6 days ago
15-61164
15 days ago
16-26645
16 days
28452 plp127
author:plp127
feat: Define `ZMod.fintype` without cases Define `ZMod.fintype` without casing on `n` except inside the proof. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 2/3 Mathlib/Data/ZMod/Defs.lean 1 1 ['github-actions'] nobody
6-1527
6 days ago
6-1547
6 days ago
6-1593
6 days
27163 pechersky
author:pechersky
feat(Topology/ValuativeRel): of and to basis of compatible valuations --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra t-topology t-number-theory
label:t-algebra$
205/25 Mathlib/RingTheory/Valuation/ValuativeRel.lean,Mathlib/Topology/Algebra/Valued/ValuativeRel.lean 2 26 ['github-actions', 'kckennylau', 'mathlib4-merge-conflict-bot', 'pechersky'] nobody
5-83909
5 days ago
7-39468
7 days ago
36-19788
36 days
28458 pechersky
author:pechersky
feat(RingTheory/RootsOfUnity): trivial root of unity: `HasEnoughRootsOfUnity M 1` On the way to (p - 1)-roots of unity of Z_p. This deals with the p = 2 case. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory t-algebra easy
label:t-algebra$
6/0 Mathlib/RingTheory/RootsOfUnity/Basic.lean,Mathlib/RingTheory/RootsOfUnity/EnoughRootsOfUnity.lean 2 1 ['github-actions'] nobody
5-73146
5 days ago
5-73160
5 days ago
5-73208
5 days
27283 Louddy
author:Louddy
feat(SkewMonoidAlgebra): maps on/to SkewMonoidAlgebra Add the definition of many maps regarding skew monoid algebras and lemmas associated to them. These all have their analogues for `MonoidAlgebra`. Co-authored-by: María Inés de Frutos Fernández <[mariaines.dff@gmail.com](mailto:mariaines.dff@gmail.com)> --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra
label:t-algebra$
237/0 Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] riccardobrasca
assignee:riccardobrasca
5-66873
5 days ago
5-66895
5 days ago
32-37062
32 days
28457 euprunin
author:euprunin
chore(LinearAlgebra/AffineSpace): deprecate `coe_injective` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-algebra
label:t-algebra$
2/5 Mathlib/LinearAlgebra/AffineSpace/ContinuousAffineEquiv.lean 1 2 ['Ruben-VandeVelde', 'github-actions'] nobody
5-66541
5 days ago
5-66541
5 days ago
5-73730
5 days
27464 IvanRenison
author:IvanRenison
feat(Combinatorics/SimpleGraph/Paths): add lemma `SimpleGraph.Walk.IsPath.ne_of_mem_support_of_append` This contribution was created as part of the Utrecht Summerschool "Formalizing Mathematics in Lean" in July 2025. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-combinatorics 22/0 Mathlib/Combinatorics/SimpleGraph/Paths.lean 1 4 ['IvanRenison', 'b-mehta', 'github-actions', 'mathlib4-merge-conflict-bot'] b-mehta
assignee:b-mehta
5-66380
5 days ago
5-66401
5 days ago
25-13782
25 days
27461 IvanRenison
author:IvanRenison
feat(Combinatorics/SimpleGraph/Paths): add lemma `SimpleGraph.Walk.IsPath.mem_support_iff_exists_append` This contribution was created as part of the Utrecht Summerschool "Formalizing Mathematics in Lean" in July 2025. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-combinatorics 14/0 Mathlib/Combinatorics/SimpleGraph/Paths.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] awainverse
assignee:awainverse
5-66173
5 days ago
5-66190
5 days ago
26-41553
26 days
27253 Louddy
author:Louddy
feat(SkewMonoidAlgebra): SkewMonoidAlgebra/Support Add lemmas regarding the support of a skew monoid algebra. It is currently missing a few (Edit: 1!) lemmas compared to `MonoidAlgebra.support`. (See TODO.) These will be added as more results are available on `SkewMonoidAlgebra`. Co-authored-by: María Inés de Frutos Fernández <[mariaines.dff@gmail.com](mailto:mariaines.dff@gmail.com)> --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
128/0 Mathlib.lean,Mathlib/Algebra/SkewMonoidAlgebra/Support.lean 2 2 ['Louddy', 'github-actions'] riccardobrasca
assignee:riccardobrasca
5-60130
5 days ago
33-45766
1 month ago
33-45779
33 days
28464 robin-carlier
author:robin-carlier
chore(CategoryTheory/Bicategory/Basic): extra `hom_inv_id` and `inv_hom_id` lemmas Add lemmas of the form `f ◁ g ◁ η.inv ≫ f ◁ g ◁ η.hom = 𝟙 _`. These lemmas are easy but `simp` automation keeps failing to see them in practice. --- It is somewhat annoying that these have to be added by hand. `grind`-based automation will be better at this by tagging `[grind _=_] whiskerLeft_comp`, but in cases where we need to fall back to `simp`-based automation these should still be useful and shave off some `simp only [← whiskerLeft_comp, …]` in some proofs. Hopefully we won’t need to write the same lemmas for extra applications of whiskerings! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 30/0 Mathlib/CategoryTheory/Bicategory/Basic.lean 1 1 ['github-actions'] nobody
5-59183
5 days ago
5-59250
5 days ago
5-59298
5 days
28467 gasparattila
author:gasparattila
chore: make `AffineSubspace.toAddTorsor` and `AffineSubspace.nonempty_map` instances The loops with the `Nonempty` instances are no longer an issue in Lean 4. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor 3/35 Mathlib/Analysis/Convex/Intrinsic.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Geometry/Euclidean/Circumcenter.lean,Mathlib/Geometry/Euclidean/Projection.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Basic.lean,Mathlib/LinearAlgebra/AffineSpace/Restrict.lean,Mathlib/LinearAlgebra/AffineSpace/Simplex/Basic.lean,Mathlib/Topology/Algebra/AffineSubspace.lean 8 1 ['github-actions'] nobody
5-48805
5 days ago
5-50480
5 days ago
5-50472
5 days
28470 EtienneC30
author:EtienneC30
feat: ofLp and toLp are continuously differentiable --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 24/1 Mathlib/Analysis/Calculus/ContDiff/WithLp.lean 1 1 ['github-actions'] nobody
5-47333
5 days ago
5-47413
5 days ago
5-47398
5 days
28471 EtienneC30
author:EtienneC30
feat: toLp and ofLp are injective --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 6/0 Mathlib/Analysis/Normed/Lp/WithLp.lean 1 1 ['github-actions'] nobody
5-47311
5 days ago
5-47395
5 days ago
5-47381
5 days
28473 EtienneC30
author:EtienneC30
feat: toLp and ofLp are analytic --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 42/0 Mathlib.lean,Mathlib/Analysis/Analytic/WithLp.lean 2 1 ['github-actions'] nobody
5-46992
5 days ago
5-47083
5 days ago
5-47068
5 days
26075 xroblot
author:xroblot
feat(NumberField/Units): compute index of unit subgroups using regulators - [x] depends on: #25730 t-number-theory 81/3 Mathlib/GroupTheory/Index.lean,Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean,Mathlib/NumberTheory/NumberField/Units/Regulator.lean 3 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'xroblot'] nobody
5-41465
5 days ago
5-41484
5 days ago
5-44881
5 days
28474 astrainfinita
author:astrainfinita
feat: add `ContinuousSMul` instances for `ℚ≥0` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) bench-after-CI t-algebra t-topology
label:t-algebra$
14/0 Mathlib/Topology/Instances/Rat.lean 1 8 ['astrainfinita', 'github-actions', 'themathqueen'] nobody
5-40208
5 days ago
5-40208
5 days ago
5-47011
5 days
26588 faenuccio
author:faenuccio
feat(Algebra/GroupWithZero/WithZero): add the multiplicative embedding with zero from the range We extend the embedding of the range of a `MonoidWithZeroHom` to the codomain by enriching it with the strucutre of an ordered, multiplicative embedding. In passing, we extend some results about the embedding of `WithZero` of the units of a group with zero, to the group itself. Co-authored by: María Inés de Frutos Fernández @mariainesdff --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order t-algebra
label:t-algebra$
145/10 Mathlib.lean,Mathlib/Algebra/GroupWithZero/Range.lean,Mathlib/Algebra/GroupWithZero/WithZero.lean,Mathlib/Algebra/Order/GroupWithZero/Range.lean,Mathlib/Algebra/Order/GroupWithZero/WithZero.lean,Mathlib/Algebra/Order/Monoid/WithTop.lean 6 27 ['faenuccio', 'github-actions', 'leanprover-community-bot-assistant', 'pechersky'] nobody
5-39523
5 days ago
7-46910
7 days ago
12-66997
12 days
28487 euprunin
author:euprunin
chore(RingTheory): golf entire `smul_eq_zero_of_mem`, `hasEval`, `eq_of_prod_eq_prod` and `isIntegral_of_mem_ringOfIntegers` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 7/16 Mathlib/RingTheory/Extension/Basic.lean,Mathlib/RingTheory/PowerSeries/Substitution.lean,Mathlib/RingTheory/UniqueFactorizationDomain/FactorSet.lean,Mathlib/RingTheory/Valuation/AlgebraInstances.lean 4 1 ['github-actions'] nobody
5-37476
5 days ago
5-37488
5 days ago
5-37535
5 days
28488 euprunin
author:euprunin
chore(SetTheory): golf entire `cast_succ`, `mk_multiset_of_countable` and `iSup_succ` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-set-theory 6/11 Mathlib/SetTheory/Cardinal/Basic.lean,Mathlib/SetTheory/Cardinal/Finsupp.lean,Mathlib/SetTheory/Ordinal/Family.lean 3 1 ['github-actions'] nobody
5-37464
5 days ago
5-37474
5 days ago
5-37520
5 days
28489 joelriou
author:joelriou
feat(CategoryTheory): weaken assumptions for the stability of the left lifting property under transfinite compositions This PR introduces two predicates `HasLiftingPropertyFixedBot/Top` which assert the existence of a lifting in squares when the left/right/top (resp. left/right/bottom) morphisms are fixed. (This weakens the `HasLiftingProperty` class which assumes there is a lifting when we only fix the left and right morphisms.) The `HasLiftingPropertyFixedTop` variant shall be used in the study of the homotopy theory of Kan complexes. Hopefully, the `HasLiftingPropertyFixedBot` variant will be used in the formalization of the model category structure on simplicial sets: this is the reason why this PR also weakens the assumptions in the proof that the left lifting property with respect to certain morphisms is stable under transfinite composition. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 28/2 Mathlib/CategoryTheory/LiftingProperties/Basic.lean,Mathlib/CategoryTheory/SmallObject/TransfiniteCompositionLifting.lean 2 1 ['github-actions'] nobody
5-34632
5 days ago
5-34632
5 days ago
5-34617
5 days
23497 chrisflav
author:chrisflav
chore(RingTheory/AdicCompletion/AsTensorProduct): golf using five lemma for modules --- - [x] depends on: #23496 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
30/81 Mathlib/RingTheory/AdicCompletion/AsTensorProduct.lean 1 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] nobody
5-33917
5 days ago
5-33939
5 days ago
79-10540
79 days
28490 euprunin
author:euprunin
chore: golf entire `epi_of_cokernel_π_eq_zero`, `bottom_row_coprime`, `congr_of_eventuallyEq` and `Invertible.congr` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 8/12 Mathlib/Algebra/Group/Invertible/Defs.lean,Mathlib/CategoryTheory/Abelian/Basic.lean,Mathlib/NumberTheory/Modular.lean,Mathlib/Topology/ContinuousOn.lean 4 1 ['github-actions'] nobody
5-32874
5 days ago
5-32951
5 days ago
5-32935
5 days
28491 euprunin
author:euprunin
chore(MeasureTheory/Measure): deprecate `injective_diracProba_of_T0` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 2/8 Mathlib/MeasureTheory/Measure/DiracProba.lean 1 1 ['github-actions'] nobody
5-32348
5 days ago
5-32354
5 days ago
5-32401
5 days
28484 euprunin
author:euprunin
chore(Data): golf entire `add_one_le_exp_of_nonneg`, `toReal_eq_toReal`, `count_eq_of_nodup`, `smul_mat_cons` and `coe_inj` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 8/13 Mathlib/Data/ENNReal/Real.lean,Mathlib/Data/List/Nodup.lean,Mathlib/Data/Matrix/Notation.lean,Mathlib/Data/Matroid/Minor/Restrict.lean 4 1 ['github-actions'] nobody
5-32179
5 days ago
5-39980
5 days ago
5-40028
5 days
28486 euprunin
author:euprunin
chore(Order): golf entire `map_covBy`, `covBy_of_apply`, `map_wcovBy`, `wcovBy_of_apply`, `ne_bot_of_ne_top'`, `insert_Icc_left_eq_Icc_pred` and `insert_Icc_right_eq_Icc_succ` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 14/24 Mathlib/Order/Cover.lean,Mathlib/Order/Disjoint.lean,Mathlib/Order/Interval/Set/SuccPred.lean 3 1 ['github-actions'] nobody
5-31165
5 days ago
5-38927
5 days ago
5-39126
5 days
28492 euprunin
author:euprunin
chore(Data/Finite): golf entire `card_le_of_injective`, `card_le_of_surjective` and `card_sum` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 6/13 Mathlib/Data/Finite/Card.lean 1 1 ['github-actions'] nobody
5-30057
5 days ago
5-30070
5 days ago
5-30114
5 days
26489 chrisflav
author:chrisflav
refactor(RingTheory/RingHom): factor out proofs for `Algebra.FinitePresentation` The current way to use locality of a given property of algebras is to convert everything into the language of `RingHom`s and then for example the `RingHom.OfLocalizationSpanTarget` API. This has two disadvantages: 1. The ring hom property API fixes the universes of source and target to be the same, hence we unnecessarily lose out on some universe generality. 2. The results for `RingHom`s are proven by translating everything in terms of `Algebra`, so we duplicate the translation steps. This PR refactors `RingHom.FinitePresentation` to do all locality proofs in the language of `Algebra`s and translate it into the corresponding `RingHom.OfLocalizationSpan{Target}` in the last step. We also streamline some of the translation proofs by unifying the API. --- - [x] depends on: #22931 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) This PR continues the work from #22930. Original PR: https://github.com/leanprover-community/mathlib4/pull/22930 t-algebra
label:t-algebra$
60/76 Mathlib/RingTheory/RingHom/FinitePresentation.lean 1 5 ['chrisflav', 'erdOne', 'github-actions', 'mathlib4-dependent-issues-bot'] kim-em
assignee:kim-em
5-26180
5 days ago
53-47263
1 month ago
53-47310
53 days
24794 chrisflav
author:chrisflav
feat(RingTheory/Presentation): core of a presentation If `P` is a presentation of `S` as an `R`-algebra and `R₀` a subring of `R` containing the coefficients of the relations of `P`, then there exists an `R₀`-algebra `S₀` such that `S` is isomorphic to the base change of `S₀` to `R`. This is a tool to remove Noetherian hypothesis in certain situations. --- - [x] depends on: #24788 - [x] depends on: #24786 - [x] depends on: #24785 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 266/3 Mathlib.lean,Mathlib/Algebra/Algebra/Subalgebra/Basic.lean,Mathlib/Algebra/Algebra/Subalgebra/Tower.lean,Mathlib/Algebra/Algebra/Tower.lean,Mathlib/RingTheory/AlgebraicIndependent/Transcendental.lean,Mathlib/RingTheory/Extension/Presentation/Core.lean,Mathlib/RingTheory/FiniteType.lean,Mathlib/RingTheory/Ideal/Quotient/Basic.lean,Mathlib/RingTheory/TensorProduct/MvPolynomial.lean 9 12 ['chrisflav', 'erdOne', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] Vierkantor
assignee:Vierkantor
5-24228
5 days ago
15-61737
15 days ago
72-67297
72 days
28493 gasparattila
author:gasparattila
feat: topological affine spaces This PR adds a typeclass `IsTopologicalAddTorsor` for topological affine spaces and generalizes several results which currently assume `NormedAddTorsor`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor 386/289 Mathlib/Algebra/AddTorsor/Basic.lean,Mathlib/Analysis/Calculus/AddTorsor/AffineMap.lean,Mathlib/Analysis/Complex/AbsMax.lean,Mathlib/Analysis/Normed/Affine/AddTorsor.lean,Mathlib/Analysis/Normed/Affine/ContinuousAffineMap.lean,Mathlib/Analysis/Normed/Affine/Convex.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Analysis/Normed/Group/AddTorsor.lean,Mathlib/Analysis/Normed/Module/FiniteDimension.lean,Mathlib/Analysis/Normed/Operator/Banach.lean,Mathlib/Analysis/RCLike/Lemmas.lean,Mathlib/Geometry/Euclidean/Projection.lean,Mathlib/Geometry/Euclidean/Triangle.lean,Mathlib/Topology/Algebra/Affine.lean,Mathlib/Topology/Algebra/ContinuousAffineMap.lean,Mathlib/Topology/Algebra/Group/Pointwise.lean 16 1 ['github-actions'] nobody
5-23944
5 days ago
5-26644
5 days ago
5-26692
5 days
28501 dtumad
author:dtumad
feat(Data/Set): show the `Alternative` instance on `Set` is lawful This PR adds a `LawfulAlternative` instance for `Set`, and also exposes the lawful instances for `SetM`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 25/0 Mathlib/Data/Set/Functor.lean 1 1 ['github-actions'] nobody
5-12986
5 days ago
5-12986
5 days ago
5-13038
5 days
25776 Parcly-Taxel
author:Parcly-Taxel
chore: deprime `induction` in `Analysis` I think this is very marginally dependent on #25770. tech debt t-analysis 256/208 Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/Constructions.lean,Mathlib/Analysis/Analytic/Inverse.lean,Mathlib/Analysis/BoxIntegral/Basic.lean,Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean,Mathlib/Analysis/BoxIntegral/Partition/Additive.lean,Mathlib/Analysis/BoxIntegral/Partition/Split.lean,Mathlib/Analysis/CStarAlgebra/Basic.lean,Mathlib/Analysis/CStarAlgebra/Multiplier.lean,Mathlib/Analysis/Calculus/ContDiff/Basic.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Calculus/ContDiff/FTaylorSeries.lean,Mathlib/Analysis/Calculus/ContDiff/Operations.lean,Mathlib/Analysis/Calculus/Deriv/ZPow.lean,Mathlib/Analysis/Calculus/InverseFunctionTheorem/ApproximatesLinearOn.lean,Mathlib/Analysis/Calculus/IteratedDeriv/Lemmas.lean,Mathlib/Analysis/Calculus/SmoothSeries.lean,Mathlib/Analysis/Convex/Combination.lean,Mathlib/Analysis/Convex/Radon.lean,Mathlib/Analysis/InnerProductSpace/Projection/FiniteDimensional.lean,Mathlib/Analysis/Normed/Algebra/Exponential.lean,Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean,Mathlib/Analysis/Seminorm.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean,Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Basic.lean,Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Analysis/SpecialFunctions/Pow/Real.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/EulerSineProd.lean 35 4 ['Parcly-Taxel', 'github-actions', 'leanprover-community-bot-assistant', 'madvorak', 'mathlib4-merge-conflict-bot'] grunweg
assignee:grunweg
5-6512
5 days ago
12-37480
12 days ago
67-49392
67 days
26961 mariainesdff
author:mariainesdff
feat(RingTheory/PowerSeries/Substitution): add API Co-authored-by: @AntoineChambert-Loir --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 62/1 Mathlib/RingTheory/PowerSeries/Basic.lean,Mathlib/RingTheory/PowerSeries/Substitution.lean 2 5 ['Ruben-VandeVelde', 'github-actions', 'mariainesdff'] mattrobball
assignee:mattrobball
5-6512
5 days ago
15-62100
15 days ago
41-58095
41 days
27117 pechersky
author:pechersky
feat(NumberTheory): `IsDiscreteValuationRing (v.adicCompletionIntegers K)` as well as the base ring that is not completed the proofs are basically identical which means there is some missing API but this is the shortest route to getting local fields ready and showing that `K_v` is locally compact --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) - [x] depends on: #27112 - [x] depends on: #27111 - [x] depends on: #27114 - [ ] depends on: #27116 t-algebra t-analysis t-number-theory
label:t-algebra$
48/0 Mathlib/NumberTheory/NumberField/FinitePlaces.lean 1 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] jcommelin
assignee:jcommelin
5-6511
5 days ago
12-34282
12 days ago
12-37175
12 days
27453 pechersky
author:pechersky
feat(Topology/UniformSpace/Ultra): completion is ultra uniformity iff base is Supersedes #24628 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 159/5 Mathlib.lean,Mathlib/Order/Filter/NAry.lean,Mathlib/Order/Filter/Prod.lean,Mathlib/Topology/Constructions/SumProd.lean,Mathlib/Topology/UniformSpace/Defs.lean,Mathlib/Topology/UniformSpace/Ultra/Basic.lean,Mathlib/Topology/UniformSpace/Ultra/Completion.lean 7 1 ['github-actions'] ocfnash
assignee:ocfnash
5-6510
5 days ago
27-6704
27 days ago
27-6699
27 days
27720 peabrainiac
author:peabrainiac
feat(CategoryTheory/Adjunction): lemmas on adjoint quadruples Lemmas about adjoint quadruples `L ⊣ F ⊣ G ⊣ R` where some of the functors are fully faithful: * If `F` and `R` are fully faithful, the components of the induced natural transformation `G ⟶ L` are epic iff the components of the natural transformation `F ⟶ R` are monic. * If `L` and `G` are fully faithful, the components of the induced natural transformation `L ⟶ G` are epic iff the components of the natural transformation `R ⟶ F` are monic. A variant of the first case appears as proposition 2.7 on the nlab [here](https://ncatlab.org/nlab/show/cohesive+topos); the second case is dual. From [lean-orbifolds](https://github.com/peabrainiac/lean-orbifolds/blob/d599ff5f39aa831e8fa79b2f2fa7178b36bcbafd/Orbifolds/ForMathlib/Quadruple.lean). --- Continued / revived from #24667. t-category-theory 178/0 Mathlib.lean,Mathlib/CategoryTheory/Adjunction/Quadruple.lean,Mathlib/CategoryTheory/Adjunction/Triple.lean,Mathlib/CategoryTheory/Category/Basic.lean,Mathlib/CategoryTheory/EpiMono.lean 5 2 ['github-actions', 'peabrainiac'] robin-carlier
assignee:robin-carlier
5-6509
5 days ago
20-70780
20 days ago
20-71487
20 days
27965 grunweg
author:grunweg
feat: verify that file names contain no forbidden characters Follow-up to #27588: Windows also forbids certain characters in file names. I snuck in a change to also disallow `!` (which causes problems on Nix OS) and `.` (i.e., #27944) --- that would have caught the error in #27796, and may indicate confusion of file and module names. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) file-removed t-linter maintainer-merge 72/42 Mathlib/Tactic/Linter/TextBased.lean,MathlibTest/ForbiddenModuleNames.lean,MathlibTest/ForbiddenWindows.lean,scripts/lint-style.lean 4 11 ['YaelDillies', 'adomani', 'github-actions', 'grunweg'] joneugster
assignee:joneugster
5-6508
5 days ago
15-31803
15 days ago
15-64085
15 days
28091 ShreckYe
author:ShreckYe
feat(Algebra/Order/Floor): a variant of `Nat.ceil_lt_add_one` with its condition `0 ≤ a` generalized to `-1 < a` new-contributor t-algebra
label:t-algebra$
15/0 Mathlib/Algebra/Order/Floor/Ring.lean 1 3 ['Ruben-VandeVelde', 'github-actions', 'themathqueen'] mattrobball
assignee:mattrobball
5-6506
5 days ago
13-34201
13 days ago
13-34246
13 days
28102 eric-wieser
author:eric-wieser
feat: nontriviality of `SeparationQuotient` iff the topology is nontrivial This contains the mathematical content of [#Is there code for X? > Typeclass for nontrivial topology @ 💬](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Typeclass.20for.20nontrivial.20topology/near/533192558), without yet committing to any designated API to make it easier to use. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 34/0 Mathlib/Topology/Inseparable.lean,Mathlib/Topology/Order.lean 2 4 ['eric-wieser', 'github-actions', 'plp127'] PatrickMassot
assignee:PatrickMassot
5-6505
5 days ago
13-9937
13 days ago
13-9929
13 days
26358 plp127
author:plp127
feat(Topology): R1 spaces are quasisober This PR continues the work from #24054. Original PR: https://github.com/leanprover-community/mathlib4/pull/24054 t-topology 24/9 Mathlib/Topology/Separation/Hausdorff.lean,Mathlib/Topology/Sober.lean 2 26 ['faenuccio', 'github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot', 'plp127'] nobody
5-5432
5 days ago
5-8521
5 days ago
46-78264
46 days
28132 dupuisf
author:dupuisf
feat: preliminary `grind` tags for `IsUnit` This PR adds preliminary `grind` tags for the `IsUnit` predicate. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
61/17 Mathlib/Algebra/Group/Action/Units.lean,Mathlib/Algebra/Group/Units/Defs.lean,Mathlib/Algebra/GroupWithZero/Units/Basic.lean,Mathlib/Algebra/Ring/Units.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Order.lean,Mathlib/Analysis/SpecialFunctions/ContinuousFunctionalCalculus/Rpow/Basic.lean 6 2 ['github-actions', 'mathlib4-merge-conflict-bot'] nobody
5-2831
5 days ago
5-2831
5 days ago
5-2815
5 days
28507 euprunin
author:euprunin
chore: remove debug output ("Unpacked in […] ms") from `lake exe cache get` output --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 0/2 Cache/IO.lean 1 1 ['github-actions'] nobody
4-78821
4 days ago
4-78894
4 days ago
4-78878
4 days
28034 joelriou
author:joelriou
feat(AlgebraicTopology): the type of simplices of a simplicial set This PR introduces the type of simplices of a simpliciai set `X`, as a structure containing the dimension `dim`, and a simplex in `X _⦋dim⦌`. --- - [x] depends on: #27968 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology 150/0 Mathlib.lean,Mathlib/AlgebraicTopology/SimplicialSet/Simplices.lean 2 4 ['github-actions', 'joelriou', 'mathlib4-dependent-issues-bot', 'robin-carlier'] robin-carlier
assignee:robin-carlier
4-72067
4 days ago
4-72067
4 days ago
5-35540
5 days
28443 mitchell-horner
author:mitchell-horner
feat: `filter_disjiUnion` --- Needed for a proof of the Erdős-Stone-Simonovits theorem in future PR. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 8/0 Mathlib/Data/Finset/Union.lean 1 3 ['github-actions', 'mitchell-horner', 'plp127'] nobody
4-66822
4 days ago
6-17921
6 days ago
6-17981
6 days
27260 JovanGerb
author:JovanGerb
feat(Geometry/Euclidean/SignedDist): `signedDist` between two points original PR: #24245 This PR defines `signedDist`, the signed distance between two points. TODO: It redefines `signedInfDist` so that it uses `signedDist`. The motivation is to use this in IMO2020Q6. Additionally this definition will be useful for properly reasoning about the power of a point [#mathlib4 > Signed distance between points](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Signed.20distance.20between.20points) some comments: * should `signedDistLinear` be `private`? * I'm not too happy about the hypothesis in `signedDist_congr (h : ∃ r > (0 : ℝ), r • v = w)`. This relationship between `v` and `w` is a symmetric one that should have some API around it, similar to `SameRay`. It could also be spelled as `(ℝ≥0 ∙ v) = ℝ≥0 ∙ w` --- - [x] depends on: #27259 - [ ] depends on : #27285 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-euclidean-geometry 205/28 Mathlib/Analysis/InnerProductSpace/Basic.lean,Mathlib/Geometry/Euclidean/SignedDist.lean 2 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] nobody
4-66362
4 days ago
4-66386
4 days ago
9-36657
9 days
26428 Ruben-VandeVelde
author:Ruben-VandeVelde
feat: norm_num support for Int.fract --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 61/0 Mathlib/Data/Rat/Floor.lean,MathlibTest/norm_num_ext.lean 2 5 ['Rob23oba', 'github-actions'] ericrbg
assignee:ericrbg
4-60913
4 days ago
55-19348
1 month ago
55-64107
55 days
28512 euprunin
author:euprunin
chore(Data/List): golf entire `getLast_append_of_right_ne_nil` and `finRange_map_getElem` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 4/9 Mathlib/Data/List/Basic.lean,Mathlib/Data/List/FinRange.lean 2 1 ['github-actions'] nobody
4-60299
4 days ago
4-60299
4 days ago
4-60353
4 days
26785 TOMILO87
author:TOMILO87
feat: beta distribution Add the Beta distribution to the probability distributions in mathlib4 This PR introduces the Beta distribution on the reals. Main definitions: - betaPDFReal (α β x : ℝ) — the probability density function as a real-valued function - betaPDF (α β x : ℝ) — the pdf as a ℝ≥0∞-valued function - betaMeasure (α β : ℝ) — the probability measure associated with the Beta distribution Main results: - lintegral_betaPDF_eq_one — proof that the pdf integrates to 1 (normalization) - Lemmas on positivity, measurability, and integrability of the pdf - isProbabilityMeasureBeta — the Beta measure is a probability measure Notes: - Follows the general structure of other distributions in mathlib (e.g. Gamma). - Several unused helper lemmas were removed, and proofs streamlined in response to reviewer feedback. - Thanks to @EtienneC30 and @RemyDegenne for detailed reviews across multiple rounds. This is a clean version of the PR originally opened as [#25608](https://github.com/leanprover-community/mathlib4/pull/25608) and temporarily migrated in [#26325](https://github.com/leanprover-community/mathlib4/pull/26325). new-contributor t-measure-probability 206/2 Mathlib.lean,Mathlib/Algebra/Polynomial/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Probability/Distributions/Beta.lean 4 33 ['EtienneC30', 'RemyDegenne', 'TOMILO87', 'github-actions'] EtienneC30
assignee:EtienneC30
4-58268
4 days ago
4-58268
4 days ago
35-71022
35 days
28520 chrisflav
author:chrisflav
chore(Data): add `Finset.exists_injOn_image_eq_of_surjOn` Prerequisite for #27508. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
18/0 Mathlib/Data/Set/Finite/Basic.lean,Mathlib/Data/Set/Function.lean,Mathlib/Logic/Function/Basic.lean 3 8 ['YaelDillies', 'chrisflav', 'github-actions'] nobody
4-38226
4 days ago
4-46420
4 days ago
4-46406
4 days
27094 smorel394
author:smorel394
feat(Algebra.Category.FGModuleCat.Colimits): the category of finitely generated modules has finite colimits Prove that the forgetful functor from `FGModuleCat k` to `ModuleCat k` creates finite colimits, and hence that `FGModuleCat k` has finite colimits. - [ ] depends on: #27092 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
68/0 Mathlib.lean,Mathlib/Algebra/Category/FGModuleCat/Colimits.lean 2 6 ['github-actions', 'leanprover-community-bot-assistant', 'mariainesdff', 'mathlib4-dependent-issues-bot'] mariainesdff
assignee:mariainesdff
4-31772
4 days ago
21-28379
21 days ago
21-29557
21 days
28508 euprunin
author:euprunin
chore(Algebra/Polynomial): golf entire `homOfEq_heq` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 2/2 Mathlib/Combinatorics/Quiver/Basic.lean 1 1 ['github-actions'] nobody
4-30170
4 days ago
4-77408
4 days ago
4-77392
4 days
28271 euprunin
author:euprunin
chore(LinearAlgebra/AffineSpace): golf 11 lines from `affineIndependent_iff_indicator_eq_of_affineCombination_eq` using `simp_all` ---
Show trace profiling of affineIndependent_iff_indicator_eq_of_affineCombination_eq: 150 ms before, 132 ms after 🎉 ### Trace profiling of `affineIndependent_iff_indicator_eq_of_affineCombination_eq` before PR 28271 ```diff diff --git a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean index 3058d16cf1..470fccd236 100644 --- a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean +++ b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean @@ -171,6 +171,7 @@ theorem linearIndependent_set_iff_affineIndependent_vadd_union_singleton {s : Se exact Set.diff_singleton_eq_self fun h => hs 0 h rfl rw [h] +set_option trace.profiler true in /-- A family is affinely independent if and only if any affine combinations (with sum of weights 1) that evaluate to the same point have equal `Set.indicator`. -/ ``` ``` ℹ [1164/1164] Built Mathlib.LinearAlgebra.AffineSpace.Independent info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.command] [0.018489] /-- A family is affinely independent if and only if any affine combinations (with sum of weights 1) that evaluate to the same point have equal `Set.indicator`. -/ theorem affineIndependent_iff_indicator_eq_of_affineCombination_eq (p : ι → P) : AffineIndependent k p ↔ ∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 := by classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.definition.header] [0.013425] affineIndependent_iff_indicator_eq_of_affineCombination_eq [Elab.step] [0.013346] expected type: Prop, term AffineIndependent k p ↔ ∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.013341] expected type: Prop, term Iff✝ (AffineIndependent k p) (∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2) [Elab.step] [0.012551] expected type: Prop, term ∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.012396] expected type: Sort ?u.14914, term ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.010706] expected type: Sort ?u.15054, term ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.010237] expected type: Sort ?u.15095, term s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.async] [0.152838] elaborating proof of affineIndependent_iff_indicator_eq_of_affineCombination_eq [Elab.definition.value] [0.149786] affineIndependent_iff_indicator_eq_of_affineCombination_eq [Elab.step] [0.146682] classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.146678] classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.146673] classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.146464] constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.146457] constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.077731] · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] [Elab.step] [0.077721] intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] [Elab.step] [0.077717] intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] [Elab.step] [0.048167] · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.048160] rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.048155] rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.023372] have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] [Elab.step] [0.023334] focus refine no_implicit_lambda% (have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.023329] refine no_implicit_lambda% (have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.023326] refine no_implicit_lambda% (have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014578] case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014523] with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014520] with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014516] with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014513] (simp [hw1, hw2]) [Elab.step] [0.014509] simp [hw1, hw2] [Elab.step] [0.014506] simp [hw1, hw2] [Elab.step] [0.014499] simp [hw1, hw2] [Elab.step] [0.010284] exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.026518] · rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] [Elab.step] [0.026312] rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] [Elab.step] [0.026305] rw [← Finset.mem_coe, Finset.coe_union] at hi have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h simp [h₁, h₂] [Elab.step] [0.010278] have h₁ : Set.indicator (↑s1) w1 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h [Elab.step] [0.010254] focus refine no_implicit_lambda% (have h₁ : Set.indicator (↑s1) w1 i = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" ( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h) [Elab.step] [0.010250] refine no_implicit_lambda% (have h₁ : Set.indicator (↑s1) w1 i = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" ( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h) [Elab.step] [0.010246] refine no_implicit_lambda% (have h₁ : Set.indicator (↑s1) w1 i = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" ( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h) [Elab.step] [0.010365] have h₂ : Set.indicator (↑s2) w2 i = 0 := by simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h [Elab.step] [0.010302] focus refine no_implicit_lambda% (have h₂ : Set.indicator (↑s2) w2 i = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" ( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h) [Elab.step] [0.010297] refine no_implicit_lambda% (have h₂ : Set.indicator (↑s2) w2 i = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" ( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h) [Elab.step] [0.010293] refine no_implicit_lambda% (have h₂ : Set.indicator (↑s2) w2 i = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" ( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] intro h by_contra exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h) [Elab.step] [0.068628] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.068581] intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.068575] intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.014691] have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.014544] focus refine no_implicit_lambda% (have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.014538] refine no_implicit_lambda% (have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.014534] refine no_implicit_lambda% (have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012772] case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012745] with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012742] with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012738] with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012734] (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012730] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.012727] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.012720] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.017729] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] [Elab.step] [0.017704] focus refine no_implicit_lambda% (have hw2s : s.affineCombination k p w2 = p i0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.017699] refine no_implicit_lambda% (have hw2s : s.affineCombination k p w2 = p i0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.017695] refine no_implicit_lambda% (have hw2s : s.affineCombination k p w2 = p i0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.014054] case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.013988] with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.013985] with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.013982] with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.013979] (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.013976] simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] [Elab.step] [0.013973] simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] [Elab.step] [0.013967] simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] Build completed successfully. ``` ### Trace profiling of `affineIndependent_iff_indicator_eq_of_affineCombination_eq` after PR 28271 ```diff diff --git a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean index 3058d16cf1..64f9f68b47 100644 --- a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean +++ b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean @@ -171,6 +171,7 @@ theorem linearIndependent_set_iff_affineIndependent_vadd_union_singleton {s : Se exact Set.diff_singleton_eq_self fun h => hs 0 h rfl rw [h] +set_option trace.profiler true in /-- A family is affinely independent if and only if any affine combinations (with sum of weights 1) that evaluate to the same point have equal `Set.indicator`. -/ @@ -195,18 +196,7 @@ theorem affineIndependent_iff_indicator_eq_of_affineCombination_eq (p : ι → P Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi - · rw [← Finset.mem_coe, Finset.coe_union] at hi - have h₁ : Set.indicator (↑s1) w1 i = 0 := by - simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] - intro h - by_contra - exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h - have h₂ : Set.indicator (↑s2) w2 i = 0 := by - simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff] - intro h - by_contra - exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h - simp [h₁, h₂] + · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by ``` ``` ℹ [1164/1164] Built Mathlib.LinearAlgebra.AffineSpace.Independent info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.command] [0.018359] /-- A family is affinely independent if and only if any affine combinations (with sum of weights 1) that evaluate to the same point have equal `Set.indicator`. -/ theorem affineIndependent_iff_indicator_eq_of_affineCombination_eq (p : ι → P) : AffineIndependent k p ↔ ∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 := by classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.definition.header] [0.014185] affineIndependent_iff_indicator_eq_of_affineCombination_eq [Elab.step] [0.014114] expected type: Prop, term AffineIndependent k p ↔ ∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.014109] expected type: Prop, term Iff✝ (AffineIndependent k p) (∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2) [Elab.step] [0.013355] expected type: Prop, term ∀ (s1 s2 : Finset ι) (w1 w2 : ι → k), ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.013210] expected type: Sort ?u.14914, term ∑ i ∈ s1, w1 i = 1 → ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 [Elab.step] [0.010454] expected type: Sort ?u.15054, term ∑ i ∈ s2, w2 i = 1 → s1.affineCombination k p w1 = s2.affineCombination k p w2 → Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.async] [0.134788] elaborating proof of affineIndependent_iff_indicator_eq_of_affineCombination_eq [Elab.definition.value] [0.131747] affineIndependent_iff_indicator_eq_of_affineCombination_eq [Elab.step] [0.128786] classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.128780] classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.128774] classical constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.128544] constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.128537] constructor · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.060569] · intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all [Elab.step] [0.060557] intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all [Elab.step] [0.060553] intro ha s1 s2 w1 w2 hw1 hw2 heq ext i by_cases hi : i ∈ s1 ∪ s2 · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi · simp_all [Elab.step] [0.047014] · rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.047005] rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.047001] rw [← sub_eq_zero] rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1 rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2 have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)), Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.023015] have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2] [Elab.step] [0.022978] focus refine no_implicit_lambda% (have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.022974] refine no_implicit_lambda% (have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.022971] refine no_implicit_lambda% (have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014786] case body✝ => with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014731] with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014728] with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014725] with_annotate_state"by" (simp [hw1, hw2]) [Elab.step] [0.014721] (simp [hw1, hw2]) [Elab.step] [0.014718] simp [hw1, hw2] [Elab.step] [0.014715] simp [hw1, hw2] [Elab.step] [0.014709] simp [hw1, hw2] [Elab.step] [0.010380] exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi [Elab.step] [0.010297] · simp_all [Elab.step] [0.010038] simp_all [Elab.step] [0.010035] simp_all [Elab.step] [0.010030] simp_all [Elab.step] [0.067859] · intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.067812] intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.067806] intro ha s w hw hs i0 hi0 let w1 : ι → k := Function.update (Function.const ι 0) i0 1 have hw1 : ∑ i ∈ s, w1 i = 1 := by rw [Finset.sum_update_of_mem hi0] simp only [Finset.sum_const_zero, add_zero, const_apply] have hw1s : s.affineCombination k p w1 = p i0 := s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne => Function.update_of_ne hne .. let w2 := w + w1 have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s) have hws : w2 i0 - w1 i0 = 0 := by rw [← Finset.mem_coe] at hi0 rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self] simpa [w2] using hws [Elab.step] [0.014941] have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.014792] focus refine no_implicit_lambda% (have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.014788] refine no_implicit_lambda% (have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.014785] refine no_implicit_lambda% (have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012975] case body✝ => with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012948] with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012944] with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012940] with_annotate_state"by" (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012936] (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]) [Elab.step] [0.012934] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.012930] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.012924] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add] [Elab.step] [0.019018] have hw2s : s.affineCombination k p w2 = p i0 := by simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] [Elab.step] [0.018991] focus refine no_implicit_lambda% (have hw2s : s.affineCombination k p w2 = p i0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.018986] refine no_implicit_lambda% (have hw2s : s.affineCombination k p w2 = p i0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.018982] refine no_implicit_lambda% (have hw2s : s.affineCombination k p w2 = p i0 := ?body✝; ?_) case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.015284] case body✝ => with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.015215] with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.015212] with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.015208] with_annotate_state"by" (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.015205] (simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]) [Elab.step] [0.015202] simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] [Elab.step] [0.015198] simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] [Elab.step] [0.015193] simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd] Build completed successfully. ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebra
label:t-algebra$
1/12 Mathlib/LinearAlgebra/AffineSpace/Independent.lean 1 3 ['euprunin', 'github-actions', 'grunweg'] nobody
4-20566
4 days ago
4-20567
4 days ago
4-23444
4 days
23594 YaelDillies
author:YaelDillies
chore: rename `dmaSMul_apply` to `domSMul_apply` It's clearer this way, as the `ma` in `dmaSMul` already means "Multiplicative Action", ie `smul`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
4/2 Mathlib/MeasureTheory/Group/MeasurableEquiv.lean,Mathlib/MeasureTheory/Measure/Haar/DistribChar.lean 2 13 ['YaelDillies', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot', 'urkud'] mattrobball
assignee:mattrobball
4-6489
4 days ago
15-38239
15 days ago
39-13488
39 days
24804 Moises-Herradon-Cueto
author:Moises-Herradon-Cueto
feat(CategoryTheory/Limits/Preserves/Shapes): show that if a functor preserves limits, so does `Over.post` If a functor `F` preserves limits (of a certain shape, finite, or of a certain size), then so does the induced functor on `Over` categories. From Toric Co-authored-by: Yaël Dillies --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric new-contributor t-category-theory 125/0 Mathlib.lean,Mathlib/CategoryTheory/Limits/Preserves/Shapes/Over.lean,Mathlib/CategoryTheory/WithTerminal/Basic.lean 3 17 ['Moises-Herradon-Cueto', 'YaelDillies', 'erdOne', 'github-actions', 'joelriou'] riccardobrasca
assignee:riccardobrasca
4-6489
4 days ago
85-43071
2 months ago
91-47464
91 days
26107 xroblot
author:xroblot
feat(NumberField/IsCM): first results about the action of `complexConjugation` on units Define the subgroup of real units of a CM field and prove that it is equal to the subgroup of units fixed by the complex conjugation. --- - [x] depends on: #23536 - [x] depends on: #23453 - [x] depends on: #26746 t-number-theory 170/8 Mathlib/GroupTheory/GroupAction/FixedPoints.lean,Mathlib/NumberTheory/NumberField/CMField.lean,Mathlib/NumberTheory/NumberField/Units/Basic.lean 3 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'xroblot'] tb65536
assignee:tb65536
4-6487
4 days ago
11-9355
11 days ago
11-14118
11 days
27839 CBirkbeck
author:CBirkbeck
feat: normalised Eisenstein series define normalised Eisenstein series in preparation for giving their q-expansions. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-number-theory 11/0 Mathlib/NumberTheory/ModularForms/EisensteinSeries/Basic.lean 1 3 ['Ruben-VandeVelde', 'github-actions'] alreadydone
assignee:alreadydone
4-6486
4 days ago
19-36839
19 days ago
19-36889
19 days
28019 euprunin
author:euprunin
chore: replace `aesop_cat` with `simp` where applicable 2/2 Mathlib/CategoryTheory/Closed/Cartesian.lean,Mathlib/CategoryTheory/Localization/Construction.lean 2 9 ['euprunin', 'github-actions', 'grunweg', 'leanprover-bot', 'mathlib4-merge-conflict-bot'] dwrensha
assignee:dwrensha
4-6485
4 days ago
13-42217
13 days ago
13-72335
13 days
28122 j-loreaux
author:j-loreaux
refactor: change `unitary.map` to take an explicit morphism as an argument, rather than a morphism class This also defines `unitary.mapEquiv` as the induced equivalence on unitary groups, and provides various functoriality lemmas for both definitions. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
70/8 Mathlib/Algebra/Star/MonoidHom.lean,Mathlib/Algebra/Star/Unitary.lean 2 1 ['github-actions'] mattrobball
assignee:mattrobball
4-6484
4 days ago
12-6689
12 days ago
12-38950
12 days
28131 plp127
author:plp127
feat: forgetful functor from over category preserves connected limits Prove that `Over.forget` preserves connected limits. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 18/2 Mathlib/CategoryTheory/Limits/Constructions/Over/Connected.lean 1 2 ['Vtec234', 'github-actions'] b-mehta
assignee:b-mehta
4-6483
4 days ago
12-15111
12 days ago
12-15158
12 days
28141 YaelDillies
author:YaelDillies
chore: deprecate `BialgHom.coe_toLinearMap` `BialgHom.toLinearMap` is a fake projection. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory toric easy 5/11 Mathlib/RingTheory/Bialgebra/Hom.lean 1 8 ['YaelDillies', 'eric-wieser', 'github-actions'] alreadydone
assignee:alreadydone
4-6482
4 days ago
11-70011
11 days ago
11-70010
11 days
28149 Equilibris
author:Equilibris
feat: dcongr_heq `dcongr_heq` is very useful for proofs about typevecs as these are highly dependent --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-logic 14/0 Mathlib/Logic/Basic.lean 1 11 ['Equilibris', 'alexkeizer', 'github-actions', 'madvorak'] fpvandoorn
assignee:fpvandoorn
4-6482
4 days ago
11-63305
11 days ago
11-63350
11 days
28538 euprunin
author:euprunin
chore(Algebra/ContinuedFractions/Computation): golf entire `coe_of_h_rat_eq` using `simp_all` ---
Show trace profiling of coe_of_h_rat_eq: <10 ms before, <10 ms after 🎉 ### Trace profiling of `coe_of_h_rat_eq` before PR 28538 ```diff diff --git a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean index 3f6d63f8e7..5dcc698cb7 100644 --- a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean +++ b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean @@ -188,6 +188,7 @@ end IntFractPair /-! Now we lift the coercion results to the continued fraction computation. -/ +set_option trace.profiler true in theorem coe_of_h_rat_eq (v_eq_q : v = (↑q : K)) : (↑((of q).h : ℚ) : K) = (of v).h := by unfold of IntFractPair.seq1 rw [← IntFractPair.coe_of_rat_eq v_eq_q] ``` ``` ✔ [918/918] Built Mathlib.Algebra.ContinuedFractions.Computation.TerminatesIffRat (1.3s) Build completed successfully (918 jobs). ``` ### Trace profiling of `coe_of_h_rat_eq` after PR 28538 ```diff diff --git a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean index 3f6d63f8e7..e9036a925b 100644 --- a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean +++ b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean @@ -188,10 +188,9 @@ end IntFractPair /-! Now we lift the coercion results to the continued fraction computation. -/ +set_option trace.profiler true in theorem coe_of_h_rat_eq (v_eq_q : v = (↑q : K)) : (↑((of q).h : ℚ) : K) = (of v).h := by - unfold of IntFractPair.seq1 - rw [← IntFractPair.coe_of_rat_eq v_eq_q] - simp + simp_all theorem coe_of_s_get?_rat_eq (v_eq_q : v = (↑q : K)) (n : ℕ) : (((of q).s.get? n).map (Pair.map (↑)) : Option <| Pair K) = (of v).s.get? n := by ``` ``` ✔ [918/918] Built Mathlib.Algebra.ContinuedFractions.Computation.TerminatesIffRat (1.2s) Build completed successfully (918 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebra
label:t-algebra$
1/3 Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean 1 1 ['github-actions'] nobody
3-75285
3 days ago
3-76648
3 days ago
3-76690
3 days
28541 euprunin
author:euprunin
chore(Analysis/Normed/Group): golf entire `coe_inj` using `grind [DFunLike.coe_fn_eq]` ---
Show trace profiling of coe_inj: <10 ms before, <10 ms after 🎉 ### Trace profiling of `coe_inj` before PR 28541 ```diff diff --git a/Mathlib/Analysis/Normed/Group/Hom.lean b/Mathlib/Analysis/Normed/Group/Hom.lean index 3779f80a73..21bdde6220 100644 --- a/Mathlib/Analysis/Normed/Group/Hom.lean +++ b/Mathlib/Analysis/Normed/Group/Hom.lean @@ -91,6 +91,7 @@ instance toAddMonoidHomClass : AddMonoidHomClass (NormedAddGroupHom V₁ V₂) V initialize_simps_projections NormedAddGroupHom (toFun → apply) +set_option trace.profiler true in theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by cases f; cases g; congr ``` ``` ℹ [1487/1487] Built Mathlib.Analysis.Normed.Group.Hom (2.9s) info: Mathlib/Analysis/Normed/Group/Hom.lean:95:0: [Elab.command] [0.016720] theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by cases f; cases g; congr [Elab.definition.header] [0.015730] NormedAddGroupHom.coe_inj [Elab.step] [0.015594] expected type: Sort ?u.9077, term (f : V₁ → V₂) = g [Elab.step] [0.015586] expected type: Sort ?u.9077, term binrel% Eq✝ (f : V₁ → V₂) g [Meta.synthInstance] [0.014264] ✅️ CoeT (NormedAddGroupHom V₁ V₂) x (V₁ → V₂) Build completed successfully (1487 jobs). ``` ### Trace profiling of `coe_inj` after PR 28541 ```diff diff --git a/Mathlib/Analysis/Normed/Group/Hom.lean b/Mathlib/Analysis/Normed/Group/Hom.lean index 3779f80a73..8ef0138b38 100644 --- a/Mathlib/Analysis/Normed/Group/Hom.lean +++ b/Mathlib/Analysis/Normed/Group/Hom.lean @@ -91,8 +91,9 @@ instance toAddMonoidHomClass : AddMonoidHomClass (NormedAddGroupHom V₁ V₂) V initialize_simps_projections NormedAddGroupHom (toFun → apply) +set_option trace.profiler true in theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by - cases f; cases g; congr + grind [DFunLike.coe_fn_eq] theorem coe_injective : @Function.Injective (NormedAddGroupHom V₁ V₂) (V₁ → V₂) toFun := by apply coe_inj ``` ``` ℹ [1487/1487] Built Mathlib.Analysis.Normed.Group.Hom (2.8s) info: Mathlib/Analysis/Normed/Group/Hom.lean:95:0: [Elab.command] [0.016377] theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by grind [DFunLike.coe_fn_eq] [Elab.definition.header] [0.015314] NormedAddGroupHom.coe_inj [Elab.step] [0.015184] expected type: Sort ?u.9077, term (f : V₁ → V₂) = g [Elab.step] [0.015177] expected type: Sort ?u.9077, term binrel% Eq✝ (f : V₁ → V₂) g [Meta.synthInstance] [0.013829] ✅️ CoeT (NormedAddGroupHom V₁ V₂) x (V₁ → V₂) Build completed successfully (1487 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-analysis 1/1 Mathlib/Analysis/Normed/Group/Hom.lean 1 1 ['github-actions'] nobody
3-74844
3 days ago
3-76249
3 days ago
3-76292
3 days
23999 YaelDillies
author:YaelDillies
feat(MonoidAlgebra): `mapDomain` and `mapRange` as ring homs From Toric Co-authored-by: Michał Mrugała --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-algebra
label:t-algebra$
123/95 Mathlib/Algebra/MonoidAlgebra/Defs.lean,Mathlib/Algebra/MonoidAlgebra/Lift.lean,Mathlib/Algebra/MonoidAlgebra/MapDomain.lean 3 1 ['github-actions'] nobody
3-71644
3 days ago
3-71902
3 days ago
6-1044
6 days
27105 xroblot
author:xroblot
feat(Ring/DedekindDomain): formula for the splitting of prime ideals in an extension This PR just puts together all the results that were already there to deduce: ```lean map (algebraMap S R) p = ∏ P ∈ p.primesOver R, P ^ p.ramificationIdx (algebraMap S R) P ``` for `p` a maximal ideal of a ring `S` and `R` an extension of `S` that is a Dedekind ring. Note. There is a significant import increase in the file `RingTheory.DedekindDomain.Factorization`. However, this file is almost a leaf file so this increase only affects a limited number of files. If the increase is too big, a new file, say `RingTheory.DedekindDomain.PrimeSplitting`, can be added instead. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra t-number-theory
label:t-algebra$
88/2 Mathlib/RingTheory/DedekindDomain/Factorization.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Basic.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean,Mathlib/RingTheory/Ideal/Operations.lean,Mathlib/RingTheory/Ideal/Over.lean 5 3 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] mariainesdff
assignee:mariainesdff
3-68119
3 days ago
3-68136
3 days ago
37-11987
37 days
26101 xroblot
author:xroblot
feat(NumberField): specialized version of Kummer Dedekind for the splitting of prime numbers We prove a specialized version of [KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk](https://leanprover-community.github.io/mathlib4_docs/Mathlib/NumberTheory/KummerDedekind.html#KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk) for the splitting of rational prime numbers in number fields. This PR continues the work from #25038. --- - [ ] depends on: #26137 t-number-theory 172/1 Mathlib/NumberTheory/NumberField/Ideal/KummerDedekind.lean,Mathlib/NumberTheory/RamificationInertia/Basic.lean,Mathlib/RingTheory/AdjoinRoot.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean 4 6 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'xroblot'] tb65536
assignee:tb65536
3-67920
3 days ago
3-67946
3 days ago
0-50
50 seconds
26009 linesthatinterlace
author:linesthatinterlace
feat: Add `Vector`/`List.Vector` equivalence This PR continues the work from #25050. Original PR: https://github.com/leanprover-community/mathlib4/pull/25050 migrated-from-branch t-data 125/17 Mathlib/Data/Vector/Basic.lean,Mathlib/Data/Vector/Defs.lean,Mathlib/Logic/Equiv/Array.lean 3 3 ['github-actions', 'linesthatinterlace', 'robin-carlier'] nobody
3-66665
3 days ago
3-66751
3 days ago
64-63488
64 days
28406 YaelDillies
author:YaelDillies
chore: rename `Mon_Class` to `MonObj` and `Comon_Class` to `ComonObj`. `Grp_Class`, `CommGrp_Class` and `Mod_Class` will follow. [Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Removing.20underscores.20from.20docs.23Mon_.2C.20docs.23Grp_.20.2E.2E.2E) --- I will add the deprecations once we have agreed on the new names. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 238/238 Mathlib/Algebra/Category/CoalgCat/ComonEquivalence.lean,Mathlib/Algebra/Category/Grp/LeftExactFunctor.lean,Mathlib/CategoryTheory/Bicategory/Monad/Basic.lean,Mathlib/CategoryTheory/Monad/EquivMon.lean,Mathlib/CategoryTheory/Monoidal/Bimod.lean,Mathlib/CategoryTheory/Monoidal/Bimon_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/CommGrp_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/CommMon_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Comon_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Grp_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Mod_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Mon_.lean,Mathlib/CategoryTheory/Monoidal/CommGrp_.lean,Mathlib/CategoryTheory/Monoidal/CommMon_.lean,Mathlib/CategoryTheory/Monoidal/Comon_.lean,Mathlib/CategoryTheory/Monoidal/Conv.lean,Mathlib/CategoryTheory/Monoidal/Grp_.lean,Mathlib/CategoryTheory/Monoidal/Hopf_.lean,Mathlib/CategoryTheory/Monoidal/Internal/FunctorCategory.lean,Mathlib/CategoryTheory/Monoidal/Internal/Module.lean,Mathlib/CategoryTheory/Monoidal/Internal/Types/Basic.lean,Mathlib/CategoryTheory/Monoidal/Internal/Types/CommGrp_.lean,Mathlib/CategoryTheory/Monoidal/Internal/Types/Grp_.lean,Mathlib/CategoryTheory/Monoidal/Mod_.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Monoidal/Opposite/Mon_.lean,Mathlib/CategoryTheory/Preadditive/CommGrp_.lean 27 1 ['github-actions'] nobody
3-57242
3 days ago
3-57242
3 days ago
6-46214
6 days
28286 bwangpj
author:bwangpj
feat(Geometry/Manifold/ContMDiff): basic lemmas for analytic (`C^ω`) functions Add basic lemmas relating `ContMDiff` in the `C^ω` case to being `Analytic` on charts. This is upstreamed from [https://github.com/girving/ray](https://github.com/girving/ray). Co-authored-by: Geoffrey Irving --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-differential-geometry 36/0 Mathlib/Geometry/Manifold/ContMDiff/Defs.lean 1 2 ['girving', 'github-actions'] nobody
3-57167
3 days ago
8-55506
8 days ago
8-55551
8 days
27433 YaelDillies
author:YaelDillies
refactor: make `⇑e⁻¹ = e.symm` simp From BrauerGroup and ClassFieldTheory --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 217/256 Mathlib/Algebra/Algebra/Equiv.lean,Mathlib/Algebra/Group/End.lean,Mathlib/Algebra/Module/Equiv/Basic.lean,Mathlib/Algebra/Order/Rearrangement.lean,Mathlib/Data/Fintype/Perm.lean,Mathlib/FieldTheory/KrullTopology.lean,Mathlib/GroupTheory/Perm/Basic.lean,Mathlib/GroupTheory/Perm/Centralizer.lean,Mathlib/GroupTheory/Perm/Cycle/Basic.lean,Mathlib/GroupTheory/Perm/Cycle/Factors.lean,Mathlib/GroupTheory/Perm/Finite.lean,Mathlib/GroupTheory/Perm/Sign.lean,Mathlib/GroupTheory/Perm/Support.lean,Mathlib/GroupTheory/SpecificGroups/Alternating.lean,Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean,Mathlib/Logic/Equiv/Set.lean 16 3 ['eric-wieser', 'github-actions'] nobody
3-46654
3 days ago
3-46654
3 days ago
3-78026
3 days
28354 joelriou
author:joelriou
feat(AlgebraicTopology/ModelCategory): right homotopies This PR introduces the notion of right homotopies, which are defined using path objects. It was obtained by dualizing the defintitions in #26967 (mostly by search/replace...). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology 311/0 Mathlib.lean,Mathlib/AlgebraicTopology/ModelCategory/RightHomotopy.lean 2 1 ['github-actions'] nobody
3-44198
3 days ago
6-24278
6 days ago
6-24263
6 days
28179 vihdzp
author:vihdzp
feat: `LinearOrderedAddCommGroupWithTop (ArchimedeanClass R)` We define addition on `ArchimedeanClass R` such that `mk (a * b) = mk a + mk b`, as well as a zero element `0 = mk 1`. This makes `ArchimedeanClass R` into a `LinearOrderedAddCommMonoidWithTop` when `R` is a ring, and a `LinearOrderedAddCommGroupWithTop` when `R` is a field. --- - [x] depends on: #28227 See [Zulip](https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/.22Commensurate.22.20elements.20in.20fields/near/533639232) for discussion on this (in particular, why we turn multiplication into addition). [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-algebra
label:t-algebra$
208/10 Mathlib.lean,Mathlib/Algebra/Order/Archimedean/Class.lean,Mathlib/Algebra/Order/Ring/Archimedean.lean 3 28 ['alreadydone', 'github-actions', 'kckennylau', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'vihdzp', 'wwylele'] nobody
3-36363
3 days ago
3-36363
3 days ago
6-33976
6 days
28555 YaelDillies
author:YaelDillies
feat: pullback along an epi preserved under pullbacks is faithful From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric large-import t-category-theory 39/2 Mathlib/CategoryTheory/Comma/Over/Basic.lean,Mathlib/CategoryTheory/Comma/Over/Pullback.lean 2 1 ['github-actions'] nobody
3-35962
3 days ago
3-35962
3 days ago
3-36223
3 days
28449 wwylele
author:wwylele
feat(Algebra/Order): ArchimedeanClass ball for module This continues #27885 and promotes `ArchimedeanClass.addSubgroup` to a submodule. Balls are promoted to submodules with shorter names `ball` and `closedBall`, as they will be used a lot in the proof of Hahn embedding theorem (if you don't agree with this I can rename them to `ballSubmodule` and `closedBallSubmodule`) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
103/0 Mathlib.lean,Mathlib/Algebra/Order/Module/Archimedean.lean 2 3 ['github-actions', 'wwylele'] nobody
3-34562
3 days ago
6-14673
6 days ago
6-14720
6 days
28570 euprunin
author:euprunin
chore(RepresentationTheory/Homological/GroupCohomology): golf entire `cochainsMap_f_1_comp_cochainsIso₁` using `tauto` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
1/3 Mathlib/RepresentationTheory/Homological/GroupCohomology/Functoriality.lean 1 1 ['github-actions'] nobody
3-34270
3 days ago
3-34280
3 days ago
3-34328
3 days
28571 euprunin
author:euprunin
chore(RingTheory): golf entire `mem_extended_iff`, `coeff_opRingEquiv` and `comp_assoc` using `tauto` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 4/9 Mathlib/RingTheory/ClassGroup.lean,Mathlib/RingTheory/FractionalIdeal/Extended.lean,Mathlib/RingTheory/Polynomial/Opposites.lean,Mathlib/RingTheory/PolynomialLaw/Basic.lean 4 1 ['github-actions'] nobody
3-34238
3 days ago
3-34243
3 days ago
3-34287
3 days
28573 euprunin
author:euprunin
chore(Tactic): golf entire `eval_cons` and `natPow_zero_natMod_succ_succ` using `tauto` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 3/6 Mathlib/Tactic/Module.lean,Mathlib/Tactic/NormNum/PowMod.lean 2 1 ['github-actions'] nobody
3-34150
3 days ago
3-34150
3 days ago
3-34221
3 days
27357 jcreedcmu
author:jcreedcmu
feat(Algebra/Module/Submodule): add `submoduleMap` for isometries Per [discussion on Zulip](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Analog.20of.20LinearEquiv.2EsubmoduleMap.20for.20AffineIsometryEquiv.3F), add a version of `.submoduleMap` for `LinearIsometry` and `LinearIsometryEquiv` by analogy with `LinearMap.submoduleMap` and `LinearEquiv.submoduleMap`. --- new-contributor t-algebra
label:t-algebra$
56/0 Mathlib.lean,Mathlib/Analysis/Normed/Operator/LinearIsometrySubmoduleMap.lean 2 18 ['Ruben-VandeVelde', 'eric-wieser', 'github-actions', 'jcreedcmu', 'themathqueen'] dagurtomas
assignee:dagurtomas
3-33857
3 days ago
29-22317
29 days ago
29-22369
29 days
28560 euprunin
author:euprunin
chore(Combinatorics/Quiver): golf entire `lift_spec` using `tauto` ---
Show trace profiling of lift_spec: <10 ms before, <10 ms after 🎉 ### Trace profiling of `lift_spec` before PR 28560 ```diff diff --git a/Mathlib/Combinatorics/Quiver/Symmetric.lean b/Mathlib/Combinatorics/Quiver/Symmetric.lean index 33e371b283..76a3371b36 100644 --- a/Mathlib/Combinatorics/Quiver/Symmetric.lean +++ b/Mathlib/Combinatorics/Quiver/Symmetric.lean @@ -164,6 +164,7 @@ def lift [HasReverse V'] (φ : Prefunctor V V') : | Sum.inl g => φ.map g | Sum.inr g => reverse (φ.map g) +set_option trace.profiler true in theorem lift_spec [HasReverse V'] (φ : Prefunctor V V') : Symmetrify.of.comp (Symmetrify.lift φ) = φ := by fapply Prefunctor.ext ``` ``` ✔ [147/147] Built Mathlib.Combinatorics.Quiver.Symmetric (1.3s) Build completed successfully (147 jobs). ``` ### Trace profiling of `lift_spec` after PR 28560 ```diff diff --git a/Mathlib/Combinatorics/Quiver/Symmetric.lean b/Mathlib/Combinatorics/Quiver/Symmetric.lean index 33e371b283..3adf874946 100644 --- a/Mathlib/Combinatorics/Quiver/Symmetric.lean +++ b/Mathlib/Combinatorics/Quiver/Symmetric.lean @@ -164,13 +164,10 @@ def lift [HasReverse V'] (φ : Prefunctor V V') : | Sum.inl g => φ.map g | Sum.inr g => reverse (φ.map g) +set_option trace.profiler true in theorem lift_spec [HasReverse V'] (φ : Prefunctor V V') : Symmetrify.of.comp (Symmetrify.lift φ) = φ := by - fapply Prefunctor.ext - · rintro X - rfl - · rintro X Y f - rfl + tauto theorem lift_reverse [h : HasInvolutiveReverse V'] (φ : Prefunctor V V') {X Y : Symmetrify V} (f : X ⟶ Y) : ``` ``` ✔ [147/147] Built Mathlib.Combinatorics.Quiver.Symmetric (1.2s) Build completed successfully (147 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-combinatorics 1/5 Mathlib/Combinatorics/Quiver/Symmetric.lean 1 1 ['github-actions'] nobody
3-32741
3 days ago
3-34772
3 days ago
3-34823
3 days
28562 euprunin
author:euprunin
chore(Geometry/RingedSpace): golf entire `locallyRingedSpace_toLocallyRingedSpace` using `tauto` ---
Show trace profiling of locallyRingedSpace_toLocallyRingedSpace: <10 ms before, <10 ms after 🎉 ### Trace profiling of `locallyRingedSpace_toLocallyRingedSpace` before PR 28562 ```diff diff --git a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean index f0c58db3fd..98033b0d26 100644 --- a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean +++ b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean @@ -574,6 +574,7 @@ instance toLocallyRingedSpace_isOpenImmersion : LocallyRingedSpace.IsOpenImmersion (toLocallyRingedSpaceHom Y f) := H +set_option trace.profiler true in @[simp] theorem locallyRingedSpace_toLocallyRingedSpace {X Y : LocallyRingedSpace} (f : X ⟶ Y) [LocallyRingedSpace.IsOpenImmersion f] : toLocallyRingedSpace Y f.1 = X := by ``` ``` ✔ [1677/1677] Built Mathlib.Geometry.RingedSpace.OpenImmersion (13s) Build completed successfully (1677 jobs). ``` ### Trace profiling of `locallyRingedSpace_toLocallyRingedSpace` after PR 28562 ```diff diff --git a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean index f0c58db3fd..e25a631151 100644 --- a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean +++ b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean @@ -574,10 +574,11 @@ instance toLocallyRingedSpace_isOpenImmersion : LocallyRingedSpace.IsOpenImmersion (toLocallyRingedSpaceHom Y f) := H +set_option trace.profiler true in @[simp] theorem locallyRingedSpace_toLocallyRingedSpace {X Y : LocallyRingedSpace} (f : X ⟶ Y) [LocallyRingedSpace.IsOpenImmersion f] : toLocallyRingedSpace Y f.1 = X := by - cases X; delta toLocallyRingedSpace; simp + tauto end ToLocallyRingedSpace ``` ``` ✔ [1677/1677] Built Mathlib.Geometry.RingedSpace.OpenImmersion (13s) Build completed successfully (1677 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebraic-geometry 1/1 Mathlib/Geometry/RingedSpace/OpenImmersion.lean 1 1 ['github-actions'] nobody
3-32670
3 days ago
3-34631
3 days ago
3-34684
3 days
28565 euprunin
author:euprunin
chore(Logic/Equiv): golf entire `trans_symm_eq_symm_trans_symm` using `tauto` ---
Show trace profiling of trans_symm_eq_symm_trans_symm: <10 ms before, 15 ms after ### Trace profiling of `trans_symm_eq_symm_trans_symm` before PR 28565 ```diff diff --git a/Mathlib/Logic/Equiv/PartialEquiv.lean b/Mathlib/Logic/Equiv/PartialEquiv.lean index 0cca37467c..73b080b642 100644 --- a/Mathlib/Logic/Equiv/PartialEquiv.lean +++ b/Mathlib/Logic/Equiv/PartialEquiv.lean @@ -602,6 +602,7 @@ theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm := theorem trans_apply {x : α} : (e.trans e') x = e' (e x) := rfl +set_option trace.profiler true in theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by cases e; cases e'; rfl ``` ``` ✔ [373/373] Built Mathlib.Logic.Equiv.PartialEquiv (2.7s) Build completed successfully (373 jobs). ``` ### Trace profiling of `trans_symm_eq_symm_trans_symm` after PR 28565 ```diff diff --git a/Mathlib/Logic/Equiv/PartialEquiv.lean b/Mathlib/Logic/Equiv/PartialEquiv.lean index 0cca37467c..ba4a85f370 100644 --- a/Mathlib/Logic/Equiv/PartialEquiv.lean +++ b/Mathlib/Logic/Equiv/PartialEquiv.lean @@ -602,8 +602,9 @@ theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm := theorem trans_apply {x : α} : (e.trans e') x = e' (e x) := rfl +set_option trace.profiler true in theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by - cases e; cases e'; rfl + tauto @[simp, mfld_simps] theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source := ``` ``` ℹ [373/373] Built Mathlib.Logic.Equiv.PartialEquiv (2.6s) info: Mathlib/Logic/Equiv/PartialEquiv.lean:606:0: [Elab.async] [0.014963] elaborating proof of PartialEquiv.trans_symm_eq_symm_trans_symm [Elab.definition.value] [0.014595] PartialEquiv.trans_symm_eq_symm_trans_symm [Elab.step] [0.014212] tauto [Elab.step] [0.014194] tauto [Elab.step] [0.014178] tauto Build completed successfully (373 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-logic 1/1 Mathlib/Logic/Equiv/PartialEquiv.lean 1 1 ['github-actions'] nobody
3-32625
3 days ago
3-34504
3 days ago
3-34548
3 days
28567 euprunin
author:euprunin
chore(NumberTheory): golf entire `equivHeightOneSpectrum_symm_apply` and `is_rat` using `tauto` ---
Show trace profiling of equivHeightOneSpectrum_symm_apply: 2804 ms before, 25 ms after 🎉 ### Trace profiling of `equivHeightOneSpectrum_symm_apply` before PR 28567 ```diff diff --git a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean index c2a297a496..e86546890b 100644 --- a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean +++ b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean @@ -306,6 +306,7 @@ open NumberField.FinitePlace NumberField.RingOfIntegers NumberField.RingOfIntegers.HeightOneSpectrum open scoped NumberField +set_option trace.profiler true in lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) : (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by ``` ``` ℹ [2937/2937] Built Mathlib.NumberTheory.NumberField.FinitePlaces (11s) info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.020076] theorem equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) : (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm [Elab.definition.header] [0.018830] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply [Elab.step] [0.017695] expected type: Sort ?u.35696, term (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ [Elab.step] [0.017684] expected type: Sort ?u.35696, term binrel% Eq✝ ((equivHeightOneSpectrum.symm v) x) ‖embedding v x‖ [Elab.step] [0.012412] expected type: , term norm✝ (embedding v x) info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.020418] lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) : (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.async] [2.829597] elaborating proof of IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply [Elab.definition.value] [2.803590] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply [Elab.step] [2.757940] have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm [Elab.step] [2.757927] have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm [Elab.step] [0.013857] have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm [Elab.step] [0.013839] focus refine no_implicit_lambda% (have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := ?body✝; ?_) case body✝ => with_annotate_state"by" ( change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm) [Elab.step] [0.013828] refine no_implicit_lambda% (have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := ?body✝; ?_) case body✝ => with_annotate_state"by" ( change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm) [Elab.step] [0.013819] refine no_implicit_lambda% (have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := ?body✝; ?_) case body✝ => with_annotate_state"by" ( change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) exact (Equiv.apply_symm_apply _ v).symm) [Elab.step] [2.744044] convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm [Meta.isDefEq] [0.133147] ❌️ (NumberField.instNormedFieldValuedAdicCompletion v).toNorm =?= (NumberField.instNormedFieldValuedAdicCompletion (equivHeightOneSpectrum.symm v).maximalIdeal).toNorm [Meta.isDefEq] [0.133093] ❌️ adicCompletion K v =?= adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.133067] ❌️ (valuation K v).Completion =?= (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal).Completion [Meta.isDefEq] [0.133044] ❌️ UniformSpace.Completion (WithVal (valuation K v)) =?= UniformSpace.Completion (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq.delta] [0.130279] ❌️ UniformSpace.Completion (WithVal (valuation K v)) =?= UniformSpace.Completion (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.130237] ❌️ (WithVal.instValued (valuation K v)).toUniformSpace =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace [Meta.isDefEq] [0.130207] ❌️ (WithVal.instValued (valuation K v)).1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1 [Meta.isDefEq.delta] [0.010379] ❌️ WithVal.instValued (valuation K v) =?= WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) [Meta.isDefEq] [0.010339] ❌️ valuation K v =?= valuation K (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.010050] ❌️ v.intValuation.extendToLocalization ⋯ K =?= (equivHeightOneSpectrum.symm v).maximalIdeal.intValuation.extendToLocalization ⋯ K [Meta.isDefEq] [0.111493] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq.delta] [0.107748] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.105087] ❌️ ⋯.topology =?= ⋯.topology [Meta.isDefEq] [0.101115] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology [Meta.isDefEq] [0.094533] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq.delta] [0.051577] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.051483] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.051440] ❌️ fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.051427] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq.delta] [0.022255] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.012843] ✅️ fun y ↦ x + y =?= fun y ↦ x + y [Meta.isDefEq] [0.012833] ✅️ x + y =?= x + y [Meta.isDefEq] [0.012699] ✅️ instHAdd.1 x y =?= instHAdd.1 x y [Meta.isDefEq] [0.012670] ✅️ Add.add x y =?= Add.add x y [Meta.isDefEq] [0.011791] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 x y =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 x y [Meta.isDefEq] [0.011068] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 [Meta.isDefEq] [0.029128] ❌️ { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } =?= { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } [Meta.isDefEq] [0.028994] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq.delta] [0.024713] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.014160] ✅️ Set.preimage fun y ↦ x + y =?= Set.preimage fun y ↦ x + y [Meta.isDefEq.delta] [0.014145] ✅️ Set.preimage fun y ↦ x + y =?= Set.preimage fun y ↦ x + y [Meta.isDefEq] [0.014097] ✅️ fun y ↦ x + y =?= fun y ↦ x + y [Meta.isDefEq] [0.014077] ✅️ x + y =?= x + y [Meta.isDefEq] [0.013915] ✅️ instHAdd.1 x y =?= instHAdd.1 x y [Meta.isDefEq] [0.013877] ✅️ Add.add x y =?= Add.add x y [Meta.isDefEq] [0.012647] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 x y =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 x y [Meta.isDefEq] [0.011981] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 [Meta.isDefEq] [0.011368] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1 [Meta.isDefEq] [0.010841] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddMonoid.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddMonoid.1 [Meta.isDefEq] [0.010492] ❌️ ⋯.toRingFilterBasis.filter.sets =?= ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.010467] ❌️ ⋯.toRingFilterBasis.filter.1 =?= ⋯.toRingFilterBasis.filter.1 [Meta.isDefEq] [0.042922] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } [Meta.isDefEq] [0.042727] ❌️ fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.042647] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.042637] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s [Meta.isDefEq] [0.042602] ❌️ s ∈ (⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets [Meta.isDefEq] [0.042592] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.042573] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem s =?= (⋯.toRingFilterBasis.N a).sets.Mem s [Meta.isDefEq] [0.042565] ❌️ (⋯.toRingFilterBasis.N a).sets s =?= (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.042548] ❌️ (⋯.toRingFilterBasis.N a).1 s =?= (⋯.toRingFilterBasis.N a).1 s [Meta.isDefEq] [0.042482] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq.delta] [0.037779] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq] [0.023557] ✅️ Set.preimage fun y ↦ a + y =?= Set.preimage fun y ↦ a + y [Meta.isDefEq.delta] [0.023548] ✅️ Set.preimage fun y ↦ a + y =?= Set.preimage fun y ↦ a + y [Meta.isDefEq] [0.023508] ✅️ fun y ↦ a + y =?= fun y ↦ a + y [Meta.isDefEq] [0.023495] ✅️ a + y =?= a + y [Meta.isDefEq] [0.023382] ✅️ instHAdd.1 a y =?= instHAdd.1 a y [Meta.isDefEq] [0.023358] ✅️ Add.add a y =?= Add.add a y [Meta.isDefEq] [0.022559] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 a y =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 a y [Meta.isDefEq] [0.022129] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 [Meta.isDefEq] [0.021710] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1 [Meta.isDefEq] [0.021354] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddMonoid.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddMonoid.1 [Meta.isDefEq] [0.021012] ✅️ (WithVal.instRing (valuation K v)).toAddCommMonoid.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddCommMonoid.1 [Meta.isDefEq] [0.020829] ✅️ (WithVal.instRing (valuation K v)).toNonUnitalNonAssocSemiring.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toNonUnitalNonAssocSemiring.1 [Meta.isDefEq] [0.020664] ✅️ (WithVal.instRing (valuation K v)).toNonUnitalSemiring.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toNonUnitalSemiring.1 [Meta.isDefEq] [0.020519] ✅️ (WithVal.instRing (valuation K v)).toSemiring.1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toSemiring.1 [Meta.isDefEq] [0.020385] ✅️ (WithVal.instRing (valuation K v)).1 =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1 [Meta.isDefEq.delta] [0.020202] ❌️ WithVal.instRing (valuation K v) =?= WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) [Meta.isDefEq] [0.020193] ❌️ valuation K v =?= valuation K (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.019987] ❌️ v.intValuation.extendToLocalization ⋯ K =?= (equivHeightOneSpectrum.symm v).maximalIdeal.intValuation.extendToLocalization ⋯ K [Meta.isDefEq] [0.017897] ❌️ let f := IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K; have h := ⋯; let __src := f.lift h; { toFun := (↑__src).toFun, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯, map_add_le_max' := ⋯ } =?= let f := IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K; have h := ⋯; let __src := f.lift h; { toFun := (↑__src).toFun, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯, map_add_le_max' := ⋯ } [Meta.isDefEq] [0.017886] ❌️ { toFun := (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯, map_add_le_max' := ⋯ } =?= { toFun := (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯, map_add_le_max' := ⋯ } [Meta.isDefEq] [0.017832] ❌️ { toFun := (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯ } =?= { toFun := (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯ } [Meta.isDefEq] [0.017791] ❌️ { toFun := (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun, map_zero' := ⋯ } =?= { toFun := (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun, map_zero' := ⋯ } [Meta.isDefEq] [0.017743] ❌️ (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun =?= (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).toFun [Meta.isDefEq] [0.017709] ❌️ (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).1 =?= (↑((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).lift ⋯)).1 [Meta.isDefEq] [0.011489] ❌️ fun z ↦ ↑v.intValuation.toMonoidWithZeroHom ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec z).1 * ↑((IsUnit.liftRight ((↑v.intValuation.toMonoidWithZeroHom).restrict (nonZeroDivisors (𝓞 K))) ⋯) ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec z).2)⁻¹ =?= fun z ↦ ↑(equivHeightOneSpectrum.symm v).maximalIdeal.intValuation.toMonoidWithZeroHom ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec z).1 * ↑((IsUnit.liftRight ((↑(equivHeightOneSpectrum.symm v).maximalIdeal.intValuation.toMonoidWithZeroHom).restrict (nonZeroDivisors (𝓞 K))) ⋯) ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec z).2)⁻¹ [Meta.isDefEq] [0.011481] ❌️ ↑v.intValuation.toMonoidWithZeroHom ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec z).1 * ↑((IsUnit.liftRight ((↑v.intValuation.toMonoidWithZeroHom).restrict (nonZeroDivisors (𝓞 K))) ⋯) ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec z).2)⁻¹ =?= ↑(equivHeightOneSpectrum.symm v).maximalIdeal.intValuation.toMonoidWithZeroHom ((IsLocalization.toLocalizationMap (nonZeroDivisors (𝓞 K)) K).sec [… 5521 lines omitted …] [Meta.isDefEq.delta] [0.028740] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.028599] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.028574] ❌️ fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.028563] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq.delta] [0.012663] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.015876] ❌️ { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } =?= { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } [Meta.isDefEq] [0.015723] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq.delta] [0.013386] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.022058] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } [Meta.isDefEq] [0.021738] ❌️ fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.021682] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.021673] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s [Meta.isDefEq] [0.021653] ❌️ s ∈ (⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets [Meta.isDefEq] [0.021643] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.021628] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem s =?= (⋯.toRingFilterBasis.N a).sets.Mem s [Meta.isDefEq] [0.021612] ❌️ (⋯.toRingFilterBasis.N a).sets s =?= (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.021597] ❌️ (⋯.toRingFilterBasis.N a).1 s =?= (⋯.toRingFilterBasis.N a).1 s [Meta.isDefEq] [0.021532] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq.delta] [0.015418] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq] [0.062765] ❌️ Valued.isTopologicalDivisionRing =?= Valued.isTopologicalDivisionRing [Meta.isDefEq] [0.062760] ❌️ IsTopologicalDivisionRing (WithVal (valuation K v)) =?= IsTopologicalDivisionRing (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.056042] ❌️ (WithVal.instValued (valuation K v)).toTopologicalSpace =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toTopologicalSpace [Meta.isDefEq] [0.056020] ❌️ (WithVal.instValued (valuation K v)).toUniformSpace.1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace.1 [Meta.isDefEq.delta] [0.055715] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.053667] ❌️ ⋯.topology =?= ⋯.topology [Meta.isDefEq] [0.045483] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology [Meta.isDefEq] [0.041145] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq.delta] [0.024331] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.024167] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.024143] ❌️ fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.024132] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq.delta] [0.010985] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.013123] ❌️ { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } =?= { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } [Meta.isDefEq] [0.012996] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq.delta] [0.010646] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.016788] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } [Meta.isDefEq] [0.016603] ❌️ fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.016547] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.016539] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s [Meta.isDefEq] [0.016519] ❌️ s ∈ (⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets [Meta.isDefEq] [0.016511] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.016497] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem s =?= (⋯.toRingFilterBasis.N a).sets.Mem s [Meta.isDefEq] [0.016490] ❌️ (⋯.toRingFilterBasis.N a).sets s =?= (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.016477] ❌️ (⋯.toRingFilterBasis.N a).1 s =?= (⋯.toRingFilterBasis.N a).1 s [Meta.isDefEq] [0.016416] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq.delta] [0.013840] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq] [0.065095] ❌️ Valued.completable =?= Valued.completable [Meta.isDefEq] [0.065089] ❌️ CompletableTopField (WithVal (valuation K v)) =?= CompletableTopField (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.061554] ❌️ (WithVal.instValued (valuation K v)).toUniformSpace =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace [Meta.isDefEq] [0.061541] ❌️ (WithVal.instValued (valuation K v)).1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1 [Meta.isDefEq] [0.057549] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq.delta] [0.055739] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.055144] ❌️ ⋯.topology =?= ⋯.topology [Meta.isDefEq] [0.053139] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology [Meta.isDefEq] [0.049083] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq.delta] [0.031309] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.031171] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.031150] ❌️ fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.031140] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq.delta] [0.017538] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.010219] ❌️ ⋯.toRingFilterBasis.filter =?= ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.013581] ❌️ { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } =?= { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } [Meta.isDefEq] [0.013449] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq.delta] [0.010987] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.017750] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } [Meta.isDefEq] [0.017573] ❌️ fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.017514] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.017506] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s [Meta.isDefEq] [0.017485] ❌️ s ∈ (⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets [Meta.isDefEq] [0.017476] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.017461] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem s =?= (⋯.toRingFilterBasis.N a).sets.Mem s [Meta.isDefEq] [0.017453] ❌️ (⋯.toRingFilterBasis.N a).sets s =?= (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.017439] ❌️ (⋯.toRingFilterBasis.N a).1 s =?= (⋯.toRingFilterBasis.N a).1 s [Meta.isDefEq] [0.017371] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq.delta] [0.012205] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq] [0.080791] ❌️ (WithVal.instValued (valuation K v)).toIsUniformAddGroup =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toIsUniformAddGroup [Meta.isDefEq] [0.080785] ❌️ IsUniformAddGroup (WithVal (valuation K v)) =?= IsUniformAddGroup (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.080756] ❌️ (WithVal.instValued (valuation K v)).toUniformSpace =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace [Meta.isDefEq] [0.080746] ❌️ (WithVal.instValued (valuation K v)).1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1 [Meta.isDefEq] [0.073536] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq.delta] [0.071877] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.071310] ❌️ ⋯.topology =?= ⋯.topology [Meta.isDefEq] [0.069338] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology [Meta.isDefEq] [0.065229] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq.delta] [0.042069] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.041932] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.041909] ❌️ fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.041899] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq.delta] [0.020635] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.010872] ✅️ fun y ↦ x + y =?= fun y ↦ x + y [Meta.isDefEq] [0.010863] ✅️ x + y =?= x + y [Meta.isDefEq] [0.010764] ✅️ instHAdd.1 x y =?= instHAdd.1 x y [Meta.isDefEq] [0.010739] ✅️ Add.add x y =?= Add.add x y [Meta.isDefEq] [0.010117] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 x y =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 x y [Meta.isDefEq] [0.021241] ❌️ { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } =?= { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } [Meta.isDefEq] [0.021097] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq.delta] [0.018373] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.023135] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } [Meta.isDefEq] [0.022963] ❌️ fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.022900] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.022892] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s [Meta.isDefEq] [0.022871] ❌️ s ∈ (⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets [Meta.isDefEq] [0.022862] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.022846] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem s =?= (⋯.toRingFilterBasis.N a).sets.Mem s [Meta.isDefEq] [0.022838] ❌️ (⋯.toRingFilterBasis.N a).sets s =?= (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.022823] ❌️ (⋯.toRingFilterBasis.N a).1 s =?= (⋯.toRingFilterBasis.N a).1 s [Meta.isDefEq] [0.022756] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq.delta] [0.017716] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq] [0.011722] ✅️ Set.preimage fun y ↦ a + y =?= Set.preimage fun y ↦ a + y [Meta.isDefEq.delta] [0.011714] ✅️ Set.preimage fun y ↦ a + y =?= Set.preimage fun y ↦ a + y [Meta.isDefEq] [0.011690] ✅️ fun y ↦ a + y =?= fun y ↦ a + y [Meta.isDefEq] [0.011681] ✅️ a + y =?= a + y [Meta.isDefEq] [0.011580] ✅️ instHAdd.1 a y =?= instHAdd.1 a y [Meta.isDefEq] [0.011555] ✅️ Add.add a y =?= Add.add a y [Meta.isDefEq] [0.010344] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 a y =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 a y [Meta.isDefEq] [0.061446] ❌️ ?a ≍ ?a' =?= embedding v ≍ embedding (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.061372] ❌️ ?a' =?= embedding (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq.assign] [0.061364] ❌️ ?a' := embedding (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq.assign.checkTypes] [0.061357] ❌️ (?a' : WithVal (valuation K v) →+* adicCompletion K v) := (embedding (equivHeightOneSpectrum.symm v).maximalIdeal : WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) →+* adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal) [Meta.isDefEq] [0.061356] ❌️ WithVal (valuation K v) →+* adicCompletion K v =?= WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) →+* adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.061351] ❌️ WithVal (valuation K v) →+* adicCompletion K v =?= WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) →+* adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.061324] ❌️ adicCompletion K v =?= adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal [Meta.isDefEq] [0.061312] ❌️ (valuation K v).Completion =?= (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal).Completion [Meta.isDefEq] [0.061302] ❌️ UniformSpace.Completion (WithVal (valuation K v)) =?= UniformSpace.Completion (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq.delta] [0.060629] ❌️ UniformSpace.Completion (WithVal (valuation K v)) =?= UniformSpace.Completion (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.060616] ❌️ (WithVal.instValued (valuation K v)).toUniformSpace =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace [Meta.isDefEq] [0.060605] ❌️ (WithVal.instValued (valuation K v)).1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1 [Meta.isDefEq] [0.053356] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq.delta] [0.051709] ❌️ IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K v)) =?= IsTopologicalAddGroup.toUniformSpace (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)) [Meta.isDefEq] [0.051149] ❌️ ⋯.topology =?= ⋯.topology [Meta.isDefEq] [0.049147] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology [Meta.isDefEq] [0.044782] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq.delta] [0.023184] ❌️ TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.023070] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N [Meta.isDefEq] [0.023047] ❌️ fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= fun x ↦ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.023037] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq.delta] [0.010501] ❌️ Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter [Meta.isDefEq] [0.012513] ❌️ { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } =?= { sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets, univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ } [Meta.isDefEq] [0.012377] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets [Meta.isDefEq] [0.021573] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ } [Meta.isDefEq] [0.021387] ❌️ fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.021331] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a [Meta.isDefEq] [0.021323] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s [Meta.isDefEq] [0.021302] ❌️ s ∈ (⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets [Meta.isDefEq] [0.021293] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.021277] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem s =?= (⋯.toRingFilterBasis.N a).sets.Mem s [Meta.isDefEq] [0.021269] ❌️ (⋯.toRingFilterBasis.N a).sets s =?= (⋯.toRingFilterBasis.N a).sets s [Meta.isDefEq] [0.021256] ❌️ (⋯.toRingFilterBasis.N a).1 s =?= (⋯.toRingFilterBasis.N a).1 s [Meta.isDefEq] [0.021192] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq.delta] [0.018632] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s =?= ((Set.preimage fun y ↦ a + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets) s [Meta.isDefEq] [0.010832] ✅️ Set.preimage fun y ↦ a + y =?= Set.preimage fun y ↦ a + y [Meta.isDefEq.delta] [0.010824] ✅️ Set.preimage fun y ↦ a + y =?= Set.preimage fun y ↦ a + y [Meta.isDefEq] [0.010785] ✅️ fun y ↦ a + y =?= fun y ↦ a + y [Meta.isDefEq] [0.010776] ✅️ a + y =?= a + y [Meta.isDefEq] [0.010681] ✅️ instHAdd.1 a y =?= instHAdd.1 a y [Meta.isDefEq] [0.010658] ✅️ Add.add a y =?= Add.add a y [Meta.isDefEq] [0.010025] ✅️ (WithVal.instRing (valuation K v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 a y =?= (WithVal.instRing (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 a y [Elab.def.processPreDef] [0.020185] process pre-definitions info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:6: [Elab.async] [2.973953] Lean.addDecl [Kernel] [2.973884] ✅️ typechecking declarations [IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply] Build completed successfully (2937 jobs). ``` ### Trace profiling of `equivHeightOneSpectrum_symm_apply` after PR 28567 ```diff diff --git a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean index c2a297a496..1cb6af99ea 100644 --- a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean +++ b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean @@ -306,12 +306,10 @@ open NumberField.FinitePlace NumberField.RingOfIntegers NumberField.RingOfIntegers.HeightOneSpectrum open scoped NumberField +set_option trace.profiler true in lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) : (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by - have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by - change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v) - exact (Equiv.apply_symm_apply _ v).symm - convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm + tauto open Ideal in lemma embedding_mul_absNorm (v : HeightOneSpectrum (𝓞 K)) {x : 𝓞 (WithVal (v.valuation K))} diff --git a/Mathlib/NumberTheory/Padics/PadicNumbers.lean b/Mathlib/NumberTheory/Padics/PadicNumbers.lean index efe52e430d..948dd4cee3 100644 --- a/Mathlib/NumberTheory/Padics/PadicNumbers.lean +++ b/Mathlib/NumberTheory/Padics/PadicNumbers.lean @@ -882,11 +882,7 @@ protected theorem image {q : ℚ_[p]} : q ≠ 0 → ∃ n : ℤ, ‖q‖ = ↑(( ⟨n, by rw [← hn]; rfl⟩ protected theorem is_rat (q : ℚ_[p]) : ∃ q' : ℚ, ‖q‖ = q' := by - classical - exact if h : q = 0 then ⟨0, by simp [h]⟩ - else - let ⟨n, hn⟩ := padicNormE.image h - ⟨_, hn⟩ + tauto /-- `ratNorm q`, for a `p`-adic number `q` is the `p`-adic norm of `q`, as rational number. ``` ``` ℹ [2937/2937] Built Mathlib.NumberTheory.NumberField.FinitePlaces (4.2s) info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.026755] theorem equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) : (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by tauto [Elab.definition.header] [0.025728] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply [Elab.step] [0.025064] expected type: Sort ?u.35696, term (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ [Elab.step] [0.025056] expected type: Sort ?u.35696, term binrel% Eq✝ ((equivHeightOneSpectrum.symm v) x) ‖embedding v x‖ [Elab.step] [0.012416] expected type: , term norm✝ (embedding v x) info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.026828] lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) : (equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by tauto info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.async] [0.028408] elaborating proof of IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply [Elab.definition.value] [0.024649] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply [Elab.step] [0.024119] tauto [Elab.step] [0.024105] tauto [Elab.step] [0.024091] tauto [Elab.step] [0.013324] rfl [Elab.step] [0.012677] eq_refl [Meta.isDefEq] [0.012655] ✅️ (equivHeightOneSpectrum.symm v) x =?= ‖(embedding v) x‖ [Meta.isDefEq] [0.012305] ✅️ instFunLikeReal.1 (equivHeightOneSpectrum.symm v) x =?= (NumberField.instNormedFieldValuedAdicCompletion v).toNorm.1 ((embedding v) x) [Meta.isDefEq] [0.012206] ✅️ ↑(equivHeightOneSpectrum.symm v) x =?= (NumberField.instNormedFieldValuedAdicCompletion v).toNorm.1 ((embedding v) x) [Meta.isDefEq] [0.012117] ✅️ ↑(equivHeightOneSpectrum.symm v) x =?= Valued.norm ((embedding v) x) [Meta.isDefEq] [0.012052] ✅️ ↑(equivHeightOneSpectrum.symm v) x =?= ↑((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))) [Meta.isDefEq] [0.012019] ✅️ ↑(equivHeightOneSpectrum.symm v) x =?= ↑((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))) [Meta.isDefEq] [0.011982] ✅️ ↑(equivHeightOneSpectrum.symm v) x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1 [Meta.isDefEq] [0.010958] ✅️ AbsoluteValue.funLike.1 (↑(equivHeightOneSpectrum.symm v)) x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1 [Meta.isDefEq] [0.010808] ✅️ (↑(equivHeightOneSpectrum.symm v)).toFun x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1 [Meta.isDefEq] [0.010382] ✅️ (↑(equivHeightOneSpectrum.symm v)).toMulHom.1 x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1 Build completed successfully (2937 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-number-theory 2/9 Mathlib/NumberTheory/NumberField/FinitePlaces.lean,Mathlib/NumberTheory/Padics/PadicNumbers.lean 2 1 ['github-actions'] nobody
3-32561
3 days ago
3-34418
3 days ago
3-34460
3 days
28568 euprunin
author:euprunin
chore(Order): golf entire `IsBoundedUnder.eventually_le` and `ωSup_zip` using `tauto` ---
Show trace profiling of IsBoundedUnder.eventually_le: 29 ms before, <10 ms after 🎉 ### Trace profiling of `IsBoundedUnder.eventually_le` before PR 28568 ```diff diff --git a/Mathlib/Order/Filter/IsBounded.lean b/Mathlib/Order/Filter/IsBounded.lean index 0b39507eeb..2cccc61fed 100644 --- a/Mathlib/Order/Filter/IsBounded.lean +++ b/Mathlib/Order/Filter/IsBounded.lean @@ -89,6 +89,7 @@ lemma Tendsto.isBoundedUnder_comp {ι κ X : Type*} {r : X → X → Prop} {f : section Preorder variable [Preorder α] {f : Filter β} {u : β → α} {s : Set β} +set_option trace.profiler true in lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by obtain ⟨a, ha⟩ := h ``` ``` ℹ [749/749] Built Mathlib.Order.Filter.IsBounded (2.5s) info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.async] [0.029670] elaborating proof of Filter.IsBoundedUnder.eventually_le [Elab.definition.value] [0.029304] Filter.IsBoundedUnder.eventually_le [Elab.step] [0.029016] obtain ⟨a, ha⟩ := h use a exact eventually_map.1 ha [Elab.step] [0.029003] obtain ⟨a, ha⟩ := h use a exact eventually_map.1 ha [Elab.step] [0.025774] use a Build completed successfully (749 jobs). ``` ### Trace profiling of `IsBoundedUnder.eventually_le` after PR 28568 ```diff diff --git a/Mathlib/Order/Filter/IsBounded.lean b/Mathlib/Order/Filter/IsBounded.lean index 0b39507eeb..6c37d8738d 100644 --- a/Mathlib/Order/Filter/IsBounded.lean +++ b/Mathlib/Order/Filter/IsBounded.lean @@ -89,11 +89,10 @@ lemma Tendsto.isBoundedUnder_comp {ι κ X : Type*} {r : X → X → Prop} {f : section Preorder variable [Preorder α] {f : Filter β} {u : β → α} {s : Set β} +set_option trace.profiler true in lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by - obtain ⟨a, ha⟩ := h - use a - exact eventually_map.1 ha + tauto lemma IsBoundedUnder.eventually_ge (h : IsBoundedUnder (· ≥ ·) f u) : ∃ a, ∀ᶠ x in f, a ≤ u x := diff --git a/Mathlib/Order/OmegaCompletePartialOrder.lean b/Mathlib/Order/OmegaCompletePartialOrder.lean index 219ddb0595..759fda09a7 100644 --- a/Mathlib/Order/OmegaCompletePartialOrder.lean +++ b/Mathlib/Order/OmegaCompletePartialOrder.lean @@ -422,8 +422,7 @@ instance : OmegaCompletePartialOrder (α × β) where le_ωSup c i := ⟨le_ωSup (c.map OrderHom.fst) i, le_ωSup (c.map OrderHom.snd) i⟩ theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by - apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩ - simp [ωSup_le_iff, forall_and] + tauto end Prod ``` ``` ℹ [749/749] Built Mathlib.Order.Filter.IsBounded (2.5s) info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.command] [0.015651] theorem eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by tauto info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.command] [0.015910] theorem IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by tauto info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.command] [0.015955] lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by tauto Build completed successfully (749 jobs). ```
---
Show trace profiling of ωSup_zip: 25 ms before, 13 ms after 🎉 ### Trace profiling of `ωSup_zip` before PR 28568 ```diff diff --git a/Mathlib/Order/OmegaCompletePartialOrder.lean b/Mathlib/Order/OmegaCompletePartialOrder.lean index 219ddb0595..7d813efc08 100644 --- a/Mathlib/Order/OmegaCompletePartialOrder.lean +++ b/Mathlib/Order/OmegaCompletePartialOrder.lean @@ -421,6 +420,7 @@ instance : OmegaCompletePartialOrder (α × β) where ωSup_le := fun _ _ h => ⟨ωSup_le _ _ fun i => (h i).1, ωSup_le _ _ fun i => (h i).2⟩ le_ωSup c i := ⟨le_ωSup (c.map OrderHom.fst) i, le_ωSup (c.map OrderHom.snd) i⟩ +set_option trace.profiler true in theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩ simp [ωSup_le_iff, forall_and] ``` ``` ℹ [552/552] Built Mathlib.Order.OmegaCompletePartialOrder (3.1s) info: Mathlib/Order/OmegaCompletePartialOrder.lean:424:0: [Elab.async] [0.027082] elaborating proof of Prod.ωSup_zip [Elab.definition.value] [0.025244] Prod.ωSup_zip [Elab.step] [0.024383] apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩ simp [ωSup_le_iff, forall_and] [Elab.step] [0.024368] apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩ simp [ωSup_le_iff, forall_and] [Elab.step] [0.023210] simp [ωSup_le_iff, forall_and] Build completed successfully (552 jobs). ``` ### Trace profiling of `ωSup_zip` after PR 28568 ```diff diff --git a/Mathlib/Order/Filter/IsBounded.lean b/Mathlib/Order/Filter/IsBounded.lean index 0b39507eeb..55bad37314 100644 --- a/Mathlib/Order/Filter/IsBounded.lean +++ b/Mathlib/Order/Filter/IsBounded.lean @@ -91,9 +91,7 @@ variable [Preorder α] {f : Filter β} {u : β → α} {s : Set β} lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by - obtain ⟨a, ha⟩ := h - use a - exact eventually_map.1 ha + tauto lemma IsBoundedUnder.eventually_ge (h : IsBoundedUnder (· ≥ ·) f u) : ∃ a, ∀ᶠ x in f, a ≤ u x := diff --git a/Mathlib/Order/OmegaCompletePartialOrder.lean b/Mathlib/Order/OmegaCompletePartialOrder.lean index 219ddb0595..e52102f720 100644 --- a/Mathlib/Order/OmegaCompletePartialOrder.lean +++ b/Mathlib/Order/OmegaCompletePartialOrder.lean @@ -421,9 +420,9 @@ instance : OmegaCompletePartialOrder (α × β) where ωSup_le := fun _ _ h => ⟨ωSup_le _ _ fun i => (h i).1, ωSup_le _ _ fun i => (h i).2⟩ le_ωSup c i := ⟨le_ωSup (c.map OrderHom.fst) i, le_ωSup (c.map OrderHom.snd) i⟩ +set_option trace.profiler true in theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by - apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩ - simp [ωSup_le_iff, forall_and] + tauto end Prod ``` ``` ℹ [552/552] Built Mathlib.Order.OmegaCompletePartialOrder (3.1s) info: Mathlib/Order/OmegaCompletePartialOrder.lean:424:0: [Elab.command] [0.014348] theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by tauto [Elab.definition.header] [0.013159] Prod.ωSup_zip [Elab.step] [0.011493] expected type: Sort ?u.22301, term ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) [Elab.step] [0.011481] expected type: Sort ?u.22301, term binrel% Eq✝ (ωSup (c₀.zip c₁)) (ωSup c₀, ωSup c₁) [Elab.step] [0.010391] expected type: , term ωSup (c₀.zip c₁) info: Mathlib/Order/OmegaCompletePartialOrder.lean:424:0: [Elab.async] [0.013177] elaborating proof of Prod.ωSup_zip [Elab.definition.value] [0.012696] Prod.ωSup_zip [Elab.step] [0.012302] tauto [Elab.step] [0.012286] tauto [Elab.step] [0.012266] tauto Build completed successfully (552 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-order 2/5 Mathlib/Order/Filter/IsBounded.lean,Mathlib/Order/OmegaCompletePartialOrder.lean 2 1 ['github-actions'] nobody
3-32347
3 days ago
3-34375
3 days ago
3-34416
3 days
28569 euprunin
author:euprunin
chore(Probability): golf entire `comp_const` and `piFinset_eq_comap_restrict` using `tauto` ---
Show trace profiling of _root_.ProbabilityTheory.Kernel.comp_const: 20 ms before, <10 ms after 🎉 ### Trace profiling of `_root_.ProbabilityTheory.Kernel.comp_const` before PR 28569 ```diff diff --git a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean index 2cbfe2e461..ced849b4ca 100644 --- a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean +++ b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean @@ -72,6 +72,7 @@ instance [IsZeroOrProbabilityMeasure μ] [IsZeroOrMarkovKernel κ] : IsZeroOrProbabilityMeasure (κ ∘ₘ μ) := by rw [← snd_compProd]; infer_instance +set_option trace.profiler true in @[simp] lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) : κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by ``` ``` ℹ [1740/1740] Built Mathlib.Probability.Kernel.Composition.MeasureComp (1.6s) info: Mathlib/Probability/Kernel/Composition/MeasureComp.lean:76:0: [Elab.command] [0.010029] @[simp] lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) : κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by ext x s hs rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)] info: Mathlib/Probability/Kernel/Composition/MeasureComp.lean:76:0: [Elab.async] [0.020986] elaborating proof of ProbabilityTheory.Kernel.comp_const [Elab.definition.value] [0.020223] ProbabilityTheory.Kernel.comp_const [Elab.step] [0.019492] ext x s hs rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)] [Elab.step] [0.019479] ext x s hs rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)] [Elab.step] [0.017845] rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)] [Elab.step] [0.017823] (rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.017815] rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.017809] rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.017492] rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, bind_apply hs (by fun_prop)] Build completed successfully (1740 jobs). ``` ### Trace profiling of `_root_.ProbabilityTheory.Kernel.comp_const` after PR 28569 ```diff diff --git a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean index 2cbfe2e461..38c1edaa80 100644 --- a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean +++ b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean @@ -72,12 +72,11 @@ instance [IsZeroOrProbabilityMeasure μ] [IsZeroOrMarkovKernel κ] : IsZeroOrProbabilityMeasure (κ ∘ₘ μ) := by rw [← snd_compProd]; infer_instance +set_option trace.profiler true in @[simp] lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) : κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by - ext x s hs - rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, - bind_apply hs (by fun_prop)] + tauto lemma map_comp (μ : Measure α) (κ : Kernel α β) {f : β → γ} (hf : Measurable f) : (κ ∘ₘ μ).map f = (κ.map f) ∘ₘ μ := by diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean index 13e2f0025b..78b9c37f5a 100644 --- a/Mathlib/Probability/Process/Filtration.lean +++ b/Mathlib/Probability/Process/Filtration.lean @@ -384,12 +384,7 @@ def piFinset : @Filtration (Π i, X i) (Finset ι) _ pi where lemma piFinset_eq_comap_restrict (s : Finset ι) : piFinset (X := X) s = pi.comap s.toSet.restrict := by - apply le_antisymm - · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, - ← comap_comp] - exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le - · rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] - exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le + tauto end piFinset ``` ``` ✔ [1740/1740] Built Mathlib.Probability.Kernel.Composition.MeasureComp (2.4s) Build completed successfully (1740 jobs). ```
---
Show trace profiling of piFinset_eq_comap_restrict: 28 ms before, <10 ms after 🎉 ### Trace profiling of `piFinset_eq_comap_restrict` before PR 28569 ```diff diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean index 13e2f0025b..eb3bc149ba 100644 --- a/Mathlib/Probability/Process/Filtration.lean +++ b/Mathlib/Probability/Process/Filtration.lean @@ -382,6 +382,7 @@ def piFinset : @Filtration (Π i, X i) (Finset ι) _ pi where exact comap_mono (measurable_restrict₂ hst).comap_le le' s := s.measurable_restrict.comap_le +set_option trace.profiler true in lemma piFinset_eq_comap_restrict (s : Finset ι) : piFinset (X := X) s = pi.comap s.toSet.restrict := by apply le_antisymm ``` ``` ℹ [2340/2340] Built Mathlib.Probability.Process.Filtration (1.9s) info: Mathlib/Probability/Process/Filtration.lean:386:0: [Elab.async] [0.029171] elaborating proof of MeasureTheory.Filtration.piFinset_eq_comap_restrict [Elab.definition.value] [0.028128] MeasureTheory.Filtration.piFinset_eq_comap_restrict [Elab.step] [0.027661] apply le_antisymm · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le · rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le [Elab.step] [0.027653] apply le_antisymm · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le · rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le [Elab.step] [0.017833] · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le [Elab.step] [0.017819] simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le [Elab.step] [0.017815] simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le [Elab.step] [0.013352] simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] Build completed successfully (2340 jobs). ``` ### Trace profiling of `piFinset_eq_comap_restrict` after PR 28569 ```diff diff --git a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean index 2cbfe2e461..7f242dd0c5 100644 --- a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean +++ b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean @@ -75,9 +75,7 @@ instance [IsZeroOrProbabilityMeasure μ] [IsZeroOrMarkovKernel κ] : @[simp] lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) : κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by - ext x s hs - rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply, - bind_apply hs (by fun_prop)] + tauto lemma map_comp (μ : Measure α) (κ : Kernel α β) {f : β → γ} (hf : Measurable f) : (κ ∘ₘ μ).map f = (κ.map f) ∘ₘ μ := by diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean index 13e2f0025b..ce51705c7f 100644 --- a/Mathlib/Probability/Process/Filtration.lean +++ b/Mathlib/Probability/Process/Filtration.lean @@ -382,14 +382,10 @@ def piFinset : @Filtration (Π i, X i) (Finset ι) _ pi where exact comap_mono (measurable_restrict₂ hst).comap_le le' s := s.measurable_restrict.comap_le +set_option trace.profiler true in lemma piFinset_eq_comap_restrict (s : Finset ι) : piFinset (X := X) s = pi.comap s.toSet.restrict := by - apply le_antisymm - · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, - ← comap_comp] - exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le - · rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp] - exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le + tauto end piFinset ``` ``` ✔ [2340/2340] Built Mathlib.Probability.Process.Filtration (1.7s) Build completed successfully (2340 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-measure-probability 2/9 Mathlib/Probability/Kernel/Composition/MeasureComp.lean,Mathlib/Probability/Process/Filtration.lean 2 1 ['github-actions'] nobody
3-32266
3 days ago
3-34334
3 days ago
3-34382
3 days
28556 euprunin
author:euprunin
chore(Algebra): golf entire `linearEquivFunOnFintype_lof`, `mem_valueMonoid`, `ofIsColimitCokernelCofork_f` and more using `tauto` ---
Show trace profiling of linearEquivFunOnFintype_lof: 81 ms before, 12 ms after 🎉 ### Trace profiling of `linearEquivFunOnFintype_lof` before PR 28556 ```diff diff --git a/Mathlib/Algebra/DirectSum/Module.lean b/Mathlib/Algebra/DirectSum/Module.lean index 9f114bb72d..453547fa5d 100644 --- a/Mathlib/Algebra/DirectSum/Module.lean +++ b/Mathlib/Algebra/DirectSum/Module.lean @@ -148,6 +148,7 @@ def linearEquivFunOnFintype [Fintype ι] : (⨁ i, M i) ≃ₗ[R] ∀ i, M i := variable {ι M} +set_option trace.profiler true in @[simp] theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) : (linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by ``` ``` ℹ [1122/1122] Built Mathlib.Algebra.DirectSum.Module (3.7s) info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.command] [0.017342] @[simp] theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) : (linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by ext a change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _ convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.async] [0.083896] elaborating proof of DirectSum.linearEquivFunOnFintype_lof [Elab.definition.value] [0.081072] DirectSum.linearEquivFunOnFintype_lof [Elab.step] [0.079142] ext a change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _ convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a [Elab.step] [0.079123] ext a change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _ convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a [Elab.step] [0.018446] change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _ [Elab.step] [0.017469] expected type: Prop, term (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _ [Elab.step] [0.017457] expected type: Prop, term binrel% Eq✝ ((DFinsupp.equivFunOnFintype (lof R ι M i m)) a) _ [Elab.step] [0.017290] expected type: , term (DFinsupp.equivFunOnFintype (lof R ι M i m)) a [Elab.step] [0.017226] expected type: , term (DFinsupp.equivFunOnFintype (lof R ι M i m)) [Elab.step] [0.017215] expected type: , term DFinsupp.equivFunOnFintype (lof R ι M i m) [Elab.step] [0.058501] convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a Build completed successfully (1122 jobs). ``` ### Trace profiling of `linearEquivFunOnFintype_lof` after PR 28556 ```diff diff --git a/Mathlib/Algebra/DirectSum/Module.lean b/Mathlib/Algebra/DirectSum/Module.lean index 9f114bb72d..51e7d0aff8 100644 --- a/Mathlib/Algebra/DirectSum/Module.lean +++ b/Mathlib/Algebra/DirectSum/Module.lean @@ -148,12 +148,11 @@ def linearEquivFunOnFintype [Fintype ι] : (⨁ i, M i) ≃ₗ[R] ∀ i, M i := variable {ι M} +set_option trace.profiler true in @[simp] theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) : (linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by - ext a - change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _ - convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a + tauto @[simp] theorem linearEquivFunOnFintype_symm_single [Fintype ι] (i : ι) (m : M i) : diff --git a/Mathlib/Algebra/GroupWithZero/Range.lean b/Mathlib/Algebra/GroupWithZero/Range.lean index fdd5278569..1fe25c4437 100644 --- a/Mathlib/Algebra/GroupWithZero/Range.lean +++ b/Mathlib/Algebra/GroupWithZero/Range.lean @@ -100,9 +100,7 @@ codomain containing the range of `f`. -/ abbrev valueGroup₀ := WithZero (valueGroup f) lemma mem_valueMonoid {b : Bˣ} (hb : b.val ∈ range f) : b ∈ valueMonoid f := by - rcases hb with ⟨c, _⟩ - simp only [mem_valueMonoid_iff, mem_preimage, mem_range] - use c + tauto lemma mem_valueGroup {b : Bˣ} (hb : b.1 ∈ range f) : b ∈ valueGroup f := by suffices b ∈ valueMonoid f from Subgroup.mem_closure.mpr fun _ a ↦ a this diff --git a/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean b/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean index 4434f1d449..e3961157eb 100644 --- a/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean +++ b/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean @@ -153,10 +153,7 @@ def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsCo @[simp] lemma ofIsColimitCokernelCofork_f' (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsColimit c) : (ofIsColimitCokernelCofork S hg c hc).f' = S.f := by - rw [← cancel_mono (ofIsColimitCokernelCofork S hg c hc).i, f'_i, - ofIsColimitCokernelCofork_i] - dsimp - rw [comp_id] + tauto /-- When the second map `S.g` is zero, this is the left homology data on `S` given by the chosen `cokernel S.f` -/ diff --git a/Mathlib/Algebra/Lie/OfAssociative.lean b/Mathlib/Algebra/Lie/OfAssociative.lean index c50ddbb4e8..a62abca315 100644 --- a/Mathlib/Algebra/Lie/OfAssociative.lean +++ b/Mathlib/Algebra/Lie/OfAssociative.lean @@ -341,10 +341,7 @@ theorem toEnd_comp_subtype_mem (m : M) (hm : m ∈ (N : Submodule R M)) : @[simp] theorem toEnd_restrict_eq_toEnd (h := N.toEnd_comp_subtype_mem x) : (toEnd R L M x).restrict h = toEnd R L N x := by - ext - simp only [LinearMap.restrict_coe_apply, toEnd_apply_apply, ← coe_bracket, - SetLike.coe_eq_coe] - rfl + tauto lemma mapsTo_pow_toEnd_sub_algebraMap {φ : R} {k : ℕ} {x : L} : MapsTo ((toEnd R L M x - algebraMap R (Module.End R M) φ) ^ k) N N := by diff --git a/Mathlib/Algebra/Polynomial/AlgebraMap.lean b/Mathlib/Algebra/Polynomial/AlgebraMap.lean index a7add7b33f..e49df2df8d 100644 --- a/Mathlib/Algebra/Polynomial/AlgebraMap.lean +++ b/Mathlib/Algebra/Polynomial/AlgebraMap.lean @@ -175,9 +175,7 @@ theorem mapAlgHom_comp (C : Type*) [Semiring C] [Algebra R C] (f : B →ₐ[R] C theorem mapAlgHom_eq_eval₂AlgHom'_CAlgHom (f : A →ₐ[R] B) : mapAlgHom f = eval₂AlgHom' (CAlgHom.comp f) X (fun a => (commute_X (C (f a))).symm) := by - apply AlgHom.ext - intro x - congr + tauto /-- If `A` and `B` are isomorphic as `R`-algebras, then so are their polynomial rings -/ def mapAlgEquiv (f : A ≃ₐ[R] B) : Polynomial A ≃ₐ[R] Polynomial B := @@ -244,8 +242,7 @@ lemma eval_map_algebraMap (P : R[X]) (b : B) : /-- `mapAlg` is the morphism induced by `R → S`. -/ theorem mapAlg_eq_map (S : Type v) [Semiring S] [Algebra R S] (p : R[X]) : mapAlg R S p = map (algebraMap R S) p := by - simp only [mapAlg, aeval_def, eval₂_eq_sum, map, algebraMap_apply, RingHom.coe_comp] - ext; congr + tauto theorem aeval_zero : aeval x (0 : R[X]) = 0 := map_zero (aeval x) diff --git a/Mathlib/Algebra/Polynomial/Coeff.lean b/Mathlib/Algebra/Polynomial/Coeff.lean index b89c65aa6a..9edad6136e 100644 --- a/Mathlib/Algebra/Polynomial/Coeff.lean +++ b/Mathlib/Algebra/Polynomial/Coeff.lean @@ -43,9 +43,7 @@ theorem coeff_add (p q : R[X]) (n : ℕ) : coeff (p + q) n = coeff p n + coeff q @[simp] theorem coeff_smul [SMulZeroClass S R] (r : S) (p : R[X]) (n : ℕ) : coeff (r • p) n = r • coeff p n := by - rcases p with ⟨⟩ - simp_rw [← ofFinsupp_smul, coeff] - exact Finsupp.smul_apply _ _ _ + tauto theorem support_smul [SMulZeroClass S R] (r : S) (p : R[X]) : support (r • p) ⊆ support p := by diff --git a/Mathlib/Algebra/RingQuot.lean b/Mathlib/Algebra/RingQuot.lean index 8e42eb3c42..64a264b5a2 100644 --- a/Mathlib/Algebra/RingQuot.lean +++ b/Mathlib/Algebra/RingQuot.lean @@ -242,9 +242,7 @@ theorem sub_quot {R : Type uR} [Ring R] (r : R → R → Prop) {a b} : theorem smul_quot [Algebra S R] {n : S} {a : R} : (n • ⟨Quot.mk _ a⟩ : RingQuot r) = ⟨Quot.mk _ (n • a)⟩ := by - change smul r _ _ = _ - rw [smul] - rfl + tauto instance instIsScalarTower [CommSemiring T] [SMul S T] [Algebra S R] [Algebra T R] [IsScalarTower S T R] : IsScalarTower S T (RingQuot r) := diff --git a/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean b/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean index 5d63000eda..90ac5ac68f 100644 --- a/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean +++ b/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean @@ -213,9 +213,7 @@ theorem coeff_add (p q : SkewMonoidAlgebra k G) (a : G) : @[simp] theorem coeff_smul {S} [SMulZeroClass S k] (r : S) (p : SkewMonoidAlgebra k G) (a : G) : coeff (r • p) a = r • coeff p a := by - rcases p - simp_rw [← ofFinsupp_smul, coeff] - exact Finsupp.smul_apply _ _ _ + tauto end Coeff ``` ``` ℹ [1122/1122] Built Mathlib.Algebra.DirectSum.Module (3.8s) info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.command] [0.023466] @[simp] theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) : (linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by tauto info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.async] [0.013767] elaborating proof of DirectSum.linearEquivFunOnFintype_lof [Elab.definition.value] [0.012260] DirectSum.linearEquivFunOnFintype_lof [Elab.step] [0.011580] tauto [Elab.step] [0.011563] tauto [Elab.step] [0.011547] tauto Build completed successfully (1122 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebra
label:t-algebra$
9/28 Mathlib/Algebra/DirectSum/Module.lean,Mathlib/Algebra/GroupWithZero/Range.lean,Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean,Mathlib/Algebra/Lie/OfAssociative.lean,Mathlib/Algebra/Polynomial/AlgebraMap.lean,Mathlib/Algebra/Polynomial/Coeff.lean,Mathlib/Algebra/RingQuot.lean,Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean 8 1 ['github-actions'] nobody
3-32110
3 days ago
3-35178
3 days ago
3-35225
3 days
28558 euprunin
author:euprunin
chore(Analysis): golf entire `HasGradientAtFilter.hasDerivAtFilter`, `liftIsometry_symm_apply` and `mapL_apply` using `tauto` ---
Show trace profiling of HasGradientAtFilter.hasDerivAtFilter: 324 ms before, 26 ms after 🎉 ### Trace profiling of `HasGradientAtFilter.hasDerivAtFilter` before PR 28558 ```diff diff --git a/Mathlib/Analysis/Calculus/Gradient/Basic.lean b/Mathlib/Analysis/Calculus/Gradient/Basic.lean index 836221ccf3..006cb65688 100644 --- a/Mathlib/Analysis/Calculus/Gradient/Basic.lean +++ b/Mathlib/Analysis/Calculus/Gradient/Basic.lean @@ -154,6 +154,7 @@ section OneDimension variable {g : 𝕜 → 𝕜} {g' u : 𝕜} {L' : Filter 𝕜} +set_option trace.profiler true in theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') : HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ``` ``` ℹ [2086/2086] Built Mathlib.Analysis.Calculus.Gradient.Basic (4.4s) info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.077182] theorem hasDerivAtFilter (h : HasGradientAtFilter g g' u L') : HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp rwa [HasDerivAtFilter, this] [Elab.definition.header] [0.071511] HasGradientAtFilter.hasDerivAtFilter [Elab.step] [0.019228] expected type: Prop, term HasGradientAtFilter g g' u L' [Elab.step] [0.052190] expected type: Prop, term HasDerivAtFilter g (starRingEnd 𝕜 g') u L' [Meta.synthInstance] [0.037008] ✅️ ContinuousSMul 𝕜 𝕜 [Meta.synthInstance] [0.019129] ✅️ apply @IsTopologicalRing.toIsTopologicalSemiring to IsTopologicalSemiring 𝕜 [Meta.synthInstance.tryResolve] [0.019091] ✅️ IsTopologicalSemiring 𝕜 ≟ IsTopologicalSemiring 𝕜 [Meta.isDefEq] [0.017149] ✅️ IsTopologicalSemiring 𝕜 =?= IsTopologicalSemiring ?m.29 [Meta.isDefEq] [0.017098] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalNonAssocSemiring =?= NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring [Meta.isDefEq] [0.017028] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalNonAssocSemiring =?= { toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯, toMul := NonUnitalNonAssocRing.toMul, left_distrib := ⋯, right_distrib := ⋯, zero_mul := ⋯, mul_zero := ⋯ } [Meta.isDefEq] [0.017014] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1 =?= { toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯, toMul := NonUnitalNonAssocRing.toMul, left_distrib := ⋯, right_distrib := ⋯, zero_mul := ⋯, mul_zero := ⋯ } [Meta.isDefEq] [0.015330] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.toAddCommMonoid =?= { toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯ } [Meta.isDefEq] [0.015316] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1 =?= { toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯ } [Meta.isDefEq] [0.015177] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.toAddMonoid =?= NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid [Meta.isDefEq] [0.015106] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NonUnitalNonAssocRing.toAddCommGroup.toSubNegMonoid.1 [Meta.isDefEq.onFailure] [0.014986] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NonUnitalNonAssocRing.toAddCommGroup.toSubNegMonoid.1 [Meta.isDefEq] [0.014035] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NormedCommRing.toNonUnitalNormedCommRing.toNonUnitalCommRing.toNonUnitalNonAssocCommRing.toSubNegMonoid.1 [Meta.isDefEq] [0.013895] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NormedField.toNormedCommRing.toAddMonoid [Meta.isDefEq] [0.013785] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NormedField.toNormedCommRing.toAddCommMonoid.1 [Meta.isDefEq] [0.013679] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1 =?= NormedField.toNormedCommRing.toAddCommMonoid [Meta.isDefEq] [0.011626] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1 =?= NormedField.toNormedCommRing.toNonUnitalNonAssocSemiring.1 [Meta.isDefEq] [0.011408] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1 =?= NormedField.toNormedCommRing.toNonUnitalNonAssocSemiring [Meta.isDefEq] [0.011153] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1 =?= NormedField.toNormedCommRing.toNonUnitalSemiring.1 [Meta.isDefEq] [0.010965] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring =?= NormedField.toNormedCommRing.toNonUnitalSemiring [Meta.isDefEq] [0.010944] ✅️ Field.toSemifield.toDivisionSemiring.toSemiring.1 =?= NormedField.toNormedCommRing.toSemiring.1 [Meta.whnf] [0.010322] Non-easy whnf: Field.toSemifield.toDivisionSemiring.toSemiring [Meta.whnf] [0.010314] Non-easy whnf: Field.toSemifield.toDivisionSemiring.1 [Meta.whnf] [0.010293] Non-easy whnf: Field.toSemifield.toCommSemiring.1 [Meta.whnf] [0.010257] Non-easy whnf: inst✝³.toRing.1 [Meta.whnf] [0.010253] Non-easy whnf: inst✝³.toRing [Meta.whnf] [0.010247] Non-easy whnf: inst✝³.toCommRing.1 [Meta.whnf] [0.010244] Non-easy whnf: inst✝³.toCommRing [Meta.whnf] [0.010238] Non-easy whnf: inst✝³.toField.1 [Meta.whnf] [0.010233] Non-easy whnf: inst✝³.toField [Meta.whnf] [0.010226] Non-easy whnf: inst✝³.toNormedField.2 [Meta.whnf] [0.010221] Non-easy whnf: inst✝³.toNormedField info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.077452] theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') : HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp rwa [HasDerivAtFilter, this] info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.async] [0.324880] elaborating proof of HasGradientAtFilter.hasDerivAtFilter [Elab.definition.value] [0.323521] HasGradientAtFilter.hasDerivAtFilter [Elab.step] [0.322337] have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp rwa [HasDerivAtFilter, this] [Elab.step] [0.322326] have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp rwa [HasDerivAtFilter, this] [Elab.step] [0.246424] have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp [Elab.step] [0.246399] focus refine no_implicit_lambda% (have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_) case body✝ => with_annotate_state"by" (ext; simp) [Elab.step] [0.246383] refine no_implicit_lambda% (have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_) case body✝ => with_annotate_state"by" (ext; simp) [Elab.step] [0.246374] refine no_implicit_lambda% (have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_) case body✝ => with_annotate_state"by" (ext; simp) [Elab.step] [0.129317] refine no_implicit_lambda% (have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_) [Elab.step] [0.129244] expected type: HasDerivAtFilter g ((starRingEnd 𝕜) g') u L', term no_implicit_lambda% (have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_) [Elab.step] [0.129237] expected type: HasDerivAtFilter g ((starRingEnd 𝕜) g') u L', term (have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_) [Elab.step] [0.129227] expected type: HasDerivAtFilter g ((starRingEnd 𝕜) g') u L', term have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := ?body✝; ?_ [Elab.step] [0.129071] expected type: Sort ?u.35930, term ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' [Elab.step] [0.129062] expected type: Sort ?u.35930, term binrel% Eq✝ (ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g')) ((toDual 𝕜 𝕜) g') [Elab.step] [0.079658] expected type: , term ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') [Elab.step] [0.026622] expected type: ?m.21 →L[?m.27] ?m.28, term (1 : 𝕜 →L[𝕜] 𝕜) [Elab.step] [0.019404] expected type: Type u_1, term 𝕜 →L[𝕜] 𝕜 [Elab.step] [0.019229] expected type: Type u_1, term ContinuousLinearMap✝ (RingHom.id✝ 𝕜) 𝕜 𝕜 [Meta.synthInstance] [0.021520] ✅️ ContinuousSMul 𝕜 𝕜 [Elab.step] [0.041933] expected type: , term (toDual 𝕜 𝕜) g' [Meta.synthInstance] [0.032953] ✅️ CoeFun (𝕜 ≃ₗᵢ⋆[𝕜] StrongDual 𝕜 𝕜) fun x ↦ 𝕜 → StrongDual 𝕜 𝕜 [Meta.check] [0.025804] ✅️ LinearIsometryEquiv.instCoeFun [Meta.isDefEq] [0.010457] ✅️ Module 𝕜 (StrongDual 𝕜 𝕜) =?= Module 𝕜 (𝕜 →L[𝕜] 𝕜) [Meta.isDefEq] [0.010431] ✅️ ContinuousLinearMap.toSeminormedAddCommGroup.toAddCommMonoid =?= ContinuousLinearMap.addCommMonoid [Meta.isDefEq] [0.010421] ✅️ { toAddMonoid := ContinuousLinearMap.toSeminormedAddCommGroup.toAddMonoid, add_comm := ⋯ } =?= ContinuousLinearMap.addCommMonoid [Meta.isDefEq] [0.010404] ✅️ { toAddMonoid := ContinuousLinearMap.toSeminormedAddCommGroup.toAddMonoid, add_comm := ⋯ } =?= { toAdd := ContinuousLinearMap.add, add_assoc := ⋯, toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯, nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯, add_comm := ⋯ } [Meta.isDefEq] [0.010392] ✅️ ContinuousLinearMap.toSeminormedAddCommGroup.toAddMonoid =?= { toAdd := ContinuousLinearMap.add, add_assoc := ⋯, toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯, nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ } [Meta.isDefEq] [0.010385] ✅️ ContinuousLinearMap.toSeminormedAddCommGroup.toSubNegMonoid.1 =?= { toAdd := ContinuousLinearMap.add, add_assoc := ⋯, toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯, nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ } [Meta.isDefEq] [0.010308] ✅️ { toAddSemigroup := ContinuousLinearMap.addCommMonoid.toAddSemigroup, toZero := ContinuousLinearMap.addCommMonoid.toZero, zero_add := ⋯, add_zero := ⋯, nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ } =?= { toAdd := ContinuousLinearMap.add, add_assoc := ⋯, toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯, nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ } [Elab.step] [0.117036] case body✝ => with_annotate_state"by" (ext; simp) [Elab.step] [0.116833] with_annotate_state"by" (ext; simp) [Elab.step] [0.116825] with_annotate_state"by" (ext; simp) [Elab.step] [0.116817] with_annotate_state"by" (ext; simp) [Elab.step] [0.116808] (ext; simp) [Elab.step] [0.116800] ext; simp [Elab.step] [0.116792] ext; simp [Elab.step] [0.023272] ext [Meta.isDefEq] [0.014782] ✅️ ?f = ?g =?= ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') = (toDual 𝕜 𝕜) g' [Elab.step] [0.093490] simp [Meta.isDefEq] [0.011156] ✅️ (ContinuousLinearMap.smulRight ?c ?f) ?x =?= (ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g')) 1 [Meta.isDefEq] [0.010884] ✅️ ContinuousLinearMap.smulRight ?c ?f =?= ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') [Meta.isDefEq] [0.012606] ❌️ ?f 1 =?= ((toDual 𝕜 𝕜) g') 1 [Meta.isDefEq] [0.023888] ✅️ ((toDual ?𝕜 ?E) ?x) ?y =?= ((toDual 𝕜 𝕜) g') 1 [Meta.isDefEq] [0.013961] ✅️ (toDual ?𝕜 𝕜) ?x =?= (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.013464] ✅️ toDual ?𝕜 𝕜 =?= toDual 𝕜 𝕜 [Elab.step] [0.075876] rwa [HasDerivAtFilter, this] [Elab.step] [0.075525] (rw [HasDerivAtFilter, this]; assumption) [Elab.step] [0.075510] rw [HasDerivAtFilter, this]; assumption [Elab.step] [0.075500] rw [HasDerivAtFilter, this]; assumption [Elab.step] [0.071153] rw [HasDerivAtFilter, this] [Elab.step] [0.071142] (rewrite [HasDerivAtFilter, this]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.071135] rewrite [HasDerivAtFilter, this]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.071127] rewrite [HasDerivAtFilter, this]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.070666] rewrite [HasDerivAtFilter, this] [Meta.synthInstance] [0.034940] ✅️ ContinuousSMul 𝕜 𝕜 info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:8: [Elab.async] [0.018779] Lean.addDecl [Kernel] [0.018600] ✅️ typechecking declarations [HasGradientAtFilter.hasDerivAtFilter] Build completed successfully (2086 jobs). ``` ### Trace profiling of `HasGradientAtFilter.hasDerivAtFilter` after PR 28558 ```diff diff --git a/Mathlib/Analysis/Calculus/Gradient/Basic.lean b/Mathlib/Analysis/Calculus/Gradient/Basic.lean index 836221ccf3..ef259e734f 100644 --- a/Mathlib/Analysis/Calculus/Gradient/Basic.lean +++ b/Mathlib/Analysis/Calculus/Gradient/Basic.lean @@ -154,11 +154,10 @@ section OneDimension variable {g : 𝕜 → 𝕜} {g' u : 𝕜} {L' : Filter 𝕜} +set_option trace.profiler true in theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') : HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by - have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by - ext; simp - rwa [HasDerivAtFilter, this] + tauto theorem HasDerivAtFilter.hasGradientAtFilter (h : HasDerivAtFilter g g' u L') : HasGradientAtFilter g (starRingEnd 𝕜 g') u L' := by diff --git a/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean b/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean index 95d1540f92..6425395be8 100644 --- a/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean +++ b/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean @@ -297,11 +297,7 @@ theorem tprodL_coe : (tprodL 𝕜).toMultilinearMap = tprod 𝕜 (s := E) := by @[simp] theorem liftIsometry_symm_apply (l : (⨂[𝕜] i, E i) →L[𝕜] F) : (liftIsometry 𝕜 E F).symm l = l.compContinuousMultilinearMap (tprodL 𝕜) := by - ext m - change (liftEquiv 𝕜 E F).symm l m = _ - simp only [liftEquiv_symm_apply, lift_symm, MultilinearMap.coe_mkContinuous, - LinearMap.compMultilinearMap_apply, ContinuousLinearMap.coe_coe, - ContinuousLinearMap.compContinuousMultilinearMap_coe, Function.comp_apply, tprodL_toFun] + tauto @[simp] theorem liftIsometry_tprodL : @@ -337,12 +333,7 @@ theorem mapL_coe : (mapL f).toLinearMap = map (fun i ↦ (f i).toLinearMap) := b @[simp] theorem mapL_apply (x : ⨂[𝕜] i, E i) : mapL f x = map (fun i ↦ (f i).toLinearMap) x := by - induction x using PiTensorProduct.induction_on with - | smul_tprod => - simp only [mapL, map_smul, liftIsometry_apply_apply, lift.tprod, - ContinuousMultilinearMap.coe_coe, ContinuousMultilinearMap.compContinuousLinearMap_apply, - tprodL_toFun, map_tprod, ContinuousLinearMap.coe_coe] - | add _ _ hx hy => simp only [map_add, hx, hy] + tauto /-- Given submodules `pᵢ ⊆ Eᵢ`, this is the natural map: `⨂[𝕜] i, pᵢ → ⨂[𝕜] i, Eᵢ`. This is the continuous version of `PiTensorProduct.mapIncl`. ``` ``` ℹ [2086/2086] Built Mathlib.Analysis.Calculus.Gradient.Basic (4.3s) info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.063573] theorem hasDerivAtFilter (h : HasGradientAtFilter g g' u L') : HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by tauto [Elab.definition.header] [0.051258] HasGradientAtFilter.hasDerivAtFilter [Elab.step] [0.041267] expected type: Prop, term HasDerivAtFilter g (starRingEnd 𝕜 g') u L' [Meta.synthInstance] [0.026897] ✅️ ContinuousSMul 𝕜 𝕜 info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.063847] theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') : HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by tauto info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.async] [0.026129] elaborating proof of HasGradientAtFilter.hasDerivAtFilter [Elab.definition.value] [0.025613] HasGradientAtFilter.hasDerivAtFilter [Elab.step] [0.025330] tauto [Elab.step] [0.025321] tauto [Elab.step] [0.025309] tauto [Elab.step] [0.023296] assumption [Meta.isDefEq] [0.023275] ✅️ HasDerivAtFilter g ((starRingEnd 𝕜) g') u L' =?= HasGradientAtFilter g g' u L' [Meta.isDefEq] [0.023240] ✅️ HasDerivAtFilter g ((starRingEnd 𝕜) g') u L' =?= HasFDerivAtFilter g ((toDual 𝕜 𝕜) g') u L' [Meta.isDefEq] [0.023194] ✅️ HasFDerivAtFilter g (ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g')) u L' =?= HasFDerivAtFilter g ((toDual 𝕜 𝕜) g') u L' [Meta.isDefEq] [0.019563] ✅️ ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') =?= (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.019423] ✅️ let __src := (↑1).smulRight ((starRingEnd 𝕜) g'); { toLinearMap := __src, cont := ⋯ } =?= (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.019402] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.019393] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= EquivLike.toFunLike.1 (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.019381] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= EquivLike.coe (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.019372] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= LinearIsometryEquiv.instEquivLike.1 (toDual 𝕜 𝕜) g' [Meta.isDefEq] [0.019355] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (↑(toDual 𝕜 𝕜).toLinearEquiv).toFun g' [Meta.isDefEq] [0.019343] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (↑(toDual 𝕜 𝕜).toLinearEquiv).toAddHom.1 g' [Meta.isDefEq] [0.019069] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (⇑↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯) ∘ ⇑↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯)) g' [Meta.isDefEq] [0.019058] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= ↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯) (↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g') [Meta.isDefEq] [0.019050] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= LinearMap.instFunLike.1 (↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯)) (↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g') [Meta.isDefEq] [0.019025] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯)).toFun (↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g') [Meta.isDefEq] [0.019016] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯)).toAddHom.1 (↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g') [Meta.isDefEq] [0.018926] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= ↑(↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g') [Meta.isDefEq] [0.018915] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g').1 [Meta.isDefEq] [0.018663] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (toDualMap 𝕜 𝕜).toLinearMap g' [Meta.isDefEq] [0.018654] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= LinearMap.instFunLike.1 (toDualMap 𝕜 𝕜).toLinearMap g' [Meta.isDefEq] [0.018640] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (toDualMap 𝕜 𝕜).toFun g' [Meta.isDefEq] [0.018631] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= (toDualMap 𝕜 𝕜).toAddHom.1 g' [Meta.isDefEq] [0.018276] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= ((innerₛₗ 𝕜) g').mkContinuousOfExistsBound ⋯ [Meta.isDefEq] [0.018263] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'), cont := ⋯ } =?= { toLinearMap := (innerₛₗ 𝕜) g', cont := ⋯ } [Meta.isDefEq] [0.012681] ✅️ (↑1).smulRight ((starRingEnd 𝕜) g') =?= (innerₛₗ 𝕜) g' [Meta.isDefEq] [0.012596] ✅️ { toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g', map_add' := ⋯, map_smul' := ⋯ } =?= (innerₛₗ 𝕜) g' [Meta.isDefEq] [0.012565] ✅️ { toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g', map_add' := ⋯, map_smul' := ⋯ } =?= LinearMap.instFunLike.1 (innerₛₗ 𝕜) g' [Meta.isDefEq] [0.012552] ✅️ { toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g', map_add' := ⋯, map_smul' := ⋯ } =?= (innerₛₗ 𝕜).toFun g' [Meta.isDefEq] [0.012543] ✅️ { toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g', map_add' := ⋯, map_smul' := ⋯ } =?= (innerₛₗ 𝕜).toAddHom.1 g' [Meta.isDefEq] [0.012400] ✅️ { toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g', map_add' := ⋯, map_smul' := ⋯ } =?= { toFun := (fun v w ↦ ⟪v, w⟫) g', map_add' := ⋯, map_smul' := ⋯ } info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:8: [Elab.async] [0.013901] Lean.addDecl [Kernel] [0.013541] ✅️ typechecking declarations [HasGradientAtFilter.hasDerivAtFilter] Build completed successfully (2086 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-analysis 3/14 Mathlib/Analysis/Calculus/Gradient/Basic.lean,Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean 2 1 ['github-actions'] nobody
3-32060
3 days ago
3-35114
3 days ago
3-35161
3 days
28559 euprunin
author:euprunin
chore(CategoryTheory): golf entire `preinclusion_map₂`, `mapForget_eq`, `uSwitch_map_uSwitch_map` and more using `tauto` ---
Show trace profiling of preinclusion_map₂: 166 ms before, 33 ms after 🎉 ### Trace profiling of `preinclusion_map₂` before PR 28559 ```diff diff --git a/Mathlib/CategoryTheory/Bicategory/Coherence.lean b/Mathlib/CategoryTheory/Bicategory/Coherence.lean index e5ce271970..61a115654e 100644 --- a/Mathlib/CategoryTheory/Bicategory/Coherence.lean +++ b/Mathlib/CategoryTheory/Bicategory/Coherence.lean @@ -84,6 +84,7 @@ def preinclusion (B : Type u) [Quiver.{v + 1} B] : theorem preinclusion_obj (a : B) : (preinclusion B).obj ⟨a⟩ = a := rfl +set_option trace.profiler true in @[simp] theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) : (preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by ``` ``` ℹ [503/503] Built Mathlib.CategoryTheory.Bicategory.Coherence (3.8s) info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.command] [0.017892] @[simp] theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) : (preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by rcases η with ⟨⟨⟩⟩ cases Discrete.ext (by assumption) convert (inclusionPath a b).map_id _ [Elab.definition.header] [0.012532] CategoryTheory.FreeBicategory.preinclusion_map₂ [Elab.step] [0.010910] expected type: Prop, term (preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) [Elab.step] [0.010898] expected type: Prop, term binrel% Eq✝ ((preinclusion B).map₂ η) (eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η)))) info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.async] [0.170229] elaborating proof of CategoryTheory.FreeBicategory.preinclusion_map₂ [Elab.definition.value] [0.165791] CategoryTheory.FreeBicategory.preinclusion_map₂ [Elab.step] [0.160852] rcases η with ⟨⟨⟩⟩ cases Discrete.ext (by assumption) convert (inclusionPath a b).map_id _ [Elab.step] [0.160840] rcases η with ⟨⟨⟩⟩ cases Discrete.ext (by assumption) convert (inclusionPath a b).map_id _ [Elab.step] [0.153245] convert (inclusionPath a b).map_id _ info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:89:8: [Elab.async] [0.012802] Lean.addDecl [Kernel] [0.012744] ✅️ typechecking declarations [CategoryTheory.FreeBicategory.preinclusion_map₂] Build completed successfully (503 jobs). ``` ### Trace profiling of `preinclusion_map₂` after PR 28559 ```diff diff --git a/Mathlib/CategoryTheory/Bicategory/Coherence.lean b/Mathlib/CategoryTheory/Bicategory/Coherence.lean index e5ce271970..29da16cbb6 100644 --- a/Mathlib/CategoryTheory/Bicategory/Coherence.lean +++ b/Mathlib/CategoryTheory/Bicategory/Coherence.lean @@ -84,12 +84,11 @@ def preinclusion (B : Type u) [Quiver.{v + 1} B] : theorem preinclusion_obj (a : B) : (preinclusion B).obj ⟨a⟩ = a := rfl +set_option trace.profiler true in @[simp] theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) : (preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by - rcases η with ⟨⟨⟩⟩ - cases Discrete.ext (by assumption) - convert (inclusionPath a b).map_id _ + tauto /-- The normalization of the composition of `p : Path a b` and `f : Hom b c`. `p` will eventually be taken to be `nil` and we then get the normalization diff --git a/Mathlib/CategoryTheory/Comma/Over/Basic.lean b/Mathlib/CategoryTheory/Comma/Over/Basic.lean index 1372cd7356..623f4dc454 100644 --- a/Mathlib/CategoryTheory/Comma/Over/Basic.lean +++ b/Mathlib/CategoryTheory/Comma/Over/Basic.lean @@ -216,9 +216,7 @@ def mapId (Y : T) : map (𝟙 Y) ≅ 𝟭 _ := eqToIso (mapId_eq Y) /-- Mapping by `f` and then forgetting is the same as forgetting. -/ theorem mapForget_eq {X Y : T} (f : X ⟶ Y) : (map f) ⋙ (forget Y) = (forget X) := by - fapply Functor.ext - · dsimp [Over, Over.map]; intro x; exact rfl - · intros x y u; simp + tauto /-- The natural isomorphism arising from `mapForget_eq`. -/ def mapForget {X Y : T} (f : X ⟶ Y) : @@ -626,9 +624,7 @@ def mapId (Y : T) : map (𝟙 Y) ≅ 𝟭 _ := eqToIso (mapId_eq Y) /-- Mapping by `f` and then forgetting is the same as forgetting. -/ theorem mapForget_eq {X Y : T} (f : X ⟶ Y) : (map f) ⋙ (forget X) = (forget Y) := by - fapply Functor.ext - · dsimp [Under, Under.map]; intro x; exact rfl - · intros x y u; simp + tauto /-- The natural isomorphism arising from `mapForget_eq`. -/ def mapForget {X Y : T} (f : X ⟶ Y) : diff --git a/Mathlib/CategoryTheory/FintypeCat.lean b/Mathlib/CategoryTheory/FintypeCat.lean index ba51103beb..947f2743b8 100644 --- a/Mathlib/CategoryTheory/FintypeCat.lean +++ b/Mathlib/CategoryTheory/FintypeCat.lean @@ -237,10 +237,7 @@ lemma uSwitch_map_uSwitch_map {X Y : FintypeCat.{u}} (f : X ⟶ Y) : (equivEquivIso ((uSwitch.obj X).uSwitchEquiv.trans X.uSwitchEquiv)).hom ≫ f ≫ (equivEquivIso ((uSwitch.obj Y).uSwitchEquiv.trans Y.uSwitchEquiv)).inv := by - ext x - simp only [comp_apply, equivEquivIso_apply_hom, Equiv.trans_apply] - rw [uSwitchEquiv_naturality f, ← uSwitchEquiv_naturality] - rfl + tauto /-- `uSwitch.{u, v}` is an equivalence of categories with quasi-inverse `uSwitch.{v, u}`. -/ noncomputable def uSwitchEquivalence : FintypeCat.{u} ≌ FintypeCat.{v} where diff --git a/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean b/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean index d71f89c163..8739b63337 100644 --- a/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean +++ b/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean @@ -83,9 +83,7 @@ theorem inclusion_obj (X : N C) : @[simp] theorem inclusion_map {X Y : N C} (f : X ⟶ Y) : inclusion.map f = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom f))) := by - rcases f with ⟨⟨⟩⟩ - cases Discrete.ext (by assumption) - apply inclusion.map_id + tauto /-- Auxiliary definition for `normalize`. -/ def normalizeObj : F C → NormalMonoidalObject C → NormalMonoidalObject C diff --git a/Mathlib/CategoryTheory/MorphismProperty/Basic.lean b/Mathlib/CategoryTheory/MorphismProperty/Basic.lean index e49349dfd8..59072358d3 100644 --- a/Mathlib/CategoryTheory/MorphismProperty/Basic.lean +++ b/Mathlib/CategoryTheory/MorphismProperty/Basic.lean @@ -344,12 +344,7 @@ lemma map_isoClosure (P : MorphismProperty C) (F : C ⥤ D) : lemma map_id_eq_isoClosure (P : MorphismProperty C) : P.map (𝟭 _) = P.isoClosure := by - apply le_antisymm - · rw [map_le_iff] - intro X Y f hf - exact P.le_isoClosure _ hf - · intro X Y f hf - exact hf + tauto lemma map_id (P : MorphismProperty C) [RespectsIso P] : P.map (𝟭 _) = P := by diff --git a/Mathlib/CategoryTheory/Pi/Basic.lean b/Mathlib/CategoryTheory/Pi/Basic.lean index e721041ea4..41af15d2d0 100644 --- a/Mathlib/CategoryTheory/Pi/Basic.lean +++ b/Mathlib/CategoryTheory/Pi/Basic.lean @@ -208,11 +208,7 @@ end EqToHom -- how `Functor.pi` commutes with `Pi.eval` and `Pi.comap`. @[simp] theorem pi'_eval (f : ∀ i, A ⥤ C i) (i : I) : pi' f ⋙ Pi.eval C i = f i := by - apply Functor.ext - · intro _ _ _ - simp - · intro _ - rfl + tauto /-- Two functors to a product category are equal iff they agree on every coordinate. -/ theorem pi_ext (f f' : A ⥤ ∀ i, C i) (h : ∀ i, f ⋙ (Pi.eval C i) = f' ⋙ (Pi.eval C i)) : diff --git a/Mathlib/CategoryTheory/Quotient.lean b/Mathlib/CategoryTheory/Quotient.lean index c66247076c..b73eaf476d 100644 --- a/Mathlib/CategoryTheory/Quotient.lean +++ b/Mathlib/CategoryTheory/Quotient.lean @@ -237,9 +237,7 @@ theorem lift_obj_functor_obj (X : C) : theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) : (lift r F H).map ((functor r).map f) = F.map f := by - rw [← NatIso.naturality_1 (lift.isLift r F H)] - dsimp [lift, functor] - simp + tauto variable {r} ``` ``` ✔ [489/503] Built Mathlib.CategoryTheory.Quotient (2.2s) ✔ [490/503] Built Mathlib.CategoryTheory.PathCategory.Basic (1.9s) ✔ [491/503] Built Mathlib.CategoryTheory.Pi.Basic (4.5s) ✔ [492/503] Built Mathlib.CategoryTheory.Groupoid (1.8s) ✔ [493/503] Built Mathlib.CategoryTheory.Discrete.Basic (2.9s) ✔ [494/503] Built Mathlib.CategoryTheory.EpiMono (1.9s) ✔ [495/503] Built Mathlib.CategoryTheory.Bicategory.LocallyDiscrete (2.2s) ✔ [496/503] Built Mathlib.CategoryTheory.Types (1.9s) ✔ [497/503] Built Mathlib.CategoryTheory.Category.Cat (2.0s) ✔ [498/503] Built Mathlib.Tactic.CategoryTheory.ToApp (1.8s) ✔ [499/503] Built Mathlib.CategoryTheory.Bicategory.Functor.Oplax (2.0s) ✔ [500/503] Built Mathlib.CategoryTheory.Bicategory.Functor.Lax (3.2s) ✔ [501/503] Built Mathlib.CategoryTheory.Bicategory.Functor.Pseudofunctor (4.5s) ✔ [502/503] Built Mathlib.CategoryTheory.Bicategory.Free (5.3s) ℹ [503/503] Built Mathlib.CategoryTheory.Bicategory.Coherence (3.9s) info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.command] [0.020377] @[simp] theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) : (preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by tauto [Elab.definition.header] [0.011267] CategoryTheory.FreeBicategory.preinclusion_map₂ info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.async] [0.033437] elaborating proof of CategoryTheory.FreeBicategory.preinclusion_map₂ [Elab.definition.value] [0.032541] CategoryTheory.FreeBicategory.preinclusion_map₂ [Elab.step] [0.032026] tauto [Elab.step] [0.032010] tauto [Elab.step] [0.031994] tauto [Elab.step] [0.020006] rfl [Elab.step] [0.019397] eq_refl [Meta.isDefEq] [0.019374] ✅️ (preinclusion B).map₂ η =?= eqToHom ⋯ [Meta.isDefEq] [0.019302] ✅️ (preinclusion B).map₂ η =?= ⋯.mpr (𝟙 ((preinclusion B).map g)) [Meta.isDefEq] [0.019274] ✅️ (preinclusion B).map₂ η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g) [Meta.isDefEq] [0.016614] ✅️ (preinclusion B).toPrelaxFunctorStruct.2 η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g) [Meta.isDefEq] [0.014779] ✅️ (inclusionPath { as := a }.as { as := b }.as).map η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g) [Meta.isDefEq] [0.013158] ✅️ (inclusionPath { as := a }.as { as := b }.as).2 η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g) [Meta.isDefEq] [0.011394] ✅️ id (ULift.casesOn η fun down ↦ PLift.casesOn down fun h ↦ eqToHom ⋯) =?= ⋯ ▸ 𝟙 ((preinclusion B).map g) Build completed successfully (503 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-category-theory 8/30 Mathlib/CategoryTheory/Bicategory/Coherence.lean,Mathlib/CategoryTheory/Comma/Over/Basic.lean,Mathlib/CategoryTheory/FintypeCat.lean,Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean,Mathlib/CategoryTheory/MorphismProperty/Basic.lean,Mathlib/CategoryTheory/Pi/Basic.lean,Mathlib/CategoryTheory/Quotient.lean 7 1 ['github-actions'] nobody
3-31982
3 days ago
3-34825
3 days ago
3-34871
3 days
28561 euprunin
author:euprunin
chore(Data): golf entire `equivFunOnFintype_single`, `predAbove_right_zero`, `snoc_zero` and more using `tauto` ---
Show trace profiling of equivFunOnFintype_single: 19 ms before, <10 ms after 🎉 ### Trace profiling of `equivFunOnFintype_single` before PR 28561 ```diff diff --git a/Mathlib/Data/DFinsupp/Defs.lean b/Mathlib/Data/DFinsupp/Defs.lean index c025230385..e6a8585b49 100644 --- a/Mathlib/Data/DFinsupp/Defs.lean +++ b/Mathlib/Data/DFinsupp/Defs.lean @@ -532,6 +532,7 @@ theorem single_eq_of_sigma_eq {i j} {xi : β i} {xj : β j} (h : (⟨i, xi⟩ : cases h rfl +set_option trace.profiler true in @[simp] theorem equivFunOnFintype_single [Fintype ι] (i : ι) (m : β i) : (@DFinsupp.equivFunOnFintype ι β _ _) (DFinsupp.single i m) = Pi.single i m := by ``` ``` ℹ [587/587] Built Mathlib.Data.DFinsupp.Defs (4.3s) info: Mathlib/Data/DFinsupp/Defs.lean:536:0: [Elab.async] [0.019170] elaborating proof of DFinsupp.equivFunOnFintype_single [Elab.definition.value] [0.018591] DFinsupp.equivFunOnFintype_single [Elab.step] [0.018162] ext x dsimp [Pi.single, Function.update] simp [@eq_comm _ i] [Elab.step] [0.018149] ext x dsimp [Pi.single, Function.update] simp [@eq_comm _ i] [Elab.step] [0.012042] simp [@eq_comm _ i] Build completed successfully (587 jobs). ``` ### Trace profiling of `equivFunOnFintype_single` after PR 28561 ```diff diff --git a/Mathlib/Data/DFinsupp/Defs.lean b/Mathlib/Data/DFinsupp/Defs.lean index c025230385..3054ded3e8 100644 --- a/Mathlib/Data/DFinsupp/Defs.lean +++ b/Mathlib/Data/DFinsupp/Defs.lean @@ -532,12 +532,11 @@ theorem single_eq_of_sigma_eq {i j} {xi : β i} {xj : β j} (h : (⟨i, xi⟩ : cases h rfl +set_option trace.profiler true in @[simp] theorem equivFunOnFintype_single [Fintype ι] (i : ι) (m : β i) : (@DFinsupp.equivFunOnFintype ι β _ _) (DFinsupp.single i m) = Pi.single i m := by - ext x - dsimp [Pi.single, Function.update] - simp [@eq_comm _ i] + tauto @[simp] theorem equivFunOnFintype_symm_single [Fintype ι] (i : ι) (m : β i) : diff --git a/Mathlib/Data/Fin/Basic.lean b/Mathlib/Data/Fin/Basic.lean index 89fe9ef07f..c39cf119fa 100644 --- a/Mathlib/Data/Fin/Basic.lean +++ b/Mathlib/Data/Fin/Basic.lean @@ -1163,9 +1163,7 @@ lemma predAbove_castPred_self (p : Fin (n + 1)) (hp : p ≠ last n) : (castPred p hp).predAbove p = castPred p hp := predAbove_castPred_of_le _ _ Fin.le_rfl hp @[simp] lemma predAbove_right_zero [NeZero n] {i : Fin n} : predAbove (i : Fin n) 0 = 0 := by - cases n - · exact i.elim0 - · rw [predAbove_of_le_castSucc _ _ (zero_le _), castPred_zero] + tauto lemma predAbove_zero_succ [NeZero n] {i : Fin n} : predAbove 0 i.succ = i := by rw [predAbove_succ_of_le _ _ (Fin.zero_le _)] diff --git a/Mathlib/Data/Fin/Tuple/Basic.lean b/Mathlib/Data/Fin/Tuple/Basic.lean index f47faad190..f106b275a9 100644 --- a/Mathlib/Data/Fin/Tuple/Basic.lean +++ b/Mathlib/Data/Fin/Tuple/Basic.lean @@ -519,9 +519,7 @@ theorem snoc_last : snoc p x (last n) = x := by simp [snoc] lemma snoc_zero {α : Sort*} (p : Fin 0 → α) (x : α) : Fin.snoc p x = fun _ ↦ x := by - ext y - have : Subsingleton (Fin (0 + 1)) := Fin.subsingleton_one - simp only [Subsingleton.elim y (Fin.last 0), snoc_last] + tauto @[simp] theorem snoc_comp_natAdd {n m : ℕ} {α : Sort*} (f : Fin (m + n) → α) (a : α) : diff --git a/Mathlib/Data/Fin/Tuple/Take.lean b/Mathlib/Data/Fin/Tuple/Take.lean index 2a7cc1d5ae..cc68167259 100644 --- a/Mathlib/Data/Fin/Tuple/Take.lean +++ b/Mathlib/Data/Fin/Tuple/Take.lean @@ -43,9 +43,7 @@ theorem take_one {α : Fin (n + 1) → Sort*} (v : (i : Fin (n + 1)) → α i) : @[simp] theorem take_eq_init {α : Fin (n + 1) → Sort*} (v : (i : Fin (n + 1)) → α i) : take n n.le_succ v = init v := by - ext i - simp only [Nat.succ_eq_add_one, take, init] - congr + tauto @[simp] theorem take_eq_self (v : (i : Fin n) → α i) : take n (le_refl n) v = v := by @@ -55,16 +53,12 @@ theorem take_eq_self (v : (i : Fin n) → α i) : take n (le_refl n) v = v := by @[simp] theorem take_take {m n' : ℕ} (h : m ≤ n') (h' : n' ≤ n) (v : (i : Fin n) → α i) : take m h (take n' h' v) = take m (Nat.le_trans h h') v := by - ext i - simp only [take] - congr + tauto @[simp] theorem take_init {α : Fin (n + 1) → Sort*} (m : ℕ) (h : m ≤ n) (v : (i : Fin (n + 1)) → α i) : take m h (init v) = take m (Nat.le_succ_of_le h) v := by - ext i - simp only [take, init] - congr + tauto theorem take_repeat {α : Type*} {n' : ℕ} (m : ℕ) (h : m ≤ n) (a : Fin n' → α) : take (m * n') (Nat.mul_le_mul_right n' h) (Fin.repeat n a) = Fin.repeat m a := by diff --git a/Mathlib/Data/Finmap.lean b/Mathlib/Data/Finmap.lean index dbe7df1064..4ee00fb2a2 100644 --- a/Mathlib/Data/Finmap.lean +++ b/Mathlib/Data/Finmap.lean @@ -126,7 +126,7 @@ def liftOn₂ {γ} (s₁ s₂ : Finmap β) (f : AList β → AList β → γ) @[simp] theorem liftOn₂_toFinmap {γ} (s₁ s₂ : AList β) (f : AList β → AList β → γ) (H) : liftOn₂ ⟦s₁⟧ ⟦s₂⟧ f H = f s₁ s₂ := by - cases s₁; cases s₂; rfl + tauto /-! ### Induction -/ diff --git a/Mathlib/Data/Finsupp/AList.lean b/Mathlib/Data/Finsupp/AList.lean index c68e104ebe..7b9b0a651c 100644 --- a/Mathlib/Data/Finsupp/AList.lean +++ b/Mathlib/Data/Finsupp/AList.lean @@ -90,9 +90,7 @@ theorem lookupFinsupp_eq_zero_iff [DecidableEq α] {l : AList fun _x : α => M} @[simp] theorem empty_lookupFinsupp : lookupFinsupp (∅ : AList fun _x : α => M) = 0 := by - classical - ext - simp + tauto @[simp] theorem insert_lookupFinsupp [DecidableEq α] (l : AList fun _x : α => M) (a : α) (m : M) : diff --git a/Mathlib/Data/Finsupp/Single.lean b/Mathlib/Data/Finsupp/Single.lean index a123111855..bd45336d97 100644 --- a/Mathlib/Data/Finsupp/Single.lean +++ b/Mathlib/Data/Finsupp/Single.lean @@ -297,9 +297,7 @@ theorem update_self : f.update a (f a) = f := by @[simp] theorem zero_update : update 0 a b = single a b := by - classical - ext - rw [single_eq_update, coe_update, coe_zero] + tauto theorem support_update [DecidableEq α] [DecidableEq M] : support (f.update a b) = if b = 0 then f.support.erase a else insert a f.support := by diff --git a/Mathlib/Data/Matrix/Basic.lean b/Mathlib/Data/Matrix/Basic.lean index 9333a89183..0e5f8bc387 100644 --- a/Mathlib/Data/Matrix/Basic.lean +++ b/Mathlib/Data/Matrix/Basic.lean @@ -220,8 +220,7 @@ instance instAlgebra : Algebra R (Matrix n n α) where theorem algebraMap_matrix_apply {r : R} {i j : n} : algebraMap R (Matrix n n α) r i j = if i = j then algebraMap R α r else 0 := by - dsimp [algebraMap, Algebra.algebraMap, Matrix.scalar] - split_ifs with h <;> simp [h] + tauto theorem algebraMap_eq_diagonal (r : R) : algebraMap R (Matrix n n α) r = diagonal (algebraMap R (n → α) r) := rfl diff --git a/Mathlib/Data/Matrix/Block.lean b/Mathlib/Data/Matrix/Block.lean index 9815f2ee42..6759dbf770 100644 --- a/Mathlib/Data/Matrix/Block.lean +++ b/Mathlib/Data/Matrix/Block.lean @@ -332,9 +332,7 @@ theorem blockDiagonal_apply' (M : o → Matrix m n α) (i k j k') : theorem blockDiagonal_apply (M : o → Matrix m n α) (ik jk) : blockDiagonal M ik jk = if ik.2 = jk.2 then M ik.2 ik.1 jk.1 else 0 := by - cases ik - cases jk - rfl + tauto @[simp] theorem blockDiagonal_apply_eq (M : o → Matrix m n α) (i j k) : @@ -589,9 +587,7 @@ theorem blockDiagonal'_submatrix_eq_blockDiagonal (M : o → Matrix m n α) : theorem blockDiagonal'_apply (M : ∀ i, Matrix (m' i) (n' i) α) (ik jk) : blockDiagonal' M ik jk = if h : ik.1 = jk.1 then M ik.1 ik.2 (cast (congr_arg n' h.symm) jk.2) else 0 := by - cases ik - cases jk - rfl + tauto @[simp] theorem blockDiagonal'_apply_eq (M : ∀ i, Matrix (m' i) (n' i) α) (k i j) : diff --git a/Mathlib/Data/PFunctor/Multivariate/W.lean b/Mathlib/Data/PFunctor/Multivariate/W.lean index 6d0f8018c7..2e19332eb3 100644 --- a/Mathlib/Data/PFunctor/Multivariate/W.lean +++ b/Mathlib/Data/PFunctor/Multivariate/W.lean @@ -168,9 +168,7 @@ theorem wRec_eq {α : TypeVec n} {C : Type*} (g : ∀ a : P.A, P.drop.B a ⟹ α → (P.last.B a → P.W α) → (P.last.B a → C) → C) (a : P.A) (f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α) : P.wRec g (P.wMk a f' f) = g a f' f fun i => P.wRec g (f i) := by - rw [wMk, wRec]; rw [wpRec_eq] - dsimp only [wPathDestLeft_wPathCasesOn, wPathDestRight_wPathCasesOn] - congr + tauto /-- Induction principle for `W` -/ theorem w_ind {α : TypeVec n} {C : P.W α → Prop} diff --git a/Mathlib/Data/PFunctor/Univariate/M.lean b/Mathlib/Data/PFunctor/Univariate/M.lean index 5db25ebdd5..a3fad597e2 100644 --- a/Mathlib/Data/PFunctor/Univariate/M.lean +++ b/Mathlib/Data/PFunctor/Univariate/M.lean @@ -350,11 +350,7 @@ theorem agree_iff_agree' {n : ℕ} (x y : M F) : @[simp] theorem cases_mk {r : M F → Sort*} (x : F (M F)) (f : ∀ x : F (M F), r (M.mk x)) : PFunctor.M.cases f (M.mk x) = f x := by - dsimp only [M.mk, PFunctor.M.cases, dest, head, Approx.sMk, head'] - cases x; dsimp only [Approx.sMk] - simp only [Eq.mpr] - apply congrFun - rfl + tauto @[simp] theorem casesOn_mk {r : M F → Sort*} (x : F (M F)) (f : ∀ x : F (M F), r (M.mk x)) : diff --git a/Mathlib/Data/Seq/Computation.lean b/Mathlib/Data/Seq/Computation.lean index 081cd9b817..c755c24a61 100644 --- a/Mathlib/Data/Seq/Computation.lean +++ b/Mathlib/Data/Seq/Computation.lean @@ -149,7 +149,7 @@ theorem tail_pure (a : α) : tail (pure a) = pure a := @[simp] theorem tail_think (s : Computation α) : tail (think s) = s := by - obtain ⟨f, al⟩ := s; apply Subtype.eq; dsimp [tail, think] + tauto @[simp] theorem tail_empty : tail (empty α) = empty α := diff --git a/Mathlib/Data/Seq/Seq.lean b/Mathlib/Data/Seq/Seq.lean index c90c5df59b..05f26235d2 100644 --- a/Mathlib/Data/Seq/Seq.lean +++ b/Mathlib/Data/Seq/Seq.lean @@ -211,9 +211,7 @@ theorem tail_nil : tail (nil : Seq α) = nil := @[simp] theorem tail_cons (a : α) (s) : tail (cons a s) = s := by - obtain ⟨f, al⟩ := s - apply Subtype.eq - dsimp [tail, cons] + tauto theorem head_eq_some {s : Seq α} {x : α} (h : s.head = some x) : s = cons x s.tail := by diff --git a/Mathlib/Data/Set/Piecewise.lean b/Mathlib/Data/Set/Piecewise.lean index e0820119b7..2cb31ab72e 100644 --- a/Mathlib/Data/Set/Piecewise.lean +++ b/Mathlib/Data/Set/Piecewise.lean @@ -99,8 +99,7 @@ theorem piecewise_range_comp {ι : Sort*} (f : ι → α) [∀ j, Decidable (j lemma piecewise_comp (f g : α → γ) (h : β → α) : letI : DecidablePred (· ∈ h ⁻¹' s) := @instDecidablePredComp _ (· ∈ s) _ h _; (s.piecewise f g) ∘ h = (h ⁻¹' s).piecewise (f ∘ h) (g ∘ h) := by - ext x - by_cases hx : h x ∈ s <;> simp [hx] + tauto theorem MapsTo.piecewise_ite {s s₁ s₂ : Set α} {t t₁ t₂ : Set β} {f₁ f₂ : α → β} [∀ i, Decidable (i ∈ s)] (h₁ : MapsTo f₁ (s₁ ∩ s) (t₁ ∩ t)) diff --git a/Mathlib/Data/Set/Sups.lean b/Mathlib/Data/Set/Sups.lean index 54eeb36e77..a9152d7dca 100644 --- a/Mathlib/Data/Set/Sups.lean +++ b/Mathlib/Data/Set/Sups.lean @@ -294,10 +294,7 @@ theorem iUnion_image_inf_right : ⋃ b ∈ t, (· ⊓ b) '' s = s ⊼ t := @[simp] theorem image_inf_prod (s t : Set α) : Set.image2 (fun x x_1 => x ⊓ x_1) s t = s ⊼ t := by - have : (s ×ˢ t).image (uncurry (· ⊓ ·)) = Set.image2 (fun x x_1 => x ⊓ x_1) s t := by - simp only [Set.image_uncurry_prod] - rw [← this] - exact image_uncurry_prod _ _ _ + tauto theorem infs_assoc : s ⊼ t ⊼ u = s ⊼ (t ⊼ u) := image2_assoc inf_assoc diff --git a/Mathlib/Data/TypeVec.lean b/Mathlib/Data/TypeVec.lean index 368c80080f..d57f423e48 100644 --- a/Mathlib/Data/TypeVec.lean +++ b/Mathlib/Data/TypeVec.lean @@ -571,8 +571,7 @@ end Liftp' @[simp] theorem dropFun_diag {α} : dropFun (@prod.diag (n + 1) α) = prod.diag := by - ext i : 2 - induction i <;> simp [dropFun, *] <;> rfl + tauto @[simp] theorem dropFun_subtypeVal {α} (p : α ⟹ «repeat» (n + 1) Prop) : @@ -587,20 +586,17 @@ theorem lastFun_subtypeVal {α} (p : α ⟹ «repeat» (n + 1) Prop) : @[simp] theorem dropFun_toSubtype {α} (p : α ⟹ «repeat» (n + 1) Prop) : dropFun (toSubtype p) = toSubtype _ := by - ext i - induction i <;> simp [dropFun, *] <;> rfl + tauto @[simp] theorem lastFun_toSubtype {α} (p : α ⟹ «repeat» (n + 1) Prop) : lastFun (toSubtype p) = _root_.id := by - ext i : 2 - induction i; simp [*]; rfl + tauto @[simp] theorem dropFun_of_subtype {α} (p : α ⟹ «repeat» (n + 1) Prop) : dropFun (ofSubtype p) = ofSubtype _ := by - ext i : 2 - induction i <;> simp [dropFun, *] <;> rfl + tauto @[simp] theorem lastFun_of_subtype {α} (p : α ⟹ «repeat» (n + 1) Prop) : @@ -616,14 +612,12 @@ attribute [simp] drop_append1' @[simp] theorem dropFun_prod {α α' β β' : TypeVec (n + 1)} (f : α ⟹ β) (f' : α' ⟹ β') : dropFun (f ⊗' f') = (dropFun f ⊗' dropFun f') := by - ext i : 2 - induction i <;> simp [dropFun, *] <;> rfl + tauto @[simp] theorem lastFun_prod {α α' β β' : TypeVec (n + 1)} (f : α ⟹ β) (f' : α' ⟹ β') : lastFun (f ⊗' f') = Prod.map (lastFun f) (lastFun f') := by - ext i : 1 - induction i; simp [lastFun, *]; rfl + tauto @[simp] theorem dropFun_from_append1_drop_last {α : TypeVec (n + 1)} : diff --git a/Mathlib/Data/Vector/Basic.lean b/Mathlib/Data/Vector/Basic.lean index d06cc24cce..8b82891300 100644 --- a/Mathlib/Data/Vector/Basic.lean +++ b/Mathlib/Data/Vector/Basic.lean @@ -312,8 +312,7 @@ This lemma is the `cons` version of `scanl_get`. -/ @[simp] theorem scanl_cons (x : α) : scanl f b (x ::ᵥ v) = b ::ᵥ scanl f (f b x) v := by - simp only [scanl, toList_cons, List.scanl]; dsimp - simp only [cons] + tauto /-- The underlying `List` of a `Vector` after a `scanl` is the `List.scanl` of the underlying `List` of the original `Vector`. diff --git a/Mathlib/Data/Vector/Defs.lean b/Mathlib/Data/Vector/Defs.lean index 33f1bbb7a6..d46e08e2b9 100644 --- a/Mathlib/Data/Vector/Defs.lean +++ b/Mathlib/Data/Vector/Defs.lean @@ -233,9 +233,7 @@ theorem toList_cons (a : α) (v : Vector α n) : toList (cons a v) = a :: toList @[simp] theorem toList_append {n m : ℕ} (v : Vector α n) (w : Vector α m) : toList (v ++ w) = toList v ++ toList w := by - cases v - cases w - rfl + tauto /-- `drop` of vectors corresponds under `toList` to `drop` of lists. -/ @[simp] ``` ``` ✔ [574/587] Built Mathlib.Data.Fin.Basic (4.2s) ✔ [575/587] Built Mathlib.Data.Fin.Rev (1.5s) ✔ [576/587] Built Mathlib.Data.Fin.Embedding (1.6s) ✔ [577/587] Built Mathlib.Order.Fin.Basic (2.0s) ✔ [578/587] Built Mathlib.Data.Fin.Tuple.Basic (3.3s) ✔ [579/587] Built Mathlib.Data.List.OfFn (1.6s) ✔ [580/587] Built Mathlib.Data.List.FinRange (1.7s) ✔ [581/587] Built Mathlib.Data.List.Sort (2.4s) ✔ [582/587] Built Mathlib.Data.Fintype.Basic (2.0s) ✔ [583/587] Built Mathlib.Data.List.NodupEquivFin (1.9s) ✔ [584/587] Built Mathlib.Data.Fintype.Card (2.1s) ✔ [585/587] Built Mathlib.Data.Fintype.EquivFin (2.3s) ✔ [586/587] Built Mathlib.Data.Set.Finite.Basic (2.8s) ✔ [587/587] Built Mathlib.Data.DFinsupp.Defs (4.5s) Build completed successfully (587 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-data 26/68 Mathlib/Data/DFinsupp/Defs.lean,Mathlib/Data/Fin/Basic.lean,Mathlib/Data/Fin/Tuple/Basic.lean,Mathlib/Data/Fin/Tuple/Take.lean,Mathlib/Data/Finmap.lean,Mathlib/Data/Finsupp/AList.lean,Mathlib/Data/Finsupp/Single.lean,Mathlib/Data/Matrix/Basic.lean,Mathlib/Data/Matrix/Block.lean,Mathlib/Data/PFunctor/Multivariate/W.lean,Mathlib/Data/PFunctor/Univariate/M.lean,Mathlib/Data/Seq/Computation.lean,Mathlib/Data/Seq/Seq.lean,Mathlib/Data/Set/Piecewise.lean,Mathlib/Data/Set/Sups.lean,Mathlib/Data/TypeVec.lean,Mathlib/Data/Vector/Basic.lean,Mathlib/Data/Vector/Defs.lean 18 1 ['github-actions'] nobody
3-31913
3 days ago
3-34686
3 days ago
3-34729
3 days
28563 euprunin
author:euprunin
chore(GroupTheory): golf entire `base_smul_def` and `summand_smul_def` using `tauto` ---
Show trace profiling of base_smul_def: 14 ms before, <10 ms after 🎉 ### Trace profiling of `base_smul_def` before PR 28563 ```diff diff --git a/Mathlib/GroupTheory/PushoutI.lean b/Mathlib/GroupTheory/PushoutI.lean index 6b1bea567c..d1955509a7 100644 --- a/Mathlib/GroupTheory/PushoutI.lean +++ b/Mathlib/GroupTheory/PushoutI.lean @@ -465,6 +465,7 @@ noncomputable instance mulAction : MulAction (PushoutI φ) (NormalWord d) := Word.rcons_eq_smul, equiv_fst_eq_mul_inv, map_mul, map_inv, mul_smul, inv_smul_smul, smul_inv_smul, base_smul_def', MonoidHom.apply_ofInjective_symm] +set_option trace.profiler true in theorem base_smul_def (h : H) (w : NormalWord d) : base φ h • w = { w with head := h * w.head } := by dsimp [NormalWord.mulAction, instHSMul, SMul.smul] ``` ``` ℹ [990/990] Built Mathlib.GroupTheory.PushoutI (5.7s) info: Mathlib/GroupTheory/PushoutI.lean:469:0: [Elab.command] [0.071533] theorem base_smul_def (h : H) (w : NormalWord d) : base φ h • w = { w with head := h * w.head } := by dsimp [NormalWord.mulAction, instHSMul, SMul.smul] rw [lift_base] rfl [Elab.definition.header] [0.064651] Monoid.PushoutI.NormalWord.base_smul_def [Elab.step] [0.063919] expected type: Sort ?u.122533, term base φ h • w = { w with head := h * w.head } [Elab.step] [0.063909] expected type: Sort ?u.122533, term binrel% Eq✝ (base φ h • w) { w with head := h * w.head } [Elab.step] [0.024792] expected type: , term base φ h [Elab.step] [0.010165] expected type: (i : ι) → H →* G i, term φ [Meta.isDefEq] [0.010136] ✅️ (i : ?m.17) → ?m.19 →* ?m.18 i =?= (i : ι) → H →* G i [Meta.isDefEq] [0.010124] ✅️ ?m.19 →* ?m.18 i =?= H →* G i [Meta.isDefEq] [0.010020] ✅️ toMulOneClass =?= (inst✝³ i).toMulOneClass [Meta.isDefEq.delta] [0.010003] ✅️ toMulOneClass =?= (inst✝³ i).toMulOneClass [Meta.synthInstance] [0.018399] ✅️ HSMul (PushoutI φ) (NormalWord d) (NormalWord d) [Elab.step] [0.019544] expected type: NormalWord d, term { w with head := h * w.head } [Elab.step] [0.017406] expected type: H, term h * w.head [Elab.step] [0.017385] expected type: H, term binop% HMul.hMul✝ h w.head info: Mathlib/GroupTheory/PushoutI.lean:469:0: [Elab.async] [0.015077] elaborating proof of Monoid.PushoutI.NormalWord.base_smul_def [Elab.definition.value] [0.014242] Monoid.PushoutI.NormalWord.base_smul_def [Elab.step] [0.013438] dsimp [NormalWord.mulAction, instHSMul, SMul.smul] rw [lift_base] rfl [Elab.step] [0.013421] dsimp [NormalWord.mulAction, instHSMul, SMul.smul] rw [lift_base] rfl Build completed successfully (990 jobs). ``` ### Trace profiling of `base_smul_def` after PR 28563 ```diff diff --git a/Mathlib/GroupTheory/PushoutI.lean b/Mathlib/GroupTheory/PushoutI.lean index 6b1bea567c..e161150bab 100644 --- a/Mathlib/GroupTheory/PushoutI.lean +++ b/Mathlib/GroupTheory/PushoutI.lean @@ -465,19 +465,16 @@ noncomputable instance mulAction : MulAction (PushoutI φ) (NormalWord d) := Word.rcons_eq_smul, equiv_fst_eq_mul_inv, map_mul, map_inv, mul_smul, inv_smul_smul, smul_inv_smul, base_smul_def', MonoidHom.apply_ofInjective_symm] +set_option trace.profiler true in theorem base_smul_def (h : H) (w : NormalWord d) : base φ h • w = { w with head := h * w.head } := by - dsimp [NormalWord.mulAction, instHSMul, SMul.smul] - rw [lift_base] - rfl + tauto theorem summand_smul_def {i : ι} (g : G i) (w : NormalWord d) : of (φ := φ) i g • w = (equivPair i).symm { equivPair i w with head := g * (equivPair i w).head } := by - dsimp [NormalWord.mulAction, instHSMul, SMul.smul] - rw [lift_of] - rfl + tauto theorem of_smul_eq_smul {i : ι} (g : G i) (w : NormalWord d) : of (φ := φ) i g • w = g • w := by ``` ``` ℹ [990/990] Built Mathlib.GroupTheory.PushoutI (3.7s) info: Mathlib/GroupTheory/PushoutI.lean:469:0: [Elab.command] [0.030019] theorem base_smul_def (h : H) (w : NormalWord d) : base φ h • w = { w with head := h * w.head } := by tauto [Elab.definition.header] [0.024390] Monoid.PushoutI.NormalWord.base_smul_def [Elab.step] [0.023783] expected type: Sort ?u.122533, term base φ h • w = { w with head := h * w.head } [Elab.step] [0.023775] expected type: Sort ?u.122533, term binrel% Eq✝ (base φ h • w) { w with head := h * w.head } [Meta.synthInstance] [0.010490] ✅️ HSMul (PushoutI φ) (NormalWord d) (NormalWord d) Build completed successfully (990 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-group-theory 2/6 Mathlib/GroupTheory/PushoutI.lean 1 1 ['github-actions'] nobody
3-31867
3 days ago
3-34590
3 days ago
3-34635
3 days
28564 euprunin
author:euprunin
chore(LinearAlgebra): golf entire `congr_symm`, `LinearMap.toMatrix_smulBasis_left`, `LinearMap.toMatrix_smulBasis_right` and more using `tauto` ---
Show trace profiling of congr_symm: 24 ms before, 28 ms after ### Trace profiling of `congr_symm` before PR 28564 ```diff diff --git a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean index c056a51a5b..90cb2cd345 100644 --- a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean +++ b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean @@ -204,6 +204,7 @@ theorem congr_apply (e : M ≃ₗ[R] M') (B : BilinForm R M) (x y : M') : congr e B x y = B (e.symm x) (e.symm y) := rfl +set_option trace.profiler true in @[simp] theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by ext ``` ``` ℹ [1062/1062] Built Mathlib.LinearAlgebra.BilinearForm.Hom (3.4s) info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.command] [0.026792] @[simp] theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by ext simp only [congr_apply, LinearEquiv.symm_symm] rfl info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.async] [0.024764] elaborating proof of LinearMap.BilinForm.congr_symm [Elab.definition.value] [0.023696] LinearMap.BilinForm.congr_symm [Elab.step] [0.022888] ext simp only [congr_apply, LinearEquiv.symm_symm] rfl [Elab.step] [0.022873] ext simp only [congr_apply, LinearEquiv.symm_symm] rfl info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:209:8: [Elab.async] [0.011246] Lean.addDecl [Kernel] [0.011207] ✅️ typechecking declarations [LinearMap.BilinForm.congr_symm] Build completed successfully (1062 jobs). ``` ### Trace profiling of `congr_symm` after PR 28564 ```diff diff --git a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean index c056a51a5b..ce976f69d7 100644 --- a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean +++ b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean @@ -204,11 +204,10 @@ theorem congr_apply (e : M ≃ₗ[R] M') (B : BilinForm R M) (x y : M') : congr e B x y = B (e.symm x) (e.symm y) := rfl +set_option trace.profiler true in @[simp] theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by - ext - simp only [congr_apply, LinearEquiv.symm_symm] - rfl + tauto @[simp] theorem congr_refl : congr (LinearEquiv.refl R M) = LinearEquiv.refl R _ := diff --git a/Mathlib/LinearAlgebra/Matrix/ToLin.lean b/Mathlib/LinearAlgebra/Matrix/ToLin.lean index e78673e1fa..b05d64e287 100644 --- a/Mathlib/LinearAlgebra/Matrix/ToLin.lean +++ b/Mathlib/LinearAlgebra/Matrix/ToLin.lean @@ -681,17 +681,13 @@ theorem LinearMap.toMatrix_smulBasis_left {G} [Group G] [DistribMulAction G M₁ [SMulCommClass G R M₁] (g : G) (f : M₁ →ₗ[R] M₂) : LinearMap.toMatrix (g • v₁) v₂ f = LinearMap.toMatrix v₁ v₂ (f ∘ₗ DistribMulAction.toLinearMap _ _ g) := by - ext - rw [LinearMap.toMatrix_apply, LinearMap.toMatrix_apply] - dsimp + tauto theorem LinearMap.toMatrix_smulBasis_right {G} [Group G] [DistribMulAction G M₂] [SMulCommClass G R M₂] (g : G) (f : M₁ →ₗ[R] M₂) : LinearMap.toMatrix v₁ (g • v₂) f = LinearMap.toMatrix v₁ v₂ (DistribMulAction.toLinearMap _ _ g⁻¹ ∘ₗ f) := by - ext - rw [LinearMap.toMatrix_apply, LinearMap.toMatrix_apply] - dsimp + tauto end Finite diff --git a/Mathlib/LinearAlgebra/Multilinear/Curry.lean b/Mathlib/LinearAlgebra/Multilinear/Curry.lean index dbccfc807a..9175992b1f 100644 --- a/Mathlib/LinearAlgebra/Multilinear/Curry.lean +++ b/Mathlib/LinearAlgebra/Multilinear/Curry.lean @@ -84,9 +84,7 @@ theorem MultilinearMap.curryLeft_apply (f : MultilinearMap R M M₂) (x : M 0) @[simp] theorem LinearMap.curry_uncurryLeft (f : M 0 →ₗ[R] MultilinearMap R (fun i : Fin n => M i.succ) M₂) : f.uncurryLeft.curryLeft = f := by - ext m x - simp only [tail_cons, LinearMap.uncurryLeft_apply, MultilinearMap.curryLeft_apply] - rw [cons_zero] + tauto @[simp] theorem MultilinearMap.uncurry_curryLeft (f : MultilinearMap R M M₂) : diff --git a/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean b/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean index 140f4599b3..a5fc97375b 100644 --- a/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean +++ b/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean @@ -104,9 +104,7 @@ def gradedComm : /-- The braiding is symmetric. -/ @[simp] theorem gradedComm_symm : (gradedComm R 𝒜 ℬ).symm = gradedComm R ℬ 𝒜 := by - rw [gradedComm, gradedComm, LinearEquiv.trans_symm, LinearEquiv.symm_symm] - ext - rfl + tauto theorem gradedComm_of_tmul_of (i j : ι) (a : 𝒜 i) (b : ℬ j) : gradedComm R 𝒜 ℬ (lof R _ 𝒜 i a ⊗ₜ lof R _ ℬ j b) = ``` ``` ℹ [1062/1062] Built Mathlib.LinearAlgebra.BilinearForm.Hom (3.4s) info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.command] [0.022737] @[simp] theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by tauto info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.async] [0.030155] elaborating proof of LinearMap.BilinForm.congr_symm [Elab.definition.value] [0.028158] LinearMap.BilinForm.congr_symm [Elab.step] [0.027405] tauto [Elab.step] [0.027386] tauto [Elab.step] [0.027369] tauto [Elab.step] [0.019442] rfl [Elab.step] [0.019158] eq_refl [Meta.isDefEq] [0.019142] ✅️ (congr e).symm =?= congr e.symm [Meta.isDefEq] [0.019026] ✅️ (congr e).symm =?= (LinearEquiv.congrLeft R R e.symm).congrRight.trans (LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) [Meta.isDefEq] [0.018960] ✅️ have __src := (↑(congr e)).inverse (congr e).invFun ⋯ ⋯; let __src := (congr e).toEquiv.symm; { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯, right_inv := ⋯ } =?= (LinearEquiv.congrLeft R R e.symm).congrRight.trans (LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) [Meta.isDefEq] [0.018936] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯, right_inv := ⋯ } =?= (LinearEquiv.congrLeft R R e.symm).congrRight.trans (LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) [Meta.isDefEq] [0.018834] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯, right_inv := ⋯ } =?= let __src := ↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ₗ ↑(LinearEquiv.congrLeft R R e.symm).congrRight; let __src_1 := (LinearEquiv.congrLeft R R e.symm).congrRight.toEquiv.trans (LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm).toEquiv; { toLinearMap := __src, invFun := __src_1.invFun, left_inv := ⋯, right_inv := ⋯ } [Meta.isDefEq] [0.018825] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯, right_inv := ⋯ } =?= { toLinearMap := ↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ₗ ↑(LinearEquiv.congrLeft R R e.symm).congrRight, invFun := ((LinearEquiv.congrLeft R R e.symm).congrRight.toEquiv.trans (LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm).toEquiv).invFun, left_inv := ⋯, right_inv := ⋯ } [Meta.isDefEq] [0.011340] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯ } =?= ↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ₗ ↑(LinearEquiv.congrLeft R R e.symm).congrRight [Meta.isDefEq] [0.011274] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯ } =?= { toFun := ⇑↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ ⇑↑(LinearEquiv.congrLeft R R e.symm).congrRight, map_add' := ⋯, map_smul' := ⋯ } [Meta.isDefEq] [0.010754] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯ } =?= { toFun := ⇑↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ ⇑↑(LinearEquiv.congrLeft R R e.symm).congrRight, map_add' := ⋯ } info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:209:8: [Elab.async] [0.100749] Lean.addDecl [Kernel] [0.100672] ✅️ typechecking declarations [LinearMap.BilinForm.congr_symm] Build completed successfully (1062 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebra
label:t-algebra$
5/15 Mathlib/LinearAlgebra/BilinearForm/Hom.lean,Mathlib/LinearAlgebra/Matrix/ToLin.lean,Mathlib/LinearAlgebra/Multilinear/Curry.lean,Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean 4 1 ['github-actions'] nobody
3-31418
3 days ago
3-34543
3 days ago
3-34586
3 days
28566 euprunin
author:euprunin
chore(MeasureTheory/Constructions): golf entire `inter_cylinder{,_same}` and `union_cylinder{,_same}` using `tauto` ---
Show trace profiling of inter_cylinder: <10 ms before, <10 ms after 🎉 ### Trace profiling of `inter_cylinder` before PR 28566 ```diff diff --git a/Mathlib/MeasureTheory/Constructions/Cylinders.lean b/Mathlib/MeasureTheory/Constructions/Cylinders.lean index 0c1e925a61..cc8cbb5b97 100644 --- a/Mathlib/MeasureTheory/Constructions/Cylinders.lean +++ b/Mathlib/MeasureTheory/Constructions/Cylinders.lean @@ -183,6 +183,7 @@ theorem cylinder_eq_empty_iff [h_nonempty : Nonempty (∀ i, α i)] (s : Finset rw [h] at hf' exact notMem_empty _ hf' +set_option trace.profiler true in theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] : cylinder s₁ S₁ ∩ cylinder s₂ S₂ = ``` ``` ℹ [883/883] Built Mathlib.MeasureTheory.Constructions.Cylinders (2.0s) info: Mathlib/MeasureTheory/Constructions/Cylinders.lean:187:0: [Elab.command] [0.022626] theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] : cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder (s₁ ∪ s₂) (Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∩ Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) := by ext1 f; simp only [mem_inter_iff, mem_cylinder]; rfl [Elab.definition.header] [0.022211] MeasureTheory.inter_cylinder [Elab.step] [0.015116] expected type: Type (max ?u.2391 ?u.2396), term Set (∀ i : s₁, α i) [Elab.step] [0.015047] expected type: Type ?u.2405, term (∀ i : s₁, α i) [Elab.step] [0.015037] expected type: Type ?u.2405, term ∀ i : s₁, α i [Elab.step] [0.015028] expected type: Type ?u.2405, term forall (i : s₁), α i [Elab.step] [0.014325] expected type: Type ?u.2396, term α i [Elab.coe] [0.014154] adding coercion for i : { x // x ∈ s₁ } =?= ι [Meta.synthInstance] [0.014040] ✅️ CoeT { x // x ∈ s₁ } i ι [Meta.synthInstance] [0.011160] ✅️ apply @instCoeTCOfCoe_1 to CoeTC { x // x ∈ s₁ } ι [Meta.synthInstance.tryResolve] [0.011110] ✅️ CoeTC { x // x ∈ s₁ } ι ≟ CoeTC { x // x ∈ s₁ } ι [Meta.isDefEq] [0.011028] ✅️ CoeTC { x // x ∈ s₁ } ι =?= CoeTC ?m.16 ?m.17 Build completed successfully (883 jobs). ``` ### Trace profiling of `inter_cylinder` after PR 28566 ```diff diff --git a/Mathlib/MeasureTheory/Constructions/Cylinders.lean b/Mathlib/MeasureTheory/Constructions/Cylinders.lean index 0c1e925a61..f97b20a91e 100644 --- a/Mathlib/MeasureTheory/Constructions/Cylinders.lean +++ b/Mathlib/MeasureTheory/Constructions/Cylinders.lean @@ -183,17 +183,18 @@ theorem cylinder_eq_empty_iff [h_nonempty : Nonempty (∀ i, α i)] (s : Finset rw [h] at hf' exact notMem_empty _ hf' +set_option trace.profiler true in theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] : cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder (s₁ ∪ s₂) (Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∩ Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) := by - ext1 f; simp only [mem_inter_iff, mem_cylinder]; rfl + tauto theorem inter_cylinder_same (s : Finset ι) (S₁ : Set (∀ i : s, α i)) (S₂ : Set (∀ i : s, α i)) : cylinder s S₁ ∩ cylinder s S₂ = cylinder s (S₁ ∩ S₂) := by - classical rw [inter_cylinder]; rfl + tauto theorem union_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] : @@ -201,11 +202,11 @@ theorem union_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) cylinder (s₁ ∪ s₂) (Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∪ Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) := by - ext1 f; simp only [mem_union, mem_cylinder]; rfl + tauto theorem union_cylinder_same (s : Finset ι) (S₁ : Set (∀ i : s, α i)) (S₂ : Set (∀ i : s, α i)) : cylinder s S₁ ∪ cylinder s S₂ = cylinder s (S₁ ∪ S₂) := by - classical rw [union_cylinder]; rfl + tauto theorem compl_cylinder (s : Finset ι) (S : Set (∀ i : s, α i)) : (cylinder s S)ᶜ = cylinder s (Sᶜ) := by ``` ``` ℹ [883/883] Built Mathlib.MeasureTheory.Constructions.Cylinders (2.2s) info: Mathlib/MeasureTheory/Constructions/Cylinders.lean:187:0: [Elab.command] [0.013859] theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] : cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder (s₁ ∪ s₂) (Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∩ Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) := by tauto [Elab.definition.header] [0.013440] MeasureTheory.inter_cylinder Build completed successfully (883 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-measure-probability 4/4 Mathlib/MeasureTheory/Constructions/Cylinders.lean 1 1 ['github-actions'] nobody
3-31366
3 days ago
3-34461
3 days ago
3-34505
3 days
28574 euprunin
author:euprunin
chore(Topology/Category): golf entire `finiteCoproduct.ι_desc_apply`, `piIsoPi_hom_apply`, `prodIsoProd_hom_apply` and `pullbackIsoProdSubtype_hom_apply` using `tauto` ---
Show trace profiling of finiteCoproduct.ι_desc_apply: 15 ms before, 25 ms after ### Trace profiling of `finiteCoproduct.ι_desc_apply` before PR 28574 ```diff diff --git a/Mathlib/Topology/Category/CompHausLike/Limits.lean b/Mathlib/Topology/Category/CompHausLike/Limits.lean index 493c277fec..216c5888f2 100644 --- a/Mathlib/Topology/Category/CompHausLike/Limits.lean +++ b/Mathlib/Topology/Category/CompHausLike/Limits.lean @@ -109,6 +109,7 @@ lemma finiteCoproduct.ι_injective (a : α) : Function.Injective (finiteCoproduc lemma finiteCoproduct.ι_jointly_surjective (R : finiteCoproduct X) : ∃ (a : α) (r : X a), R = finiteCoproduct.ι X a r := ⟨R.fst, R.snd, rfl⟩ +set_option trace.profiler true in lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by intro x ``` ``` ℹ [985/985] Built Mathlib.Topology.Category.CompHausLike.Limits (1.9s) info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.011940] theorem ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by intro x change (ι X a ≫ desc X π) _ = _ simp only [ι_desc] [Elab.definition.header] [0.011212] CompHausLike.finiteCoproduct.ι_desc_apply [Elab.step] [0.010053] expected type: Sort ?u.7530, term ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.012175] theorem finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by intro x change (ι X a ≫ desc X π) _ = _ simp only [ι_desc] info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.012211] lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by intro x change (ι X a ≫ desc X π) _ = _ simp only [ι_desc] info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.async] [0.015416] elaborating proof of CompHausLike.finiteCoproduct.ι_desc_apply [Elab.definition.value] [0.014903] CompHausLike.finiteCoproduct.ι_desc_apply [Elab.step] [0.014576] intro x change (ι X a ≫ desc X π) _ = _ simp only [ι_desc] [Elab.step] [0.014564] intro x change (ι X a ≫ desc X π) _ = _ simp only [ι_desc] [Elab.step] [0.011699] change (ι X a ≫ desc X π) _ = _ Build completed successfully (985 jobs). ``` ### Trace profiling of `finiteCoproduct.ι_desc_apply` after PR 28574 ```diff diff --git a/Mathlib/Topology/Category/CompHausLike/Limits.lean b/Mathlib/Topology/Category/CompHausLike/Limits.lean index 493c277fec..b70ed614b6 100644 --- a/Mathlib/Topology/Category/CompHausLike/Limits.lean +++ b/Mathlib/Topology/Category/CompHausLike/Limits.lean @@ -109,11 +109,10 @@ lemma finiteCoproduct.ι_injective (a : α) : Function.Injective (finiteCoproduc lemma finiteCoproduct.ι_jointly_surjective (R : finiteCoproduct X) : ∃ (a : α) (r : X a), R = finiteCoproduct.ι X a r := ⟨R.fst, R.snd, rfl⟩ +set_option trace.profiler true in lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by - intro x - change (ι X a ≫ desc X π) _ = _ - simp only [ι_desc] + tauto instance : HasCoproduct X where exists_colimit := ⟨finiteCoproduct.cofan X, finiteCoproduct.isColimit X⟩ diff --git a/Mathlib/Topology/Category/TopCat/Limits/Products.lean b/Mathlib/Topology/Category/TopCat/Limits/Products.lean index 0b74c2f6ee..353896fce8 100644 --- a/Mathlib/Topology/Category/TopCat/Limits/Products.lean +++ b/Mathlib/Topology/Category/TopCat/Limits/Products.lean @@ -62,9 +62,7 @@ theorem piIsoPi_inv_π_apply {ι : Type v} (α : ι → TopCat.{max v u}) (i : theorem piIsoPi_hom_apply {ι : Type v} (α : ι → TopCat.{max v u}) (i : ι) (x : (∏ᶜ α : TopCat.{max v u})) : (piIsoPi α).hom x i = (Pi.π α i :) x := by - have := piIsoPi_inv_π α i - rw [Iso.inv_comp_eq] at this - exact ConcreteCategory.congr_hom this x + tauto /-- The inclusion to the coproduct as a bundled continuous map. -/ abbrev sigmaι {ι : Type v} (α : ι → TopCat.{max v u}) (i : ι) : α i ⟶ TopCat.of (Σ i, α i) := by @@ -165,9 +163,7 @@ theorem prodIsoProd_hom_snd (X Y : TopCat.{u}) : theorem prodIsoProd_hom_apply {X Y : TopCat.{u}} (x : ↑(X ⨯ Y)) : (prodIsoProd X Y).hom x = ((Limits.prod.fst : X ⨯ Y ⟶ _) x, (Limits.prod.snd : X ⨯ Y ⟶ _) x) := by - ext - · exact ConcreteCategory.congr_hom (prodIsoProd_hom_fst X Y) x - · exact ConcreteCategory.congr_hom (prodIsoProd_hom_snd X Y) x + tauto @[reassoc (attr := simp), elementwise] theorem prodIsoProd_inv_fst (X Y : TopCat.{u}) : diff --git a/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean b/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean index 66049170b3..68b42db21b 100644 --- a/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean +++ b/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean @@ -110,9 +110,7 @@ theorem pullbackIsoProdSubtype_hom_apply {f : X ⟶ Z} {g : Y ⟶ Z} (pullbackIsoProdSubtype f g).hom x = ⟨⟨pullback.fst f g x, pullback.snd f g x⟩, by simpa using CategoryTheory.congr_fun pullback.condition x⟩ := by - apply Subtype.ext; apply Prod.ext - exacts [ConcreteCategory.congr_hom (pullbackIsoProdSubtype_hom_fst f g) x, - ConcreteCategory.congr_hom (pullbackIsoProdSubtype_hom_snd f g) x] + tauto theorem pullback_topology {X Y Z : TopCat.{u}} (f : X ⟶ Z) (g : Y ⟶ Z) : (pullback f g).str = ``` ``` ✔ [982/985] Built Mathlib.Topology.Category.TopCat.Limits.Products (2.7s) ✔ [983/985] Built Mathlib.Topology.Category.TopCat.Limits.Pullbacks (2.4s) ✔ [984/985] Built Mathlib.CategoryTheory.Extensive (4.3s) ℹ [985/985] Built Mathlib.Topology.Category.CompHausLike.Limits (3.0s) info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.033044] theorem ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by tauto [Elab.definition.header] [0.031659] CompHausLike.finiteCoproduct.ι_desc_apply [Elab.step] [0.030394] expected type: Sort ?u.7530, term ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x [Elab.step] [0.030250] expected type: Sort ?u.7534, term finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x [Elab.step] [0.030242] expected type: Sort ?u.7534, term binrel% Eq✝ (finiteCoproduct.desc X π (finiteCoproduct.ι X a x)) (π a x) [Elab.step] [0.025815] expected type: , term finiteCoproduct.desc X π (finiteCoproduct.ι X a x) [Elab.step] [0.010204] expected type: (fun X ↦ ↑X.toTop) (finiteCoproduct X), term (finiteCoproduct.ι X a x) [Elab.step] [0.010186] expected type: (fun X ↦ ↑X.toTop) (finiteCoproduct X), term finiteCoproduct.ι X a x info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.033536] theorem finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by tauto info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.033652] lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) : ∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by tauto info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.async] [0.025323] elaborating proof of CompHausLike.finiteCoproduct.ι_desc_apply [Elab.definition.value] [0.024806] CompHausLike.finiteCoproduct.ι_desc_apply [Elab.step] [0.024330] tauto [Elab.step] [0.024317] tauto [Elab.step] [0.024304] tauto Build completed successfully (985 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-topology 4/12 Mathlib/Topology/Category/CompHausLike/Limits.lean,Mathlib/Topology/Category/TopCat/Limits/Products.lean,Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean 3 1 ['github-actions'] nobody
3-31158
3 days ago
3-34134
3 days ago
3-34178
3 days
28528 euprunin
author:euprunin
chore(LinearAlgebra/AffineSpace): golf entire `univ_fin2` using `trivial` ---
Show trace profiling of univ_fin2: 65 ms before, <10 ms after 🎉 ### Trace profiling of `univ_fin2` before PR 28528 ```diff diff --git a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean index 7bd414e385..e6f548c737 100644 --- a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean +++ b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean @@ -45,6 +45,7 @@ open Affine namespace Finset +set_option trace.profiler true in theorem univ_fin2 : (univ : Finset (Fin 2)) = {0, 1} := by ext x fin_cases x <;> simp ``` ``` ℹ [1100/1100] Built Mathlib.LinearAlgebra.AffineSpace.Combination (4.6s) info: Mathlib/LinearAlgebra/AffineSpace/Combination.lean:49:0: [Elab.async] [0.066423] elaborating proof of Finset.univ_fin2 [Elab.definition.value] [0.065396] Finset.univ_fin2 [Elab.step] [0.064357] ext x fin_cases x <;> simp [Elab.step] [0.064344] ext x fin_cases x <;> simp [Elab.step] [0.063955] (fin_cases x) <;> simp [Elab.step] [0.063942] focus fin_cases x with_annotate_state"<;>" skip all_goals simp [Elab.step] [0.063932] fin_cases x with_annotate_state"<;>" skip all_goals simp [Elab.step] [0.063928] fin_cases x with_annotate_state"<;>" skip all_goals simp [Elab.step] [0.055960] all_goals simp [Elab.step] [0.040453] simp [Elab.step] [0.040447] simp [Elab.step] [0.040436] simp [Meta.Tactic.simp.discharge] [0.020831] insert_eq_of_mem discharge ❌️ 0 ∈ {1} [Meta.synthInstance] [0.011027] ❌️ NeZero 1 [Elab.step] [0.015418] simp [Elab.step] [0.015407] simp [Elab.step] [0.015396] simp Build completed successfully (1100 jobs). ``` ### Trace profiling of `univ_fin2` after PR 28528 ```diff diff --git a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean index 7bd414e385..beecee2590 100644 --- a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean +++ b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean @@ -45,9 +45,9 @@ open Affine namespace Finset +set_option trace.profiler true in theorem univ_fin2 : (univ : Finset (Fin 2)) = {0, 1} := by - ext x - fin_cases x <;> simp + trivial variable {k : Type*} {V : Type*} {P : Type*} [Ring k] [AddCommGroup V] [Module k V] variable [S : AffineSpace V P] ``` ``` ✔ [1100/1100] Built Mathlib.LinearAlgebra.AffineSpace.Combination (4.6s) Build completed successfully (1100 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebra
label:t-algebra$
1/2 Mathlib/LinearAlgebra/AffineSpace/Combination.lean 1 1 ['github-actions'] nobody
3-18500
3 days ago
4-30914
4 days ago
4-30957
4 days
28522 euprunin
author:euprunin
chore(Algebra/Ring/Subsemiring): golf entire `coe_pow` using `trivial` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
2/6 Mathlib/Algebra/Ring/Subsemiring/Defs.lean 1 3 ['Ruben-VandeVelde', 'euprunin', 'github-actions'] nobody
3-18325
3 days ago
4-45000
4 days ago
4-45043
4 days
28557 ShreckYe
author:ShreckYe
feat(Data/Nat/Factorization): some results on equality of powers of naturals proved from factorization I came across some math olympiad problems in number theory that could benefit from these theorems, expecially those on the prime power equality `p ^ m = a ^ n`. A specialized `eq_of_factorization_eq'` is added BTW to help with proof search. t-data 102/0 Mathlib/Data/Nat/Factorization/Basic.lean,Mathlib/Data/Nat/Factorization/Defs.lean,Mathlib/Data/Nat/Factorization/PrimePow.lean 3 1 ['github-actions'] nobody
3-17769
3 days ago
3-35125
3 days ago
3-35174
3 days
28539 euprunin
author:euprunin
chore(Algebra/Order/Interval/Set): golf entire `one_sub_mem` using `simp_all` ---
Show trace profiling of one_sub_mem: 29 ms before, 47 ms after ### Trace profiling of `one_sub_mem` before PR 28539 ```diff diff --git a/Mathlib/Algebra/Order/Interval/Set/Instances.lean b/Mathlib/Algebra/Order/Interval/Set/Instances.lean index a3e0159054..a1a1bfc676 100644 --- a/Mathlib/Algebra/Order/Interval/Set/Instances.lean +++ b/Mathlib/Algebra/Order/Interval/Set/Instances.lean @@ -322,6 +322,7 @@ instance instCommSemigroup {R : Type*} [CommSemiring R] [PartialOrder R] [IsStri variable {β : Type*} [Ring β] [PartialOrder β] [IsOrderedRing β] +set_option trace.profiler true in theorem one_sub_mem {t : β} (ht : t ∈ Ioo (0 : β) 1) : 1 - t ∈ Ioo (0 : β) 1 := by rw [mem_Ioo] at * refine ⟨sub_pos.2 ht.2, ?_⟩ ``` ``` ℹ [415/415] Built Mathlib.Algebra.Order.Interval.Set.Instances (1.4s) info: Mathlib/Algebra/Order/Interval/Set/Instances.lean:326:0: [Elab.async] [0.029587] elaborating proof of Set.Ioo.one_sub_mem [Elab.definition.value] [0.029046] Set.Ioo.one_sub_mem [Elab.step] [0.028620] rw [mem_Ioo] at * refine ⟨sub_pos.2 ht.2, ?_⟩ exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne') [Elab.step] [0.028608] rw [mem_Ioo] at * refine ⟨sub_pos.2 ht.2, ?_⟩ exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne') [Elab.step] [0.017723] refine ⟨sub_pos.2 ht.2, ?_⟩ [Meta.synthInstance] [0.014182] ✅️ AddRightStrictMono β Build completed successfully (415 jobs). ``` ### Trace profiling of `one_sub_mem` after PR 28539 ```diff diff --git a/Mathlib/Algebra/Order/Interval/Set/Instances.lean b/Mathlib/Algebra/Order/Interval/Set/Instances.lean index a3e0159054..9ce1544a80 100644 --- a/Mathlib/Algebra/Order/Interval/Set/Instances.lean +++ b/Mathlib/Algebra/Order/Interval/Set/Instances.lean @@ -322,10 +322,9 @@ instance instCommSemigroup {R : Type*} [CommSemiring R] [PartialOrder R] [IsStri variable {β : Type*} [Ring β] [PartialOrder β] [IsOrderedRing β] +set_option trace.profiler true in theorem one_sub_mem {t : β} (ht : t ∈ Ioo (0 : β) 1) : 1 - t ∈ Ioo (0 : β) 1 := by - rw [mem_Ioo] at * - refine ⟨sub_pos.2 ht.2, ?_⟩ - exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne') + simp_all theorem mem_iff_one_sub_mem {t : β} : t ∈ Ioo (0 : β) 1 ↔ 1 - t ∈ Ioo (0 : β) 1 := ⟨one_sub_mem, fun h => sub_sub_cancel 1 t ▸ one_sub_mem h⟩ ``` ``` ℹ [415/415] Built Mathlib.Algebra.Order.Interval.Set.Instances (1.4s) info: Mathlib/Algebra/Order/Interval/Set/Instances.lean:326:0: [Elab.async] [0.047387] elaborating proof of Set.Ioo.one_sub_mem [Elab.definition.value] [0.046889] Set.Ioo.one_sub_mem [Elab.step] [0.046569] simp_all [Elab.step] [0.046560] simp_all [Elab.step] [0.046551] simp_all [Meta.Tactic.simp.discharge] [0.010940] Ioo_eq_empty discharge ❌️ ¬0 < 1 [Meta.Tactic.simp.discharge] [0.010461] Ioo_eq_empty discharge ❌️ ¬0 < 1 [Meta.synthInstance] [0.012013] ✅️ AddRightStrictMono β Build completed successfully (415 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-algebra
label:t-algebra$
1/3 Mathlib/Algebra/Order/Interval/Set/Instances.lean 1 2 ['github-actions', 'grunweg'] nobody
3-13984
3 days ago
3-76450
3 days ago
3-76502
3 days
26057 YaelDillies
author:YaelDillies
feat: `mon_tauto`, a simp set to prove tautologies about a monoid object This simp set proves all tautologies involving (commutative) monoid objects in a (braided) monoidal category. The general algorithm it follows is to push the associators `α_` and commutators `β_` inwards until they cancel against the right sequence of multiplications. This approach is justified by the fact that a tautology in the language of (commutative) monoid objects "remembers" how it was proved: Every use of a (commutative) monoid object axiom inserts a unitor, associator or commutator, and proving a tautology simply amounts to undoing those moves as prescribed by the presence of unitors, associators and commutators in its expression. This simp set is opiniated about its normal form and therefore cannot be used concurrently to some of the simp lemmas in the standard simp set. As an example, we prove `tensorμ M M M M ≫ (μ ⊗ₘ μ) ≫ μ = (μ ⊗ₘ μ) ≫ μ`, the categorical equivalent of `mul_mul_mul_comm`. From Toric Co-authored-by: Andrew Yang --- - [x] depends on: #26102 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric t-category-theory 151/1 Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/Tactic/Attr/Register.lean,MathlibTest/CategoryTheory/Monoidal/MonTauto.lean,scripts/noshake.json 4 11 ['YaelDillies', 'erdOne', 'github-actions', 'mathlib4-dependent-issues-bot', 'robin-carlier'] robin-carlier
assignee:robin-carlier
3-6492
3 days ago
63-25357
2 months ago
64-1812
64 days
27363 101damnations
author:101damnations
feat(RepresentationTheory/Homological): add standard resolution for finite cyclic groups Let `k` be a commutative ring and `G` a finite commutative group. Given `g : G` and `A : Rep k G`, we can define a periodic chain complex in `Rep k G` given by `... ⟶ A --N--> A --(ρ(g) - 𝟙)--> A --N--> A --(ρ(g) - 𝟙)--> A ⟶ 0` where `N` is the norm map sending `a : A` to `∑ ρ(g)(a)` for all `g` in `G`. When `G` is generated by `g` and `A` is the left regular representation `k[G]`, this chain complex is a projective resolution of `k` as a trivial representation, which we prove in this PR. --- - [x] depends on: #27362 - [x] depends on: #27361 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 223/0 Mathlib.lean,Mathlib/RepresentationTheory/Homological/FiniteCyclic.lean,Mathlib/RepresentationTheory/Invariants.lean 3 4 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] TwoFX
assignee:TwoFX
3-6490
3 days ago
11-17913
11 days ago
14-38118
14 days
27743 alreadydone
author:alreadydone
feat(NumberTheory): Frobenius number exists, ℕ is Noetherian semiring & Sylver coinage + The Frobenius number of a set of natural numbers exist iff the set has gcd 1 and doesn't contain 1. + All additive submonoids (= ideals) of ℕ are finitely generated. + The game of Sylver coinage always terminates. This is the outcome of a course project at Heidelberg University: [matematiflo.github.io/CompAssistedMath2025](https://matematiflo.github.io/CompAssistedMath2025/) Co-authored-by: Daniel Buth @greymatter8 Co-authored-by: Sebastian Meier @SebastianMeierUni --- FrobeniusNumber is a leaf file so I think doubling its imports is okay. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra t-combinatorics t-number-theory
label:t-algebra$
252/28 Mathlib/Data/Set/Finite/Basic.lean,Mathlib/LinearAlgebra/FreeModule/PID.lean,Mathlib/NumberTheory/FrobeniusNumber.lean,Mathlib/RingTheory/Ideal/NatInt.lean,Mathlib/RingTheory/PrincipalIdealDomain.lean 5 3 ['github-actions', 'vihdzp'] kbuzzard
assignee:kbuzzard
3-6489
3 days ago
20-30977
20 days ago
20-56579
20 days
27900 alreadydone
author:alreadydone
feat(Algebra): principal ideal finite product rings Show that ideals in a finite product semiring correspond to tuples of ideals in individual rings. Consequently, a finite product semiring is a PIR if each semiring is. follow-up of #27236 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory t-algebra
label:t-algebra$
83/18 Mathlib/LinearAlgebra/Span/Defs.lean,Mathlib/RingTheory/Ideal/Basic.lean,Mathlib/RingTheory/Ideal/Maps.lean,Mathlib/RingTheory/Ideal/Prod.lean,Mathlib/RingTheory/PrincipalIdealDomain.lean 5 2 ['github-actions', 'mathlib4-merge-conflict-bot'] kbuzzard
assignee:kbuzzard
3-6487
3 days ago
15-29313
15 days ago
17-30960
17 days
28059 hanwenzhu
author:hanwenzhu
refactor(MeasureTheory/RieszMarkovKakutani): Use PositiveLinearMap This PR refactors the unbundled `{Λ : C_c(X, ℝ) →ₗ[ℝ] ℝ} (hΛ : ∀ f, 0 ≤ f → 0 ≤ Λ f)` in the statement of RMK to the bundled `(Λ : C_c(X, ℝ) →ₚ[ℝ] ℝ)`. Zulip discussion: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Uniqueness.20in.20Riesz.E2.80.93Markov.E2.80.93Kakutani.20representation.20theorem --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-measure-probability 122/81 Mathlib/Algebra/Order/Module/PositiveLinearMap.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/Basic.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/NNReal.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/Real.lean,Mathlib/Topology/ContinuousMap/CompactlySupported.lean 5 12 ['EtienneC30', 'github-actions', 'hanwenzhu', 'yoh-tanimoto'] EtienneC30
assignee:EtienneC30
3-6486
3 days ago
11-3281
11 days ago
13-25148
13 days
28198 Sebi-Kumar
author:Sebi-Kumar
feat(Analysis/InnerProductSpace/PiL2): Add instances for EuclideanSpace rank and EuclideanSpace being infinite Add an instance for `Fact (Module.finrank 𝕜 (EuclideanSpace 𝕜 (Fin n)) = n)` which is needed to apply [stereographic'](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Geometry/Manifold/Instances/Sphere.html#stereographic') to EuclideanSpace. Also add an instance for `Infinite (EuclideanSpace 𝕜 ι)` where `ι` is a nonempty fintype. I wasn't sure if these should go in separate pull requests, but they seemed similar enough to me. Thank you to Kenny Lau for the suggestions at [#mathlib4 > Instances for EuclideanSpace](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Instances.20for.20EuclideanSpace). --- To provide additional context, I am new to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-analysis 6/0 Mathlib/Analysis/InnerProductSpace/PiL2.lean 1 1 ['github-actions'] urkud
assignee:urkud
3-6483
3 days ago
10-19719
10 days ago
10-19765
10 days
28572 euprunin
author:euprunin
chore(SetTheory): golf entire `congToClass_empty` using `tauto` ---
Show trace profiling of congToClass_empty: <10 ms before, <10 ms after 🎉 ### Trace profiling of `congToClass_empty` before PR 28572 ```diff diff --git a/Mathlib/SetTheory/ZFC/Class.lean b/Mathlib/SetTheory/ZFC/Class.lean index 43d3015eb2..2596971ce0 100644 --- a/Mathlib/SetTheory/ZFC/Class.lean +++ b/Mathlib/SetTheory/ZFC/Class.lean @@ -129,6 +129,7 @@ theorem univ_notMem_univ : univ ∉ univ := def congToClass (x : Set Class.{u}) : Class.{u} := { y | ↑y ∈ x } +set_option trace.profiler true in @[simp] theorem congToClass_empty : congToClass ∅ = ∅ := by ext z ``` ``` ✔ [660/660] Built Mathlib.SetTheory.ZFC.Class (2.3s) Build completed successfully (660 jobs). ``` ### Trace profiling of `congToClass_empty` after PR 28572 ```diff diff --git a/Mathlib/SetTheory/ZFC/Class.lean b/Mathlib/SetTheory/ZFC/Class.lean index 43d3015eb2..fa097799c0 100644 --- a/Mathlib/SetTheory/ZFC/Class.lean +++ b/Mathlib/SetTheory/ZFC/Class.lean @@ -129,11 +129,10 @@ theorem univ_notMem_univ : univ ∉ univ := def congToClass (x : Set Class.{u}) : Class.{u} := { y | ↑y ∈ x } +set_option trace.profiler true in @[simp] theorem congToClass_empty : congToClass ∅ = ∅ := by - ext z - simp only [congToClass, not_empty_hom, iff_false] - exact Set.notMem_empty z + tauto /-- Convert a class into a conglomerate (a collection of classes) -/ def classToCong (x : Class.{u}) : Set Class.{u} := ``` ``` ✔ [660/660] Built Mathlib.SetTheory.ZFC.Class (2.5s) Build completed successfully (660 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-set-theory 1/3 Mathlib/SetTheory/ZFC/Class.lean 1 1 ['github-actions', 'vihdzp'] nobody
2-80630
2 days ago
3-34209
3 days ago
3-34256
3 days
27370 euprunin
author:euprunin
chore(Tactic/CancelDenoms): golf `cancel_factors_eq` ---
Show trace profiling of cancel_factors_eq: 120 ms before, 46 ms after 🎉 ### Trace profiling of `cancel_factors_eq` before PR 27370 ```diff diff --git a/Mathlib/Tactic/CancelDenoms/Core.lean b/Mathlib/Tactic/CancelDenoms/Core.lean index c4b62d3e29..3ec2128994 100644 --- a/Mathlib/Tactic/CancelDenoms/Core.lean +++ b/Mathlib/Tactic/CancelDenoms/Core.lean @@ -80,6 +80,7 @@ theorem cancel_factors_le {α} [Field α] [LinearOrder α] [IsStrictOrderedRing · exact mul_pos had hbd · exact one_div_pos.2 hgcd +set_option trace.profiler true in theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a') (hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) : (a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by ``` ``` ℹ [436/436] Built Mathlib.Tactic.CancelDenoms.Core (2.8s) info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.command] [0.015258] theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a') (hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) : (a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd] ext; constructor · rintro rfl rfl · intro h simp only [← mul_assoc] at h refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h on_goal 1 => apply mul_ne_zero on_goal 1 => apply div_ne_zero · exact one_ne_zero all_goals assumption [Elab.definition.header] [0.014988] CancelDenoms.cancel_factors_eq info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.async] [0.122474] elaborating proof of CancelDenoms.cancel_factors_eq [Elab.definition.value] [0.119890] CancelDenoms.cancel_factors_eq [Elab.step] [0.118614] rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd] ext; constructor · rintro rfl rfl · intro h simp only [← mul_assoc] at h refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h on_goal 1 => apply mul_ne_zero on_goal 1 => apply div_ne_zero · exact one_ne_zero all_goals assumption [Elab.step] [0.118601] rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd] ext; constructor · rintro rfl rfl · intro h simp only [← mul_assoc] at h refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h on_goal 1 => apply mul_ne_zero on_goal 1 => apply div_ne_zero · exact one_ne_zero all_goals assumption [Elab.step] [0.010324] rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd] [Elab.step] [0.010312] (rewrite [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]; with_annotate_state"]" (try (with_reducible rfl))) [Elab.step] [0.010299] rewrite [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.010291] rewrite [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]; with_annotate_state"]" (try (with_reducible rfl)) [Elab.step] [0.105805] · intro h simp only [← mul_assoc] at h refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h on_goal 1 => apply mul_ne_zero on_goal 1 => apply div_ne_zero · exact one_ne_zero all_goals assumption [Elab.step] [0.105661] intro h simp only [← mul_assoc] at h refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h on_goal 1 => apply mul_ne_zero on_goal 1 => apply div_ne_zero · exact one_ne_zero all_goals assumption [Elab.step] [0.105650] intro h simp only [← mul_assoc] at h refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h on_goal 1 => apply mul_ne_zero on_goal 1 => apply div_ne_zero · exact one_ne_zero all_goals assumption [Elab.step] [0.043946] refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h [Elab.step] [0.043859] expected type: a = b, term mul_left_cancel₀ (mul_ne_zero ?_ ?_) h [Elab.step] [0.025447] expected type: ?m.103 * ?m.104 ≠ 0, term (mul_ne_zero ?_ ?_) [Elab.step] [0.025432] expected type: ?m.103 * ?m.104 ≠ 0, term mul_ne_zero ?_ ?_ [Meta.synthInstance] [0.019262] ✅️ NoZeroDivisors α [Elab.step] [0.021441] on_goal 1 => apply mul_ne_zero [Elab.step] [0.019543] apply mul_ne_zero [Elab.step] [0.019530] apply mul_ne_zero [Elab.step] [0.019514] apply mul_ne_zero [Meta.synthInstance] [0.013986] ✅️ NoZeroDivisors α [Elab.step] [0.018650] · exact one_ne_zero [Elab.step] [0.018355] exact one_ne_zero [Elab.step] [0.018309] exact one_ne_zero [Elab.step] [0.018269] exact one_ne_zero [Elab.step] [0.017827] expected type: 1 ≠ 0, term one_ne_zero [Meta.synthInstance] [0.012295] ✅️ NeZero 1 Build completed successfully (436 jobs). ``` ### Trace profiling of `cancel_factors_eq` after PR 27370 ```diff diff --git a/Mathlib/Tactic/CancelDenoms/Core.lean b/Mathlib/Tactic/CancelDenoms/Core.lean index c4b62d3e29..066f915189 100644 --- a/Mathlib/Tactic/CancelDenoms/Core.lean +++ b/Mathlib/Tactic/CancelDenoms/Core.lean @@ -80,20 +80,11 @@ theorem cancel_factors_le {α} [Field α] [LinearOrder α] [IsStrictOrderedRing · exact mul_pos had hbd · exact one_div_pos.2 hgcd +set_option trace.profiler true in theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a') (hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) : (a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by - rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd] - ext; constructor - · rintro rfl - rfl - · intro h - simp only [← mul_assoc] at h - refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h - on_goal 1 => apply mul_ne_zero - on_goal 1 => apply div_ne_zero - · exact one_ne_zero - all_goals assumption + grind theorem cancel_factors_ne {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a') (hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) : ``` ``` ℹ [436/436] Built Mathlib.Tactic.CancelDenoms.Core (3.1s) info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.command] [0.034809] theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a') (hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) : (a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by grind [Elab.definition.header] [0.014091] CancelDenoms.cancel_factors_eq info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.async] [0.046425] elaborating proof of CancelDenoms.cancel_factors_eq [Elab.definition.value] [0.045869] CancelDenoms.cancel_factors_eq [Elab.step] [0.045340] grind [Elab.step] [0.045327] grind [Elab.step] [0.045311] grind info: Mathlib/Tactic/CancelDenoms/Core.lean:87:2: [Elab.async] [0.027621] Lean.addDecl [Kernel] [0.027585] ✅️ typechecking declarations [CancelDenoms.cancel_factors_eq._proof_1_1] Build completed successfully (436 jobs). ```
t-meta 1/11 Mathlib/Tactic/CancelDenoms/Core.lean 1 4 ['euprunin', 'github-actions'] alexjbest
assignee:alexjbest
2-78745
2 days ago
29-12974
29 days ago
29-13023
29 days
27847 euprunin
author:euprunin
chore(Algebra): avoid duplicating proofs by reusing existing theorems or lemmas t-algebra
label:t-algebra$
46/73 Archive/Imo/Imo1972Q5.lean,Archive/Imo/Imo2015Q6.lean,Mathlib/Algebra/Homology/Embedding/Extend.lean,Mathlib/Algebra/MvPolynomial/Rename.lean,Mathlib/Algebra/Order/AbsoluteValue/Basic.lean,Mathlib/Algebra/Order/Archimedean/Class.lean,Mathlib/Algebra/Order/BigOperators/Expect.lean,Mathlib/Algebra/Order/BigOperators/Group/Finset.lean,Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean,Mathlib/Algebra/Order/Group/Abs.lean,Mathlib/Algebra/Order/Ring/Unbundled/Rat.lean,Mathlib/Algebra/Polynomial/Degree/Lemmas.lean,Mathlib/Algebra/Polynomial/Monic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean,Mathlib/Analysis/MeanInequalities.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Data/NNRat/Defs.lean,Mathlib/MeasureTheory/Function/Jacobian.lean,Mathlib/NumberTheory/Pell.lean,Mathlib/RingTheory/Polynomial/Basic.lean,Mathlib/Tactic/ComputeDegree.lean,Mathlib/Topology/Algebra/Order/Group.lean,Mathlib/Topology/MetricSpace/Algebra.lean,MathlibTest/GCongr/inequalities.lean,MathlibTest/GRewrite.lean 25 10 ['Ruben-VandeVelde', 'euprunin', 'github-actions', 'grunweg', 'kbuzzard', 'mathlib4-merge-conflict-bot'] mariainesdff
assignee:mariainesdff
2-78272
2 days ago
4-20224
4 days ago
15-77474
15 days
27856 euprunin
author:euprunin
chore(RingTheory/PowerSeries): golf entire `trunc_one` using `grind` ---
Show trace profiling of trunc_one: 88 ms before, 87 ms after 🎉 ### Trace profiling of `trunc_one` before PR 27856 ```diff diff --git a/Mathlib/RingTheory/PowerSeries/Trunc.lean b/Mathlib/RingTheory/PowerSeries/Trunc.lean index 7b8a612d49..9e21778c21 100644 --- a/Mathlib/RingTheory/PowerSeries/Trunc.lean +++ b/Mathlib/RingTheory/PowerSeries/Trunc.lean @@ -47,6 +47,7 @@ theorem trunc_zero (n) : trunc n (0 : R⟦X⟧) = 0 := rw [coeff_trunc, LinearMap.map_zero, Polynomial.coeff_zero] split_ifs <;> rfl +set_option trace.profiler true in @[simp] theorem trunc_one (n) : trunc (n + 1) (1 : R⟦X⟧) = 1 := Polynomial.ext fun m => by ``` ``` ℹ [1292/1292] Built Mathlib.RingTheory.PowerSeries.Trunc (3.2s) info: Mathlib/RingTheory/PowerSeries/Trunc.lean:51:0: [Elab.async] [0.089409] elaborating proof of PowerSeries.trunc_one [Elab.definition.value] [0.088361] PowerSeries.trunc_one [Elab.step] [0.086909] rw [coeff_trunc, coeff_one, Polynomial.coeff_one] split_ifs with h _ h' · rfl · rfl · subst h'; simp at h · rfl [Elab.step] [0.086897] rw [coeff_trunc, coeff_one, Polynomial.coeff_one] split_ifs with h _ h' · rfl · rfl · subst h'; simp at h · rfl [Elab.step] [0.038895] split_ifs with h _ h' [Elab.step] [0.043021] · subst h'; simp at h [Elab.step] [0.042999] subst h'; simp at h [Elab.step] [0.042991] subst h'; simp at h [Elab.step] [0.042673] simp at h Build completed successfully (1292 jobs). ``` ### Trace profiling of `trunc_one` after PR 27856 ```diff diff --git a/Mathlib/RingTheory/PowerSeries/Trunc.lean b/Mathlib/RingTheory/PowerSeries/Trunc.lean index 7b8a612d49..d9f8019532 100644 --- a/Mathlib/RingTheory/PowerSeries/Trunc.lean +++ b/Mathlib/RingTheory/PowerSeries/Trunc.lean @@ -47,15 +47,11 @@ theorem trunc_zero (n) : trunc n (0 : R⟦X⟧) = 0 := rw [coeff_trunc, LinearMap.map_zero, Polynomial.coeff_zero] split_ifs <;> rfl +set_option trace.profiler true in @[simp] theorem trunc_one (n) : trunc (n + 1) (1 : R⟦X⟧) = 1 := Polynomial.ext fun m => by - rw [coeff_trunc, coeff_one, Polynomial.coeff_one] - split_ifs with h _ h' - · rfl - · rfl - · subst h'; simp at h - · rfl + grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one] @[simp] theorem trunc_C (n) (a : R) : trunc (n + 1) (C R a) = Polynomial.C a := ``` ``` ℹ [1292/1292] Built Mathlib.RingTheory.PowerSeries.Trunc (3.1s) info: Mathlib/RingTheory/PowerSeries/Trunc.lean:51:0: [Elab.async] [0.087506] elaborating proof of PowerSeries.trunc_one [Elab.definition.value] [0.086697] PowerSeries.trunc_one [Elab.step] [0.083908] grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one] [Elab.step] [0.083856] grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one] [Elab.step] [0.083840] grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one] [Meta.synthInstance] [0.010307] ✅️ Lean.Grind.NatModule (Lean.Grind.Ring.OfSemiring.Q ℕ) [Meta.synthInstance] [0.010255] ❌️ LE (MvPowerSeries PUnit.{1} R) Build completed successfully (1292 jobs). ```
maintainer-merge t-algebra
label:t-algebra$
1/6 Mathlib/RingTheory/PowerSeries/Trunc.lean 1 8 ['eric-wieser', 'euprunin', 'github-actions', 'grunweg'] adomani
assignee:adomani
2-78148
2 days ago
19-14227
19 days ago
19-14745
19 days
27857 euprunin
author:euprunin
chore(Analysis/SpecialFunctions): golf entire `rpow_eq_top_of_nonneg` using `simp` ---
Show trace profiling of rpow_eq_top_of_nonneg: <10 ms before, 18 ms after ### Trace profiling of `rpow_eq_top_of_nonneg` before PR 27857 ```diff diff --git a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean index 75b232ee4e..5d2ddf1fce 100644 --- a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean +++ b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean @@ -553,6 +553,7 @@ theorem rpow_eq_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y = lemma rpow_lt_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y < ∞ ↔ x < ∞ := by simp only [lt_top_iff_ne_top, Ne, rpow_eq_top_iff_of_pos hy] +set_option trace.profiler true in theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by rw [ENNReal.rpow_eq_top_iff] rintro (h|h) ``` ``` ✔ [1872/1872] Built Mathlib.Analysis.SpecialFunctions.Pow.NNReal (6.0s) Build completed successfully (1872 jobs). ``` ### Trace profiling of `rpow_eq_top_of_nonneg` after PR 27857 ```diff diff --git a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean index 75b232ee4e..68dc37f940 100644 --- a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean +++ b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean @@ -553,13 +553,9 @@ theorem rpow_eq_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y = lemma rpow_lt_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y < ∞ ↔ x < ∞ := by simp only [lt_top_iff_ne_top, Ne, rpow_eq_top_iff_of_pos hy] +set_option trace.profiler true in theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by - rw [ENNReal.rpow_eq_top_iff] - rintro (h|h) - · exfalso - rw [lt_iff_not_ge] at h - exact h.right hy0 - · exact h.left + simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt] -- This is an unsafe rule since we want to try `rpow_ne_top_of_ne_zero` if `y < 0`. @[aesop (rule_sets := [finiteness]) unsafe apply] ``` ``` ℹ [1872/1872] Built Mathlib.Analysis.SpecialFunctions.Pow.NNReal (6.0s) info: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean:557:0: [Elab.async] [0.018873] elaborating proof of ENNReal.rpow_eq_top_of_nonneg [Elab.definition.value] [0.018350] ENNReal.rpow_eq_top_of_nonneg [Elab.step] [0.018131] simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt] [Elab.step] [0.018118] simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt] [Elab.step] [0.018101] simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt] Build completed successfully (1872 jobs). ```
maintainer-merge t-analysis 1/6 Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean 1 6 ['eric-wieser', 'euprunin', 'github-actions', 'grunweg', 'kim-em'] ADedecker
assignee:ADedecker
2-78030
2 days ago
19-13865
19 days ago
19-14372
19 days
28205 euprunin
author:euprunin
chore(Analysis/Calculus): golf entire `HasLineDerivWithinAt.congr_of_eventuallyEq` Motivation: Avoid (partial) proof duplication. ---
Show trace profiling of HasLineDerivWithinAt.congr_of_eventuallyEq: 235 ms before, <10 ms after 🎉 ### Trace profiling of `HasLineDerivWithinAt.congr_of_eventuallyEq` before PR 28205 ```diff diff --git a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean index 97ba668da2..c2a1379a95 100644 --- a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean +++ b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean @@ -343,6 +343,7 @@ theorem Filter.EventuallyEq.lineDifferentiableWithinAt_iff_of_mem LineDifferentiableWithinAt 𝕜 f₀ s x v ↔ LineDifferentiableWithinAt 𝕜 f₁ s x v := h.lineDifferentiableWithinAt_iff (h.eq_of_nhdsWithin hx) +set_option trace.profiler true in lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) ``` ``` ℹ [1850/1850] Built Mathlib.Analysis.Calculus.LineDeriv.Basic (7.1s) info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.044840] theorem congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) [Elab.step] [0.028254] expected type: Type (max u_2 u_3), term E →L[𝕜] F [Elab.step] [0.028080] expected type: Type (max u_2 u_3), term ContinuousLinearMap✝ (RingHom.id✝ 𝕜) E F [Meta.synthInstance] [0.010377] ✅️ AddCommMonoid E [Elab.definition.header] [0.011416] HasLineDerivWithinAt.congr_of_eventuallyEq info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.045090] theorem HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.045180] lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.async] [0.241538] elaborating proof of HasLineDerivWithinAt.congr_of_eventuallyEq [Elab.definition.value] [0.235419] HasLineDerivWithinAt.congr_of_eventuallyEq [Elab.step] [0.234338] apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) [Elab.step] [0.234325] apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) [Elab.step] [0.032147] apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) [Elab.step] [0.030192] simp [hx] [Elab.step] [0.030185] simp [hx] [Elab.step] [0.030174] simp [hx] [Meta.isDefEq] [0.026327] ✅️ 0 • ?m =?= 0 • v [Meta.isDefEq] [0.026186] ✅️ instHSMul =?= instHSMul [Meta.isDefEq.delta] [0.026172] ✅️ instHSMul =?= instHSMul [Meta.synthInstance] [0.025868] ✅️ SMulWithZero 𝕜 E [Meta.synthInstance] [0.017680] ✅️ apply MulActionWithZero.toSMulWithZero to SMulWithZero 𝕜 E [Meta.synthInstance.tryResolve] [0.017635] ✅️ SMulWithZero 𝕜 E ≟ SMulWithZero 𝕜 E [Meta.isDefEq] [0.011750] ✅️ ?m.54 =?= MulActionWithZero.toSMulWithZero 𝕜 E [Meta.isDefEq.assign] [0.011747] ✅️ ?m.54 := MulActionWithZero.toSMulWithZero 𝕜 E [Meta.isDefEq.assign.checkTypes] [0.011728] ✅️ (?m.54 : SMulWithZero 𝕜 E) := (MulActionWithZero.toSMulWithZero 𝕜 E : SMulWithZero 𝕜 E) [Meta.isDefEq] [0.011720] ✅️ SMulWithZero 𝕜 E =?= SMulWithZero 𝕜 E [Elab.step] [0.063437] have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop [Elab.step] [0.063411] focus refine no_implicit_lambda% (have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_) case body✝ => with_annotate_state"by" (fun_prop) [Elab.step] [0.063398] refine no_implicit_lambda% (have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_) case body✝ => with_annotate_state"by" (fun_prop) [Elab.step] [0.063390] refine no_implicit_lambda% (have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_) case body✝ => with_annotate_state"by" (fun_prop) [Elab.step] [0.025620] refine no_implicit_lambda% (have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_) [Elab.step] [0.025555] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦ f (x + t • v), term no_implicit_lambda% (have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_) [Elab.step] [0.025544] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦ f (x + t • v), term (have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_) [Elab.step] [0.025534] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦ f (x + t • v), term have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝; ?_ [Elab.step] [0.025437] expected type: Prop, term Continuous (fun (t : 𝕜) ↦ x + t • v) [Elab.step] [0.022733] expected type: 𝕜 → E, term (fun (t : 𝕜) ↦ x + t • v) [Elab.step] [0.022726] expected type: 𝕜 → E, term fun (t : 𝕜) ↦ x + t • v [Elab.step] [0.022644] expected type: E, term x + t • v [Elab.step] [0.022634] expected type: E, term binop% HAdd.hAdd✝ x (t • v) [Meta.synthInstance] [0.012145] ✅️ HSMul 𝕜 E E [Elab.step] [0.037752] case body✝ => with_annotate_state"by" (fun_prop) [Elab.step] [0.037590] with_annotate_state"by" (fun_prop) [Elab.step] [0.037584] with_annotate_state"by" (fun_prop) [Elab.step] [0.037576] with_annotate_state"by" (fun_prop) [Elab.step] [0.037566] (fun_prop) [Elab.step] [0.037560] fun_prop [Elab.step] [0.037553] fun_prop [Elab.step] [0.037537] fun_prop [Meta.Tactic.fun_prop] [0.036033] [✅️] Continuous fun t ↦ x + t • v [Meta.Tactic.fun_prop] [0.035608] [✅️] applying: Continuous.add [Meta.Tactic.fun_prop] [0.026323] [✅️] Continuous fun x ↦ x • v [Meta.Tactic.fun_prop] [0.025780] [✅️] applying: Continuous.smul [Meta.synthInstance] [0.024459] ✅️ ContinuousSMul 𝕜 E [Meta.synthInstance] [0.010968] ❌️ apply @ModuleFilterBasis.continuousSMul to ContinuousSMul 𝕜 E [Meta.synthInstance.tryResolve] [0.010896] ❌️ ContinuousSMul 𝕜 E ≟ ContinuousSMul ?m.91 ?m.92 [Meta.isDefEq] [0.010866] ❌️ ContinuousSMul 𝕜 E =?= ContinuousSMul ?m.91 ?m.92 [Meta.isDefEq] [0.010148] ✅️ DistribMulAction.toDistribSMul.toSMul =?= DistribMulAction.toDistribSMul.toSMul [Meta.isDefEq.delta] [0.010090] ✅️ DistribMulAction.toDistribSMul.toSMul =?= DistribMulAction.toDistribSMul.toSMul [Elab.step] [0.138706] exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) [Elab.step] [0.088650] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦ f (x + t • v), term A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) [Meta.isDefEq] [0.077764] ❌️ (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦ f (x + t • v) =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq] [0.077754] ❌️ (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦ f (x + t • v) =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq] [0.077673] ❌️ ∀ᶠ (x_1 : 𝕜) in 𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0, (fun t ↦ f₁ (x + t • v)) x_1 = (fun t ↦ f (x + t • v)) x_1 =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq] [0.077611] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0 =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq.delta] [0.017341] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0 =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq] [0.012680] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 [Meta.isDefEq] [0.012627] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= {x_1 | (fun t ↦ x + t • v) x_1 ∈ ?m.112} [Meta.isDefEq] [0.010589] ❌️ fun x_1 ↦ (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1 =?= fun x_1 ↦ (fun t ↦ x + t • v) x_1 ∈ ?m.112 [Meta.isDefEq] [0.010582] ❌️ (fun x ↦ (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x) x =?= (fun t ↦ x✝ + t • v) x ∈ ?m.112 [Meta.isDefEq] [0.010576] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x =?= (fun t ↦ x✝ + t • v) x ∈ ?m.112 [Meta.isDefEq] [0.010563] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x =?= Set.instMembership.1 ?m.112 ((fun t ↦ x✝ + t • v) x) [Meta.isDefEq] [0.010550] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x =?= Set.Mem ?m.112 ((fun t ↦ x✝ + t • v) x) [Meta.isDefEq] [0.010535] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x =?= ?m.112 ((fun t ↦ x✝ + t • v) x) [Meta.isDefEq.assign] [0.010526] ❌️ ?m.112 ((fun t ↦ x✝ + t • v) x) := (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x [Meta.isDefEq] [0.010508] ❌️ (fun t ↦ x✝ + t • v) x =?= (fun t ↦ f (x✝ + t • v)) x [Meta.isDefEq] [0.010502] ❌️ x✝ + x • v =?= f (x✝ + x • v) [Meta.isDefEq] [0.010433] ❌️ instHAdd.1 x✝ (x • v) =?= f (x✝ + x • v) [Meta.isDefEq] [0.010417] ❌️ Add.add x✝ (x • v) =?= f (x✝ + x • v) [Meta.isDefEq] [0.060224] ❌️ Filter.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0) {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= Filter.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109) ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.060183] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets [Meta.isDefEq.delta] [0.021246] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets [Meta.isDefEq] [0.013694] ✅️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets [Meta.isDefEq.delta] [0.013682] ✅️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets [Meta.isDefEq] [0.013667] ✅️ 𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0 =?= 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq.delta] [0.013449] ✅️ 𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0 =?= 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109 [Meta.isDefEq] [0.012745] ✅️ (fun t ↦ x + t • v) ⁻¹' s =?= (fun t ↦ x + t • v) ⁻¹' ?m.111 [Meta.isDefEq.delta] [0.012727] ✅️ (fun t ↦ x + t • v) ⁻¹' s =?= (fun t ↦ x + t • v) ⁻¹' ?m.111 [Meta.isDefEq] [0.012137] ✅️ fun t ↦ x + t • v =?= fun t ↦ x + t • v [Meta.isDefEq] [0.011501] ✅️ x + t • v =?= x + t • v [Meta.isDefEq] [0.011142] ✅️ instHAdd.1 x (t • v) =?= instHAdd.1 x (t • v) [Meta.isDefEq] [0.011082] ✅️ Add.add x (t • v) =?= Add.add x (t • v) [Meta.isDefEq] [0.010696] ✅️ inst✝¹.toAddCommMonoid.toAddCommSemigroup.toAddCommMagma.toAdd.1 x (t • v) =?= NormedAddCommGroup.toENormedAddCommMonoid.toAddCommMonoid.toAddCommSemigroup.toAddCommMagma.toAdd.1 x (t • v) [Meta.isDefEq] [0.038913] ❌️ Set.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= Set.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.038878] ❌️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets.Mem {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets.Mem ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.031752] ❌️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.026255] ❌️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).1 {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).1 ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.026153] ❌️ {s_1 | ∃ a ∈ 𝓝 0, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), s_1 = a ∩ b} {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= {s | ∃ a ∈ 𝓝 ?m.109, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), s = a ∩ b} ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.018272] ❌️ (fun s_1 ↦ ∃ a ∈ 𝓝 0, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), s_1 = a ∩ b) {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= (fun s ↦ ∃ a ∈ 𝓝 ?m.109, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), s = a ∩ b) ((fun t ↦ x + t • v) ⁻¹' ?m.112) [Meta.isDefEq] [0.018265] ❌️ ∃ a ∈ 𝓝 0, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= ∃ a ∈ 𝓝 ?m.109, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.018233] ❌️ fun a ↦ a ∈ 𝓝 0 ∧ ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= fun a ↦ a ∈ 𝓝 ?m.109 ∧ ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.018220] ❌️ a ∈ 𝓝 0 ∧ ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= a ∈ 𝓝 ?m.109 ∧ ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.018135] ❌️ ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.018113] ❌️ fun b ↦ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s) ∧ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= fun b ↦ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111) ∧ (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.018103] ❌️ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s) ∧ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111) ∧ (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.010937] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} = a ∩ b =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b [Meta.isDefEq] [0.010782] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 [Meta.isDefEq] [0.010758] ❌️ {x_1 | (fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} =?= {x_1 | (fun t ↦ x + t • v) x_1 ∈ ?m.112} [Elab.step] [0.044069] simp [Elab.step] [0.044055] simp [Elab.step] [0.044043] simp [Meta.isDefEq] [0.036423] ✅️ 0 • ?m =?= 0 • v [Meta.isDefEq] [0.036268] ✅️ instHSMul =?= instHSMul [Meta.isDefEq.delta] [0.036247] ✅️ instHSMul =?= instHSMul [Meta.synthInstance] [0.035497] ✅️ SMulWithZero 𝕜 E [Meta.synthInstance] [0.020865] ✅️ apply MulActionWithZero.toSMulWithZero to SMulWithZero 𝕜 E [Meta.synthInstance.tryResolve] [0.020824] ✅️ SMulWithZero 𝕜 E ≟ SMulWithZero 𝕜 E [Meta.isDefEq] [0.017188] ✅️ ?m.120 =?= MulActionWithZero.toSMulWithZero 𝕜 E [Meta.isDefEq.assign] [0.017185] ✅️ ?m.120 := MulActionWithZero.toSMulWithZero 𝕜 E [Meta.isDefEq.assign.checkTypes] [0.017168] ✅️ (?m.120 : SMulWithZero 𝕜 E) := (MulActionWithZero.toSMulWithZero 𝕜 E : SMulWithZero 𝕜 E) [Meta.isDefEq] [0.017165] ✅️ SMulWithZero 𝕜 E =?= SMulWithZero 𝕜 E [Meta.synthInstance] [0.014114] ✅️ Zero E info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:6: [Elab.async] [0.022735] Lean.addDecl [Kernel] [0.022289] ✅️ typechecking declarations [HasLineDerivWithinAt.congr_of_eventuallyEq] Build completed successfully (1850 jobs). ``` ### Trace profiling of `HasLineDerivWithinAt.congr_of_eventuallyEq` after PR 28205 ```diff diff --git a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean index 97ba668da2..5ac4634382 100644 --- a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean +++ b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean @@ -343,11 +343,10 @@ theorem Filter.EventuallyEq.lineDifferentiableWithinAt_iff_of_mem LineDifferentiableWithinAt 𝕜 f₀ s x v ↔ LineDifferentiableWithinAt 𝕜 f₁ s x v := h.lineDifferentiableWithinAt_iff (h.eq_of_nhdsWithin hx) +set_option trace.profiler true in lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) - (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by - apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx]) - have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop - exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp) + (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := + (EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf theorem HasLineDerivAt.congr_of_eventuallyEq (h : HasLineDerivAt 𝕜 f f' x v) (h₁ : f₁ =ᶠ[𝓝 x] f) : HasLineDerivAt 𝕜 f₁ f' x v := by ``` ``` ℹ [1850/1850] Built Mathlib.Analysis.Calculus.LineDeriv.Basic (6.8s) info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.053877] theorem congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := (EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf [Elab.step] [0.038023] expected type: Type (max u_2 u_3), term E →L[𝕜] F [Elab.step] [0.037231] expected type: Type (max u_2 u_3), term ContinuousLinearMap✝ (RingHom.id✝ 𝕜) E F [Elab.definition.header] [0.010772] HasLineDerivWithinAt.congr_of_eventuallyEq info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.054140] theorem HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := (EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.054209] lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := (EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf Build completed successfully (1850 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-analysis 2/4 Mathlib/Analysis/Calculus/LineDeriv/Basic.lean 1 6 ['euprunin', 'github-actions', 'grunweg', 'kim-em'] nobody
2-77484
2 days ago
4-20534
4 days ago
5-38879
5 days
28506 kim-em
author:kim-em
chore: clarify internal heartbeat conversion The previous comment was misleading. ----- Just playing around with codex; it found this by itself, although suggested the wrong fix. https://chatgpt.com/codex/tasks/task_e_68a003a948f483219633825547b190e0 t-meta 4/2 Mathlib/Util/SleepHeartbeats.lean 1 1 ['github-actions'] nobody
2-77037
2 days ago
4-79162
4 days ago
4-79209
4 days
28588 vihdzp
author:vihdzp
feat: supremum of principal ordinals is principal Used in the [`combinatorial-games`](https://github.com/vihdzp/combinatorial-games) repository. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-set-theory 21/0 Mathlib/SetTheory/Ordinal/Principal.lean 1 1 ['github-actions'] nobody
2-69560
2 days ago
2-70335
2 days ago
2-70381
2 days
28589 vihdzp
author:vihdzp
feat: more lemmas on characteristic 2 rings --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
11/0 Mathlib/Algebra/CharP/Two.lean 1 1 ['github-actions'] nobody
2-69513
2 days ago
2-69712
2 days ago
2-69707
2 days
28590 euprunin
author:euprunin
chore(Data/List): golf entire `idxOf_eq_length_iff` using `grind` ---
Show trace profiling of idxOf_eq_length_iff: 104 ms before, 24 ms after 🎉 ### Trace profiling of `idxOf_eq_length_iff` before PR 28590 ```diff diff --git a/Mathlib/Data/List/Basic.lean b/Mathlib/Data/List/Basic.lean index 9120dea54a..2b2dd2b76a 100644 --- a/Mathlib/Data/List/Basic.lean +++ b/Mathlib/Data/List/Basic.lean @@ -527,6 +527,7 @@ theorem idxOf_cons_eq {a b : α} (l : List α) : b = a → idxOf a (b :: l) = 0 theorem idxOf_cons_ne {a b : α} (l : List α) : b ≠ a → idxOf a (b :: l) = succ (idxOf a l) | h => by simp only [idxOf_cons, Bool.cond_eq_ite, beq_iff_eq, if_neg h] +set_option trace.profiler true in theorem idxOf_eq_length_iff {a : α} {l : List α} : idxOf a l = length l ↔ a ∉ l := by induction l with | nil => exact iff_of_true rfl not_mem_nil ``` ``` ℹ [431/431] Built Mathlib.Data.List.Basic (2.0s) info: Mathlib/Data/List/Basic.lean:531:0: [Elab.async] [0.104377] elaborating proof of List.idxOf_eq_length_iff [Elab.definition.value] [0.103682] List.idxOf_eq_length_iff [Elab.step] [0.103281] induction l with | nil => exact iff_of_true rfl not_mem_nil | cons b l ih => simp only [length, mem_cons, idxOf_cons] rw [cond_eq_if] split_ifs with h <;> simp at h · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm · simp only [Ne.symm h, false_or] rw [← ih] exact succ_inj [Elab.step] [0.103268] induction l with | nil => exact iff_of_true rfl not_mem_nil | cons b l ih => simp only [length, mem_cons, idxOf_cons] rw [cond_eq_if] split_ifs with h <;> simp at h · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm · simp only [Ne.symm h, false_or] rw [← ih] exact succ_inj [Elab.step] [0.103257] induction l with | nil => exact iff_of_true rfl not_mem_nil | cons b l ih => simp only [length, mem_cons, idxOf_cons] rw [cond_eq_if] split_ifs with h <;> simp at h · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm · simp only [Ne.symm h, false_or] rw [← ih] exact succ_inj [Elab.step] [0.101212] simp only [length, mem_cons, idxOf_cons] rw [cond_eq_if] split_ifs with h <;> simp at h · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm · simp only [Ne.symm h, false_or] rw [← ih] exact succ_inj [Elab.step] [0.101182] simp only [length, mem_cons, idxOf_cons] rw [cond_eq_if] split_ifs with h <;> simp at h · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm · simp only [Ne.symm h, false_or] rw [← ih] exact succ_inj [Elab.step] [0.085979] split_ifs with h <;> simp at h [Elab.step] [0.085910] focus split_ifs with h with_annotate_state"<;>" skip all_goals simp at h [Elab.step] [0.085900] split_ifs with h with_annotate_state"<;>" skip all_goals simp at h [Elab.step] [0.085892] split_ifs with h with_annotate_state"<;>" skip all_goals simp at h [Elab.step] [0.081108] split_ifs with h Build completed successfully (431 jobs). ``` ### Trace profiling of `idxOf_eq_length_iff` after PR 28590 ```diff diff --git a/Mathlib/Data/List/Basic.lean b/Mathlib/Data/List/Basic.lean index 9120dea54a..b32134ed29 100644 --- a/Mathlib/Data/List/Basic.lean +++ b/Mathlib/Data/List/Basic.lean @@ -527,17 +527,9 @@ theorem idxOf_cons_eq {a b : α} (l : List α) : b = a → idxOf a (b :: l) = 0 theorem idxOf_cons_ne {a b : α} (l : List α) : b ≠ a → idxOf a (b :: l) = succ (idxOf a l) | h => by simp only [idxOf_cons, Bool.cond_eq_ite, beq_iff_eq, if_neg h] +set_option trace.profiler true in theorem idxOf_eq_length_iff {a : α} {l : List α} : idxOf a l = length l ↔ a ∉ l := by - induction l with - | nil => exact iff_of_true rfl not_mem_nil - | cons b l ih => - simp only [length, mem_cons, idxOf_cons] - rw [cond_eq_if] - split_ifs with h <;> simp at h - · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm - · simp only [Ne.symm h, false_or] - rw [← ih] - exact succ_inj + grind ``` ``` ℹ [431/431] Built Mathlib.Data.List.Basic (2.5s) info: Mathlib/Data/List/Basic.lean:531:0: [Elab.async] [0.024881] elaborating proof of List.idxOf_eq_length_iff [Elab.definition.value] [0.024415] List.idxOf_eq_length_iff [Elab.step] [0.024206] grind [Elab.step] [0.024193] grind [Elab.step] [0.024177] grind Build completed successfully (431 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-data 1/10 Mathlib/Data/List/Basic.lean 1 1 ['github-actions'] nobody
2-68622
2 days ago
2-68666
2 days ago
2-68708
2 days
28519 euprunin
author:euprunin
chore(LinearAlgebra/AffineSpace/AffineSubspace): deprecate `mem_mk'_iff_vsub_mem` (duplicate) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
8/14 Mathlib/Algebra/Module/ZLattice/Basic.lean,Mathlib/Geometry/Euclidean/Sphere/SecondInter.lean,Mathlib/Geometry/Euclidean/Sphere/Tangent.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean 4 3 ['Ruben-VandeVelde', 'euprunin', 'github-actions'] nobody
2-68279
2 days ago
2-68279
2 days ago
4-5791
4 days
28544 themathqueen
author:themathqueen
feat(Algebra/Star/Unitary): `unitary * a * star unitary` is self-adjoint iff `a` is --- - [x] depends on: #28476 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
8/0 Mathlib/Algebra/Star/Unitary.lean 1 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
2-63856
2 days ago
2-65580
2 days ago
2-65605
2 days
27840 CBirkbeck
author:CBirkbeck
feat(NumberTheory/ModularForms/EisensteinSeries): define gammaSetN We define gammaSetWithGcd, which is the set of integer vectors with gcd equal to some natural number N. This is useful for giving the q-expansions of Eisenstein series at level one. Which can be seen here #27606 (these equivalences are used in `tsum_prod_eisSummand_eq_riemannZeta_eisensteinSeries` in the QExpansions file). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-number-theory 75/2 Mathlib/NumberTheory/ModularForms/EisensteinSeries/Defs.lean,Mathlib/RingTheory/EuclideanDomain.lean 2 7 ['CBirkbeck', 'MichaelStollBayreuth', 'github-actions'] MichaelStollBayreuth
assignee:MichaelStollBayreuth
2-59935
2 days ago
8-53691
8 days ago
17-46167
17 days
28598 lauramonk
author:lauramonk
feat(Combinatorics/Graph) add definitions of incidenceSet and loopSet Add the definition for `incidenceSet` and `loopSet` of a vertex in a graph, and a proof that the `loopSet` is included in the `incidenceSet`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics easy 22/0 Mathlib/Combinatorics/Graph/Basic.lean 1 2 ['github-actions', 'lauramonk'] nobody
2-45617
2 days ago
2-45625
2 days ago
2-45668
2 days
28582 Thmoas-Guan
author:Thmoas-Guan
feat(Data): some lemmas about withBot ENat Add some lemma about withBot ENat discovered when dealing with `ringKrullDim` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 18/0 Mathlib/Data/ENat/Basic.lean 1 1 ['github-actions'] nobody
2-45257
2 days ago
2-83376
2 days ago
2-83422
2 days
28338 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/IsPositive): `(adjoint S ∘ S).IsPositive` and `(S ∘ adjoint S).IsPositive` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis easy 16/0 Mathlib/Analysis/InnerProductSpace/Positive.lean 1 1 ['github-actions'] nobody
2-45209
2 days ago
7-57751
7 days ago
7-57755
7 days
28587 vihdzp
author:vihdzp
feat: irreducible polynomial has positive degree --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
12/2 Mathlib/Algebra/Polynomial/FieldDivision.lean 1 1 ['github-actions', 'lauramonk'] nobody
2-44978
2 days ago
2-71063
2 days ago
2-71057
2 days
23835 chrisflav
author:chrisflav
feat(Topology): cardinality of connected components is bounded by cardinality of fiber We show that if `f : X → Y` is an open and closed map to `Y` and `Y` is connected, the number of connected components of `X` is bounded by the cardinality of the fiber of any point. In particular, if `Y` has finitely many connected components and `f` finite fibers, also `X` as finitely many connected components. From Pi1. --- - [x] depends on: #23849 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 242/1 Mathlib.lean,Mathlib/Data/Set/Lattice.lean,Mathlib/SetTheory/Cardinal/Finite.lean,Mathlib/Topology/Clopen.lean,Mathlib/Topology/Connected/CardComponents.lean,Mathlib/Topology/Connected/Clopen.lean 6 5 ['chrisflav', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] nobody
2-44951
2 days ago
2-50061
2 days ago
4-44096
4 days
24528 chrisflav
author:chrisflav
feat(AlgebraicGeometry): directed covers Directed covers are covers, where every intersection can be covered by a component of the cover. For open covers this is equivalent to the images forming a basis of the topology. If a cover is directed, the compatibility conditions for gluing become easier, because only compatibility with the transition maps needs to be checked. In particular, the covered scheme naturally is the colimit of the components of the cover. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-geometry 291/0 Mathlib.lean,Mathlib/AlgebraicGeometry/Cover/Directed.lean 2 9 ['chrisflav', 'erdOne', 'github-actions', 'joelriou', 'leanprover-community-bot-assistant', 'mattrobball'] mattrobball
assignee:mattrobball
2-43408
2 days ago
2-43408
2 days ago
103-27081
103 days
28531 Ruben-VandeVelde
author:Ruben-VandeVelde
chore: remove Cardinal imports from Topology.Algebra.InfiniteSum.Group --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 51/15 Mathlib.lean,Mathlib/Analysis/BoxIntegral/UnitPartition.lean,Mathlib/Analysis/Normed/Group/Pointwise.lean,Mathlib/Analysis/Normed/Module/Convex.lean,Mathlib/Analysis/SpecificLimits/Basic.lean,Mathlib/Topology/Algebra/InfiniteSum/Const.lean,Mathlib/Topology/Algebra/InfiniteSum/Group.lean,Mathlib/Topology/Algebra/InfiniteSum/NatInt.lean,Mathlib/Topology/Algebra/InfiniteSum/Order.lean,Mathlib/Topology/Algebra/InfiniteSum/Real.lean,Mathlib/Topology/Category/Stonean/Basic.lean,Mathlib/Topology/Instances/ENNReal/Lemmas.lean,Mathlib/Topology/Instances/NNReal/Lemmas.lean,Mathlib/Topology/MetricSpace/HausdorffDistance.lean,Mathlib/Topology/MetricSpace/Thickening.lean,Mathlib/Topology/PartitionOfUnity.lean 16 4 ['Ruben-VandeVelde', 'YaelDillies', 'github-actions'] nobody
2-40199
2 days ago
4-17330
4 days ago
4-17314
4 days
28517 Vierkantor
author:Vierkantor
chore(*): address some `@[simps]` porting notes Search for porting notes mentioning `simps` and fix the ones that are easy to fix. The search also caught some that refer to `simps` as in a `simp` set, so we fix them too. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt 54/76 Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean,Mathlib/AlgebraicGeometry/Spec.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/CategoryTheory/Limits/Cones.lean,Mathlib/CategoryTheory/Limits/Shapes/BinaryBiproducts.lean,Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean,Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean,Mathlib/CategoryTheory/Limits/Shapes/Pullback/Cospan.lean,Mathlib/CategoryTheory/Localization/Predicate.lean,Mathlib/CategoryTheory/Monad/Adjunction.lean,Mathlib/CategoryTheory/Monad/Algebra.lean,Mathlib/CategoryTheory/Monad/Basic.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Preadditive/Mat.lean,Mathlib/LinearAlgebra/LinearIndependent/Defs.lean,Mathlib/Order/OmegaCompletePartialOrder.lean,Mathlib/RepresentationTheory/Rep.lean,Mathlib/RingTheory/GradedAlgebra/Basic.lean,Mathlib/Topology/Homotopy/HomotopyGroup.lean 19 1 ['github-actions'] nobody
2-37748
2 days ago
2-37748
2 days ago
2-37733
2 days
28606 euprunin
author:euprunin
chore(Data/Set): golf entire `compl_prod_eq_union` using `grind` ---
Show trace profiling of compl_prod_eq_union: 10 ms before, 16 ms after ### Trace profiling of `compl_prod_eq_union` before PR 28606 ```diff diff --git a/Mathlib/Data/Set/Prod.lean b/Mathlib/Data/Set/Prod.lean index 55aacc6e21..f99b9ea194 100644 --- a/Mathlib/Data/Set/Prod.lean +++ b/Mathlib/Data/Set/Prod.lean @@ -129,6 +129,7 @@ theorem prod_inter_prod : s₁ ×ˢ t₁ ∩ s₂ ×ˢ t₂ = (s₁ ∩ s₂) × ext ⟨x, y⟩ simp [and_assoc, and_left_comm] +set_option trace.profiler true in lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) : (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by ext p ``` ``` ℹ [368/368] Built Mathlib.Data.Set.Prod (2.3s) info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.014692] theorem compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) : (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by ext p simp only [mem_compl_iff, mem_prod, not_and, mem_union, mem_univ, and_true, true_and] constructor <;> intro h · by_cases fst_in_s : p.fst ∈ s · exact Or.inr (h fst_in_s) · exact Or.inl fst_in_s · intro fst_in_s simpa only [fst_in_s, not_true, false_or] using h [Elab.definition.header] [0.013915] Set.compl_prod_eq_union [Elab.step] [0.013615] expected type: Sort ?u.4299, term (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) [Elab.step] [0.013608] expected type: Sort ?u.4299, term binrel% Eq✝ (s ×ˢ t)ᶜ ((sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ)) [Elab.step] [0.010755] expected type: , term Union.union✝ (sᶜ ×ˢ univ) (univ ×ˢ tᶜ) info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.014746] lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) : (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by ext p simp only [mem_compl_iff, mem_prod, not_and, mem_union, mem_univ, and_true, true_and] constructor <;> intro h · by_cases fst_in_s : p.fst ∈ s · exact Or.inr (h fst_in_s) · exact Or.inl fst_in_s · intro fst_in_s simpa only [fst_in_s, not_true, false_or] using h info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.async] [0.010868] elaborating proof of Set.compl_prod_eq_union [Elab.definition.value] [0.010258] Set.compl_prod_eq_union Build completed successfully (368 jobs). ``` ### Trace profiling of `compl_prod_eq_union` after PR 28606 ```diff diff --git a/Mathlib/Data/Set/Prod.lean b/Mathlib/Data/Set/Prod.lean index 55aacc6e21..3ea6d5117e 100644 --- a/Mathlib/Data/Set/Prod.lean +++ b/Mathlib/Data/Set/Prod.lean @@ -129,16 +129,10 @@ theorem prod_inter_prod : s₁ ×ˢ t₁ ∩ s₂ ×ˢ t₂ = (s₁ ∩ s₂) × ext ⟨x, y⟩ simp [and_assoc, and_left_comm] +set_option trace.profiler true in lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) : (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by - ext p - simp only [mem_compl_iff, mem_prod, not_and, mem_union, mem_univ, and_true, true_and] - constructor <;> intro h - · by_cases fst_in_s : p.fst ∈ s - · exact Or.inr (h fst_in_s) - · exact Or.inl fst_in_s - · intro fst_in_s - simpa only [fst_in_s, not_true, false_or] using h + grind @[simp] theorem disjoint_prod : Disjoint (s₁ ×ˢ t₁) (s₂ ×ˢ t₂) ↔ Disjoint s₁ s₂ ∨ Disjoint t₁ t₂ := by ``` ``` ℹ [368/368] Built Mathlib.Data.Set.Prod (2.1s) info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.012252] theorem compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) : (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by grind [Elab.definition.header] [0.010273] Set.compl_prod_eq_union info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.012858] lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) : (s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by grind info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.async] [0.016424] elaborating proof of Set.compl_prod_eq_union [Elab.definition.value] [0.016040] Set.compl_prod_eq_union [Elab.step] [0.015891] grind [Elab.step] [0.015882] grind [Elab.step] [0.015870] grind Build completed successfully (368 jobs). ```
--- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
t-data 1/8 Mathlib/Data/Set/Prod.lean 1 1 ['github-actions'] nobody
2-33048
2 days ago
2-33069
2 days ago
2-33113
2 days
28602 gmcninch-tufts
author:gmcninch-tufts
feat(Algebra/Polynomial/Module): prove equivalence of a certain tensor product with PolynomialModule For a commutative ring `R` and an `R`-module `M`, construct an equivalence between the `R[X]`-modules `R[X] ⊗[R] M` and `PolynomialModule R M`. This equivalence enables application of some base-change results to `PolynomialModule R M` . --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
210/0 Mathlib.lean,Mathlib/Algebra/Polynomial/Module/TensorProduct.lean 2 1 ['github-actions'] nobody
2-32573
2 days ago
2-41979
2 days ago
2-42024
2 days
27943 dupuisf
author:dupuisf
feat: `StarOrderedRing` implies `OrderedSMul` We show that `StarOrderedRing R` implies `OrderedSMul 𝕜 R`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra t-analysis
label:t-algebra$
12/0 Mathlib/Algebra/Order/Star/Basic.lean 1 10 ['YaelDillies', 'dupuisf', 'github-actions', 'themathqueen'] YaelDillies
assignee:YaelDillies
2-26084
2 days ago
15-40782
15 days ago
16-28062
16 days
28609 mans0954
author:mans0954
feature(Analysis/LocallyConvex/Bounded): Quasi-complete spaces Define a quasi-complete space (Bourbaki, III.8) and prove that in a quasi-complete space: - `isCompact_closure_of_totallyBounded_quasiComplete`: the closure of a totally bounded set is compact . - `isCompact_closedAbsConvexHull_of_totallyBounded`: the closed absolute convex hull of a totally bounded set is compact . The closure of a totally bounded subset of a complete space is also compact. For a complete space with zero equipped with a scalar multiplication by a seminormed ring, this is a special case of `isCompact_closure_of_totallyBounded_quasiComplete`, but we also provide `isCompact_closure_of_totallyBounded_complete` which does not require a zero or a scalar multiplication. (N.B. `isCompact_of_totallyBounded_isClosed (TotallyBounded.closure ht) isClosed_closure` provides an alternative proof of `isCompact_closure_of_totallyBounded_complete`.) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 44/0 Mathlib/Analysis/LocallyConvex/AbsConvex.lean,Mathlib/Analysis/LocallyConvex/Bounded.lean,Mathlib/Topology/UniformSpace/Cauchy.lean 3 1 ['github-actions'] nobody
2-22555
2 days ago
2-22555
2 days ago
2-24871
2 days
28612 euprunin
author:euprunin
chore(Data/List): golf entire `idxOf_append_of_mem`, `cons_sublist_cons'`, `length_eraseIdx_add_one`, `length_eraseP_add_one` and `idxOf_append_of_notMem` using `grind` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 5/26 Mathlib/Data/List/Basic.lean 1 1 ['github-actions'] nobody
2-22415
2 days ago
2-22442
2 days ago
2-22486
2 days
28451 yapudpill
author:yapudpill
feat(RingTheory/Noetherian): add `IsNoetherianRing.of_prime` This PR introduces the first usage of `Ideal.IsOka` introduced in #27200 to prove that if all prime ideals of a `CommRing` are finitely generated then this ring is Noetherian. To do so, we also added the lemma `Ideal.mem_span_range_self`. --- - [x] depends on: #28525 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory new-contributor 104/12 Mathlib.lean,Mathlib/RingTheory/Ideal/Span.lean,Mathlib/RingTheory/Noetherian/OfPrime.lean,docs/references.bib 4 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
2-17461
2 days ago
3-43318
3 days ago
5-10204
5 days
28477 yapudpill
author:yapudpill
feat(RingTheory): golf `IsPrincipalIdealRing.of_prime` In complement to #28451 and as discussed in #27200, this PR uses the newly added Oka predicates to golf the proof of `IsPrincipalIdealRing.of_prime`. --- - [x] depends on: #28525 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory new-contributor 61/56 Mathlib/RingTheory/PrincipalIdealDomain.lean,Mathlib/RingTheory/PrincipalIdealDomainOfPrime.lean 2 5 ['Ruben-VandeVelde', 'github-actions', 'mathlib4-dependent-issues-bot', 'yapudpill'] nobody
2-17361
2 days ago
3-42248
3 days ago
4-24419
4 days
28035 euprunin
author:euprunin
chore: replace `norm_num` with `simp` where applicable Same motivation as in kim-em's #24064 (chore: replace `norm_num` with `simp` where applicable): > Consider replacing a tactic with a (ahem) simpler alternative. 204/205 Mathlib/Algebra/Polynomial/Div.lean,Mathlib/Algebra/Star/CHSH.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/Basic.lean,Mathlib/Analysis/Analytic/Inverse.lean,Mathlib/Analysis/Asymptotics/AsymptoticEquivalent.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Order.lean,Mathlib/Analysis/Calculus/Deriv/MeanValue.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/Taylor.lean,Mathlib/Analysis/ConstantSpeed.lean,Mathlib/Analysis/Convex/Function.lean,Mathlib/Analysis/Fourier/AddCircle.lean,Mathlib/Analysis/Fourier/Inversion.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/InnerProductSpace/Basic.lean,Mathlib/Analysis/InnerProductSpace/LinearMap.lean,Mathlib/Analysis/InnerProductSpace/Orthonormal.lean,Mathlib/Analysis/InnerProductSpace/TwoDim.lean,Mathlib/Analysis/NormedSpace/ENormedSpace.lean,Mathlib/Analysis/PSeries.lean,Mathlib/Analysis/SpecialFunctions/BinaryEntropy.lean,Mathlib/Analysis/SpecialFunctions/Complex/LogBounds.lean,Mathlib/Analysis/SpecialFunctions/ContinuousFunctionalCalculus/Rpow/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Integrals/PosLogEqCircleAverage.lean,Mathlib/Analysis/SpecialFunctions/JapaneseBracket.lean,Mathlib/Analysis/SpecialFunctions/Pow/Real.lean,Mathlib/Analysis/SpecialFunctions/Stirling.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Bounds.lean,Mathlib/Analysis/SpecificLimits/Normed.lean,Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean,Mathlib/Combinatorics/Additive/SmallTripling.lean,Mathlib/Combinatorics/SimpleGraph/Regularity/Bound.lean,Mathlib/Combinatorics/SimpleGraph/Regularity/Chunk.lean,Mathlib/Combinatorics/SimpleGraph/Regularity/Lemma.lean,Mathlib/Computability/Ackermann.lean,Mathlib/Computability/AkraBazzi/AkraBazzi.lean,Mathlib/Computability/AkraBazzi/GrowsPolynomially.lean,Mathlib/Computability/AkraBazzi/SumTransform.lean,Mathlib/Data/Complex/Trigonometric.lean,Mathlib/Data/EReal/Basic.lean,Mathlib/Data/Nat/Digits/Div.lean,Mathlib/Data/Real/Cardinality.lean,Mathlib/Data/Real/GoldenRatio.lean,Mathlib/Data/Real/Pi/Bounds.lean,Mathlib/Data/Real/Pi/Wallis.lean,Mathlib/Data/Real/Sign.lean,Mathlib/Geometry/Euclidean/Basic.lean,Mathlib/Geometry/Euclidean/MongePoint.lean,Mathlib/Geometry/Euclidean/Triangle.lean,Mathlib/GroupTheory/GroupAction/Blocks.lean,Mathlib/GroupTheory/Perm/Cycle/Basic.lean,Mathlib/GroupTheory/SpecificGroups/Alternating/KleinFour.lean,Mathlib/GroupTheory/SpecificGroups/Quaternion.lean,Mathlib/LinearAlgebra/QuadraticForm/Basic.lean,Mathlib/LinearAlgebra/RootSystem/Reduced.lean,Mathlib/MeasureTheory/Function/ConvergenceInMeasure.lean,Mathlib/MeasureTheory/Function/UniformIntegrable.lean,Mathlib/MeasureTheory/Integral/Bochner/Basic.lean,Mathlib/MeasureTheory/Integral/CircleIntegral.lean,Mathlib/NumberTheory/ADEInequality.lean,Mathlib/NumberTheory/Bernoulli.lean,Mathlib/NumberTheory/Cyclotomic/Discriminant.lean,Mathlib/NumberTheory/Cyclotomic/PID.lean,Mathlib/NumberTheory/Cyclotomic/Rat.lean,Mathlib/NumberTheory/FactorisationProperties.lean,Mathlib/NumberTheory/Fermat.lean,Mathlib/NumberTheory/FermatPsp.lean,Mathlib/NumberTheory/Harmonic/GammaDeriv.lean,Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean,Mathlib/NumberTheory/LSeries/DirichletContinuation.lean,Mathlib/NumberTheory/LucasLehmer.lean,Mathlib/NumberTheory/Modular.lean,Mathlib/NumberTheory/ModularForms/Basic.lean,Mathlib/NumberTheory/ModularForms/LevelOne.lean,Mathlib/NumberTheory/Multiplicity.lean,Mathlib/NumberTheory/NumberField/CanonicalEmbedding/ConvexBody.lean,Mathlib/NumberTheory/NumberField/Discriminant/Basic.lean,Mathlib/NumberTheory/NumberField/Discriminant/Defs.lean,Mathlib/NumberTheory/Padics/Hensel.lean,Mathlib/NumberTheory/Zsqrtd/GaussianInt.lean,Mathlib/RingTheory/DedekindDomain/Different.lean,Mathlib/RingTheory/Fintype.lean,Mathlib/RingTheory/Ideal/NatInt.lean,Mathlib/RingTheory/PowerSeries/Basic.lean,Mathlib/RingTheory/ZMod/UnitsCyclic.lean,Mathlib/Tactic/NormNum/LegendreSymbol.lean,Mathlib/Topology/Algebra/Valued/WithZeroMulInt.lean,Mathlib/Topology/Instances/CantorSet.lean,Mathlib/Topology/Instances/ENNReal/Lemmas.lean,Mathlib/Topology/Separation/CompletelyRegular.lean 95 7 ['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot'] nobody
2-12786
2 days ago
2-12786
2 days ago
14-34904
14 days
28163 euprunin
author:euprunin
chore: replace `aesop` with `simp_all` where applicable Motivation: `aesop` runs `simp_all` by default, so these ~160 `aesop` calls seem to be just `simp_all` in disguise. It seems better to use plain `simp_all` instead. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 148/148 Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean,Mathlib/Algebra/GroupWithZero/NonZeroDivisors.lean,Mathlib/Algebra/Lie/Weights/Killing.lean,Mathlib/Algebra/Module/Submodule/Pointwise.lean,Mathlib/Algebra/Module/Submodule/Union.lean,Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean,Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/OfScalars.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Continuity.lean,Mathlib/Analysis/Calculus/FDeriv/Symmetric.lean,Mathlib/Analysis/Complex/Tietze.lean,Mathlib/Analysis/Convex/Jensen.lean,Mathlib/Analysis/LocallyConvex/AbsConvex.lean,Mathlib/Analysis/Normed/Group/CocompactMap.lean,Mathlib/Analysis/Normed/Group/ZeroAtInfty.lean,Mathlib/Analysis/NormedSpace/FunctionSeries.lean,Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean,Mathlib/Analysis/SpecificLimits/Basic.lean,Mathlib/CategoryTheory/Comma/Arrow.lean,Mathlib/CategoryTheory/Comma/Over/Basic.lean,Mathlib/CategoryTheory/Limits/Types/ColimitType.lean,Mathlib/CategoryTheory/Limits/Types/Limits.lean,Mathlib/CategoryTheory/Types.lean,Mathlib/Combinatorics/Additive/FreimanHom.lean,Mathlib/Combinatorics/Schnirelmann.lean,Mathlib/Combinatorics/SimpleGraph/CompleteMultipartite.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/Subgraph.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/WalkDecomp.lean,Mathlib/Combinatorics/SimpleGraph/Matching.lean,Mathlib/Combinatorics/SimpleGraph/Operations.lean,Mathlib/Combinatorics/SimpleGraph/Paths.lean,Mathlib/Combinatorics/SimpleGraph/Prod.lean,Mathlib/Combinatorics/SimpleGraph/Tutte.lean,Mathlib/Computability/AkraBazzi/SumTransform.lean,Mathlib/Data/ENNReal/Holder.lean,Mathlib/Data/Finset/Basic.lean,Mathlib/Data/Finset/Card.lean,Mathlib/Data/Finset/Lattice/Prod.lean,Mathlib/Data/Finset/Sym.lean,Mathlib/Data/Finsupp/Defs.lean,Mathlib/Data/Int/GCD.lean,Mathlib/Data/List/Nodup.lean,Mathlib/Data/List/TakeDrop.lean,Mathlib/Data/Matrix/Basis.lean,Mathlib/Data/Matrix/ColumnRowPartitioned.lean,Mathlib/Data/Matroid/Minor/Restrict.lean,Mathlib/Data/Multiset/DershowitzManna.lean,Mathlib/Data/Nat/Prime/Defs.lean,Mathlib/Geometry/Group/Growth/QuotientInter.lean,Mathlib/Geometry/Manifold/VectorField/LieBracket.lean,Mathlib/GroupTheory/CoprodI.lean,Mathlib/GroupTheory/FreeGroup/Basic.lean,Mathlib/GroupTheory/SpecificGroups/Cyclic.lean,Mathlib/LinearAlgebra/LinearIndependent/Lemmas.lean,Mathlib/LinearAlgebra/RootSystem/Base.lean,Mathlib/LinearAlgebra/RootSystem/CartanMatrix.lean,Mathlib/LinearAlgebra/RootSystem/Finite/G2.lean,Mathlib/LinearAlgebra/RootSystem/Finite/Lemmas.lean,Mathlib/LinearAlgebra/RootSystem/Finite/Nondegenerate.lean,Mathlib/LinearAlgebra/RootSystem/GeckConstruction/Basic.lean,Mathlib/LinearAlgebra/RootSystem/Reduced.lean,Mathlib/LinearAlgebra/Span/Defs.lean,Mathlib/MeasureTheory/Function/AEMeasurableOrder.lean,Mathlib/MeasureTheory/Group/GeometryOfNumbers.lean,Mathlib/MeasureTheory/Integral/Lebesgue/Markov.lean,Mathlib/MeasureTheory/Measure/Dirac.lean,Mathlib/NumberTheory/Cyclotomic/Basic.lean,Mathlib/NumberTheory/Divisors.lean,Mathlib/NumberTheory/LSeries/RiemannZeta.lean,Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Basic.lean,Mathlib/Order/Atoms.lean,Mathlib/Order/BooleanAlgebra/Basic.lean,Mathlib/Order/CompactlyGenerated/Basic.lean,Mathlib/Order/Interval/Set/OrdConnectedLinear.lean,Mathlib/Order/Interval/Set/SuccPred.lean,Mathlib/Order/SupIndep.lean,Mathlib/Order/WithBot.lean,Mathlib/RepresentationTheory/Basic.lean,Mathlib/RingTheory/Ideal/AssociatedPrime/Finiteness.lean,Mathlib/RingTheory/Ideal/Maximal.lean,Mathlib/RingTheory/IntegralClosure/IntegrallyClosed.lean,Mathlib/RingTheory/KrullDimension/NonZeroDivisors.lean,Mathlib/RingTheory/MvPolynomial/Symmetric/NewtonIdentities.lean,Mathlib/Topology/Algebra/IsUniformGroup/Basic.lean,Mathlib/Topology/Category/Profinite/Nobeling/Basic.lean,Mathlib/Topology/Compactness/Compact.lean,Mathlib/Topology/GDelta/Basic.lean,Mathlib/Topology/Order/IntermediateValue.lean,Mathlib/Topology/Order/IsLUB.lean,Mathlib/Topology/Order/LawsonTopology.lean,Mathlib/Topology/Separation/CompletelyRegular.lean,Mathlib/Topology/Sets/CompactOpenCovered.lean,Mathlib/Topology/Spectral/Prespectral.lean 93 6 ['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot'] nobody
2-11329
2 days ago
2-11329
2 days ago
11-6825
11 days
28339 JovanGerb
author:JovanGerb
feat(gcongr): support `@[gcongr]` for `Monotone` and friends This PR adds the feature to `gcongr` that you can now tag lemmas whose conclusion is `Monotone f`, `Antitone f`, etc. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 119/88 Mathlib/Algebra/Order/Floor/Ring.lean,Mathlib/Algebra/Order/Floor/Semiring.lean,Mathlib/Algebra/Order/Module/Algebra.lean,Mathlib/Algebra/Order/Ring/Cast.lean,Mathlib/Algebra/Ring/Subring/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/ERealExp.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Arctan.lean,Mathlib/Data/Complex/Exponential.lean,Mathlib/Data/Finsupp/Order.lean,Mathlib/Data/Multiset/Defs.lean,Mathlib/Data/Nat/Cast/Order/Basic.lean,Mathlib/Data/Rat/Cast/Order.lean,Mathlib/Data/Real/Sqrt.lean,Mathlib/LinearAlgebra/Basis/Flag.lean,Mathlib/MeasureTheory/Function/SimpleFunc.lean,Mathlib/Order/Filter/Map.lean,Mathlib/Order/Hom/Basic.lean,Mathlib/Order/KrullDimension.lean,Mathlib/Tactic/GCongr/Core.lean,MathlibTest/GCongr/inequalities.lean 20 3 ['github-actions', 'kckennylau', 'mathlib4-merge-conflict-bot'] nobody
2-10470
2 days ago
2-10593
2 days ago
7-11973
7 days
28533 kim-em
author:kim-em
feat(linarith): add `linarith?` mode which suggests a `linarith only` call Adds `linarith?`, which traces the internal to watch which inequalities are being used, and suggests a `linarith only` call via the "try this:" mechanism. Also adds a `+minimize` flag, on by default, which then greedily tries to drop hypotheses from the used set, to see if the problem is still possible with a smaller set. Currently I don't have test case showing this is worthwhile, however. Contributions welcome. ------ https://chatgpt.com/codex/tasks/task_e_68a02bce93a883218485c7e7cafb877a codex t-meta 213/68 Mathlib/Tactic/Linarith/Frontend.lean,Mathlib/Tactic/Linarith/Verification.lean,MathlibTest/linarith.lean 3 2 ['github-actions', 'kim-em'] nobody
2-9984
2 days ago
4-13497
4 days ago
4-13549
4 days
26259 Raph-DG
author:Raph-DG
feat(Topology): Connecting different notions of locally finite In this PR we connect the notions of local finiteness of an indexed family of sets (as in LocallyFinite) and of a set of sets (as in Function.locallyFinsuppWithin) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 32/0 Mathlib/Topology/LocallyFinsupp.lean 1 6 ['Raph-DG', 'github-actions', 'jcommelin', 'kckennylau'] jcommelin
assignee:jcommelin
2-7494
2 days ago
60-28984
1 month ago
60-29026
60 days
27395 joelriou
author:joelriou
feat(Algebra/Homology): the canonical t-structure on the derived category --- - [x] depends on: #27536 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 227/1 Mathlib.lean,Mathlib/Algebra/Homology/DerivedCategory/Basic.lean,Mathlib/Algebra/Homology/DerivedCategory/TStructure.lean,Mathlib/Algebra/Homology/Embedding/CochainComplex.lean,Mathlib/CategoryTheory/Triangulated/TStructure/Basic.lean 5 2 ['github-actions', 'mathlib4-dependent-issues-bot'] riccardobrasca
assignee:riccardobrasca
2-6500
2 days ago
9-32437
9 days ago
9-32484
9 days
27573 jsm28
author:jsm28
feat(LinearAlgebra/AffineSpace/Simplex/Basic): membership of interior of a face Add lemmas about when an affine combination of all the vertices of a simplex lies in the `interior` or `closedInterior` of a face. Feel free to golf, these lemmas really ought to be a lot simpler to prove. --- - [x] depends on: #26822 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
128/0 Mathlib/LinearAlgebra/AffineSpace/Independent.lean,Mathlib/LinearAlgebra/AffineSpace/Simplex/Basic.lean 2 9 ['github-actions', 'jcommelin', 'jsm28', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] chrisflav
assignee:chrisflav
2-6499
2 days ago
13-60982
13 days ago
16-72896
16 days
28072 kckennylau
author:kckennylau
feat(RingTheory/Valuation): make tactic rw_val_equiv Co-authored by Aaron Liu and Bhavik Mehta. A tactic to rewrite relations such as `max (v₁ x) (v₁ y) * v₁ z < 1` into `max (v₂ x) (v₂ y) * v₂ z < 1` , given `h : v₁.IsEquiv v₂`. Allowed relations are `≤`, `<`, `=`, `≠`. Allowed operations are: `0`, `1`, `v₁ r`, `⁻¹`, `^` (both `ℕ` and `ℤ`), `*`, `/`, `min`, `max`. Examples: ```lean example {R Γ₁ Γ₂ : Type} [Ring R] [LinearOrderedCommMonoidWithZero Γ₁] [LinearOrderedCommMonoidWithZero Γ₂] {v₁ : Valuation R Γ₁} {v₂ : Valuation R Γ₂} (h : v₁.IsEquiv v₂) {y z : R} : {x | v₁ x ^ 2 * min (v₁ y) (v₁ z) ≤ 1} = {x | v₂ x ^ 2 * min (v₂ y) (v₂ z) ≤ 1} := by rw_val_equiv h ``` It is also possible to use `←` to rewrite in the opposite direction, and to use `at h1 h3 ⊢` to specify which hypotheses (and/or goal) to rewrite, similar to the syntax of `rw`. There is also `rwa_val_equiv` to work like `rwa`. --- Zulip: [#Is there code for X? > Tactics for comparing equivalent valuations](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Tactics.20for.20comparing.20equivalent.20valuations) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 455/13 Mathlib/RingTheory/Valuation/Basic.lean,MathlibTest/Simproc/ValEquiv.lean 2 34 ['b-mehta', 'eric-wieser', 'github-actions', 'kckennylau', 'pechersky', 'plp127'] erdOne
assignee:erdOne
2-6498
2 days ago
12-28190
12 days ago
13-2695
13 days
28191 kckennylau
author:kckennylau
feat(Logic): tag Injective, Surjective, and Bijective with fun_prop --- Zulip: * [#Is there code for X? > surjective is not funprop!](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/surjective.20is.20not.20funprop!) * [#mathlib4 > `fun_prop` for Injective/Surjective/Bijective?](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/.60fun_prop.60.20for.20Injective.2FSurjective.2FBijective.3F) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 16/0 Mathlib/Tactic/FunProp.lean 1 3 ['github-actions', 'grunweg', 'kckennylau'] alexjbest
assignee:alexjbest
2-6496
2 days ago
9-43007
9 days ago
10-21218
10 days
28626 alreadydone
author:alreadydone
chore(Archive, Counterexamples): replace => by ↦ --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 288/288 Archive/Arithcc.lean,Archive/Examples/IfNormalization/Result.lean,Archive/Examples/IfNormalization/WithoutAesop.lean,Archive/Examples/PropEncodable.lean,Archive/Imo/Imo1959Q1.lean,Archive/Imo/Imo1960Q1.lean,Archive/Imo/Imo1962Q4.lean,Archive/Imo/Imo1972Q5.lean,Archive/Imo/Imo1977Q6.lean,Archive/Imo/Imo1981Q3.lean,Archive/Imo/Imo1987Q1.lean,Archive/Imo/Imo1988Q6.lean,Archive/Imo/Imo1994Q1.lean,Archive/Imo/Imo1998Q2.lean,Archive/Imo/Imo2001Q2.lean,Archive/Imo/Imo2006Q3.lean,Archive/Imo/Imo2006Q5.lean,Archive/Imo/Imo2008Q2.lean,Archive/Imo/Imo2008Q4.lean,Archive/Imo/Imo2011Q3.lean,Archive/Imo/Imo2013Q1.lean,Archive/Imo/Imo2019Q1.lean,Archive/Imo/Imo2024Q5.lean,Archive/MiuLanguage/Basic.lean,Archive/MiuLanguage/DecisionSuf.lean,Archive/OxfordInvariants/Summer2021/Week3P1.lean,Archive/Sensitivity.lean,Archive/Wiedijk100Theorems/AbelRuffini.lean,Archive/Wiedijk100Theorems/AreaOfACircle.lean,Archive/Wiedijk100Theorems/AscendingDescendingSequences.lean,Archive/Wiedijk100Theorems/BallotProblem.lean,Archive/Wiedijk100Theorems/BirthdayProblem.lean,Archive/Wiedijk100Theorems/BuffonsNeedle.lean,Archive/Wiedijk100Theorems/CubingACube.lean,Archive/Wiedijk100Theorems/FriendshipGraphs.lean,Archive/Wiedijk100Theorems/Konigsberg.lean,Archive/Wiedijk100Theorems/Partition.lean,Archive/Wiedijk100Theorems/SumOfPrimeReciprocalsDiverges.lean,Archive/ZagierTwoSquares.lean,Counterexamples/AharoniKorman.lean,Counterexamples/CanonicallyOrderedCommSemiringTwoMul.lean,Counterexamples/CharPZeroNeCharZero.lean,Counterexamples/CliffordAlgebraNotInjective.lean,Counterexamples/DirectSumIsInternal.lean,Counterexamples/GameMultiplication.lean,Counterexamples/Girard.lean,Counterexamples/HomogeneousPrimeNotPrime.lean,Counterexamples/MapFloor.lean,Counterexamples/MonicNonRegular.lean,Counterexamples/Phillips.lean,Counterexamples/Pseudoelement.lean,Counterexamples/QuadraticForm.lean,Counterexamples/SorgenfreyLine.lean,Counterexamples/ZeroDivisorsInAddMonoidAlgebras.lean 54 1 ['github-actions'] nobody
2-5154
2 days ago
2-6607
2 days ago
2-6591
2 days
28628 euprunin
author:euprunin
chore(Order/BooleanAlgebra): golf entire `diff_insert_of_notMem`, `insert_diff_of_mem`, `insert_diff_of_notMem` and `subset_insert_iff` using `grind` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order 4/14 Mathlib/Order/BooleanAlgebra/Set.lean 1 1 ['github-actions'] nobody
1-77851
1 day ago
1-77862
1 day ago
1-77903
1 day
28343 RemyDegenne
author:RemyDegenne
feat(Probability): Fernique's theorem for distributions that are invariant by rotation Let `μ` be a finite measure on a second-countable normed space `E` such that the product measure `μ.prod μ` on `E × E` is invariant by rotation of angle `-π/4`. Then there exists a constant `C > 0` such that the function `x ↦ exp (C * ‖x‖ ^ 2)` is integrable with respect to `μ`. The main application of this theorem will be for Gaussian measures. --- The PR is large, but is basically one big proof, so I don't think I can cut it at a meaningful place. - [ ] depends on: #28342 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 614/0 Mathlib.lean,Mathlib/Data/Real/Sqrt.lean,Mathlib/Probability/Distributions/Fernique.lean,docs/references.bib 4 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-73436
1 day ago
1-73467
1 day ago
1-80746
1 day
28546 Sfgangloff
author:Sfgangloff
feat(SymbolicDynamics): basic setup of Zd, full shift, cylinders, pat… # Symbolic dynamics on groups: core API and entropy along finite shapes This PR adds a **group-generic** foundation for symbolic dynamics over an arbitrary group `G`, together with convenient specializations for `ℤ` and `ℤ^d`. ## Summary of additions - **Full shift and shift action** - `abbrev FullShift (A G) := G → A` (inherits product topology from the Π-type). - Right shift `shift g x` with convention `(shift g x) h = x (h * g)`. - **Cylinders and topology** - `cylinder U x : Set (G → A)` for finite `U : Finset G`. - Cylinders are open under `[DiscreteTopology A]`; with a finite alphabet they are also closed. - Equality with dependent products: `cylinder U x = Set.pi (↑U) (fun i => ({x i} : Set A))`, enabling use of the `Set.pi` API. - **Patterns, occurrences, and subshifts** - `Pattern A G` with finite `support : Finset G` and `data : support → A`. - `Pattern.occursIn p x g` (occurrence at translate `g`) and the expected shift law. - `forbids F` and `Subshift A G` (closed, shift-invariant subsets). - `FixedSupport A G U` with an equivalence to `(U → A)` to obtain finiteness. - **Language on finite shapes and counting** - `languageOn X U`, `languageCardOn X U`, and `patternCountOn Y U`. - **Entropy along a shape sequence** - `limsupAtTop` (as an `sInf` of eventual upper bounds). - `entropyAlong X F hF := limsup (log (patternCountOn X (F n) + 1) / |F n|)` for any nonempty finite shapes `F : ℕ → Finset G` (the `+ 1` avoids `log 0`). - **Specializations** - `IntShapes`: segments `[-n,n]` on `Multiplicative ℤ`, with `entropy_Z`. - `ZdShapes`: boxes `[-n,n]^d` on `ℤ^d` (as functions `Fin d → ℤ`), with `entropy_Zd`. ## Mathematical remarks - The API is **shape-parametric**: entropy is defined along user-provided finite shapes. - On **amenable** groups, using a **Følner** sequence yields a canonical value (Ornstein–Weiss). This PR does not assume amenability; the family of shapes is an explicit input. ## Motivation Provide a clean, reusable base for symbolic dynamics on groups in mathlib. ## Future work - Add a Følner predicate and prove shape-independence / limit existence on amenable groups. - Expand the `ℤ`/`ℤ^d` toolkit (alternative shapes, mixing, factors). - Develop 1D theory and, longer-term, multidimensional SFT results (e.g. along the lines of Hochman–Meyerovitch). new-contributor t-dynamics 516/0 Mathlib.lean,Mathlib/Dynamics/SymbolicDynamics/Basic.lean,Mathlib/Dynamics/SymbolicDynamics/EntropyFinitelyGenerated.lean 3 14 ['Sfgangloff', 'eric-wieser', 'github-actions', 'kckennylau', 'sgouezel'] nobody
1-72012
1 day ago
3-48285
3 days ago
3-48328
3 days
28511 YaelDillies
author:YaelDillies
feat(Finsupp): `congr!`-compatible version of `prod_congr` `congr!` doesn't like the `g1 x (f x)` appearing in the hypothesis of `Finsupp.prod_congr`: `f x` isn't a free variable. Note: A few proofs broke due to `simp` using `congr` lemmas internally. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
17/11 Mathlib/Algebra/BigOperators/Finsupp/Basic.lean,Mathlib/Algebra/Category/MonCat/Adjunctions.lean,Mathlib/Data/Finsupp/Multiset.lean,Mathlib/Data/Nat/Choose/Multinomial.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/LowDegree.lean 5 4 ['JovanGerb', 'YaelDillies', 'eric-wieser', 'github-actions'] nobody
1-68022
1 day ago
4-64045
4 days ago
4-64087
4 days
28575 YaelDillies
author:YaelDillies
feat: `IsOrderBornology` instances for `ℕ` and `ℤ` ... using a new constructor assuming `IsCompactIcc`. As a result, I could make all existing instances on concrete types into one-liners. --- As requested by @teorth. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import 33/44 Mathlib/Order/Bounds/Basic.lean,Mathlib/Topology/Bornology/Real.lean,Mathlib/Topology/Instances/Int.lean,Mathlib/Topology/Instances/Nat.lean,Mathlib/Topology/MetricSpace/Pseudo/Defs.lean,Mathlib/Topology/Order/Bornology.lean 6 1 ['github-actions'] nobody
1-66602
1 day ago
3-31421
3 days ago
3-31470
3 days
28100 themathqueen
author:themathqueen
feat(LinearAlgebra/Matrix): algebra automorphisms on matrices are inner For any algebra automorphism `f : Matrix n n R ≃ₐ[R] Matrix n n R`, there exists an invertible matrix `T` such that `f a = T * a * T⁻¹` for all `a`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
76/0 Mathlib/LinearAlgebra/Matrix/GeneralLinearGroup/Basic.lean 1 6 ['eric-wieser', 'github-actions', 'themathqueen'] Vierkantor
assignee:Vierkantor
1-66293
1 day ago
13-10099
13 days ago
13-12883
13 days
25832 xroblot
author:xroblot
feat(FieldTheory/LinearDisjoint): `trace` (resp. `norm`) and `algebraMap` commutes For `A` and `B` two linearly disjoint `R`-subalgebras in a commutative algebra `S` and `b` a `R`-basis of `B`, we construct a `A`-basis of `S = A ⊔ B` from `b` (and a similar construction using a `R`-basis of `A`). Then, we prove in this situation that `trace` commutes with `algebraMap`, that is: ```lean Algebra.trace A S (algebraMap B S x) = algebraMap R A (Algebra.trace R B x) ``` and a similar result for the norm. We also add a similar basis construction for `A` and `B` two linearly disjoint intermediate fields with the hypothesis that `A.toSubalgebra ⊔ B.toSubalgebra = ⊤`. This hypothesis is equivalent to `A ⊔ B = ⊤` in many cases (for example, one of the two extensions is algebraic over the base field) but not always. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import maintainer-merge t-algebra
label:t-algebra$
159/9 Mathlib/FieldTheory/LinearDisjoint.lean,Mathlib/RingTheory/LinearDisjoint.lean 2 47 ['acmepjz', 'chrisflav', 'github-actions', 'xroblot'] chrisflav
assignee:chrisflav
1-65594
1 day ago
1-66256
1 day ago
64-31236
64 days
25858 themathqueen
author:themathqueen
feat(RingTheory/Coalgebra/MulOpposite): coalgebra instance for MulOpposite Adding an instance for `Aᵐᵒᵖ` being an `R`-coalgebra when `A` is. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory maintainer-merge new-contributor 69/0 Mathlib.lean,Mathlib/LinearAlgebra/TensorProduct/Basic.lean,Mathlib/RingTheory/Coalgebra/MulOpposite.lean 3 6 ['chrisflav', 'github-actions'] chrisflav
assignee:chrisflav
1-65403
1 day ago
1-65403
1 day ago
67-48174
67 days
28117 RemyDegenne
author:RemyDegenne
feat(Probability): definitions of risk, Bayesian risk, Bayes risk, minimax risk This PR adds the basic definitions needed for decision theory (or statistical estimation): risk of an estimator with respect to a loss, a data-generating kernel and a prior on the parameter, Bayes risk, minimax risk. The file is placed in the Probability folder, in a new Decision folder (for decision theory), in a Risk subfolder. co-authored by: Lorenzo Luccioli @LorenzoLuccioli From the TestingLowerBounds project. --- This is the first part of #27579, which includes several results about risks, a definition of the DeGroot statistical information of an experiment, and as a special case a definition of the total variation distance between two probability measures. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 141/0 Mathlib.lean,Mathlib/MeasureTheory/Measure/Dirac.lean,Mathlib/Probability/Decision/Risk/Defs.lean 3 16 ['EtienneC30', 'RemyDegenne', 'github-actions', 'sgouezel'] EtienneC30
assignee:EtienneC30
1-63920
1 day ago
1-63920
1 day ago
10-8321
10 days
28526 xroblot
author:xroblot
feat(DedekindDomain): More instances Add more instances for the case of a the localisation of a tower of rings `R ⊆ S ⊆ T` localized at a prime ideal `P` of `R`. --- - [x] depends on: #28543 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 70/3 Mathlib/Algebra/Algebra/Tower.lean,Mathlib/RingTheory/DedekindDomain/Instances.lean 2 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-59668
1 day ago
1-60344
1 day ago
1-62083
1 day
28617 kckennylau
author:kckennylau
feat(AlgebraicGeometry): jointly surjective topology We define `jointlySurjectiveTopology` to have the same condition as `jointlySurjectivePretopology`, which is the new name of the former `surjectiveFamiliesPretopology`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-algebraic-geometry 48/3 Mathlib/AlgebraicGeometry/Sites/MorphismProperty.lean,Mathlib/CategoryTheory/Sites/Grothendieck.lean 2 6 ['chrisflav', 'github-actions', 'kckennylau'] chrisflav
assignee:chrisflav
1-59441
1 day ago
1-59791
1 day ago
2-11945
2 days
28349 kckennylau
author:kckennylau
feat(Meta): add notation for naming stacked polynomials This PR changes the notation for naming formal variables associated to recursive polynomial-like objects. Registration is done only once per each polynomial-like functor. Usage: ```lean #register_poly_vars "[" X "]" Polynomial Polynomial.C Polynomial.X #register_poly_vars "[" X, ... "]" MvPolynomial MvPolynomial.C MvPolynomial.X #name_poly_vars R[a,b][C] #name_poly_vars _[[x,y,z]] ``` `_[[x,y,z]]` allows for the hole to be substituted by any base ring, so `(x : R[[x,y,z]])` will make sense. --- I have not mass deployed the new syntax at every possible location, I plan to do that in a future PR following this. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 395/57 Counterexamples/CliffordAlgebraNotInjective.lean,Mathlib/Algebra/MvPolynomial/Basic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Basic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Projective/Basic.lean,Mathlib/Tactic/Ring/NamePolyVars.lean,MathlibTest/NamePolyVars.lean 6 11 ['eric-wieser', 'github-actions', 'kckennylau', 'plp127'] adamtopaz
assignee:adamtopaz
1-57932
1 day ago
7-44402
7 days ago
7-44451
7 days
27973 smmercuri
author:smmercuri
feat: the ring of integers of a `ℤₘ₀`-valued field is compact whenever it is a DVR and the residue field is finite This PR continues the work from #21844. Original PR: https://github.com/leanprover-community/mathlib4/pull/21844 large-import 54/2 Mathlib/RingTheory/Ideal/Quotient/Basic.lean,Mathlib/Topology/Algebra/Valued/WithZeroMulInt.lean 2 1 ['github-actions'] nobody
1-56438
1 day ago
8-36781
8 days ago
8-36796
8 days
28148 kckennylau
author:kckennylau
feat(Matrix): Simproc and Rw-proc for Matrix Transpose Co-authored by Aaron Liu. ```lean example : !![1, 2, 3; 4, 5, 6]ᵀ = !![1, 4; 2, 5; 3, 6] := by rw [transpose_of% 2 3] example : !![1, 2, 3; 4, 5, 6]ᵀ = !![1, 4; 2, 5; 3, 6] := by rw [transpose_of] example : !![1, 2, 3; 4, 5, 6]ᵀ = !![1, 4; 2, 5; 3, 6] := by simp only [matrix_transpose] ``` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 267/8 Mathlib.lean,Mathlib/Data/Matrix/Notation.lean,Mathlib/LinearAlgebra/UnitaryGroup.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/Matrix.lean,MathlibTest/Simproc/Matrix.lean,MathlibTest/matrix.lean,scripts/noshake.json 8 31 ['eric-wieser', 'github-actions', 'kckennylau', 'mathlib4-merge-conflict-bot', 'plp127'] eric-wieser
assignee:eric-wieser
1-54899
1 day ago
3-49438
3 days ago
9-50892
9 days
28615 kckennylau
author:kckennylau
feat(RingTheory): Standard open immersion We define the ring hom property `RingHom.IsStandardOpenImmersion` which is one that is a localization map away from some element. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory maintainer-merge 122/2 Mathlib.lean,Mathlib/RingTheory/Localization/Away/Basic.lean,Mathlib/RingTheory/Localization/BaseChange.lean,Mathlib/RingTheory/RingHom/OpenImmersion.lean 4 15 ['chrisflav', 'github-actions', 'kckennylau'] chrisflav
assignee:chrisflav
1-52929
1 day ago
1-52929
1 day ago
2-13022
2 days
26960 joelriou
author:joelriou
feat(AlgebraicTopology/ModelCategory): the lemma by K. S. Brown In a model category, any morphism `f : X ⟶ Y` between cofibrant objects can be factored as `i ≫ j` with `i` a cofibration and `j` a trivial fibration which has a section `s` that is a cofibration. In particular, if `f` is a weak equivalence, both `i` and `s` are trivial cofibrations. This has important consequences in homotopical algebra (e.g. construction of derived functors). --- - [x] depends on: #26171 - [x] depends on: #26958 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology t-category-theory 151/0 Mathlib.lean,Mathlib/AlgebraicTopology/ModelCategory/BrownLemma.lean 2 7 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mattrobball'] robin-carlier
assignee:robin-carlier
1-52837
1 day ago
9-31990
9 days ago
9-32413
9 days
28627 plp127
author:plp127
chore: rename `Set.surjective_onto_image` Rename `Set.surjective_onto_image` to `Set.imageFactorization_surjective`. This matches better with other theorems like `Set.restrictPreimage_surjective`. Also rename `Set.surjective_onto_range` similarly. I was looking on loogle today and noticed this one again, which doesn't fit any of the naming conventions. I decided to fix it this time. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 30/22 Mathlib/Algebra/Group/Subgroup/ZPowers/Lemmas.lean,Mathlib/Data/Finite/Card.lean,Mathlib/Data/Set/Countable.lean,Mathlib/Data/Set/Image.lean,Mathlib/Logic/Small/Set.lean,Mathlib/MeasureTheory/Constructions/Polish/Basic.lean,Mathlib/MeasureTheory/Function/StronglyMeasurable/AEStronglyMeasurable.lean,Mathlib/MeasureTheory/Function/StronglyMeasurable/Basic.lean,Mathlib/MeasureTheory/MeasurableSpace/Embedding.lean,Mathlib/Order/Filter/Finite.lean,Mathlib/Order/SupIndep.lean,Mathlib/RingTheory/AlgebraicIndependent/TranscendenceBasis.lean,Mathlib/RingTheory/Localization/AsSubring.lean,Mathlib/SetTheory/Cardinal/Basic.lean,Mathlib/SetTheory/Cardinal/Finite.lean,Mathlib/Topology/NoetherianSpace.lean 16 1 ['github-actions'] nobody
1-52791
1 day ago
2-5252
2 days ago
2-5294
2 days
28319 kim-em
author:kim-em
chore: scope the IsSimpleOrder -> Fintype instance I noticed these rarely useful instances firing while investigating a slow typeclass search. Doesn't seem to have much impact, but perhaps good to scope these anyway. 11/4 Mathlib/Order/Atoms/Finite.lean,Mathlib/RingTheory/FiniteLength.lean,Mathlib/RingTheory/SimpleModule/Basic.lean 3 14 ['eric-wieser', 'github-actions', 'kim-em', 'leanprover-bot', 'mattrobball'] nobody
1-50883
1 day ago
1-55218
1 day ago
8-3493
8 days
28614 kckennylau
author:kckennylau
feat(CategoryTheory): The finite pretopology on a category We define `CategoryTheory.Pretopology.finite`, the finite pretopology on a category, which consists of presieves that contain only finitely many arrows. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 120/0 Mathlib.lean,Mathlib/CategoryTheory/Sites/Finite.lean,Mathlib/CategoryTheory/Sites/Sieves.lean 3 16 ['chrisflav', 'github-actions', 'kckennylau'] chrisflav
assignee:chrisflav
1-49593
1 day ago
1-49642
1 day ago
2-13146
2 days
27321 kckennylau
author:kckennylau
feat(CategoryTheory): Colimit can be computed fiberwise We consider category `J` equipped with a functor `F : J ⥤ D` to a discrete category `D`. Then the colimit of any diagram `diagram : J ⥤ C` can be computed using the following algorithm: 1. For each `d : D`, compute the colimit of the restricted diagram `F.fiberIncl d ⋙ diagram`. 2. Take the coproduct of these colimits over all `d : D`. We call this "computing the colimit fiberwise". --- Zulip: [#Is there code for X? > over category via a functor](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/over.20category.20via.20a.20functor/with/529574191) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-category-theory 134/0 Mathlib.lean,Mathlib/CategoryTheory/FiberedCategory/Fiber.lean,Mathlib/CategoryTheory/Limits/Shapes/Fiberwise.lean 3 18 ['github-actions', 'kckennylau', 'robin-carlier'] nobody
1-47688
1 day ago
1-56459
1 day ago
12-84679
12 days
27963 ShreckYe
author:ShreckYe
feat(Algebra/GCDMonoid): add some theorems related to divisibility and `lcm` for both `GCDMonoid` and `Nat` While working on formalizing some math olympiad problems, I found that the theorem `dvd_lcm : p ∣ lcm a b ↔ p ∣ a ∨ p ∣ b` is missing in Mathlib. So I added this along with some other related theorems. These theorems are simlilar to those related to divisibility and multiplication (`dvd_mul` as compared to `dvd_lcm` for example), as commented in the doc strings. new-contributor t-algebra
label:t-algebra$
102/0 Mathlib.lean,Mathlib/Algebra/GCDMonoid/Basic.lean,Mathlib/Data/Nat/GCD/Basic.lean,Mathlib/Data/Nat/GCD/Prime.lean 4 28 ['Ruben-VandeVelde', 'ShreckYe', 'github-actions', 'themathqueen'] erdOne
assignee:erdOne
1-44383
1 day ago
1-46393
1 day ago
9-50038
9 days
28641 sun123zxy
author:sun123zxy
feat(RingTheory/Nakayama): add a version of Nakayama's lemma (stacks 00DV (8)) This PR adds a version of Nakayama's lemma from [Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) (8). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory new-contributor 18/2 Mathlib/RingTheory/Nakayama.lean 1 1 ['github-actions'] nobody
1-43416
1 day ago
1-43416
1 day ago
1-45041
1 day
28180 kckennylau
author:kckennylau
chore(Meta): clean up PiFin.mkLiteralQ Co-authored by Aaron Liu. This PR fixes the resulting type of `loop`, adds a docstring, and removes an unused variable. --- Zulip: [#PR reviews > #28148 Simproc for Matrix Transpose](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2328148.20Simproc.20for.20Matrix.20Transpose) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data maintainer-merge t-meta 7/4 Mathlib/Data/Fin/VecNotation.lean 1 23 ['JovanGerb', 'eric-wieser', 'github-actions', 'kckennylau', 'plp127'] nobody
1-39155
1 day ago
1-46577
1 day ago
4-40709
4 days
28317 kckennylau
author:kckennylau
feat(Algebra): more lemmas about units in ordered monoid --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
96/16 Mathlib/Algebra/Order/Monoid/Unbundled/Units.lean 1 22 ['YaelDillies', 'eric-wieser', 'github-actions', 'kckennylau'] nobody
1-38335
1 day ago
1-49052
1 day ago
2-2267
2 days
28639 ChrisHughes24
author:ChrisHughes24
feat(Nullstellensatz); Generalize nullstellensatz to use a different field for the polynomial ring --- This generalizes Nullstellensatz to Wikipedia's statement of the theorem, where there are two fields and one is algebraically closed. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 88/91 Mathlib/FieldTheory/AxGrothendieck.lean,Mathlib/ModelTheory/Algebra/Ring/Definability.lean,Mathlib/RingTheory/Nullstellensatz.lean 3 1 ['github-actions'] nobody
1-36763
1 day ago
1-47038
1 day ago
1-47022
1 day
28655 YaelDillies
author:YaelDillies
CI: list the projects I maintain I've sorted the repos in alphabetical order, because I found it became difficult to track which ones I had already added. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) CI 88/22 scripts/downstream_repos.yml 1 1 ['github-actions'] nobody
1-34255
1 day ago
1-34266
1 day ago
1-34308
1 day
28653 strihanje01
author:strihanje01
feat(Combinatorics/Additive/Convolution): convolution map add convolution of finite subsets of a group --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 97/0 Mathlib.lean,Mathlib/Combinatorics/Additive/Convolution.lean 2 2 ['github-actions', 'strihanje01'] nobody
1-32993
1 day ago
1-35564
1 day ago
1-35629
1 day
26640 euprunin
author:euprunin
chore(Data): golf `Data/` using `grind` t-data 12/87 Mathlib/Data/EReal/Operations.lean,Mathlib/Data/List/Cycle.lean,Mathlib/Data/List/Induction.lean,Mathlib/Data/List/Nodup.lean,Mathlib/Data/List/Permutation.lean,Mathlib/Data/List/Sigma.lean,Mathlib/Data/PEquiv.lean,Mathlib/Data/PNat/Xgcd.lean,Mathlib/Data/Prod/Lex.lean,Mathlib/Data/Seq/Parallel.lean,Mathlib/Data/Set/Lattice.lean 11 21 ['euprunin', 'github-actions', 'grunweg', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot'] nobody
1-32993
1 day ago
1-32994
1 day ago
49-3611
49 days
26923 oliver-butterley
author:oliver-butterley
feat(Dynamics/BirkhoffSum): add the pointwise ergodic theorem (Birkhoff's) The Pointwise Ergodic Theorem, also known as Birkhoff's Ergodic Theorem. Co-authored-by: Lua Viana Reis - [x] depends on: #26074 - [x] depends on: #26807 - [x] depends on: #26810 - [x] depends on: #26840 - [x] depends on: #26842 - [x] depends on: #26848 - [x] depends on: #26851 - [x] depends on: #26852 - [x] depends on: #26853 - [x] depends on: #27008 Zulip: [PR thread](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2326923.20The.20pointwise.20ergodic.20theorem.20.28Birkhoff's.29/with/527835158) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-dynamics 401/0 Mathlib.lean,Mathlib/Dynamics/BirkhoffSum/Pointwise.lean 2 6 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-31774
1 day ago
2-17526
2 days ago
2-18524
2 days
25836 jt496
author:jt496
feat(SimpleGraph/FiveWheelLike): add the Andrásfai-Erdős-Sós theorem Add the Andrásfai-Erdős-Sós theorem `colorable_of_cliqueFree_lt_minDegree` which says that an `r + 1`-cliquefree graph `G` with sufficiently large minimum degree is `r`-colorable. Co-authored-by: Lian Bremner Tattersall --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #25313.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/25313* large-import t-combinatorics 308/4 Mathlib/Combinatorics/SimpleGraph/FiveWheelLike.lean 1 3 ['YaelDillies', 'github-actions', 'jt496'] YaelDillies
assignee:YaelDillies
1-25585
1 day ago
1-34171
1 day ago
50-40921
50 days
28661 harahu
author:harahu
doc(MeasureTheory): Miscellaneous typo fixes --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 22/22 Mathlib/MeasureTheory/Function/LpSeminorm/Basic.lean,Mathlib/MeasureTheory/Function/LpSpace/DomAct/Continuous.lean,Mathlib/MeasureTheory/Integral/Bochner/L1.lean,Mathlib/MeasureTheory/Integral/CircleAverage.lean,Mathlib/MeasureTheory/Integral/CircleIntegral.lean,Mathlib/MeasureTheory/Integral/IntervalIntegral/Basic.lean,Mathlib/MeasureTheory/Integral/IntervalIntegral/FundThmCalculus.lean,Mathlib/MeasureTheory/Integral/IntervalIntegral/Periodic.lean,Mathlib/MeasureTheory/MeasurableSpace/EventuallyMeasurable.lean,Mathlib/MeasureTheory/MeasurableSpace/Invariants.lean,Mathlib/MeasureTheory/Measure/Count.lean,Mathlib/MeasureTheory/Measure/Lebesgue/VolumeOfBalls.lean,Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean,Mathlib/MeasureTheory/Measure/SeparableMeasure.lean,Mathlib/MeasureTheory/Measure/WithDensityFinite.lean 15 4 ['github-actions', 'harahu'] nobody
1-19967
1 day ago
1-20291
1 day ago
1-20334
1 day
28552 loefflerd
author:loefflerd
feat(Compactification/OnePoint): classify GL2 elements by fixed points Classify 2x2 matrices over R as elliptic, parabolic or hyperbolic and describe their fixed points. --- Carved off from the larger WIP PR #26651. - [x] depends on: #26811 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra
label:t-algebra$
320/7 Mathlib.lean,Mathlib/LinearAlgebra/Matrix/GeneralLinearGroup/Basic.lean,Mathlib/LinearAlgebra/Matrix/GeneralLinearGroup/FinTwo.lean,Mathlib/Topology/Compactification/OnePoint/ProjectiveLine.lean 4 11 ['CBirkbeck', 'github-actions', 'loefflerd', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-14820
1 day ago
1-26629
1 day ago
1-41389
1 day
28553 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/Positive): `A.toEuclideanLin.IsPositive` iff `A.PosSemidef` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 16/0 Mathlib/Analysis/InnerProductSpace/Positive.lean,Mathlib/LinearAlgebra/Matrix/Hermitian.lean 2 2 ['github-actions', 'mathlib4-merge-conflict-bot'] nobody
1-14185
1 day ago
1-14208
1 day ago
3-36136
3 days
28549 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/Positive): `LinearIsometryEquiv ∘ T ∘ LinearIsometryEquiv.symm` is positive iff `T` is --- - [x] depends on: #28548 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis easy 8/0 Mathlib/Analysis/InnerProductSpace/Positive.lean 1 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-14139
1 day ago
1-14161
1 day ago
1-16815
1 day
28316 eric-wieser
author:eric-wieser
feat(Tactic/NormNum): better trace nodes Comparing the infoview on the first example in the test file | Before | After | |---|---| | image | image| In the after version, the extension names are all clickable. Similar to #21450. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 138/5 Mathlib.lean,Mathlib/Tactic/NormNum/Core.lean,Mathlib/Util/Trace.lean,MathlibTest/norm_num_trace.lean 4 6 ['eric-wieser', 'github-actions', 'leanprover-bot', 'plp127'] nobody
1-9988
1 day ago
8-14569
8 days ago
8-14558
8 days
28125 nonisomorphiclinearmap
author:nonisomorphiclinearmap
feat(Combinatorics): basic definition of simplicial complexes This PR introduces the basic definition of a finite (abstract) simplicial complex, located in Mathlib/Combinatorics/SimplicialComplex/Basic.lean. --- This is our first contribution to mathlib. This work was done as part of the Fields Institute Summer Undergraduate Program on formalization in topological combinatorics. Eventually, we aim to formalize Lovasz's proof of the Kneser Conjecture and this is a small stepping stone in that direction. Some other commits will shortly depend on this one. We would like to acknowledge the Fields Institute for Research in Mathematical Sciences for their sponsorship. We would also like to thank our supervisors, Professor Chris Kapulkin and Mr. Daniel Carranza, for their guidance and support throughout this project. We would also like to thank our group members Tom Lindquist and Quang Minh Nguyen for our fruitful discussions. new-contributor t-combinatorics 374/0 Mathlib.lean,Mathlib/Combinatorics/SimplicialComplex/Basic.lean,Mathlib/Combinatorics/SimplicialComplex/Category.lean,Mathlib/Combinatorics/SimplicialComplex/FacePoset.lean,Mathlib/Combinatorics/SimplicialComplex/Hom.lean 5 1 ['github-actions'] awainverse
assignee:awainverse
1-6506
1 day ago
12-24975
12 days ago
12-25020
12 days
28153 kckennylau
author:kckennylau
feat(Simproc): Simproc for explicit diagonal matrices ```lean example : (diagonal ![37, -1] : Matrix (Fin 2) (Fin 2) ℤ) = !![37, 0; 0, -1] := by simp ``` --- Shares code with #28148. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 114/0 Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/Matrix.lean,scripts/noshake.json 4 1 ['github-actions'] alexjbest
assignee:alexjbest
1-6504
1 day ago
11-31246
11 days ago
11-31297
11 days
28186 Sebi-Kumar
author:Sebi-Kumar
feat(Topology/Homotopy/Path): Add IsEquiv instance for Path.Homotopic Add `instance : IsEquiv (Path x₀ x₁) Homotopic` to the library. Allow use of lemmas like `of_eq` when proving two paths are homotopic. --- To provide additional context, I am relatively new to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario and supervised by Chris Kapulkin and Daniel Carranza. My goal is to prove that the `n`-sphere is simply connected for `n > 1`. Also, I am not super familiar with `IsEquiv` and when it should/shouldn't be used. I just wanted to use a lemma like `Path.Homotopic.of_eq` at one point while working on my code, and thought this was the best way to add such a result to the library. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-topology 5/0 Mathlib/Topology/Homotopy/Path.lean 1 4 ['Sebi-Kumar', 'github-actions', 'kckennylau'] PatrickMassot
assignee:PatrickMassot
1-6503
1 day ago
10-37833
10 days ago
10-37881
10 days
28174 YaelDillies
author:YaelDillies
feat: torsion-free modules Provide some very minimal API for torsion-free modules. This is mostly to agree on the definition. We can't add much further API before refactoring `Algebra.Module.Torsion` to have imports as light as `NoZeroSMulDivisors` and making `Module.IsTorsion` a class. From ClassFieldTheory --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) CFT t-algebra
label:t-algebra$
43/1 Mathlib/Algebra/Module/Torsion.lean 1 10 ['YaelDillies', 'github-actions', 'kckennylau'] jcommelin
assignee:jcommelin
1-6503
1 day ago
10-71517
10 days ago
10-71517
10 days
28234 alreadydone
author:alreadydone
chore(AlgebraicTopology): clean up FundamentalGroupoid + Extract `FundamentalGroupoid.map (f : C(X, Y)) : FundamentalGroupoid X ⥤ FundamentalGroupoid Y` from `fundamentalGroupoidFunctor : TopCat ⥤ CategoryTheory.Grpd` + Define `FundamentalGroup.map (f : C(X, Y)) (x : X) : FundamentalGroup X x →* FundamentalGroup Y (f x)` and `mapOfEq : FundamentalGroup X x →* FundamentalGroup Y y` that takes an assumption `f x = y`. + Redefine `FundamentalGroup` to be `End` rather than `Aut`: since `FundamentalGroupoid` is a groupoid, `End` already has a group structure. This requires fixing some proofs about `HomotopyGroup`s, so we take this opportunity to golf a few proofs and replace `=>` by `↦`. + Golf within the file FundamentalGroupoid/Basic. + Generalize `toArrow` up to `fromPath` in `FundamentalGroupoid/FundamentalGroup` from `X : TopCat` to `[TopologicalSpace X]`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology 104/141 Mathlib/AlgebraicTopology/FundamentalGroupoid/Basic.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/FundamentalGroup.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/InducedMaps.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/SimplyConnected.lean,Mathlib/CategoryTheory/Groupoid.lean,Mathlib/Topology/Covering.lean,Mathlib/Topology/Homotopy/HomotopyGroup.lean,Mathlib/Topology/Homotopy/Product.lean 8 1 ['github-actions'] mattrobball
assignee:mattrobball
1-6501
1 day ago
9-50495
9 days ago
9-50479
9 days
28284 sgouezel
author:sgouezel
feat: finite product of probability measures We copy the API for the binary product of probability measures. Notably, we show that a finite product of probability measures depends continuously on the factors. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 126/0 Mathlib.lean,Mathlib/MeasureTheory/Measure/FiniteMeasurePi.lean 2 1 ['github-actions'] urkud
assignee:urkud
1-6500
1 day ago
8-58583
8 days ago
8-58630
8 days
28290 eric-wieser
author:eric-wieser
refactor(Tactic/Linarith): switch to using AtomM in natToInt This seems to result in a slight behavior change; the equations now end up being handled in `linarith` in the order they appear in the context, rather than in the order that `Expr.lt` sorts them. This matters when unifying metavariables, and sorting with `Expr.lt` increases the chance of non-determinism (as this can include metavariable names). This follows on from #14586; at the time I did not contribute it as I did not have a test-case that changed behavior. The metavariable assignment behavior here still feels pretty random ([#mathlib4 > Adding an extra hypothesis breaks linarith @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Adding.20an.20extra.20hypothesis.20breaks.20linarith/near/533973472)), but I think this change is probably still good. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 46/5 Mathlib/Tactic/Linarith/Preprocessing.lean,MathlibTest/linarith.lean 2 1 ['github-actions'] robertylewis
assignee:robertylewis
1-6499
1 day ago
8-48895
8 days ago
8-48947
8 days
26219 Thmoas-Guan
author:Thmoas-Guan
feat(RingTheory/KrullDimension): Krull Dimension of quotient regular sequence We show that if M is a finite module over a Noetherian local ring R, [r₁, …, rₙ] is an M-sequence, then dim M⧸(r₁, …, rₙ)M + n = dim M. Co-authored-by: Yongle Hu @mbkybky --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 241/15 Mathlib.lean,Mathlib/LinearAlgebra/Quotient/Basic.lean,Mathlib/RingTheory/Ideal/MinimalPrime/Localization.lean,Mathlib/RingTheory/Jacobson/Ideal.lean,Mathlib/RingTheory/KrullDimension/Module.lean,Mathlib/RingTheory/KrullDimension/Regular.lean,Mathlib/RingTheory/LocalRing/MaximalIdeal/Basic.lean,Mathlib/RingTheory/Nakayama.lean,Mathlib/RingTheory/Support.lean 9 n/a ['Thmoas-Guan', 'chrisflav', 'github-actions', 'leanprover-community-bot-assistant', 'mbkybky'] chrisflav
assignee:chrisflav
1-1179
1 day ago
unknown
unknown
28401 themathqueen
author:themathqueen
chore(LinearAlgebra/Matrix/HermitianFunctionalCalculus): moving and renaming stuff This moves the results about `spectrum` from `Matrix/HermitianFunctionalCalculus` to `Matrix/Spectrum` so that we can use them in other files. This also renames `Matrix.IsHermitian.eigenvalues_eq_spectrum_real`, as it should be `Matrix.IsHermitian.spectrum_real_eq_range_eigenvalues` since it states: `spectrum ℝ A = Set.range hA.eigenvalues` and not the other way around. Also added a result for what the `𝕜`-spectrum of a Hermitian matrix is. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
26/18 Mathlib/LinearAlgebra/Matrix/HermitianFunctionalCalculus.lean,Mathlib/LinearAlgebra/Matrix/Spectrum.lean 2 1 ['JonBannon', 'github-actions'] nobody
0-76395
21 hours ago
4-19274
4 days ago
6-52028
6 days
28344 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/PiL2): `(innerSL _ x).toMatrix` and `(toSpanSingleton _ x).toMatrix` In [bra-ket notation](https://en.wikipedia.org/wiki/Bra–ket_notation), this says that the matrix of `|x⟩` given by basis `b` is the column matrix `b.repr x`, and that the matrix of `⟨x|` given by orthonormal basis `b` is the row matrix `star (b.repr x)`, where `|x⟩ = toSpanSingleton _ x` and `⟨x| = innerSL _ x` So then the matrix of a rank-one operator `|x⟩⟨y|` given by orthonormal basis `b₂` and basis `b` is equal to `vecMulVec (b.repr x) (star (b₂.repr y))`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 35/0 Mathlib/Analysis/InnerProductSpace/PiL2.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/Mul.lean,Mathlib/Data/Matrix/RowCol.lean,Mathlib/LinearAlgebra/Basis/Basic.lean,Mathlib/LinearAlgebra/Matrix/ToLin.lean 5 20 ['eric-wieser', 'github-actions', 'themathqueen'] nobody
0-73412
20 hours ago
1-46542
1 day ago
7-48681
7 days
27162 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/Positive): `U.starProjection ≤ V.starProjection` iff `U ≤ V` For symmetric projections `p` and `q`, `p ≤ q` iff `q ∘ p = p`, so then a corollary is: `U.starProjection ≤ V.starProjection` iff `U ≤ V`. --- - [x] depends on: #25910 - [x] depends on: #27619 - [x] depends on: #27642 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 38/0 Mathlib/Analysis/InnerProductSpace/Positive.lean,Mathlib/Analysis/InnerProductSpace/Symmetric.lean 2 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
0-72981
20 hours ago
1-14451
1 day ago
5-81281
5 days
28630 Antidite
author:Antidite
feat(Archive/Imo): right isosceles configuration in the complex plane feat(Archive/Imo): right isosceles configuration in the complex plane This adds `Archive/Imo/Imo1975Q3.lean`, formalizing a triangle configuration with points A=0, B=1, C=z and auxiliary points R, P, Q built via complex rotations and sine-based scale factors. Main results: * `angle_and_distance`: ∠QRP = π/2 and dist Q R = dist R P. * Key identity `QRP_rot90`: (Q z).z − R.z = e^{iπ/2} · ((P z).z − R.z). Design/Style: * Minimal imports; module docstring; semantic lemma names; all definitions and theorems live under the namespace `IMO.TriangleConfig`. Moves: - (none) Deletions: - (none) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) IMO new-contributor 196/0 Archive.lean,Archive/Imo/Imo1975Q3.lean 2 32 ['Antidite', 'LLaurance', 'github-actions'] nobody
0-71640
19 hours ago
1-63864
1 day ago
1-63909
1 day
27937 madvorak
author:madvorak
feat(Logic/Basic): `congr_heq₂` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-logic 6/0 Mathlib/Logic/Basic.lean 1 7 ['YaelDillies', 'github-actions', 'madvorak', 'vihdzp'] fpvandoorn
assignee:fpvandoorn
0-69646
19 hours ago
0-70630
19 hours ago
16-45557
16 days
28681 euprunin
author:euprunin
chore(Data/Finset): golf entire `diag_union_offDiag`, `erase_right_comm`, `univ_filter_mem_range` and `powersetCard_map` using `grind` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data 4/12 Mathlib/Data/Finset/BooleanAlgebra.lean,Mathlib/Data/Finset/Erase.lean,Mathlib/Data/Finset/Powerset.lean,Mathlib/Data/Finset/Prod.lean 4 1 ['github-actions'] nobody
0-67782
18 hours ago
0-68728
19 hours ago
0-68769
19 hours
28650 Vierkantor
author:Vierkantor
chore(Analysis): address a lot of porting notes Go through all porting notes in the Analysis folder and address those with an obvious resolution. A few won'tfixes where Lean 4 is stricter about unfolding or where `@[simp]` attributes were already wrong; otherwise most are easily resolved. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt t-analysis 69/134 Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/Uniqueness.lean,Mathlib/Analysis/Asymptotics/Lemmas.lean,Mathlib/Analysis/BoxIntegral/Partition/Basic.lean,Mathlib/Analysis/BoxIntegral/Partition/Tagged.lean,Mathlib/Analysis/CStarAlgebra/Matrix.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/FDeriv/Prod.lean,Mathlib/Analysis/Calculus/Implicit.lean,Mathlib/Analysis/Convex/Body.lean,Mathlib/Analysis/Convex/Gauge.lean,Mathlib/Analysis/Convex/Intrinsic.lean,Mathlib/Analysis/Convex/SimplicialComplex/Basic.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/InnerProductSpace/Adjoint.lean,Mathlib/Analysis/InnerProductSpace/Orientation.lean,Mathlib/Analysis/InnerProductSpace/PiL2.lean,Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean,Mathlib/Analysis/InnerProductSpace/Projection/FiniteDimensional.lean,Mathlib/Analysis/InnerProductSpace/TwoDim.lean,Mathlib/Analysis/Matrix.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Analysis/Normed/Group/AddTorsor.lean,Mathlib/Analysis/Normed/Group/Basic.lean,Mathlib/Analysis/Normed/Group/Quotient.lean,Mathlib/Analysis/Normed/Group/Rat.lean,Mathlib/Analysis/Normed/Group/SemiNormedGrp/Kernels.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Analysis/Normed/Module/Basic.lean,Mathlib/Analysis/Normed/Operator/Banach.lean,Mathlib/Analysis/Normed/Operator/BoundedLinearMaps.lean,Mathlib/Analysis/Normed/Ring/Lemmas.lean,Mathlib/Analysis/Normed/Unbundled/RingSeminorm.lean,Mathlib/Analysis/NormedSpace/Extend.lean,Mathlib/Analysis/NormedSpace/MStructure.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/Completeness.lean,Mathlib/Analysis/Seminorm.lean,Mathlib/Analysis/SpecialFunctions/PolarCoord.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean,Mathlib/LinearAlgebra/FiniteDimensional/Defs.lean 41 11 ['Vierkantor', 'github-actions'] nobody
0-65425
18 hours ago
1-36338
1 day ago
1-36324
1 day
19872 YaelDillies
author:YaelDillies
chore(GroupTheory/Index): rename `relindex` to `relIndex` Zulip discussion about renaming: [#PR reviews > #19872 rename relindex to relIndex @ 💬](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2319872.20rename.20relindex.20to.20relIndex/near/515908054) --- - [x] depends on: #24044 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) FLT maintainer-merge t-algebra
label:t-algebra$
288/182 Mathlib/Algebra/Module/ZLattice/Covolume.lean,Mathlib/FieldTheory/Relrank.lean,Mathlib/GroupTheory/Commensurable.lean,Mathlib/GroupTheory/CosetCover.lean,Mathlib/GroupTheory/GroupAction/Blocks.lean,Mathlib/GroupTheory/Index.lean,Mathlib/GroupTheory/IndexNormal.lean,Mathlib/GroupTheory/PGroup.lean,Mathlib/GroupTheory/Schreier.lean,Mathlib/GroupTheory/SchurZassenhaus.lean,Mathlib/GroupTheory/Sylow.lean,Mathlib/GroupTheory/Transfer.lean,Mathlib/LinearAlgebra/FreeModule/Finite/CardQuotient.lean,Mathlib/NumberTheory/ModularForms/CongruenceSubgroups.lean,Mathlib/NumberTheory/NumberField/Discriminant/Different.lean,Mathlib/NumberTheory/NumberField/Units/Regulator.lean,Mathlib/RingTheory/Ideal/Quotient/Index.lean 17 27 ['Ruben-VandeVelde', 'TwoFX', 'YaelDillies', 'alreadydone', 'eric-wieser', 'github-actions', 'kbuzzard', 'leanprover-community-bot-assistant', 'loefflerd', 'madvorak', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'tb65536'] nobody
0-65299
18 hours ago
7-60306
7 days ago
200-73820
200 days
27644 themathqueen
author:themathqueen
chore(LinearAlgebra/Projection): deprecating `subtype ∘ linearProjOfIsCompl` in favor of `IsCompl.projection` This deprecates all instances of `U.subtype ∘ U.linearProjOfIsCompl V hUV` and `(U.linearProjOfIsCompl V hUV x : E)` in favor of `hUV.projection` and `hUV.projection x` respectively in `LinearAlgebra/Projection` and other files. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
45/30 Mathlib/Algebra/Lie/LieTheorem.lean,Mathlib/Analysis/InnerProductSpace/Projection/Submodule.lean,Mathlib/Analysis/InnerProductSpace/Symmetric.lean,Mathlib/LinearAlgebra/Projection.lean 4 7 ['github-actions', 'j-loreaux', 'themathqueen'] nobody
0-64894
18 hours ago
1-11206
1 day ago
22-19918
22 days
27825 yonggyuchoimath
author:yonggyuchoimath
feat(RingTheory/Ideal/Height): sup of ideal heights equals Krull dimension Adds `Ideal.sup_height_eq_ringKrullDim` and `Ideal.sup_primeHeight_eq_ringKrullDim`. They show the suprema of heights of ideals / prime ideals are equal to the Krull dimension, when the ring is nonzero. t-ring-theory new-contributor 53/0 Mathlib/RingTheory/Ideal/Height.lean 1 5 ['github-actions', 'kbuzzard', 'yonggyuchoimath'] kbuzzard
assignee:kbuzzard
0-62590
17 hours ago
16-33063
16 days ago
19-48151
19 days
28669 kckennylau
author:kckennylau
chore: clean up some proofs about locally compact valuation --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 40/25 Mathlib/RingTheory/Valuation/Archimedean.lean,Mathlib/Topology/Algebra/Valued/LocallyCompact.lean 2 3 ['github-actions', 'kckennylau', 'pechersky'] nobody
0-62480
17 hours ago
1-5051
1 day ago
1-5035
1 day
28663 harahu
author:harahu
doc(Tactic): hyphenate "right-hand" and "left-hand" where appropriate --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-meta 18/18 Mathlib/Tactic/ApplyCongr.lean,Mathlib/Tactic/CC/Addition.lean,Mathlib/Tactic/CC/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Slice.lean,Mathlib/Tactic/LinearCombination'.lean,Mathlib/Tactic/LinearCombination.lean,Mathlib/Tactic/SetLike.lean,Mathlib/Tactic/Widget/LibraryRewrite.lean 8 3 ['github-actions', 'grunweg'] nobody
0-61047
16 hours ago
0-61177
16 hours ago
1-17302
1 day
26827 pechersky
author:pechersky
feat(Analysis/Normed/ValuativeRel): helper instance for NormedField --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) - [x] depends on: #26713 - [x] depends on: #26826 t-algebra t-analysis t-number-theory
label:t-algebra$
199/20 Mathlib.lean,Mathlib/Analysis/Normed/ValuativeRel.lean,Mathlib/Topology/Algebra/Valued/ValuativeRel.lean 3 17 ['ADedecker', 'adamtopaz', 'github-actions', 'kbuzzard', 'kckennylau', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'pechersky'] kbuzzard
assignee:kbuzzard
0-59747
16 hours ago
7-39393
7 days ago
44-18717
44 days
28176 vihdzp
author:vihdzp
chore: add `simp` attribute to `abs_mul` See [Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/abs_mul.20simp). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
3/3 Mathlib/Algebra/Order/Ring/Abs.lean,Mathlib/NumberTheory/Ostrowski.lean 2 4 ['github-actions', 'kbuzzard', 'leanprover-bot'] jcommelin
assignee:jcommelin
0-58764
16 hours ago
10-16258
10 days ago
10-55377
10 days
27837 CBirkbeck
author:CBirkbeck
feat(NumberTheory/Divisors): add divisorAntidiagonal equivalence. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-number-theory 1/0 Mathlib.lean 1 10 ['CBirkbeck', 'github-actions', 'riccardobrasca', 'tb65536'] tb65536
assignee:tb65536
0-55070
15 hours ago
9-13892
9 days ago
17-42694
17 days
28691 or4nge19
author:or4nge19
feat(Probability/Invariance):Reversibility/DetailedBalance Add reversibility (detailed balance) for Markov kernels and show it implies invariance --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-measure-probability 25/1 Mathlib/Probability/Kernel/Invariance.lean 1 1 ['github-actions'] nobody
0-54042
15 hours ago
0-57187
15 hours ago
0-57230
15 hours
28142 YaelDillies
author:YaelDillies
refactor: state hypotheses of `BialgHom.ofAlgHom` as equalities of `AlgHom`s ... as opposed to equalities of `LinearMap`s, and similarly for `BialgEquiv.ofAlgEquiv`. This way, dedicated `ext` lemmas can fire. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory toric maintainer-merge 34/19 Mathlib/Algebra/Algebra/Equiv.lean,Mathlib/RingTheory/Bialgebra/Equiv.lean,Mathlib/RingTheory/Bialgebra/Hom.lean 3 5 ['YaelDillies', 'chrisflav', 'github-actions'] chrisflav
assignee:chrisflav
0-51353
14 hours ago
0-60583
16 hours ago
11-69639
11 days
28682 Thmoas-Guan
author:Thmoas-Guan
feat(RingTheory): definition of regular local ring In this PR, we give the definition of regular local ring. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 136/0 Mathlib.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/RingTheory/RegularLocalRing.lean 3 23 ['Thmoas-Guan', 'chrisflav', 'github-actions', 'mbkybky'] chrisflav
assignee:chrisflav
0-50885
14 hours ago
0-63739
17 hours ago
0-1866
31 minutes
27511 Nebula691
author:Nebula691
feat(Algebra/QuadraticAlgebra) : Define Quadratic Algebra Co-authored-by: Edison Xie Co-authored-by: Kenny Lau --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
419/0 Mathlib.lean,Mathlib/Algebra/QuadraticAlgebra.lean 2 70 ['Whysoserioushah', 'YaelDillies', 'eric-wieser', 'github-actions', 'kckennylau'] eric-wieser
assignee:eric-wieser
0-50204
13 hours ago
25-40803
25 days ago
25-40848
25 days
28642 chrisflav
author:chrisflav
chore(RingTheory/Localization/Algebra): generalize universes and to `CommSemiring` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory 23/29 Mathlib/Algebra/Algebra/Hom.lean,Mathlib/RingTheory/Localization/Algebra.lean,Mathlib/RingTheory/Localization/Basic.lean 3 1 ['github-actions'] nobody
0-47021
13 hours ago
0-47028
13 hours ago
1-41596
1 day
27785 staroperator
author:staroperator
chore(Algebra/Group/Submonoid): golf `Nat.addSubmonoidClosure_one` using `simp` This should improve the proof readability. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-algebra
label:t-algebra$
8/15 Mathlib/Algebra/Group/Submonoid/Membership.lean,Mathlib/Algebra/Group/Submonoid/Operations.lean,Mathlib/Algebra/Order/Star/Basic.lean 3 8 ['github-actions', 'joneugster', 'leanprover-bot', 'mathlib4-merge-conflict-bot', 'staroperator'] joneugster
assignee:joneugster
0-46740
12 hours ago
0-46740
12 hours ago
19-30633
19 days
27936 alreadydone
author:alreadydone
feat(Algebra): additivize Dvd and Prime `Prime` can't be directly additivized, so we introduce `Preprime`, which drops the `≠ 0` condition, and additivize it to `AddPrime`. To show that `Preprime` is a reasonable definition, we show its connection to `Irreducible` under `IsPrimal` and `IsRegular` conditions. We also show that an element in a product monoid is preprime iff one component is a unit and the other is preprime, and the same with `Preprime` replaced by `Irreducible`. Also additivize `IsPrimal`, `IsRelPrime` and `DecompositionMonoid`. The motivation is that the primality of `single g 1` in `AddMonoidAlgebra k G` is connected to the primality of `g` in `G`. --- I've checked [all 29 files](https://github.com/search?q=repo%3Aleanprover-community%2Fmathlib4%20%E2%88%A3%20to_additive&type=code) containing the `∣` symbol and the `to_additive` attribute and fixed the wrongly translated (`dvd` to `addDvd`) names. TODO: connect (Add)Dvd to [ExistsMul/AddOfLE](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Algebra/Order/Monoid/Unbundled/ExistsOfLE.html#ExistsMulOfLE) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
401/191 Mathlib.lean,Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean,Mathlib/Algebra/BigOperators/Group/Finset/Defs.lean,Mathlib/Algebra/BigOperators/Group/Finset/Piecewise.lean,Mathlib/Algebra/BigOperators/Group/List/Lemmas.lean,Mathlib/Algebra/BigOperators/Group/Multiset/Basic.lean,Mathlib/Algebra/Divisibility/Basic.lean,Mathlib/Algebra/Divisibility/Finite.lean,Mathlib/Algebra/Divisibility/Hom.lean,Mathlib/Algebra/Divisibility/Prod.lean,Mathlib/Algebra/Divisibility/Units.lean,Mathlib/Algebra/Group/Action/Pointwise/Finset.lean,Mathlib/Algebra/Group/Prod.lean,Mathlib/Algebra/GroupWithZero/Associated.lean,Mathlib/Algebra/Notation/Defs.lean,Mathlib/Algebra/Prime/Defs.lean,Mathlib/Algebra/Prime/Lemmas.lean,Mathlib/Algebra/Prime/Prod.lean,Mathlib/Data/Nat/Prime/Defs.lean,Mathlib/Dynamics/PeriodicPts/Defs.lean,Mathlib/GroupTheory/Coset/Card.lean,Mathlib/GroupTheory/Exponent.lean,Mathlib/GroupTheory/GroupAction/Blocks.lean,Mathlib/GroupTheory/GroupAction/Period.lean,Mathlib/GroupTheory/Index.lean,Mathlib/GroupTheory/OrderOfElement.lean,Mathlib/GroupTheory/Perm/Cycle/Type.lean,Mathlib/GroupTheory/Schreier.lean,Mathlib/GroupTheory/SpecificGroups/Cyclic.lean,Mathlib/Tactic/ToAdditive/GuessName.lean 30 4 ['github-actions', 'mathlib4-merge-conflict-bot'] nobody
0-46657
12 hours ago
1-14143
1 day ago
14-84364
14 days
26330 Timeroot
author:Timeroot
"Junk value" test file This PR continues the work from #25173. Original PR: https://github.com/leanprover-community/mathlib4/pull/25173 t-data 360/0 MathlibTest/Junk.lean 1 3 ['Timeroot', 'github-actions', 'leanprover-community-bot-assistant'] nobody
0-44502
12 hours ago
41-22984
1 month ago
56-71867
56 days
27889 astrainfinita
author:astrainfinita
chore(RingTheory/(Mv)PowerSeries): use implicit parameters in `monomial`, `coeff`, `map`, `C`, and `constantCoeff` Just like what we did for `Polynomial`, `MvPolynomial`, and `HahnSeries`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-algebra
label:t-algebra$
555/572 Archive/Wiedijk100Theorems/Partition.lean,Mathlib/NumberTheory/Bernoulli.lean,Mathlib/NumberTheory/ModularForms/QExpansion.lean,Mathlib/RingTheory/HahnSeries/HEval.lean,Mathlib/RingTheory/HahnSeries/PowerSeries.lean,Mathlib/RingTheory/KrullDimension/NonZeroDivisors.lean,Mathlib/RingTheory/LaurentSeries.lean,Mathlib/RingTheory/MvPowerSeries/Basic.lean,Mathlib/RingTheory/MvPowerSeries/Evaluation.lean,Mathlib/RingTheory/MvPowerSeries/Inverse.lean,Mathlib/RingTheory/MvPowerSeries/LexOrder.lean,Mathlib/RingTheory/MvPowerSeries/LinearTopology.lean,Mathlib/RingTheory/MvPowerSeries/NoZeroDivisors.lean,Mathlib/RingTheory/MvPowerSeries/Order.lean,Mathlib/RingTheory/MvPowerSeries/PiTopology.lean,Mathlib/RingTheory/MvPowerSeries/Substitution.lean,Mathlib/RingTheory/MvPowerSeries/Trunc.lean,Mathlib/RingTheory/Polynomial/Eisenstein/Distinguished.lean,Mathlib/RingTheory/Polynomial/GaussNorm.lean,Mathlib/RingTheory/Polynomial/HilbertPoly.lean,Mathlib/RingTheory/PowerSeries/Basic.lean,Mathlib/RingTheory/PowerSeries/Binomial.lean,Mathlib/RingTheory/PowerSeries/CoeffMulMem.lean,Mathlib/RingTheory/PowerSeries/Derivative.lean,Mathlib/RingTheory/PowerSeries/Evaluation.lean,Mathlib/RingTheory/PowerSeries/GaussNorm.lean,Mathlib/RingTheory/PowerSeries/Inverse.lean,Mathlib/RingTheory/PowerSeries/NoZeroDivisors.lean,Mathlib/RingTheory/PowerSeries/Order.lean,Mathlib/RingTheory/PowerSeries/PiTopology.lean,Mathlib/RingTheory/PowerSeries/Substitution.lean,Mathlib/RingTheory/PowerSeries/Trunc.lean,Mathlib/RingTheory/PowerSeries/WeierstrassPreparation.lean,Mathlib/RingTheory/PowerSeries/WellKnown.lean 34 21 ['alreadydone', 'github-actions', 'leanprover-bot', 'mathlib4-merge-conflict-bot'] nobody
0-43519
12 hours ago
0-52244
14 hours ago
11-28502
11 days
28637 JovanGerb
author:JovanGerb
feat(to_additive): `(dont_translate := ...)` option This PR adds the `(dont_translate := ...)` option to `to_additive`. This helps with additivizing delarations that have some multiplicative structure that can't be translated, such as a `GroupWithZero`, `Ring` or `Field`. In a future PR some automation will be added to infer these arguments automatically based on the type of the declaration. For example if the type includes `GroupWithZero G`, then `G` will be automatically not translated. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 120/27 Mathlib/Tactic/ToAdditive/Frontend.lean,MathlibTest/toAdditive.lean 2 2 ['github-actions', 'mathlib4-merge-conflict-bot'] nobody
0-42994
11 hours ago
0-58639
16 hours ago
1-534
1 day
28676 sun123zxy
author:sun123zxy
feat(NumberTheory/ArithmeticFunction): wrap `Nat.totient` as an `ArithmeticFunction` This wraps the Euler's totient function `Nat.totient` into a new `ArithmeticFunction` `ϕ`, with some basic identities such as `ϕ * ζ = id` and `μ * id = ϕ.` --- We use the notation `ϕ` to distinguish from `Nat.totient`'s notation `φ`, however this might be controversial. Suggestions are welcome! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-number-theory 52/3 Mathlib/NumberTheory/ArithmeticFunction.lean 1 7 ['b-mehta', 'eric-wieser', 'github-actions'] nobody
0-38915
10 hours ago
0-80068
22 hours ago
0-81040
22 hours
28547 YaelDillies
author:YaelDillies
feat: `measurable_from_prod_countable_right` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 28/15 Mathlib/MeasureTheory/Function/StronglyMeasurable/Basic.lean,Mathlib/MeasureTheory/Group/Arithmetic.lean,Mathlib/MeasureTheory/MeasurableSpace/Constructions.lean,Mathlib/Probability/Kernel/Disintegration/Basic.lean,Mathlib/Probability/Kernel/Disintegration/Density.lean,Mathlib/Probability/Kernel/RadonNikodym.lean 6 1 ['github-actions'] nobody
0-35693
9 hours ago
3-47819
3 days ago
3-47863
3 days
27216 D-Thomine
author:D-Thomine
feat(Cardinal/Finite): ENat powers and cardinality This PR continues the work from #25574. Original PR: https://github.com/leanprover-community/mathlib4/pull/25574 t-algebra
label:t-algebra$
204/5 Mathlib.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/Data/ENat/Pow.lean,Mathlib/SetTheory/Cardinal/Finite.lean 4 13 ['D-Thomine', 'eric-wieser', 'github-actions', 'mathlib4-merge-conflict-bot'] kbuzzard
assignee:kbuzzard
0-35523
9 hours ago
0-62553
17 hours ago
29-7260
29 days
26267 vasnesterov
author:vasnesterov
feat(Analysis/Calculus): Taylor series converges to function on whole ball * Prove `FormalMultilinearSeries.AnalyticOnNhd`: the sum of series is analytic on its ball of convergence. * Prove `AnalyticOn.hasFPowerSeriesOnBall`: a variant of `AnalyticAt.hasFPowerSeriesAt` which gives convergence to the function on the ball of convergence. --- - [x] depends on: #23745 - [x] depends on: #23747 - [x] depends on: #23748 - [x] depends on: #26247 This PR continues the work from #23749. Original PR: https://github.com/leanprover-community/mathlib4/pull/23749 t-analysis 47/0 Mathlib/Analysis/Analytic/ChangeOrigin.lean,Mathlib/Analysis/Calculus/IteratedDeriv/Lemmas.lean 2 5 ['github-actions', 'grunweg', 'mathlib4-dependent-issues-bot', 'vasnesterov'] urkud
assignee:urkud
0-35458
9 hours ago
1-20092
1 day ago
46-71295
46 days
27824 ChrisHughes24
author:ChrisHughes24
feat(Calculus): exists_gt_of_deriv_pos and variants --- I created a new file for this as I anticipate there will be many lemmas relating derivatives and monotonicity in future. Some lemmas relating deriviatives to monotonicity are already in mathlib and should maybe moved to the file (e.g. docs#HasDerivWithinAt.nonneg_of_monotoneOn). I stated them in as much generality as I could, copying the generality of `HasDerivWithinAt.nonneg_of_monotoneOn`. - [ ] depends on: #28039 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 86/0 Mathlib.lean,Mathlib/Analysis/Calculus/Deriv/Order.lean 2 19 ['ChrisHughes24', 'EtienneC30', 'github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
0-33999
9 hours ago
5-36709
5 days ago
9-54407
9 days
26331 Timeroot
author:Timeroot
feat(Algebra/Polynomial): Descartes' Rule of signs This PR continues the work from #23681. Original PR: https://github.com/leanprover-community/mathlib4/pull/23681 t-algebra
label:t-algebra$
616/3 Mathlib.lean,Mathlib/Algebra/Polynomial/CoeffList.lean,Mathlib/Algebra/Polynomial/Degree/Operations.lean,Mathlib/Algebra/Polynomial/EraseLead.lean,Mathlib/Algebra/Polynomial/RuleOfSigns.lean 5 5 ['Timeroot', 'adomani', 'github-actions'] nobody
0-33865
9 hours ago
57-85615
1 month ago
57-85660
57 days
27212 CBirkbeck
author:CBirkbeck
Cot series iterated deriv within --- - [x] depends on: #27209 - [x] depends on: #26016 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) 237/2 Mathlib/Analysis/Complex/IntegerCompl.lean,Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Cotangent.lean,Mathlib/NumberTheory/ModularForms/EisensteinSeries/Summable.lean 4 4 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
0-33343
9 hours ago
8-62685
8 days ago
8-76647
8 days
28469 EtienneC30
author:EtienneC30
feat: basic properties of toLp and ofLp Provide a `homeomorph` and `uniformEquiv` version of `WithLp.equiv`. Show that `toLp` and `ofLp` are Lipschitz and anti-Lipschitz, and that `toLp` is a uniform inducing. Show that evaluation in PiLp is continuous and open. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 62/1 Mathlib/Analysis/Normed/Lp/PiLp.lean,Mathlib/Analysis/Normed/Lp/ProdLp.lean 2 1 ['github-actions'] nobody
0-31544
8 hours ago
5-47274
5 days ago
5-47895
5 days
25970 wwylele
author:wwylele
feat(RingTheory): decompose archimedean classes of HahnSeries In preparation for #25140, this connects archimedean class and HahnSeries --- - [x] depends on: #26773 - [x] depends on: #26787 - [x] depends on: #26788 - [x] depends on: #26789 - [x] depends on: #28192 - [x] depends on: #28394 - [x] depends on: #28632 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory large-import 213/5 Mathlib/Algebra/Order/Group/Synonym.lean,Mathlib/RingTheory/HahnSeries/Basic.lean,Mathlib/RingTheory/HahnSeries/Lex.lean 3 47 ['ScottCarnahan', 'YaelDillies', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'wwylele'] alreadydone
assignee:alreadydone
0-30706
8 hours ago
2-11079
2 days ago
50-12184
50 days
26975 Whysoserioushah
author:Whysoserioushah
feat: a norm_num extension for complex numbers co-authored-by : @thefundamentaltheor3m, @hrmacbeth --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 350/0 Mathlib.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/Tactic.lean,Mathlib/Tactic/NormNum/NormNumI.lean,MathlibTest/norm_numI.lean 5 46 ['Whysoserioushah', 'dupuisf', 'eric-wieser', 'github-actions', 'hrmacbeth'] robertylewis
assignee:robertylewis
0-30683
8 hours ago
34-30625
1 month ago
34-34942
34 days
28706 unknown
author:unknown
chore: golf entire `apply_eq_iff_eq_symm_apply`, `dite_ne_left_iff`, `exists_prime_lt_and_le_two_mul_succ`, `lt_up` and `sUnion_mem_empty_univ` using `grind` unknown description -1/-1 -1 n/a [] nobody
0-28855
8 hours ago
unknown
unknown
28696 or4nge19
author:or4nge19
feat(Quiver/Path/Vertices): add splitting lemmas and decomposition results introduce splitting and decomposition results (exists_decomp_at_length, exists_decomp_of_mem_vertices, split_at_vertex needed to reason about the list of vertices of a path and to split paths at a chosen vertex. Part of Perron-Frobenius theorem pre-requisites see https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/Formalizing.20Perron-Frobenius/with/525516636 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor 112/0 Mathlib/Combinatorics/Quiver/Path/Vertices.lean,Mathlib/Data/List/Basic.lean 2 1 ['github-actions'] nobody
0-27271
7 hours ago
0-45796
12 hours ago
0-45865
12 hours
28662 gasparattila
author:gasparattila
feat: products of affine maps This PR defines some maps and isomorphisms between products of affine spaces. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-euclidean-geometry t-algebra
label:t-algebra$
168/0 Mathlib/LinearAlgebra/AffineSpace/AffineEquiv.lean,Mathlib/LinearAlgebra/AffineSpace/AffineMap.lean,Mathlib/LinearAlgebra/AffineSpace/ContinuousAffineEquiv.lean,Mathlib/Topology/Algebra/ContinuousAffineMap.lean 4 2 ['eric-wieser', 'github-actions'] nobody
0-27168
7 hours ago
0-70144
19 hours ago
0-36246
10 hours
28704 unknown
author:unknown
chore: remove unnecessary tactic invocations unknown description -1/-1 -1 n/a [] nobody
0-25628
7 hours ago
unknown
unknown
25902 pfaffelh
author:pfaffelh
feat: The finite product of semi-rings (in terms of measure theory) is a semi-ring. ~~Move results for rings (in terms of measure theory) to a separate file; was in Semiring.lean before.~~ For `∀ i ∈ s, IsSetSemiring (C i))`, the product `s.pi '' s.pi C` is a semiring. Prove two auxiliary lemmas in `Data.Set.Prod` needed on the way. --- *This PR continues the work from #22714.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/22714* large-import t-measure-probability 288/3 Mathlib/Data/Set/Pairwise/Lattice.lean,Mathlib/MeasureTheory/MeasurableSpace/Pi.lean,Mathlib/MeasureTheory/SetSemiring.lean 3 1 ['github-actions'] nobody
0-23396
6 hours ago
2-16977
2 days ago
2-27173
2 days
25883 pfaffelh
author:pfaffelh
feat: introduce Gram matrices A Gram matrix has entry `⟪v i, v j⟫` at `i j : n`, where `v : n → α` is an `InnerProductSpace 𝕜 α`. Give this notion and show that Gram matrices are positive semi-definite. This will be used later in order to show that the covariance matrix for Brownian Motion is positive semi-definite. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #24575.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24575* migrated-from-branch new-contributor t-analysis 145/2 Mathlib.lean,Mathlib/Analysis/InnerProductSpace/GramMatrix.lean,Mathlib/MeasureTheory/Function/L2Space.lean 3 29 ['EtienneC30', 'eric-wieser', 'github-actions', 'pfaffelh'] nobody
0-23224
6 hours ago
1-25670
1 day ago
43-22031
43 days
25899 pfaffelh
author:pfaffelh
feat(Topology/Compactness/CompactSystem): introduce compact Systems A compact system is a set systems with the property that, whenever a countable intersections of sets in the set system is empty, there is a finite subset of sets with empty intersection. These are needed e.g. in measure theory if one wants to show sigma-additivity of a set function on a ring. * Main result: The set of sets which are either compact and closed, or `univ`, is a compact system. * Introduce `Dissipate s x := ⋂ y ≤ x, s y` (Data/Set/Dissipate), which is parallel to Data/Set/Accumulate. Co-authored-by: Rémy Degenne remydegenne@gmail.com --- *This PR continues the work from #24541.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24541* t-topology 471/14 Mathlib.lean,Mathlib/Data/Set/Accumulate.lean,Mathlib/Data/Set/Dissipate.lean,Mathlib/MeasureTheory/PiSystem.lean,Mathlib/Topology/Compactness/CompactSystem.lean 5 13 ['github-actions', 'pfaffelh', 'sgouezel'] nobody
0-23203
6 hours ago
25-43608
25 days ago
41-10608
41 days
28700 unknown
author:unknown
feat(ModelTheory): Set.Definable is transitive unknown description large-import -1/-1 -1 n/a [] nobody
0-22541
6 hours ago
unknown
unknown
28697 chrisflav
author:chrisflav
chore(RingTheory/Generators): make type argument in `localizationAway` and `baseChange` explicit The `S` (resp. `T`) argument in `Generators.localizationAway` (resp. `Generators.baseChange`) is not inferable from the other arguments and is currently frequently explicitly provided. Moreover, `Presentation.localizationAway` (resp. `Presentation.baseChange`) already take `S` (resp. `T`) explicitly. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory maintainer-merge 21/19 Mathlib/RingTheory/Extension/Cotangent/LocalizationAway.lean,Mathlib/RingTheory/Extension/Generators.lean,Mathlib/RingTheory/Extension/Presentation/Basic.lean 3 2 ['Ruben-VandeVelde', 'github-actions'] nobody
0-22490
6 hours ago
0-22490
6 hours ago
0-44502
12 hours
28667 kckennylau
author:kckennylau
feat(Algebra/Order): two auxiliary definitions This PR introduces two constructors for isomorphisms of ordered monoids: 1. `α ≃*o β` gives `αˣ ≃*o βˣ` 2. `(⊤ : Submonoid α) ≃*o α`. --- This is used for a [PR](https://github.com/kckennylau/mathlib4/pull/13) to a [PR](https://github.com/erdOne/mathlib4/pull/1) to a [PR](https://github.com/leanprover-community/mathlib4/pull/27465). Short justification for new files: We are basically in a unique situation where every component used seems to be orthogonal to each other: * We have the instances that install order on units and submonoids (different files, I would presume), and these files know nothing about `OrderMonoidIso`. * We have `OrderMonoidIso` on the other hand which also knows nothing about units or submonoids. * And furthermore, `Submonoid.topEquiv` lives in yet another completely different place, since this is about operations on monoids (and do not require order!). More notes: I have decided to deviate from the usual naming scheme of `Units.map` to make dot notation work. I believe that `Units.map` is a bad name as well, but that's a discussion for another time. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
38/0 Mathlib.lean,Mathlib/Algebra/Order/Hom/Submonoid.lean,Mathlib/Algebra/Order/Hom/Units.lean 3 3 ['YaelDillies', 'github-actions'] nobody
0-22299
6 hours ago
1-8954
1 day ago
1-8996
1 day
28656 euprunin
author:euprunin
chore(Data/Int): golf entire `coe_leastOfBdd_eq` and `coe_greatestOfBdd_eq` using `grind` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data maintainer-merge 2/6 Mathlib/Data/Int/LeastGreatest.lean 1 1 ['github-actions'] nobody
0-21903
6 hours ago
1-33719
1 day ago
1-33766
1 day
28640 euprunin
author:euprunin
chore(Data/List): golf entire `getElem?_getD_replicate_default_eq` and `getD_append_right` using `grind` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data maintainer-merge 2/9 Mathlib/Data/List/GetD.lean 1 1 ['github-actions'] nobody
0-21856
6 hours ago
1-45282
1 day ago
1-45331
1 day
25795 dagurtomas
author:dagurtomas
chore(Condensed): introduce an abbrev for the equivalence of light condensed sets with a category of sheaves on a small site --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #24522.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24522* t-condensed 39/0 Mathlib.lean,Mathlib/Condensed/Light/Small.lean 2 1 ['github-actions'] joneugster
assignee:joneugster
0-21619
6 hours ago
69-58128
2 months ago
69-58111
69 days
26201 scholzhannah
author:scholzhannah
feat: subcomplexes of a classical CW complex This PR defines subcomplexes of a (classical relative) CW complex to be a closed subspace which is a union of open cells. It provides additional definitions for alternative ways to describe subcomplexes. Lastly, it refactors the definition of the skeleton to define it as a subcomplex. Co-authored-by: Floris van Doorn --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-topology 213/25 Mathlib/Topology/CWComplex/Classical/Basic.lean 1 2 ['github-actions', 'leanprover-community-bot-assistant'] ADedecker
assignee:ADedecker
0-20969
5 hours ago
40-50800
1 month ago
59-76140
59 days
25794 dagurtomas
author:dagurtomas
feat(CategoryTheory): localization preserves braided structure --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #24485.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24485* file-removed t-category-theory 733/427 Mathlib.lean,Mathlib/CategoryTheory/Localization/Monoidal.lean,Mathlib/CategoryTheory/Localization/Monoidal/Basic.lean,Mathlib/CategoryTheory/Localization/Monoidal/Braided.lean,Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean,Mathlib/CategoryTheory/Sites/Monoidal.lean 6 2 ['github-actions', 'leanprover-community-bot-assistant'] nobody
0-20583
5 hours ago
46-81055
1 month ago
22-63640
22 days
26120 vasnesterov
author:vasnesterov
feat(Data/Seq): `update` and `set` operations for `Seq` Introduce `modify` and `set` operations for sequences, along with a few lemmas about them. --- - [x] depends on: #20071 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) This PR continues the work from #20160. Original PR: https://github.com/leanprover-community/mathlib4/pull/20160 t-data 69/0 Mathlib/Data/Seq/Seq.lean 1 4 ['github-actions', 'grunweg', 'mathlib4-dependent-issues-bot', 'vasnesterov'] nobody
0-20087
5 hours ago
63-25404
2 months ago
63-25454
63 days
28534 raja-19
author:raja-19
feat(Data/Set/Card): add lemmas of the form `card_Union_le` Add `Finset`/`Fintype`/`Finite` and `ncard`/`encard` variants. [Zulip thread](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.60card_Union_le_sum_card.60.20lemmas) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 52/3 Mathlib/Algebra/Order/BigOperators/Group/Finset.lean,Mathlib/Data/Set/Card/Arithmetic.lean 2 16 ['b-mehta', 'github-actions', 'kckennylau', 'raja-19'] nobody
0-19751
5 hours ago
4-13481
4 days ago
4-13527
4 days
25123 eric-wieser
author:eric-wieser
feat: add rfl lemmas for monoidal categories Making these `simp` opens a can of worms best left to #24823 `simps` would generate bad names here. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge t-algebra
label:t-algebra$
111/0 Mathlib/Algebra/Category/AlgCat/Monoidal.lean,Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean,Mathlib/LinearAlgebra/QuadraticForm/QuadraticModuleCat/Monoidal.lean 3 1 ['github-actions'] dagurtomas
assignee:dagurtomas
0-19448
5 hours ago
90-5838
2 months ago
90-5889
90 days
28400 CBirkbeck
author:CBirkbeck
Define the Dedekind Eta function --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-number-theory 173/0 Mathlib.lean,Mathlib/Analysis/Complex/Periodic.lean,Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Summable.lean,Mathlib/NumberTheory/ModularForms/DedekindEta.lean 5 1 ['github-actions'] nobody
0-19241
5 hours ago
6-37449
6 days ago
0-0
0 seconds
25743 robin-carlier
author:robin-carlier
feat(AlgebraicTopology/SimplexCategory/Augmented): monoidal structure on `AugmentedSimplexCategory` We construct a monoidal category structure on `AugmentedSimplexCategory`. The tensor products corresponds to ordinal sum. We characterize morphisms out of a tensor product of object in terms of their precomposition with canonical maps `x ⟶ x ⊗ y` and `y ⟶ x ⊗ y` coming from the fact that the unit is an initial object. When constructing this structure, we found that making `AugmentedSimplexCategory` an abbrev rather than a `def` worked better. --- - [x] depends on: #25742 Future work includes using this monoidal structure and Day convolution to define the join monoidal structure on augmented simplicial sets, and also using this category as a way to encode monoidal and monadic bar constructions. Happy to discuss the fact that I had to make `AugmentedSimplexCategory` an abbrev, I can revert this but this makes the proofs a bit harder (but, I guess, also less abusing some of defeqs?). [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #22768.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/22768* t-algebraic-topology t-category-theory 523/111 Mathlib.lean,Mathlib/AlgebraicTopology/SimplexCategory/Augmented.lean,Mathlib/AlgebraicTopology/SimplexCategory/Augmented/Basic.lean,Mathlib/AlgebraicTopology/SimplexCategory/Augmented/Monoidal.lean,Mathlib/AlgebraicTopology/SimplexCategory/Basic.lean 5 6 ['github-actions', 'grunweg', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'robin-carlier'] dagurtomas
assignee:dagurtomas
0-18083
5 hours ago
20-53659
20 days ago
66-20688
66 days
28099 themathqueen
author:themathqueen
feat(LinearAlgebra/Matrix/Spectrum): the eigenvalues of Hermitian `A` are all `0` iff `A = 0` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
7/0 Mathlib/LinearAlgebra/Matrix/Spectrum.lean 1 2 ['github-actions', 'themathqueen'] riccardobrasca
assignee:riccardobrasca
0-17092
4 hours ago
10-27979
10 days ago
13-19568
13 days
28678 vihdzp
author:vihdzp
feat: well-founded instances for `ULift` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order easy 9/0 Mathlib/Order/WellFounded.lean 1 4 ['eric-wieser', 'github-actions'] nobody
0-16473
4 hours ago
0-63984
17 hours ago
0-10221
2 hours
28665 staroperator
author:staroperator
feat(Algebra/Group): add theorems about `Submonoid.pi` This PR adds theorems on `Submonoid.pi`, which are the same theorems on `Subgroup.pi`. I'm also moving `Submonoid.pi` from Subgroup/Basic.lean to Submonoid/Operations.lean; the comment says *"defined here and not in Algebra.Group.Submonoid.Operations to have access to Algebra.Group.Pi"*, but Submonoid folder is much more suitable for this definition. (Let's see if there is a large import.) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
89/41 Mathlib/Algebra/Group/Subgroup/Basic.lean,Mathlib/Algebra/Group/Submonoid/Operations.lean,Mathlib/Data/Set/Prod.lean 3 3 ['eric-wieser', 'github-actions', 'staroperator'] nobody
0-15899
4 hours ago
1-12406
1 day ago
1-12454
1 day
28658 hrmacbeth
author:hrmacbeth
feat(Tactic/FieldSimp): rewrite for performance and robustness This is a rewrite from scratch of the `field_simp` tactic. The former implementation was a lightweight wrapper around `simp` (with a custom simp-set and discharger). Broadly speaking, the new implementation reduces expressions to an internal normal form `x1 ^ k1 * ... * xn ^ kn`, where `x1`, ... `xn` are atoms tracked by the `AtomM` monad and `k1`, ... `kn` are integers. This is more robust: the tactic now solves goals which were not in scope for the simp-set version, often to the confusion of users. For example, `x ^ 2 / x` is now reduced to `x`, and `x / (x * y)` is now reduced, given `(hx : x ≠ 0)`, to `1 / y`. We hope it will also be faster: let's see what the benchmarking suite says, but on a typical large example taken from Mathlib, the heartbeat count reduces from 19983 heartbeats to 2979 heartbeats. There is a big diff: the old `field_simp` subsumed `simp`, and this was often exploited. We offer a simproc version of the new `field_simp`, and switching to a `simp` call with this simproc fixes about 80% of the cases that break; the rest are handled individually (typically by alternating `simp` and `field_simp` calls). Developed at Big Proof at the Isaac Newton Institute. Co-authored-by: Arend Mellendijk @FLDutchmann Co-authored-by: Michael Rothgang @grunweg --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) - [x] depends on: #27562 For ease of review, the PR is built from two commits: the [tactic implementation](https://github.com/leanprover-community/mathlib4/pull/28658/commits/50130021140244234296bd6b57500ff3eb1042fa) itself (+1318, -265), and the [fixes across the library](https://github.com/leanprover-community/mathlib4/pull/28658/commits/99d2aca362d3c1c4c66084c986cf2bd543c66848) (+511, -533). A good way to get a sense of the changed implementation is to look at the diff in `MathlibTest.FieldSimp`. large-import t-meta 1829/798 Archive/Imo/Imo2005Q3.lean,Archive/Imo/Imo2006Q3.lean,Archive/Imo/Imo2008Q2.lean,Archive/Imo/Imo2008Q4.lean,Archive/Imo/Imo2013Q1.lean,Archive/Imo/Imo2024Q1.lean,Archive/Wiedijk100Theorems/AreaOfACircle.lean,Archive/Wiedijk100Theorems/BallotProblem.lean,Archive/Wiedijk100Theorems/BuffonsNeedle.lean,Archive/Wiedijk100Theorems/HeronsFormula.lean,Archive/Wiedijk100Theorems/InverseTriangleSum.lean,Archive/Wiedijk100Theorems/SolutionOfCubicQuartic.lean,Archive/Wiedijk100Theorems/SumOfPrimeReciprocalsDiverges.lean,Mathlib.lean,Mathlib/Algebra/CharP/MixedCharZero.lean,Mathlib/Algebra/ContinuedFractions/Computation/CorrectnessTerminating.lean,Mathlib/Algebra/Order/Floor/Ring.lean,Mathlib/Algebra/Order/ToIntervalMod.lean,Mathlib/Algebra/Polynomial/HasseDeriv.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Formula.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean,Mathlib/AlgebraicGeometry/EllipticCurve/IsomOfJ.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Formula.lean,Mathlib/AlgebraicGeometry/EllipticCurve/NormalForms.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Projective/Formula.lean,Mathlib/Analysis/Analytic/Basic.lean,Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/ConvergenceRadius.lean,Mathlib/Analysis/Analytic/IsolatedZeros.lean,Mathlib/Analysis/Asymptotics/AsymptoticEquivalent.lean,Mathlib/Analysis/BoxIntegral/Basic.lean,Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean,Mathlib/Analysis/CStarAlgebra/ApproximateUnit.lean,Mathlib/Analysis/Calculus/BumpFunction/FiniteDimension.lean,Mathlib/Analysis/Calculus/Deriv/Inv.lean,Mathlib/Analysis/Calculus/Deriv/Inverse.lean,Mathlib/Analysis/Calculus/Deriv/ZPow.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/FDeriv/Symmetric.lean,Mathlib/Analysis/Calculus/InverseFunctionTheorem/ApproximatesLinearOn.lean,Mathlib/Analysis/Calculus/LogDeriv.lean,Mathlib/Analysis/Calculus/Monotone.lean,Mathlib/Analysis/Calculus/Rademacher.lean,Mathlib/Analysis/Calculus/TangentCone.lean,Mathlib/Analysis/Calculus/Taylor.lean,Mathlib/Analysis/Complex/Angle.lean,Mathlib/Analysis/Complex/Arg.lean,Mathlib/Analysis/Complex/CauchyIntegral.lean,Mathlib/Analysis/Complex/Conformal.lean,Mathlib/Analysis/Complex/LocallyUniformLimit.lean,Mathlib/Analysis/Complex/MeanValue.lean,Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean,Mathlib/Analysis/Complex/UpperHalfPlane/MoebiusAction.lean,Mathlib/Analysis/Convex/Between.lean,Mathlib/Analysis/Convex/Continuous.lean,Mathlib/Analysis/Convex/Jensen.lean,Mathlib/Analysis/Convex/Mul.lean,Mathlib/Analysis/Convex/Side.lean,Mathlib/Analysis/Convex/Slope.lean,Mathlib/Analysis/Fourier/AddCircle.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/FunctionalSpaces/SobolevInequality.lean,Mathlib/Analysis/Hofer.lean,Mathlib/Analysis/InnerProductSpace/Basic.lean,Mathlib/Analysis/InnerProductSpace/Defs.lean,Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean,Mathlib/Analysis/InnerProductSpace/Rayleigh.lean,Mathlib/Analysis/MellinInversion.lean,Mathlib/Analysis/Meromorphic/Basic.lean,Mathlib/Analysis/Normed/Field/Basic.lean,Mathlib/Analysis/Normed/Field/Lemmas.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Analysis/NormedSpace/HomeomorphBall.lean,Mathlib/Analysis/NormedSpace/RCLike.lean,Mathlib/Analysis/NormedSpace/RieszLemma.lean,Mathlib/Analysis/PSeries.lean,Mathlib/Analysis/Polynomial/CauchyBound.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/Analysis/SpecialFunctions/Bernstein.lean,Mathlib/Analysis/SpecialFunctions/BinaryEntropy.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arctan.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean,Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean,Mathlib/Analysis/SpecialFunctions/Complex/LogBounds.lean,Mathlib/Analysis/SpecialFunctions/ContinuousFunctionalCalculus/Rpow/IntegralRepresentation.lean,Mathlib/Analysis/SpecialFunctions/Exp.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Deligne.lean,Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean,Mathlib/Analysis/SpecialFunctions/Integrability/Basic.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Base.lean,Mathlib/Analysis/SpecialFunctions/Log/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Log/Summable.lean,Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Analysis/SpecialFunctions/Stirling.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Arctan.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean 189 30 ['github-actions', 'grunweg', 'hrmacbeth', 'j-loreaux', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'plp127'] nobody
0-14184
3 hours ago
0-57274
15 hours ago
0-72310
20 hours
28710 unknown
author:unknown
chore(Algebra): make MulEquivClass an alias of MulHomClass unknown description t-algebra
label:t-algebra$
-1/-1 -1 n/a [] nobody
0-12286
3 hours ago
unknown
unknown
26738 javra
author:javra
feat(AlgebraicToplogy/SimplexCategory): add notation for faces and degeneracies general truncated simplex categories --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebraic-topology infinity-cosmos 43/32 Mathlib/AlgebraicTopology/SimplexCategory/Truncated.lean,Mathlib/AlgebraicTopology/SimplicialSet/HomotopyCat.lean 2 4 ['emilyriehl', 'github-actions', 'leanprover-community-bot-assistant'] nobody
0-6516
1 hour ago
19-52815
19 days ago
33-43818
33 days
26829 pechersky
author:pechersky
feat(RingTheory/Valuation): Valuation.leAddSubgroup and ideal/submodule versions of ltAddSubgroup Extracted from #25450 without changing how Valued works --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) @faenuccio hopefully this bypasses any wait on #14752 because I am not changing Valued files. t-ring-theory 172/0 Mathlib/RingTheory/Valuation/Basic.lean,Mathlib/RingTheory/Valuation/Integers.lean 2 3 ['JovanGerb', 'github-actions', 'mathlib4-merge-conflict-bot'] nobody
0-6515
1 hour ago
12-28838
12 days ago
45-3358
45 days
27244 xroblot
author:xroblot
feat(RingTheory/DedekindDomain): lifting an ideal in an extension is injective This PR develops some API for [FractionalIdeal.extended](https://leanprover-community.github.io/mathlib4_docs/Mathlib/RingTheory/FractionalIdeal/Extended.html#FractionalIdeal.extended) and in particular for when it is an injective map (for an algebra map). As a consequence, it deduces the fact that lifting an integral ideal in an extension of Dedekind domains is an injective map. Note: the import increase happens in a leaf file `Mathlib.RingTheory.FractionalIdeal.Extended` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory large-import 190/5 Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean,Mathlib/RingTheory/FractionalIdeal/Extended.lean,Mathlib/RingTheory/Localization/Basic.lean 3 2 ['github-actions', 'leanprover-community-bot-assistant'] nobody
0-6514
1 hour ago
16-32880
16 days ago
33-58874
33 days
27657 euprunin
author:euprunin
chore(Geometry/RingedSpace): remove use of `erw` in `forget_preservesLimitsOfLeft` t-algebraic-geometry 5/2 Mathlib/Geometry/RingedSpace/OpenImmersion.lean 1 1 ['github-actions'] nobody
0-6514
1 hour ago
22-15084
22 days ago
22-15131
22 days
27992 staroperator
author:staroperator
feat(Algebra): cancellation inheritance This PR: 1. adds `Is{Left,Right}Cancel{Add,Mul,MulZero}` instances for `{Add,Mul,MulZero}MemClass` etc. 2. duplicates such instances for `Subsemiring` and `Subalgebra`, following #27955 (which is for `Submonoid` and `Submodule`). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra
label:t-algebra$
74/1 Mathlib.lean,Mathlib/Algebra/Algebra/Subalgebra/Basic.lean,Mathlib/Algebra/Group/Submonoid/Defs.lean,Mathlib/Algebra/Group/Subsemigroup/Defs.lean,Mathlib/Algebra/GroupWithZero/Submonoid/CancelMulZero.lean,Mathlib/Algebra/Module/Submodule/Defs.lean,Mathlib/Algebra/Ring/Subsemiring/Defs.lean 7 7 ['Vierkantor', 'eric-wieser', 'github-actions', 'mathlib4-merge-conflict-bot', 'staroperator'] nobody
0-6513
1 hour ago
9-15171
9 days ago
15-25338
15 days
28124 kckennylau
author:kckennylau
feat(Tactic): Call an arbitrary Simproc In the current framework, `Simproc`s are declared by name, and can only be referred to by name. For example, [Nat.divisors_ofNat](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Tactic/Simproc/Divisors.html#Nat.divisors_ofNat) is declared as: ```lean dsimproc_decl Nat.divisors_ofNat (Nat.divisors _) := fun e => do ``` This declaration syntax does not allow for a `Simproc` to depend on any arguments, and even if one constructed a `Simproc` that depends on e.g. a natural number, such as `foo : ℕ → Simproc`, one still cannot call it using the syntax `by simp [foo 37]`. Therefore, this new function aims to solve this problem, by allowing an arbitrary `Simproc` to be executed, using the newly defined function `Lean.Meta.Simp.Simproc.apply (s : Simproc) : TacticM Unit`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-meta 99/0 Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/Apply.lean,MathlibTest/Simproc/Apply.lean 4 12 ['b-mehta', 'eric-wieser', 'github-actions', 'hrmacbeth', 'kckennylau'] nobody
0-6512
1 hour ago
12-14389
12 days ago
12-24589
12 days
28248 YaelDillies
author:YaelDillies
feat: expectation and (conditional) variance of a Bernoulli random variable Compute the expectation, variance, conditional variance of a Bernoulli random variable. From MiscYD --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-measure-probability 168/0 Mathlib.lean,Mathlib/MeasureTheory/Integral/Bochner/Set.lean,Mathlib/Probability/Bernoulli.lean,Mathlib/Probability/Moments/Variance.lean 4 5 ['YaelDillies', 'github-actions', 'themathqueen'] nobody
0-6511
1 hour ago
9-38325
9 days ago
9-38379
9 days
28329 pechersky
author:pechersky
feat(RingTheory/Valuation): generalize CommGroupWithZero on mrange to MonoidWithZeroHom Before, they were only for Valuation, but that is too restricted --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory t-order t-algebra
label:t-algebra$
21/4 Mathlib/RingTheory/Valuation/Archimedean.lean,Mathlib/RingTheory/Valuation/Basic.lean 2 3 ['eric-wieser', 'github-actions', 'pechersky'] nobody
0-6510
1 hour ago
7-75083
7 days ago
7-75129
7 days
28287 robin-carlier
author:robin-carlier
chore(CategoryTheory/Bicategory): move `map₂_eqToHom` earlier in the import graph The lemma `PrelaxFunctor.map₂_eqToHom` currently sits in the file `CategoryTheory/Bicategory/LocallyDiscrete`. This has low discoverability, and it is unavailable to other files that deals with `eqToHoms`, such as `CategoryTheory/Bicategory/Functor/Strict`. We move the lemma in the file `Category/Bicategory/Functor/Prelax`. This comes at the cost of an extra import (`CategoryTheory.EqToHom`) in the file. The lemma is unsimped for consistency with the corresponding lemma for ordinary categories, which is intentionally not a simp lemma. We also sneak in the `eqToIso` version for completeness. --- Feel free to disagree with the extra import. I think putting this lemma closer to the definition of prelax functors is what makes most sense. An other possible home for this lemma is the file `CategoryTheory/Bicategory/EqToHom` that I introduce in #28242, but this would require that it imports prelax functors. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-category-theory 13/12 Mathlib/CategoryTheory/Bicategory/Functor/Prelax.lean,Mathlib/CategoryTheory/Bicategory/Grothendieck.lean,Mathlib/CategoryTheory/Bicategory/LocallyDiscrete.lean,Mathlib/CategoryTheory/FiberedCategory/Grothendieck.lean 4 1 ['github-actions'] nobody
0-6510
1 hour ago
8-53526
8 days ago
8-54042
8 days
28352 agjftucker
author:agjftucker
feat(Analysis): add three little theorems relating argument to image These relate argument to image under a continuous function, given a Prop that eventually holds on a product of filters in domain and codomain. In fact the second pair of statements concern a segment whose end-points are the image. They should prove useful in PRs 26300 and 26985. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis 28/3 Mathlib/Analysis/Normed/Module/Convex.lean,Mathlib/Order/Filter/Prod.lean 2 1 ['github-actions'] nobody
0-6509
1 hour ago
7-31212
7 days ago
7-38403
7 days
28709 unknown
author:unknown
add instance `CompleteSpace` for a subtype with `IsClosed` instance unknown description t-topology -1/-1 -1 n/a [] nobody
0-2347
39 minutes ago
unknown
unknown

New contributors' PRs on the review queue

Number Author Title Description Labels +/- Modified files (first 100) 📝 💬 All users who commented or reviewed Assignee(s) Updated Last status change total time in review
24333 xcloudyunx
author:xcloudyunx
feat(Combinatorics/SimpleGraph): cycle graph implementation for generic vertex types The existing `cycleGraph` implementation under Combinatorics/SimpleGraph/Circulant.lean only operates over `Fin n`. This PR implements a cycle graph implementation over any generic vertex type. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 187/0 Mathlib.lean,Mathlib/Combinatorics/SimpleGraph/Cycle.lean 2 29 ['IvanRenison', 'github-actions'] kmill
assignee:kmill
91-6031
2 months ago
119-3588
3 months ago
119-3639
119 days
26710 metakunt
author:metakunt
feat (Data/Nat/Digits/Lemmas): Add digits_getD Adds digits_getD, an explicit computation of the i-th digits of n in base b representation. t-data new-contributor 64/0 Mathlib/Data/Nat/Digits/Lemmas.lean 1 1 ['github-actions'] nobody
48-9746
1 month ago
48-9877
1 month ago
48-9929
48 days
27242 hugh-fox
author:hugh-fox
feat: add Gauss-like formula for sums of digit sums Adds `sum_digit_sum_base_pow_eq` to show a Gauss-like formula across sums of digit sums. This relies on an additional two simp lemmas, named `digits_sum_eq_self`, `digits_sum_base_mul_cancel`. Lastly, includes a specialization (which is a good bit simpler than the general formula) to base 10 named `sum_digit_sum_ten_pow_eq`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-data new-contributor 113/0 Mathlib/Data/Nat/Digits/Lemmas.lean 1 5 ['github-actions', 'hugh-fox', 'kckennylau'] nobody
32-23042
1 month ago
34-420
1 month ago
34-467
34 days
27682 FernandoChu
author:FernandoChu
Chore: Added `vecAppend_empty` lemma Added the `vecAppend_empty`. t-data new-contributor 5/0 Mathlib/Data/Fin/VecNotation.lean 1 1 ['github-actions'] nobody
21-46250
21 days ago
21-46250
21 days ago
21-46461
21 days
26945 gasparattila
author:gasparattila
feat(LinearAlgebra/AffineSpace/AffineSubspace): basic properties of `sInf` and `iInf` These properties are analogous to the existing ones for the binary infimum. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
48/1 Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean 1 4 ['Ruben-VandeVelde', 'gasparattila', 'github-actions'] eric-wieser
assignee:eric-wieser
21-25663
21 days ago
42-30064
1 month ago
42-30110
42 days
26986 WangYiran01
author:WangYiran01
feat(Partition): add bijection for partitions with max part ≤ r ## Summary This PR adds a new theorem `partition_max_equals_bound` to `Mathlib.Combinatorics.Enumerative.Partition`. It constructs a bijection between: - The set of partitions of `n` in which `r ∈ π.parts` and all parts are `≤ r`, and - The set of partitions of `n - r` whose largest part is at most `r`. This provides a constructive proof via removing/adding `r` from/to the partition multiset, in line with classical enumerative combinatorics. ## Implementation notes - The proof uses `Multiset.erase` and `Multiset.cons` with basic properties of `sum`, `sup`, and `Partition` structures. - The bijection is implemented explicitly via `f` and `g`, and proven mutually inverse via `Subtype.ext`. ## Linting - [x] Passes `lake build` - [x] Linter clean (no commandStart or longLine issues) ## Author Contributed by Yiran Wang. new-contributor t-combinatorics 85/0 Mathlib/Combinatorics/Enumerative/Partition.lean 1 2 ['WangYiran01', 'github-actions'] b-mehta
assignee:b-mehta
21-25662
21 days ago
40-62865
1 month ago
40-62909
40 days
26453 jburroni
author:jburroni
feat(Data/PNat/Basic): add order-related instances to PNat Add `SuccAddOrder ℕ+` and `NoMaxOrder ℕ+` instances. This allows, for example, the use of lemmas related to `Intervals` built with ℕ+. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import t-data new-contributor 18/0 Mathlib/Data/PNat/Basic.lean 1 3 ['eric-wieser', 'github-actions', 'jburroni'] ericrbg
assignee:ericrbg
20-57628
20 days ago
55-29449
1 month ago
55-29494
55 days
26790 FlAmmmmING
author:FlAmmmmING
feat(Combinatorics/Enumerative/Bell.lean): define standard Bell number --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 38/1 Mathlib/Combinatorics/Enumerative/Bell.lean 1 11 ['AntoineChambert-Loir', 'FlAmmmmING', 'eric-wieser', 'github-actions', 'kckennylau', 'madvorak'] awainverse
assignee:awainverse
20-57626
20 days ago
46-38305
1 month ago
46-38351
46 days
26793 FlAmmmmING
author:FlAmmmmING
feat(Algebra/Group /ForwardDiff.lean): add five theorems for forward difference --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-algebra
label:t-algebra$
212/3 Mathlib/Algebra/Group/ForwardDiff.lean 1 35 ['AntoineChambert-Loir', 'DAE123456', 'FlAmmmmING', 'Ruben-VandeVelde', 'github-actions', 'kckennylau', 'madvorak'] mariainesdff
assignee:mariainesdff
20-57625
20 days ago
33-84215
1 month ago
46-36702
46 days
25225 xcloudyunx
author:xcloudyunx
feat(Combinatorics/SimpleGraph): Eulerian walk in connected graph contains all vertices --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 16/0 Mathlib/Combinatorics/SimpleGraph/Trails.lean 1 3 ['IvanRenison', 'github-actions'] kmill
assignee:kmill
20-20722
20 days ago
86-12273
2 months ago
86-12327
86 days
26909 gasparattila
author:gasparattila
feat(LinearAlgebra/Projectivization/Subspace): correspondence between linear and projective subspaces --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
51/3 Mathlib/LinearAlgebra/Projectivization/Subspace.lean 1 1 ['github-actions'] Vierkantor
assignee:Vierkantor
20-20712
20 days ago
43-24104
1 month ago
43-24152
43 days
26462 PSchwahn
author:PSchwahn
feat(LinearAlgebra/Projection): add results about inverse of `Submodule.prodEquivOfIsCompl` Add two theorems `Submodule.prodEquivOfIsCompl_symm_apply` and `Submodule.prodEquivOfIsCompl_symm_add`, which are API for `Submodule.prodEquivOfIsCompl`. We believe these theorems are useful; for example, we have used their statements in a [classification formalization project](https://github.com/LieLean/LowDimSolvClassification). I am not sure whether the `prodEquivOfIsCompl_symm_apply` theorem should be tagged with `@[simp]`; this might lead to confluence issues. Opinions are welcome! Co-authored by: - [Viviana del Barco](https://github.com/vdelbarc) - [Gustavo Infanti](https://github.com/GuQOliveira) - [Exequiel Rivas](https://github.com/erivas) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
9/0 Mathlib/LinearAlgebra/Projection.lean 1 5 ['PSchwahn', 'github-actions', 'kckennylau'] joelriou
assignee:joelriou
19-6500
19 days ago
54-84835
1 month ago
54-84960
54 days
27245 rirarika
author:rirarika
MvPolynomial.Irreducible --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
88/0 Mathlib.lean,Mathlib/Algebra/MvPolynomial/Irreducible.lean 2 5 ['alreadydone', 'github-actions', 'mbkybky'] alreadydone
assignee:alreadydone
16-26724
16 days ago
33-67746
1 month ago
33-67790
33 days
26301 Ivan-Sergeyev
author:Ivan-Sergeyev
feat(LinearAlgebra/Matrix/Determinant/TotallyUnimodular): Empty matrices are totally unimodular. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
15/0 Mathlib/LinearAlgebra/Matrix/Determinant/TotallyUnimodular.lean 1 1 ['github-actions'] kim-em
assignee:kim-em
16-6483
16 days ago
58-47452
1 month ago
58-47496
58 days
27292 gasparattila
author:gasparattila
feat: asymptotic cone of a set This PR defines the asymptotic cone of a set in a normed affine space and proves its main properties. This is partial progress towards showing that an unbounded finite-dimensional convex set contains a ray. --- - [x] depends on: #27221 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) maintainer-merge new-contributor t-analysis 453/0 Mathlib.lean,Mathlib/Analysis/Normed/Affine/AsymptoticCone.lean,Mathlib/Order/Filter/Map.lean 3 44 ['AntoineChambert-Loir', 'YaelDillies', 'gasparattila', 'github-actions', 'mathlib4-dependent-issues-bot'] YaelDillies
assignee:YaelDillies
15-33054
15 days ago
15-36339
15 days ago
29-53880
29 days
27229 WilliamCoram
author:WilliamCoram
feat(GroupTheory/DoubleCoset): multiple lemmas From FLT --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-group-theory new-contributor 106/0 Mathlib/GroupTheory/DoubleCoset.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] mariainesdff
assignee:mariainesdff
13-50363
13 days ago
13-51096
13 days ago
30-12662
30 days
27991 sinianluoye
author:sinianluoye
feat (Rat): add Rat.den_eq_of_add_den_eq_one and its dependent lemmas ```lean4 example {q r : ℚ} (h : (q + r).den = 1) : q.den = r.den := by ``` It is so simple, but I couldn't find it in current mathlib repo. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 28/0 Mathlib/Data/Rat/Lemmas.lean 1 14 ['github-actions', 'sinianluoye', 'themathqueen'] nobody
13-33078
13 days ago
15-6081
15 days ago
15-34135
15 days
26765 KiringYJ
author:KiringYJ
feat(MeasureTheory/PiSystem): add π-λ theorem and SetLike instance Add two small features to `MeasureTheory/PiSystem`: 1. SetLike instance `instance : SetLike (DynkinSystem α) (Set α)` This lets us write `s ⊆ d` and `t ∈ d` for a DynkinSystem `d`, matching usual mathlib style. 2. `DynkinSystem.pi_lambda` lemma Classical π‑λ theorem: if a π‑system `s` is contained in a Dynkin system `d`, every set measurable for `σ(s)` is also in `d`. Currently, mathlib exposes this result only indirectly (e.g. via `generateFrom_eq`). Although logically equivalent, it is not obvious at first glance that those lemmas are the π‑λ theorem. The new lemma states the result in its familiar textbook form, so users can recognise and cite it immediately. Both pieces are under 10 lines, term‑mode only, and do not modify existing APIs. No breaking changes. No dependencies. new-contributor t-measure-probability 13/0 Mathlib/MeasureTheory/PiSystem.lean 1 13 ['EtienneC30', 'KiringYJ', 'github-actions', 'ocfnash'] RemyDegenne
assignee:RemyDegenne
13-6491
13 days ago
20-42540
20 days ago
47-30384
47 days
27400 dleijnse
author:dleijnse
feat: define geometrically reduced algebras Define geometrically reduced algebras, and prove that if all finitely generated subalgebras of an algebra `A` are geometrically reduced, then `A` is geometrically reduced. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
111/0 Mathlib.lean,Mathlib/RingTheory/Nilpotent/GeometricallyReduced.lean 2 23 ['dleijnse', 'github-actions', 'kckennylau'] joelriou
assignee:joelriou
13-6486
13 days ago
28-25156
28 days ago
28-25202
28 days
28115 bwangpj
author:bwangpj
feat(AlgebraicGeometry/EllipticCurve): reduction of elliptic curves Define the reduction of elliptic curves over the fraction field of a DVR, following Silverman. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebraic-geometry 230/1 Mathlib.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Reduction.lean,Mathlib/RingTheory/Valuation/Discrete/Basic.lean 3 14 ['Multramate', 'bwangpj', 'github-actions', 'kbuzzard'] nobody
10-79448
10 days ago
12-70094
12 days ago
12-70139
12 days
28195 gasparattila
author:gasparattila
feat: separating a convex compact set and its neighborhood with a polytope --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-analysis 26/1 Mathlib/Analysis/Normed/Affine/Convex.lean 1 2 ['FrankieNC', 'github-actions'] nobody
10-18363
10 days ago
10-22420
10 days ago
10-22474
10 days
28119 JasperMS
author:JasperMS
feat(Data/Set/Pairwise): prove pairwise results for Chains, move `Set.pairwise_iUnion₂` Initiate a new file `Data/Set/Pairwise/Chain.lean` which makes some `Pairwise` results available to the `IsChain` predicate. In the process, move `Set.pairwise_iUnion₂` to group it with similar results. Perform some variable harmonization. Part of Carleson, original result by Edward van de Meent. Moves: - Set.pairwise_iUnion₂: from Data.Set.Lattice to Data.Set.Pairwise.Lattice --- This PR was discussed and advice was given in [#mathlib4 > Novice questions on style and structure](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Novice.20questions.20on.20style.20and.20structure/with/533462814). Many thanks to those who helped me out! Mathlib PRs are still new to me, so please point out where I can improve! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) carleson t-data new-contributor 56/12 Mathlib.lean,Mathlib/Data/Set/Lattice.lean,Mathlib/Data/Set/Pairwise/Chain.lean,Mathlib/Data/Set/Pairwise/Lattice.lean 4 11 ['JasperMS', 'Ruben-VandeVelde', 'edegeltje', 'github-actions'] nobody
9-77400
9 days ago
12-45696
12 days ago
12-46139
12 days
28077 ShreckYe
author:ShreckYe
feat(Data/Finset/Card): add some more Pigeonhole Principle theorems `exists_ne_map_eq_of_card_image_lt` and `not_injOn_of_card_image_lt` `exists_ne_map_eq_of_card_image_lt` is a special case of `exists_ne_map_eq_of_card_lt_of_maps_to` where `t` is `s.image f`, and `not_injOn_of_card_image_lt` is its variant using `Set.InjOn`. I ran into some cases where such theorems would save me some time. t-data new-contributor 10/0 Mathlib/Data/Finset/Card.lean 1 4 ['ShreckYe', 'github-actions', 'themathqueen'] nobody
9-47189
9 days ago
13-58971
13 days ago
13-59019
13 days
28045 ShreckYe
author:ShreckYe
feat(Data/Finset/Image): add `subset_univ_image_iff` This is a special case of `subset_image_iff`, which corresponds to `Set.subset_range_iff_exists_image_eq` for `Set`. t-data new-contributor 13/0 Mathlib/Data/Finset/Image.lean 1 2 ['github-actions', 'themathqueen'] nobody
9-47084
9 days ago
14-43876
14 days ago
14-43938
14 days
26089 WilliamCoram
author:WilliamCoram
feat: restricted power series form a ring We define restricted power series over a normed ring R, and show they form a ring when R has the ultrametric property This is an update of [#23338](https://github.com/leanprover-community/mathlib4/pull/23338) to meet new expectations of PRs from forks. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra t-number-theory
label:t-algebra$
182/0 Mathlib.lean,Mathlib/RingTheory/PowerSeries/Restricted.lean 2 7 ['CBirkbeck', 'WilliamCoram', 'github-actions'] riccardobrasca
assignee:riccardobrasca
9-6506
9 days ago
34-43801
1 month ago
53-33234
53 days
27000 gasparattila
author:gasparattila
feat(Analysis/Normed/Group/Quotient): isometric versions of isomorphisms This PR adds an isometric version of the third isomorphism theorem for groups and modules. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-analysis 49/2 Mathlib/Analysis/Normed/Group/Quotient.lean 1 1 ['github-actions'] urkud
assignee:urkud
9-6503
9 days ago
40-45630
1 month ago
40-45682
40 days
27815 BGuillemet
author:BGuillemet
feat(CategoryTheory/Limits/Shapes/Products): add limMapPi and sigmaMapColim Add the canonical morphism from a limit to the product over its objects. Prove that it is a monomorphism. Dually, add the canonical morphism to a colimit from the coproduc of its objects and prove that it is an epimorphism. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-category-theory 44/0 Mathlib/CategoryTheory/Limits/Shapes/Products.lean 1 1 ['github-actions'] jcommelin
assignee:jcommelin
9-6498
9 days ago
19-52600
19 days ago
19-52626
19 days
28226 ShreckYe
author:ShreckYe
feat(Data/Finset): `Multiset.eq_of_le_of_card_eq` and `Finset.eq_of_subet_of_card_eq` As the conditions `s ⊆ t` for `Finset` and `s ≤ t` for `Multiset` both imply `card s ≤ card t`, the conditions `card t ≤ card s` in both `Finset.eq_of_subset_of_card_le` and `Multiset.eq_of_le_of_card_le` can be specialized to `card s = card t`, and due to this I'd argue `card s = card t` might be more common than `card t ≤ card s` in some cases. A similar theorem `Sublist.eq_of_length` for `Sublist` is already available in Lean. Adding these two theorems can aid proof search in such cases. t-data new-contributor easy 6/0 Mathlib/Data/Finset/Card.lean,Mathlib/Data/Multiset/Defs.lean 2 3 ['Ruben-VandeVelde', 'ShreckYe', 'github-actions'] nobody
8-67614
8 days ago
9-61306
9 days ago
9-61359
9 days
28292 bwangpj
author:bwangpj
feat(Geometry/Manifold/ContMDiff): add product lemmas for `ContMDiff` Add product lemmas for `ContMDiff`. These are analogous to the corresponding lemmas for `Continuous` in [`Mathlib.Topology.Constructions.SumProd`](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Constructions/SumProd.html#ContinuousAt.comp%E2%82%82). This is upstreamed from [https://github.com/girving/ray](https://github.com/girving/ray). Co-authored-by: Geoffrey Irving --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor 42/0 Mathlib/Geometry/Manifold/ContMDiff/Constructions.lean 1 1 ['github-actions'] nobody
7-77617
7 days ago
8-44322
8 days ago
8-44315
8 days
27552 Equilibris
author:Equilibris
refactor: make universe levels visible in typevec This will be needed to allow `M.corec` to be generic across universes --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor easy 16/10 Mathlib/Data/TypeVec.lean 1 9 ['Equilibris', 'eric-wieser', 'github-actions', 'plp127'] nobody
7-74045
7 days ago
8-26464
8 days ago
24-38984
24 days
28150 Equilibris
author:Equilibris
chore: clean up proofs typevec proofs While adding variable universe corecs I found a lot of theorems in typevec that could do with a bit of a clean-up --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 24/26 Mathlib/Data/TypeVec.lean 1 6 ['Equilibris', 'alexkeizer', 'github-actions'] nobody
7-66093
7 days ago
7-66093
7 days ago
11-61691
11 days
28185 Sebi-Kumar
author:Sebi-Kumar
feat(Topology/Path): add theorem about casting with rfl Prove the trivial result `p.cast rfl rfl = p` for a path `p`, which serves as a useful result for the simplifier to know. Suggested by Aaron Liu at the discussion [#Is there code for X? > Dealing with `Path.cast`](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Dealing.20with.20.60Path.2Ecast.60). --- To provide additional context, I am relatively new when it comes to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-topology easy 2/0 Mathlib/Topology/Path.lean 1 1 ['github-actions', 'kckennylau', 'plp127'] nobody
7-47078
7 days ago
7-47078
7 days ago
10-39202
10 days
27934 JasperMS
author:JasperMS
feat(Order): no basic lemmas and some SuccOrder `biUnion` lemmas Documents that not all possible interval inclusion lemmas will be added to `Basic.lean`. Also proves some `biUnion` results about `SuccOrder`. ------- See also [Zulip: #mathlib4 > New contributor: #27934 (Order/Interval)](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/New.20contributor.3A.20.2327934.20.28Order.2FInterval.29). This is my first attempt at a Mathlib PR, I have worked on the [Carleson project](https://github.com/fpvandoorn/carleson) so far. I have tried to find natural homes for these results, and worked to make them as general as possible. Your feedback is welcome! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) carleson new-contributor t-order 40/10 Mathlib/Order/Interval/Set/Basic.lean,Mathlib/Order/SuccPred/Archimedean.lean,Mathlib/Order/SuccPred/IntervalSucc.lean 3 10 ['JasperMS', 'YaelDillies', 'github-actions'] YaelDillies
assignee:YaelDillies
7-26481
7 days ago
8-67647
8 days ago
16-57999
16 days
28312 LLaurance
author:LLaurance
feat(Combinatorics/SimpleGraph): minimum degree of nontrivial tree is one Add basic facts about nontrivial preconnected SimpleGraphs and that a nontrivial tree has a vertex of degree one. The motivation for this is to ultimately show that any connected graph contains a vertex that, when removed, leaves the graph connected. Any connected graph has a spanning tree which contains a vertex of degree one that fulfils the role of the vertex to be removed. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-combinatorics 33/2 Mathlib/Combinatorics/SimpleGraph/Acyclic.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/Connected.lean 2 6 ['LLaurance', 'eric-wieser', 'github-actions'] nobody
6-36151
6 days ago
8-14012
8 days ago
8-22150
8 days
23986 ShouxinZhang
author:ShouxinZhang
feat(FieldTheory/RatFunc): add RatFunc.toFractionRingAlgEquiv --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
12/2 Mathlib/FieldTheory/RatFunc/Basic.lean 1 33 ['ShouxinZhang', 'eric-wieser', 'github-actions', 'joneugster', 'kckennylau', 'mathlib4-merge-conflict-bot', 'plp127'] kim-em
assignee:kim-em
6-35051
6 days ago
6-35058
6 days ago
129-78799
129 days
27817 zhuyizheng
author:zhuyizheng
feat: add IMO2025P1 Add a solution to IMO2025P1, the original problem statement from https://github.com/jsm28/IMOLean --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) IMO new-contributor 1443/0 Archive.lean,Archive/Imo/Imo2025Q1.lean 2 1 ['github-actions'] dwrensha
assignee:dwrensha
6-6482
6 days ago
19-51859
19 days ago
19-51907
19 days
28467 gasparattila
author:gasparattila
chore: make `AffineSubspace.toAddTorsor` and `AffineSubspace.nonempty_map` instances The loops with the `Nonempty` instances are no longer an issue in Lean 4. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor 3/35 Mathlib/Analysis/Convex/Intrinsic.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Geometry/Euclidean/Circumcenter.lean,Mathlib/Geometry/Euclidean/Projection.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Basic.lean,Mathlib/LinearAlgebra/AffineSpace/Restrict.lean,Mathlib/LinearAlgebra/AffineSpace/Simplex/Basic.lean,Mathlib/Topology/Algebra/AffineSubspace.lean 8 1 ['github-actions'] nobody
5-48805
5 days ago
5-50480
5 days ago
5-50472
5 days
28493 gasparattila
author:gasparattila
feat: topological affine spaces This PR adds a typeclass `IsTopologicalAddTorsor` for topological affine spaces and generalizes several results which currently assume `NormedAddTorsor`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor 386/289 Mathlib/Algebra/AddTorsor/Basic.lean,Mathlib/Analysis/Calculus/AddTorsor/AffineMap.lean,Mathlib/Analysis/Complex/AbsMax.lean,Mathlib/Analysis/Normed/Affine/AddTorsor.lean,Mathlib/Analysis/Normed/Affine/ContinuousAffineMap.lean,Mathlib/Analysis/Normed/Affine/Convex.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Analysis/Normed/Group/AddTorsor.lean,Mathlib/Analysis/Normed/Module/FiniteDimension.lean,Mathlib/Analysis/Normed/Operator/Banach.lean,Mathlib/Analysis/RCLike/Lemmas.lean,Mathlib/Geometry/Euclidean/Projection.lean,Mathlib/Geometry/Euclidean/Triangle.lean,Mathlib/Topology/Algebra/Affine.lean,Mathlib/Topology/Algebra/ContinuousAffineMap.lean,Mathlib/Topology/Algebra/Group/Pointwise.lean 16 1 ['github-actions'] nobody
5-23944
5 days ago
5-26644
5 days ago
5-26692
5 days
28501 dtumad
author:dtumad
feat(Data/Set): show the `Alternative` instance on `Set` is lawful This PR adds a `LawfulAlternative` instance for `Set`, and also exposes the lawful instances for `SetM`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 25/0 Mathlib/Data/Set/Functor.lean 1 1 ['github-actions'] nobody
5-12986
5 days ago
5-12986
5 days ago
5-13038
5 days
28091 ShreckYe
author:ShreckYe
feat(Algebra/Order/Floor): a variant of `Nat.ceil_lt_add_one` with its condition `0 ≤ a` generalized to `-1 < a` new-contributor t-algebra
label:t-algebra$
15/0 Mathlib/Algebra/Order/Floor/Ring.lean 1 3 ['Ruben-VandeVelde', 'github-actions', 'themathqueen'] mattrobball
assignee:mattrobball
5-6506
5 days ago
13-34201
13 days ago
13-34246
13 days
26785 TOMILO87
author:TOMILO87
feat: beta distribution Add the Beta distribution to the probability distributions in mathlib4 This PR introduces the Beta distribution on the reals. Main definitions: - betaPDFReal (α β x : ℝ) — the probability density function as a real-valued function - betaPDF (α β x : ℝ) — the pdf as a ℝ≥0∞-valued function - betaMeasure (α β : ℝ) — the probability measure associated with the Beta distribution Main results: - lintegral_betaPDF_eq_one — proof that the pdf integrates to 1 (normalization) - Lemmas on positivity, measurability, and integrability of the pdf - isProbabilityMeasureBeta — the Beta measure is a probability measure Notes: - Follows the general structure of other distributions in mathlib (e.g. Gamma). - Several unused helper lemmas were removed, and proofs streamlined in response to reviewer feedback. - Thanks to @EtienneC30 and @RemyDegenne for detailed reviews across multiple rounds. This is a clean version of the PR originally opened as [#25608](https://github.com/leanprover-community/mathlib4/pull/25608) and temporarily migrated in [#26325](https://github.com/leanprover-community/mathlib4/pull/26325). new-contributor t-measure-probability 206/2 Mathlib.lean,Mathlib/Algebra/Polynomial/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Probability/Distributions/Beta.lean 4 33 ['EtienneC30', 'RemyDegenne', 'TOMILO87', 'github-actions'] EtienneC30
assignee:EtienneC30
4-58268
4 days ago
4-58268
4 days ago
35-71022
35 days
24804 Moises-Herradon-Cueto
author:Moises-Herradon-Cueto
feat(CategoryTheory/Limits/Preserves/Shapes): show that if a functor preserves limits, so does `Over.post` If a functor `F` preserves limits (of a certain shape, finite, or of a certain size), then so does the induced functor on `Over` categories. From Toric Co-authored-by: Yaël Dillies --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) toric new-contributor t-category-theory 125/0 Mathlib.lean,Mathlib/CategoryTheory/Limits/Preserves/Shapes/Over.lean,Mathlib/CategoryTheory/WithTerminal/Basic.lean 3 17 ['Moises-Herradon-Cueto', 'YaelDillies', 'erdOne', 'github-actions', 'joelriou'] riccardobrasca
assignee:riccardobrasca
4-6489
4 days ago
85-43071
2 months ago
91-47464
91 days
28149 Equilibris
author:Equilibris
feat: dcongr_heq `dcongr_heq` is very useful for proofs about typevecs as these are highly dependent --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-logic 14/0 Mathlib/Logic/Basic.lean 1 11 ['Equilibris', 'alexkeizer', 'github-actions', 'madvorak'] fpvandoorn
assignee:fpvandoorn
4-6482
4 days ago
11-63305
11 days ago
11-63350
11 days
28286 bwangpj
author:bwangpj
feat(Geometry/Manifold/ContMDiff): basic lemmas for analytic (`C^ω`) functions Add basic lemmas relating `ContMDiff` in the `C^ω` case to being `Analytic` on charts. This is upstreamed from [https://github.com/girving/ray](https://github.com/girving/ray). Co-authored-by: Geoffrey Irving --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-differential-geometry 36/0 Mathlib/Geometry/Manifold/ContMDiff/Defs.lean 1 2 ['girving', 'github-actions'] nobody
3-57167
3 days ago
8-55506
8 days ago
8-55551
8 days
27357 jcreedcmu
author:jcreedcmu
feat(Algebra/Module/Submodule): add `submoduleMap` for isometries Per [discussion on Zulip](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Analog.20of.20LinearEquiv.2EsubmoduleMap.20for.20AffineIsometryEquiv.3F), add a version of `.submoduleMap` for `LinearIsometry` and `LinearIsometryEquiv` by analogy with `LinearMap.submoduleMap` and `LinearEquiv.submoduleMap`. --- new-contributor t-algebra
label:t-algebra$
56/0 Mathlib.lean,Mathlib/Analysis/Normed/Operator/LinearIsometrySubmoduleMap.lean 2 18 ['Ruben-VandeVelde', 'eric-wieser', 'github-actions', 'jcreedcmu', 'themathqueen'] dagurtomas
assignee:dagurtomas
3-33857
3 days ago
29-22317
29 days ago
29-22369
29 days
28059 hanwenzhu
author:hanwenzhu
refactor(MeasureTheory/RieszMarkovKakutani): Use PositiveLinearMap This PR refactors the unbundled `{Λ : C_c(X, ℝ) →ₗ[ℝ] ℝ} (hΛ : ∀ f, 0 ≤ f → 0 ≤ Λ f)` in the statement of RMK to the bundled `(Λ : C_c(X, ℝ) →ₚ[ℝ] ℝ)`. Zulip discussion: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Uniqueness.20in.20Riesz.E2.80.93Markov.E2.80.93Kakutani.20representation.20theorem --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-measure-probability 122/81 Mathlib/Algebra/Order/Module/PositiveLinearMap.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/Basic.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/NNReal.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/Real.lean,Mathlib/Topology/ContinuousMap/CompactlySupported.lean 5 12 ['EtienneC30', 'github-actions', 'hanwenzhu', 'yoh-tanimoto'] EtienneC30
assignee:EtienneC30
3-6486
3 days ago
11-3281
11 days ago
13-25148
13 days
28198 Sebi-Kumar
author:Sebi-Kumar
feat(Analysis/InnerProductSpace/PiL2): Add instances for EuclideanSpace rank and EuclideanSpace being infinite Add an instance for `Fact (Module.finrank 𝕜 (EuclideanSpace 𝕜 (Fin n)) = n)` which is needed to apply [stereographic'](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Geometry/Manifold/Instances/Sphere.html#stereographic') to EuclideanSpace. Also add an instance for `Infinite (EuclideanSpace 𝕜 ι)` where `ι` is a nonempty fintype. I wasn't sure if these should go in separate pull requests, but they seemed similar enough to me. Thank you to Kenny Lau for the suggestions at [#mathlib4 > Instances for EuclideanSpace](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Instances.20for.20EuclideanSpace). --- To provide additional context, I am new to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-analysis 6/0 Mathlib/Analysis/InnerProductSpace/PiL2.lean 1 1 ['github-actions'] urkud
assignee:urkud
3-6483
3 days ago
10-19719
10 days ago
10-19765
10 days
28598 lauramonk
author:lauramonk
feat(Combinatorics/Graph) add definitions of incidenceSet and loopSet Add the definition for `incidenceSet` and `loopSet` of a vertex in a graph, and a proof that the `loopSet` is included in the `incidenceSet`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics easy 22/0 Mathlib/Combinatorics/Graph/Basic.lean 1 2 ['github-actions', 'lauramonk'] nobody
2-45617
2 days ago
2-45625
2 days ago
2-45668
2 days
28602 gmcninch-tufts
author:gmcninch-tufts
feat(Algebra/Polynomial/Module): prove equivalence of a certain tensor product with PolynomialModule For a commutative ring `R` and an `R`-module `M`, construct an equivalence between the `R[X]`-modules `R[X] ⊗[R] M` and `PolynomialModule R M`. This equivalence enables application of some base-change results to `PolynomialModule R M` . --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
210/0 Mathlib.lean,Mathlib/Algebra/Polynomial/Module/TensorProduct.lean 2 1 ['github-actions'] nobody
2-32573
2 days ago
2-41979
2 days ago
2-42024
2 days
28451 yapudpill
author:yapudpill
feat(RingTheory/Noetherian): add `IsNoetherianRing.of_prime` This PR introduces the first usage of `Ideal.IsOka` introduced in #27200 to prove that if all prime ideals of a `CommRing` are finitely generated then this ring is Noetherian. To do so, we also added the lemma `Ideal.mem_span_range_self`. --- - [x] depends on: #28525 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory new-contributor 104/12 Mathlib.lean,Mathlib/RingTheory/Ideal/Span.lean,Mathlib/RingTheory/Noetherian/OfPrime.lean,docs/references.bib 4 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
2-17461
2 days ago
3-43318
3 days ago
5-10204
5 days
28477 yapudpill
author:yapudpill
feat(RingTheory): golf `IsPrincipalIdealRing.of_prime` In complement to #28451 and as discussed in #27200, this PR uses the newly added Oka predicates to golf the proof of `IsPrincipalIdealRing.of_prime`. --- - [x] depends on: #28525 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory new-contributor 61/56 Mathlib/RingTheory/PrincipalIdealDomain.lean,Mathlib/RingTheory/PrincipalIdealDomainOfPrime.lean 2 5 ['Ruben-VandeVelde', 'github-actions', 'mathlib4-dependent-issues-bot', 'yapudpill'] nobody
2-17361
2 days ago
3-42248
3 days ago
4-24419
4 days
28546 Sfgangloff
author:Sfgangloff
feat(SymbolicDynamics): basic setup of Zd, full shift, cylinders, pat… # Symbolic dynamics on groups: core API and entropy along finite shapes This PR adds a **group-generic** foundation for symbolic dynamics over an arbitrary group `G`, together with convenient specializations for `ℤ` and `ℤ^d`. ## Summary of additions - **Full shift and shift action** - `abbrev FullShift (A G) := G → A` (inherits product topology from the Π-type). - Right shift `shift g x` with convention `(shift g x) h = x (h * g)`. - **Cylinders and topology** - `cylinder U x : Set (G → A)` for finite `U : Finset G`. - Cylinders are open under `[DiscreteTopology A]`; with a finite alphabet they are also closed. - Equality with dependent products: `cylinder U x = Set.pi (↑U) (fun i => ({x i} : Set A))`, enabling use of the `Set.pi` API. - **Patterns, occurrences, and subshifts** - `Pattern A G` with finite `support : Finset G` and `data : support → A`. - `Pattern.occursIn p x g` (occurrence at translate `g`) and the expected shift law. - `forbids F` and `Subshift A G` (closed, shift-invariant subsets). - `FixedSupport A G U` with an equivalence to `(U → A)` to obtain finiteness. - **Language on finite shapes and counting** - `languageOn X U`, `languageCardOn X U`, and `patternCountOn Y U`. - **Entropy along a shape sequence** - `limsupAtTop` (as an `sInf` of eventual upper bounds). - `entropyAlong X F hF := limsup (log (patternCountOn X (F n) + 1) / |F n|)` for any nonempty finite shapes `F : ℕ → Finset G` (the `+ 1` avoids `log 0`). - **Specializations** - `IntShapes`: segments `[-n,n]` on `Multiplicative ℤ`, with `entropy_Z`. - `ZdShapes`: boxes `[-n,n]^d` on `ℤ^d` (as functions `Fin d → ℤ`), with `entropy_Zd`. ## Mathematical remarks - The API is **shape-parametric**: entropy is defined along user-provided finite shapes. - On **amenable** groups, using a **Følner** sequence yields a canonical value (Ornstein–Weiss). This PR does not assume amenability; the family of shapes is an explicit input. ## Motivation Provide a clean, reusable base for symbolic dynamics on groups in mathlib. ## Future work - Add a Følner predicate and prove shape-independence / limit existence on amenable groups. - Expand the `ℤ`/`ℤ^d` toolkit (alternative shapes, mixing, factors). - Develop 1D theory and, longer-term, multidimensional SFT results (e.g. along the lines of Hochman–Meyerovitch). new-contributor t-dynamics 516/0 Mathlib.lean,Mathlib/Dynamics/SymbolicDynamics/Basic.lean,Mathlib/Dynamics/SymbolicDynamics/EntropyFinitelyGenerated.lean 3 14 ['Sfgangloff', 'eric-wieser', 'github-actions', 'kckennylau', 'sgouezel'] nobody
1-72012
1 day ago
3-48285
3 days ago
3-48328
3 days
25858 themathqueen
author:themathqueen
feat(RingTheory/Coalgebra/MulOpposite): coalgebra instance for MulOpposite Adding an instance for `Aᵐᵒᵖ` being an `R`-coalgebra when `A` is. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory maintainer-merge new-contributor 69/0 Mathlib.lean,Mathlib/LinearAlgebra/TensorProduct/Basic.lean,Mathlib/RingTheory/Coalgebra/MulOpposite.lean 3 6 ['chrisflav', 'github-actions'] chrisflav
assignee:chrisflav
1-65403
1 day ago
1-65403
1 day ago
67-48174
67 days
27963 ShreckYe
author:ShreckYe
feat(Algebra/GCDMonoid): add some theorems related to divisibility and `lcm` for both `GCDMonoid` and `Nat` While working on formalizing some math olympiad problems, I found that the theorem `dvd_lcm : p ∣ lcm a b ↔ p ∣ a ∨ p ∣ b` is missing in Mathlib. So I added this along with some other related theorems. These theorems are simlilar to those related to divisibility and multiplication (`dvd_mul` as compared to `dvd_lcm` for example), as commented in the doc strings. new-contributor t-algebra
label:t-algebra$
102/0 Mathlib.lean,Mathlib/Algebra/GCDMonoid/Basic.lean,Mathlib/Data/Nat/GCD/Basic.lean,Mathlib/Data/Nat/GCD/Prime.lean 4 28 ['Ruben-VandeVelde', 'ShreckYe', 'github-actions', 'themathqueen'] erdOne
assignee:erdOne
1-44383
1 day ago
1-46393
1 day ago
9-50038
9 days
28641 sun123zxy
author:sun123zxy
feat(RingTheory/Nakayama): add a version of Nakayama's lemma (stacks 00DV (8)) This PR adds a version of Nakayama's lemma from [Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) (8). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory new-contributor 18/2 Mathlib/RingTheory/Nakayama.lean 1 1 ['github-actions'] nobody
1-43416
1 day ago
1-43416
1 day ago
1-45041
1 day
28653 strihanje01
author:strihanje01
feat(Combinatorics/Additive/Convolution): convolution map add convolution of finite subsets of a group --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics 97/0 Mathlib.lean,Mathlib/Combinatorics/Additive/Convolution.lean 2 2 ['github-actions', 'strihanje01'] nobody
1-32993
1 day ago
1-35564
1 day ago
1-35629
1 day
26923 oliver-butterley
author:oliver-butterley
feat(Dynamics/BirkhoffSum): add the pointwise ergodic theorem (Birkhoff's) The Pointwise Ergodic Theorem, also known as Birkhoff's Ergodic Theorem. Co-authored-by: Lua Viana Reis - [x] depends on: #26074 - [x] depends on: #26807 - [x] depends on: #26810 - [x] depends on: #26840 - [x] depends on: #26842 - [x] depends on: #26848 - [x] depends on: #26851 - [x] depends on: #26852 - [x] depends on: #26853 - [x] depends on: #27008 Zulip: [PR thread](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2326923.20The.20pointwise.20ergodic.20theorem.20.28Birkhoff's.29/with/527835158) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-dynamics 401/0 Mathlib.lean,Mathlib/Dynamics/BirkhoffSum/Pointwise.lean 2 6 ['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-31774
1 day ago
2-17526
2 days ago
2-18524
2 days
28125 nonisomorphiclinearmap
author:nonisomorphiclinearmap
feat(Combinatorics): basic definition of simplicial complexes This PR introduces the basic definition of a finite (abstract) simplicial complex, located in Mathlib/Combinatorics/SimplicialComplex/Basic.lean. --- This is our first contribution to mathlib. This work was done as part of the Fields Institute Summer Undergraduate Program on formalization in topological combinatorics. Eventually, we aim to formalize Lovasz's proof of the Kneser Conjecture and this is a small stepping stone in that direction. Some other commits will shortly depend on this one. We would like to acknowledge the Fields Institute for Research in Mathematical Sciences for their sponsorship. We would also like to thank our supervisors, Professor Chris Kapulkin and Mr. Daniel Carranza, for their guidance and support throughout this project. We would also like to thank our group members Tom Lindquist and Quang Minh Nguyen for our fruitful discussions. new-contributor t-combinatorics 374/0 Mathlib.lean,Mathlib/Combinatorics/SimplicialComplex/Basic.lean,Mathlib/Combinatorics/SimplicialComplex/Category.lean,Mathlib/Combinatorics/SimplicialComplex/FacePoset.lean,Mathlib/Combinatorics/SimplicialComplex/Hom.lean 5 1 ['github-actions'] awainverse
assignee:awainverse
1-6506
1 day ago
12-24975
12 days ago
12-25020
12 days
28186 Sebi-Kumar
author:Sebi-Kumar
feat(Topology/Homotopy/Path): Add IsEquiv instance for Path.Homotopic Add `instance : IsEquiv (Path x₀ x₁) Homotopic` to the library. Allow use of lemmas like `of_eq` when proving two paths are homotopic. --- To provide additional context, I am relatively new to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario and supervised by Chris Kapulkin and Daniel Carranza. My goal is to prove that the `n`-sphere is simply connected for `n > 1`. Also, I am not super familiar with `IsEquiv` and when it should/shouldn't be used. I just wanted to use a lemma like `Path.Homotopic.of_eq` at one point while working on my code, and thought this was the best way to add such a result to the library. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-topology 5/0 Mathlib/Topology/Homotopy/Path.lean 1 4 ['Sebi-Kumar', 'github-actions', 'kckennylau'] PatrickMassot
assignee:PatrickMassot
1-6503
1 day ago
10-37833
10 days ago
10-37881
10 days
28630 Antidite
author:Antidite
feat(Archive/Imo): right isosceles configuration in the complex plane feat(Archive/Imo): right isosceles configuration in the complex plane This adds `Archive/Imo/Imo1975Q3.lean`, formalizing a triangle configuration with points A=0, B=1, C=z and auxiliary points R, P, Q built via complex rotations and sine-based scale factors. Main results: * `angle_and_distance`: ∠QRP = π/2 and dist Q R = dist R P. * Key identity `QRP_rot90`: (Q z).z − R.z = e^{iπ/2} · ((P z).z − R.z). Design/Style: * Minimal imports; module docstring; semantic lemma names; all definitions and theorems live under the namespace `IMO.TriangleConfig`. Moves: - (none) Deletions: - (none) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) IMO new-contributor 196/0 Archive.lean,Archive/Imo/Imo1975Q3.lean 2 32 ['Antidite', 'LLaurance', 'github-actions'] nobody
0-71640
19 hours ago
1-63864
1 day ago
1-63909
1 day
27825 yonggyuchoimath
author:yonggyuchoimath
feat(RingTheory/Ideal/Height): sup of ideal heights equals Krull dimension Adds `Ideal.sup_height_eq_ringKrullDim` and `Ideal.sup_primeHeight_eq_ringKrullDim`. They show the suprema of heights of ideals / prime ideals are equal to the Krull dimension, when the ring is nonzero. t-ring-theory new-contributor 53/0 Mathlib/RingTheory/Ideal/Height.lean 1 5 ['github-actions', 'kbuzzard', 'yonggyuchoimath'] kbuzzard
assignee:kbuzzard
0-62590
17 hours ago
16-33063
16 days ago
19-48151
19 days
28691 or4nge19
author:or4nge19
feat(Probability/Invariance):Reversibility/DetailedBalance Add reversibility (detailed balance) for Markov kernels and show it implies invariance --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-measure-probability 25/1 Mathlib/Probability/Kernel/Invariance.lean 1 1 ['github-actions'] nobody
0-54042
15 hours ago
0-57187
15 hours ago
0-57230
15 hours
27511 Nebula691
author:Nebula691
feat(Algebra/QuadraticAlgebra) : Define Quadratic Algebra Co-authored-by: Edison Xie Co-authored-by: Kenny Lau --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-algebra
label:t-algebra$
419/0 Mathlib.lean,Mathlib/Algebra/QuadraticAlgebra.lean 2 70 ['Whysoserioushah', 'YaelDillies', 'eric-wieser', 'github-actions', 'kckennylau'] eric-wieser
assignee:eric-wieser
0-50204
13 hours ago
25-40803
25 days ago
25-40848
25 days
28676 sun123zxy
author:sun123zxy
feat(NumberTheory/ArithmeticFunction): wrap `Nat.totient` as an `ArithmeticFunction` This wraps the Euler's totient function `Nat.totient` into a new `ArithmeticFunction` `ϕ`, with some basic identities such as `ϕ * ζ = id` and `μ * id = ϕ.` --- We use the notation `ϕ` to distinguish from `Nat.totient`'s notation `φ`, however this might be controversial. Suggestions are welcome! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) large-import new-contributor t-number-theory 52/3 Mathlib/NumberTheory/ArithmeticFunction.lean 1 7 ['b-mehta', 'eric-wieser', 'github-actions'] nobody
0-38915
10 hours ago
0-80068
22 hours ago
0-81040
22 hours
28696 or4nge19
author:or4nge19
feat(Quiver/Path/Vertices): add splitting lemmas and decomposition results introduce splitting and decomposition results (exists_decomp_at_length, exists_decomp_of_mem_vertices, split_at_vertex needed to reason about the list of vertices of a path and to split paths at a chosen vertex. Part of Perron-Frobenius theorem pre-requisites see https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/Formalizing.20Perron-Frobenius/with/525516636 --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor 112/0 Mathlib/Combinatorics/Quiver/Path/Vertices.lean,Mathlib/Data/List/Basic.lean 2 1 ['github-actions'] nobody
0-27271
7 hours ago
0-45796
12 hours ago
0-45865
12 hours
28662 gasparattila
author:gasparattila
feat: products of affine maps This PR defines some maps and isomorphisms between products of affine spaces. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-euclidean-geometry t-algebra
label:t-algebra$
168/0 Mathlib/LinearAlgebra/AffineSpace/AffineEquiv.lean,Mathlib/LinearAlgebra/AffineSpace/AffineMap.lean,Mathlib/LinearAlgebra/AffineSpace/ContinuousAffineEquiv.lean,Mathlib/Topology/Algebra/ContinuousAffineMap.lean 4 2 ['eric-wieser', 'github-actions'] nobody
0-27168
7 hours ago
0-70144
19 hours ago
0-36246
10 hours
25883 pfaffelh
author:pfaffelh
feat: introduce Gram matrices A Gram matrix has entry `⟪v i, v j⟫` at `i j : n`, where `v : n → α` is an `InnerProductSpace 𝕜 α`. Give this notion and show that Gram matrices are positive semi-definite. This will be used later in order to show that the covariance matrix for Brownian Motion is positive semi-definite. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) --- *This PR continues the work from #24575.* *Original PR: https://github.com/leanprover-community/mathlib4/pull/24575* migrated-from-branch new-contributor t-analysis 145/2 Mathlib.lean,Mathlib/Analysis/InnerProductSpace/GramMatrix.lean,Mathlib/MeasureTheory/Function/L2Space.lean 3 29 ['EtienneC30', 'eric-wieser', 'github-actions', 'pfaffelh'] nobody
0-23224
6 hours ago
1-25670
1 day ago
43-22031
43 days
28534 raja-19
author:raja-19
feat(Data/Set/Card): add lemmas of the form `card_Union_le` Add `Finset`/`Fintype`/`Finite` and `ncard`/`encard` variants. [Zulip thread](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.60card_Union_le_sum_card.60.20lemmas) --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor 52/3 Mathlib/Algebra/Order/BigOperators/Group/Finset.lean,Mathlib/Data/Set/Card/Arithmetic.lean 2 16 ['b-mehta', 'github-actions', 'kckennylau', 'raja-19'] nobody
0-19751
5 hours ago
4-13481
4 days ago
4-13527
4 days

PRs on the review queue labelled 'easy'

Number Author Title Description Labels +/- Modified files (first 100) 📝 💬 All users who commented or reviewed Assignee(s) Updated Last status change total time in review
28164 bryangingechen
author:bryangingechen
fix(Cache): add put* commands to leanTarArgs Without this, running `lake exe cache put` fails if `leantar` is not already installed. --- What label should this get? `CI` and `t-meta` don't seem right. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) easy 2/2 Cache/Main.lean 1 1 ['github-actions'] nobody
10-56188
10 days ago
11-19214
11 days ago
11-19198
11 days
27567 themathqueen
author:themathqueen
feat(LinearAlgebra/TensorProduct/Tower): add `lid` and `assoc` tensor lemmas This adds `TensorProduct.lid_tensor` and `TensorProduct.assoc_tensor`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
33/0 Mathlib/LinearAlgebra/TensorProduct/Tower.lean 1 3 ['github-actions', 'themathqueen'] mariainesdff
assignee:mariainesdff
10-28079
10 days ago
10-28079
10 days ago
24-20916
24 days
28226 ShreckYe
author:ShreckYe
feat(Data/Finset): `Multiset.eq_of_le_of_card_eq` and `Finset.eq_of_subet_of_card_eq` As the conditions `s ⊆ t` for `Finset` and `s ≤ t` for `Multiset` both imply `card s ≤ card t`, the conditions `card t ≤ card s` in both `Finset.eq_of_subset_of_card_le` and `Multiset.eq_of_le_of_card_le` can be specialized to `card s = card t`, and due to this I'd argue `card s = card t` might be more common than `card t ≤ card s` in some cases. A similar theorem `Sublist.eq_of_length` for `Sublist` is already available in Lean. Adding these two theorems can aid proof search in such cases. t-data new-contributor easy 6/0 Mathlib/Data/Finset/Card.lean,Mathlib/Data/Multiset/Defs.lean 2 3 ['Ruben-VandeVelde', 'ShreckYe', 'github-actions'] nobody
8-67614
8 days ago
9-61306
9 days ago
9-61359
9 days
27552 Equilibris
author:Equilibris
refactor: make universe levels visible in typevec This will be needed to allow `M.corec` to be generic across universes --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data new-contributor easy 16/10 Mathlib/Data/TypeVec.lean 1 9 ['Equilibris', 'eric-wieser', 'github-actions', 'plp127'] nobody
7-74045
7 days ago
8-26464
8 days ago
24-38984
24 days
28185 Sebi-Kumar
author:Sebi-Kumar
feat(Topology/Path): add theorem about casting with rfl Prove the trivial result `p.cast rfl rfl = p` for a path `p`, which serves as a useful result for the simplifier to know. Suggested by Aaron Liu at the discussion [#Is there code for X? > Dealing with `Path.cast`](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Dealing.20with.20.60Path.2Ecast.60). --- To provide additional context, I am relatively new when it comes to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-topology easy 2/0 Mathlib/Topology/Path.lean 1 1 ['github-actions', 'kckennylau', 'plp127'] nobody
7-47078
7 days ago
7-47078
7 days ago
10-39202
10 days
28393 tristan-f-r
author:tristan-f-r
chore(WithZero): clean We replace `erw` this with defeq abuse (which seems to be accepted as okay inside proofs), and clean up the rest of the file. I might start trying to remove `erw`s in Mathlib. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-data easy 14/16 Mathlib/Data/Int/WithZero.lean 1 7 ['Ruben-VandeVelde', 'github-actions', 'tristan-f-r'] nobody
6-26765
6 days ago
6-72131
6 days ago
6-75056
6 days
28458 pechersky
author:pechersky
feat(RingTheory/RootsOfUnity): trivial root of unity: `HasEnoughRootsOfUnity M 1` On the way to (p - 1)-roots of unity of Z_p. This deals with the p = 2 case. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory t-algebra easy
label:t-algebra$
6/0 Mathlib/RingTheory/RootsOfUnity/Basic.lean,Mathlib/RingTheory/RootsOfUnity/EnoughRootsOfUnity.lean 2 1 ['github-actions'] nobody
5-73146
5 days ago
5-73160
5 days ago
5-73208
5 days
28141 YaelDillies
author:YaelDillies
chore: deprecate `BialgHom.coe_toLinearMap` `BialgHom.toLinearMap` is a fake projection. From Toric --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-ring-theory toric easy 5/11 Mathlib/RingTheory/Bialgebra/Hom.lean 1 8 ['YaelDillies', 'eric-wieser', 'github-actions'] alreadydone
assignee:alreadydone
4-6482
4 days ago
11-70011
11 days ago
11-70010
11 days
28589 vihdzp
author:vihdzp
feat: more lemmas on characteristic 2 rings --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
11/0 Mathlib/Algebra/CharP/Two.lean 1 1 ['github-actions'] nobody
2-69513
2 days ago
2-69712
2 days ago
2-69707
2 days
28544 themathqueen
author:themathqueen
feat(Algebra/Star/Unitary): `unitary * a * star unitary` is self-adjoint iff `a` is --- - [x] depends on: #28476 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
8/0 Mathlib/Algebra/Star/Unitary.lean 1 2 ['github-actions', 'mathlib4-dependent-issues-bot'] nobody
2-63856
2 days ago
2-65580
2 days ago
2-65605
2 days
28598 lauramonk
author:lauramonk
feat(Combinatorics/Graph) add definitions of incidenceSet and loopSet Add the definition for `incidenceSet` and `loopSet` of a vertex in a graph, and a proof that the `loopSet` is included in the `incidenceSet`. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) new-contributor t-combinatorics easy 22/0 Mathlib/Combinatorics/Graph/Basic.lean 1 2 ['github-actions', 'lauramonk'] nobody
2-45617
2 days ago
2-45625
2 days ago
2-45668
2 days
28338 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/IsPositive): `(adjoint S ∘ S).IsPositive` and `(S ∘ adjoint S).IsPositive` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis easy 16/0 Mathlib/Analysis/InnerProductSpace/Positive.lean 1 1 ['github-actions'] nobody
2-45209
2 days ago
7-57751
7 days ago
7-57755
7 days
28587 vihdzp
author:vihdzp
feat: irreducible polynomial has positive degree --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
12/2 Mathlib/Algebra/Polynomial/FieldDivision.lean 1 1 ['github-actions', 'lauramonk'] nobody
2-44978
2 days ago
2-71063
2 days ago
2-71057
2 days
28549 themathqueen
author:themathqueen
feat(Analysis/InnerProductSpace/Positive): `LinearIsometryEquiv ∘ T ∘ LinearIsometryEquiv.symm` is positive iff `T` is --- - [x] depends on: #28548 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-analysis easy 8/0 Mathlib/Analysis/InnerProductSpace/Positive.lean 1 3 ['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] nobody
1-14139
1 day ago
1-14161
1 day ago
1-16815
1 day
28401 themathqueen
author:themathqueen
chore(LinearAlgebra/Matrix/HermitianFunctionalCalculus): moving and renaming stuff This moves the results about `spectrum` from `Matrix/HermitianFunctionalCalculus` to `Matrix/Spectrum` so that we can use them in other files. This also renames `Matrix.IsHermitian.eigenvalues_eq_spectrum_real`, as it should be `Matrix.IsHermitian.spectrum_real_eq_range_eigenvalues` since it states: `spectrum ℝ A = Set.range hA.eigenvalues` and not the other way around. Also added a result for what the `𝕜`-spectrum of a Hermitian matrix is. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
26/18 Mathlib/LinearAlgebra/Matrix/HermitianFunctionalCalculus.lean,Mathlib/LinearAlgebra/Matrix/Spectrum.lean 2 1 ['JonBannon', 'github-actions'] nobody
0-76395
21 hours ago
4-19274
4 days ago
6-52028
6 days
28176 vihdzp
author:vihdzp
chore: add `simp` attribute to `abs_mul` See [Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/abs_mul.20simp). --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
3/3 Mathlib/Algebra/Order/Ring/Abs.lean,Mathlib/NumberTheory/Ostrowski.lean 2 4 ['github-actions', 'kbuzzard', 'leanprover-bot'] jcommelin
assignee:jcommelin
0-58764
16 hours ago
10-16258
10 days ago
10-55377
10 days
28099 themathqueen
author:themathqueen
feat(LinearAlgebra/Matrix/Spectrum): the eigenvalues of Hermitian `A` are all `0` iff `A = 0` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-algebra easy
label:t-algebra$
7/0 Mathlib/LinearAlgebra/Matrix/Spectrum.lean 1 2 ['github-actions', 'themathqueen'] riccardobrasca
assignee:riccardobrasca
0-17092
4 hours ago
10-27979
10 days ago
13-19568
13 days
28678 vihdzp
author:vihdzp
feat: well-founded instances for `ULift` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) t-order easy 9/0 Mathlib/Order/WellFounded.lean 1 4 ['eric-wieser', 'github-actions'] nobody
0-16473
4 hours ago
0-63984
17 hours ago
0-10221
2 hours

PRs on the review queue labelled 'tech debt' or 'longest-pole'

Number Author Title Description Labels +/- Modified files (first 100) 📝 💬 All users who commented or reviewed Assignee(s) Updated Last status change total time in review
25770 Parcly-Taxel
author:Parcly-Taxel
chore: fix more induction/recursor branch names These were found using the regex `\| h. =>` and `def.*rec.*\(h. :`. tech debt 75/68 Mathlib/Analysis/Convolution.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/Data/Fin/Tuple/Basic.lean,Mathlib/Data/Fin/Tuple/NatAntidiagonal.lean,Mathlib/Data/Seq/Computation.lean,Mathlib/Data/Set/Card.lean,Mathlib/Data/WSeq/Basic.lean,Mathlib/Logic/Function/Iterate.lean,Mathlib/NumberTheory/ArithmeticFunction.lean,Mathlib/Order/SuccPred/Archimedean.lean,Mathlib/Order/Synonym.lean 11 16 ['Parcly-Taxel', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] Vierkantor
assignee:Vierkantor
11-79496
11 days ago
12-38380
12 days ago
67-66008
67 days
25774 Parcly-Taxel
author:Parcly-Taxel
chore: deprime `induction` in `AlgebraicTopology/CategoryTheory` Most replacements that are also in #23676 have been copied over, but some have been optimised further. tech debt 130/121 Mathlib/AlgebraicTopology/DoldKan/Decomposition.lean,Mathlib/AlgebraicTopology/DoldKan/Degeneracies.lean,Mathlib/AlgebraicTopology/DoldKan/NCompGamma.lean,Mathlib/AlgebraicTopology/DoldKan/Projections.lean,Mathlib/AlgebraicTopology/SimplexCategory/MorphismProperty.lean,Mathlib/AlgebraicTopology/SimplicialObject/Split.lean,Mathlib/AlgebraicTopology/SimplicialSet/Degenerate.lean,Mathlib/AlgebraicTopology/SimplicialSet/NerveAdjunction.lean,Mathlib/AlgebraicTopology/SimplicialSet/StdSimplex.lean,Mathlib/CategoryTheory/Abelian/GrothendieckCategory/EnoughInjectives.lean,Mathlib/CategoryTheory/Abelian/GrothendieckCategory/Subobject.lean,Mathlib/CategoryTheory/Action/Concrete.lean,Mathlib/CategoryTheory/Action/Monoidal.lean,Mathlib/CategoryTheory/ComposableArrows.lean,Mathlib/CategoryTheory/Extensive.lean,Mathlib/CategoryTheory/Filtered/Basic.lean,Mathlib/CategoryTheory/Galois/Decomposition.lean,Mathlib/CategoryTheory/Galois/EssSurj.lean,Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean,Mathlib/CategoryTheory/Limits/Shapes/SequentialProduct.lean,Mathlib/CategoryTheory/Limits/VanKampen.lean,Mathlib/CategoryTheory/Quotient.lean,Mathlib/CategoryTheory/Sites/Sheaf.lean,Mathlib/CategoryTheory/Subobject/Basic.lean,Mathlib/CategoryTheory/Subobject/FactorThru.lean,Mathlib/CategoryTheory/Subobject/Lattice.lean,Mathlib/CategoryTheory/Triangulated/TStructure/Basic.lean 27 6 ['Parcly-Taxel', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'madvorak'] grunweg
assignee:grunweg
10-6485
10 days ago
22-39847
22 days ago
67-32339
67 days
27455 pechersky
author:pechersky
chore(NumberTheory/Padics/Hensel): rephrase using `aeval` This is easier to use at call site, because on need not pass `Polynomial.map (algebraMap _ _ )` in the use of `hensels_lemma` --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt t-algebra t-number-theory
label:t-algebra$
158/139 Mathlib/NumberTheory/Padics/Hensel.lean 1 2 ['github-actions', 'mathlib4-merge-conflict-bot'] jcommelin
assignee:jcommelin
10-6480
10 days ago
17-18509
17 days ago
26-47523
26 days
27339 pechersky
author:pechersky
chore(RingTheory/Laurent): use WithZero.exp to golf statements and proofs about valuation on K((X)) Done as part of refactor of Valued in #27314. This PR does not change any definitions. Instead, uses `WithZero.exp` instead of coercion + Multiplicative.ofAdd. And some helper simp lemmas about valuations of RatFunc vis a vis LaurentSeries. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt t-algebra t-number-theory
label:t-algebra$
78/77 Mathlib/FieldTheory/RatFunc/AsPolynomial.lean,Mathlib/RingTheory/LaurentSeries.lean,Mathlib/Topology/Algebra/Valued/WithVal.lean 3 2 ['faenuccio', 'github-actions'] Vierkantor
assignee:Vierkantor
8-32212
8 days ago
29-42769
29 days ago
30-365
30 days
25776 Parcly-Taxel
author:Parcly-Taxel
chore: deprime `induction` in `Analysis` I think this is very marginally dependent on #25770. tech debt t-analysis 256/208 Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/Constructions.lean,Mathlib/Analysis/Analytic/Inverse.lean,Mathlib/Analysis/BoxIntegral/Basic.lean,Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean,Mathlib/Analysis/BoxIntegral/Partition/Additive.lean,Mathlib/Analysis/BoxIntegral/Partition/Split.lean,Mathlib/Analysis/CStarAlgebra/Basic.lean,Mathlib/Analysis/CStarAlgebra/Multiplier.lean,Mathlib/Analysis/Calculus/ContDiff/Basic.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Calculus/ContDiff/FTaylorSeries.lean,Mathlib/Analysis/Calculus/ContDiff/Operations.lean,Mathlib/Analysis/Calculus/Deriv/ZPow.lean,Mathlib/Analysis/Calculus/InverseFunctionTheorem/ApproximatesLinearOn.lean,Mathlib/Analysis/Calculus/IteratedDeriv/Lemmas.lean,Mathlib/Analysis/Calculus/SmoothSeries.lean,Mathlib/Analysis/Convex/Combination.lean,Mathlib/Analysis/Convex/Radon.lean,Mathlib/Analysis/InnerProductSpace/Projection/FiniteDimensional.lean,Mathlib/Analysis/Normed/Algebra/Exponential.lean,Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean,Mathlib/Analysis/Seminorm.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean,Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Basic.lean,Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Analysis/SpecialFunctions/Pow/Real.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/EulerSineProd.lean 35 4 ['Parcly-Taxel', 'github-actions', 'leanprover-community-bot-assistant', 'madvorak', 'mathlib4-merge-conflict-bot'] grunweg
assignee:grunweg
5-6512
5 days ago
12-37480
12 days ago
67-49392
67 days
28517 Vierkantor
author:Vierkantor
chore(*): address some `@[simps]` porting notes Search for porting notes mentioning `simps` and fix the ones that are easy to fix. The search also caught some that refer to `simps` as in a `simp` set, so we fix them too. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt 54/76 Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean,Mathlib/AlgebraicGeometry/Spec.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/CategoryTheory/Limits/Cones.lean,Mathlib/CategoryTheory/Limits/Shapes/BinaryBiproducts.lean,Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean,Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean,Mathlib/CategoryTheory/Limits/Shapes/Pullback/Cospan.lean,Mathlib/CategoryTheory/Localization/Predicate.lean,Mathlib/CategoryTheory/Monad/Adjunction.lean,Mathlib/CategoryTheory/Monad/Algebra.lean,Mathlib/CategoryTheory/Monad/Basic.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Preadditive/Mat.lean,Mathlib/LinearAlgebra/LinearIndependent/Defs.lean,Mathlib/Order/OmegaCompletePartialOrder.lean,Mathlib/RepresentationTheory/Rep.lean,Mathlib/RingTheory/GradedAlgebra/Basic.lean,Mathlib/Topology/Homotopy/HomotopyGroup.lean 19 1 ['github-actions'] nobody
2-37748
2 days ago
2-37748
2 days ago
2-37733
2 days
28650 Vierkantor
author:Vierkantor
chore(Analysis): address a lot of porting notes Go through all porting notes in the Analysis folder and address those with an obvious resolution. A few won'tfixes where Lean 4 is stricter about unfolding or where `@[simp]` attributes were already wrong; otherwise most are easily resolved. --- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) tech debt t-analysis 69/134 Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/Uniqueness.lean,Mathlib/Analysis/Asymptotics/Lemmas.lean,Mathlib/Analysis/BoxIntegral/Partition/Basic.lean,Mathlib/Analysis/BoxIntegral/Partition/Tagged.lean,Mathlib/Analysis/CStarAlgebra/Matrix.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/FDeriv/Prod.lean,Mathlib/Analysis/Calculus/Implicit.lean,Mathlib/Analysis/Convex/Body.lean,Mathlib/Analysis/Convex/Gauge.lean,Mathlib/Analysis/Convex/Intrinsic.lean,Mathlib/Analysis/Convex/SimplicialComplex/Basic.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/InnerProductSpace/Adjoint.lean,Mathlib/Analysis/InnerProductSpace/Orientation.lean,Mathlib/Analysis/InnerProductSpace/PiL2.lean,Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean,Mathlib/Analysis/InnerProductSpace/Projection/FiniteDimensional.lean,Mathlib/Analysis/InnerProductSpace/TwoDim.lean,Mathlib/Analysis/Matrix.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Analysis/Normed/Group/AddTorsor.lean,Mathlib/Analysis/Normed/Group/Basic.lean,Mathlib/Analysis/Normed/Group/Quotient.lean,Mathlib/Analysis/Normed/Group/Rat.lean,Mathlib/Analysis/Normed/Group/SemiNormedGrp/Kernels.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Analysis/Normed/Module/Basic.lean,Mathlib/Analysis/Normed/Operator/Banach.lean,Mathlib/Analysis/Normed/Operator/BoundedLinearMaps.lean,Mathlib/Analysis/Normed/Ring/Lemmas.lean,Mathlib/Analysis/Normed/Unbundled/RingSeminorm.lean,Mathlib/Analysis/NormedSpace/Extend.lean,Mathlib/Analysis/NormedSpace/MStructure.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/Completeness.lean,Mathlib/Analysis/Seminorm.lean,Mathlib/Analysis/SpecialFunctions/PolarCoord.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean,Mathlib/LinearAlgebra/FiniteDimensional/Defs.lean 41 11 ['Vierkantor', 'github-actions'] nobody
0-65425
18 hours ago
1-36338
1 day ago
1-36324
1 day