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
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.
---
[](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 |
90-79698 2 months ago |
118-77255 3 months ago |
118-77305 118 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 (α → β) (α →₀ (α → β))`
---
[](https://gitpod.io/from-referrer/)
|
t-data |
7/4 |
Mathlib/Data/Finsupp/Pointwise.lean |
1 |
6 |
['Paul-Lez', 'eric-wieser', 'github-actions'] |
nobody |
86-21990 2 months ago |
128-10288 4 months ago |
128-10336 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`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
95/0 |
Mathlib/Data/Nat/Factors.lean |
1 |
1 |
['github-actions'] |
nobody |
58-67319 1 month ago |
58-67342 1 month ago |
58-81257 58 days |
22039 |
YaelDillies author:YaelDillies |
feat: simproc for computing `Finset.Ixx` of natural numbers |
---
- [x] depends on: #22290
- [x] depends on: #22559
[](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-33492 1 month ago |
126-46875 4 months ago |
182-7593 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 |
47-83413 1 month ago |
47-83544 1 month ago |
47-83595 47 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
[](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-55930 1 month ago |
49-70698 1 month ago |
49-71256 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-54795 1 month ago |
44-57304 1 month ago |
44-57358 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.
[](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-25896 1 month ago |
36-25920 1 month ago |
198-13876 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`.
---
[](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-10309 1 month ago |
33-74087 1 month ago |
33-74133 33 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-41713 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-71253 24 days ago |
24-72069 24 days ago |
24-72684 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-28879 24 days ago |
24-28885 24 days ago |
24-28936 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-14922 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?
[](https://gitpod.io/from-referrer/)
|
large-import
t-data
|
220/3 |
Mathlib/Data/Real/Embedding.lean |
1 |
1 |
['github-actions'] |
nobody |
24-8850 24 days ago |
24-8857 24 days ago |
24-8909 24 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 |
22-2339 22 days ago |
22-2351 22 days ago |
22-2397 22 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-33517 21 days ago |
21-33517 21 days ago |
21-33727 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.
---
[](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-12938 21 days ago |
32-3614 1 month ago |
52-50172 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
[](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-12937 21 days ago |
46-32637 1 month ago |
58-83520 58 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.
---
[](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-12930 21 days ago |
42-17331 1 month ago |
42-17377 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-12929 21 days ago |
40-50132 1 month ago |
40-50176 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.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/2 |
Mathlib/Data/Fintype/Defs.lean |
1 |
1 |
['github-actions', 'vihdzp'] |
nobody |
21-9110 21 days ago |
21-12989 21 days ago |
21-13034 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`)
---
[](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-73027 20 days ago |
66-73793 2 months ago |
66-73838 66 days |
27738 |
ChrisHughes24 author:ChrisHughes24 |
feat(Rat): Decidable instance for IsSquare |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
3/0 |
Mathlib/Data/Rat/Lemmas.lean |
1 |
1 |
['github-actions'] |
nobody |
20-49725 20 days ago |
20-49729 20 days ago |
20-49776 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`
---
[](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-44897 20 days ago |
54-37529 1 month ago |
59-34536 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 ℕ+.
---
[](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-44895 20 days ago |
55-16716 1 month ago |
55-16760 55 days |
26790 |
FlAmmmmING author:FlAmmmmING |
feat(Combinatorics/Enumerative/Bell.lean): define standard Bell number |
---
[](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-44893 20 days ago |
46-25572 1 month ago |
46-25617 46 days |
26793 |
FlAmmmmING author:FlAmmmmING |
feat(Algebra/Group /ForwardDiff.lean): add five theorems for forward difference |
---
[](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-44892 20 days ago |
33-71482 1 month ago |
46-23968 46 days |
27742 |
ChrisHughes24 author:ChrisHughes24 |
feat(Nat/nth): inequalities about Nat.nth |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
58/0 |
Mathlib/Data/Nat/Nth.lean |
1 |
1 |
['github-actions'] |
nobody |
20-44173 20 days ago |
20-44181 20 days ago |
20-44226 20 days |
25225 |
xcloudyunx author:xcloudyunx |
feat(Combinatorics/SimpleGraph): Eulerian walk in connected graph contains all vertices |
---
[](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-7989 20 days ago |
85-85940 2 months ago |
85-85993 85 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`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
19/0 |
Mathlib/Data/ENat/Lattice.lean |
1 |
1 |
['github-actions'] |
ericrbg assignee:ericrbg |
20-7985 20 days ago |
58-67269 1 month ago |
58-75018 58 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)
---
[](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-7985 20 days ago |
67-38550 2 months ago |
67-42254 67 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.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
96/120 |
Archive/Wiedijk100Theorems/AscendingDescendingSequences.lean |
1 |
12 |
['b-mehta', 'github-actions', 'grunweg'] |
ericrbg assignee:ericrbg |
20-7981 20 days ago |
55-46529 1 month ago |
57-15066 57 days |
26909 |
gasparattila author:gasparattila |
feat(LinearAlgebra/Projectivization/Subspace): correspondence between linear and projective subspaces |
---
[](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-7979 20 days ago |
43-11371 1 month ago |
43-11419 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.
---
[](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-3421 20 days ago |
76-8330 2 months ago |
76-8387 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`.
---
[](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-3419 20 days ago |
58-28219 1 month ago |
61-85868 61 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.
---
[](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-3413 20 days ago |
44-55097 1 month ago |
44-55144 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
[](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-3409 20 days ago |
38-49736 1 month ago |
38-49764 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
[](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-3407 20 days ago |
31-41346 1 month ago |
31-41392 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`.
---
[](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-54686 19 days ago |
19-54709 19 days ago |
44-40449 44 days |
25069 |
erdOne author:erdOne |
feat(EllipticCurve): rational points of singular nodal cubics |
---
[](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-46539 19 days ago |
91-75213 2 months ago |
91-75267 91 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
[](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-46535 19 days ago |
46-32803 1 month ago |
46-37080 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-46532 19 days ago |
66-39220 2 months ago |
66-39269 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
[](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-46507 19 days ago |
38-60387 1 month ago |
39-5844 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.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis
t-number-theory
|
51/84 |
Mathlib/NumberTheory/SelbergSieve.lean |
1 |
1 |
['github-actions'] |
nobody |
19-36986 19 days ago |
19-37009 19 days ago |
19-37044 19 days |
26738 |
javra author:javra |
feat(AlgebraicToplogy/SimplexCategory): add notation for faces and degeneracies general truncated simplex categories |
---
[](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 |
19-28997 19 days ago |
19-40082 19 days ago |
33-31084 33 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-23464 19 days ago |
65-12030 2 months ago |
65-12078 65 days |
23460 |
Timeroot author:Timeroot |
feat: Definition of `Clone` |
Basics about Clones. Part of #20051
---
- [x] depends on: #23459
[](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 |
18-80172 18 days ago |
57-72215 1 month ago |
57-73505 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
[](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 |
18-80172 18 days ago |
100-84551 3 months ago |
166-84533 166 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.
---
[](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 |
18-80171 18 days ago |
50-1511 1 month ago |
69-52095 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`.
---
[](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 |
18-80170 18 days ago |
68-34522 2 months ago |
68-34506 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
[](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 |
18-80168 18 days ago |
56-51036 1 month ago |
56-51294 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)
---
[](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 |
18-80167 18 days ago |
54-72102 1 month ago |
54-72226 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
[](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 |
18-80165 18 days ago |
34-35549 1 month ago |
34-35710 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
---
[](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-47684 18 days ago |
37-42879 1 month ago |
38-7386 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
---
[](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-28491 18 days ago |
18-28491 18 days ago |
18-82030 18 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-26435 18 days ago |
32-73181 1 month ago |
54-80164 54 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 |
17-80145 17 days ago |
69-69572 2 months ago |
69-69553 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 |
17-80144 17 days ago |
48-52575 1 month ago |
61-55162 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.
---
[](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 |
17-80142 17 days ago |
62-65852 2 months ago |
62-65834 62 days |
26240 |
grunweg author:grunweg |
perf(CommandLinterLinter): use Substring more |
Probably, these changes make little difference, but let's find out.
---
[](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 |
17-80141 17 days ago |
61-2717 2 months ago |
61-7328 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.
---
[](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 |
17-80140 17 days ago |
57-14790 1 month ago |
57-14836 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.
---
[](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 |
17-80136 17 days ago |
39-53425 1 month ago |
39-53498 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.
[](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-23979 17 days ago |
69-51945 2 months ago |
69-51927 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`)
---
[](https://gitpod.io/from-referrer/)
|
t-data |
144/5 |
Mathlib/Data/PFunctor/Univariate/Basic.lean |
1 |
19 |
['alexkeizer', 'eric-wieser', 'github-actions', 'quangvdao'] |
nobody |
16-82728 16 days ago |
42-81237 1 month ago |
42-81282 42 days |
25042 |
alreadydone author:alreadydone |
feat(Topology): restriction/extension of Trivialization and composition with Homeomorph |
---
- [x] depends on: #25041
[](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 |
16-80148 16 days ago |
36-45612 1 month ago |
92-28879 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)
[](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 |
16-80145 16 days ago |
63-81886 2 months ago |
63-81932 63 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!
---
[](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 |
16-80144 16 days ago |
58-34034 1 month ago |
58-38665 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?`.
---
[](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 |
16-80142 16 days ago |
25-1913 25 days ago |
39-63659 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 |
16-80141 16 days ago |
53-73014 1 month ago |
53-77765 53 days |
26510 |
alreadydone author:alreadydone |
feat(Matroid): exchange lemmas involving closure |
---
for #24350
[](https://gitpod.io/from-referrer/)
|
t-data
t-combinatorics
|
37/0 |
Mathlib/Data/Matroid/Closure.lean |
1 |
1 |
['github-actions'] |
kmill assignee:kmill |
16-80140 16 days ago |
52-32160 1 month ago |
52-32204 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
---
[](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 |
16-80137 16 days ago |
29-8451 29 days ago |
40-23325 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)
```
---
[](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-61066 16 days ago |
16-61066 16 days ago |
38-27765 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
---
[](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-47470 16 days ago |
16-47470 16 days ago |
41-50972 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-47147 16 days ago |
16-47147 16 days ago |
57-56560 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.
-------
[](https://gitpod.io/from-referrer/)
|
t-data |
459/212 |
Mathlib/Data/Ordmap/Ordnode.lean |
1 |
3 |
['eric-wieser', 'github-actions', 'grunweg'] |
nobody |
16-44351 16 days ago |
16-52867 16 days ago |
16-52913 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-41007 16 days ago |
16-61921 16 days ago |
16-61966 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
---
[](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-24342 16 days ago |
37-59265 1 month ago |
37-59335 37 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`
---
[](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 |
16-20147 16 days ago |
16-20147 16 days ago |
33-46140 33 days |
27944 |
grunweg author:grunweg |
feat: lint module names with a period |
This would have caught the mis-placed file in #27796.
---
[](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-19150 16 days ago |
16-19220 16 days ago |
16-19203 16 days |
27245 |
rirarika author:rirarika |
MvPolynomial.Irreducible |
---
[](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-13991 16 days ago |
33-55013 1 month ago |
33-55056 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
[](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-10901 16 days ago |
95-55749 3 months ago |
145-48299 145 days |
22231 |
pechersky author:pechersky |
feat(Algebra/Valued): `AdicExpansion` initial defns |
---
[](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 |
15-80153 15 days ago |
177-72888 5 months ago |
177-73009 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 |
15-80151 15 days ago |
62-38339 2 months ago |
62-38397 62 days |
26301 |
Ivan-Sergeyev author:Ivan-Sergeyev |
feat(LinearAlgebra/Matrix/Determinant/TotallyUnimodular): |
Empty matrices are totally unimodular.
---
[](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 |
15-80150 15 days ago |
58-34719 1 month ago |
58-34762 58 days |
27108 |
pechersky author:pechersky |
chore(RingTheory/AdicValuation): golf using WithZero.log |
with helper lemma of how `log` preserves order
---
[](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 |
15-80147 15 days ago |
37-29405 1 month ago |
37-39196 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)
---
[](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 |
15-80146 15 days ago |
36-1959 1 month ago |
36-2001 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
[](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 |
15-80141 15 days ago |
26-23820 26 days ago |
26-23804 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
---
[](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 |
15-75911 15 days ago |
15-75930 15 days ago |
43-15105 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.
---
[](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-49213 15 days ago |
15-49213 15 days ago |
59-5435 59 days |
26054 |
FMLJohn author:FMLJohn |
feat(RingTheory/GradedAlgebra/Homogeneous/Subsemiring): homogeneous subsemirings of a graded semiring |
---
[](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-49091 15 days ago |
15-49091 15 days ago |
64-17811 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-49064 15 days ago |
15-49064 15 days ago |
65-63322 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
[](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-48985 15 days ago |
15-48985 15 days ago |
102-6043 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
[](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-48890 15 days ago |
15-48890 15 days ago |
49-84992 49 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
[](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-48879 15 days ago |
15-48879 15 days ago |
168-49695 168 days |
26644 |
kckennylau author:kckennylau |
feat(SetTheory/ZFC): Define the language of sets and state the ZFC axioms |
---
[](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-44885 15 days ago |
15-44905 15 days ago |
36-74243 36 days |
26078 |
kckennylau author:kckennylau |
feat(AlgebraicGeometry): add x, y, px, py for points on elliptic curves |
---
Split from #25218.
[](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-44334 15 days ago |
63-40119 2 months ago |
63-40163 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
[](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-20321 15 days ago |
15-23606 15 days ago |
29-41146 29 days |
27995 |
kckennylau author:kckennylau |
feat(RingTheory/Valuation): alternate constructors for Valuation |
---
[](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-9479 15 days ago |
15-15643 15 days ago |
15-15625 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.
---
[](https://gitpod.io/from-referrer/)
|
|
172/0 |
Counterexamples.lean,Counterexamples/DiscreteTopologyWithNontrivialValuation.lean |
2 |
n/a |
['github-actions', 'kckennylau', 'pechersky'] |
nobody |
15-8490 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` :)
---
[](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-7710 15 days ago |
15-7805 15 days ago |
17-8475 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).
---
[](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 |
14-80160 14 days ago |
98-35601 3 months ago |
183-8633 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 |
14-80157 14 days ago |
69-32357 2 months ago |
69-32339 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.
---
[](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 |
14-80155 14 days ago |
58-25180 1 month ago |
61-81180 61 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
[](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 |
14-80154 14 days ago |
38-48443 1 month ago |
38-50142 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 |
14-80152 14 days ago |
48-28095 1 month ago |
48-28146 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).
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
56/0 |
Mathlib/Topology/MetricSpace/Bounded.lean |
1 |
1 |
['github-actions'] |
grunweg assignee:grunweg |
14-80151 14 days ago |
47-13820 1 month ago |
47-13802 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.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
46/0 |
Mathlib/Topology/Constructions.lean |
1 |
2 |
['github-actions', 'peabrainiac'] |
fpvandoorn assignee:fpvandoorn |
14-80148 14 days ago |
24-83248 24 days ago |
24-83270 24 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`.
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
88/0 |
Mathlib/Combinatorics/SimpleGraph/Bipartite.lean |
1 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
14-80147 14 days ago |
23-19758 23 days ago |
23-19808 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.
[](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-55878 14 days ago |
26-30189 26 days ago |
35-63830 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-50214 14 days ago |
14-61987 14 days ago |
14-67351 14 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
---
[](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 |
13-80160 13 days ago |
23-57434 23 days ago |
59-37081 59 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 |
13-80160 13 days ago |
23-78916 23 days ago |
69-41197 69 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
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
703/0 |
Mathlib.lean,Mathlib/Combinatorics/Graph/Subgraph.lean |
2 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
13-80159 13 days ago |
47-5237 1 month ago |
47-5280 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.
[](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 |
13-80158 13 days ago |
24-27184 24 days ago |
38-3261 38 days |
27635 |
Ruben-VandeVelde author:Ruben-VandeVelde |
chore: deprecate SubsemiringClass.coe_pow |
---
[](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 |
13-80151 13 days ago |
22-35372 22 days ago |
22-38370 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 |
13-80151 13 days ago |
22-2032 22 days ago |
22-2077 22 days |
27229 |
WilliamCoram author:WilliamCoram |
feat(GroupTheory/DoubleCoset): multiple lemmas |
From FLT
---
[](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-37630 13 days ago |
13-38363 13 days ago |
29-86328 29 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.
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
28/0 |
Mathlib/Data/Rat/Lemmas.lean |
1 |
14 |
['github-actions', 'sinianluoye', 'themathqueen'] |
nobody |
13-20345 13 days ago |
14-79748 14 days ago |
15-21401 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
[](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-14329 13 days ago |
unknown |
unknown |
23940 |
YaelDillies author:YaelDillies |
feat: polytopes |
From Toric
Co-authored-by: Matthew Johnson
---
[](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 |
12-80161 12 days ago |
70-13655 2 months ago |
130-85776 130 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 |
12-80158 12 days ago |
20-29807 20 days ago |
47-17650 47 days |
27118 |
Timeroot author:Timeroot |
feat(Matrix/Charpoly/Eigs): Roots of Matrix.charpoly are the eigenvalues. |
---
[](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 |
12-80155 12 days ago |
37-61706 1 month ago |
37-61749 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.
---
[](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 |
12-80153 12 days ago |
28-12423 28 days ago |
28-12468 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!
[](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 |
12-80151 12 days ago |
22-30907 22 days ago |
22-30953 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.
---
[](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-43935 12 days ago |
24-27232 24 days ago |
24-27266 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-31418 12 days ago |
12-31501 12 days ago |
12-39132 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).
---
[](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-22277 12 days ago |
25-81796 25 days ago |
25-81780 25 days |
26829 |
pechersky author:pechersky |
feat(RingTheory/Valuation): Valuation.leAddSubgroup and ideal/submodule versions of ltAddSubgroup |
Extracted from #25450 without changing how Valued works
---
[](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 |
12-15332 12 days ago |
12-16105 12 days ago |
44-77024 44 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.
[](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 |
11-80178 11 days ago |
101-18771 3 months ago |
148-70988 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 |
11-80178 11 days ago |
83-18507 2 months ago |
83-36888 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.
[](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 |
11-80177 11 days ago |
46-55394 1 month ago |
68-13761 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.
[](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 |
11-80175 11 days ago |
21-51459 21 days ago |
38-81552 38 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.
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
16/0 |
Mathlib/Combinatorics/SimpleGraph/Metric.lean |
1 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
11-80172 11 days ago |
26-37829 26 days ago |
26-37927 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
---
[](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 |
11-80169 11 days ago |
21-70181 21 days ago |
21-70174 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-66763 11 days ago |
12-25647 12 days ago |
67-53274 67 days |
28140 |
YaelDillies author:YaelDillies |
feat: a `PointedCone`-valued version of `Submodule.span` |
This is merely to guide typing.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
t-convex-geometry
toric
|
10/1 |
Mathlib/Geometry/Convex/Cone/Pointed.lean |
1 |
1 |
['github-actions'] |
nobody |
11-57516 11 days ago |
11-57516 11 days ago |
11-57664 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
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
33/0 |
Mathlib/Topology/Algebra/Valued/ValuationTopology.lean |
1 |
1 |
['github-actions'] |
dagurtomas assignee:dagurtomas |
10-80144 10 days ago |
33-6396 1 month ago |
33-6439 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 |
10-80137 10 days ago |
18-17286 18 days ago |
18-17268 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.
---
[](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-66715 10 days ago |
12-57361 12 days ago |
12-57406 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.
[](https://gitpod.io/from-referrer/)
|
easy |
2/2 |
Cache/Main.lean |
1 |
1 |
['github-actions'] |
nobody |
10-43455 10 days ago |
11-6481 11 days ago |
11-6465 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`.
---
[](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-15346 10 days ago |
10-15346 10 days ago |
24-8182 24 days |
28195 |
gasparattila author:gasparattila |
feat: separating a convex compact set and its neighborhood with a polytope |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-analysis
|
26/1 |
Mathlib/Analysis/Normed/Affine/Convex.lean |
1 |
2 |
['FrankieNC', 'github-actions'] |
nobody |
10-5630 10 days ago |
10-9687 10 days ago |
10-9741 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 |
9-80152 9 days ago |
22-27114 22 days ago |
67-19605 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`
---
[](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 |
9-80147 9 days ago |
17-5776 17 days ago |
26-34789 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!
[](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-64667 9 days ago |
12-32963 12 days ago |
12-33406 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-58238 9 days ago |
20-71436 20 days ago |
20-76334 20 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
[](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-39362 9 days ago |
9-39380 9 days ago |
20-752 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-34456 9 days ago |
13-46238 13 days ago |
13-46286 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-34351 9 days ago |
14-31143 14 days ago |
14-31204 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
---
[](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-9944 9 days ago |
9-9944 9 days ago |
11-58238 11 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`).
---
[](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 |
8-85760 8 days ago |
9-2438 9 days ago |
15-12604 15 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)
---
[](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 |
8-85139 8 days ago |
17-46490 17 days ago |
17-46472 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.
---
[](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 |
8-80175 8 days ago |
71-67485 2 months ago |
87-13020 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.
---
[](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 |
8-80173 8 days ago |
34-31068 1 month ago |
53-20501 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
[](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 |
8-80171 8 days ago |
46-49708 1 month ago |
46-52754 46 days |
26968 |
vihdzp author:vihdzp |
feat(Order/Concept): sets in a concept are codisjoint |
...and other small lemmata.
---
- [x] depends on: #26976
[](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 |
8-80170 8 days ago |
37-84073 1 month ago |
38-27225 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.
---
[](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 |
8-80170 8 days ago |
40-32897 1 month ago |
40-32949 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.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis
documentation
|
13/14 |
Mathlib/Analysis/BoxIntegral/Partition/Filter.lean |
1 |
2 |
['BoltonBailey', 'github-actions'] |
hrmacbeth assignee:hrmacbeth |
8-80169 8 days ago |
18-25487 18 days ago |
39-2661 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
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
11/0 |
Mathlib/RingTheory/Polynomial/Quotient.lean |
1 |
4 |
['alreadydone', 'github-actions'] |
erdOne assignee:erdOne |
8-80168 8 days ago |
16-20181 16 days ago |
27-11936 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.
---
[](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 |
8-80165 8 days ago |
19-39867 19 days ago |
19-39892 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
---
[](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-64547 8 days ago |
8-64568 8 days ago |
62-72608 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-54881 8 days ago |
9-48573 9 days ago |
9-48626 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
[](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-50978 8 days ago |
unknown |
unknown |
28241 |
alreadydone author:alreadydone |
chore(Data): `SetLike Finset` |
---
[](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-45325 8 days ago |
8-45325 8 days ago |
8-45309 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.
---
[](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-44237 8 days ago |
38-60106 1 month ago |
38-60089 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.
[](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-41767 8 days ago |
8-41774 8 days ago |
9-31659 9 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.
[](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 |
8-39281 8 days ago |
8-40793 8 days ago |
8-41309 8 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
---
[](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-24189 8 days ago |
8-24190 8 days ago |
22-40775 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)
[](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-23195 8 days ago |
9-56468 9 days ago |
59-5243 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.
---
[](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-19479 8 days ago |
29-30036 29 days ago |
29-74031 29 days |
25804 |
erdOne author:erdOne |
feat: `∑ z ∈ L, ‖z - x‖⁻ʳ` converges for lattices `L` |
---
[](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-12631 8 days ago |
69-42605 2 months ago |
69-42587 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-10817 8 days ago |
31-31103 1 month ago |
31-31155 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
[](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 |
7-80165 7 days ago |
15-48885 15 days ago |
93-24662 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`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
31/0 |
Mathlib/Data/ULift.lean |
1 |
14 |
['eric-wieser', 'github-actions', 'robertmaxton42'] |
ericrbg assignee:ericrbg |
7-80164 7 days ago |
110-49921 3 months ago |
110-57832 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.
---
[](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 |
7-80163 7 days ago |
99-67968 3 months ago |
99-68019 99 days |
26357 |
javra author:javra |
feat(CategoryTheory): linear categories as `ModuleCat R`-enriched categories |
Continues #23826.
---
[](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 |
7-80161 7 days ago |
16-47157 16 days ago |
57-35377 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
---
[](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 |
7-80158 7 days ago |
16-47606 16 days ago |
38-31368 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
[](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 |
7-80157 7 days ago |
20-40744 20 days ago |
35-58839 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`.
---
[](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 |
7-80156 7 days ago |
22-31370 22 days ago |
22-31415 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 |
7-80155 7 days ago |
22-1649 22 days ago |
22-1693 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-66371 7 days ago |
7-66371 7 days ago |
7-76325 7 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
---
[](https://gitpod.io/from-referrer/)
|
new-contributor |
42/0 |
Mathlib/Geometry/Manifold/ContMDiff/Constructions.lean |
1 |
1 |
['github-actions'] |
nobody |
7-64884 7 days ago |
8-31589 8 days ago |
8-31582 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
---
[](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-61312 7 days ago |
8-13731 8 days ago |
24-26250 24 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
---
[](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 |
7-55044 7 days ago |
9-25592 9 days ago |
9-25646 9 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
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
24/26 |
Mathlib/Data/TypeVec.lean |
1 |
6 |
['Equilibris', 'alexkeizer', 'github-actions'] |
nobody |
7-53360 7 days ago |
7-53360 7 days ago |
11-48958 11 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
---
[](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 |
7-36740 7 days ago |
7-62350 7 days ago |
7-62396 7 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`.
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-topology
easy
|
2/0 |
Mathlib/Topology/Path.lean |
1 |
1 |
['github-actions', 'kckennylau', 'plp127'] |
nobody |
7-34345 7 days ago |
7-34345 7 days ago |
10-26469 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` ]
---
[](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-31545 7 days ago |
7-62363 7 days ago |
7-65073 7 days |
28350 |
themathqueen author:themathqueen |
feat(Topology/Algebra/Module/LinearMap): `range (f.smulRight x) = span {x}` |
---
[](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-24531 7 days ago |
7-25839 7 days ago |
7-28430 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`.)
---
[](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-18074 7 days ago |
7-45557 7 days ago |
7-45541 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 `α`.
---
[](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-15827 7 days ago |
10-31825 10 days ago |
10-31870 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.
---
[](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-15232 7 days ago |
63-24533 2 months ago |
63-24536 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!
[](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-13748 7 days ago |
8-54914 8 days ago |
16-45265 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
[](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-12767 7 days ago |
24-45708 24 days ago |
61-84034 61 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
[](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-8631 7 days ago |
7-10419 7 days ago |
7-10402 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
[](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-8116 7 days ago |
17-84471 17 days ago |
17-84454 17 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.
---
[](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 |
6-80169 6 days ago |
100-69213 3 months ago |
124-6929 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
[](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 |
6-80168 6 days ago |
20-40957 20 days ago |
69-57120 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
```
[](https://gitpod.io/from-referrer/)
|
t-data |
21/3 |
Mathlib/Data/Nat/Factors.lean |
1 |
5 |
['Ruben-VandeVelde', 'github-actions', 'qawbecrdtey'] |
ericrbg assignee:ericrbg |
6-80167 6 days ago |
65-45570 2 months ago |
65-54171 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 |
6-80166 6 days ago |
16-47121 16 days ago |
57-72813 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 |
6-80161 6 days ago |
20-28517 20 days ago |
20-28570 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
---
[](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 |
6-80160 6 days ago |
20-3967 20 days ago |
20-3998 20 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.
---
[](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 |
6-78878 6 days ago |
7-18479 7 days ago |
7-25670 7 days |
28374 |
euprunin author:euprunin |
chore(Analysis/CStarAlgebra/Module): golf entire `map_top_submodule` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/5 |
Mathlib/Analysis/CStarAlgebra/Module/Synonym.lean |
1 |
1 |
['github-actions'] |
nobody |
6-68365 6 days ago |
6-69006 6 days ago |
6-69053 6 days |
28371 |
euprunin author:euprunin |
chore(Analysis/SpecialFunctions/Pow): golf entire `tendsto_rpow_atBot_of_base_gt_one` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/5 |
Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean |
1 |
1 |
['github-actions'] |
nobody |
6-68334 6 days ago |
6-69357 6 days ago |
6-69403 6 days |
28379 |
euprunin author:euprunin |
chore(Analysis/NormedSpace/OperatorNorm): golf entire `opNorm_subsingleton` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/5 |
Mathlib/Analysis/NormedSpace/OperatorNorm/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
6-67402 6 days ago |
6-67730 6 days ago |
6-67776 6 days |
28381 |
euprunin author:euprunin |
chore(Analysis/Asymptotics): golf `isLittleO_pow_sub_pow_sub` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/4 |
Mathlib/Analysis/Asymptotics/Lemmas.lean |
1 |
1 |
['github-actions'] |
nobody |
6-67177 6 days ago |
6-67219 6 days ago |
6-67268 6 days |
28384 |
euprunin author:euprunin |
chore(Algebra/Order/Ring): golf entire `cast_natAbs` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/4 |
Mathlib/Algebra/Order/Ring/Cast.lean |
1 |
1 |
['github-actions'] |
nobody |
6-66532 6 days ago |
6-66541 6 days ago |
6-66587 6 days |
28385 |
euprunin author:euprunin |
chore(Algebra/BigOperators/Finsupp): golf entire `Finsupp.sum_sum_index` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/4 |
Mathlib/Algebra/BigOperators/Finsupp/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
6-66452 6 days ago |
6-66462 6 days ago |
6-66507 6 days |
28378 |
euprunin author:euprunin |
chore(Algebra): golf entire `eq_lift_comp_mkRingHom` and `eq_liftAlgHom_comp_mkAlgHom` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
4/8 |
Mathlib/Algebra/RingQuot.lean |
1 |
1 |
['github-actions'] |
nobody |
6-56383 6 days ago |
6-68025 6 days ago |
6-68070 6 days |
28376 |
euprunin author:euprunin |
chore(Analysis/Calculus/Deriv): golf entire `differentiableAt_comp_const_add` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
2/6 |
Mathlib/Analysis/Calculus/Deriv/Add.lean |
1 |
1 |
['github-actions'] |
nobody |
6-56373 6 days ago |
6-68549 6 days ago |
6-68594 6 days |
28373 |
euprunin author:euprunin |
chore(AlgebraicGeometry/Morphisms): golf entire `isOpenImmersion_iff_stalk` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
1/4 |
Mathlib/AlgebraicGeometry/Morphisms/OpenImmersion.lean |
1 |
1 |
['github-actions'] |
nobody |
6-56066 6 days ago |
6-69127 6 days ago |
6-69181 6 days |
28398 |
euprunin author:euprunin |
chore(Data/TypeVec): deprecate `subtypeVal_diagSub` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/8 |
Mathlib/Data/TypeVec.lean |
1 |
1 |
['github-actions'] |
nobody |
6-54900 6 days ago |
6-54901 6 days ago |
6-54955 6 days |
28399 |
Ruben-VandeVelde author:Ruben-VandeVelde |
feat: ring-theoretic fractions in Rat |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
47/0 |
Mathlib.lean,Mathlib/RingTheory/Localization/Rat.lean |
2 |
0 |
[] |
nobody |
6-53110 6 days ago |
6-53179 6 days ago |
6-53162 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
---
[](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-46168 6 days ago |
6-46235 6 days ago |
52-13393 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.
[](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-45784 6 days ago |
7-61195 7 days ago |
40-35435 40 days |
28220 |
kim-em author:kim-em |
chore: cleanup three #adaptation_notes |
---
[](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-44339 6 days ago |
6-85235 6 days ago |
9-14737 9 days |
27288 |
themathqueen author:themathqueen |
chore(LinearAlgebra/TensorProduct/Basic): semi-linearize `map` and `lift` |
Semi-linearizing `TensorProduct.map`. Part of #27353.
---
[](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-43509 6 days ago |
16-6730 16 days ago |
27-30062 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-41906 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`.
---
[](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-39883 6 days ago |
7-13682 7 days ago |
7-13728 7 days |
28390 |
euprunin author:euprunin |
chore(Analysis/LocallyConvex): golf entire `polar_weak_closed` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/4 |
Mathlib/Analysis/LocallyConvex/Polar.lean |
1 |
1 |
['JonBannon', 'github-actions'] |
nobody |
6-38715 6 days ago |
6-65726 6 days ago |
6-65771 6 days |
28377 |
euprunin author:euprunin |
chore(Algebra/ContinuedFractions/Computation): golf `get?_of_eq_some_of_get?_intFractPair_stream_fr_ne_zero` |
---
[](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-38476 6 days ago |
6-68359 6 days ago |
6-68406 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]`.
---
[](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-37863 6 days ago |
14-19042 14 days ago |
14-19092 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
[](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-34919 6 days ago |
6-35250 6 days ago |
6-46734 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).
---
[](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-33278 6 days ago |
6-34365 6 days ago |
6-34349 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
[](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-32466 6 days ago |
6-32518 6 days ago |
125-85989 125 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` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
8/22 |
Mathlib/Analysis/SpecialFunctions/Pow/Real.lean |
1 |
2 |
['JonBannon', 'Ruben-VandeVelde', 'github-actions'] |
nobody |
6-32216 6 days ago |
6-68668 6 days ago |
6-68713 6 days |
28389 |
euprunin author:euprunin |
chore(Algebra/Group/Subgroup): golf entire `subgroupOf_sup` |
---
[](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-31715 6 days ago |
6-65856 6 days ago |
6-65901 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
---
[](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-28938 6 days ago |
6-28956 6 days ago |
6-32089 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.
---
[](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-23418 6 days ago |
8-1279 8 days ago |
8-9417 8 days |
23986 |
ShouxinZhang author:ShouxinZhang |
feat(FieldTheory/RatFunc): add RatFunc.toFractionRingAlgEquiv |
---
[](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-22318 6 days ago |
6-22325 6 days ago |
129-66065 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
```
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
3/0 |
Mathlib/Topology/Order/MonotoneContinuity.lean |
1 |
1 |
['github-actions'] |
nobody |
6-20723 6 days ago |
6-20723 6 days ago |
6-20799 6 days |
28419 |
euprunin author:euprunin |
chore(Data/Matroid/Rank): deprecate `Indep.exists_insert_of_encard_lt` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/8 |
Mathlib/Data/Matroid/Rank/ENat.lean |
1 |
1 |
['github-actions'] |
nobody |
6-17999 6 days ago |
6-17999 6 days ago |
6-18052 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-17813 6 days ago |
6-17813 6 days ago |
56-32487 56 days |
28420 |
euprunin author:euprunin |
chore(Data/Nat/Digits): deprecate `coe_int_ofDigits` (duplicate) |
---
[](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-17466 6 days ago |
6-17472 6 days ago |
6-17518 6 days |
28421 |
euprunin author:euprunin |
chore(Probability/Kernel): golf entire `measurable_condExpKernel` |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
1/6 |
Mathlib/Probability/Kernel/Condexp.lean |
1 |
1 |
['github-actions'] |
nobody |
6-17352 6 days ago |
6-17366 6 days ago |
6-17412 6 days |
28422 |
euprunin author:euprunin |
chore(Data/Fin): deprecate `Fin.mul_one'` (duplicate) |
---
[](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-15794 6 days ago |
6-17003 6 days ago |
6-17054 6 days |
28426 |
euprunin author:euprunin |
chore(NumberTheory/NumberField/CanonicalEmbedding): golf entire `measurableSet_interior_paramSet` |
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
1/6 |
Mathlib/NumberTheory/NumberField/CanonicalEmbedding/NormLeOne.lean |
1 |
1 |
['github-actions'] |
nobody |
6-14642 6 days ago |
6-14642 6 days ago |
6-14696 6 days |
28427 |
euprunin author:euprunin |
chore(LinearAlgebra/Matrix/Charpoly): deprecate `det_of_card_zero` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
3/7 |
Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean |
1 |
1 |
['github-actions'] |
nobody |
6-14640 6 days ago |
6-14645 6 days ago |
6-14690 6 days |
28428 |
euprunin author:euprunin |
chore(Topology): deprecate `mem_iff_one_sub_mem` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
|
3/5 |
Mathlib/Analysis/Normed/Unbundled/SmoothingSeminorm.lean,Mathlib/Topology/UnitInterval.lean |
2 |
1 |
['github-actions'] |
nobody |
6-14383 6 days ago |
6-14453 6 days ago |
6-14436 6 days |
28429 |
euprunin author:euprunin |
chore(GroupTheory/Perm/Cycle): golf entire `Disjoint.cycleType_mul` |
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
1/6 |
Mathlib/GroupTheory/Perm/Cycle/Type.lean |
1 |
1 |
['github-actions'] |
nobody |
6-14151 6 days ago |
6-14168 6 days ago |
6-14215 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.
---
[](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-14032 6 days ago |
6-59398 6 days ago |
6-62323 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
---
[](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-13807 6 days ago |
6-13828 6 days ago |
6-14604 6 days |
28430 |
euprunin author:euprunin |
chore(RingTheory/UniqueFactorizationDomain): deprecate `dvd_of_mem_normalizedFactors` (duplicate) |
---
[](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-13717 6 days ago |
6-13793 6 days ago |
6-13776 6 days |
28432 |
euprunin author:euprunin |
chore(CategoryTheory/Monoidal): golf entire `counitInv_app_comp_functor_map_η_inverse` |
---
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
2/5 |
Mathlib/CategoryTheory/Monoidal/Functor.lean |
1 |
1 |
['github-actions'] |
nobody |
6-13088 6 days ago |
6-13095 6 days ago |
6-13144 6 days |
28433 |
euprunin author:euprunin |
chore(Probability/Kernel): golf entire `snd_compProd_prodMkLeft` |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
1/5 |
Mathlib/Probability/Kernel/Composition/Prod.lean |
1 |
1 |
['github-actions'] |
nobody |
6-12947 6 days ago |
6-12984 6 days ago |
6-13030 6 days |
28434 |
euprunin author:euprunin |
chore(FieldTheory/IntermediateField/Adjoin): golf entire `adjoin.range_algebraMap_subset` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
2/5 |
Mathlib/FieldTheory/IntermediateField/Adjoin/Defs.lean |
1 |
1 |
['github-actions'] |
nobody |
6-12842 6 days ago |
6-12851 6 days ago |
6-12899 6 days |
28435 |
euprunin author:euprunin |
chore(RingTheory/Valuation): golf entire `algebraMap_injective` |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
2/5 |
Mathlib/RingTheory/Valuation/Extension.lean |
1 |
1 |
['github-actions'] |
nobody |
6-12702 6 days ago |
6-12716 6 days ago |
6-12761 6 days |
28437 |
euprunin author:euprunin |
chore(Data/Finset): deprecate `exists_ne_of_one_lt_card` (duplicate) |
---
[](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-11055 6 days ago |
6-11123 6 days ago |
6-11106 6 days |
28439 |
euprunin author:euprunin |
chore(LinearAlgebra/Matrix/Determinant): golf entire `det_eq_zero_of_not_linearIndependent_rows` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/5 |
Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
6-10789 6 days ago |
6-10796 6 days ago |
6-10843 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.
[](https://gitpod.io/from-referrer/)
|
t-data |
18/0 |
Mathlib/Data/Nat/Cast/Order/Field.lean |
1 |
1 |
['github-actions'] |
nobody |
6-4903 6 days ago |
6-4911 6 days ago |
6-4957 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
[](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-3021 6 days ago |
6-3220 6 days ago |
6-4683 6 days |
28386 |
euprunin author:euprunin |
chore(Analysis/InnerProductSpace/Projection): golf entire `orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/3 |
Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean |
1 |
2 |
['JonBannon', 'github-actions'] |
nobody |
5-83824 5 days ago |
6-66197 6 days ago |
6-66247 6 days |
28441 |
euprunin author:euprunin |
chore(GroupTheory/Perm): golf entire `mem_of_formPerm_ne_self` |
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
2/5 |
Mathlib/GroupTheory/Perm/List.lean |
1 |
1 |
['JonBannon', 'github-actions'] |
nobody |
5-83683 5 days ago |
6-8209 6 days ago |
6-8258 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 |
5-80160 5 days ago |
64-29563 2 months ago |
74-48644 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}`.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
21/0 |
Mathlib/Topology/UnitInterval.lean |
1 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
ocfnash assignee:ocfnash |
5-80152 5 days ago |
15-15142 15 days ago |
25-10514 25 days |
27817 |
zhuyizheng author:zhuyizheng |
feat: add IMO2025P1 |
Add a solution to IMO2025P1, the original problem statement from https://github.com/jsm28/IMOLean
---
[](https://gitpod.io/from-referrer/)
|
IMO
new-contributor
|
1443/0 |
Archive.lean,Archive/Imo/Imo2025Q1.lean |
2 |
1 |
['github-actions'] |
dwrensha assignee:dwrensha |
5-80149 5 days ago |
19-39126 19 days ago |
19-39173 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.
[](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 |
5-80147 5 days ago |
19-10786 19 days ago |
19-10838 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
---
[](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 |
5-80146 5 days ago |
15-48431 15 days ago |
16-13911 16 days |
28452 |
plp127 author:plp127 |
feat: Define `ZMod.fintype` without cases |
Define `ZMod.fintype` without casing on `n` except inside the proof.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/3 |
Mathlib/Data/ZMod/Defs.lean |
1 |
1 |
['github-actions'] |
nobody |
5-75194 5 days ago |
5-75214 5 days ago |
5-75260 5 days |
27163 |
pechersky author:pechersky |
feat(Topology/ValuativeRel): of and to basis of compatible valuations |
---
[](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-71176 5 days ago |
7-26735 7 days ago |
36-7054 36 days |
28322 |
kim-em author:kim-em |
chore: remove a now-unneeded maxHeartbeats |
Some previous PRs have pruned the typeclass search, and this now succeeds within the usual limits. |
t-number-theory |
0/1 |
Mathlib/NumberTheory/RamificationInertia/Unramified.lean |
1 |
1 |
['github-actions'] |
nobody |
5-62540 5 days ago |
5-62584 5 days ago |
5-63680 5 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.
---
[](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-60413 5 days ago |
5-60427 5 days ago |
5-60475 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)>
---
[](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-54140 5 days ago |
5-54162 5 days ago |
32-24328 32 days |
28457 |
euprunin author:euprunin |
chore(LinearAlgebra/AffineSpace): deprecate `coe_injective` (duplicate) |
---
[](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-53808 5 days ago |
5-53808 5 days ago |
5-60997 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.
---
[](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-53647 5 days ago |
5-53668 5 days ago |
25-1048 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.
---
[](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-53440 5 days ago |
5-53457 5 days ago |
26-28819 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)>
---
[](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-47397 5 days ago |
33-33033 1 month ago |
33-33045 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!
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
30/0 |
Mathlib/CategoryTheory/Bicategory/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
5-46450 5 days ago |
5-46517 5 days ago |
5-46565 5 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`.
---
[](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 |
5-17072 5 days ago |
12-1656 12 days ago |
12-11856 12 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.
---
[](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-36072 5 days ago |
5-37747 5 days ago |
5-37739 5 days |
28470 |
EtienneC30 author:EtienneC30 |
feat: ofLp and toLp are continuously differentiable |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
24/1 |
Mathlib/Analysis/Calculus/ContDiff/WithLp.lean |
1 |
1 |
['github-actions'] |
nobody |
5-34600 5 days ago |
5-34680 5 days ago |
5-34664 5 days |
28471 |
EtienneC30 author:EtienneC30 |
feat: toLp and ofLp are injective |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
6/0 |
Mathlib/Analysis/Normed/Lp/WithLp.lean |
1 |
1 |
['github-actions'] |
nobody |
5-34578 5 days ago |
5-34662 5 days ago |
5-34647 5 days |
28473 |
EtienneC30 author:EtienneC30 |
feat: toLp and ofLp are analytic |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
42/0 |
Mathlib.lean,Mathlib/Analysis/Analytic/WithLp.lean |
2 |
1 |
['github-actions'] |
nobody |
5-34259 5 days ago |
5-34350 5 days ago |
5-34334 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-28732 5 days ago |
5-28751 5 days ago |
5-32148 5 days |
28474 |
astrainfinita author:astrainfinita |
feat: add `ContinuousSMul` instances for `ℚ≥0` |
---
[](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-27475 5 days ago |
5-27475 5 days ago |
5-34277 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
---
[](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-26790 5 days ago |
7-34177 7 days ago |
12-54263 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` |
---
[](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-24743 5 days ago |
5-24755 5 days ago |
5-24801 5 days |
28488 |
euprunin author:euprunin |
chore(SetTheory): golf entire `cast_succ`, `mk_multiset_of_countable` and `iSup_succ` |
---
[](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-24731 5 days ago |
5-24741 5 days ago |
5-24786 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.
---
[](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-21899 5 days ago |
5-21899 5 days ago |
5-21883 5 days |
23497 |
chrisflav author:chrisflav |
chore(RingTheory/AdicCompletion/AsTensorProduct): golf using five lemma for modules |
---
- [x] depends on: #23496
[](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-21184 5 days ago |
5-21206 5 days ago |
78-84207 78 days |
28490 |
euprunin author:euprunin |
chore: golf entire `epi_of_cokernel_π_eq_zero`, `bottom_row_coprime`, `congr_of_eventuallyEq` and `Invertible.congr` |
---
[](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-20141 5 days ago |
5-20218 5 days ago |
5-20201 5 days |
28491 |
euprunin author:euprunin |
chore(MeasureTheory/Measure): deprecate `injective_diracProba_of_T0` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
2/8 |
Mathlib/MeasureTheory/Measure/DiracProba.lean |
1 |
1 |
['github-actions'] |
nobody |
5-19615 5 days ago |
5-19621 5 days ago |
5-19667 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` |
---
[](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-19446 5 days ago |
5-27247 5 days ago |
5-27294 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` |
---
[](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-18432 5 days ago |
5-26194 5 days ago |
5-26392 5 days |
28492 |
euprunin author:euprunin |
chore(Data/Finite): golf entire `card_le_of_injective`, `card_le_of_surjective` and `card_sum` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
6/13 |
Mathlib/Data/Finite/Card.lean |
1 |
1 |
['github-actions'] |
nobody |
5-17324 5 days ago |
5-17337 5 days ago |
5-17380 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
[](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-13447 5 days ago |
53-34530 1 month ago |
53-34576 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
[](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-11495 5 days ago |
15-49004 15 days ago |
72-54564 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`.
---
[](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-11211 5 days ago |
5-13911 5 days ago |
5-13958 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`.
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
25/0 |
Mathlib/Data/Set/Functor.lean |
1 |
1 |
['github-actions'] |
nobody |
5-253 5 days ago |
5-253 5 days ago |
5-304 5 days |
26961 |
mariainesdff author:mariainesdff |
feat(RingTheory/PowerSeries/Substitution): add API |
Co-authored-by: @AntoineChambert-Loir
---
[](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 |
4-80179 4 days ago |
15-49367 15 days ago |
41-45362 41 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 |
4-80179 4 days ago |
12-24747 12 days ago |
67-36658 67 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
---
[](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 |
4-80178 4 days ago |
12-21549 12 days ago |
12-24442 12 days |
27453 |
pechersky author:pechersky |
feat(Topology/UniformSpace/Ultra): completion is ultra uniformity iff base is |
Supersedes #24628
---
[](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 |
4-80177 4 days ago |
26-80371 26 days ago |
26-80365 26 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 |
4-80176 4 days ago |
20-58047 20 days ago |
20-58753 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.
---
[](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 |
4-80175 4 days ago |
15-19070 15 days ago |
15-51351 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 |
4-80173 4 days ago |
13-21468 13 days ago |
13-21513 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.
---
[](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 |
4-80172 4 days ago |
12-83604 12 days ago |
12-83596 12 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 |
4-79099 4 days ago |
4-82188 4 days ago |
46-65530 46 days |
28132 |
dupuisf author:dupuisf |
feat: preliminary `grind` tags for `IsUnit` |
This PR adds preliminary `grind` tags for the `IsUnit` predicate.
---
[](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 |
4-76498 4 days ago |
4-76498 4 days ago |
4-76482 4 days |
28507 |
euprunin author:euprunin |
chore: remove debug output ("Unpacked in […] ms") from `lake exe cache get` output |
---
[](https://gitpod.io/from-referrer/)
|
|
0/2 |
Cache/IO.lean |
1 |
1 |
['github-actions'] |
nobody |
4-66088 4 days ago |
4-66161 4 days ago |
4-66144 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
[](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-59334 4 days ago |
4-59334 4 days ago |
5-22806 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.
[](https://gitpod.io/from-referrer/)
|
t-data |
8/0 |
Mathlib/Data/Finset/Union.lean |
1 |
3 |
['github-actions', 'mitchell-horner', 'plp127'] |
nobody |
4-54089 4 days ago |
6-5188 6 days ago |
6-5248 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
[](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-53629 4 days ago |
4-53653 4 days ago |
9-23923 9 days |
26428 |
Ruben-VandeVelde author:Ruben-VandeVelde |
feat: norm_num support for Int.fract |
---
[](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-48180 4 days ago |
55-6615 1 month ago |
55-51373 55 days |
28512 |
euprunin author:euprunin |
chore(Data/List): golf entire `getLast_append_of_right_ne_nil` and `finRange_map_getElem` |
---
[](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-47566 4 days ago |
4-47566 4 days ago |
4-47619 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-45535 4 days ago |
4-45535 4 days ago |
35-58288 35 days |
28520 |
chrisflav author:chrisflav |
chore(Data): add `Finset.exists_injOn_image_eq_of_surjOn` |
Prerequisite for #27508.
---
[](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-25493 4 days ago |
4-33687 4 days ago |
4-33672 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
---
[](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-19039 4 days ago |
21-15646 21 days ago |
21-16824 21 days |
28508 |
euprunin author:euprunin |
chore(Algebra/Polynomial): golf entire `homOfEq_heq` |
---
[](https://gitpod.io/from-referrer/)
|
|
2/2 |
Mathlib/Combinatorics/Quiver/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
4-17437 4 days ago |
4-64675 4 days ago |
4-64658 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.
```
---
[](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-7833 4 days ago |
4-7834 4 days ago |
4-10711 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`.
---
[](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 |
3-80156 3 days ago |
15-25506 15 days ago |
39-755 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
---
[](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 |
3-80156 3 days ago |
85-30338 2 months ago |
91-34731 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 |
3-80154 3 days ago |
10-83022 10 days ago |
11-1385 11 days |
27839 |
CBirkbeck author:CBirkbeck |
feat: normalised Eisenstein series |
define normalised Eisenstein series in preparation for giving their q-expansions.
---
[](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 |
3-80153 3 days ago |
19-24106 19 days ago |
19-24155 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 |
3-80152 3 days ago |
13-29484 13 days ago |
13-59601 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.
---
[](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 |
3-80151 3 days ago |
11-80356 11 days ago |
12-26217 12 days |
28131 |
plp127 author:plp127 |
feat: forgetful functor from over category preserves connected limits |
Prove that `Over.forget` preserves connected limits.
---
[](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 |
3-80150 3 days ago |
12-2378 12 days ago |
12-2425 12 days |
28149 |
Equilibris author:Equilibris |
feat: dcongr_heq |
`dcongr_heq` is very useful for proofs about typevecs as these are highly dependent
---
[](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 |
3-80149 3 days ago |
11-50572 11 days ago |
11-50617 11 days |
28141 |
YaelDillies author:YaelDillies |
chore: deprecate `BialgHom.coe_toLinearMap` |
`BialgHom.toLinearMap` is a fake projection.
From Toric
---
[](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 |
3-80149 3 days ago |
11-57278 11 days ago |
11-57277 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/3 |
Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean |
1 |
1 |
['github-actions'] |
nobody |
3-62552 3 days ago |
3-63915 3 days ago |
3-63956 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/1 |
Mathlib/Analysis/Normed/Group/Hom.lean |
1 |
1 |
['github-actions'] |
nobody |
3-62111 3 days ago |
3-63516 3 days ago |
3-63558 3 days |
23999 |
YaelDillies author:YaelDillies |
feat(MonoidAlgebra): `mapDomain` and `mapRange` as ring homs |
From Toric
Co-authored-by: Michał Mrugała
---
[](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-58911 3 days ago |
3-59169 3 days ago |
5-74710 5 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.
---
[](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-55386 3 days ago |
3-55403 3 days ago |
36-85654 36 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-55187 3 days ago |
3-55213 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-53932 3 days ago |
3-54018 3 days ago |
64-50755 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.
[](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-44509 3 days ago |
3-44509 3 days ago |
6-33481 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
---
[](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-44434 3 days ago |
8-42773 8 days ago |
8-42818 8 days |
27433 |
YaelDillies author:YaelDillies |
refactor: make `⇑e⁻¹ = e.symm` simp |
From BrauerGroup and ClassFieldTheory
---
[](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-33921 3 days ago |
3-33921 3 days ago |
3-65292 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...).
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
311/0 |
Mathlib.lean,Mathlib/AlgebraicTopology/ModelCategory/RightHomotopy.lean |
2 |
1 |
['github-actions'] |
nobody |
3-31465 3 days ago |
6-11545 6 days ago |
6-11530 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).
[](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-23630 3 days ago |
3-23630 3 days ago |
6-21243 6 days |
28555 |
YaelDillies author:YaelDillies |
feat: pullback along an epi preserved under pullbacks is faithful |
From Toric
---
[](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-23229 3 days ago |
3-23229 3 days ago |
3-23489 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`)
---
[](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-21829 3 days ago |
6-1940 6 days ago |
6-1987 6 days |
28570 |
euprunin author:euprunin |
chore(RepresentationTheory/Homological/GroupCohomology): golf entire `cochainsMap_f_1_comp_cochainsIso₁` using `tauto` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/3 |
Mathlib/RepresentationTheory/Homological/GroupCohomology/Functoriality.lean |
1 |
1 |
['github-actions'] |
nobody |
3-21537 3 days ago |
3-21547 3 days ago |
3-21594 3 days |
28571 |
euprunin author:euprunin |
chore(RingTheory): golf entire `mem_extended_iff`, `coeff_opRingEquiv` and `comp_assoc` using `tauto` |
---
[](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-21505 3 days ago |
3-21510 3 days ago |
3-21553 3 days |
28573 |
euprunin author:euprunin |
chore(Tactic): golf entire `eval_cons` and `natPow_zero_natMod_succ_succ` using `tauto` |
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
3/6 |
Mathlib/Tactic/Module.lean,Mathlib/Tactic/NormNum/PowMod.lean |
2 |
1 |
['github-actions'] |
nobody |
3-21417 3 days ago |
3-21417 3 days ago |
3-21487 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-21124 3 days ago |
29-9584 29 days ago |
29-9635 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
1/5 |
Mathlib/Combinatorics/Quiver/Symmetric.lean |
1 |
1 |
['github-actions'] |
nobody |
3-20008 3 days ago |
3-22039 3 days ago |
3-22089 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
1/1 |
Mathlib/Geometry/RingedSpace/OpenImmersion.lean |
1 |
1 |
['github-actions'] |
nobody |
3-19937 3 days ago |
3-21898 3 days ago |
3-21950 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-logic |
1/1 |
Mathlib/Logic/Equiv/PartialEquiv.lean |
1 |
1 |
['github-actions'] |
nobody |
3-19892 3 days ago |
3-21771 3 days ago |
3-21814 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).
```
---
[](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-19828 3 days ago |
3-21685 3 days ago |
3-21726 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-order |
2/5 |
Mathlib/Order/Filter/IsBounded.lean,Mathlib/Order/OmegaCompletePartialOrder.lean |
2 |
1 |
['github-actions'] |
nobody |
3-19614 3 days ago |
3-21642 3 days ago |
3-21682 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).
```
---
[](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-19533 3 days ago |
3-21601 3 days ago |
3-21648 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).
```
---
[](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-19377 3 days ago |
3-22445 3 days ago |
3-22491 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).
```
---
[](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-19327 3 days ago |
3-22381 3 days ago |
3-22427 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).
```
---
[](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-19249 3 days ago |
3-22092 3 days ago |
3-22137 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).
```
---
[](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-19180 3 days ago |
3-21953 3 days ago |
3-21995 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
2/6 |
Mathlib/GroupTheory/PushoutI.lean |
1 |
1 |
['github-actions'] |
nobody |
3-19134 3 days ago |
3-21857 3 days ago |
3-21901 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).
```
---
[](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-18685 3 days ago |
3-21810 3 days ago |
3-21852 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
4/4 |
Mathlib/MeasureTheory/Constructions/Cylinders.lean |
1 |
1 |
['github-actions'] |
nobody |
3-18633 3 days ago |
3-21728 3 days ago |
3-21771 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).
```
---
[](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-18425 3 days ago |
3-21401 3 days ago |
3-21444 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/2 |
Mathlib/LinearAlgebra/AffineSpace/Combination.lean |
1 |
1 |
['github-actions'] |
nobody |
3-5767 3 days ago |
4-18181 4 days ago |
4-18223 4 days |
28522 |
euprunin author:euprunin |
chore(Algebra/Ring/Subsemiring): golf entire `coe_pow` using `trivial` |
---
[](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-5592 3 days ago |
4-32267 4 days ago |
4-32309 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-5036 3 days ago |
3-22392 3 days ago |
3-22440 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).
```
---
[](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-1251 3 days ago |
3-63717 3 days ago |
3-63768 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
[](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 |
2-80159 2 days ago |
63-12624 2 months ago |
63-75479 63 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
[](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 |
2-80157 2 days ago |
11-5180 11 days ago |
14-25384 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.
[](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 |
2-80156 2 days ago |
20-18244 20 days ago |
20-43845 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
---
[](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 |
2-80154 2 days ago |
15-16580 15 days ago |
17-18226 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
---
[](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 |
2-80153 2 days ago |
10-76948 10 days ago |
13-12415 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`.
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-analysis
|
6/0 |
Mathlib/Analysis/InnerProductSpace/PiL2.lean |
1 |
1 |
['github-actions'] |
urkud assignee:urkud |
2-80150 2 days ago |
10-6986 10 days ago |
10-7032 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-set-theory |
1/3 |
Mathlib/SetTheory/ZFC/Class.lean |
1 |
1 |
['github-actions', 'vihdzp'] |
nobody |
2-67897 2 days ago |
3-21476 3 days ago |
3-21522 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-66012 2 days ago |
29-241 29 days ago |
29-289 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-65539 2 days ago |
4-7491 4 days ago |
15-64740 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-65415 2 days ago |
19-1494 19 days ago |
19-2011 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-65297 2 days ago |
19-1132 19 days ago |
19-1638 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).
```
---
[](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-64751 2 days ago |
4-7801 4 days ago |
5-26146 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-64304 2 days ago |
4-66429 4 days ago |
4-66475 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.
---
[](https://gitpod.io/from-referrer/)
|
t-set-theory |
21/0 |
Mathlib/SetTheory/Ordinal/Principal.lean |
1 |
1 |
['github-actions'] |
nobody |
2-56827 2 days ago |
2-57602 2 days ago |
2-57647 2 days |
28589 |
vihdzp author:vihdzp |
feat: more lemmas on characteristic 2 rings |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
11/0 |
Mathlib/Algebra/CharP/Two.lean |
1 |
1 |
['github-actions'] |
nobody |
2-56780 2 days ago |
2-56979 2 days ago |
2-56973 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-data |
1/10 |
Mathlib/Data/List/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
2-55889 2 days ago |
2-55933 2 days ago |
2-55974 2 days |
28519 |
euprunin author:euprunin |
chore(LinearAlgebra/AffineSpace/AffineSubspace): deprecate `mem_mk'_iff_vsub_mem` (duplicate) |
---
[](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-55546 2 days ago |
2-55546 2 days ago |
3-79457 3 days |
28544 |
themathqueen author:themathqueen |
feat(Algebra/Star/Unitary): `unitary * a * star unitary` is self-adjoint iff `a` is |
---
- [x] depends on: #28476
[](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-51123 2 days ago |
2-52847 2 days ago |
2-52871 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).
---
[](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-47202 2 days ago |
8-40958 8 days ago |
17-33433 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`.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-combinatorics
easy
|
22/0 |
Mathlib/Combinatorics/Graph/Basic.lean |
1 |
2 |
['github-actions', 'lauramonk'] |
nobody |
2-32884 2 days ago |
2-32892 2 days ago |
2-32934 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`
---
[](https://gitpod.io/from-referrer/)
|
t-data |
18/0 |
Mathlib/Data/ENat/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
2-32524 2 days ago |
2-70643 2 days ago |
2-70688 2 days |
28338 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/IsPositive): `(adjoint S ∘ S).IsPositive` and `(S ∘ adjoint S).IsPositive` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis
easy
|
16/0 |
Mathlib/Analysis/InnerProductSpace/Positive.lean |
1 |
1 |
['github-actions'] |
nobody |
2-32476 2 days ago |
7-45018 7 days ago |
7-45022 7 days |
28587 |
vihdzp author:vihdzp |
feat: irreducible polynomial has positive degree |
---
[](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-32245 2 days ago |
2-58330 2 days ago |
2-58323 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
[](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-32218 2 days ago |
2-37328 2 days ago |
4-31362 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.
---
[](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-30675 2 days ago |
2-30675 2 days ago |
103-14347 103 days |
28531 |
Ruben-VandeVelde author:Ruben-VandeVelde |
chore: remove Cardinal imports from Topology.Algebra.InfiniteSum.Group |
---
[](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-27466 2 days ago |
4-4597 4 days ago |
4-4580 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.
---
[](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-25015 2 days ago |
2-25015 2 days ago |
2-24999 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).
```
---
[](https://gitpod.io/from-referrer/)
|
t-data |
1/8 |
Mathlib/Data/Set/Prod.lean |
1 |
1 |
['github-actions'] |
nobody |
2-20315 2 days ago |
2-20336 2 days ago |
2-20379 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` .
---
[](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-19840 2 days ago |
2-29246 2 days ago |
2-29290 2 days |
27943 |
dupuisf author:dupuisf |
feat: `StarOrderedRing` implies `OrderedSMul` |
We show that `StarOrderedRing R` implies `OrderedSMul 𝕜 R`.
---
[](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-13351 2 days ago |
15-28049 15 days ago |
16-15328 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`.)
---
[](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-9822 2 days ago |
2-9822 2 days ago |
2-12137 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` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
5/26 |
Mathlib/Data/List/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
2-9682 2 days ago |
2-9709 2 days ago |
2-9752 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
[](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-4728 2 days ago |
3-30585 3 days ago |
4-83871 4 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
[](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-4628 2 days ago |
3-29515 3 days ago |
4-11685 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-53 2 days ago |
2-53 2 days ago |
14-22170 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.
---
[](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 |
1-84996 1 day ago |
1-84996 1 day ago |
10-80492 10 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.
---
[](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 |
1-84137 1 day ago |
1-84260 1 day ago |
6-85640 6 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 |
1-83651 1 day ago |
4-764 4 days ago |
4-815 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)
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
32/0 |
Mathlib/Topology/LocallyFinsupp.lean |
1 |
6 |
['Raph-DG', 'github-actions', 'jcommelin', 'kckennylau'] |
jcommelin assignee:jcommelin |
1-81161 1 day ago |
60-16251 1 month ago |
60-16292 60 days |
27395 |
joelriou author:joelriou |
feat(Algebra/Homology): the canonical t-structure on the derived category |
---
- [x] depends on: #27536
[](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 |
1-80167 1 day ago |
9-19704 9 days ago |
9-19750 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
[](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 |
1-80166 1 day ago |
13-48249 13 days ago |
16-60162 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)
[](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 |
1-80165 1 day ago |
12-15457 12 days ago |
12-76362 12 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)
[](https://gitpod.io/from-referrer/)
|
t-meta |
16/0 |
Mathlib/Tactic/FunProp.lean |
1 |
3 |
['github-actions', 'grunweg', 'kckennylau'] |
alexjbest assignee:alexjbest |
1-80163 1 day ago |
9-30274 9 days ago |
10-8485 10 days |
28626 |
alreadydone author:alreadydone |
chore(Archive, Counterexamples): replace => by ↦ |
---
[](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 |
1-78821 1 day ago |
1-80274 1 day ago |
1-80257 1 day |
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` |
---
[](https://gitpod.io/from-referrer/)
|
t-order |
4/14 |
Mathlib/Order/BooleanAlgebra/Set.lean |
1 |
1 |
['github-actions'] |
nobody |
1-65118 1 day ago |
1-65129 1 day ago |
1-65169 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
[](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-60703 1 day ago |
1-60734 1 day ago |
1-68013 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-59279 1 day ago |
3-35552 3 days ago |
3-35594 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.
---
[](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-55289 1 day ago |
4-51312 4 days ago |
4-51353 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.
[](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-53869 1 day ago |
3-18688 3 days ago |
3-18736 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`.
---
[](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-53560 1 day ago |
12-83766 12 days ago |
13-150 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.
---
[](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-52861 1 day ago |
1-53523 1 day ago |
64-18503 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.
---
[](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-52670 1 day ago |
1-52670 1 day ago |
67-35441 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.
[](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-51187 1 day ago |
1-51187 1 day ago |
9-81988 9 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
[](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-46935 1 day ago |
1-47611 1 day ago |
1-49349 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`.
---
[](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-46708 1 day ago |
1-47058 1 day ago |
1-85611 1 day |
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.
[](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-45199 1 day ago |
7-31669 7 days ago |
7-31718 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-43705 1 day ago |
8-24048 8 days ago |
8-24062 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]
```
---
[](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-42166 1 day ago |
3-36705 3 days ago |
9-38159 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.
---
[](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-40196 1 day ago |
1-40196 1 day ago |
2-288 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
[](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-40104 1 day ago |
9-19257 9 days ago |
9-19680 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.
---
[](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-40058 1 day ago |
1-78919 1 day ago |
1-78960 1 day |
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-38150 1 day ago |
1-42485 1 day ago |
7-77160 7 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.
---
[](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-36860 1 day ago |
1-36909 1 day ago |
2-412 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)
[](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-34955 1 day ago |
1-43726 1 day ago |
12-71945 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-31650 1 day ago |
1-33660 1 day ago |
9-37304 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).
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
new-contributor
|
18/2 |
Mathlib/RingTheory/Nakayama.lean |
1 |
1 |
['github-actions'] |
nobody |
1-30683 1 day ago |
1-30683 1 day ago |
1-32307 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)
[](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-26422 1 day ago |
1-33844 1 day ago |
4-27976 4 days |
28317 |
kckennylau author:kckennylau |
feat(Algebra): more lemmas about units in ordered monoid |
---
[](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-25602 1 day ago |
1-36319 1 day ago |
1-75934 1 day |
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.
[](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-24030 1 day ago |
1-34305 1 day ago |
1-34288 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.
---
[](https://gitpod.io/from-referrer/)
|
CI |
88/22 |
scripts/downstream_repos.yml |
1 |
1 |
['github-actions'] |
nobody |
1-21522 1 day ago |
1-21533 1 day ago |
1-21574 1 day |
28653 |
strihanje01 author:strihanje01 |
feat(Combinatorics/Additive/Convolution): convolution map |
add convolution of finite subsets of a group
---
[](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-20260 1 day ago |
1-22831 1 day ago |
1-22895 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-20260 1 day ago |
1-20261 1 day ago |
48-77277 48 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)
---
[](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-19041 1 day ago |
2-4793 2 days ago |
2-5791 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
---
[](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-12852 1 day ago |
1-21438 1 day ago |
50-28188 50 days |
28661 |
harahu author:harahu |
doc(MeasureTheory): Miscellaneous typo fixes |
---
[](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-7234 1 day ago |
1-7558 1 day ago |
1-7600 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
[](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-2087 1 day ago |
1-13896 1 day ago |
1-28655 1 day |
28553 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/Positive): `A.toEuclideanLin.IsPositive` iff `A.PosSemidef` |
---
[](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-1452 1 day ago |
1-1475 1 day ago |
3-23402 3 days |
28549 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/Positive): `LinearIsometryEquiv ∘ T ∘ LinearIsometryEquiv.symm` is positive iff `T` is |
---
- [x] depends on: #28548
[](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-1406 1 day ago |
1-1428 1 day ago |
1-4081 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 |
|---|---|
| | |
In the after version, the extension names are all clickable.
Similar to #21450.
---
[](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 |
0-83655 23 hours ago |
8-1836 8 days ago |
8-1825 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 |
0-80173 22 hours ago |
12-12242 12 days ago |
12-12287 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.
[](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 |
0-80171 22 hours ago |
11-18513 11 days ago |
11-18564 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.
[](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 |
0-80170 22 hours ago |
10-25100 10 days ago |
10-25148 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
---
[](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 |
0-80170 22 hours ago |
10-58784 10 days ago |
10-58784 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]`.
---
[](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 |
0-80168 22 hours ago |
9-37762 9 days ago |
9-37746 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.
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
126/0 |
Mathlib.lean,Mathlib/MeasureTheory/Measure/FiniteMeasurePi.lean |
2 |
1 |
['github-actions'] |
urkud assignee:urkud |
0-80167 22 hours ago |
8-45850 8 days ago |
8-45897 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.
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
46/5 |
Mathlib/Tactic/Linarith/Preprocessing.lean,MathlibTest/linarith.lean |
2 |
1 |
['github-actions'] |
robertylewis assignee:robertylewis |
0-80166 22 hours ago |
8-36162 8 days ago |
8-36214 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
---
[](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 |
0-74846 20 hours 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.
---
[](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-63662 17 hours ago |
4-6541 4 days ago |
6-39295 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))`.
---
[](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-60679 16 hours ago |
1-33809 1 day ago |
7-35948 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
[](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-60248 16 hours ago |
1-1718 1 day ago |
5-68547 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)
---
[](https://gitpod.io/from-referrer/)
|
IMO
new-contributor
|
196/0 |
Archive.lean,Archive/Imo/Imo1975Q3.lean |
2 |
32 |
['Antidite', 'LLaurance', 'github-actions'] |
nobody |
0-58907 16 hours ago |
1-51131 1 day ago |
1-51175 1 day |
27937 |
madvorak author:madvorak |
feat(Logic/Basic): `congr_heq₂` |
---
[](https://gitpod.io/from-referrer/)
|
t-logic |
6/0 |
Mathlib/Logic/Basic.lean |
1 |
7 |
['YaelDillies', 'github-actions', 'madvorak', 'vihdzp'] |
fpvandoorn assignee:fpvandoorn |
0-56913 15 hours ago |
0-57897 16 hours ago |
16-32823 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` |
---
[](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-55049 15 hours ago |
0-55995 15 hours ago |
0-56035 15 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.
---
[](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-52692 14 hours ago |
1-23605 1 day ago |
1-23590 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
[](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-52566 14 hours ago |
7-47573 7 days ago |
200-61086 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.
---
[](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-52161 14 hours ago |
0-84873 23 hours ago |
22-7184 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-49857 13 hours ago |
16-20330 16 days ago |
19-35417 19 days |
28669 |
kckennylau author:kckennylau |
chore: clean up some proofs about locally compact valuation |
---
[](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-49747 13 hours ago |
0-78718 21 hours ago |
0-78701 21 hours |
28663 |
harahu author:harahu |
doc(Tactic): hyphenate "right-hand" and "left-hand" where appropriate |
---
[](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-48314 13 hours ago |
0-48444 13 hours ago |
1-4568 1 day |
26827 |
pechersky author:pechersky |
feat(Analysis/Normed/ValuativeRel): helper instance for NormedField |
---
[](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-47014 13 hours ago |
7-26660 7 days ago |
44-5983 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).
---
[](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-46031 12 hours ago |
10-3525 10 days ago |
10-42644 10 days |
27837 |
CBirkbeck author:CBirkbeck |
feat(NumberTheory/Divisors): add divisorAntidiagonal equivalence. |
---
[](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-42337 11 hours ago |
9-1159 9 days ago |
17-29960 17 days |
28691 |
or4nge19 author:or4nge19 |
feat(Probability/Invariance):Reversibility/DetailedBalance |
Add reversibility (detailed balance) for Markov kernels and show it implies invariance
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-measure-probability
|
25/1 |
Mathlib/Probability/Kernel/Invariance.lean |
1 |
1 |
['github-actions'] |
nobody |
0-41309 11 hours ago |
0-44454 12 hours ago |
0-44496 12 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
---
[](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 |
3 |
['chrisflav', 'github-actions'] |
chrisflav assignee:chrisflav |
0-38620 10 hours ago |
0-47850 13 hours ago |
11-56906 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.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
118/0 |
Mathlib.lean,Mathlib/RingTheory/RegularLocalRing.lean |
2 |
23 |
['Thmoas-Guan', 'chrisflav', 'github-actions', 'mbkybky'] |
chrisflav assignee:chrisflav |
0-38152 10 hours ago |
0-38152 10 hours ago |
0-40001 11 hours |
27511 |
Nebula691 author:Nebula691 |
feat(Algebra/QuadraticAlgebra) : Define Quadratic Algebra |
Co-authored-by: Edison Xie
Co-authored-by: Kenny Lau
---
[](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-37471 10 hours ago |
25-28070 25 days ago |
25-28114 25 days |
28642 |
chrisflav author:chrisflav |
chore(RingTheory/Localization/Algebra): generalize universes and to `CommSemiring` |
---
[](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-34288 9 hours ago |
0-34295 9 hours ago |
1-28862 1 day |
27785 |
staroperator author:staroperator |
chore(Algebra/Group/Submonoid): golf `Nat.addSubmonoidClosure_one` using `simp` |
This should improve the proof readability.
---
[](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-34007 9 hours ago |
0-34007 9 hours ago |
19-17899 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)
[](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-33924 9 hours ago |
1-1410 1 day ago |
14-71630 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-31769 8 hours ago |
41-10251 1 month ago |
56-59133 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`.
---
[](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-30786 8 hours ago |
0-39511 10 hours ago |
11-15768 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.
---
[](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-30261 8 hours ago |
0-45906 12 hours ago |
0-74200 20 hours |
28636 |
YaelDillies author:YaelDillies |
feat(Data/Nat): `gcongr` attributes for `sub` lemma |
From ForbiddenMatrix
---
[](https://gitpod.io/from-referrer/)
|
t-data |
3/0 |
Mathlib/Data/Nat/Init.lean |
1 |
2 |
['github-actions', 'j-loreaux'] |
nobody |
0-27484 7 hours ago |
1-6283 1 day ago |
0-30603 8 hours |
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!
[](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-26182 7 hours ago |
0-67335 18 hours ago |
0-68306 18 hours |
28547 |
YaelDillies author:YaelDillies |
feat: `measurable_from_prod_countable_right` |
---
[](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-22960 6 hours ago |
3-35086 3 days ago |
3-35129 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-22790 6 hours ago |
0-49820 13 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-22725 6 hours ago |
1-7359 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
[](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-21266 5 hours ago |
5-23976 5 days ago |
9-41673 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-21132 5 hours ago |
57-72882 1 month ago |
57-72926 57 days |
27212 |
CBirkbeck author:CBirkbeck |
Cot series iterated deriv within |
---
- [x] depends on: #27209
- [x] depends on: #26016
[](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-20610 5 hours ago |
8-49952 8 days ago |
8-63913 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.
---
[](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-18811 5 hours ago |
5-34541 5 days ago |
5-35161 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
[](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-17973 4 hours ago |
1-84746 1 day ago |
49-85851 49 days |
26975 |
Whysoserioushah author:Whysoserioushah |
feat: a norm_num extension for complex numbers |
co-authored-by : @thefundamentaltheor3m, @hrmacbeth
---
[](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-17950 4 hours ago |
34-17892 1 month ago |
34-22209 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-16122 4 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
---
[](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-14538 4 hours ago |
0-33063 9 hours ago |
0-33131 9 hours |
28662 |
gasparattila author:gasparattila |
feat: products of affine maps |
This PR defines some maps and isomorphisms between products of affine spaces.
---
[](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-14435 4 hours ago |
0-57411 15 hours ago |
0-36246 10 hours |
28704 |
unknown author:unknown |
chore: remove unnecessary tactic invocations |
unknown description |
|
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-12895 3 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-10663 2 hours ago |
2-4244 2 days ago |
2-14440 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.
[](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
|
142/2 |
Mathlib.lean,Mathlib/Analysis/InnerProductSpace/GramMatrix.lean,Mathlib/MeasureTheory/Function/L2Space.lean |
3 |
38 |
['EtienneC30', 'eric-wieser', 'github-actions', 'pfaffelh'] |
nobody |
0-10491 2 hours ago |
0-10539 2 hours ago |
43-32551 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-10470 2 hours ago |
25-30875 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-9808 2 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.
---
[](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-9757 2 hours ago |
0-9757 2 hours ago |
0-31768 8 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.
[](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-9566 2 hours ago |
0-82621 22 hours ago |
0-82662 22 hours |
28656 |
euprunin author:euprunin |
chore(Data/Int): golf entire `coe_leastOfBdd_eq` and `coe_greatestOfBdd_eq` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-data
maintainer-merge
|
2/6 |
Mathlib/Data/Int/LeastGreatest.lean |
1 |
1 |
['github-actions'] |
nobody |
0-9170 2 hours ago |
1-20986 1 day ago |
1-21032 1 day |
28640 |
euprunin author:euprunin |
chore(Data/List): golf entire `getElem?_getD_replicate_default_eq` and `getD_append_right` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-data
maintainer-merge
|
2/9 |
Mathlib/Data/List/GetD.lean |
1 |
2 |
['Ruben-VandeVelde', 'github-actions'] |
nobody |
0-9123 2 hours ago |
0-9123 2 hours ago |
1-32597 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 |
---
[](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-8886 2 hours ago |
69-45395 2 months ago |
69-45377 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
---
[](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-8236 2 hours ago |
40-38067 1 month ago |
59-63406 59 days |
25794 |
dagurtomas author:dagurtomas |
feat(CategoryTheory): localization preserves braided structure |
---
[](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-7850 2 hours ago |
46-68322 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
[](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-7354 2 hours ago |
63-12671 2 months ago |
63-12721 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)
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
52/3 |
Mathlib/Data/Set/Card/Arithmetic.lean |
1 |
15 |
['github-actions', 'kckennylau', 'raja-19'] |
nobody |
0-7018 1 hour ago |
4-748 4 days ago |
4-793 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.
---
[](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-6715 1 hour ago |
89-79505 2 months ago |
89-79555 89 days |
28400 |
CBirkbeck author:CBirkbeck |
Define the Dedekind Eta function |
---
[](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-6508 1 hour ago |
6-24716 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?).
[](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-5350 1 hour ago |
20-40926 20 days ago |
66-7954 66 days |
28099 |
themathqueen author:themathqueen |
feat(LinearAlgebra/Matrix/Spectrum): the eigenvalues of Hermitian `A` are all `0` iff `A = 0` |
---
[](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-4359 1 hour ago |
10-15246 10 days ago |
13-6835 13 days |
28678 |
vihdzp author:vihdzp |
feat: well-founded instances for `ULift` |
---
[](https://gitpod.io/from-referrer/)
|
t-order
easy
|
9/0 |
Mathlib/Order/WellFounded.lean |
1 |
4 |
['eric-wieser', 'github-actions'] |
nobody |
0-3740 1 hour ago |
0-51251 14 hours ago |
0-10221 2 hours |
28710 |
unknown author:unknown |
chore(Algebra): make MulEquivClass an alias of MulHomClass |
unknown description |
bench-after-CI
t-algebra
label:t-algebra$ |
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-1738 28 minutes ago |
unknown |
unknown |
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
---
[](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-1451 24 minutes ago |
0-44541 12 hours ago |
0-59576 16 hours |
28679 |
euprunin author:euprunin |
chore: remove unnecessary tactic invocations |
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge |
4/8 |
Mathlib/Algebra/Order/CompleteField.lean,Mathlib/Analysis/ODE/PicardLindelof.lean,Mathlib/Data/Set/Image.lean,Mathlib/MeasureTheory/Measure/Portmanteau.lean,Mathlib/RingTheory/MvPolynomial/Symmetric/NewtonIdentities.lean |
5 |
1 |
['github-actions'] |
nobody |
0-1028 17 minutes ago |
0-60310 16 hours ago |
0-60293 16 hours |
28705 |
b-mehta author:b-mehta |
feat(MetricSpace/Closeds): set of nonempty compacts below a closed set is closed |
This is proved in analogy with `isClosed_subsets_of_isClosed`. That theorem is also renamed to `Closeds.isClosed_subsets_of_isClosed`, to make space for `NonemptyCompacts.isClosed_subsets_of_isClosed`.
[](https://gitpod.io/from-referrer/)
|
t-topology |
14/1 |
Mathlib/Topology/MetricSpace/Closeds.lean |
1 |
2 |
['ADedecker', 'github-actions'] |
nobody |
0-631 10 minutes ago |
0-16634 4 hours ago |
0-16688 4 hours |
28709 |
yoh-tanimoto author:yoh-tanimoto |
add instance `CompleteSpace` for a subtype with `IsClosed` instance |
add `instance [CompleteSpace α] {s : Set α} [hs : IsClosed s] : CompleteSpace s`.
motivation: [Submodule.HasOrthogonalProjection.ofCompleteSpace](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Analysis/InnerProductSpace/Projection/Basic.html#Submodule.HasOrthogonalProjection.ofCompleteSpace) takes `CompleteSpace ↥K` and it is convenient to have this instance so that any closed submodule in a Hilbert space [HasOrthogonalProjection](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Analysis/InnerProductSpace/Projection/Basic.html#Submodule.HasOrthogonalProjection)
There is already [IsClosed.completeSpace_coe](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/UniformSpace/UniformEmbedding.html#IsClosed.completeSpace_coe) but it takes `(hs : IsClosed)` (explicitly) and many proofs use it, so for the moment I leave both of them.
discussion: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/.60CompleteSpace.60.20for.20closed.20subtypes.20in.20a.20.60CompleteSpace.60 |
t-topology |
3/0 |
Mathlib/Topology/UniformSpace/UniformEmbedding.lean |
1 |
7 |
['github-actions', 'j-loreaux', 'plp127', 'yoh-tanimoto'] |
nobody |
0-581 9 minutes ago |
0-12344 3 hours ago |
0-12390 3 hours |