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 |
91-6031 2 months ago |
119-3588 3 months ago |
119-3639 119 days |
24050 |
Paul-Lez author:Paul-Lez |
feat(Data/Finsupp/Pointwise): generalise pointwise scalar multiplication of finsupps |
As pointed out by @eric-wieser, this creates an instance diamond with `SMul (α → β) (α →₀ (α → β))`
---
[](https://gitpod.io/from-referrer/)
|
t-data |
7/4 |
Mathlib/Data/Finsupp/Pointwise.lean |
1 |
6 |
['Paul-Lez', 'eric-wieser', 'github-actions'] |
nobody |
86-34723 2 months ago |
128-23021 4 months ago |
128-23070 128 days |
26284 |
plp127 author:plp127 |
feat: faster implementation of `Nat.primeFactorsList` + `@[csimp]` lemma |
Add a function `Nat.primeFactorsListFast` that `#eval`s faster, and a `@[csimp]` lemma `Nat.primeFactorsList_eq_primeFactorsListFast` that shows `Nat.primeFactorsList = Nat.primeFactorsListFast`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
95/0 |
Mathlib/Data/Nat/Factors.lean |
1 |
1 |
['github-actions'] |
nobody |
58-80052 1 month ago |
58-80075 1 month ago |
59-7591 59 days |
22039 |
YaelDillies author:YaelDillies |
feat: simproc for computing `Finset.Ixx` of natural numbers |
---
- [x] depends on: #22290
- [x] depends on: #22559
[](https://gitpod.io/from-referrer/)
|
large-import
t-meta
|
315/0 |
Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/FinsetInterval.lean,Mathlib/Util/Qq.lean |
4 |
59 |
['FLDutchmann', 'Paul-Lez', 'YaelDillies', 'eric-wieser', 'github-actions', 'grunweg', 'kim-em', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'urkud'] |
eric-wieser assignee:eric-wieser |
48-46225 1 month ago |
126-59608 4 months ago |
182-20327 182 days |
26710 |
metakunt author:metakunt |
feat (Data/Nat/Digits/Lemmas): Add digits_getD |
Adds digits_getD, an explicit computation of the i-th digits of n in base b representation. |
t-data
new-contributor
|
64/0 |
Mathlib/Data/Nat/Digits/Lemmas.lean |
1 |
1 |
['github-actions'] |
nobody |
48-9746 1 month ago |
48-9877 1 month ago |
48-9929 48 days |
26021 |
vasnesterov author:vasnesterov |
feat(Data/Real): representation of reals from `[0, 1]` in positional system |
* Introduce `ofDigits {b : ℕ} (digits : ℕ → Fin b) : ℝ`, representing a real number of the form `0.d₀d₁d₂...` (where `dᵢ = digits i`) as an infinite sum.
* Prove that this sum converges to a number in the interval `[0, 1]`.
* Prove `ofDigits_close_of_common_prefix`: if the first `n` digits of two numbers are equal, then their difference is bounded by `b⁻ⁿ`.
* Introduce `Real.digits`, which converts a real number into its sequence of digits.
* Prove that `ofDigits (toDigits x b) = x`.
[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Base.20n.20expansion.20of.20real.20numbers.3F/near/502937293)
---
- [x] depends on: #26004
[](https://gitpod.io/from-referrer/)
|
t-data |
238/0 |
Mathlib.lean,Mathlib/Data/Real/OfDigits.lean,scripts/noshake.json |
3 |
11 |
['alreadydone', 'eric-wieser', 'github-actions', 'mathlib4-dependent-issues-bot', 'vasnesterov', 'wwylele'] |
nobody |
46-68663 1 month ago |
49-83431 1 month ago |
49-83989 49 days |
26838 |
vlad902 author:vlad902 |
feat: add lemmas about `List.scanr` |
This PR continues the work from #25188.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25188 |
t-data |
84/19 |
Mathlib/Data/List/Scan.lean |
1 |
12 |
['github-actions', 'vihdzp', 'vlad902'] |
nobody |
39-67528 1 month ago |
44-70037 1 month ago |
44-70091 44 days |
11563 |
YaelDillies author:YaelDillies |
feat: `∑ i ∈ s with hi : p i, f i hi` syntax for big operators |
Define new notation for `Finset.sum`/`Finset.prod`. `∑ i ∈ s with hi : p i, f i hi` now is notation for `∑ i : s.filter p, f i.1 (mem_filter.1 i.2).2`.
---
- [x] depends on: #6795
Other notations we could have are
* `∑ hi : i ∈ s, f i hi` as notation for `∑ i : s, f i.1 i.2`
* `∑ hi : i ∈ s with p i, f i hi` as notation for `∑ i : s.filter p, f i.1 (mem_filter.1 i.2).1`
* `∑ hi : i ∈ s with hpi : p i, f i hi hpi` as notation for `∑ i : s.filter p, f i.1 (mem_filter.1 i.2).1 (mem_filter.1 i.2).2`
but Eric seems mildly unhappy about them.
[](https://gitpod.io/from-referrer/)
|
t-algebra
t-meta
label:t-algebra$ |
27/18 |
Mathlib/Algebra/BigOperators/Group/Finset/Defs.lean |
1 |
28 |
['YaelDillies', 'b-mehta', 'eric-wieser', 'github-actions', 'kbuzzard', 'kmill', 'leanprover-community-bot-assistant', 'leanprover-community-mathlib4-bot'] |
kmill assignee:kmill |
36-38629 1 month ago |
36-38653 1 month ago |
198-26610 198 days |
27242 |
hugh-fox author:hugh-fox |
feat: add Gauss-like formula for sums of digit sums |
Adds `sum_digit_sum_base_pow_eq` to show a Gauss-like formula across sums of digit sums.
This relies on an additional two simp lemmas, named `digits_sum_eq_self`, `digits_sum_base_mul_cancel`.
Lastly, includes a specialization (which is a good bit simpler than the general formula) to base 10 named `sum_digit_sum_ten_pow_eq`.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-data
new-contributor
|
113/0 |
Mathlib/Data/Nat/Digits/Lemmas.lean |
1 |
5 |
['github-actions', 'hugh-fox', 'kckennylau'] |
nobody |
32-23042 1 month ago |
34-420 1 month ago |
34-467 34 days |
26847 |
joelriou author:joelriou |
feat: multicoequalizers in the category of types |
This PR gives a concrete criteria for a multicofork in the category of types to be a multicoequalizer, and this is used in order to show that if a (sub)set `A : Set X` is the union of certain subsets `U i`, then the type `A` is the multicoequalizer of the `U i`s along their intersections `V i j`.
(A similar result for `Subpresheaf` rather than `Set` will be deduced in a separate PR, and this shall be very important in the study of the homotopy theory of simplicial sets, as this will allow the construction of morphisms from horns.)
---
- [x] depends on: #25823
- [x] depends on: #22205
- [x] depends on: #26037
This PR continues the work from #23872.
Original PR: https://github.com/leanprover-community/mathlib4/pull/23872 |
t-category-theory |
96/0 |
Mathlib.lean,Mathlib/CategoryTheory/Limits/Types/Multicoequalizer.lean |
2 |
n/a |
['adomani', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
nobody |
28-54446 28 days ago |
unknown |
unknown |
27500 |
Komyyy author:Komyyy |
feat: the Riemann zeta function is meromorphic |
Also proves that the Hurwitz zeta function is meromorphic. This PR is split from #27499 to leave a good git diff history.
---
The `large-import` change occurs only in the new module, so it poses no problem.
- [x] depends on: #27499
This PR continues the work from #25597.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25597 |
large-import
t-analysis
|
51/3 |
Mathlib.lean,Mathlib/Analysis/Meromorphic/Complex.lean,Mathlib/Analysis/Meromorphic/Gamma.lean |
3 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
nobody |
24-83986 24 days ago |
24-84802 24 days ago |
24-85418 24 days |
27548 |
euprunin author:euprunin |
chore(Control/Functor/Multivariate): remove use of `erw` in `f` (`private def f`) |
|
t-data |
1/1 |
Mathlib/Control/Functor/Multivariate.lean |
1 |
1 |
['github-actions'] |
nobody |
24-41612 24 days ago |
24-41618 24 days ago |
24-41670 24 days |
26031 |
joelriou author:joelriou |
feat(Algebra/Homology): the derived category of a linear abelian category is linear |
---
- [x] depends on: #25931
This PR continues the work from #24596.
Original PR: https://github.com/leanprover-community/mathlib4/pull/24596 |
t-category-theory |
71/0 |
Mathlib.lean,Mathlib/Algebra/Homology/DerivedCategory/Linear.lean,Mathlib/Algebra/Homology/HomotopyCategory/Shift.lean,Mathlib/Algebra/Homology/HomotopyCategory/SingleFunctors.lean |
4 |
n/a |
['AntoineChambert-Loir', 'github-actions', 'joelriou', 'mathlib4-dependent-issues-bot'] |
nobody |
24-27655 24 days ago |
unknown |
unknown |
27566 |
wwylele author:wwylele |
feat(Data/Real): Archimedean.embedReal is a ring hom when M is an ordered ring |
Also shows that this ends up the same as `LinearOrderedField.inducedOrderRingHom` for fields
---
This is a spin-off from #27268 ~~because I got bored~~ . This is not in a high priority as I don't need it for anything yet, but the last lemma shows that `embedReal` is a generalization of `LinearOrderedField.inducedOrderRingHom` (which is only stated for field, and I didn't find when I was making the group embedding). Perhaps we should refactor `Mathlib/Algebra/Order/CompleteField.lean` with the definition here. Indeed, if we replace every `ℝ` with `(R : Type*)[ConditionallyCompleteLinearOrderedField R]` in `Data/Real/Embedding.lean`, the proof still works. What do you think?
[](https://gitpod.io/from-referrer/)
|
large-import
t-data
|
220/3 |
Mathlib/Data/Real/Embedding.lean |
1 |
1 |
['github-actions'] |
nobody |
24-21583 24 days ago |
24-21590 24 days ago |
24-21643 24 days |
27682 |
FernandoChu author:FernandoChu |
Chore: Added `vecAppend_empty` lemma |
Added the `vecAppend_empty`.
|
t-data
new-contributor
|
5/0 |
Mathlib/Data/Fin/VecNotation.lean |
1 |
1 |
['github-actions'] |
nobody |
21-46250 21 days ago |
21-46250 21 days ago |
21-46461 21 days |
25864 |
plp127 author:plp127 |
feat(Nat/Digits): use fuel in `Nat.digits` |
Add a `fuel` parameter to `Nat.digitsAux` to make it structurally recursive.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
47/14 |
Mathlib/Data/Nat/Digits/Defs.lean |
1 |
2 |
['github-actions', 'leanprover-community-bot-assistant'] |
ericrbg assignee:ericrbg |
21-25671 21 days ago |
32-16347 1 month ago |
52-62905 52 days |
25875 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Monoidal/Action): actions as monoidal functors to endofunctors |
Given a monoidal category `C` and a category `D`, we show that left actions of `C` on `D` correspond to monoidal functors `C ⥤ (D ⥤ D)ᴹᵒᵖ` by showing that the composition of `curriedAction C D` with `mopFunctor` is monoidal, and in the other direction by defining an action of `C` on `D` out of the data of such a monoidal functor.
Similarly, we show that monoidal functors `C ⥤ (D ⥤ D)` correspond to right actions of `C` on `D`.
We use this to define the "evaluation" right action of `(C ⥤ C)` (with the composition monoidal structure) on `C` as the action corresponding to the identity functor `(C ⥤ C) ⥤ (C ⥤ C)`.
---
- [x] depends on: #25840
- [x] depends on: #25766
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
222/3 |
Mathlib.lean,Mathlib/CategoryTheory/Monoidal/Action/Basic.lean,Mathlib/CategoryTheory/Monoidal/Action/End.lean,Mathlib/CategoryTheory/Monoidal/Opposite.lean |
4 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
joelriou assignee:joelriou |
21-25670 21 days ago |
46-45370 1 month ago |
59-9853 59 days |
26945 |
gasparattila author:gasparattila |
feat(LinearAlgebra/AffineSpace/AffineSubspace): basic properties of `sInf` and `iInf` |
These properties are analogous to the existing ones for the binary infimum.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
48/1 |
Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean |
1 |
4 |
['Ruben-VandeVelde', 'gasparattila', 'github-actions'] |
eric-wieser assignee:eric-wieser |
21-25663 21 days ago |
42-30064 1 month ago |
42-30110 42 days |
26986 |
WangYiran01 author:WangYiran01 |
feat(Partition): add bijection for partitions with max part ≤ r |
## Summary
This PR adds a new theorem `partition_max_equals_bound` to `Mathlib.Combinatorics.Enumerative.Partition`.
It constructs a bijection between:
- The set of partitions of `n` in which `r ∈ π.parts` and all parts are `≤ r`, and
- The set of partitions of `n - r` whose largest part is at most `r`.
This provides a constructive proof via removing/adding `r` from/to the partition multiset, in line with classical enumerative combinatorics.
## Implementation notes
- The proof uses `Multiset.erase` and `Multiset.cons` with basic properties of `sum`, `sup`, and `Partition` structures.
- The bijection is implemented explicitly via `f` and `g`, and proven mutually inverse via `Subtype.ext`.
## Linting
- [x] Passes `lake build`
- [x] Linter clean (no commandStart or longLine issues)
## Author
Contributed by Yiran Wang.
|
new-contributor
t-combinatorics
|
85/0 |
Mathlib/Combinatorics/Enumerative/Partition.lean |
1 |
2 |
['WangYiran01', 'github-actions'] |
b-mehta assignee:b-mehta |
21-25662 21 days ago |
40-62865 1 month ago |
40-62909 40 days |
27697 |
BoltonBailey author:BoltonBailey |
chore(Data/Fintype): use `univ` instead of `Fintype.elems` |
A short PR to keep the API consistent with its surroundings.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/2 |
Mathlib/Data/Fintype/Defs.lean |
1 |
1 |
['github-actions', 'vihdzp'] |
nobody |
21-21843 21 days ago |
21-25722 21 days ago |
21-25768 21 days |
25889 |
plp127 author:plp127 |
fix(Tactic/Widget/Conv): fix various issues |
Fixes various issues with the `conv?` widget. Closes #25162.
([Zulip thread](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/bug.20in.20.60conv.3F.60))
Specifically, fixes issues with `conv?` where
- when converting a `SubExpr.Pos` to conv directions, it always uses the goal expression as reference, even when working on a hypothesis, this often leads to bad results and makes it unusable on hypotheses
- it refuses to go all the way in to a function (for example in `Nat.succ 0`, you can't access `Nat.succ`)
- it refuses to enter binders where the name of the bound variable contains the character `0` (try it on `∀ (x0 : Nat), x0 = x0`)
- it panics if it can't find a binder name instead of just coming up with one itself, this also means usually you can't enter either side of a non-dependent arrow since those usually don't have binder names (try it on `False → False`)
- you can't enter the type of a binder, you end up going into the body instead (try it on `fun (x : False) => (x.elim : False → Nat) x.elim`)
- you can't partially enter a function, you end up going to the top argument after instead (for example, in the expression `id (id id) 0`, when you click on `id (id id)`, you end up going to `id id`)
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
419/84 |
Mathlib/Tactic/Widget/Conv.lean,MathlibTest/conv?.lean |
2 |
4 |
['bryangingechen', 'github-actions', 'plp127'] |
bryangingechen assignee:bryangingechen |
20-85760 20 days ago |
67-126 2 months ago |
67-171 67 days |
27738 |
ChrisHughes24 author:ChrisHughes24 |
feat(Rat): Decidable instance for IsSquare |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
3/0 |
Mathlib/Data/Rat/Lemmas.lean |
1 |
1 |
['github-actions'] |
nobody |
20-62458 20 days ago |
20-62462 20 days ago |
20-62510 20 days |
26155 |
xroblot author:xroblot |
feat(DedekindDomain/Different): add the transitivity formula |
This PR proves the transitivity formula for the different ideal.
It introduces ~~two~~ one increase~~s~~ in imports:
- `RingTheory.FractionalIdeal.Extended`: this is a short leaf file and I think the import makes sense there
- ~~`RingTheory.Localization.Defs.lean `: the file `Algebra.Algebra.Basic` is added since it is necessary to have the definition of `noZeroSMulDivisors` to get that some algebra map is injective. The import could be removed by stating the hypothesis as `Function.Injective (algebraMap * *)` but it is not the usual spelling (and cannot be synthesized by Lean). In the end, it appears that the increased import only affects three files so maybe it's fine.~~
The PR also adds two new instances:
- `FiniteDimensional (FractionRing A) (FractionRing B)` deduced from `Module.Finite A B` when `B` is a Dedekind domain.
- `IsScalarTower (FractionRing A) (FractionRing B) (FractionRing C)` deduced from `IsScalarTower A B C`
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
label:t-algebra$ |
207/4 |
Mathlib/RingTheory/DedekindDomain/Different.lean,Mathlib/RingTheory/DedekindDomain/IntegralClosure.lean,Mathlib/RingTheory/FractionalIdeal/Extended.lean,Mathlib/RingTheory/Localization/Basic.lean,Mathlib/RingTheory/Localization/FractionRing.lean |
5 |
13 |
['erdOne', 'github-actions', 'xroblot'] |
Vierkantor assignee:Vierkantor |
20-57630 20 days ago |
54-50262 1 month ago |
59-47270 59 days |
26453 |
jburroni author:jburroni |
feat(Data/PNat/Basic): add order-related instances to PNat |
Add `SuccAddOrder ℕ+` and `NoMaxOrder ℕ+` instances.
This allows, for example, the use of lemmas related to `Intervals` built with ℕ+.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-data
new-contributor
|
18/0 |
Mathlib/Data/PNat/Basic.lean |
1 |
3 |
['eric-wieser', 'github-actions', 'jburroni'] |
ericrbg assignee:ericrbg |
20-57628 20 days ago |
55-29449 1 month ago |
55-29494 55 days |
26790 |
FlAmmmmING author:FlAmmmmING |
feat(Combinatorics/Enumerative/Bell.lean): define standard Bell number |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-combinatorics
|
38/1 |
Mathlib/Combinatorics/Enumerative/Bell.lean |
1 |
11 |
['AntoineChambert-Loir', 'FlAmmmmING', 'eric-wieser', 'github-actions', 'kckennylau', 'madvorak'] |
awainverse assignee:awainverse |
20-57626 20 days ago |
46-38305 1 month ago |
46-38351 46 days |
26793 |
FlAmmmmING author:FlAmmmmING |
feat(Algebra/Group /ForwardDiff.lean): add five theorems for forward difference |
---
[](https://gitpod.io/from-referrer/)
|
large-import
new-contributor
t-algebra
label:t-algebra$ |
212/3 |
Mathlib/Algebra/Group/ForwardDiff.lean |
1 |
35 |
['AntoineChambert-Loir', 'DAE123456', 'FlAmmmmING', 'Ruben-VandeVelde', 'github-actions', 'kckennylau', 'madvorak'] |
mariainesdff assignee:mariainesdff |
20-57625 20 days ago |
33-84215 1 month ago |
46-36702 46 days |
27742 |
ChrisHughes24 author:ChrisHughes24 |
feat(Nat/nth): inequalities about Nat.nth |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
58/0 |
Mathlib/Data/Nat/Nth.lean |
1 |
1 |
['github-actions'] |
nobody |
20-56906 20 days ago |
20-56914 20 days ago |
20-56960 20 days |
25225 |
xcloudyunx author:xcloudyunx |
feat(Combinatorics/SimpleGraph): Eulerian walk in connected graph contains all vertices |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-combinatorics
|
16/0 |
Mathlib/Combinatorics/SimpleGraph/Trails.lean |
1 |
3 |
['IvanRenison', 'github-actions'] |
kmill assignee:kmill |
20-20722 20 days ago |
86-12273 2 months ago |
86-12327 86 days |
25856 |
MichaelStollBayreuth author:MichaelStollBayreuth |
perf(Data.Real.Sqrt): make Real.sqrt irreducible |
We try to see what happens if we make Real.sqrt irreducible.
There are cases where this makes unification very significantly faster, compare [#mathlib4 > Coercion triggers timeout @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Coercion.20triggers.20timeout/near/517177117).
(Migrated manually from #24752)
---
[](https://gitpod.io/from-referrer/)
|
migrated-from-branch
t-data
|
1/0 |
Mathlib/Data/Real/Sqrt.lean |
1 |
1 |
['github-actions'] |
ericrbg assignee:ericrbg |
20-20718 20 days ago |
67-51283 2 months ago |
67-54987 67 days |
26287 |
mbkybky author:mbkybky |
feat(Data/ENat/Lattice): coercion to `WithBot ℕ∞` commutes with `biSup` |
The coercion from `ℕ∞` to `WithBot ℕ∞` commutes with `biSup` and `biInf`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
19/0 |
Mathlib/Data/ENat/Lattice.lean |
1 |
1 |
['github-actions'] |
ericrbg assignee:ericrbg |
20-20718 20 days ago |
58-80002 1 month ago |
59-1352 59 days |
26370 |
b-mehta author:b-mehta |
chore(Archive): golf and generalise ascending-descending sequences |
This proof was 5 years old, not in a good generality, and overly long. We fix the latter two points.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
96/120 |
Archive/Wiedijk100Theorems/AscendingDescendingSequences.lean |
1 |
12 |
['b-mehta', 'github-actions', 'grunweg'] |
ericrbg assignee:ericrbg |
20-20714 20 days ago |
55-59262 1 month ago |
57-27800 57 days |
26909 |
gasparattila author:gasparattila |
feat(LinearAlgebra/Projectivization/Subspace): correspondence between linear and projective subspaces |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
51/3 |
Mathlib/LinearAlgebra/Projectivization/Subspace.lean |
1 |
1 |
['github-actions'] |
Vierkantor assignee:Vierkantor |
20-20712 20 days ago |
43-24104 1 month ago |
43-24152 43 days |
25500 |
eric-wieser author:eric-wieser |
feat: delaborators for metadata |
Being able to see these is very important when debugging tactic failures. Probably these could be upstreamed, but I don't think that's a reason not to merge them here first.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-meta
|
75/3 |
Mathlib/Util/Delaborators.lean,Mathlib/Util/PPOptions.lean,MathlibTest/delaborators.lean |
3 |
11 |
['JovanGerb', 'Rob23oba', 'eric-wieser', 'github-actions'] |
alexjbest assignee:alexjbest |
20-16154 20 days ago |
76-21063 2 months ago |
76-21121 76 days |
26189 |
tb65536 author:tb65536 |
feat(FieldTheory/Galois/Basic): Add simp-lemma for `FixedPoints.intermediateField` |
This PR adds a simp-lemma `FixedPoints.mem_intermediateField_iff` for the definition `FixedPoints.intermediateField`.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
4/0 |
Mathlib/FieldTheory/Galois/Basic.lean |
1 |
1 |
['github-actions'] |
joneugster assignee:joneugster |
20-16152 20 days ago |
58-40952 1 month ago |
62-12202 62 days |
26841 |
xroblot author:xroblot |
feat(FieldTheory/IsGalois): map induced by the restriction to a subfield |
For `E/L` a field extension and `K` a subfield of `E`, we define the map `(E ≃ₐ[L] E) →* (K ≃ₐ[F] K)` induced by the restriction to `K` (with `F` a subfield of `K` and `L` such that `K/F` is normal) and study when it is injective and surjective.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
63/0 |
Mathlib/FieldTheory/Galois/Basic.lean |
1 |
1 |
['github-actions'] |
Vierkantor assignee:Vierkantor |
20-16146 20 days ago |
44-67830 1 month ago |
44-67877 44 days |
27066 |
vasnesterov author:vasnesterov |
feat(Tactic/Order): frontend for `order` |
* Support `order [h1, h2]` and `order only [h1, h2]` syntax.
* Split conjunctions while extracting facts from the context. E.g. hypotheses in the form `A ∧ B` are converted into two facts `A` and `B`.
* Similarly, extract facts from existential quantifiers in the hypotheses.
---
- [x] depends on: #26354
[](https://gitpod.io/from-referrer/)
This PR continues the work from #22073.
Original PR: https://github.com/leanprover-community/mathlib4/pull/22073 |
t-meta |
91/37 |
Mathlib.lean,Mathlib/Tactic/Linarith/Frontend.lean,Mathlib/Tactic/Order.lean,Mathlib/Tactic/Order/CollectFacts.lean,Mathlib/Util/ElabWithoutMVars.lean,MathlibTest/order.lean |
6 |
22 |
['JovanGerb', 'github-actions', 'mathlib4-dependent-issues-bot', 'vasnesterov'] |
alexjbest assignee:alexjbest |
20-16142 20 days ago |
38-62469 1 month ago |
38-62497 38 days |
27304 |
jano-wol author:jano-wol |
feat: invariant dual submodules define Lie ideals |
Invariant dual submodules define Lie ideals
---
PR shows that Invariant dual submodules define Lie ideals.
This work is part of the framework: https://github.com/orgs/leanprover-community/projects/17
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
358/0 |
Mathlib.lean,Mathlib/Algebra/Lie/Weights/InvariantSubmoduleLieIdeal.lean,Mathlib/Algebra/Lie/Weights/Killing.lean,Mathlib/Algebra/Lie/Weights/RootSystem.lean |
4 |
1 |
['github-actions'] |
jcommelin assignee:jcommelin |
20-16140 20 days ago |
31-54079 1 month ago |
31-54126 31 days |
26843 |
vasnesterov author:vasnesterov |
feat(Tactic/Simproc): nested quantifiers in `existsAndEq` |
Generalize the `existsAndEq` simproc to nested existential quantifiers.
For example `∃ a, p a ∧ ∃ b, a = f b ∧ q b` now simplifies to `∃ b, p (f b) ∧ q b`.
---
[](https://gitpod.io/from-referrer/)
This PR continues the work from #23365.
Original PR: https://github.com/leanprover-community/mathlib4/pull/23365 |
migrated-from-branch
large-import
t-meta
|
452/73 |
Mathlib/Data/List/ProdSigma.lean,Mathlib/Tactic/Simproc/ExistsAndEq.lean,MathlibTest/Simproc/ExistsAndEq.lean |
3 |
10 |
['JovanGerb', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot', 'vasnesterov'] |
kmill assignee:kmill |
19-67419 19 days ago |
19-67442 19 days ago |
44-53182 44 days |
25069 |
erdOne author:erdOne |
feat(EllipticCurve): rational points of singular nodal cubics |
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
251/0 |
Mathlib.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Basic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Singular/Node.lean |
3 |
11 |
['Multramate', 'acmepjz', 'erdOne', 'github-actions'] |
kim-em assignee:kim-em |
19-59272 19 days ago |
92-1546 3 months ago |
92-1601 92 days |
25861 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Monoidal/Action): action of opposite categories |
Given a monoidal category `C` and a category `D`, we show that left (resp. right) `C`-actions on `D` induce left (resp. right) `Cᵒᵖ`-actions on `Dᵒᵖ`. Conversely, we show that left/right actions of `Cᵒᵖ` on `Dᵒᵖ` induce left/right actions of `C` on `D`.
---
- [ ] depends on: #25860
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
272/0 |
Mathlib/CategoryTheory/Monoidal/Action/Opposites.lean |
1 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
joelriou assignee:joelriou |
19-59268 19 days ago |
46-45536 1 month ago |
46-49813 46 days |
25907 |
mans0954 author:mans0954 |
Low order roots of unity |
This PR continues the work from #25470.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25470 |
t-algebra label:t-algebra$ |
182/0 |
Mathlib/Algebra/CharP/Invertible.lean,Mathlib/RingTheory/RootsOfUnity/Complex.lean |
2 |
2 |
['github-actions', 'mans0954'] |
kim-em assignee:kim-em |
19-59265 19 days ago |
66-51953 2 months ago |
66-52002 66 days |
27047 |
YaelDillies author:YaelDillies |
feat: `MonoidHom.toAdditive''` as a `MulEquiv` |
From Toric
---
I haven't yet been very thorough with the new lemmas. I first want to hear thoughts about the names
[](https://gitpod.io/from-referrer/)
|
toric
t-algebra
label:t-algebra$ |
31/7 |
Mathlib/Algebra/Group/TypeTags/Hom.lean |
1 |
1 |
['github-actions'] |
adomani assignee:adomani |
19-59240 19 days ago |
38-73120 1 month ago |
39-18577 39 days |
27820 |
FLDutchmann author:FLDutchmann |
chore(NumberTheory/SelbergSieve): turn `BoundingSieve` into a struct |
Based on a discussion [on zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/BoundingSieve.20is.20a.20class.3F.3F).
I wound up removing the custom notation as well, since not everybody was fond of it and I had some trouble getting it to work properly with structure inheritance and the corresponding coersions.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis
t-number-theory
|
51/84 |
Mathlib/NumberTheory/SelbergSieve.lean |
1 |
1 |
['github-actions'] |
nobody |
19-49719 19 days ago |
19-49742 19 days ago |
19-49778 19 days |
25974 |
scholzhannah author:scholzhannah |
feat(Topology/Compactness/CompactlyCoherentSpace): compact coherentification (k-ification) |
This PR defines the notion of turning an arbitrary topological space into a compactly coherent space. Compactly coherent spaces are commonly referred to as "compactly generated spaces" or "k-spaces" in the literature while the operation of turning a space into such as space is called the "k-ification". There are however three different notions that are described with this name. To disambiguate we use the names "compactly coherent space" and "compactcoherentification" here. See [this wikipedia page](https://en.wikipedia.org/wiki/Compactly_generated_space) for an explanation of these notions.
This PR continues the work from #25318.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25318
Co-authored-by: Floris van Doorn |
large-import
t-topology
|
175/5 |
Mathlib/Topology/Compactness/CompactlyCoherentSpace.lean |
1 |
2 |
['github-actions', 'scholzhannah'] |
ADedecker assignee:ADedecker |
19-36197 19 days ago |
65-24763 2 months ago |
65-24811 65 days |
23460 |
Timeroot author:Timeroot |
feat: Definition of `Clone` |
Basics about Clones. Part of #20051
---
- [x] depends on: #23459
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
326/0 |
Mathlib.lean,Mathlib/Algebra/Clone/Basic.lean,Mathlib/Algebra/Clone/Defs.lean,Mathlib/Data/Fin/Basic.lean |
4 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
dagurtomas assignee:dagurtomas |
19-6505 19 days ago |
57-84948 1 month ago |
57-86239 57 days |
22662 |
plp127 author:plp127 |
feat: Localization.Away.lift (computably) |
This PR adds `Localization.Away.lift'` and `Localization.Away.lift`, computable alternatives to `Localization.awayLift`.
---
- [x] depends on: #24791
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
74/0 |
Mathlib/RingTheory/Localization/Away/Basic.lean |
1 |
12 |
['eric-wieser', 'github-actions', 'mathlib4-dependent-issues-bot', 'plp127', 'vihdzp'] |
mariainesdff assignee:mariainesdff |
19-6505 19 days ago |
101-10884 3 months ago |
167-10867 167 days |
25758 |
YaelDillies author:YaelDillies |
chore: shortcut instance `CompleteLattice α → PartialOrder α` |
This avoids using the path `CompleteLattice α → CompletePartialOrder α → PartialOrder α` that goes through `Order.CompletePartialOrder` and makes it appear used to our automation, such as `shake` or `#min_imports`.
This is a followup to #25358.
---
[](https://gitpod.io/from-referrer/)
|
t-order |
7/0 |
Mathlib/Order/CompleteLattice/Defs.lean |
1 |
6 |
['Ruben-VandeVelde', 'eric-wieser', 'github-actions', 'leanprover-bot'] |
bryangingechen assignee:bryangingechen |
19-6504 19 days ago |
50-14244 1 month ago |
69-64829 69 days |
25843 |
mitchell-horner author:mitchell-horner |
feat(Combinatorics/SimpleGraph): define `between` subgraphs |
The simple graph `G.between s t` is the subgraph of `G` containing edges that connect a vertex in the set `s` to a vertex in the set `t`.
---
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #24948.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/24948* |
t-combinatorics |
95/0 |
Mathlib/Combinatorics/SimpleGraph/Bipartite.lean |
1 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
19-6503 19 days ago |
68-47255 2 months ago |
68-47239 68 days |
26398 |
ChrisHughes24 author:ChrisHughes24 |
feat(ModelTheory): definable functions |
---
Possibly this should be generalized to partial functions.
I migrated the PR by hand instead of using the script.
- [x] depends on: #20166
- [x] depends on: #20161
- [x] depends on: #20115
- [x] depends on: #20174
- [x] depends on: #20175
- [x] depends on: #21948
[](https://gitpod.io/from-referrer/)
|
t-logic |
618/0 |
Mathlib.lean,Mathlib/ModelTheory/FunctionalFormula.lean |
2 |
3 |
['ChrisHughes24', 'github-actions', 'mathlib4-dependent-issues-bot'] |
fpvandoorn assignee:fpvandoorn |
19-6501 19 days ago |
56-63769 1 month ago |
56-64028 56 days |
26462 |
PSchwahn author:PSchwahn |
feat(LinearAlgebra/Projection): add results about inverse of `Submodule.prodEquivOfIsCompl` |
Add two theorems `Submodule.prodEquivOfIsCompl_symm_apply` and `Submodule.prodEquivOfIsCompl_symm_add`, which are API for `Submodule.prodEquivOfIsCompl`.
We believe these theorems are useful; for example, we have used their statements in a [classification formalization project](https://github.com/LieLean/LowDimSolvClassification).
I am not sure whether the `prodEquivOfIsCompl_symm_apply` theorem should be tagged with `@[simp]`; this might lead to confluence issues. Opinions are welcome!
Co-authored by:
- [Viviana del Barco](https://github.com/vdelbarc)
- [Gustavo Infanti](https://github.com/GuQOliveira)
- [Exequiel Rivas](https://github.com/erivas)
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
9/0 |
Mathlib/LinearAlgebra/Projection.lean |
1 |
5 |
['PSchwahn', 'github-actions', 'kckennylau'] |
joelriou assignee:joelriou |
19-6500 19 days ago |
54-84835 1 month ago |
54-84960 54 days |
26870 |
grunweg author:grunweg |
feat: mdifferentiableOn_section_of_mem_baseSet₀ |
From the path towards geodesics and the Levi-Civita connection.
Co-authored-by: Patrick Massot
---
- [x] depends on: #26866
[](https://gitpod.io/from-referrer/)
|
t-differential-geometry |
125/0 |
Mathlib/Geometry/Manifold/VectorBundle/MDifferentiable.lean |
1 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
PatrickMassot assignee:PatrickMassot |
19-6498 19 days ago |
34-48282 1 month ago |
34-48443 34 days |
26955 |
mariainesdff author:mariainesdff |
feat(LinearAlgebra/OnSup): extend linear maps to sums of modules |
Let `A` be a ring, `X, Y` be `A`-modules, and `M, N` be `A`-submodules of `X`.
Given two linear maps `f : M →ₗ[A] Y` and `g : N →ₗ[A] Y` that agree on `M ∩ N`, there is a unique linear map `M + N →ₗ[A] Y` that simultaneously extends `f` and `g`.
Co-authored-by: @AntoineChambert-Loir
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
153/0 |
Mathlib.lean,Mathlib/LinearAlgebra/OnSup.lean |
2 |
15 |
['AntoineChambert-Loir', 'eric-wieser', 'github-actions', 'wwylele'] |
alreadydone assignee:alreadydone |
18-60417 18 days ago |
37-55612 1 month ago |
38-20119 38 days |
27864 |
BoltonBailey author:BoltonBailey |
feat(Data/{Finset,Multiset}/Sort): give sort functions ≤ default argument |
Changes the `Finset.sort` and `Multiset.sort` functions to take `≤` as the default relation argument. Then removes this argument where possible through the rest of the library.
This involves switching the order of arguments, but I think this is fine, as this function is mostly called by dot notation anyway, and I think it is more typical for the first argument of such functions to have the type that matches the namespace.
Thanks to @eric-wieser for suggesting this approach
---
[](https://gitpod.io/from-referrer/)
|
t-data |
121/97 |
Mathlib/Algebra/Polynomial/Basic.lean,Mathlib/Data/Finset/Sort.lean,Mathlib/Data/Multiset/Sort.lean,Mathlib/Data/Nat/Nth.lean,Mathlib/GroupTheory/Perm/Cycle/Factors.lean,Mathlib/GroupTheory/Perm/Sign.lean,Mathlib/Logic/Equiv/Finset.lean,Mathlib/Logic/Equiv/Multiset.lean,Mathlib/NumberTheory/ADEInequality.lean |
9 |
4 |
['BoltonBailey', 'eric-wieser', 'github-actions'] |
nobody |
18-41224 18 days ago |
18-41224 18 days ago |
19-8364 19 days |
25920 |
BoltonBailey author:BoltonBailey |
feat(Data/Finsupp/Basic): `Finsupp.optionElim'` |
Similar to how Finsupp.cons constructs a map Fin (n + 1) →₀ M from a map Fin n →₀ M,
we define Finsupp.optionElim' to construct a map Option α →₀ M from a map α →₀ M, given an additional value for none. We base this on the new optionEquiv definition. As a function, it behaves as Option.elim', hence the name.
We prove a variety of API lemmas, based on those for Finsupp.cons, to bring the definitions more in line with the contents of Data/Finsupp/Fin.
We also refactor to a new file to help avoid a too-long file and make this more analogous to Finsupp.cons
Original PR: https://github.com/leanprover-community/mathlib4/pull/13861
- [x] depends on: #26309 |
migrated-from-branch
t-data
|
124/25 |
Mathlib/Algebra/Category/MonCat/Adjunctions.lean,Mathlib/Data/Finsupp/Option.lean |
2 |
14 |
['BoltonBailey', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
nobody |
18-39168 18 days ago |
32-85914 1 month ago |
55-6497 55 days |
25724 |
bryangingechen author:bryangingechen |
chore: disable scheduled runs of stale issues workflow |
There's no point in having this run on schedule while it's still in limbo.
---
This also seems to have been [completely broken](https://github.com/leanprover-community/mathlib4/actions/workflows/stale.yml) since #21681, since the search string is too long. Maybe we should just delete this. |
CI |
1/2 |
.github/workflows/stale.yml |
1 |
1 |
['github-actions'] |
robertylewis assignee:robertylewis |
18-6478 18 days ago |
69-82305 2 months ago |
69-82287 69 days |
25812 |
vlad902 author:vlad902 |
feat(data): List.Chain' helper lemmas |
Add two helpers lemmas to go from a List.Chain' hypothesis to a concrete
predicate about two consecutive elements, one in the positive and one in
the negative. |
t-data |
29/0 |
Mathlib/Data/List/Chain.lean |
1 |
4 |
['BoltonBailey', 'github-actions', 'vlad902'] |
ericrbg assignee:ericrbg |
18-6477 18 days ago |
48-65308 1 month ago |
61-67896 61 days |
26130 |
kmill author:kmill |
feat: make `reassoc_of%` be able to defer `Category` instance |
This PR modifies the elaboration of `reassoc_of%` so that the `Category` instance can be synthesized later, like any other instance metavariable, rather than needing to be synthesized up front, when the category itself might not yet be known.
This fixes an issue reported by Robert Maxton [on Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/reassoc_of.25.20misleading.20error/near/524678383), where in the following `reassoc_of% Sigma.ι_desc` was failing.
```lean
import Mathlib.CategoryTheory.Limits.Shapes.Products
open CategoryTheory Limits
set_option autoImplicit true
variable {C : Type u} [Category.{v, u} C]
{β : Type w} {f : β → C} [HasCoproduct f] {P : C}
(p : (b : β) → f b ⟶ P) (b : β)
example {Q : C} (g : P ⟶ Q) : Sigma.ι f b ≫ Sigma.desc p ≫ g = p b ≫ g := by
rw [reassoc_of% Sigma.ι_desc]
```
Without this PR, a workaround is writing `reassoc_of% @Sigma.ι_desc`.
The PR adds `Lean.Meta.withEnsuringLocalInstance` for temporarily adding a metavariable as a local instance if it can't yet be synthesized.
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
91/20 |
Mathlib/Lean/Meta/Basic.lean,Mathlib/Tactic/CategoryTheory/IsoReassoc.lean,Mathlib/Tactic/CategoryTheory/Reassoc.lean,MathlibTest/CategoryTheory/Reassoc.lean |
4 |
6 |
['github-actions', 'kmill', 'leanprover-bot', 'sgouezel'] |
robertylewis assignee:robertylewis |
18-6475 18 days ago |
62-78585 2 months ago |
62-78568 62 days |
26240 |
grunweg author:grunweg |
perf(CommandLinterLinter): use Substring more |
Probably, these changes make little difference, but let's find out.
---
[](https://gitpod.io/from-referrer/)
|
t-linter
RFC
|
14/15 |
Mathlib/Tactic/Linter/CommandStart.lean |
1 |
5 |
['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] |
joneugster assignee:joneugster |
18-6474 18 days ago |
61-15450 2 months ago |
61-20062 61 days |
26371 |
Timeroot author:Timeroot |
feat(NumberTheory): Niven's theorem |
This file proves Niven's theorem, that the only rational cosines of angles that are rational multiples of pi, are [-1, -1/2, 0, 1/2, 1]. This is one of the theorems missing from 1000.yaml.
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
119/0 |
Mathlib.lean,Mathlib/NumberTheory/Niven.lean,docs/1000.yaml |
3 |
9 |
['Timeroot', 'github-actions', 'grunweg', 'plp127'] |
mariainesdff assignee:mariainesdff |
18-6473 18 days ago |
57-27523 1 month ago |
57-27570 57 days |
27021 |
grunweg author:grunweg |
feat: custom elaborators for differential geometry |
Add two sets of custom elaborators for differential geometry, to
- infer the model with corners in `MDifferentiable{WithinAt,At,On}` or `ContMDiff{WithinAt,At,On}` expressions from the local context, and provide shorter notation in that setting
- do the same for mfderiv: `mfderiv% f` is shorthand for `mfderiv I J f`; `mfderiv[s] f x` is short for `mfderivWithin I J f s`
- convert a fibre bundle section from a dependent section to a function into the total space, making working with differentiability of sections of fibre bundles less cumbersome
This was [discussed on zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Differential.20geometry.20elaborators.20experiment/with/528035295), to overall broad consensus.
This code has substantial tests and has been tried in the branch in #26221 (uncovering minor issues, but not substantial ones). The implementation itself is of prototype quality and will be cleaned up in the future. Once it is more robust, more differential geometry files can be converted to use it.
Co-authored-by: Patrick Massot
-----------
I agree that merging not fully polished code is not ideal, but propose doing so for two reasons:
- the work in #26221 used these elaborators extensively (to test them). Reverting those changes, merging the code, only to re-apply them is not a good use of time. Merging this PR now enables merging the work in #26221 soon.
- the feature is clearly useful and not going away: in the files that use it, it works well already. Holding off on further adopting, but merging it now seems like a good compromise.
---
[](https://gitpod.io/from-referrer/)
|
t-differential-geometry
t-meta
|
782/0 |
Mathlib.lean,Mathlib/Geometry/Manifold/Elaborators.lean,Mathlib/Geometry/Manifold/Traces.lean,MathlibTest/DifferentialGeometry/Elaborators.lean,scripts/noshake.json |
5 |
4 |
['github-actions', 'grunweg', 'sgouezel'] |
robertylewis assignee:robertylewis |
18-6469 18 days ago |
39-66158 1 month ago |
39-66231 39 days |
25760 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Bicategory): (2,1)-categories and `Pith` |
This PR introduces a class `IsLocallyGroupoid` on bicategories, asserting that every hom-category has an `IsGroupoid` instance.
With this definition, `IsLocallyGroupoid (LocallyDiscrete C)` is correctly inferred.
Given a bicategory `B`, we introduce a type alias `Pith B` for `B` (realized as a one-field structure), and we equip it with a `Bicategory` instance where the hom-categories are the cores of the hom-categories of `B`. We show that this bicategory is a (2,1)-category, construct an inclusion pseudo-functor from `Pith B` to `B`, and show that every pseudofunctor from a (2,1)-category to `B` factors through this inclusion.
---
We can’t fully state the fact that `(pseudofunctorToPith F).comp (inclusion F)` "is" `F` because #18254 is still not merged.
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #25150.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/25150* |
t-category-theory |
191/0 |
Mathlib.lean,Mathlib/CategoryTheory/Bicategory/LocallyGroupoid.lean |
2 |
2 |
['b-mehta', 'github-actions'] |
joelriou assignee:joelriou |
17-36712 17 days ago |
69-64678 2 months ago |
69-64661 69 days |
26914 |
quangvdao author:quangvdao |
feat(Data/PFunctor/Univariate): more definitions for univariate `PFunctor` |
This PR defines several basic definitions of `PFunctor`, including zero, one, constants, monomials, coproduct (sum), product, sigma, pi, tensor product, universe lifting, and equivalence.
We also add: (1) simple lemmas connecting the basic definitions, (2) an automatically derived ext lemma for `PFunctor` via `@[ext]` attribute
Some things I'm not clear on:
- I define `HAdd` and `HMul` instances for coproduct and product of poly functors having different universe levels. Should I also define `Add` and `Mul` instances for poly functors having the same universe level?
- Is it ok to define notation for tensor product, i.e. `@[inherit_doc] scoped infixr:80 " ⊗ " => tensor`? I'm worried it might clash with other notation.
- Need a double-check on the priority of notation.
Some future definitions to add:
- Various equivalences arising from arithmetic identities, e.g., `P + 0 ≃ₚ P`.
- Definitions of Lenses and Charts (each of them will be a file or even a folder)
- Exponential objects (corresponding to both `prod` and `tensor`)
---
[](https://gitpod.io/from-referrer/)
|
t-data |
144/5 |
Mathlib/Data/PFunctor/Univariate/Basic.lean |
1 |
19 |
['alexkeizer', 'eric-wieser', 'github-actions', 'quangvdao'] |
nobody |
17-9061 17 days ago |
43-7570 1 month ago |
43-7615 43 days |
25042 |
alreadydone author:alreadydone |
feat(Topology): restriction/extension of Trivialization and composition with Homeomorph |
---
- [x] depends on: #25041
[](https://gitpod.io/from-referrer/)
|
t-topology |
148/2 |
Mathlib/Topology/FiberBundle/Trivialization.lean,Mathlib/Topology/Maps/Basic.lean |
2 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
ADedecker assignee:ADedecker |
17-6481 17 days ago |
36-58345 1 month ago |
92-41613 92 days |
26061 |
kckennylau author:kckennylau |
feat(AlgebraicGeometry): define Projective Space |
This defines the projective space over a scheme, indexed by an arbitrary type.
---
Zulip discussion: [#maths > Projective Space](https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/Projective.20Space/with/524057860)
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
63/0 |
Mathlib.lean,Mathlib/AlgebraicGeometry/ProjectiveSpace.lean |
2 |
14 |
['callesonne', 'erdOne', 'github-actions', 'kckennylau'] |
erdOne assignee:erdOne |
17-6478 17 days ago |
64-8219 2 months ago |
64-8265 64 days |
26299 |
adomani author:adomani |
perf: the `commandStart` linter only acts on modified files |
Introduces an `IO.Ref` to allow the `commandStart` linter to only run on files that git considers modified with respect to `master`.
The linter is also active on files that have had some error, as these are likely being modified!
The PR should also mitigate the speed-up that the linter introduced:
[#mathlib4 > A whitespace linter @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/A.20whitespace.20linter/near/525091877)
Assuming that this goes well, a similar mechanism could be applied to several linters that do not need to run on all code, just on the modified code.
Implementation detail: the linter is currently either on or off in "whole" files. It may be also a future development to make this more granular and only run the linter on "modifed commands in modified files", but this is not currently the plan for this modification!
---
[](https://gitpod.io/from-referrer/)
|
t-linter |
48/0 |
Mathlib/Tactic/Linter/CommandStart.lean |
1 |
5 |
['adomani', 'github-actions', 'grunweg', 'leanprover-bot'] |
joneugster assignee:joneugster |
17-6477 17 days ago |
58-46767 1 month ago |
58-51399 58 days |
26478 |
JovanGerb author:JovanGerb |
chore(LibraryRewrite): replace `rw??` with `rw?` |
As suggested by @YaelDillies, now `rw?` overwrites Lean core's implementation of `rw?`.
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
56/49 |
Mathlib/Tactic/Widget/LibraryRewrite.lean,MathlibTest/LibraryRewrite.lean,MathlibTest/rewrites.lean |
3 |
5 |
['YaelDillies', 'erdOne', 'github-actions', 'leanprover-community-bot-assistant'] |
alexjbest assignee:alexjbest |
17-6475 17 days ago |
25-14646 25 days ago |
39-76393 39 days |
26484 |
peabrainiac author:peabrainiac |
feat(Geometry/Diffeology): basics of diffeological spaces |
Introduces diffeological spaces, smooth maps between them, the D-topology and the standard diffeology on finite-dimensional normed spaces.
---
This PR continues the work from #21969. |
t-differential-geometry |
471/0 |
Mathlib.lean,Mathlib/Geometry/Diffeology/Basic.lean,docs/references.bib |
3 |
9 |
['JovanGerb', 'github-actions', 'lecopivo', 'peabrainiac'] |
fpvandoorn assignee:fpvandoorn |
17-6474 17 days ago |
53-85747 1 month ago |
54-4099 54 days |
26510 |
alreadydone author:alreadydone |
feat(Matroid): exchange lemmas involving closure |
---
for #24350
[](https://gitpod.io/from-referrer/)
|
t-data
t-combinatorics
|
37/0 |
Mathlib/Data/Matroid/Closure.lean |
1 |
1 |
['github-actions'] |
kmill assignee:kmill |
17-6473 17 days ago |
52-44893 1 month ago |
52-44938 52 days |
26912 |
pechersky author:pechersky |
chore(Algebra/Ring/Subring): simp tag `Subring.smul_def` |
s-multiplying by a subtype is easiest to manipulate when both terms are in the ambient type. Many places that had to use the _def lemma for a rewrite, or to include it in a simp set, no longer have to.
Ported from #25308
---
[](https://gitpod.io/from-referrer/)
I found this being not-simp frustrating when talking about submodules over a valuation subring. |
maintainer-merge
t-algebra
label:t-algebra$ |
68/67 |
Mathlib/Algebra/Algebra/Subalgebra/Basic.lean,Mathlib/Algebra/Field/Subfield/Basic.lean,Mathlib/Algebra/Group/Subgroup/Actions.lean,Mathlib/Algebra/Group/Submonoid/MulAction.lean,Mathlib/Algebra/Module/LocalizedModule/Basic.lean,Mathlib/Algebra/Module/LocalizedModule/Exact.lean,Mathlib/Algebra/Module/LocalizedModule/IsLocalization.lean,Mathlib/Algebra/Module/LocalizedModule/Submodule.lean,Mathlib/Algebra/Ring/Periodic.lean,Mathlib/Algebra/Ring/Subring/Basic.lean,Mathlib/Algebra/Ring/Subsemiring/Basic.lean,Mathlib/Analysis/CStarAlgebra/Basic.lean,Mathlib/FieldTheory/KummerExtension.lean,Mathlib/GroupTheory/GroupAction/Defs.lean,Mathlib/GroupTheory/GroupAction/MultiplePrimitivity.lean,Mathlib/GroupTheory/GroupAction/MultipleTransitivity.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfFixingSubgroup.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfStabilizer.lean,Mathlib/LinearAlgebra/RootSystem/Irreducible.lean,Mathlib/LinearAlgebra/RootSystem/RootPositive.lean,Mathlib/LinearAlgebra/RootSystem/WeylGroup.lean,Mathlib/RingTheory/Etale/Kaehler.lean,Mathlib/RingTheory/LocalProperties/Projective.lean,Mathlib/RingTheory/Localization/InvSubmonoid.lean,Mathlib/RingTheory/OreLocalization/Basic.lean |
25 |
16 |
['eric-wieser', 'github-actions', 'j-loreaux', 'linesthatinterlace', 'pechersky'] |
joelriou assignee:joelriou |
17-6470 17 days ago |
29-21184 29 days ago |
40-36058 40 days |
27076 |
Komyyy author:Komyyy |
refactor: don't require `DecidablePred` to state `PrimrecPred` |
```lean
def PrimrecPred {α} [Primcodable α] (p : α → Prop) [DecidablePred p] :=
Primrec fun a => decide (p a)
```
Currently, `DecidablePred` is required to **state** `PrimrecPred`, so this PR changes the definition and adds convenient APIs for this new definition:
```lean
def PrimrecPred {α} [Primcodable α] (p : α → Prop) :=
open scoped Classical in Primrec fun a => decide (p a)
```
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-computability
|
117/67 |
Mathlib/Computability/Halting.lean,Mathlib/Computability/Partrec.lean,Mathlib/Computability/Primrec.lean,Mathlib/Computability/Reduce.lean |
4 |
10 |
['Komyyy', 'YaelDillies', 'digama0', 'eric-wieser', 'github-actions'] |
YaelDillies assignee:YaelDillies |
16-73799 16 days ago |
16-73799 16 days ago |
38-40498 38 days |
26956 |
mariainesdff author:mariainesdff |
feat(RingTheory/DividedPowers/Basic): add divided power structure on pZp |
We construct a divided power structure on the ideal `(p) ⊆ ℤ_[p]`, given by the family of maps `fun n x ↦ x^n / n!`.
Co-authored-by: @AntoineChambert-Loir
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
561/2 |
Mathlib.lean,Mathlib/Data/Nat/Factorial/NatCast.lean,Mathlib/RingTheory/DividedPowers/Padic.lean,Mathlib/RingTheory/DividedPowers/RatAlgebra.lean |
4 |
1 |
['github-actions'] |
mattrobball assignee:mattrobball |
16-60203 16 days ago |
16-60203 16 days ago |
41-63705 41 days |
26347 |
mans0954 author:mans0954 |
feature(Data/Finset/RangeDistance): abs_sub_lt_of_mem_finset_range |
This PR continues the work from #23161.
Original PR: https://github.com/leanprover-community/mathlib4/pull/23161 |
t-data |
30/0 |
Mathlib.lean,Mathlib/Algebra/Order/Group/Unbundled/Abs.lean,Mathlib/Data/Finset/RangeDistance.lean |
3 |
2 |
['github-actions', 'mans0954'] |
alreadydone assignee:alreadydone |
16-59880 16 days ago |
16-59880 16 days ago |
57-69294 57 days |
27933 |
grunweg author:grunweg |
chore(OrdNode): format code example in code blocks |
Wrap them in code blocks (and unindent them; that indentation is not needed any more).
This also avoids warnings from the linter in #27898.
-------
[](https://gitpod.io/from-referrer/)
|
t-data |
459/212 |
Mathlib/Data/Ordmap/Ordnode.lean |
1 |
3 |
['eric-wieser', 'github-actions', 'grunweg'] |
nobody |
16-57084 16 days ago |
16-65600 16 days ago |
16-65647 16 days |
27926 |
euprunin author:euprunin |
chore(Geometry/RingedSpace): remove one porting note and one `erw` |
---
Show trace profiling of colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
### Trace profiling of `colimitPresheafObjIsoComponentwiseLimit_inv_ι_app` before PR 27926
```
info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.command] [1.040188] @[simp]
theorem colimitPresheafObjIsoComponentwiseLimit_inv_ι_app (F : J ⥤ PresheafedSpace.{_, _, v} C)
(U : Opens (Limits.colimit F).carrier) (j : J) :
(colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j) :=
by
delta colimitPresheafObjIsoComponentwiseLimit
rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
dsimp
rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
-- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block
set f := _
change _ ≫ f = _
suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]
erw [← (F.obj j).presheaf.map_id]
change (F.obj j).presheaf.map _ ≫ _ = _
simp
[Elab.definition.header] [0.097144] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
[Elab.step] [0.025268] expected type: Type v, term
Opens (Limits.colimit F).carrier
[Elab.step] [0.020151] expected type: Type ?u.174516, term
(Limits.colimit F).carrier
[Elab.step] [0.019933] expected type: , term
(Limits.colimit F)
[Elab.step] [0.019920] expected type: , term
Limits.colimit F
[Meta.synthInstance] [0.018758] ✅️ HasColimit F
[Elab.step] [0.070061] expected type: Prop, term
(colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j)
[Elab.step] [0.070046] expected type: Prop, term
binrel% Eq✝ ((colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U))
(limit.π _ (op j))
[Meta.synthInstance] [0.058249] ✅️ HasLimit (componentwiseDiagram F U)
[Elab.attribute] [0.937317] applying [simp]
info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.async] [0.937262] elaborating proof of AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
[Elab.definition.value] [0.927035] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
[Elab.step] [0.922546]
delta colimitPresheafObjIsoComponentwiseLimit
rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
dsimp
rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
-- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block
set f := _
change _ ≫ f = _
suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]
erw [← (F.obj j).presheaf.map_id]
change (F.obj j).presheaf.map _ ≫ _ = _
simp
[Elab.step] [0.922530]
delta colimitPresheafObjIsoComponentwiseLimit
rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
dsimp
rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
-- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block
set f := _
change _ ≫ f = _
suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]
erw [← (F.obj j).presheaf.map_id]
change (F.obj j).presheaf.map _ ≫ _ = _
simp
[Elab.step] [0.146177] rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
[Elab.step] [0.146159] (rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.146150] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.146140] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.144815] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]
[Meta.check] [0.016973] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.014416] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a.app (op U)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.010654] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.023805] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Elab.step] [0.046171] dsimp
[Elab.step] [0.362200] rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
[Elab.step] [0.361801] (rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.361793] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.361787] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.361130] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
[Meta.check] [0.046061] ✅️ fun _a ↦
((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv) ≫
((colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
_a) ≫
(Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.014339] ✅️ autoParam
(∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f)
_auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.014330] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.014288] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.013035] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf
(eqToIso
⋯)).hom =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom
[Meta.isDefEq] [0.013017] ✅️ inst✝³.toCategoryStruct.3
(((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f)
(mapIso (F.obj (unop Y)).presheaf
(eqToIso
⋯)).hom =?= inst✝³.toCategoryStruct.3
(((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f)
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom
[Meta.check] [0.027427] ✅️ fun _a ↦
((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv) ≫
_a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.019082] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.023213] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.014000] ✅️ (colimit.isoColimitCocone
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(colimit.ι F j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (Hom.c ?β).app ?U ≫
(Hom.c ?α).app (op ((Opens.map (Hom.base ?β)).obj (unop ?U))) ≫ ?h
[Meta.isDefEq] [0.011423] ✅️ (colimit.ι F j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (Hom.c ?α).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))))) ≫
?h
[Meta.check] [0.019734] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.041226] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.013545] ✅️ (({ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯)) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (?f ≫ ?g) ≫ ?h
[Meta.check] [0.022526] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.010494] ✅️ autoParam
(∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f)
_auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.010484] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.010433] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Elab.step] [0.153503] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
[Elab.step] [0.149349] rw (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc,
limMap_π_assoc]
[Elab.step] [0.149342] (rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.149338] rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.149333] rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.148668] rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
[Meta.isDefEq] [0.018626] ✅️ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom ⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h
[Meta.isDefEq.delta] [0.018438] ✅️ (limitObjIsoLimitCompEvaluation
(pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h
[Meta.isDefEq] [0.015684] ✅️ ({ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
?h
[Meta.isDefEq.delta] [0.015635] ✅️ ({ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
?h
[Meta.isDefEq] [0.012504] ✅️ ({ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq.delta] [0.012467] ✅️ ({ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (limit.π (pushforwardDiagramToColimit F).leftOp ?j).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.check] [0.032205] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.011807] ✅️ autoParam
(∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f)
_auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.011776] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.011697] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.010926] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf
(eqToIso
⋯)).hom =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom
[Meta.isDefEq] [0.010889] ✅️ inst✝³.toCategoryStruct.3
(((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f)
(mapIso (F.obj (unop Y)).presheaf
(eqToIso
⋯)).hom =?= inst✝³.toCategoryStruct.3
(((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f)
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom
[Meta.synthInstance] [0.032731] ✅️ HasLimit (componentwiseDiagram F U)
[Meta.synthInstance] [0.037409] ✅️ HasLimit
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Elab.step] [0.014221] suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]
[Elab.step] [0.012150] refine_lift
suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_
[Elab.step] [0.012144] focus
(refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_);
rotate_right)
[Elab.step] [0.012137] (refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_);
rotate_right)
[Elab.step] [0.012133] (refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_);
rotate_right)
[Elab.step] [0.012129] (refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_);
rotate_right)
[Elab.step] [0.012125] refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_);
rotate_right
[Elab.step] [0.012121] refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_);
rotate_right
[Elab.step] [0.012108] refine
no_implicit_lambda%
(suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id];
?_)
[Elab.step] [0.013093] change (F.obj j).presheaf.map _ ≫ _ = _
[Elab.step] [0.168494] simp
[Meta.isDefEq] [0.021985] ❌️ eqToHom ?p =?= eqToHom ⋯
[Meta.isDefEq] [0.021872] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.021293] ❌️ eqToHom ?p =?= eqToHom ⋯
[Meta.isDefEq] [0.021164] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.010555] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯)
[Meta.isDefEq.delta] [0.010532] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯)
[Meta.isDefEq] [0.010242] ✅️ eqToHom ?p =?= eqToHom ⋯
[Meta.isDefEq] [0.010214] ✅️ ?p =?= colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign] [0.010212] ✅️ ?p := colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign.checkTypes] [0.010174] ✅️ (?p : op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι F j).base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))) := (colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) : (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.010170] ✅️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι F j).base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) =?= (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:319:8: [Elab.async] [0.072478] Lean.addDecl
[Kernel] [0.072444] typechecking declarations [AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app]
```
### Trace profiling of `colimitPresheafObjIsoComponentwiseLimit_inv_ι_app` after PR 27926
```diff
diff --git a/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean b/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean
index 5771499b70..cbf879186d 100644
--- a/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean
+++ b/Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean
@@ -316,2 +316,3 @@ def colimitPresheafObjIsoComponentwiseLimit (F : J ⥤ PresheafedSpace.{_, _, v}
+set_option trace.profiler true in
@[simp]
@@ -329,8 +330,2 @@ theorem colimitPresheafObjIsoComponentwiseLimit_inv_ι_app (F : J ⥤ Presheafed
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
- -- Porting note: `convert` doesn't work due to meta variable, so change to a `suffices` block
- set f := _
- change _ ≫ f = _
- suffices f_eq : f = 𝟙 _ by rw [f_eq, comp_id]
- erw [← (F.obj j).presheaf.map_id]
- change (F.obj j).presheaf.map _ ≫ _ = _
simp
```
```
info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.command] [1.024539] @[simp]
theorem colimitPresheafObjIsoComponentwiseLimit_inv_ι_app (F : J ⥤ PresheafedSpace.{_, _, v} C)
(U : Opens (Limits.colimit F).carrier) (j : J) :
(colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j) :=
by
delta colimitPresheafObjIsoComponentwiseLimit
rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
dsimp
rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
simp
[Elab.definition.header] [0.078196] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
[Elab.step] [0.012578] expected type: Type v, term
Opens (Limits.colimit F).carrier
[Elab.step] [0.064806] expected type: Prop, term
(colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U) = limit.π _ (op j)
[Elab.step] [0.064794] expected type: Prop, term
binrel% Eq✝ ((colimitPresheafObjIsoComponentwiseLimit F U).inv ≫ (colimit.ι F j).c.app (op U))
(limit.π _ (op j))
[Meta.synthInstance] [0.046124] ✅️ HasLimit (componentwiseDiagram F U)
[Elab.attribute] [0.941447] applying [simp]
info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:318:0: [Elab.async] [0.941493] elaborating proof of AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
[Elab.definition.value] [0.933934] AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app
[Elab.step] [0.922601]
delta colimitPresheafObjIsoComponentwiseLimit
rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
dsimp
rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
simp
[Elab.step] [0.922582]
delta colimitPresheafObjIsoComponentwiseLimit
rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
dsimp
rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
simp
[Elab.step] [0.135785] rw [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv, pushforwardToOfIso_app,
congr_app (Iso.symm_inv _)]
[Elab.step] [0.135770] (rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.135762] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.135756] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.135146] rewrite [Iso.trans_inv, Iso.trans_inv, Iso.app_inv, sheafIsoOfIso_inv,
pushforwardToOfIso_app, congr_app (Iso.symm_inv _)]
[Meta.check] [0.011988] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.013908] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a.app (op U)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.010543] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.020840] ✅️ fun _a ↦
(((Limits.lim.mapIso
(NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯)).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).inv) ≫
_a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Elab.step] [0.043416] dsimp
[Elab.step] [0.347288] rw [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ← comp_c_app_assoc,
congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
[Elab.step] [0.347048] (rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.347040] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.347035] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.346402] rewrite [map_id, comp_id, assoc, assoc, assoc, NatTrans.naturality, ←
comp_c_app_assoc, congr_app (colimit.isoColimitCocone_ι_hom _ _), assoc]
[Meta.check] [0.032750] ✅️ fun _a ↦
((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv) ≫
((colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
_a) ≫
(Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.028063] ✅️ fun _a ↦
((limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv) ≫
_a ≫ (Limits.colimit F).presheaf.map (eqToHom ⋯)) ≫
(colimit.ι F j).c.app (op U) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.019057] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.022883] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.013327] ✅️ (colimit.isoColimitCocone
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).hom.c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(colimit.ι F j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (Hom.c ?β).app ?U ≫
(Hom.c ?α).app (op ((Opens.map (Hom.base ?β)).obj (unop ?U))) ≫ ?h
[Meta.isDefEq] [0.011046] ✅️ (colimit.ι F j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (Hom.c ?α).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))))) ≫
?h
[Meta.check] [0.019487] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.check] [0.042766] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a ≫ ((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =
limit.π (componentwiseDiagram F U) (op j)
[Meta.isDefEq] [0.013346] ✅️ (({ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯)) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map (eqToHom ⋯) =?= (?f ≫ ?g) ≫ ?h
[Meta.check] [0.019948] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
(limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Elab.step] [0.157932] erw [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
[Elab.step] [0.154595] rw (transparency✝ := .default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc,
limMap_π_assoc]
[Elab.step] [0.154588] (rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.154584] rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.154579] rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.153927] rewrite (transparency✝ :=
.default✝) [limitObjIsoLimitCompEvaluation_inv_π_app_assoc, limMap_π_assoc]
[Meta.isDefEq] [0.012088] ✅️ (limitObjIsoLimitCompEvaluation (pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom ⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h
[Meta.isDefEq.delta] [0.012000] ✅️ (limitObjIsoLimitCompEvaluation
(pushforwardDiagramToColimit F).leftOp
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).inv ≫
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app j).c.app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
(F.obj j).presheaf.map (eqToHom ⋯) ≫
((pushforward C (colimit.ι F j).base).obj (F.obj j).presheaf).map
(eqToHom
⋯) =?= (limitObjIsoLimitCompEvaluation ?F ?k).inv ≫ (limit.π ?F ?j).app ?k ≫ ?h
[Meta.check] [0.023999] ✅️ fun _a ↦
limMap (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv ≫
_a =
limit.π (componentwiseDiagram F U) (op j)
[Meta.synthInstance] [0.043793] ✅️ HasLimit (componentwiseDiagram F U)
[Meta.synthInstance] [0.050911] ✅️ HasLimit
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Elab.step] [0.237283] simp
[Meta.isDefEq] [0.020018] ✅️ (NatIso.ofComponents ?app ?naturality).inv.app
?X =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv.app (op j)
[Meta.isDefEq.delta] [0.019991] ✅️ (NatIso.ofComponents ?app ?naturality).inv.app
?X =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯).inv.app (op j)
[Meta.isDefEq] [0.019797] ✅️ (NatIso.ofComponents ?app
?naturality).inv =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯).inv
[Meta.isDefEq.delta] [0.019779] ✅️ (NatIso.ofComponents ?app
?naturality).inv =?= (NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯))
⋯).inv
[Meta.isDefEq] [0.019743] ✅️ NatIso.ofComponents ?app
?naturality =?= NatIso.ofComponents (fun X ↦ mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)) ⋯
[Meta.isDefEq] [0.017808] ✅️ ?naturality =?= @colimitPresheafObjIsoComponentwiseLimit._proof_5 J
inst✝⁴ C inst✝³ inst✝² inst✝¹ inst✝ F (hasColimitOfHasColimitsOfShape F) U
[Meta.isDefEq.assign] [0.017806] ✅️ ?naturality := @colimitPresheafObjIsoComponentwiseLimit._proof_5
J inst✝⁴ C inst✝³ inst✝² inst✝¹ inst✝ F (hasColimitOfHasColimitsOfShape F) U
[Meta.isDefEq.assign.checkTypes] [0.017713] ✅️ (?naturality : autoParam
(∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f)
_auto✝) := (@colimitPresheafObjIsoComponentwiseLimit._proof_5 J inst✝⁴ C inst✝³ inst✝²
inst✝¹ inst✝ F (hasColimitOfHasColimitsOfShape F)
U : ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f)
[Meta.isDefEq] [0.017709] ✅️ autoParam
(∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map f)
_auto✝ =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫ (componentwiseDiagram F U).map f
[Meta.isDefEq] [0.017679] ✅️ ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ∀ {X Y : Jᵒᵖ} (f : X ⟶ Y),
((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map f
[Meta.isDefEq] [0.017646] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map
f =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom =
(mapIso (F.obj (unop X)).presheaf (eqToIso ⋯)).hom ≫
(componentwiseDiagram F U).map f
[Meta.isDefEq] [0.016839] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf
(eqToIso
⋯)).hom =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f ≫
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom
[Meta.isDefEq] [0.016824] ✅️ inst✝³.toCategoryStruct.3
(((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f)
(mapIso (F.obj (unop Y)).presheaf
(eqToIso
⋯)).hom =?= inst✝³.toCategoryStruct.3
(((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f)
(mapIso (F.obj (unop Y)).presheaf (eqToIso ⋯)).hom
[Meta.isDefEq] [0.014645] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
f =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
f
[Meta.isDefEq] [0.014628] ✅️ ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation (Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U))).toPrefunctor.2
f =?= ((pushforwardDiagramToColimit F).leftOp ⋙
(evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U))).toPrefunctor.2
f
[Meta.isDefEq] [0.014549] ✅️ ((evaluation
(Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))).map
((pushforwardDiagramToColimit F).leftOp.map
f) =?= ((evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))).map
((pushforwardDiagramToColimit F).leftOp.map f)
[Meta.isDefEq] [0.014534] ✅️ ((evaluation
(Opens ↑(Limits.colimit (F ⋙ forget C)))ᵒᵖ C).obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U))).toPrefunctor.2
((pushforwardDiagramToColimit F).leftOp.map
f) =?= ((evaluation
(Opens
↑↑{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }.cocone.pt)ᵒᵖ
C).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U))).toPrefunctor.2
((pushforwardDiagramToColimit F).leftOp.map f)
[Meta.isDefEq] [0.014406] ✅️ ((pushforwardDiagramToColimit F).leftOp.map
f).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= ((pushforwardDiagramToColimit F).leftOp.map f).app
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).symm.hom.base).op.obj
(op U))
[Meta.isDefEq] [0.014386] ✅️ ((pushforwardDiagramToColimit F).leftOp.map
f).1
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U)) =?= ((pushforwardDiagramToColimit F).leftOp.map f).1
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U))
[Meta.isDefEq] [0.010919] ✅️ ((pushforward C
(colimit.ι (F ⋙ forget C) (unop X))).map
(F.map f.unop).c).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U)) ≫
((Pushforward.comp ((F ⋙ forget C).map f.unop)
(colimit.ι (F ⋙ forget C) (unop X))
(F.obj (unop Y)).presheaf).inv ≫
(pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U)) =?= ((pushforward C
(colimit.ι (F ⋙ forget C) (unop X))).map
(F.map f.unop).c).app
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U)) ≫
((Pushforward.comp ((F ⋙ forget C).map f.unop)
(colimit.ι (F ⋙ forget C) (unop X))
(F.obj (unop Y)).presheaf).inv ≫
(pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U))
[Meta.isDefEq] [0.010872] ✅️ inst✝³.toCategoryStruct.3
(((pushforward C (colimit.ι (F ⋙ forget C) (unop X))).map
(F.map f.unop).c).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U)))
(((Pushforward.comp ((F ⋙ forget C).map f.unop)
(colimit.ι (F ⋙ forget C) (unop X))
(F.obj (unop Y)).presheaf).inv ≫
(pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit F }).inv.base).obj
U))) =?= inst✝³.toCategoryStruct.3
(((pushforward C (colimit.ι (F ⋙ forget C) (unop X))).map
(F.map f.unop).c).app
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U)))
(((Pushforward.comp ((F ⋙ forget C).map f.unop)
(colimit.ι (F ⋙ forget C) (unop X))
(F.obj (unop Y)).presheaf).inv ≫
(pushforwardEq ⋯ (F.obj (unop Y)).presheaf).hom).app
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit :=
colimitCoconeIsColimit
F }).symm.hom.base).op.obj
(op U)))
[Meta.isDefEq] [0.036880] ❌️ eqToHom ?p =?= eqToHom ⋯
[Meta.isDefEq] [0.036754] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign] [0.014492] ❌️ ?p := colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign.checkTypes] [0.014435] ❌️ (?p : op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) := (colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) : (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.014433] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.013670] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.013662] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.toPrefunctor.1
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.013635] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= op
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).obj
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))))
[Meta.isDefEq] [0.013607] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).obj
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.013597] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).toPrefunctor.1
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).toPrefunctor.1
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.013549] ❌️ {
carrier :=
⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹'
↑((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U),
is_open' :=
⋯ } =?= {
carrier :=
⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹'
↑(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))),
is_open' := ⋯ }
[Meta.isDefEq] [0.013528] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹'
↑((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= ⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹'
↑(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.delta] [0.010260] ❌️ ⇑(ConcreteCategory.hom
(colimit.ι (F ⋙ forget C) j)) ⁻¹'
↑((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= ⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹'
↑(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.010255] ❌️ ⇑(ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)) =?= ⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base)
[Meta.isDefEq] [0.010244] ❌️ ((fun X Y ↦ ContinuousMap.instFunLike) (↑(F.obj j))
(Limits.colimit (F ⋙ forget C))).1
(ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)) =?= ((fun X Y ↦ ContinuousMap.instFunLike) ↑(F.obj j)
↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt).1
(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base)
[Meta.isDefEq] [0.010227] ❌️ (ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)).toFun =?= (ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).toFun
[Meta.isDefEq] [0.010215] ❌️ (ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)).1 =?= (ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).1
[Meta.isDefEq.assign] [0.017826] ❌️ ?p := colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign.checkTypes] [0.017754] ❌️ (?p : op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) := (colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) : fun {β} ↦
(Opens.map β.base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.017751] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= fun {β} ↦
(Opens.map β.base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.017746] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.017009] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.017001] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.toPrefunctor.1
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
[Meta.isDefEq] [0.016976] ❌️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =?= op
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).obj
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))))
[Meta.isDefEq] [0.016946] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).obj
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.016936] ❌️ (Opens.map (colimit.ι (F ⋙ forget C) j)).toPrefunctor.1
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= (Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).toPrefunctor.1
(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.016889] ❌️ {
carrier :=
⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹'
↑((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U),
is_open' :=
⋯ } =?= {
carrier :=
⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹'
↑(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))),
is_open' := ⋯ }
[Meta.isDefEq] [0.016868] ❌️ ⇑(ConcreteCategory.hom (colimit.ι (F ⋙ forget C) j)) ⁻¹'
↑((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= ⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹'
↑(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.delta] [0.013665] ❌️ ⇑(ConcreteCategory.hom
(colimit.ι (F ⋙ forget C) j)) ⁻¹'
↑((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U) =?= ⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base) ⁻¹'
↑(unop
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.013661] ❌️ ⇑(ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)) =?= ⇑(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base)
[Meta.isDefEq] [0.013651] ❌️ ((fun X Y ↦ ContinuousMap.instFunLike) (↑(F.obj j))
(Limits.colimit (F ⋙ forget C))).1
(ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)) =?= ((fun X Y ↦ ContinuousMap.instFunLike) ↑(F.obj j)
↑{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }.cocone.pt).1
(ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base)
[Meta.isDefEq] [0.013633] ❌️ (ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)).toFun =?= (ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).toFun
[Meta.isDefEq] [0.013622] ❌️ (ConcreteCategory.hom
(colimit.ι (F ⋙ forget C)
j)).1 =?= (ConcreteCategory.hom
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).1
[Meta.isDefEq] [0.021315] ❌️ eqToHom ?p =?= eqToHom ⋯
[Meta.isDefEq] [0.021164] ❌️ ?p =?= colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.010396] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯)
[Meta.isDefEq.delta] [0.010372] ✅️ (toPrefunctor ?F).map (eqToHom ?p) =?= (F.obj j).presheaf.map (eqToHom ⋯)
[Meta.isDefEq] [0.010074] ✅️ eqToHom ?p =?= eqToHom ⋯
[Meta.isDefEq] [0.010047] ✅️ ?p =?= colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign] [0.010045] ✅️ ?p := colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq.assign.checkTypes] [0.010004] ✅️ (?p : op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι F j).base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))) := (colimit.isoColimitCocone_ι_hom
{ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F } j ▸
Eq.refl
((Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) : (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)))
[Meta.isDefEq] [0.010000] ✅️ op
((Opens.map (colimit.ι (F ⋙ forget C) j)).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
op
((Opens.map (colimit.ι F j).base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom.base).obj
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))) =?= (Opens.map
({ cocone := colimitCocone F, isColimit := colimitCoconeIsColimit F }.cocone.ι.app
j).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U)) =
(Opens.map
(colimit.ι F j ≫
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).hom).base).op.obj
(op
((Opens.map
(colimit.isoColimitCocone
{ cocone := colimitCocone F,
isColimit := colimitCoconeIsColimit F }).inv.base).obj
U))
info: Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean:319:8: [Elab.async] [0.056169] Lean.addDecl
[Kernel] [0.056142] typechecking declarations [AlgebraicGeometry.PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_inv_ι_app]
```
|
t-algebraic-geometry |
0/6 |
Mathlib/Geometry/RingedSpace/PresheafedSpace/HasColimits.lean |
1 |
2 |
['euprunin', 'github-actions'] |
nobody |
16-53740 16 days ago |
16-74654 16 days ago |
16-74700 16 days |
27120 |
YaelDillies author:YaelDillies |
feat: the category of commutative bialgebras |
Define the bundled category `CommBialgCat R` of commutative bialgebras over a fixed commutative ring `R` along with the forgetful functor to `CommAlgCat`.
From Toric
Co-authored-by: Andrew Yang
Co-authored-by: Michał Mrugała
---
[](https://gitpod.io/from-referrer/)
|
toric
t-algebra
label:t-algebra$ |
235/0 |
Mathlib.lean,Mathlib/Algebra/Category/CommBialgCat.lean |
2 |
9 |
['Whysoserioushah', 'YaelDillies', 'github-actions'] |
dagurtomas assignee:dagurtomas |
16-37075 16 days ago |
37-71998 1 month ago |
37-72068 37 days |
27944 |
grunweg author:grunweg |
feat: lint module names with a period |
This would have caught the mis-placed file in #27796.
---
[](https://gitpod.io/from-referrer/)
|
t-linter |
16/0 |
Mathlib/Tactic/Linter/TextBased.lean,scripts/lint-style.lean |
2 |
2 |
['github-actions', 'grunweg'] |
nobody |
16-31883 16 days ago |
16-31953 16 days ago |
16-31937 16 days |
27245 |
rirarika author:rirarika |
MvPolynomial.Irreducible |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
88/0 |
Mathlib.lean,Mathlib/Algebra/MvPolynomial/Irreducible.lean |
2 |
5 |
['alreadydone', 'github-actions', 'mbkybky'] |
alreadydone assignee:alreadydone |
16-26724 16 days ago |
33-67746 1 month ago |
33-67790 33 days |
19668 |
YaelDillies author:YaelDillies |
refactor: define `≤`/`<` on `WithBot`/`WithTop` by induction |
The motivation for this change is that it is really confusing to run `intro r s shouldnthaveintroedthat` on a goal of the form `∀ r s : ℝ≥0∞, r ≤ s` and get the nonsense-looking goal `r = ↑shouldnthaveintroedthat → ∃ b : α, s = ↑b ∧ shouldnthaveintroedthat ≤ b⟩` instead of an error, and similarly when destructing something of the form `∃ r s : ℝ≥0∞, r < s`.
Furthermore, I suspect this improves performance.
---
- [x] depends on: #20317
- [x] depends on: #20318
- [x] depends on: #21274
- [x] depends on: #22109
[](https://gitpod.io/from-referrer/)
|
t-order |
68/51 |
Mathlib/Algebra/Order/Monoid/Unbundled/WithTop.lean,Mathlib/Analysis/Analytic/OfScalars.lean,Mathlib/Analysis/Oscillation.lean,Mathlib/Data/Finset/Lattice/Fold.lean,Mathlib/Data/Finset/Max.lean,Mathlib/LinearAlgebra/Eigenspace/Triangularizable.lean,Mathlib/MeasureTheory/Integral/Lebesgue/Countable.lean,Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean,Mathlib/Order/Interval/Basic.lean,Mathlib/Order/Interval/Set/WithBotTop.lean,Mathlib/Order/KrullDimension.lean,Mathlib/Order/WithBot.lean,Mathlib/Probability/Moments/Variance.lean,Mathlib/RingTheory/PowerBasis.lean,Mathlib/Topology/MetricSpace/Holder.lean,Mathlib/Topology/MetricSpace/HolderNorm.lean,MathlibTest/hint.lean |
17 |
22 |
['JovanGerb', 'YaelDillies', 'b-mehta', 'eric-wieser', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'urkud'] |
Vierkantor assignee:Vierkantor |
16-23634 16 days ago |
95-68482 3 months ago |
145-61033 145 days |
22231 |
pechersky author:pechersky |
feat(Algebra/Valued): `AdicExpansion` initial defns |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
t-topology
label:t-algebra$ |
299/0 |
Mathlib.lean,Mathlib/Topology/Algebra/Valued/AdicExpansion.lean |
2 |
2 |
['Thmoas-Guan', 'github-actions'] |
jcommelin assignee:jcommelin |
16-6486 16 days ago |
177-85621 5 months ago |
177-85743 177 days |
26154 |
ADedecker author:ADedecker |
refactor: add refactored APIs for algebraic filter bases |
This PR continues the work from #18437.
Original PR: https://github.com/leanprover-community/mathlib4/pull/18437 |
t-topology |
651/0 |
Mathlib.lean,Mathlib/Topology/Algebra/FilterBasis.lean,Mathlib/Topology/Algebra/FilterBasisNew.lean,Mathlib/Topology/Algebra/Nonarchimedean/Bases.lean,Mathlib/Topology/Algebra/Nonarchimedean/BasesNew.lean |
5 |
2 |
['ADedecker', 'github-actions'] |
PatrickMassot assignee:PatrickMassot |
16-6484 16 days ago |
62-51072 2 months ago |
62-51131 62 days |
26301 |
Ivan-Sergeyev author:Ivan-Sergeyev |
feat(LinearAlgebra/Matrix/Determinant/TotallyUnimodular): |
Empty matrices are totally unimodular.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
15/0 |
Mathlib/LinearAlgebra/Matrix/Determinant/TotallyUnimodular.lean |
1 |
1 |
['github-actions'] |
kim-em assignee:kim-em |
16-6483 16 days ago |
58-47452 1 month ago |
58-47496 58 days |
27108 |
pechersky author:pechersky |
chore(RingTheory/AdicValuation): golf using WithZero.log |
with helper lemma of how `log` preserves order
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
t-number-theory
label:t-algebra$ |
15/16 |
Mathlib/Algebra/Order/GroupWithZero/Canonical.lean,Mathlib/RingTheory/DedekindDomain/AdicValuation.lean |
2 |
2 |
['YaelDillies', 'github-actions'] |
mariainesdff assignee:mariainesdff |
16-6480 16 days ago |
37-42138 1 month ago |
37-51929 37 days |
27182 |
eric-wieser author:eric-wieser |
feat: add bundled versions of `Equiv.cast` |
These are essentially the non-categorical versions of `eqToHom`.
These are helpful to state some functorial results about things like `DFinsupp.equivCongrLeft` (with the alternative being to use an evil triangle somewhere instead).
[#Is there code for X? > LinearEquiv.cast / AddEquiv.cast etc @ 💬](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/LinearEquiv.2Ecast.20.2F.20AddEquiv.2Ecast.20etc/near/521390380)
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
31/0 |
Mathlib/Algebra/Algebra/Equiv.lean,Mathlib/Algebra/Group/Equiv/Defs.lean,Mathlib/Algebra/Module/Equiv/Defs.lean,Mathlib/Algebra/Ring/Equiv.lean |
4 |
3 |
['github-actions', 'pechersky', 'plp127'] |
kim-em assignee:kim-em |
16-6479 16 days ago |
36-14692 1 month ago |
36-14735 36 days |
27482 |
alreadydone author:alreadydone |
chore(RingTheory/SimpleModule): golf and generalize lifting_property |
---
Build succeeded but there's a strange post-build step error.
https://github.com/leanprover-community/mathlib4/actions/runs/16527173966/job/46744293147?pr=27482
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
11/14 |
Mathlib/RingTheory/SimpleModule/Basic.lean,Mathlib/RingTheory/SimpleModule/InjectiveProjective.lean |
2 |
2 |
['github-actions', 'smorel394'] |
Vierkantor assignee:Vierkantor |
16-6474 16 days ago |
26-36553 26 days ago |
26-36538 26 days |
26885 |
pechersky author:pechersky |
feat(Topology/ValuativeRel): ValuativeTopology 𝒪[K] |
and even when not a field, `ValuativeRel 𝒪[K]`
This is an example of something achievable with the new declarations that wasn't possible with Valued
Such that we can discuss the valuations on the subring without always using coercions
But to achieve this, one needs some juggling of the value groups
---
[](https://gitpod.io/from-referrer/)
- [x] depends on: #26834
|
t-algebra
t-topology
t-number-theory
label:t-algebra$ |
73/0 |
Mathlib/RingTheory/Valuation/ValuativeRel.lean,Mathlib/Topology/Algebra/Valued/ValuativeRel.lean |
2 |
5 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
alreadydone assignee:alreadydone |
16-2244 16 days ago |
16-2263 16 days ago |
43-27838 43 days |
26277 |
AntoineChambert-Loir author:AntoineChambert-Loir |
feat(RingTheory/Congruence/Hom): prove basic isomorphisms theorems for ring congruences |
This file contains elementary definitions involving congruence
relations and morphisms for semirings, rings, and algebras.
* `RingCon.ker`: the kernel of a monoid homomorphism as a congruence relation
* `RingCon.lift`, `RingCon.liftₐ`: the homomorphism / the algebra morphism
on the quotient given that the congruence is in the kernel
* `RingCon.map`, `RingCon.mapₐ`: homomorphism / algebra morphism
from a smaller to a larger quotient
* `RingCon.quotientKerEquivRangeS`, `RingCon.quotientKerEquivRange`,
`RingCon.quotientKerEquivRangeₐ` :
the first isomorphism theorem for semirings (using `RingHom.rangeS`),
rings (using `RingHom.range`) and algebras (using `AlgHom.range`).
* `RingCon.comapQuotientEquivRangeS`, `RingCon.comapQuotientEquivRange`,
`RingCon.comapQuotientEquivRangeₐ` : the second isomorphism theorem
for semirings (using `RingHom.rangeS`), rings (using `RingHom.range`)
and algebras (using `AlgHom.range`).
* `RingCon.quotientQuotientEquivQuotient`, `RingCon.quotientQuotientEquivQuotientₐ` :
the third isomorphism theorem for semirings (or rings) and algebras
It is an adaptation of what existed for multiplicative congruences (docs#Con) and is only useful for semirings which are not rings.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
555/2 |
Mathlib.lean,Mathlib/Algebra/Ring/Subsemiring/Basic.lean,Mathlib/Algebra/RingQuot.lean,Mathlib/RingTheory/Congruence/Basic.lean,Mathlib/RingTheory/Congruence/Defs.lean,Mathlib/RingTheory/Congruence/Hom.lean |
6 |
1 |
['github-actions'] |
joneugster assignee:joneugster |
15-61946 15 days ago |
15-61946 15 days ago |
59-18169 59 days |
26054 |
FMLJohn author:FMLJohn |
feat(RingTheory/GradedAlgebra/Homogeneous/Subsemiring): homogeneous subsemirings of a graded semiring |
---
[](https://gitpod.io/from-referrer/)
In this pull request, we have defined homogeneous subsemirings of `GradedRing 𝒜` where `𝒜 : ι → σ`, `SetLike σ A` and `AddSubmonoidClass σ A`.
## Main definitions
For any `R : Subsemiring A`:
* `Subsemiring.IsHomogeneous 𝒜 R`: The property that a subsemiring is closed under `GradedRing.proj`.
* `HomogeneousSubsemiring 𝒜`: The structure extending subsemirings which satisfy `Subsemiring.IsHomogeneous`. |
t-ring-theory |
120/0 |
Mathlib.lean,Mathlib/RingTheory/GradedAlgebra/Homogeneous/Subsemiring.lean |
2 |
1 |
['github-actions'] |
kim-em assignee:kim-em |
15-61824 15 days ago |
15-61824 15 days ago |
64-30544 64 days |
25905 |
mans0954 author:mans0954 |
feat(RingTheory/Polynomial/SmallDegreeVieta): polynomial versions of results in Algebra.QuadraticDiscriminant |
This PR continues the work from #25605.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25605 |
t-ring-theory |
76/8 |
Mathlib/Algebra/Polynomial/Coeff.lean,Mathlib/RingTheory/Polynomial/SmallDegreeVieta.lean |
2 |
42 |
['github-actions', 'kckennylau', 'mans0954', 'ocfnash'] |
ocfnash assignee:ocfnash |
15-61797 15 days ago |
15-61797 15 days ago |
65-76055 65 days |
24730 |
YaelDillies author:YaelDillies |
feat(RingTheory): group-like elements |
Define group-like elements in a bialgebra, ie elements such that `η a = 1` and `Δ a = a ⊗ₜ a`.
We prove that group-like elements of a coalgebra over a domain are linearly independent, group-like elements of a bialgebra form a monoid, group-like elements of a Hopf algebra form a group.
From Toric
Co-authored-by: Michał Mrugała
---
- [x] depends on: #24747
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
toric
|
309/0 |
Mathlib.lean,Mathlib/RingTheory/Bialgebra/GroupLike.lean,Mathlib/RingTheory/Coalgebra/GroupLike.lean,Mathlib/RingTheory/HopfAlgebra/GroupLike.lean |
4 |
42 |
['Julian-Kuelshammer', 'Parcly-Taxel', 'Whysoserioushah', 'YaelDillies', 'erdOne', 'eric-wieser', 'github-actions', 'leanprover-bot', 'mathlib4-dependent-issues-bot', 'smorel394'] |
eric-wieser assignee:eric-wieser |
15-61718 15 days ago |
15-61718 15 days ago |
102-18776 102 days |
22322 |
mariainesdff author:mariainesdff |
feat(RingTheory/DividedPowers/RatAlgebra): add definitions |
In this file we show that, for certain choices of a commutative (semi)ring `A` and an ideal `I` of
`A`, the family of maps `ℕ → A → A` given by `fun n x ↦ x^n/n!` is a divided power structure on `I`.
Co-authored-by: AntoineChambert-Loir
---
- [x] depends on: #22237
- [x] depends on: #22239
- [x] depends on: #22240
- [x] depends on: #24439
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
324/2 |
Mathlib.lean,Mathlib/Data/Nat/Factorial/NatCast.lean,Mathlib/RingTheory/DividedPowers/RatAlgebra.lean |
3 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
dagurtomas assignee:dagurtomas |
15-61623 15 days ago |
15-61623 15 days ago |
50-11325 50 days |
22151 |
alreadydone author:alreadydone |
feat(RingTheory): a semiprimary ring is Noetherian/Artinian iff its Jacobson radical is fg |
A key fact used is `Module.FG.smul`: if `I` is a two-sided ideal of `R` that is f.g. as a left ideal and `N` is a f.g. `R`-module, then `I • M` is also a f.g. `R`-module.
Many lemmas about coprimality of ideals are also generalized to the noncommutative, two-sided setting.
---
- [x] depends on: #21904
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
217/157 |
Mathlib/Algebra/Algebra/Operations.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean,Mathlib/NumberTheory/RamificationInertia/Basic.lean,Mathlib/RingTheory/Extension/Basic.lean,Mathlib/RingTheory/Finiteness/Basic.lean,Mathlib/RingTheory/Finiteness/Ideal.lean,Mathlib/RingTheory/HopkinsLevitzki.lean,Mathlib/RingTheory/Ideal/Maps.lean,Mathlib/RingTheory/Ideal/Operations.lean |
9 |
8 |
['alreadydone', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
eric-wieser assignee:eric-wieser |
15-61612 15 days ago |
15-61612 15 days ago |
168-62429 168 days |
26644 |
kckennylau author:kckennylau |
feat(SetTheory/ZFC): Define the language of sets and state the ZFC axioms |
---
[](https://gitpod.io/from-referrer/)
|
t-set-theory |
381/0 |
Mathlib.lean,Mathlib/SetTheory/ZFC/Axioms.lean,docs/references.bib |
3 |
46 |
['github-actions', 'kckennylau', 'leanprover-community-bot-assistant', 'staroperator', 'vihdzp'] |
nobody |
15-57618 15 days ago |
15-57638 15 days ago |
37-577 37 days |
26078 |
kckennylau author:kckennylau |
feat(AlgebraicGeometry): add x, y, px, py for points on elliptic curves |
---
Split from #25218.
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
44/0 |
Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean |
1 |
11 |
['MichaelStollBayreuth', 'Multramate', 'acmepjz', 'github-actions', 'kckennylau'] |
dagurtomas assignee:dagurtomas |
15-57067 15 days ago |
63-52852 2 months ago |
63-52896 63 days |
27292 |
gasparattila author:gasparattila |
feat: asymptotic cone of a set |
This PR defines the asymptotic cone of a set in a normed affine space and proves its main properties. This is partial progress towards showing that an unbounded finite-dimensional convex set contains a ray.
---
- [x] depends on: #27221
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
new-contributor
t-analysis
|
453/0 |
Mathlib.lean,Mathlib/Analysis/Normed/Affine/AsymptoticCone.lean,Mathlib/Order/Filter/Map.lean |
3 |
44 |
['AntoineChambert-Loir', 'YaelDillies', 'gasparattila', 'github-actions', 'mathlib4-dependent-issues-bot'] |
YaelDillies assignee:YaelDillies |
15-33054 15 days ago |
15-36339 15 days ago |
29-53880 29 days |
27995 |
kckennylau author:kckennylau |
feat(RingTheory/Valuation): alternate constructors for Valuation |
---
[](https://gitpod.io/from-referrer/)
|
|
69/0 |
Mathlib/FieldTheory/RatFunc/Degree.lean,Mathlib/NumberTheory/Padics/PadicNumbers.lean,Mathlib/RingTheory/Valuation/Basic.lean |
3 |
18 |
['YaelDillies', 'github-actions', 'kckennylau', 'pechersky'] |
nobody |
15-22212 15 days ago |
15-28376 15 days ago |
15-28359 15 days |
27990 |
kckennylau author:kckennylau |
feat(Counterexamples): a nontrivial valuation with discrete topology |
This file constructs a valuation on `K[X]` satisfying `IsValuativeTopology K[X] ∧ Nonempty (valuation K[X]).RankOne ∧ IsNontrivial K[X] ∧ DiscreteTopology K[X]`, and proves that `IsValuativeTopology F ∧ IsNontrivial F ∧ DiscreteTopology F` is not possible if `F` is a field.
---
[](https://gitpod.io/from-referrer/)
|
|
172/0 |
Counterexamples.lean,Counterexamples/DiscreteTopologyWithNontrivialValuation.lean |
2 |
n/a |
['github-actions', 'kckennylau', 'pechersky'] |
nobody |
15-21223 15 days ago |
unknown |
unknown |
27392 |
Paul-Lez author:Paul-Lez |
feat(Tactic/SimpUtils): add simproc finding commands |
This PR adds some commands to allow users to find simprocs/dsimprocs/simp theorems that match on a given pattern.
Thanks to Robin Arnez for telling me about `simprocDeclExt` :)
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
690/0 |
Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/SimpUtils.lean,MathlibTest/SimpUtils.lean |
4 |
8 |
['Paul-Lez', 'eric-wieser', 'github-actions'] |
nobody |
15-20443 15 days ago |
15-20538 15 days ago |
17-21209 17 days |
22043 |
YaelDillies author:YaelDillies |
chore: shortcut instance for `Neg ℤˣ` |
This lets us avoid importing `Ring` in downstream files (most of the effect is to come).
---
[](https://gitpod.io/from-referrer/)
|
file-removed
t-algebra
label:t-algebra$ |
20/47 |
Mathlib.lean,Mathlib/Algebra/GCDMonoid/Nat.lean,Mathlib/Algebra/Group/Int/Units.lean,Mathlib/Algebra/Order/Ring/Abs.lean,Mathlib/Algebra/Ring/Int/Units.lean,Mathlib/Algebra/Ring/NegOnePow.lean,Mathlib/Data/Fintype/Units.lean,Mathlib/Data/Int/AbsoluteValue.lean,Mathlib/Data/Int/Associated.lean,Mathlib/GroupTheory/HNNExtension.lean,Mathlib/NumberTheory/NumberField/Basic.lean,MathlibTest/Zify.lean |
12 |
16 |
['YaelDillies', 'eric-wieser', 'github-actions', 'j-loreaux', 'leanprover-community-bot-assistant', 'mathlib-bors'] |
erdOne assignee:erdOne |
15-6493 15 days ago |
98-48334 3 months ago |
183-21367 183 days |
25814 |
vlad902 author:vlad902 |
feat(SimpleGraph): Weaker condition for paths in acyclic graphs |
`IsAcyclic.isPath_iff_chain'` defines a weaker condition for proving that a walk is a path, in particular it shows that rather than proving that all vertices in the support of a walk are distinct, one must only show that consecutive edges are distinct (e.g. every other vertex must be distinct.) This leads to a simple corollary that trails are also paths in acyclic graphs.
I had a need for this when formalizing Cayley graphs, since this condition maps cleanly onto words in free groups being reduced.
---
*This PR continues the work from #25630.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/25630* |
t-combinatorics |
43/0 |
Mathlib/Combinatorics/SimpleGraph/Acyclic.lean,Mathlib/Combinatorics/SimpleGraph/Paths.lean |
2 |
2 |
['github-actions', 'vlad902'] |
kmill assignee:kmill |
15-6490 15 days ago |
69-45090 2 months ago |
69-45073 69 days |
26190 |
tb65536 author:tb65536 |
feat(FieldTheory/Galois/IsGaloisGroup): Subgroups of a Galois group are Galois groups |
This PR gives an instance `IsGaloisGroup H (FixedPoints.intermediateField H : IntermediateField K L) L` from `IsGaloisGroup G K L`, and a numerical corollary.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
11/0 |
Mathlib/FieldTheory/Galois/IsGaloisGroup.lean |
1 |
1 |
['github-actions'] |
kim-em assignee:kim-em |
15-6488 15 days ago |
58-37913 1 month ago |
62-7514 62 days |
26580 |
vasnesterov author:vasnesterov |
feat(Tactic/Order): translate linear orders to `Int` |
It was [pointed out](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/tactic.20for.20partial.20orders/near/515897754) that `order` is not complete for linear orders with lattice operations (while it remains complete for linear orders without lattice operations and for general lattices without assuming linearity). The problem for linear orders with lattice operations is NP-hard, but it can be translated from an arbitrary type to `Int` and then solved using a smart and efficient procedure (such as `omega`). This PR implements such a translation within the `order` tactic.
Co-authored-by: Aaron Liu
---
- [x] depends on: #26354
[](https://gitpod.io/from-referrer/) |
large-import
t-meta
|
302/22 |
Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Order.lean,Mathlib/Tactic/Order/Graph/Basic.lean,Mathlib/Tactic/Order/Preprocessing.lean,Mathlib/Tactic/Order/ToInt.lean,MathlibTest/order.lean |
7 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'vasnesterov'] |
alexjbest assignee:alexjbest |
15-6487 15 days ago |
38-61176 1 month ago |
38-62876 38 days |
26670 |
yu-yama author:yu-yama |
feat(GroupExtension/Abelian): define `conjClassesEquivH1` |
This PR continues the work from #21837.
Original PR: https://github.com/leanprover-community/mathlib4/pull/21837 |
t-algebra label:t-algebra$ |
162/5 |
Mathlib.lean,Mathlib/GroupTheory/GroupExtension/Abelian.lean,Mathlib/GroupTheory/GroupExtension/Basic.lean,Mathlib/GroupTheory/GroupExtension/Defs.lean,docs/references.bib |
5 |
2 |
['erdOne', 'github-actions', 'yu-yama'] |
erdOne assignee:erdOne |
15-6485 15 days ago |
48-40828 1 month ago |
48-40880 48 days |
26766 |
MichaelStollBayreuth author:MichaelStollBayreuth |
feat(Topology/MetricSpace/Bounded): add some results |
We add two pairs of results:
```lean
lemma isBounded_of_abs_le (C : α) : Bornology.IsBounded {x : α | |x| ≤ C} := ...
lemma isBounded_of_abs_lt (C : α) : Bornology.IsBounded {x : α | |x| < C} := ...
```
(under suitable assumptions on `α`) and a version of the *Extreme Value Theorem* that I found convenient:
```lean
theorem exists_forall_le_of_isBounded {f : β → α} (hf : Continuous f) (x₀ : β)
(h : Bornology.IsBounded {x : β | f x ≤ f x₀}) :
∃ x, ∀ y, f x ≤ f y := ...
theorem exists_forall_ge_of_isBounded {f : β → α} (hf : Continuous f) (x₀ : β)
(h : Bornology.IsBounded {x : β | f x₀ ≤ f x}) :
∃ x, ∀ y, f y ≤ f x := ...
```
(under suitable assumptions on `α` and `β`).
For an application, see [GelfandMazur.lean](https://github.com/MichaelStollBayreuth/Heights/blob/master/Heights/GelfandMazur.lean) in [Heights](https://github.com/MichaelStollBayreuth/Heights/tree/master).
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
56/0 |
Mathlib/Topology/MetricSpace/Bounded.lean |
1 |
1 |
['github-actions'] |
grunweg assignee:grunweg |
15-6484 15 days ago |
47-26553 1 month ago |
47-26536 47 days |
27527 |
peabrainiac author:peabrainiac |
feat(Topology): some `IsOpenMap` lemmas |
Some lemmas for `IsOpenMap` that I needed. I've also added variants for `IsClosedMap` to maintain symmetry in the API.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
46/0 |
Mathlib/Topology/Constructions.lean |
1 |
2 |
['github-actions', 'peabrainiac'] |
fpvandoorn assignee:fpvandoorn |
15-6481 15 days ago |
25-9581 25 days ago |
25-9604 25 days |
27602 |
mitchell-horner author:mitchell-horner |
feat(Combinatorics/SimpleGraph): define `completeBipartiteSubgraph` |
Define the complete bipartite subgraphs of `s` and `t` parts as a "left" subset of `s` vertices and a "right" subset of `t` vertices such that every vertex in the "left" subset is adjacent to every vertex in the "right" subset.
In this case `Nonempty (G.completeBipartiteSubgraph (card α) (card β))` is equivalent to `completeBipartiteGraph α β ⊑ G`, that is, finding a "left" subset of `s` vertices and a "right" subset of `t` vertices such that every vertex in the "left" subset is adjacent to every vertex in the "right" subset is equivalent to finding an injective homomorphism `completeBipartiteGraph α β` to `G`.
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
88/0 |
Mathlib/Combinatorics/SimpleGraph/Bipartite.lean |
1 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
15-6480 15 days ago |
23-32491 23 days ago |
23-32542 23 days |
26679 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Limits/Shapes/Pullback/Categorical): 2-functoriality of `CatCommSqOver` |
This PR uses the notion of categorical cospan transforms from #26412 and its bicategory-like notations from #26447 to provide API for 2-functoriality of the construction `CatCommSqOver F G X`. We show that `ψ : CatCospanTransform F G F' G'` defines a functor `CatCommSqOver F G X ⥤ CatCommSqOver F' G' X`, and that a functor `U : X ⥤ Y` induces a functor `CatCommSqOver F G Y ⥤ CatCommSqOver F G X` via precomposition. We give the battery of lemma that shows that these constructions are components of a `Cat`-valued "bipseudofunctor", although we cannot state it this way to keep things unbundled and universe polymorphic.
---
- [x] depends on: #26447
I apologize in advance, for this one is very boring. As usual, the higher order lemmas are found by aesop_cat and are not marked simp, but I still want to state these explicitly so that in case automation goes wrong, "manual formal bicategory manipulations" remain an option.
A design choice was made here. Instead of stating this kind of functoriality for the categorical pullback itself, I chose to state everything in terms of `CatCommSqOver`, i.e in terms of the pseudofunctorial construction corepresented by the categorical pullback. The rationale here is that while we could have done everything only at the level of the categorical pullback itself, I believe this design will allow for easier manipulations of categorical pullback *squares*.
Actual bifunctoriality of the categorical pullback (and thus equivalence invariance, which is the key point of the notion compared to the strict pullback) will be in future PRs.
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
364/1 |
Mathlib/CategoryTheory/Limits/Shapes/Pullback/Categorical/Basic.lean |
1 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'robin-carlier'] |
dagurtomas assignee:dagurtomas |
14-68611 14 days ago |
26-42922 26 days ago |
35-76564 35 days |
28025 |
kim-em author:kim-em |
feat: grind annotations in Logic/Equiv/Defs |
|
t-logic |
153/80 |
Mathlib/Logic/Equiv/Array.lean,Mathlib/Logic/Equiv/Defs.lean,Mathlib/Logic/Equiv/Embedding.lean,Mathlib/Logic/Equiv/Finset.lean,Mathlib/Logic/Equiv/Fintype.lean,Mathlib/Logic/Equiv/Option.lean,Mathlib/Logic/Equiv/Prod.lean |
7 |
6 |
['github-actions', 'kim-em', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] |
nobody |
14-62947 14 days ago |
14-74720 14 days ago |
14-80085 14 days |
25788 |
Parcly-Taxel author:Parcly-Taxel |
feat: number of edges in the Turán graph |
We provide two theorems, the first `card_edgeFinset_turanGraph` providing the exact number of edges and the other `card_edgeFinset_turanGraph_le` providing a (slightly) looser bound whose main advantage is its lack of integer division/modulus operations.
The bound in `card_edgeFinset_turanGraph_le` is also the bound provided in [Motzkin and Straus (1965)](https://doi.org/10.4153%2FCJM-1965-053-6). |
large-import
t-combinatorics
|
132/0 |
Mathlib/Combinatorics/SimpleGraph/Turan.lean,Mathlib/Data/Nat/ModEq.lean |
2 |
3 |
['YaelDillies', 'github-actions', 'leanprover-community-bot-assistant'] |
awainverse assignee:awainverse |
14-6493 14 days ago |
24-5249 24 days ago |
69-53931 69 days |
26225 |
Raph-DG author:Raph-DG |
feat(AlgebraicGeometry): Add some minimal API for orders on schemes |
In this PR we add some minimal api for the ordering on schemes defined in #26204. We chose split these PRs because we expect there will be more discussion about this API, and having the preorder instance is useful in its own right without much added API.
- [] depends on: #26204
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
14/0 |
Mathlib/AlgebraicGeometry/Properties.lean,Mathlib/AlgebraicGeometry/Scheme.lean |
2 |
4 |
['Raph-DG', 'github-actions', 'joelriou', 'leanprover-community-bot-assistant'] |
erdOne assignee:erdOne |
14-6493 14 days ago |
23-70167 23 days ago |
59-49815 59 days |
26770 |
Jun2M author:Jun2M |
feat(Combinatorics/Graph) : subgraph relations and operations on `Graph` |
This PR creates a new file `Combinatorics/Graph/Subgraph.lean`. In it, the PR introduces a partial order on graphs by subgraph relation, defines relations `IsInducedSubgraph`, `IsSpanningSubgraph` and `IsClosedSubgraph`. Further, it introduce operations `EdgeRestrict`, `EdgeDelete`, `induce` and `VertexDelete`.
Co-authored-by: Peter Nelson
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
703/0 |
Mathlib.lean,Mathlib/Combinatorics/Graph/Subgraph.lean |
2 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
14-6492 14 days ago |
47-17970 1 month ago |
47-18014 47 days |
26798 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Monoidal/DayConvolution): `LawfulDayConvolutionMonoidalCategoryStruct` |
Given monoidal categories `C`, `V` and a category `D` with a pre-existing `MonoidalCategoryStruct`, we introduce a typeclass `LawfulDayConvolutionMonoidalCategoryStruct C V D` that bundles the required data and equations that the structure on `D` must have to be a monoidal subcategory of `C ⥤ V` if the latter was endowed with the day convolution monoidal structure.
The data in question is that of a faithful functor `ι : D ⥤ C ⥤ V`, as well as explicit natural transformations `ι.obj d ⊠ (ι.obj d') ⟶ tensor C ⋙ ι.obj (d ⊗ d')` that exhibit `ι.obj (d ⊗ d')` as a Day convolution of `ι.obj d` and `(ι.obj d')`, as well as similar data asserting that `ι.obj (𝟙_ D)` is a Day convolution unit. The equations required are identical to the ones that characterize the unitors and associators for Day convolution with respect to the Kan extensions units.
Given such a structure, using that the corresponding relations hold in `C ⥤ V`, we show that the monoidal category structure on `D` defines a `MonoidalCategory D`, i.e that all the required equations such as the pentagon/triangular equalities, bifunctoriality of the tensor product etc. are satisfied. Thus, we can think of `LawfulDayConvolutionMonoidalCategoryStruct C V D` as a constructor for monoidal categories.
While this is a step towards a Day convolution monoidal structure in (a type alias) `C ⥤ V`, the framework is yet incomplete, as it assumes a pre-existing monoidal category structure. We will give constructors for (`MonoidalCategoryStruct` and) `LawfulDayConvolutionMonoidalCategoryStruct C V D` with various degree of definitional control over the resulting structure in a forthcoming PR.
---
- [x] depends on: #25757
I recommend the reviewer to at least have a glance at #26820 to see where this is going, and how this one fits in the design I have in mind.
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
336/8 |
Mathlib/CategoryTheory/Monoidal/DayConvolution.lean |
1 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
adamtopaz assignee:adamtopaz |
14-6491 14 days ago |
24-39917 24 days ago |
38-15995 38 days |
27635 |
Ruben-VandeVelde author:Ruben-VandeVelde |
chore: deprecate SubsemiringClass.coe_pow |
---
[](https://gitpod.io/from-referrer/)
|
|
2/7 |
Mathlib/Algebra/Ring/Subsemiring/Defs.lean,Mathlib/Analysis/Normed/Ring/Basic.lean |
2 |
3 |
['Ruben-VandeVelde', 'github-actions', 'grunweg'] |
awainverse assignee:awainverse |
14-6484 14 days ago |
22-48105 22 days ago |
22-51104 22 days |
27658 |
euprunin author:euprunin |
chore(Geometry/RingedSpace): remove use of `erw` in `app_inv_app'` |
|
t-algebraic-geometry |
3/1 |
Mathlib/Geometry/RingedSpace/OpenImmersion.lean |
1 |
1 |
['github-actions'] |
erdOne assignee:erdOne |
14-6484 14 days ago |
22-14765 22 days ago |
22-14811 22 days |
27229 |
WilliamCoram author:WilliamCoram |
feat(GroupTheory/DoubleCoset): multiple lemmas |
From FLT
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory
new-contributor
|
106/0 |
Mathlib/GroupTheory/DoubleCoset.lean |
1 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
mariainesdff assignee:mariainesdff |
13-50363 13 days ago |
13-51096 13 days ago |
30-12662 30 days |
27991 |
sinianluoye author:sinianluoye |
feat (Rat): add Rat.den_eq_of_add_den_eq_one and its dependent lemmas |
```lean4
example {q r : ℚ} (h : (q + r).den = 1) : q.den = r.den := by
```
It is so simple, but I couldn't find it in current mathlib repo.
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
28/0 |
Mathlib/Data/Rat/Lemmas.lean |
1 |
14 |
['github-actions', 'sinianluoye', 'themathqueen'] |
nobody |
13-33078 13 days ago |
15-6081 15 days ago |
15-34135 15 days |
25969 |
101damnations author:101damnations |
feat(RepresentationTheory/Homological/GroupHomology/Functoriality): the degree 1 part of the corestriction-coinflation exact sequence |
Given a `G`-representation `A` and a normal subgroup `S` of `G`, this PR defines the corestriction-coinflation short complex
`H₁(S, A) ⟶ H₁(G, A) ⟶ H₁(G ⧸ S, A_S)` induced by the natural inclusion `S → G` and projections `G → G / S, A → A_S`. We prove it's exact, and that the righthand map is an epimorphism.
---
- [x] depends on: #21652
- [x] depends on: #21732
- [x] depends on: #21733
- [x] depends on: #21735
- [x] depends on: #21736
- [x] depends on: #21738
- [x] depends on: #25868
- [x] depends on: #25873
- [x] depends on: #25880
- [x] depends on: #25884
- [x] depends on: #25888
- [x] depends on: #25939
- [x] depends on: #25952
[](https://gitpod.io/from-referrer/)
---
*Earlier version at #22656.*
|
t-algebra label:t-algebra$ |
227/4 |
Mathlib/Algebra/Homology/ShortComplex/ModuleCat.lean,Mathlib/RepresentationTheory/Coinvariants.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/Basic.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/Functoriality.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/LowDegree.lean |
5 |
n/a |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
13-27062 13 days ago |
unknown |
unknown |
23940 |
YaelDillies author:YaelDillies |
feat: polytopes |
From Toric
Co-authored-by: Matthew Johnson
---
[](https://gitpod.io/from-referrer/)
|
toric
t-analysis
|
65/0 |
Mathlib.lean,Mathlib/Geometry/Convex/Polytope.lean,Mathlib/Geometry/Convex/README.md |
3 |
9 |
['Parcly-Taxel', 'YaelDillies', 'eric-wieser', 'github-actions', 'jsm28', 'leanprover-community-bot-assistant'] |
hrmacbeth assignee:hrmacbeth |
13-6494 13 days ago |
70-26388 2 months ago |
131-12110 131 days |
26765 |
KiringYJ author:KiringYJ |
feat(MeasureTheory/PiSystem): add π-λ theorem and SetLike instance |
Add two small features to `MeasureTheory/PiSystem`:
1. SetLike instance
`instance : SetLike (DynkinSystem α) (Set α)`
This lets us write `s ⊆ d` and `t ∈ d` for a DynkinSystem `d`, matching usual mathlib style.
2. `DynkinSystem.pi_lambda` lemma
Classical π‑λ theorem: if a π‑system `s` is contained in a Dynkin system `d`, every set measurable for `σ(s)` is also in `d`.
Currently, mathlib exposes this result only indirectly (e.g. via `generateFrom_eq`). Although logically equivalent, it is not obvious at first glance that those lemmas are the π‑λ theorem. The new lemma states the result in its familiar textbook form, so users can recognise and cite it immediately.
Both pieces are under 10 lines, term‑mode only, and do not modify existing APIs.
No breaking changes.
No dependencies.
|
new-contributor
t-measure-probability
|
13/0 |
Mathlib/MeasureTheory/PiSystem.lean |
1 |
13 |
['EtienneC30', 'KiringYJ', 'github-actions', 'ocfnash'] |
RemyDegenne assignee:RemyDegenne |
13-6491 13 days ago |
20-42540 20 days ago |
47-30384 47 days |
27118 |
Timeroot author:Timeroot |
feat(Matrix/Charpoly/Eigs): Roots of Matrix.charpoly are the eigenvalues. |
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
label:t-algebra$ |
58/0 |
Mathlib/LinearAlgebra/Matrix/Charpoly/Eigs.lean,scripts/noshake.json |
2 |
1 |
['github-actions'] |
adomani assignee:adomani |
13-6488 13 days ago |
37-74439 1 month ago |
37-74482 37 days |
27400 |
dleijnse author:dleijnse |
feat: define geometrically reduced algebras |
Define geometrically reduced algebras, and prove that if all finitely generated subalgebras of an algebra `A` are geometrically reduced, then `A` is geometrically reduced.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
111/0 |
Mathlib.lean,Mathlib/RingTheory/Nilpotent/GeometricallyReduced.lean |
2 |
23 |
['dleijnse', 'github-actions', 'kckennylau'] |
joelriou assignee:joelriou |
13-6486 13 days ago |
28-25156 28 days ago |
28-25202 28 days |
27639 |
staroperator author:staroperator |
feat(Algebra/Order/Sub): `Sub` instance for linearly canonically ordered monoid |
There is a `Sub` instance for linearly canonically ordered monoid using choice that satisfies `OrderedSub`.
---
Thanks @eric-wieser for the suggestion in #27341!
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
28/0 |
Mathlib/Algebra/Order/Sub/Basic.lean |
1 |
1 |
['github-actions'] |
eric-wieser assignee:eric-wieser |
13-6484 13 days ago |
22-43640 22 days ago |
22-43687 22 days |
27534 |
PierreQuinton author:PierreQuinton |
feat: a typeclass for `sSup`/`sInf` to be lawful |
Adds lawful infima and suprema type classes.
A preorder with lawful suprema: whenever a set has a least upper bound, `sSup` returns a least upper bound for that set.
A preorder with lawful infima: whenever a set has a greatest lower bound, `sInf` returns a greastest lower bound for that set.
---
[](https://gitpod.io/from-referrer/)
|
t-order |
121/8 |
Mathlib.lean,Mathlib/Order/CompleteLattice/Defs.lean,Mathlib/Order/LawfulSupInf.lean |
3 |
25 |
['PierreQuinton', 'YaelDillies', 'github-actions', 'plp127', 'vihdzp'] |
YaelDillies assignee:YaelDillies |
12-56668 12 days ago |
24-39965 24 days ago |
24-40000 24 days |
28111 |
euprunin author:euprunin |
chore: remove tactic `simp_lex` and use `simp` instead |
Motivation: `simp_lex` is just shorthand for `refine toLex.surjective.forall₃.2 ?_; rintro (a | a) (b | b) (c | c) <;> simp`, so plain `simp` seems preferable. |
t-data |
4/10 |
Mathlib/Data/Sum/Interval.lean |
1 |
5 |
['eric-wieser', 'euprunin', 'github-actions'] |
nobody |
12-44151 12 days ago |
12-44234 12 days ago |
12-51865 12 days |
27498 |
Komyyy author:Komyyy |
feat: Group isomorphisms between (`Equiv.Perm`|`alternatingGroup`)s |
Required to prove that A_n is simple iff n = 3 or 5 ≤ n(#26051).
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
29/0 |
Mathlib/Algebra/Group/End.lean,Mathlib/GroupTheory/SpecificGroups/Alternating.lean |
2 |
2 |
['github-actions', 'tb65536'] |
erdOne assignee:erdOne |
12-35010 12 days ago |
26-8129 26 days ago |
26-8114 26 days |
23238 |
YaelDillies author:YaelDillies |
feat: extended floor and ceil |
My motivation for this is to prove `ENat.toENNReal (⨆ i, f i) = ⨆ i, ENat.toENNReal (f i)` and `ENat.toENNReal (⨅ i, f i) = ⨅ i, ENat.toENNReal (f i)`. Kalle Kytölä independently needs this for his formalisation of statistical physics.
From MiscYD
---
- [x] depends on: #24781
- [x] depends on: #24782
See #15269 for a past attempt.
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
235/0 |
Mathlib.lean,Mathlib/Algebra/Order/Floor/Extended.lean |
2 |
24 |
['YaelDillies', 'b-mehta', 'eric-wieser', 'github-actions', 'kkytola', 'mathlib4-dependent-issues-bot', 'urkud'] |
alreadydone assignee:alreadydone |
12-6511 12 days ago |
101-31504 3 months ago |
148-83722 148 days |
24095 |
lecopivo author:lecopivo |
feat: `fun_prop` for Is(Bounded)LinearMap + notation `fun x ↦L[R] f x` |
Sets up `fun_prop` for `IsLinearMap` and `IsBoundedLinearMap` also adds notation `fun x ↦ₗ[R] f x` and `fun x ↦L[R] f x` to write bundled versions like lambda function instead of the currently used pointfree notation. |
large-import
t-algebra
label:t-algebra$ |
352/22 |
Mathlib.lean,Mathlib/Algebra/Algebra/Bilinear.lean,Mathlib/Algebra/Module/LinearMap/Defs.lean,Mathlib/Algebra/Module/LinearMap/End.lean,Mathlib/Algebra/Module/LinearMap/Pi.lean,Mathlib/Algebra/Module/LinearMap/Prod.lean,Mathlib/Analysis/Normed/Operator/BoundedLinearMaps.lean,scripts/noshake.json |
8 |
22 |
['eric-wieser', 'github-actions', 'lecopivo'] |
dagurtomas assignee:dagurtomas |
12-6511 12 days ago |
83-31240 2 months ago |
83-49622 83 days |
25779 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Bicategory/NaturalTransformations): strong and lax natural transformations of lax functors |
Given two lax functors `F G` between bicategories, we define lax natural transformations as families of 1-morphisms `∀ a : B, F.obj a ⟶ G.obj a` equipped with a naturality 2-cell `∀ {a b : B} (f : a ⟶ b), app a ≫ G.map f ⟶ F.map f ≫ app b` that are required to satisfy conditions such as naturality, and compatibility with the `mapId` and `mapComp` fields of the source and target functors.
This notion dualizes the existing notion of oplax natural transformations between, and tries to narrow the current gap between lax and oplax functors in the library, where the latter has much more formalized API. For maintainability, The code tries to stay as aligned as possible with the code in `CategoryTheory.Bicategory.Naturaltransformations.Oplax`.
---
I followed the book by Johnson and Yau for the definition.
I made @yuma-mizuno and @callesonne authors of the files, as they are the authors of the original code for Oplax functors, which I basically copy-pasted and modified to make it work with lax functors. They should feel free to modify this if they want.
Next thing on the list is to tackle modifications between lax/strong natural transforms of lax transforms, as well as the category instance on lax functors.
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #25565.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/25565* |
t-category-theory |
286/0 |
Mathlib.lean,Mathlib/CategoryTheory/Bicategory/NaturalTransformation/Lax.lean,scripts/noshake.json |
3 |
3 |
['github-actions', 'yuma-mizuno'] |
joelriou assignee:joelriou |
12-6510 12 days ago |
46-68127 1 month ago |
68-26495 68 days |
26899 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Functor/KanExtension): transitivity of left Kan extensions |
In this PR, we show that left Kan extensions are "transitive" in the following sense : if `α : F₀ ⟶ L ⋙ F₁` exhibits `F₁` as a left Kan extension of `F₀` along `L : C ⥤ D`, then given a functor `L' : D ⥤ D'` an an extension `(β : F₁ ⟶ L' ⋙ F₂)`, the "pasted extension" formed by `α` and `β` exhibits `F₂` as a left Kan extension of `F₀` along `L ⋙ L'` if and only if `β` exhibits `F₂` as a left Kan extension of `F₁` along `L'`. This refines the current theorems in mathlib that only treat the case where we pre or post-compose by an equivalence.
The actual statement we prove is "fully weak" and lets us pick a functor isomorphic to `L ⋙ L'` and an extension isomorphic to the pasted one if needed.
---
I will PR the dual version of everything for right Kan extensions as soon as we settle on the final form of this one.
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
144/0 |
Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean |
1 |
9 |
['github-actions', 'joelriou', 'robin-carlier'] |
adamtopaz assignee:adamtopaz |
12-6508 12 days ago |
21-64192 21 days ago |
39-7885 39 days |
27468 |
IvanRenison author:IvanRenison |
feat(Combinatorics/SimpleGraph): add theorem `SimpleGraph.Connected.diff_dist_adj` |
This contribution was created as part of the Utrecht Summerschool "Formalizing Mathematics in Lean" in July 2025.
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
16/0 |
Mathlib/Combinatorics/SimpleGraph/Metric.lean |
1 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
12-6505 12 days ago |
26-50562 26 days ago |
26-50661 26 days |
27664 |
pechersky author:pechersky |
feat(Topology,Analysis): discrete topology metric space and normed groups |
Explicit construction of the discrete topology metric space and normed groups where `dist x y = 1` for all `x != y`
Provide PseudoMetricSpace, MetricSpace, Seminormed(Add)Group, and Normed(Add)Group constructions
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
137/0 |
Mathlib/Analysis/Normed/Group/Basic.lean,Mathlib/Topology/MetricSpace/Basic.lean,Mathlib/Topology/MetricSpace/Pseudo/Constructions.lean |
3 |
3 |
['github-actions', 'kckennylau', 'pechersky'] |
urkud assignee:urkud |
12-6502 12 days ago |
21-82914 21 days ago |
21-82908 21 days |
25770 |
Parcly-Taxel author:Parcly-Taxel |
chore: fix more induction/recursor branch names |
These were found using the regex `\| h. =>` and `def.*rec.*\(h. :`. |
tech debt |
75/68 |
Mathlib/Analysis/Convolution.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/Data/Fin/Tuple/Basic.lean,Mathlib/Data/Fin/Tuple/NatAntidiagonal.lean,Mathlib/Data/Seq/Computation.lean,Mathlib/Data/Set/Card.lean,Mathlib/Data/WSeq/Basic.lean,Mathlib/Logic/Function/Iterate.lean,Mathlib/NumberTheory/ArithmeticFunction.lean,Mathlib/Order/SuccPred/Archimedean.lean,Mathlib/Order/Synonym.lean |
11 |
16 |
['Parcly-Taxel', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] |
Vierkantor assignee:Vierkantor |
11-79496 11 days ago |
12-38380 12 days ago |
67-66008 67 days |
28140 |
YaelDillies author:YaelDillies |
feat: a `PointedCone`-valued version of `Submodule.span` |
This is merely to guide typing.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
t-convex-geometry
toric
|
10/1 |
Mathlib/Geometry/Convex/Cone/Pointed.lean |
1 |
1 |
['github-actions'] |
nobody |
11-70249 11 days ago |
11-70249 11 days ago |
11-70397 11 days |
27265 |
pechersky author:pechersky |
feat(Topology/Valued): discrete topology on a valued field when trivial valuation |
or when there is a nonzero term in the valuation codomain that is smaller than all nonzero valuations
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
33/0 |
Mathlib/Topology/Algebra/Valued/ValuationTopology.lean |
1 |
1 |
['github-actions'] |
dagurtomas assignee:dagurtomas |
11-6477 11 days ago |
33-19129 1 month ago |
33-19173 33 days |
27882 |
euprunin author:euprunin |
chore: golf using `grind [Nat.cast_*]` |
---
I'll post profiling results for these changes as soon as we've agreed on the correct procedure: specifically, which profiling commands to use and what to report (see https://github.com/leanprover-community/mathlib4/pull/27856#issuecomment-3146781779 for the current experimental profiling script output).
|
|
9/26 |
Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Proper.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Cotangent.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/EulerSineProd.lean,Mathlib/GroupTheory/CommutingProbability.lean,Mathlib/NumberTheory/Bernoulli.lean,Mathlib/RingTheory/ZMod/UnitsCyclic.lean |
6 |
4 |
['github-actions', 'kim-em', 'leanprover-bot'] |
urkud assignee:urkud |
11-6470 11 days ago |
18-30019 18 days ago |
18-30002 18 days |
28115 |
bwangpj author:bwangpj |
feat(AlgebraicGeometry/EllipticCurve): reduction of elliptic curves |
Define the reduction of elliptic curves over the fraction field of a DVR, following Silverman.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebraic-geometry
|
230/1 |
Mathlib.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Reduction.lean,Mathlib/RingTheory/Valuation/Discrete/Basic.lean |
3 |
14 |
['Multramate', 'bwangpj', 'github-actions', 'kbuzzard'] |
nobody |
10-79448 10 days ago |
12-70094 12 days ago |
12-70139 12 days |
28164 |
bryangingechen author:bryangingechen |
fix(Cache): add put* commands to leanTarArgs |
Without this, running `lake exe cache put` fails if `leantar` is not already installed.
---
What label should this get? `CI` and `t-meta` don't seem right.
[](https://gitpod.io/from-referrer/)
|
easy |
2/2 |
Cache/Main.lean |
1 |
1 |
['github-actions'] |
nobody |
10-56188 10 days ago |
11-19214 11 days ago |
11-19198 11 days |
27567 |
themathqueen author:themathqueen |
feat(LinearAlgebra/TensorProduct/Tower): add `lid` and `assoc` tensor lemmas |
This adds `TensorProduct.lid_tensor` and `TensorProduct.assoc_tensor`.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
33/0 |
Mathlib/LinearAlgebra/TensorProduct/Tower.lean |
1 |
3 |
['github-actions', 'themathqueen'] |
mariainesdff assignee:mariainesdff |
10-28079 10 days ago |
10-28079 10 days ago |
24-20916 24 days |
28195 |
gasparattila author:gasparattila |
feat: separating a convex compact set and its neighborhood with a polytope |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-analysis
|
26/1 |
Mathlib/Analysis/Normed/Affine/Convex.lean |
1 |
2 |
['FrankieNC', 'github-actions'] |
nobody |
10-18363 10 days ago |
10-22420 10 days ago |
10-22474 10 days |
25774 |
Parcly-Taxel author:Parcly-Taxel |
chore: deprime `induction` in `AlgebraicTopology/CategoryTheory` |
Most replacements that are also in #23676 have been copied over, but some have been optimised further. |
tech debt |
130/121 |
Mathlib/AlgebraicTopology/DoldKan/Decomposition.lean,Mathlib/AlgebraicTopology/DoldKan/Degeneracies.lean,Mathlib/AlgebraicTopology/DoldKan/NCompGamma.lean,Mathlib/AlgebraicTopology/DoldKan/Projections.lean,Mathlib/AlgebraicTopology/SimplexCategory/MorphismProperty.lean,Mathlib/AlgebraicTopology/SimplicialObject/Split.lean,Mathlib/AlgebraicTopology/SimplicialSet/Degenerate.lean,Mathlib/AlgebraicTopology/SimplicialSet/NerveAdjunction.lean,Mathlib/AlgebraicTopology/SimplicialSet/StdSimplex.lean,Mathlib/CategoryTheory/Abelian/GrothendieckCategory/EnoughInjectives.lean,Mathlib/CategoryTheory/Abelian/GrothendieckCategory/Subobject.lean,Mathlib/CategoryTheory/Action/Concrete.lean,Mathlib/CategoryTheory/Action/Monoidal.lean,Mathlib/CategoryTheory/ComposableArrows.lean,Mathlib/CategoryTheory/Extensive.lean,Mathlib/CategoryTheory/Filtered/Basic.lean,Mathlib/CategoryTheory/Galois/Decomposition.lean,Mathlib/CategoryTheory/Galois/EssSurj.lean,Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean,Mathlib/CategoryTheory/Limits/Shapes/SequentialProduct.lean,Mathlib/CategoryTheory/Limits/VanKampen.lean,Mathlib/CategoryTheory/Quotient.lean,Mathlib/CategoryTheory/Sites/Sheaf.lean,Mathlib/CategoryTheory/Subobject/Basic.lean,Mathlib/CategoryTheory/Subobject/FactorThru.lean,Mathlib/CategoryTheory/Subobject/Lattice.lean,Mathlib/CategoryTheory/Triangulated/TStructure/Basic.lean |
27 |
6 |
['Parcly-Taxel', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'madvorak'] |
grunweg assignee:grunweg |
10-6485 10 days ago |
22-39847 22 days ago |
67-32339 67 days |
27455 |
pechersky author:pechersky |
chore(NumberTheory/Padics/Hensel): rephrase using `aeval` |
This is easier to use at call site, because on need not pass `Polynomial.map (algebraMap _ _ )` in the use of `hensels_lemma`
---
[](https://gitpod.io/from-referrer/)
|
tech debt
t-algebra
t-number-theory
label:t-algebra$ |
158/139 |
Mathlib/NumberTheory/Padics/Hensel.lean |
1 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
jcommelin assignee:jcommelin |
10-6480 10 days ago |
17-18509 17 days ago |
26-47523 26 days |
28119 |
JasperMS author:JasperMS |
feat(Data/Set/Pairwise): prove pairwise results for Chains, move `Set.pairwise_iUnion₂` |
Initiate a new file `Data/Set/Pairwise/Chain.lean` which makes some `Pairwise` results available to the `IsChain` predicate.
In the process, move `Set.pairwise_iUnion₂` to group it with similar results. Perform some variable harmonization.
Part of Carleson, original result by Edward van de Meent.
Moves:
- Set.pairwise_iUnion₂: from Data.Set.Lattice to Data.Set.Pairwise.Lattice
---
This PR was discussed and advice was given in [#mathlib4 > Novice questions on style and structure](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Novice.20questions.20on.20style.20and.20structure/with/533462814). Many thanks to those who helped me out!
Mathlib PRs are still new to me, so please point out where I can improve!
[](https://gitpod.io/from-referrer/)
|
carleson
t-data
new-contributor
|
56/12 |
Mathlib.lean,Mathlib/Data/Set/Lattice.lean,Mathlib/Data/Set/Pairwise/Chain.lean,Mathlib/Data/Set/Pairwise/Lattice.lean |
4 |
11 |
['JasperMS', 'Ruben-VandeVelde', 'edegeltje', 'github-actions'] |
nobody |
9-77400 9 days ago |
12-45696 12 days ago |
12-46139 12 days |
27712 |
kim-em author:kim-em |
chore: remove old irrelevant attributes in Logic/Basic |
This PR removes some attributes from Logic/Basic that appear to have no effect on Mathlib. |
t-logic |
0/2 |
Mathlib/Logic/Basic.lean |
1 |
6 |
['Parcly-Taxel', 'github-actions', 'kim-em', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] |
fpvandoorn assignee:fpvandoorn |
9-70971 9 days ago |
20-84169 20 days ago |
21-2668 21 days |
26981 |
JovanGerb author:JovanGerb |
chore: golf using `grw` |
This PR cleans up some proofs using `grw`. It also tags a few lemmas with `@[gcongr]` that were required for the proofs.
---
- [x] depends on: #26907
[](https://gitpod.io/from-referrer/)
|
large-import |
179/200 |
Archive/Wiedijk100Theorems/CubingACube.lean,Mathlib/Algebra/Category/ModuleCat/Topology/Basic.lean,Mathlib/Algebra/Group/Subgroup/Basic.lean,Mathlib/Algebra/Lie/Engel.lean,Mathlib/Algebra/Lie/IdealOperations.lean,Mathlib/Algebra/Module/Submodule/IterateMapComap.lean,Mathlib/Algebra/Order/Archimedean/Basic.lean,Mathlib/Algebra/Order/CauSeq/BigOperators.lean,Mathlib/Algebra/Order/Field/Basic.lean,Mathlib/Algebra/Order/Group/Multiset.lean,Mathlib/Algebra/Order/Kleene.lean,Mathlib/Algebra/Order/Rearrangement.lean,Mathlib/Algebra/Order/Ring/Unbundled/Basic.lean,Mathlib/Analysis/BoxIntegral/Integrability.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Isometric.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Convex/Gauge.lean,Mathlib/Analysis/Convex/Slope.lean,Mathlib/Analysis/Distribution/SchwartzSpace.lean,Mathlib/Analysis/Normed/Affine/AddTorsor.lean,Mathlib/Analysis/Normed/Order/UpperLower.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/NNNorm.lean,Mathlib/Analysis/Oscillation.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean,Mathlib/Combinatorics/Hall/Finite.lean,Mathlib/Data/NNReal/Defs.lean,Mathlib/Data/Real/Cardinality.lean,Mathlib/Dynamics/Ergodic/MeasurePreserving.lean,Mathlib/FieldTheory/IntermediateField/Adjoin/Basic.lean,Mathlib/LinearAlgebra/AffineSpace/Ordered.lean,Mathlib/MeasureTheory/Covering/LiminfLimsup.lean,Mathlib/MeasureTheory/Integral/Bochner/Basic.lean,Mathlib/MeasureTheory/Integral/Bochner/Set.lean,Mathlib/MeasureTheory/Integral/Bochner/VitaliCaratheodory.lean,Mathlib/MeasureTheory/Integral/DominatedConvergence.lean,Mathlib/MeasureTheory/Integral/IntegralEqImproper.lean,Mathlib/MeasureTheory/Measure/Content.lean,Mathlib/MeasureTheory/Measure/EverywherePos.lean,Mathlib/MeasureTheory/Measure/IntegralCharFun.lean,Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean,Mathlib/MeasureTheory/Measure/Stieltjes.lean,Mathlib/MeasureTheory/OuterMeasure/Caratheodory.lean,Mathlib/MeasureTheory/OuterMeasure/Induced.lean,Mathlib/MeasureTheory/OuterMeasure/OfFunction.lean,Mathlib/NumberTheory/ClassNumber/AdmissibleCardPowDegree.lean,Mathlib/NumberTheory/FLT/Polynomial.lean,Mathlib/NumberTheory/ModularForms/JacobiTheta/TwoVariable.lean,Mathlib/NumberTheory/Transcendental/Lindemann/AnalyticalPart.lean,Mathlib/Order/Basic.lean,Mathlib/Order/BooleanAlgebra/Basic.lean,Mathlib/Order/Closure.lean,Mathlib/Order/ConditionallyCompleteLattice/Basic.lean,Mathlib/Order/Height.lean,Mathlib/Order/Interval/Set/Monotone.lean,Mathlib/Order/Monotone/Extension.lean,Mathlib/Order/PrimeSeparator.lean,Mathlib/Probability/Martingale/Upcrossing.lean,Mathlib/Probability/Process/HittingTime.lean,Mathlib/RingTheory/Ideal/Operations.lean,Mathlib/RingTheory/MvPowerSeries/PiTopology.lean,Mathlib/RingTheory/Polynomial/Basic.lean,Mathlib/SetTheory/Cardinal/Arithmetic.lean,Mathlib/SetTheory/Cardinal/Ordinal.lean,Mathlib/SetTheory/Ordinal/Basic.lean,Mathlib/SetTheory/Ordinal/Enum.lean,Mathlib/SetTheory/Ordinal/FixedPointApproximants.lean,Mathlib/Topology/Maps/Basic.lean,Mathlib/Topology/MetricSpace/Holder.lean,Mathlib/Topology/MetricSpace/Kuratowski.lean,Mathlib/Topology/MetricSpace/Thickening.lean,Mathlib/Topology/NhdsSet.lean,Mathlib/Topology/Order.lean |
73 |
20 |
['JovanGerb', 'github-actions', 'grunweg', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
grunweg assignee:grunweg |
9-52095 9 days ago |
9-52113 9 days ago |
20-13485 20 days |
28077 |
ShreckYe author:ShreckYe |
feat(Data/Finset/Card): add some more Pigeonhole Principle theorems `exists_ne_map_eq_of_card_image_lt` and `not_injOn_of_card_image_lt` |
`exists_ne_map_eq_of_card_image_lt` is a special case of `exists_ne_map_eq_of_card_lt_of_maps_to` where `t` is `s.image f`, and `not_injOn_of_card_image_lt` is its variant using `Set.InjOn`. I ran into some cases where such theorems would save me some time. |
t-data
new-contributor
|
10/0 |
Mathlib/Data/Finset/Card.lean |
1 |
4 |
['ShreckYe', 'github-actions', 'themathqueen'] |
nobody |
9-47189 9 days ago |
13-58971 13 days ago |
13-59019 13 days |
28045 |
ShreckYe author:ShreckYe |
feat(Data/Finset/Image): add `subset_univ_image_iff` |
This is a special case of `subset_image_iff`, which corresponds to `Set.subset_range_iff_exists_image_eq` for `Set`. |
t-data
new-contributor
|
13/0 |
Mathlib/Data/Finset/Image.lean |
1 |
2 |
['github-actions', 'themathqueen'] |
nobody |
9-47084 9 days ago |
14-43876 14 days ago |
14-43938 14 days |
28139 |
YaelDillies author:YaelDillies |
refactor: make the cone explicit in `ConvexCone.toPointedCone` |
Otherwise it is impossible to know which cone we are talking about from the infoview as proofs are elided.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
t-convex-geometry
toric
maintainer-merge
|
3/3 |
Mathlib/Analysis/Convex/Cone/Closure.lean,Mathlib/Geometry/Convex/Cone/Pointed.lean |
2 |
2 |
['Ruben-VandeVelde', 'github-actions'] |
nobody |
9-22677 9 days ago |
9-22677 9 days ago |
11-70971 11 days |
27896 |
JovanGerb author:JovanGerb |
style: prefer `some`/`none` over `.some`/`.none` |
The notation `.some` and `.none` are very useful when working with other inductive types such as `LOption` which have fields names `some` and/or `none`. But for `Option`, we prefer to simply write `some`/`none`.
[#mathlib4 > style: `.some`/`.none` vs `some`/`none`](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/style.3A.20.60.2Esome.60.2F.60.2Enone.60.20vs.20.60some.60.2F.60none.60)
---
[](https://gitpod.io/from-referrer/)
|
|
240/241 |
Cache/IO.lean,Counterexamples/ZeroDivisorsInAddMonoidAlgebras.lean,LongestPole/Main.lean,Mathlib/Algebra/Order/BigOperators/Expect.lean,Mathlib/Algebra/Order/BigOperators/Ring/Finset.lean,Mathlib/Data/DFinsupp/Notation.lean,Mathlib/Data/EReal/Operations.lean,Mathlib/Data/Fin/Tuple/Reflection.lean,Mathlib/Data/Fin/VecNotation.lean,Mathlib/Data/Finsupp/Option.lean,Mathlib/Data/Option/Basic.lean,Mathlib/Data/Seq/Seq.lean,Mathlib/Lean/Meta.lean,Mathlib/Lean/Meta/Simp.lean,Mathlib/Logic/Function/Basic.lean,Mathlib/Tactic/Algebraize.lean,Mathlib/Tactic/CategoryTheory/Bicategory/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Coherence/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Coherence/PureCoherence.lean,Mathlib/Tactic/CategoryTheory/Monoidal/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Monoidal/Normalize.lean,Mathlib/Tactic/CategoryTheory/Monoidal/PureCoherence.lean,Mathlib/Tactic/DefEqTransformations.lean,Mathlib/Tactic/ENatToNat.lean,Mathlib/Tactic/FastInstance.lean,Mathlib/Tactic/FunProp/Core.lean,Mathlib/Tactic/FunProp/Decl.lean,Mathlib/Tactic/FunProp/Elab.lean,Mathlib/Tactic/FunProp/FunctionData.lean,Mathlib/Tactic/FunProp/Mor.lean,Mathlib/Tactic/FunProp/Theorems.lean,Mathlib/Tactic/FunProp/Types.lean,Mathlib/Tactic/Linarith/Oracle/SimplexAlgorithm/Datatypes.lean,Mathlib/Tactic/Linarith/Oracle/SimplexAlgorithm/Gauss.lean,Mathlib/Tactic/Linarith/Oracle/SimplexAlgorithm/SimplexAlgorithm.lean,Mathlib/Tactic/Linter/GlobalAttributeIn.lean,Mathlib/Tactic/NormNum/Irrational.lean,Mathlib/Tactic/Order/Graph/Basic.lean,Mathlib/Tactic/PNatToNat.lean,Mathlib/Tactic/Positivity/Finset.lean,Mathlib/Tactic/ProxyType.lean,Mathlib/Tactic/ReduceModChar.lean,Mathlib/Tactic/RewriteSearch.lean,Mathlib/Tactic/Simproc/ExistsAndEq.lean,Mathlib/Tactic/Simps/Basic.lean,Mathlib/Tactic/SuccessIfFailWithMsg.lean,Mathlib/Tactic/Widget/StringDiagram.lean,Mathlib/Util/Superscript.lean,MathlibTest/toAdditive.lean |
49 |
5 |
['JovanGerb', 'alreadydone', 'eric-wieser', 'github-actions'] |
kmill assignee:kmill |
9-11472 9 days ago |
17-59223 17 days ago |
17-59206 17 days |
24850 |
pechersky author:pechersky |
feat(Topology/UniformSpace/Ultra): uniform spaces induced by pseudometrics are ultra if system is ultra |
Any uniform space has a natural system of pseudometrics definable on it,
comprised of those pseudometrics constructed from a descending chain of
equivalence relation entourages. In a nonarchimedean uniformity, this pseudometric system
induces the uniformity.
---
[](https://gitpod.io/from-referrer/)
- [x] depends on: #23111 |
t-topology |
509/1 |
Mathlib.lean,Mathlib/Topology/MetricSpace/BundledFun.lean,Mathlib/Topology/UniformSpace/Ultra/Pseudometrizable.lean |
3 |
8 |
['ADedecker', 'fpvandoorn', 'github-actions', 'mathlib4-dependent-issues-bot', 'pechersky'] |
urkud assignee:urkud |
9-6508 9 days ago |
71-80218 2 months ago |
87-25753 87 days |
26089 |
WilliamCoram author:WilliamCoram |
feat: restricted power series form a ring |
We define restricted power series over a normed ring R, and show they form a ring when R has the ultrametric property
This is an update of [#23338](https://github.com/leanprover-community/mathlib4/pull/23338) to meet new expectations of PRs from forks.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
t-number-theory
label:t-algebra$ |
182/0 |
Mathlib.lean,Mathlib/RingTheory/PowerSeries/Restricted.lean |
2 |
7 |
['CBirkbeck', 'WilliamCoram', 'github-actions'] |
riccardobrasca assignee:riccardobrasca |
9-6506 9 days ago |
34-43801 1 month ago |
53-33234 53 days |
26547 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Limits/Shapes/Pullback/Categorical/CatCospanTransform): more lemmas about isomorphisms of `CatCospanTransform` |
We construct ways to extract left, right or base components of ismorphisms of `CatCospanTransform`, as well as various `IsIso` instances, and lemmas allowing to compute the left, right or base component of the inverse of a `CatCospanTransformMorphism` that has an `IsIso` instance.
---
- [x] depends on: #26412
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
70/0 |
Mathlib/CategoryTheory/Limits/Shapes/Pullback/Categorical/CatCospanTransform.lean |
1 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
TwoFX assignee:TwoFX |
9-6504 9 days ago |
46-62441 1 month ago |
46-65488 46 days |
26968 |
vihdzp author:vihdzp |
feat(Order/Concept): sets in a concept are codisjoint |
...and other small lemmata.
---
- [x] depends on: #26976
[](https://gitpod.io/from-referrer/)
|
t-order |
33/2 |
Mathlib/Order/Concept.lean |
1 |
8 |
['github-actions', 'leanprover-community-bot-assistant', 'linesthatinterlace', 'mathlib4-dependent-issues-bot', 'plp127', 'vihdzp'] |
bryangingechen assignee:bryangingechen |
9-6503 9 days ago |
38-10406 1 month ago |
38-39958 38 days |
27000 |
gasparattila author:gasparattila |
feat(Analysis/Normed/Group/Quotient): isometric versions of isomorphisms |
This PR adds an isometric version of the third isomorphism theorem for groups and modules.
---
[](https://gitpod.io/from-referrer/)
|
large-import
new-contributor
t-analysis
|
49/2 |
Mathlib/Analysis/Normed/Group/Quotient.lean |
1 |
1 |
['github-actions'] |
urkud assignee:urkud |
9-6503 9 days ago |
40-45630 1 month ago |
40-45682 40 days |
27049 |
BoltonBailey author:BoltonBailey |
doc(Analysis/BoxIntegral/Partition/Filter): field docstrings |
Split of #25917. Adds docstrings to the fields of this structure (Taken from the docstring of the structure itself). Note: this documentation was originally changed by asking Cursor (Claude 3.5 sonnet) to write the docstrings, but I think ultimately the docstring of the struct was reworked.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis
documentation
|
13/14 |
Mathlib/Analysis/BoxIntegral/Partition/Filter.lean |
1 |
2 |
['BoltonBailey', 'github-actions'] |
hrmacbeth assignee:hrmacbeth |
9-6502 9 days ago |
18-38220 18 days ago |
39-15394 39 days |
27441 |
judithludwig author:judithludwig |
feat(RingTheory/Polynomial/Quotient): Lemma on PIDs |
This is part of a course project at Heidelberg University: https://matematiflo.github.io/CompAssistedMath2025/
feat(RingTheory/Polynomial/Quotient): add lemma: Let $$R$$ be an integral domain and assume $$R[X]$$ is a PID, then $$R$$ is a field. This lemma is useful for proving that some rings are not PIDs, such as $$\mathbb{Z}[X]$$.
Co-authored-by: Philipp Sivov @Silipp182
Co-authored-by: Veliyan Taslev @hubavelko
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
11/0 |
Mathlib/RingTheory/Polynomial/Quotient.lean |
1 |
4 |
['alreadydone', 'github-actions'] |
erdOne assignee:erdOne |
9-6501 9 days ago |
16-32914 16 days ago |
27-24670 27 days |
27815 |
BGuillemet author:BGuillemet |
feat(CategoryTheory/Limits/Shapes/Products): add limMapPi and sigmaMapColim |
Add the canonical morphism from a limit to the product over its objects. Prove that it is a monomorphism.
Dually, add the canonical morphism to a colimit from the coproduc of its objects and prove that it is an epimorphism.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-category-theory
|
44/0 |
Mathlib/CategoryTheory/Limits/Shapes/Products.lean |
1 |
1 |
['github-actions'] |
jcommelin assignee:jcommelin |
9-6498 9 days ago |
19-52600 19 days ago |
19-52626 19 days |
26110 |
YaelDillies author:YaelDillies |
feat: sharp monoids |
Define sharp monoids, which are the monoids whose only unit is `1`. This concept is useful in log geometry and in particular shows up in the theory of affine monoids.
This concept already existed in the guise of `Subsingleton Mˣ`, but giving it a name makes it easier to refer to and uncovers some missing instances.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
toric
t-algebra
label:t-algebra$ |
51/30 |
Mathlib/Algebra/BigOperators/Associated.lean,Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean,Mathlib/Algebra/GCDMonoid/Basic.lean,Mathlib/Algebra/Group/Irreducible/Defs.lean,Mathlib/Algebra/Group/Pi/Units.lean,Mathlib/Algebra/Group/Prod.lean,Mathlib/Algebra/Group/Submonoid/Units.lean,Mathlib/Algebra/Group/Units/Basic.lean,Mathlib/Algebra/Group/Units/Defs.lean,Mathlib/Algebra/GroupWithZero/Associated.lean,Mathlib/Algebra/GroupWithZero/Divisibility.lean,Mathlib/Data/List/Prime.lean,Mathlib/Data/ZMod/Basic.lean,Mathlib/NumberTheory/DirichletCharacter/Basic.lean,Mathlib/RingTheory/ChainOfDivisors.lean,Mathlib/RingTheory/IntegralDomain.lean,Mathlib/RingTheory/UniqueFactorizationDomain/NormalizedFactors.lean,Mathlib/RingTheory/Valuation/Integers.lean |
18 |
3 |
['b-mehta', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] |
adomani assignee:adomani |
8-77280 8 days ago |
8-77301 8 days ago |
62-85341 62 days |
28226 |
ShreckYe author:ShreckYe |
feat(Data/Finset): `Multiset.eq_of_le_of_card_eq` and `Finset.eq_of_subet_of_card_eq` |
As the conditions `s ⊆ t` for `Finset` and `s ≤ t` for `Multiset` both imply `card s ≤ card t`, the conditions `card t ≤ card s` in both `Finset.eq_of_subset_of_card_le` and `Multiset.eq_of_le_of_card_le` can be specialized to `card s = card t`, and due to this I'd argue `card s = card t` might be more common than `card t ≤ card s` in some cases. A similar theorem `Sublist.eq_of_length` for `Sublist` is already available in Lean. Adding these two theorems can aid proof search in such cases. |
t-data
new-contributor
easy
|
6/0 |
Mathlib/Data/Finset/Card.lean,Mathlib/Data/Multiset/Defs.lean |
2 |
3 |
['Ruben-VandeVelde', 'ShreckYe', 'github-actions'] |
nobody |
8-67614 8 days ago |
9-61306 9 days ago |
9-61359 9 days |
26282 |
AntoineChambert-Loir author:AntoineChambert-Loir |
feat: a theorem of Jordan on primitive subgroups of the permutation group |
A theorem of Jordan on the primitive subgroups of a permutation group:
* if it contains a swap, it is equal to the permutation group,
* if it contains a 3-cycle, it contains the alternating group.
This PR continues the work from #24131.
- [x] depends on: #26281
- [x] depends on: #26280
- [x] depends on: #26279
Original PR: https://github.com/leanprover-community/mathlib4/pull/24131
[](https://gitpod.io/from-referrer/) |
t-group-theory
large-import
|
1044/136 |
Mathlib.lean,Mathlib/Data/Set/Card.lean,Mathlib/GroupTheory/GroupAction/Jordan.lean,Mathlib/GroupTheory/GroupAction/MultiplePrimitivity.lean,Mathlib/GroupTheory/GroupAction/MultipleTransitivity.lean,Mathlib/GroupTheory/GroupAction/Primitive.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfFixingSubgroup.lean,Mathlib/GroupTheory/GroupAction/SubMulAction/OfStabilizer.lean,Mathlib/GroupTheory/Perm/Cycle/Type.lean,Mathlib/SetTheory/Cardinal/Embedding.lean |
10 |
n/a |
['AntoineChambert-Loir', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'tb65536'] |
nobody |
8-63711 8 days ago |
unknown |
unknown |
28241 |
alreadydone author:alreadydone |
chore(Data): `SetLike Finset` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
54/62 |
Counterexamples/AharoniKorman.lean,Mathlib/Algebra/BigOperators/Finprod.lean,Mathlib/Algebra/Group/Pointwise/Finset/Basic.lean,Mathlib/Algebra/Module/FinitePresentation.lean,Mathlib/Combinatorics/Additive/RuzsaCovering.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/WalkCounting.lean,Mathlib/Data/DFinsupp/Defs.lean,Mathlib/Data/Finset/Defs.lean,Mathlib/Data/Finset/Insert.lean,Mathlib/Data/Finset/Union.lean,Mathlib/FieldTheory/Perfect.lean,Mathlib/GroupTheory/Perm/Centralizer.lean,Mathlib/GroupTheory/Perm/Cycle/Basic.lean,Mathlib/LinearAlgebra/Finsupp/LinearCombination.lean,Mathlib/LinearAlgebra/Finsupp/Supported.lean,Mathlib/LinearAlgebra/LinearIndependent/Basic.lean,Mathlib/LinearAlgebra/LinearIndependent/Defs.lean,Mathlib/MeasureTheory/Integral/IntegrableOn.lean,Mathlib/ModelTheory/Semantics.lean,Mathlib/Order/CountableDenseLinearOrder.lean,Mathlib/Probability/Independence/Kernel.lean,Mathlib/RingTheory/Ideal/Quotient/Index.lean,Mathlib/RingTheory/IntegralClosure/IsIntegral/Basic.lean,Mathlib/RingTheory/Spectrum/Prime/Polynomial.lean,Mathlib/Topology/Separation/Basic.lean |
25 |
1 |
['github-actions'] |
nobody |
8-58058 8 days ago |
8-58058 8 days ago |
8-58042 8 days |
27059 |
Komyyy author:Komyyy |
feat: Linear upper or lower sets topologies are completely normal |
The primary motivation for this theorem is to prove that Sierpiński space is completely normal.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
77/1 |
Mathlib.lean,Mathlib/Topology/Order/UpperLowerSetTopology.lean,Mathlib/Topology/Separation/LinearUpperLowerSetTopology.lean |
3 |
4 |
['alreadydone', 'github-actions'] |
alreadydone assignee:alreadydone |
8-56970 8 days ago |
38-72839 1 month ago |
38-72822 38 days |
28242 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Bicategory): EqToHom for bicategories |
We generalize the `eqToHom` construction from `Category` to `CategoryStruct`, allowing its usage in bicategorical contexts.
We introduce a file `CategoryTheory/Bicategory/EqToHom` that records some of the properties of `eqToHom`s 1-morphisms and 2-morphisms, such as the transitivity up to isomorphism of `eqToHom` 1-morphisms, and congruence lemmas for unitors, associators and whiskering with respects to `eqToHom` 2-morphisms.
This generalization and these congruence lemmas will be used to define icons between lax functors, and work with categories of strictly unitary lax/pseudo-functors (e.g for pseudocomposable arrows and lax-composable arrows in bicategories, which are part of the definitions of nerve constructions in bicategories).
---
A follow-up PR will move some existing `eqToHom`-related lemmas from `CategoryTheory/Bicategory/Strict` to this new file.
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
150/4 |
Mathlib.lean,Mathlib/CategoryTheory/Bicategory/EqToHom.lean,Mathlib/CategoryTheory/EqToHom.lean |
3 |
1 |
['github-actions'] |
nobody |
8-54500 8 days ago |
8-54507 8 days ago |
9-44392 9 days |
27634 |
agjftucker author:agjftucker |
fix(Analysis/Calculus/Implicit): consistently rename {`map`, `fun`, `function`} to `fun` |
There are several clear naming issues in the file Implicit.lean, such as
```
theorem prod_map_implicitFunction :
∀ᶠ p : F × G in 𝓝 (φ.prodFun φ.pt), φ.prodFun (φ.implicitFunction p.1 p.2) = p :=
```
where `prod_map` and `prodFun` both refer to the same thing. In this PR I have done my best to resolve these as consistently as possible by renaming everything `map`, also everything `function`, to `fun`. This has the added benefit of making some long names a little shorter.
In passing I rewrapped some comments and replaced `haveI` with `have` where it had been used like `haveI` in Lean 3.
Moves:
- ImplicitFunctionData -> ImplicitFunData
- ImplicitFunctionData.implicitFunction -> ImplicitFunData.implicitFun
- ImplicitFunctionData.prod_map_implicitFunction -> ImplicitFunData.prodFun_implicitFun
- ImplicitFunctionData.left_map_implicitFunction -> ImplicitFunData.leftFun_implicitFun
- ImplicitFunctionData.right_map_implicitFunction -> ImplicitFunData.rightFun_implicitFun
- ImplicitFunctionData.implicitFunction_apply_image -> ImplicitFunData.implicitFun_apply_image
- ImplicitFunctionData.implicitFunction_hasStrictFDerivAt -> ImplicitFunData.hasStrictFDerivAt_implicitFun
- HasStrictFDerivAt.implicitFunctionDataOfComplemented -> HasStrictFDerivAt.implicitFunDataOfComplemented
- HasStrictFDerivAt.implicitFunctionOfComplemented -> HasStrictFDerivAt.implicitFunOfComplemented
- HasStrictFDerivAt.map_implicitFunctionOfComplemented_eq -> HasStrictFDerivAt.map_implicitFunOfComplemented_eq
- HasStrictFDerivAt.eq_implicitFunctionOfComplemented -> HasStrictFDerivAt.eq_implicitFunOfComplemented
- HasStrictFDerivAt.implicitFunctionOfComplemented_apply_image -> HasStrictFDerivAt.implicitFunOfComplemented_apply_image
- HasStrictFDerivAt.to_implicitFunctionOfComplemented -> HasStrictFDerivAt.to_implicitFunOfComplemented
- HasStrictFDerivAt.implicitFunction -> HasStrictFDerivAt.implicitFun
- HasStrictFDerivAt.tendsto_implicitFunction -> HasStrictFDerivAt.tendsto_implicitFun
- _root_.Filter.Tendsto.implicitFunction -> _root_.Filter.Tendsto.implicitFun
- HasStrictFDerivAt.map_implicitFunction_eq -> HasStrictFDerivAt.map_implicitFun_eq
- HasStrictFDerivAt.implicitFunction_apply_image -> HasStrictFDerivAt.implicitFun_apply_image
- HasStrictFDerivAt.eq_implicitFunction -> HasStrictFDerivAt.eq_implicitFun
- HasStrictFDerivAt.to_implicitFunction -> HasStrictFDerivAt.to_implicitFun
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
165/121 |
Mathlib/Analysis/Calculus/Implicit.lean,docs/1000.yaml,docs/overview.yaml,docs/undergrad.yaml |
4 |
1 |
['github-actions'] |
nobody |
8-36922 8 days ago |
8-36923 8 days ago |
22-53509 22 days |
26192 |
kckennylau author:kckennylau |
feat(LinearAlgebra): symmetric tensor power |
This file defines the symmetric tensor power of a module over a ring. The finite powers will form a grading of the symmetric algebra. The n-th symmetric R-tensor power of M will also correspond to global sections of a line bundle on Proj(M) of degree n. It also has a universal property where maps out of it correspond to symmetric multilinear forms.
---
Zulip: [#mathlib4 > Proposal: Symmetric Tensor Power](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Proposal.3A.20Symmetric.20Tensor.20Power/with/524795235)
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
137/0 |
Mathlib.lean,Mathlib/LinearAlgebra/TensorPower/Symmetric.lean |
2 |
12 |
['AntoineChambert-Loir', 'erdOne', 'eric-wieser', 'github-actions', 'kckennylau', 'mattrobball'] |
nobody |
8-35928 8 days ago |
9-69201 9 days ago |
59-17977 59 days |
27339 |
pechersky author:pechersky |
chore(RingTheory/Laurent): use WithZero.exp to golf statements and proofs about valuation on K((X)) |
Done as part of refactor of Valued in #27314. This PR does not change any definitions. Instead, uses `WithZero.exp` instead of coercion + Multiplicative.ofAdd. And some helper simp lemmas about valuations of RatFunc vis a vis LaurentSeries.
---
[](https://gitpod.io/from-referrer/)
|
tech debt
t-algebra
t-number-theory
label:t-algebra$ |
78/77 |
Mathlib/FieldTheory/RatFunc/AsPolynomial.lean,Mathlib/RingTheory/LaurentSeries.lean,Mathlib/Topology/Algebra/Valued/WithVal.lean |
3 |
2 |
['faenuccio', 'github-actions'] |
Vierkantor assignee:Vierkantor |
8-32212 8 days ago |
29-42769 29 days ago |
30-365 30 days |
25804 |
erdOne author:erdOne |
feat: `∑ z ∈ L, ‖z - x‖⁻ʳ` converges for lattices `L` |
---
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #21673.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/21673* |
t-analysis |
319/0 |
Mathlib.lean,Mathlib/Algebra/BigOperators/Group/Finset/Disjoint.lean,Mathlib/Algebra/Module/ZLattice/Summable.lean,Mathlib/Order/Disjointed.lean |
4 |
3 |
['github-actions', 'wwylele'] |
fpvandoorn assignee:fpvandoorn |
8-25364 8 days ago |
69-55338 2 months ago |
69-55321 69 days |
27308 |
xyzw12345 author:xyzw12345 |
feat(LinearAlgebra/SymmetricAlgebra): IsSymmetricAlgebra |
This PR continues the work from #24602.
Original PR: https://github.com/leanprover-community/mathlib4/pull/24602 |
t-algebra label:t-algebra$ |
78/0 |
Mathlib/LinearAlgebra/SymmetricAlgebra/Basic.lean,Mathlib/LinearAlgebra/SymmetricAlgebra/Basis.lean |
2 |
2 |
['github-actions', 'mattrobball'] |
mattrobball assignee:mattrobball |
8-23550 8 days ago |
31-43836 1 month ago |
31-43889 31 days |
22300 |
chrisflav author:chrisflav |
feat(RingTheory/GoingDown): lift `LTSeries` of primes |
Inductive version of `Ideal.exists_ideal_lt_liesOver_of_lt`.
Co-authored by: Sihan Su
Co-authored by: Yi Song
---
- [x] depends on: #22299
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
27/0 |
Mathlib/RingTheory/Ideal/GoingDown.lean |
1 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
alreadydone assignee:alreadydone |
8-6498 8 days ago |
15-61618 15 days ago |
93-37396 93 days |
24533 |
robertmaxton42 author:robertmaxton42 |
feat (ULift): conjugation by ULift.up/down, misc cast/heq lemmas |
* Adds the convenience def `ULift.conj x := `down (f (up x))`, and corresponding basic lemmas
* Adds lemmas showing that `ULift.up` and `.down` commute with casts and preserve `HEq`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
31/0 |
Mathlib/Data/ULift.lean |
1 |
14 |
['eric-wieser', 'github-actions', 'robertmaxton42'] |
ericrbg assignee:ericrbg |
8-6497 8 days ago |
110-62654 3 months ago |
110-70566 110 days |
24829 |
urkud author:urkud |
fix(Topology/Homotopy): fix name&args order of `comp` |
`ContinuousMap.Homotopy.hcomp` used name & arguments order
that matches Mathlib's category theory conventions,
not topology conventions.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
30/19 |
Mathlib/Topology/Homotopy/Basic.lean,Mathlib/Topology/Homotopy/Contractible.lean,Mathlib/Topology/Homotopy/Equiv.lean,Mathlib/Topology/Homotopy/Lifting.lean |
4 |
5 |
['github-actions', 'grunweg', 'urkud'] |
grunweg assignee:grunweg |
8-6496 8 days ago |
99-80701 3 months ago |
99-80752 99 days |
26357 |
javra author:javra |
feat(CategoryTheory): linear categories as `ModuleCat R`-enriched categories |
Continues #23826.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-category-theory
|
195/0 |
Mathlib.lean,Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean,Mathlib/CategoryTheory/Enriched/Linear.lean,Mathlib/CategoryTheory/Linear/Basic.lean,Mathlib/CategoryTheory/Monoidal/Linear.lean |
5 |
1 |
['github-actions'] |
adamtopaz assignee:adamtopaz |
8-6494 8 days ago |
16-59890 16 days ago |
57-48111 57 days |
27073 |
pechersky author:pechersky |
feat(Archive/Examples/Local): files showcasing properties of local fields |
for p-adics, completions of number fields, laurent series, and fraction rings of witt vectors
Should get filled in as more data/instances are declared
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
139/0 |
Archive.lean,Archive/Examples/Local/Laurent.lean,Archive/Examples/Local/NumberField.lean,Archive/Examples/Local/Padic.lean,Archive/Examples/Local/Witt.lean |
5 |
1 |
['github-actions'] |
alexjbest assignee:alexjbest |
8-6491 8 days ago |
16-60339 16 days ago |
38-44101 38 days |
27166 |
joelriou author:joelriou |
feat(AlgebraicTopology): the functor `II : SimplexCategory ⥤ SimplexCategoryᵒᵖ` by Gabriel and Zisman |
In this file, we construct a cosimplicial object `SimplexCategory.II` in `SimplexCategoryᵒᵖ`, i.e. a functor `SimplexCategory ⥤ SimplexCategoryᵒᵖ`. If we identify `SimplexCategory` with the category of finite nonempty linearly ordered types, this functor could be interpreted as the contravariant functor which sends a finite nonempty linearly ordered type `T` to `T →o Fin 2`; in particular, it sends `Fin (n + 1)` to a linearly ordered type which is isomorphic to `Fin (n + 2)`. As a result, we define `SimplexCategory.II` as a functor which sends `⦋n⦌` to `⦋n + 1⦌`: on morphisms, it sends faces to degeneracies and vice versa.
(I plan to use this in order to show that the topological realization from simplicial sets to `TopCat` preserves finite limits (at least after forgetting the topology), following the proof by Gabriel and Zisman.)
---
Suggestions for a better (short) name are welcome. `II` is the name given is the original source.
- [x] depends on: #27153
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
258/0 |
Mathlib.lean,Mathlib/AlgebraicTopology/SimplicialObject/II.lean |
2 |
3 |
['github-actions', 'joelriou', 'mathlib4-dependent-issues-bot'] |
robin-carlier assignee:robin-carlier |
8-6490 8 days ago |
20-53477 20 days ago |
35-71573 35 days |
27638 |
plp127 author:plp127 |
feat: subsingleton `ℕ` and `ℤ` modules |
Provide some instances `AddCommMonoid.subsingletonNatModule` and `AddCommMonoid.subsingletonIntModule`. Also move some of the theorems about `ℕ` and `ℤ` modules from `Algebra/Module/End` to `Algebra/Module/NatInt`.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
53/45 |
Mathlib/Algebra/Algebra/Rat.lean,Mathlib/Algebra/Module/End.lean,Mathlib/Algebra/Module/NatInt.lean,Mathlib/Algebra/Module/Submodule/RestrictScalars.lean,Mathlib/Data/ZMod/Basic.lean,Mathlib/RingTheory/OreLocalization/Ring.lean |
6 |
3 |
['github-actions', 'plp127'] |
mattrobball assignee:mattrobball |
8-6489 8 days ago |
22-44103 22 days ago |
22-44149 22 days |
27659 |
euprunin author:euprunin |
chore(Geometry/RingedSpace): remove use of `erw` in `vPullbackConeIsLimit` |
|
t-algebraic-geometry |
4/1 |
Mathlib/Geometry/RingedSpace/PresheafedSpace/Gluing.lean |
1 |
1 |
['github-actions'] |
erdOne assignee:erdOne |
8-6488 8 days ago |
22-14382 22 days ago |
22-14427 22 days |
28321 |
kim-em author:kim-em |
chore: make OmegaCompletePartialOrder a mixin |
I've noted typeclass searches often getting distracted looking for a `OmegaCompletePartialOrder` when they just want an `LE` or a `Preorder`.
Let's benchmark to see it if has a nontrivial effect. Not certain if this is desirable if the performance change is neutral (or even negative). |
|
68/43 |
Mathlib/Control/LawfulFix.lean,Mathlib/Data/Nat/Nth.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean,Mathlib/Order/Category/OmegaCompletePartialOrder.lean,Mathlib/Order/OmegaCompletePartialOrder.lean,Mathlib/Topology/OmegaCompletePartialOrder.lean |
6 |
4 |
['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] |
nobody |
7-79104 7 days ago |
7-79104 7 days ago |
8-2658 8 days |
28292 |
bwangpj author:bwangpj |
feat(Geometry/Manifold/ContMDiff): add product lemmas for `ContMDiff` |
Add product lemmas for `ContMDiff`. These are analogous to the corresponding lemmas for `Continuous` in [`Mathlib.Topology.Constructions.SumProd`](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Constructions/SumProd.html#ContinuousAt.comp%E2%82%82).
This is upstreamed from [https://github.com/girving/ray](https://github.com/girving/ray).
Co-authored-by: Geoffrey Irving
---
[](https://gitpod.io/from-referrer/)
|
new-contributor |
42/0 |
Mathlib/Geometry/Manifold/ContMDiff/Constructions.lean |
1 |
1 |
['github-actions'] |
nobody |
7-77617 7 days ago |
8-44322 8 days ago |
8-44315 8 days |
27552 |
Equilibris author:Equilibris |
refactor: make universe levels visible in typevec |
This will be needed to allow `M.corec` to be generic across universes
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
easy
|
16/10 |
Mathlib/Data/TypeVec.lean |
1 |
9 |
['Equilibris', 'eric-wieser', 'github-actions', 'plp127'] |
nobody |
7-74045 7 days ago |
8-26464 8 days ago |
24-38984 24 days |
28150 |
Equilibris author:Equilibris |
chore: clean up proofs typevec proofs |
While adding variable universe corecs I found a lot of theorems in typevec that could do with a bit of a clean-up
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
24/26 |
Mathlib/Data/TypeVec.lean |
1 |
6 |
['Equilibris', 'alexkeizer', 'github-actions'] |
nobody |
7-66093 7 days ago |
7-66093 7 days ago |
11-61691 11 days |
28185 |
Sebi-Kumar author:Sebi-Kumar |
feat(Topology/Path): add theorem about casting with rfl |
Prove the trivial result `p.cast rfl rfl = p` for a path `p`, which serves as a useful result for the simplifier to know. Suggested by Aaron Liu at the discussion [#Is there code for X? > Dealing with `Path.cast`](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Dealing.20with.20.60Path.2Ecast.60).
---
To provide additional context, I am relatively new when it comes to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`.
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-topology
easy
|
2/0 |
Mathlib/Topology/Path.lean |
1 |
1 |
['github-actions', 'kckennylau', 'plp127'] |
nobody |
7-47078 7 days ago |
7-47078 7 days ago |
10-39202 10 days |
28325 |
pechersky author:pechersky |
feat(WithZeroTopology): `locallyCompactSpace_iff_locallyFiniteOrder_units` |
On the way to golf/generalize the proof that
locally compact valued fields have locally finite valuation groups as embodied in
`Valued.integer.locallyFiniteOrder_units_mrange_of_isCompact_integer` ]
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-order
t-topology
|
160/2 |
Mathlib/Topology/Algebra/GroupWithZero.lean,Mathlib/Topology/Algebra/WithZeroTopology.lean,Mathlib/Topology/Compactness/Compact.lean |
3 |
1 |
['github-actions'] |
nobody |
7-44278 7 days ago |
7-75096 7 days ago |
7-77806 7 days |
28350 |
themathqueen author:themathqueen |
feat(Topology/Algebra/Module/LinearMap): `range (f.smulRight x) = span {x}` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
t-topology
label:t-algebra$ |
14/0 |
Mathlib/Topology/Algebra/Module/LinearMap.lean |
1 |
2 |
['github-actions', 'themathqueen'] |
nobody |
7-37264 7 days ago |
7-38572 7 days ago |
7-41163 7 days |
28337 |
joelriou author:joelriou |
feat(AlgebraicTopology): nondegenerate simplices in the nerve of a partially ordered type |
In this PR, we show that nondegenerate simplices in the nerve of a partially ordered type `X` correspond to strictly monotone functions `Fin (n + 1) → X`.
(Incidentally, better normal formal are used for the RHS of lemmas involving (non)degenerate simplices of dimension `0`.)
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
102/11 |
Mathlib.lean,Mathlib/AlgebraicTopology/SimplicialNerve.lean,Mathlib/AlgebraicTopology/SimplicialSet/Degenerate.lean,Mathlib/AlgebraicTopology/SimplicialSet/Nerve.lean,Mathlib/AlgebraicTopology/SimplicialSet/NerveNondegenerate.lean |
5 |
1 |
['github-actions'] |
nobody |
7-30807 7 days ago |
7-58290 7 days ago |
7-58274 7 days |
28182 |
themathqueen author:themathqueen |
feat(Data/Matrix/Basis): `center (Matrix n n α) = scalar n '' center α` |
The center of `Matrix n n α` is trivial for semiring `α`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
39/13 |
Mathlib/Algebra/Central/Matrix.lean,Mathlib/Data/Matrix/Basis.lean |
2 |
37 |
['eric-wieser', 'github-actions', 'kckennylau', 'themathqueen'] |
nobody |
7-28560 7 days ago |
10-44558 10 days ago |
10-44603 10 days |
26035 |
fbarroero author:fbarroero |
feat(Analysis/Polynomial/MahlerMeasure): the Mahler measure of a complex polynomial |
We introduce the Mahler measure of a complex polynomial and prove some basic facts.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
127/1 |
Mathlib.lean,Mathlib/Analysis/Polynomial/MahlerMeasure.lean,Mathlib/MeasureTheory/Integral/CircleIntegral.lean |
3 |
1 |
['github-actions'] |
fpvandoorn assignee:fpvandoorn |
7-27965 7 days ago |
63-37266 2 months ago |
63-37269 63 days |
27934 |
JasperMS author:JasperMS |
feat(Order): no basic lemmas and some SuccOrder `biUnion` lemmas |
Documents that not all possible interval inclusion lemmas will be added to `Basic.lean`.
Also proves some `biUnion` results about `SuccOrder`.
-------
See also [Zulip: #mathlib4 > New contributor: #27934 (Order/Interval)](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/New.20contributor.3A.20.2327934.20.28Order.2FInterval.29).
This is my first attempt at a Mathlib PR, I have worked on the [Carleson project](https://github.com/fpvandoorn/carleson) so far. I have tried to find natural homes for these results, and worked to make them as general as possible.
Your feedback is welcome!
[](https://gitpod.io/from-referrer/)
|
carleson
new-contributor
t-order
|
40/10 |
Mathlib/Order/Interval/Set/Basic.lean,Mathlib/Order/SuccPred/Archimedean.lean,Mathlib/Order/SuccPred/IntervalSucc.lean |
3 |
10 |
['JasperMS', 'YaelDillies', 'github-actions'] |
YaelDillies assignee:YaelDillies |
7-26481 7 days ago |
8-67647 8 days ago |
16-57999 16 days |
25292 |
YaelDillies author:YaelDillies |
feat: the `ConvexCone` generated by a set |
Define `ConvexCone.copy` and `ConvexCone.hull` and use them to golf the `CompleteLattice` instance.
From Toric
---
- [x] depends on: #25291
[](https://gitpod.io/from-referrer/)
|
t-convex-geometry
toric
|
94/35 |
Mathlib/Analysis/Convex/Cone/Basic.lean,Mathlib/Geometry/Convex/Cone/Basic.lean |
2 |
8 |
['YaelDillies', 'b-mehta', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
nobody |
7-25500 7 days ago |
24-58441 24 days ago |
62-10368 62 days |
27390 |
alreadydone author:alreadydone |
feat(FieldTheory/Galois): normal basis theorem |
Co-authored-by: Madison Crim @maddycrim
Co-authored-by: Aaron Liu @plp127
Co-authored-by: Justus Springer @justus-springer
from [*Formalizing Class Field Theory*](https://www.claymath.org/events/formalizing-class-field-theory/)
---
- [x] depends on: #27355
- [x] depends on: #27368
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
156/1 |
Mathlib.lean,Mathlib/Algebra/Module/PID.lean,Mathlib/Algebra/Polynomial/Module/AEval.lean,Mathlib/FieldTheory/Galois/NormalBasis.lean,Mathlib/LinearAlgebra/Dual/Lemmas.lean,Mathlib/LinearAlgebra/LinearIndependent/Basic.lean,docs/references.bib |
7 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
nobody |
7-21364 7 days ago |
7-23152 7 days ago |
7-23136 7 days |
27842 |
alreadydone author:alreadydone |
chore(MonoidLocalization): get rid of Submonoid.LocalizationWithZeroMap |
because every `Submonoid.LocalizationMap` automatically preserves zero.
Also removes a condition from `isLeftRegular_of_le_isCancelMulZero` by proving `map_isRegular`, which is used to prove other related lemmas.
`toMap_injective_iff` is moved from MonoidWithZero.lean to Basic.lean.
---
`Submonoid.LocalizationMap` could potentially be made a FunLike and MonoidWithZeroHomClass, but it's also reasonable (and maybe useful) to unbundle it and use the same predicate as `IsLocalization`.
- [x] depends on: #27791
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
81/98 |
Mathlib/GroupTheory/MonoidLocalization/Basic.lean,Mathlib/GroupTheory/MonoidLocalization/MonoidWithZero.lean,Mathlib/RingTheory/Localization/Defs.lean,Mathlib/RingTheory/OrderOfVanishing.lean |
4 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
nobody |
7-20849 7 days ago |
18-10804 18 days ago |
18-10788 18 days |
24184 |
YaelDillies author:YaelDillies |
feat: `[G : H]` notation for the index of `H : Subgroup G` |
This is a cute notation which I wrote for FLT. Not sure whether we want it in mathlib nor how to include `relindex` in the picture.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
RFC
label:t-algebra$ |
5/0 |
Mathlib/GroupTheory/Index.lean |
1 |
7 |
['YaelDillies', 'erdOne', 'github-actions', 'j-loreaux', 'kbuzzard'] |
eric-wieser assignee:eric-wieser |
7-6502 7 days ago |
100-81946 3 months ago |
124-19663 124 days |
25736 |
robin-carlier author:robin-carlier |
feat(AlgebraicTopology/SimplexCategory/GeneratorsRelations/NormalForms): Normal forms for `P_σ`s |
We prove that admissible lists indeed provide a normal form for morphisms of satisfying `P_σ`.
To this end, we introduce `standardσ`, a construction that takes a list and turn it into a composition of `σ i`s in `SimplexCategoryGenRel`. We then prove that, thangs to the fifth simplicial identity, composition on the right corresponds to simplicial insertion in the list. This gives existence of a normal form for every morphism satisfying `P_σ`.
For unicity, we introduce an auxiliary function `simplicialEvalσ : (List ℕ) → ℕ → ℕ` and show that for admissible lists, it lifts to `ℕ` the `orderHom` attached to `toSimplexCategory.map standardσ`, and that we can recover elements of the list only by looking at values of this function.
Part of a series of PR formalising that `SimplexCategoryGenRel` is equivalent to `SimplexCategory`.
---
- [x] depends on: #21744
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #21745.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/21745* |
t-algebraic-topology
large-import
|
253/7 |
Mathlib/AlgebraicTopology/SimplexCategory/GeneratorsRelations/NormalForms.lean |
1 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
mattrobball assignee:mattrobball |
7-6501 7 days ago |
20-53690 20 days ago |
69-69854 69 days |
25947 |
qawbecrdtey author:qawbecrdtey |
feat(Data/Nat/Factors): added lemmas including `primeFactorsList_length_ne_zero` |
---
Added lemmas `primeFactorsList_length_ne_zero`, `primeFactorsList_prime_iff`, and `primeFactorsList_length_eq_one`.
```lean
theorem primeFactorsList_length_ne_zero (n : ℕ) : n.primeFactorsList.length ≠ 0 ↔ 2 ≤ n
theorem primeFactorsList_prime_iff {p : ℕ} : p.primeFactorsList = [p] ↔ p.Prime
@[simp]
theorem primeFactorsList_length_eq_one (n : ℕ) : n.primeFactorsList.length = 1 ↔ n.Prime
```
[](https://gitpod.io/from-referrer/)
|
t-data |
21/3 |
Mathlib/Data/Nat/Factors.lean |
1 |
5 |
['Ruben-VandeVelde', 'github-actions', 'qawbecrdtey'] |
ericrbg assignee:ericrbg |
7-6500 7 days ago |
65-58303 2 months ago |
65-66904 65 days |
26332 |
Timeroot author:Timeroot |
feat(ModelTheory/Definability): TermDefinable functions |
This PR continues the work from #23506.
Original PR: https://github.com/leanprover-community/mathlib4/pull/23506 |
large-import
t-logic
|
159/0 |
Mathlib/Data/Rel.lean,Mathlib/ModelTheory/Definability.lean,scripts/noshake.json |
3 |
2 |
['Timeroot', 'github-actions'] |
fpvandoorn assignee:fpvandoorn |
7-6499 7 days ago |
16-59854 16 days ago |
57-85547 57 days |
27754 |
Parcly-Taxel author:Parcly-Taxel |
feat: `finCycle` as iterated `finRotate` |
Originally used in #25786, but eventually discovered to be unnecessary. |
t-logic |
26/5 |
Mathlib/Logic/Equiv/Fin/Rotate.lean |
1 |
1 |
['github-actions'] |
fpvandoorn assignee:fpvandoorn |
7-6494 7 days ago |
20-41250 20 days ago |
20-41304 20 days |
27790 |
pechersky author:pechersky |
feat(Topology): `IsDenseInducing.isUniformInducing_extend` |
extending along a uniform inducing function with another uniform inducing function with dense ranges of both
creates a uniform inducing extension
golfs a proof in #27696
and discussed in https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/isUniformInducing_extension
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
113/0 |
Mathlib/Data/Set/Operations.lean,Mathlib/Topology/Constructions.lean,Mathlib/Topology/DenseEmbedding.lean,Mathlib/Topology/UniformSpace/AbstractCompletion.lean,Mathlib/Topology/UniformSpace/Completion.lean,Mathlib/Topology/UniformSpace/UniformEmbedding.lean |
6 |
3 |
['github-actions', 'plp127'] |
ocfnash assignee:ocfnash |
7-6493 7 days ago |
20-16700 20 days ago |
20-16732 20 days |
28374 |
euprunin author:euprunin |
chore(Analysis/CStarAlgebra/Module): golf entire `map_top_submodule` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/5 |
Mathlib/Analysis/CStarAlgebra/Module/Synonym.lean |
1 |
1 |
['github-actions'] |
nobody |
6-81098 6 days ago |
6-81739 6 days ago |
6-81786 6 days |
28371 |
euprunin author:euprunin |
chore(Analysis/SpecialFunctions/Pow): golf entire `tendsto_rpow_atBot_of_base_gt_one` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/5 |
Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean |
1 |
1 |
['github-actions'] |
nobody |
6-81067 6 days ago |
6-82090 6 days ago |
6-82136 6 days |
28379 |
euprunin author:euprunin |
chore(Analysis/NormedSpace/OperatorNorm): golf entire `opNorm_subsingleton` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/5 |
Mathlib/Analysis/NormedSpace/OperatorNorm/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
6-80135 6 days ago |
6-80463 6 days ago |
6-80509 6 days |
28381 |
euprunin author:euprunin |
chore(Analysis/Asymptotics): golf `isLittleO_pow_sub_pow_sub` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/4 |
Mathlib/Analysis/Asymptotics/Lemmas.lean |
1 |
1 |
['github-actions'] |
nobody |
6-79910 6 days ago |
6-79952 6 days ago |
6-80001 6 days |
28384 |
euprunin author:euprunin |
chore(Algebra/Order/Ring): golf entire `cast_natAbs` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/4 |
Mathlib/Algebra/Order/Ring/Cast.lean |
1 |
1 |
['github-actions'] |
nobody |
6-79265 6 days ago |
6-79274 6 days ago |
6-79320 6 days |
28385 |
euprunin author:euprunin |
chore(Algebra/BigOperators/Finsupp): golf entire `Finsupp.sum_sum_index` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/4 |
Mathlib/Algebra/BigOperators/Finsupp/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
6-79185 6 days ago |
6-79195 6 days ago |
6-79240 6 days |
28378 |
euprunin author:euprunin |
chore(Algebra): golf entire `eq_lift_comp_mkRingHom` and `eq_liftAlgHom_comp_mkAlgHom` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
4/8 |
Mathlib/Algebra/RingQuot.lean |
1 |
1 |
['github-actions'] |
nobody |
6-69116 6 days ago |
6-80758 6 days ago |
6-80803 6 days |
28376 |
euprunin author:euprunin |
chore(Analysis/Calculus/Deriv): golf entire `differentiableAt_comp_const_add` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
2/6 |
Mathlib/Analysis/Calculus/Deriv/Add.lean |
1 |
1 |
['github-actions'] |
nobody |
6-69106 6 days ago |
6-81282 6 days ago |
6-81327 6 days |
28373 |
euprunin author:euprunin |
chore(AlgebraicGeometry/Morphisms): golf entire `isOpenImmersion_iff_stalk` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
1/4 |
Mathlib/AlgebraicGeometry/Morphisms/OpenImmersion.lean |
1 |
1 |
['github-actions'] |
nobody |
6-68799 6 days ago |
6-81860 6 days ago |
6-81914 6 days |
28398 |
euprunin author:euprunin |
chore(Data/TypeVec): deprecate `subtypeVal_diagSub` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/8 |
Mathlib/Data/TypeVec.lean |
1 |
1 |
['github-actions'] |
nobody |
6-67633 6 days ago |
6-67634 6 days ago |
6-67688 6 days |
28399 |
Ruben-VandeVelde author:Ruben-VandeVelde |
feat: ring-theoretic fractions in Rat |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
47/0 |
Mathlib.lean,Mathlib/RingTheory/Localization/Rat.lean |
2 |
0 |
[] |
nobody |
6-65843 6 days ago |
6-65912 6 days ago |
6-65895 6 days |
26448 |
YaelDillies author:YaelDillies |
refactor: simplify `(f₁ ⊗ₘ f₂) ≫ (g₁ ⊗ₘ g₂)` to `(f₁ ≫ g₁) ⊗ₘ (f₂ ≫ g₂)` |
... instead of the other way around. This is motivated by the fact that homs happening "in parallel" is a non-concept (time along a branch can always be reparametrised), while homs happening "in series" is a well-defined concept. One should not simp the well-defined concept into the non-concept but instead the other way around.
This is also motivated by the advent of the `mon_tauto` simp set in #26057.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
toric
t-category-theory
|
115/119 |
Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean,Mathlib/Algebra/Category/ModuleCat/Presheaf/Monoidal.lean,Mathlib/CategoryTheory/Bicategory/End.lean,Mathlib/CategoryTheory/Dialectica/Monoidal.lean,Mathlib/CategoryTheory/Enriched/Basic.lean,Mathlib/CategoryTheory/Enriched/FunctorCategory.lean,Mathlib/CategoryTheory/GradedObject/Braiding.lean,Mathlib/CategoryTheory/GradedObject/Monoidal.lean,Mathlib/CategoryTheory/Localization/Monoidal.lean,Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean,Mathlib/CategoryTheory/Monoidal/Braided/Reflection.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Basic.lean,Mathlib/CategoryTheory/Monoidal/Category.lean,Mathlib/CategoryTheory/Monoidal/Free/Basic.lean,Mathlib/CategoryTheory/Monoidal/Functor.lean,Mathlib/CategoryTheory/Monoidal/FunctorCategory.lean,Mathlib/CategoryTheory/Monoidal/Internal/Limits.lean,Mathlib/CategoryTheory/Monoidal/Limits/Basic.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Monoidal/NaturalTransformation.lean,Mathlib/CategoryTheory/Monoidal/Opposite.lean,Mathlib/CategoryTheory/Monoidal/Preadditive.lean,Mathlib/CategoryTheory/Monoidal/Transport.lean,Mathlib/CategoryTheory/Monoidal/Types/Coyoneda.lean |
24 |
15 |
['YaelDillies', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot', 'robin-carlier', 'yuma-mizuno'] |
kim-em assignee:kim-em |
6-58901 6 days ago |
6-58968 6 days ago |
52-26127 52 days |
26988 |
YaelDillies author:YaelDillies |
feat(Rel): more API |
Some of this API already exists in `Topology.UniformSpace.Defs` but not spelled with `SetRel`, some of it was written for #24173.
---
`Topology.UniformSpace.Defs` will be refactored to use these new lemmas in #23181.
[](https://gitpod.io/from-referrer/)
|
t-data |
179/8 |
Mathlib/Combinatorics/SimpleGraph/Basic.lean,Mathlib/Data/Rel.lean |
2 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
nobody |
6-58517 6 days ago |
7-73928 7 days ago |
40-48168 40 days |
28220 |
kim-em author:kim-em |
chore: cleanup three #adaptation_notes |
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge |
5/26 |
Mathlib/Data/Bool/Basic.lean,Mathlib/Logic/Function/Defs.lean,Mathlib/Tactic/NormNum/Pow.lean |
3 |
6 |
['bryangingechen', 'github-actions', 'grunweg', 'kim-em', 'mathlib4-merge-conflict-bot'] |
nobody |
6-57072 6 days ago |
7-11568 7 days ago |
9-27470 9 days |
27288 |
themathqueen author:themathqueen |
chore(LinearAlgebra/TensorProduct/Basic): semi-linearize `map` and `lift` |
Semi-linearizing `TensorProduct.map`. Part of #27353.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
40/27 |
Mathlib/Algebra/Category/ModuleCat/ChangeOfRings.lean,Mathlib/LinearAlgebra/TensorProduct/Basic.lean,Mathlib/RingTheory/Coalgebra/Hom.lean |
3 |
5 |
['ADedecker', 'eric-wieser', 'github-actions', 'themathqueen'] |
ADedecker assignee:ADedecker |
6-56242 6 days ago |
16-19463 16 days ago |
27-42796 27 days |
28178 |
joelriou author:joelriou |
feat(CategoryTheory): locally presentable and accessible categories |
In this PR, we introduce the notions of locally presentable and locally accessible categories. The definitions involve the existence of certain colimits, and the fact that any object identifies as a filtered colimit of a given set of presentable objects. In particular, we show that in these categories, all the objects are presentable.
---
This PR continues the work from #20263.
Original PR: https://github.com/leanprover-community/mathlib4/pull/20263 |
t-category-theory |
265/3 |
Mathlib.lean,Mathlib/CategoryTheory/Presentable/Basic.lean,Mathlib/CategoryTheory/Presentable/CardinalFilteredPresentation.lean,Mathlib/CategoryTheory/Presentable/LocallyPresentable.lean,Mathlib/SetTheory/Cardinal/HasCardinalLT.lean |
5 |
n/a |
['github-actions'] |
nobody |
6-54639 6 days ago |
unknown |
unknown |
28356 |
JovanGerb author:JovanGerb |
chore(Data/Rat/Cast/CharZero): rename `Rat.cast_mk` to `Rat.cast_divInt` |
The symbol `/.` is notation for `Rat.divInt`, not `Rat.mk`, so this PR renames `Rat.cast_mk` to `Rat.cast_divInt`.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
5/3 |
Mathlib/Data/Rat/Cast/CharZero.lean,Mathlib/Data/Rat/Defs.lean,Mathlib/Data/Real/Irrational.lean |
3 |
1 |
['github-actions'] |
nobody |
6-52616 6 days ago |
7-26415 7 days ago |
7-26461 7 days |
28390 |
euprunin author:euprunin |
chore(Analysis/LocallyConvex): golf entire `polar_weak_closed` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/4 |
Mathlib/Analysis/LocallyConvex/Polar.lean |
1 |
1 |
['JonBannon', 'github-actions'] |
nobody |
6-51448 6 days ago |
6-78459 6 days ago |
6-78504 6 days |
28377 |
euprunin author:euprunin |
chore(Algebra/ContinuedFractions/Computation): golf `get?_of_eq_some_of_get?_intFractPair_stream_fr_ne_zero` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
2/4 |
Mathlib/Algebra/ContinuedFractions/Computation/Translations.lean |
1 |
1 |
['JonBannon', 'github-actions'] |
nobody |
6-51209 6 days ago |
6-81092 6 days ago |
6-81139 6 days |
28057 |
plp127 author:plp127 |
feat(SuccOrder): simp lemma to refold `Order.succ` and `Order.pred` |
Adds `SuccOrder.succ_eq_succ` and `PredOrder.pred_eq_pred` to refold `SuccOrder.succ` and `PredOrder.pred` into `Order.succ` and `Order.pred`. These lemmas are marked `@[simp]`.
---
[](https://gitpod.io/from-referrer/)
|
t-order |
8/2 |
Mathlib/Order/SuccPred/Basic.lean |
1 |
3 |
['YaelDillies', 'github-actions', 'plp127', 'vihdzp'] |
bryangingechen assignee:bryangingechen |
6-50596 6 days ago |
14-31775 14 days ago |
14-31825 14 days |
27875 |
grunweg author:grunweg |
style(AkraBazzi): use more standard indentation |
Also do some minor golfing, such as removing superfluous `by exact` or using `filter_upwards` slightly more.
---
- [x] depends on: #27871 to avoid conflicts
[](https://gitpod.io/from-referrer/)
|
t-computability |
576/586 |
Mathlib/Computability/AkraBazzi/AkraBazzi.lean,Mathlib/Computability/AkraBazzi/SumTransform.lean |
2 |
3 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
6-47652 6 days ago |
6-47983 6 days ago |
6-59468 6 days |
28404 |
joelriou author:joelriou |
feat(AlgebraicTopology): the covariant involution of SimplexCategory |
In this PR, we introduce the functor `rev : SimplexCategory ⥤ SimplexCategory` which, via the equivalence between the simplex category and the category of nonempty finite linearly ordered types, corresponds to the *covariant* functor which sends a type `α` to `αᵒᵈ`. We also define the induced functors/equivalences on simplicial objects and simplicial sets. This is introduced in order to handle the symmetry between horns (some combinatorial results shall be shown for all horns but one: this symmetry will allow to deduce the remaining case).
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
187/0 |
Mathlib.lean,Mathlib/AlgebraicTopology/SimplexCategory/Rev.lean,Mathlib/AlgebraicTopology/SimplicialObject/Rev.lean,Mathlib/AlgebraicTopology/SimplicialSet/Rev.lean,Mathlib/CategoryTheory/Whiskering.lean |
5 |
1 |
['github-actions'] |
nobody |
6-46011 6 days ago |
6-47098 6 days ago |
6-47082 6 days |
24015 |
alreadydone author:alreadydone |
feat(RingTheory): lemmas on finiteness of `LinearMap` and `Module.End` |
---
One less lemma than #24012, but with the advantage of not depending on #23963.
- [x] depends on: #24115
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
137/79 |
Mathlib/Algebra/Module/LinearMap/End.lean,Mathlib/GroupTheory/GroupAction/SubMulAction.lean,Mathlib/LinearAlgebra/BilinearMap.lean,Mathlib/LinearAlgebra/Dual/Lemmas.lean,Mathlib/LinearAlgebra/Projection.lean,Mathlib/RingTheory/Finiteness/Basic.lean,Mathlib/RingTheory/SimpleModule/Basic.lean |
7 |
26 |
['alreadydone', 'erdOne', 'eric-wieser', 'github-actions', 'leanprover-bot', 'leanprover-community-bot-assistant', 'leanprover-community-mathlib4-bot', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'themathqueen'] |
erdOne assignee:erdOne |
6-45199 6 days ago |
6-45251 6 days ago |
126-12323 126 days |
28375 |
euprunin author:euprunin |
chore(Analysis/SpecialFunctions/Pow): golf entire `rpow_lt_rpow_of_exponent_neg`, `rpow_le_rpow_of_exponent_nonpos`, `rpow_le_of_le_log` and `rpow_lt_of_lt_log` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
8/22 |
Mathlib/Analysis/SpecialFunctions/Pow/Real.lean |
1 |
2 |
['JonBannon', 'Ruben-VandeVelde', 'github-actions'] |
nobody |
6-44949 6 days ago |
6-81401 6 days ago |
6-81446 6 days |
28389 |
euprunin author:euprunin |
chore(Algebra/Group/Subgroup): golf entire `subgroupOf_sup` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
2/6 |
Mathlib/Algebra/Group/Subgroup/Ker.lean |
1 |
1 |
['Ruben-VandeVelde', 'github-actions'] |
nobody |
6-44448 6 days ago |
6-78589 6 days ago |
6-78634 6 days |
27672 |
b-reinke author:b-reinke |
feat(GroupTheory/FreeGroup): add definition of cyclically reduced words |
This PR adds the definition of cyclically reduced words for free groups. It is a part of a series of PR on the theory of cyclically reduced words.
Upstreamed from the [EquationalTheories](https://github.com/teorth/equational_theories) project.
- [ ] depends on: #25966
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
72/0 |
Mathlib.lean,Mathlib/GroupTheory/FreeGroup/CyclicallyReduced.lean |
2 |
3 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
6-41671 6 days ago |
6-41689 6 days ago |
6-44823 6 days |
28312 |
LLaurance author:LLaurance |
feat(Combinatorics/SimpleGraph): minimum degree of nontrivial tree is one |
Add basic facts about nontrivial preconnected SimpleGraphs and that a nontrivial tree has a vertex of degree one.
The motivation for this is to ultimately show that any connected graph contains a vertex that, when removed, leaves the graph connected. Any connected graph has a spanning tree which contains a vertex of degree one that fulfils the role of the vertex to be removed.
---
[](https://gitpod.io/from-referrer/)
|
large-import
new-contributor
t-combinatorics
|
33/2 |
Mathlib/Combinatorics/SimpleGraph/Acyclic.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/Connected.lean |
2 |
6 |
['LLaurance', 'eric-wieser', 'github-actions'] |
nobody |
6-36151 6 days ago |
8-14012 8 days ago |
8-22150 8 days |
23986 |
ShouxinZhang author:ShouxinZhang |
feat(FieldTheory/RatFunc): add RatFunc.toFractionRingAlgEquiv |
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
12/2 |
Mathlib/FieldTheory/RatFunc/Basic.lean |
1 |
33 |
['ShouxinZhang', 'eric-wieser', 'github-actions', 'joneugster', 'kckennylau', 'mathlib4-merge-conflict-bot', 'plp127'] |
kim-em assignee:kim-em |
6-35051 6 days ago |
6-35058 6 days ago |
129-78799 129 days |
28416 |
Timeroot author:Timeroot |
feat(Topology/Order): Add OrderIso.instContinuousMapClass |
saying that
```
instance
{α : Type u_1} {β : Type u_2} [Preorder α] [Preorder β]
[TopologicalSpace α] [TopologicalSpace β] [OrderTopology α] [OrderTopology β]
: ContinuousMapClass (α ≃o β) α β where
map_continuous := OrderIso.continuous
```
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
3/0 |
Mathlib/Topology/Order/MonotoneContinuity.lean |
1 |
1 |
['github-actions'] |
nobody |
6-33456 6 days ago |
6-33456 6 days ago |
6-33532 6 days |
28419 |
euprunin author:euprunin |
chore(Data/Matroid/Rank): deprecate `Indep.exists_insert_of_encard_lt` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/8 |
Mathlib/Data/Matroid/Rank/ENat.lean |
1 |
1 |
['github-actions'] |
nobody |
6-30732 6 days ago |
6-30732 6 days ago |
6-30785 6 days |
26403 |
riccardobrasca author:riccardobrasca |
feat: add `isPrincipalIdealRing_of_isPrincipal_of_lt_or_isPrincipal_of_mem_primesOver_of_mem_Icc` |
This PR continues the work from #25186.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25186 |
maintainer-merge
t-number-theory
|
49/13 |
Mathlib/NumberTheory/NumberField/ClassNumber.lean |
1 |
8 |
['faenuccio', 'github-actions', 'grunweg', 'loefflerd', 'riccardobrasca', 'xroblot'] |
faenuccio and jcommelin assignee:jcommelin assignee:faenuccio |
6-30546 6 days ago |
6-30546 6 days ago |
56-45221 56 days |
28420 |
euprunin author:euprunin |
chore(Data/Nat/Digits): deprecate `coe_int_ofDigits` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/6 |
Mathlib/Data/Nat/Digits/Defs.lean,Mathlib/Data/Nat/Digits/Lemmas.lean |
2 |
1 |
['github-actions'] |
nobody |
6-30199 6 days ago |
6-30205 6 days ago |
6-30251 6 days |
28421 |
euprunin author:euprunin |
chore(Probability/Kernel): golf entire `measurable_condExpKernel` |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
1/6 |
Mathlib/Probability/Kernel/Condexp.lean |
1 |
1 |
['github-actions'] |
nobody |
6-30085 6 days ago |
6-30099 6 days ago |
6-30145 6 days |
28422 |
euprunin author:euprunin |
chore(Data/Fin): deprecate `Fin.mul_one'` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
3/8 |
Mathlib/Data/Fin/Basic.lean,Mathlib/Data/ZMod/Defs.lean |
2 |
2 |
['eric-wieser', 'github-actions'] |
nobody |
6-28527 6 days ago |
6-29736 6 days ago |
6-29787 6 days |
28426 |
euprunin author:euprunin |
chore(NumberTheory/NumberField/CanonicalEmbedding): golf entire `measurableSet_interior_paramSet` |
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
1/6 |
Mathlib/NumberTheory/NumberField/CanonicalEmbedding/NormLeOne.lean |
1 |
1 |
['github-actions'] |
nobody |
6-27375 6 days ago |
6-27375 6 days ago |
6-27429 6 days |
28427 |
euprunin author:euprunin |
chore(LinearAlgebra/Matrix/Charpoly): deprecate `det_of_card_zero` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
3/7 |
Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean |
1 |
1 |
['github-actions'] |
nobody |
6-27373 6 days ago |
6-27378 6 days ago |
6-27423 6 days |
28428 |
euprunin author:euprunin |
chore(Topology): deprecate `mem_iff_one_sub_mem` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
|
3/5 |
Mathlib/Analysis/Normed/Unbundled/SmoothingSeminorm.lean,Mathlib/Topology/UnitInterval.lean |
2 |
1 |
['github-actions'] |
nobody |
6-27116 6 days ago |
6-27186 6 days ago |
6-27169 6 days |
28429 |
euprunin author:euprunin |
chore(GroupTheory/Perm/Cycle): golf entire `Disjoint.cycleType_mul` |
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
1/6 |
Mathlib/GroupTheory/Perm/Cycle/Type.lean |
1 |
1 |
['github-actions'] |
nobody |
6-26884 6 days ago |
6-26901 6 days ago |
6-26948 6 days |
28393 |
tristan-f-r author:tristan-f-r |
chore(WithZero): clean |
We replace `erw` this with defeq abuse (which seems to be accepted as okay inside proofs), and clean up the rest of the file.
I might start trying to remove `erw`s in Mathlib.
---
[](https://gitpod.io/from-referrer/)
|
t-data
easy
|
14/16 |
Mathlib/Data/Int/WithZero.lean |
1 |
7 |
['Ruben-VandeVelde', 'github-actions', 'tristan-f-r'] |
nobody |
6-26765 6 days ago |
6-72131 6 days ago |
6-75056 6 days |
26534 |
winstonyin author:winstonyin |
feat: IsIntegralCurve for solutions to ODEs |
I define `IsIntegralCurve` etc. for solutions to ODEs on vector spaces. The translation and scaling lemmas are also included. This parallels `IsMIntegralCurve` etc. for manifolds.
Question for reviewers: how should I state the deprecation notice?
- [ ] depends on: #26563
---
[](https://gitpod.io/from-referrer/)
|
t-dynamics
t-analysis
t-differential-geometry
|
0/0 |
|
0 |
7 |
['github-actions', 'grunweg', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'winstonyin'] |
nobody |
6-26540 6 days ago |
6-26561 6 days ago |
6-27338 6 days |
28430 |
euprunin author:euprunin |
chore(RingTheory/UniqueFactorizationDomain): deprecate `dvd_of_mem_normalizedFactors` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
|
37/40 |
Mathlib/NumberTheory/NumberField/ClassNumber.lean,Mathlib/NumberTheory/RamificationInertia/Basic.lean,Mathlib/RingTheory/ChainOfDivisors.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean,Mathlib/RingTheory/Radical.lean,Mathlib/RingTheory/UniqueFactorizationDomain/NormalizedFactors.lean |
6 |
1 |
['github-actions'] |
nobody |
6-26450 6 days ago |
6-26526 6 days ago |
6-26509 6 days |
28432 |
euprunin author:euprunin |
chore(CategoryTheory/Monoidal): golf entire `counitInv_app_comp_functor_map_η_inverse` |
---
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
2/5 |
Mathlib/CategoryTheory/Monoidal/Functor.lean |
1 |
1 |
['github-actions'] |
nobody |
6-25821 6 days ago |
6-25828 6 days ago |
6-25877 6 days |
28433 |
euprunin author:euprunin |
chore(Probability/Kernel): golf entire `snd_compProd_prodMkLeft` |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
1/5 |
Mathlib/Probability/Kernel/Composition/Prod.lean |
1 |
1 |
['github-actions'] |
nobody |
6-25680 6 days ago |
6-25717 6 days ago |
6-25763 6 days |
28434 |
euprunin author:euprunin |
chore(FieldTheory/IntermediateField/Adjoin): golf entire `adjoin.range_algebraMap_subset` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
2/5 |
Mathlib/FieldTheory/IntermediateField/Adjoin/Defs.lean |
1 |
1 |
['github-actions'] |
nobody |
6-25575 6 days ago |
6-25584 6 days ago |
6-25632 6 days |
28435 |
euprunin author:euprunin |
chore(RingTheory/Valuation): golf entire `algebraMap_injective` |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
2/5 |
Mathlib/RingTheory/Valuation/Extension.lean |
1 |
1 |
['github-actions'] |
nobody |
6-25435 6 days ago |
6-25449 6 days ago |
6-25494 6 days |
28437 |
euprunin author:euprunin |
chore(Data/Finset): deprecate `exists_ne_of_one_lt_card` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
|
7/11 |
Mathlib/Algebra/Group/UniqueProds/Basic.lean,Mathlib/Data/Finset/Card.lean,Mathlib/Data/Set/Card.lean,Mathlib/GroupTheory/Perm/Cycle/Type.lean,Mathlib/LinearAlgebra/Matrix/SemiringInverse.lean |
5 |
1 |
['github-actions'] |
nobody |
6-23788 6 days ago |
6-23856 6 days ago |
6-23839 6 days |
28439 |
euprunin author:euprunin |
chore(LinearAlgebra/Matrix/Determinant): golf entire `det_eq_zero_of_not_linearIndependent_rows` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/5 |
Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
6-23522 6 days ago |
6-23529 6 days ago |
6-23576 6 days |
28445 |
mitchell-horner author:mitchell-horner |
feat: `one_sub_one_div_cast_*` theorems |
---
Needed for a proof of the Erdős-Stone-Simonovits theorem in future PR.
[](https://gitpod.io/from-referrer/)
|
t-data |
18/0 |
Mathlib/Data/Nat/Cast/Order/Field.lean |
1 |
1 |
['github-actions'] |
nobody |
6-17636 6 days ago |
6-17644 6 days ago |
6-17690 6 days |
25831 |
ScottCarnahan author:ScottCarnahan |
feat (RingTheory/HahnSeries): Powers of a binomial |
This PR introduces powers of a binomial `single g 1 - single g' 1` in a Hahn series, where the powers take values in a binomial ring. These series behave as one would expect with respect to addition of powers, and comparison with natural number powers. They are often used in the theory of vertex algebras.
---
- [x] depends on: #25830
- [x] depends on: #27497
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #24102.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/24102* |
t-ring-theory |
111/0 |
Mathlib.lean,Mathlib/RingTheory/HahnSeries/Binomial.lean,Mathlib/RingTheory/HahnSeries/HEval.lean,Mathlib/RingTheory/HahnSeries/Multiplication.lean |
4 |
5 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
6-15754 6 days ago |
6-15953 6 days ago |
6-17416 6 days |
28386 |
euprunin author:euprunin |
chore(Analysis/InnerProductSpace/Projection): golf entire `orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/3 |
Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean |
1 |
2 |
['JonBannon', 'github-actions'] |
nobody |
6-10157 6 days ago |
6-78930 6 days ago |
6-78980 6 days |
28441 |
euprunin author:euprunin |
chore(GroupTheory/Perm): golf entire `mem_of_formPerm_ne_self` |
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
2/5 |
Mathlib/GroupTheory/Perm/List.lean |
1 |
1 |
['JonBannon', 'github-actions'] |
nobody |
6-10016 6 days ago |
6-20942 6 days ago |
6-20991 6 days |
25491 |
tannerduve author:tannerduve |
feat(Control/Monad/Free): define free monad, prove it lawful, and implement standard effects |
This PR introduces the `Free` monad. This implementation uses the "freer monad" approach as the traditional free monad (eg from [Haskell](https://hackage.haskell.org/package/free-5.2/docs/Control-Monad-Free.html)) is not safely definable in Lean due to termination checking (it's not strictly positive).
The main contributions are:
* Definition of the `Free` monad as an inductive type which generates a monad given any type constructor `F : Type -> Type`.
* Functor and Monad instances for `Free F`, along with proofs of the `LawfulFunctor` and `LawfulMonad` laws.
* Canonical instances of `Free` with standard effect signatures:
* `FreeState s` for stateful computations, defined via a `StateF s` functor with `get` and `put` operations.
* `FreeWriter w` for logging computations, defined via a `WriterF w` functor with a `tell` operation.
* `FreeCont r` for continuation-passing computations, using the CPS functor `(α → r) → r`.
In this construction, computations are represented as **trees of effects**. Each node (`liftBind`)
represents a request to perform an effect, accompanied by a continuation specifying how the
computation proceeds after the effect. The leaves (`pure`) represent completed computations with
final results.
A key insight is that `FreeM F` satisfies the **universal property of free monads**: for any monad
`M` and effect handler `f : F → M`, there exists a unique way to interpret `FreeM F` computations
in `M` that respects the effect semantics given by `f`. This unique interpreter is `liftM f`, which
acts as the canonical **fold** for free monads.
To execute or interpret these computations, we provide two approaches:
1. **Hand-written interpreters** (`FreeState.run`, `FreeWriter.run`, `FreeCont.run`) that directly
pattern-match on the tree structure
2. **Canonical interpreters** (`FreeState.toStateM`, `FreeWriter.toWriteT`, `FreeCont.toContT`) derived from
the universal property via `liftM`
And then prove that these approaches are equivalent
---
This PR adds new files and definitions; no breaking changes.
**Tags:** free monad, freer monad, effect systems, state monad, writer monad, continuation monad, operational semantics, verified interpreters
|
t-data
maintainer-merge
|
696/0 |
Mathlib.lean,Mathlib/Control/Monad/Free.lean,Mathlib/Control/Monad/Free/Effects.lean,MathlibTest/freemonad.lean,docs/references.bib |
5 |
147 |
['YaelDillies', 'copilot-pull-request-reviewer', 'eric-wieser', 'github-actions', 'plp127', 'quangvdao', 'srghma', 'tannerduve'] |
ericrbg assignee:ericrbg |
6-6493 6 days ago |
64-42296 2 months ago |
74-61378 74 days |
27516 |
gaetanserre author:gaetanserre |
feat: add rational approximation lemma for suprema in `unitInterval` |
Add `sSup_eq_iUnion_rat` lemma that provides a rational approximation characterization of suprema in the unit interval. For monotone functions `f : α → I → ℝ`, the lemma establishes that the set of pairs where `a < sSup {x | f e.1 x < e.2}` equals the union over all rationals `q ∈ I` with `q > a` of the sets `{e | f e.1 q < e.2}`.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
21/0 |
Mathlib/Topology/UnitInterval.lean |
1 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
ocfnash assignee:ocfnash |
6-6485 6 days ago |
15-27875 15 days ago |
25-23248 25 days |
27817 |
zhuyizheng author:zhuyizheng |
feat: add IMO2025P1 |
Add a solution to IMO2025P1, the original problem statement from https://github.com/jsm28/IMOLean
---
[](https://gitpod.io/from-referrer/)
|
IMO
new-contributor
|
1443/0 |
Archive.lean,Archive/Imo/Imo2025Q1.lean |
2 |
1 |
['github-actions'] |
dwrensha assignee:dwrensha |
6-6482 6 days ago |
19-51859 19 days ago |
19-51907 19 days |
27849 |
robin-carlier author:robin-carlier |
feat(CategoryTheory/Bicategory/Functor): strictly unitary lax/pseudo functors |
We define strictly unitary lax/pseudo functors between bicategories. A lax (resp. pseudo-)functor from `C` to `D` is strictly unitary if `F.map(𝟙 X) = 𝟙 (F.obj X)` and if the 2-cell `mapId` is the identity 2-cell induced by this equality. We provide a constructor for those that do not require the `mapId` field.
Although this structure is somewhat "evil" from a purely categorical perspective (it mentions non-definitonal equality of objects in a 1-category), these class of functors are of interest: strictly unitary lax functors are part of the definition of the Duskin nerve of a bicategory (which embeds bicategories in the theory of simplicial sets), while strictly unitary pseudofunctors are part of the definition of the 2-nerve of a bicategory, which embeds bicategories into the theory of simplicial categories.
This PR is part of an ongoing work that will hopefully culminate with the construction of the Duskin Nerve, as well as a proof of the fact that the Duskin nerve of a locally groupoidal bicategory is a quasicategory.
---
Two designs were possible here: making `StrictlyUnitary` a class on lax/pseudo-functors to state that some functors/constructions are strictly unitary, or bundling it as a structure on its own.
Since my plan for the follow-up PRs is to use the type of strictly lax unitary functors between some bicategories (e.g to define lax-composable arrows in a bicategory `C`, which will be by definition `StrictlyUnitaryLaxFunctor (LocallyDiscrete (Fin n)) C`), I chose to bundle them directly, to avoid an extra layer when working with the type of those objects.
I did include strict associativity for strictly unitary lax functors but not for pseudofunctors. The reason is that the Duskin nerve mentions the 1-category of bicategories and strictly unitary lax functors (hence, this strict associativity/unitality), but the 2-nerve mentions the bicategory of bicategories, strictly unitary pseudofunctors and "icons" (identity-component oplax natural transformations): the statement for associativity for pseudofunctors will wait for icons, and will probably not be stated as an equality of pseudofunctors.
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
318/0 |
Mathlib.lean,Mathlib/CategoryTheory/Bicategory/Functor/StrictlyUnitary.lean |
2 |
1 |
['github-actions'] |
adamtopaz assignee:adamtopaz |
6-6480 6 days ago |
19-23519 19 days ago |
19-23572 19 days |
27946 |
plp127 author:plp127 |
refactor: have `MetrizableSpace` not depend on `MetricSpace` |
Some theorems for uniform spaces with a countably generated uniformity do not mention their uniformity in any of the hypotheses or the conclusion (for example `UniformSpace.isCompact_iff_isSeqCompact`). This PR allows those theorems to be stated for (pseudo)metrizable spaces without importing the real numbers.
See also #2032
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
129/102 |
Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Topology/Compactness/PseudometrizableLindelof.lean,Mathlib/Topology/GDelta/MetrizableSpace.lean,Mathlib/Topology/Metrizable/Basic.lean,Mathlib/Topology/Metrizable/ContinuousMap.lean,Mathlib/Topology/Metrizable/Real.lean,Mathlib/Topology/Metrizable/Uniformity.lean |
7 |
7 |
['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot'] |
urkud assignee:urkud |
6-6479 6 days ago |
15-61164 15 days ago |
16-26645 16 days |
28452 |
plp127 author:plp127 |
feat: Define `ZMod.fintype` without cases |
Define `ZMod.fintype` without casing on `n` except inside the proof.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
2/3 |
Mathlib/Data/ZMod/Defs.lean |
1 |
1 |
['github-actions'] |
nobody |
6-1527 6 days ago |
6-1547 6 days ago |
6-1593 6 days |
27163 |
pechersky author:pechersky |
feat(Topology/ValuativeRel): of and to basis of compatible valuations |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
t-topology
t-number-theory
label:t-algebra$ |
205/25 |
Mathlib/RingTheory/Valuation/ValuativeRel.lean,Mathlib/Topology/Algebra/Valued/ValuativeRel.lean |
2 |
26 |
['github-actions', 'kckennylau', 'mathlib4-merge-conflict-bot', 'pechersky'] |
nobody |
5-83909 5 days ago |
7-39468 7 days ago |
36-19788 36 days |
28458 |
pechersky author:pechersky |
feat(RingTheory/RootsOfUnity): trivial root of unity: `HasEnoughRootsOfUnity M 1` |
On the way to (p - 1)-roots of unity of Z_p.
This deals with the p = 2 case.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
t-algebra
easy
label:t-algebra$ |
6/0 |
Mathlib/RingTheory/RootsOfUnity/Basic.lean,Mathlib/RingTheory/RootsOfUnity/EnoughRootsOfUnity.lean |
2 |
1 |
['github-actions'] |
nobody |
5-73146 5 days ago |
5-73160 5 days ago |
5-73208 5 days |
27283 |
Louddy author:Louddy |
feat(SkewMonoidAlgebra): maps on/to SkewMonoidAlgebra |
Add the definition of many maps regarding skew monoid algebras and lemmas associated to them. These all have their analogues for `MonoidAlgebra`.
Co-authored-by: María Inés de Frutos Fernández <[mariaines.dff@gmail.com](mailto:mariaines.dff@gmail.com)>
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
label:t-algebra$ |
237/0 |
Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean |
1 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
riccardobrasca assignee:riccardobrasca |
5-66873 5 days ago |
5-66895 5 days ago |
32-37062 32 days |
28457 |
euprunin author:euprunin |
chore(LinearAlgebra/AffineSpace): deprecate `coe_injective` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-algebra
label:t-algebra$ |
2/5 |
Mathlib/LinearAlgebra/AffineSpace/ContinuousAffineEquiv.lean |
1 |
2 |
['Ruben-VandeVelde', 'github-actions'] |
nobody |
5-66541 5 days ago |
5-66541 5 days ago |
5-73730 5 days |
27464 |
IvanRenison author:IvanRenison |
feat(Combinatorics/SimpleGraph/Paths): add lemma `SimpleGraph.Walk.IsPath.ne_of_mem_support_of_append` |
This contribution was created as part of the Utrecht Summerschool "Formalizing Mathematics in Lean" in July 2025.
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
22/0 |
Mathlib/Combinatorics/SimpleGraph/Paths.lean |
1 |
4 |
['IvanRenison', 'b-mehta', 'github-actions', 'mathlib4-merge-conflict-bot'] |
b-mehta assignee:b-mehta |
5-66380 5 days ago |
5-66401 5 days ago |
25-13782 25 days |
27461 |
IvanRenison author:IvanRenison |
feat(Combinatorics/SimpleGraph/Paths): add lemma `SimpleGraph.Walk.IsPath.mem_support_iff_exists_append` |
This contribution was created as part of the Utrecht Summerschool "Formalizing Mathematics in Lean" in July 2025.
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
14/0 |
Mathlib/Combinatorics/SimpleGraph/Paths.lean |
1 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
awainverse assignee:awainverse |
5-66173 5 days ago |
5-66190 5 days ago |
26-41553 26 days |
27253 |
Louddy author:Louddy |
feat(SkewMonoidAlgebra): SkewMonoidAlgebra/Support |
Add lemmas regarding the support of a skew monoid algebra.
It is currently missing a few (Edit: 1!) lemmas compared to `MonoidAlgebra.support`. (See TODO.)
These will be added as more results are available on `SkewMonoidAlgebra`.
Co-authored-by: María Inés de Frutos Fernández <[mariaines.dff@gmail.com](mailto:mariaines.dff@gmail.com)>
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
128/0 |
Mathlib.lean,Mathlib/Algebra/SkewMonoidAlgebra/Support.lean |
2 |
2 |
['Louddy', 'github-actions'] |
riccardobrasca assignee:riccardobrasca |
5-60130 5 days ago |
33-45766 1 month ago |
33-45779 33 days |
28464 |
robin-carlier author:robin-carlier |
chore(CategoryTheory/Bicategory/Basic): extra `hom_inv_id` and `inv_hom_id` lemmas |
Add lemmas of the form `f ◁ g ◁ η.inv ≫ f ◁ g ◁ η.hom = 𝟙 _`. These lemmas are easy but `simp` automation keeps failing to see them in practice.
---
It is somewhat annoying that these have to be added by hand. `grind`-based automation will be better at this by
tagging `[grind _=_] whiskerLeft_comp`, but in cases where we need to fall back to `simp`-based automation
these should still be useful and shave off some `simp only [← whiskerLeft_comp, …]` in some proofs.
Hopefully we won’t need to write the same lemmas for extra applications of whiskerings!
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
30/0 |
Mathlib/CategoryTheory/Bicategory/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
5-59183 5 days ago |
5-59250 5 days ago |
5-59298 5 days |
28467 |
gasparattila author:gasparattila |
chore: make `AffineSubspace.toAddTorsor` and `AffineSubspace.nonempty_map` instances |
The loops with the `Nonempty` instances are no longer an issue in Lean 4.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor |
3/35 |
Mathlib/Analysis/Convex/Intrinsic.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Geometry/Euclidean/Circumcenter.lean,Mathlib/Geometry/Euclidean/Projection.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Basic.lean,Mathlib/LinearAlgebra/AffineSpace/Restrict.lean,Mathlib/LinearAlgebra/AffineSpace/Simplex/Basic.lean,Mathlib/Topology/Algebra/AffineSubspace.lean |
8 |
1 |
['github-actions'] |
nobody |
5-48805 5 days ago |
5-50480 5 days ago |
5-50472 5 days |
28470 |
EtienneC30 author:EtienneC30 |
feat: ofLp and toLp are continuously differentiable |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
24/1 |
Mathlib/Analysis/Calculus/ContDiff/WithLp.lean |
1 |
1 |
['github-actions'] |
nobody |
5-47333 5 days ago |
5-47413 5 days ago |
5-47398 5 days |
28471 |
EtienneC30 author:EtienneC30 |
feat: toLp and ofLp are injective |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
6/0 |
Mathlib/Analysis/Normed/Lp/WithLp.lean |
1 |
1 |
['github-actions'] |
nobody |
5-47311 5 days ago |
5-47395 5 days ago |
5-47381 5 days |
28473 |
EtienneC30 author:EtienneC30 |
feat: toLp and ofLp are analytic |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
42/0 |
Mathlib.lean,Mathlib/Analysis/Analytic/WithLp.lean |
2 |
1 |
['github-actions'] |
nobody |
5-46992 5 days ago |
5-47083 5 days ago |
5-47068 5 days |
26075 |
xroblot author:xroblot |
feat(NumberField/Units): compute index of unit subgroups using regulators |
- [x] depends on: #25730 |
t-number-theory |
81/3 |
Mathlib/GroupTheory/Index.lean,Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean,Mathlib/NumberTheory/NumberField/Units/Regulator.lean |
3 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'xroblot'] |
nobody |
5-41465 5 days ago |
5-41484 5 days ago |
5-44881 5 days |
28474 |
astrainfinita author:astrainfinita |
feat: add `ContinuousSMul` instances for `ℚ≥0` |
---
[](https://gitpod.io/from-referrer/)
|
bench-after-CI
t-algebra
t-topology
label:t-algebra$ |
14/0 |
Mathlib/Topology/Instances/Rat.lean |
1 |
8 |
['astrainfinita', 'github-actions', 'themathqueen'] |
nobody |
5-40208 5 days ago |
5-40208 5 days ago |
5-47011 5 days |
26588 |
faenuccio author:faenuccio |
feat(Algebra/GroupWithZero/WithZero): add the multiplicative embedding with zero from the range |
We extend the embedding of the range of a `MonoidWithZeroHom` to the codomain by enriching it with the strucutre of an ordered, multiplicative embedding. In passing, we extend some results about the embedding of `WithZero` of the units of a group with zero, to the group itself.
Co-authored by: María Inés de Frutos Fernández @mariainesdff
---
[](https://gitpod.io/from-referrer/)
|
t-order
t-algebra
label:t-algebra$ |
145/10 |
Mathlib.lean,Mathlib/Algebra/GroupWithZero/Range.lean,Mathlib/Algebra/GroupWithZero/WithZero.lean,Mathlib/Algebra/Order/GroupWithZero/Range.lean,Mathlib/Algebra/Order/GroupWithZero/WithZero.lean,Mathlib/Algebra/Order/Monoid/WithTop.lean |
6 |
27 |
['faenuccio', 'github-actions', 'leanprover-community-bot-assistant', 'pechersky'] |
nobody |
5-39523 5 days ago |
7-46910 7 days ago |
12-66997 12 days |
28487 |
euprunin author:euprunin |
chore(RingTheory): golf entire `smul_eq_zero_of_mem`, `hasEval`, `eq_of_prod_eq_prod` and `isIntegral_of_mem_ringOfIntegers` |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
7/16 |
Mathlib/RingTheory/Extension/Basic.lean,Mathlib/RingTheory/PowerSeries/Substitution.lean,Mathlib/RingTheory/UniqueFactorizationDomain/FactorSet.lean,Mathlib/RingTheory/Valuation/AlgebraInstances.lean |
4 |
1 |
['github-actions'] |
nobody |
5-37476 5 days ago |
5-37488 5 days ago |
5-37535 5 days |
28488 |
euprunin author:euprunin |
chore(SetTheory): golf entire `cast_succ`, `mk_multiset_of_countable` and `iSup_succ` |
---
[](https://gitpod.io/from-referrer/)
|
t-set-theory |
6/11 |
Mathlib/SetTheory/Cardinal/Basic.lean,Mathlib/SetTheory/Cardinal/Finsupp.lean,Mathlib/SetTheory/Ordinal/Family.lean |
3 |
1 |
['github-actions'] |
nobody |
5-37464 5 days ago |
5-37474 5 days ago |
5-37520 5 days |
28489 |
joelriou author:joelriou |
feat(CategoryTheory): weaken assumptions for the stability of the left lifting property under transfinite compositions |
This PR introduces two predicates `HasLiftingPropertyFixedBot/Top` which assert the existence of a lifting in squares when the left/right/top (resp. left/right/bottom) morphisms are fixed. (This weakens the `HasLiftingProperty` class which assumes there is a lifting when we only fix the left and right morphisms.)
The `HasLiftingPropertyFixedTop` variant shall be used in the study of the homotopy theory of Kan complexes. Hopefully, the `HasLiftingPropertyFixedBot` variant will be used in the formalization of the model category structure on simplicial sets: this is the reason why this PR also weakens the assumptions in the proof that the left lifting property with respect to certain morphisms is stable under transfinite composition.
---
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
28/2 |
Mathlib/CategoryTheory/LiftingProperties/Basic.lean,Mathlib/CategoryTheory/SmallObject/TransfiniteCompositionLifting.lean |
2 |
1 |
['github-actions'] |
nobody |
5-34632 5 days ago |
5-34632 5 days ago |
5-34617 5 days |
23497 |
chrisflav author:chrisflav |
chore(RingTheory/AdicCompletion/AsTensorProduct): golf using five lemma for modules |
---
- [x] depends on: #23496
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
30/81 |
Mathlib/RingTheory/AdicCompletion/AsTensorProduct.lean |
1 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
nobody |
5-33917 5 days ago |
5-33939 5 days ago |
79-10540 79 days |
28490 |
euprunin author:euprunin |
chore: golf entire `epi_of_cokernel_π_eq_zero`, `bottom_row_coprime`, `congr_of_eventuallyEq` and `Invertible.congr` |
---
[](https://gitpod.io/from-referrer/)
|
|
8/12 |
Mathlib/Algebra/Group/Invertible/Defs.lean,Mathlib/CategoryTheory/Abelian/Basic.lean,Mathlib/NumberTheory/Modular.lean,Mathlib/Topology/ContinuousOn.lean |
4 |
1 |
['github-actions'] |
nobody |
5-32874 5 days ago |
5-32951 5 days ago |
5-32935 5 days |
28491 |
euprunin author:euprunin |
chore(MeasureTheory/Measure): deprecate `injective_diracProba_of_T0` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
2/8 |
Mathlib/MeasureTheory/Measure/DiracProba.lean |
1 |
1 |
['github-actions'] |
nobody |
5-32348 5 days ago |
5-32354 5 days ago |
5-32401 5 days |
28484 |
euprunin author:euprunin |
chore(Data): golf entire `add_one_le_exp_of_nonneg`, `toReal_eq_toReal`, `count_eq_of_nodup`, `smul_mat_cons` and `coe_inj` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
8/13 |
Mathlib/Data/ENNReal/Real.lean,Mathlib/Data/List/Nodup.lean,Mathlib/Data/Matrix/Notation.lean,Mathlib/Data/Matroid/Minor/Restrict.lean |
4 |
1 |
['github-actions'] |
nobody |
5-32179 5 days ago |
5-39980 5 days ago |
5-40028 5 days |
28486 |
euprunin author:euprunin |
chore(Order): golf entire `map_covBy`, `covBy_of_apply`, `map_wcovBy`, `wcovBy_of_apply`, `ne_bot_of_ne_top'`, `insert_Icc_left_eq_Icc_pred` and `insert_Icc_right_eq_Icc_succ` |
---
[](https://gitpod.io/from-referrer/)
|
t-order |
14/24 |
Mathlib/Order/Cover.lean,Mathlib/Order/Disjoint.lean,Mathlib/Order/Interval/Set/SuccPred.lean |
3 |
1 |
['github-actions'] |
nobody |
5-31165 5 days ago |
5-38927 5 days ago |
5-39126 5 days |
28492 |
euprunin author:euprunin |
chore(Data/Finite): golf entire `card_le_of_injective`, `card_le_of_surjective` and `card_sum` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
6/13 |
Mathlib/Data/Finite/Card.lean |
1 |
1 |
['github-actions'] |
nobody |
5-30057 5 days ago |
5-30070 5 days ago |
5-30114 5 days |
26489 |
chrisflav author:chrisflav |
refactor(RingTheory/RingHom): factor out proofs for `Algebra.FinitePresentation` |
The current way to use locality of a given property of algebras is to convert everything into the language of `RingHom`s and then for example the `RingHom.OfLocalizationSpanTarget` API. This has two disadvantages:
1. The ring hom property API fixes the universes of source and target to be the same, hence we unnecessarily lose out on some universe generality.
2. The results for `RingHom`s are proven by translating everything in terms of `Algebra`, so we duplicate the translation steps.
This PR refactors `RingHom.FinitePresentation` to do all locality proofs in the language of `Algebra`s and translate it into the corresponding `RingHom.OfLocalizationSpan{Target}` in the last step. We also streamline some of the translation proofs by unifying the API.
---
- [x] depends on: #22931
[](https://gitpod.io/from-referrer/)
This PR continues the work from #22930.
Original PR: https://github.com/leanprover-community/mathlib4/pull/22930 |
t-algebra label:t-algebra$ |
60/76 |
Mathlib/RingTheory/RingHom/FinitePresentation.lean |
1 |
5 |
['chrisflav', 'erdOne', 'github-actions', 'mathlib4-dependent-issues-bot'] |
kim-em assignee:kim-em |
5-26180 5 days ago |
53-47263 1 month ago |
53-47310 53 days |
24794 |
chrisflav author:chrisflav |
feat(RingTheory/Presentation): core of a presentation |
If `P` is a presentation of `S` as an `R`-algebra and `R₀` a subring of `R` containing the coefficients of the relations of `P`, then there exists an `R₀`-algebra `S₀` such that `S` is isomorphic to the base change of `S₀` to `R`.
This is a tool to remove Noetherian hypothesis in certain situations.
---
- [x] depends on: #24788
- [x] depends on: #24786
- [x] depends on: #24785
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
266/3 |
Mathlib.lean,Mathlib/Algebra/Algebra/Subalgebra/Basic.lean,Mathlib/Algebra/Algebra/Subalgebra/Tower.lean,Mathlib/Algebra/Algebra/Tower.lean,Mathlib/RingTheory/AlgebraicIndependent/Transcendental.lean,Mathlib/RingTheory/Extension/Presentation/Core.lean,Mathlib/RingTheory/FiniteType.lean,Mathlib/RingTheory/Ideal/Quotient/Basic.lean,Mathlib/RingTheory/TensorProduct/MvPolynomial.lean |
9 |
12 |
['chrisflav', 'erdOne', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
Vierkantor assignee:Vierkantor |
5-24228 5 days ago |
15-61737 15 days ago |
72-67297 72 days |
28493 |
gasparattila author:gasparattila |
feat: topological affine spaces |
This PR adds a typeclass `IsTopologicalAddTorsor` for topological affine spaces and generalizes several results which currently assume `NormedAddTorsor`.
---
[](https://gitpod.io/from-referrer/)
|
large-import
new-contributor
|
386/289 |
Mathlib/Algebra/AddTorsor/Basic.lean,Mathlib/Analysis/Calculus/AddTorsor/AffineMap.lean,Mathlib/Analysis/Complex/AbsMax.lean,Mathlib/Analysis/Normed/Affine/AddTorsor.lean,Mathlib/Analysis/Normed/Affine/ContinuousAffineMap.lean,Mathlib/Analysis/Normed/Affine/Convex.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Analysis/Normed/Group/AddTorsor.lean,Mathlib/Analysis/Normed/Module/FiniteDimension.lean,Mathlib/Analysis/Normed/Operator/Banach.lean,Mathlib/Analysis/RCLike/Lemmas.lean,Mathlib/Geometry/Euclidean/Projection.lean,Mathlib/Geometry/Euclidean/Triangle.lean,Mathlib/Topology/Algebra/Affine.lean,Mathlib/Topology/Algebra/ContinuousAffineMap.lean,Mathlib/Topology/Algebra/Group/Pointwise.lean |
16 |
1 |
['github-actions'] |
nobody |
5-23944 5 days ago |
5-26644 5 days ago |
5-26692 5 days |
28501 |
dtumad author:dtumad |
feat(Data/Set): show the `Alternative` instance on `Set` is lawful |
This PR adds a `LawfulAlternative` instance for `Set`, and also exposes the lawful instances for `SetM`.
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
25/0 |
Mathlib/Data/Set/Functor.lean |
1 |
1 |
['github-actions'] |
nobody |
5-12986 5 days ago |
5-12986 5 days ago |
5-13038 5 days |
25776 |
Parcly-Taxel author:Parcly-Taxel |
chore: deprime `induction` in `Analysis` |
I think this is very marginally dependent on #25770. |
tech debt
t-analysis
|
256/208 |
Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/Constructions.lean,Mathlib/Analysis/Analytic/Inverse.lean,Mathlib/Analysis/BoxIntegral/Basic.lean,Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean,Mathlib/Analysis/BoxIntegral/Partition/Additive.lean,Mathlib/Analysis/BoxIntegral/Partition/Split.lean,Mathlib/Analysis/CStarAlgebra/Basic.lean,Mathlib/Analysis/CStarAlgebra/Multiplier.lean,Mathlib/Analysis/Calculus/ContDiff/Basic.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Calculus/ContDiff/FTaylorSeries.lean,Mathlib/Analysis/Calculus/ContDiff/Operations.lean,Mathlib/Analysis/Calculus/Deriv/ZPow.lean,Mathlib/Analysis/Calculus/InverseFunctionTheorem/ApproximatesLinearOn.lean,Mathlib/Analysis/Calculus/IteratedDeriv/Lemmas.lean,Mathlib/Analysis/Calculus/SmoothSeries.lean,Mathlib/Analysis/Convex/Combination.lean,Mathlib/Analysis/Convex/Radon.lean,Mathlib/Analysis/InnerProductSpace/Projection/FiniteDimensional.lean,Mathlib/Analysis/Normed/Algebra/Exponential.lean,Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean,Mathlib/Analysis/Seminorm.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean,Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Basic.lean,Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Analysis/SpecialFunctions/Pow/Real.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/EulerSineProd.lean |
35 |
4 |
['Parcly-Taxel', 'github-actions', 'leanprover-community-bot-assistant', 'madvorak', 'mathlib4-merge-conflict-bot'] |
grunweg assignee:grunweg |
5-6512 5 days ago |
12-37480 12 days ago |
67-49392 67 days |
26961 |
mariainesdff author:mariainesdff |
feat(RingTheory/PowerSeries/Substitution): add API |
Co-authored-by: @AntoineChambert-Loir
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
62/1 |
Mathlib/RingTheory/PowerSeries/Basic.lean,Mathlib/RingTheory/PowerSeries/Substitution.lean |
2 |
5 |
['Ruben-VandeVelde', 'github-actions', 'mariainesdff'] |
mattrobball assignee:mattrobball |
5-6512 5 days ago |
15-62100 15 days ago |
41-58095 41 days |
27117 |
pechersky author:pechersky |
feat(NumberTheory): `IsDiscreteValuationRing (v.adicCompletionIntegers K)` |
as well as the base ring that is not completed
the proofs are basically identical
which means there is some missing API
but this is the shortest route to
getting local fields ready
and showing that `K_v` is locally compact
---
[](https://gitpod.io/from-referrer/)
- [x] depends on: #27112
- [x] depends on: #27111
- [x] depends on: #27114
- [ ] depends on: #27116 |
t-algebra
t-analysis
t-number-theory
label:t-algebra$ |
48/0 |
Mathlib/NumberTheory/NumberField/FinitePlaces.lean |
1 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
jcommelin assignee:jcommelin |
5-6511 5 days ago |
12-34282 12 days ago |
12-37175 12 days |
27453 |
pechersky author:pechersky |
feat(Topology/UniformSpace/Ultra): completion is ultra uniformity iff base is |
Supersedes #24628
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
159/5 |
Mathlib.lean,Mathlib/Order/Filter/NAry.lean,Mathlib/Order/Filter/Prod.lean,Mathlib/Topology/Constructions/SumProd.lean,Mathlib/Topology/UniformSpace/Defs.lean,Mathlib/Topology/UniformSpace/Ultra/Basic.lean,Mathlib/Topology/UniformSpace/Ultra/Completion.lean |
7 |
1 |
['github-actions'] |
ocfnash assignee:ocfnash |
5-6510 5 days ago |
27-6704 27 days ago |
27-6699 27 days |
27720 |
peabrainiac author:peabrainiac |
feat(CategoryTheory/Adjunction): lemmas on adjoint quadruples |
Lemmas about adjoint quadruples `L ⊣ F ⊣ G ⊣ R` where some of the functors are fully faithful:
* If `F` and `R` are fully faithful, the components of the induced natural transformation `G ⟶ L`
are epic iff the components of the natural transformation `F ⟶ R` are monic.
* If `L` and `G` are fully faithful, the components of the induced natural transformation `L ⟶ G`
are epic iff the components of the natural transformation `R ⟶ F` are monic.
A variant of the first case appears as proposition 2.7 on the nlab [here](https://ncatlab.org/nlab/show/cohesive+topos); the second case is dual.
From [lean-orbifolds](https://github.com/peabrainiac/lean-orbifolds/blob/d599ff5f39aa831e8fa79b2f2fa7178b36bcbafd/Orbifolds/ForMathlib/Quadruple.lean).
---
Continued / revived from #24667. |
t-category-theory |
178/0 |
Mathlib.lean,Mathlib/CategoryTheory/Adjunction/Quadruple.lean,Mathlib/CategoryTheory/Adjunction/Triple.lean,Mathlib/CategoryTheory/Category/Basic.lean,Mathlib/CategoryTheory/EpiMono.lean |
5 |
2 |
['github-actions', 'peabrainiac'] |
robin-carlier assignee:robin-carlier |
5-6509 5 days ago |
20-70780 20 days ago |
20-71487 20 days |
27965 |
grunweg author:grunweg |
feat: verify that file names contain no forbidden characters |
Follow-up to #27588: Windows also forbids certain characters in file names.
I snuck in a change to also disallow `!` (which causes problems on Nix OS) and
`.` (i.e., #27944) --- that would have caught the error in #27796, and may indicate confusion of file and module names.
---
[](https://gitpod.io/from-referrer/)
|
file-removed
t-linter
maintainer-merge
|
72/42 |
Mathlib/Tactic/Linter/TextBased.lean,MathlibTest/ForbiddenModuleNames.lean,MathlibTest/ForbiddenWindows.lean,scripts/lint-style.lean |
4 |
11 |
['YaelDillies', 'adomani', 'github-actions', 'grunweg'] |
joneugster assignee:joneugster |
5-6508 5 days ago |
15-31803 15 days ago |
15-64085 15 days |
28091 |
ShreckYe author:ShreckYe |
feat(Algebra/Order/Floor): a variant of `Nat.ceil_lt_add_one` with its condition `0 ≤ a` generalized to `-1 < a` |
|
new-contributor
t-algebra
label:t-algebra$ |
15/0 |
Mathlib/Algebra/Order/Floor/Ring.lean |
1 |
3 |
['Ruben-VandeVelde', 'github-actions', 'themathqueen'] |
mattrobball assignee:mattrobball |
5-6506 5 days ago |
13-34201 13 days ago |
13-34246 13 days |
28102 |
eric-wieser author:eric-wieser |
feat: nontriviality of `SeparationQuotient` iff the topology is nontrivial |
This contains the mathematical content of [#Is there code for X? > Typeclass for nontrivial topology @ 💬](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Typeclass.20for.20nontrivial.20topology/near/533192558), without yet committing to any designated API to make it easier to use.
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
34/0 |
Mathlib/Topology/Inseparable.lean,Mathlib/Topology/Order.lean |
2 |
4 |
['eric-wieser', 'github-actions', 'plp127'] |
PatrickMassot assignee:PatrickMassot |
5-6505 5 days ago |
13-9937 13 days ago |
13-9929 13 days |
26358 |
plp127 author:plp127 |
feat(Topology): R1 spaces are quasisober |
This PR continues the work from #24054.
Original PR: https://github.com/leanprover-community/mathlib4/pull/24054 |
t-topology |
24/9 |
Mathlib/Topology/Separation/Hausdorff.lean,Mathlib/Topology/Sober.lean |
2 |
26 |
['faenuccio', 'github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot', 'plp127'] |
nobody |
5-5432 5 days ago |
5-8521 5 days ago |
46-78264 46 days |
28132 |
dupuisf author:dupuisf |
feat: preliminary `grind` tags for `IsUnit` |
This PR adds preliminary `grind` tags for the `IsUnit` predicate.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
61/17 |
Mathlib/Algebra/Group/Action/Units.lean,Mathlib/Algebra/Group/Units/Defs.lean,Mathlib/Algebra/GroupWithZero/Units/Basic.lean,Mathlib/Algebra/Ring/Units.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Order.lean,Mathlib/Analysis/SpecialFunctions/ContinuousFunctionalCalculus/Rpow/Basic.lean |
6 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
nobody |
5-2831 5 days ago |
5-2831 5 days ago |
5-2815 5 days |
28507 |
euprunin author:euprunin |
chore: remove debug output ("Unpacked in […] ms") from `lake exe cache get` output |
---
[](https://gitpod.io/from-referrer/)
|
|
0/2 |
Cache/IO.lean |
1 |
1 |
['github-actions'] |
nobody |
4-78821 4 days ago |
4-78894 4 days ago |
4-78878 4 days |
28034 |
joelriou author:joelriou |
feat(AlgebraicTopology): the type of simplices of a simplicial set |
This PR introduces the type of simplices of a simpliciai set `X`, as a structure containing the dimension `dim`, and a simplex in `X _⦋dim⦌`.
---
- [x] depends on: #27968
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
150/0 |
Mathlib.lean,Mathlib/AlgebraicTopology/SimplicialSet/Simplices.lean |
2 |
4 |
['github-actions', 'joelriou', 'mathlib4-dependent-issues-bot', 'robin-carlier'] |
robin-carlier assignee:robin-carlier |
4-72067 4 days ago |
4-72067 4 days ago |
5-35540 5 days |
28443 |
mitchell-horner author:mitchell-horner |
feat: `filter_disjiUnion` |
---
Needed for a proof of the Erdős-Stone-Simonovits theorem in future PR.
[](https://gitpod.io/from-referrer/)
|
t-data |
8/0 |
Mathlib/Data/Finset/Union.lean |
1 |
3 |
['github-actions', 'mitchell-horner', 'plp127'] |
nobody |
4-66822 4 days ago |
6-17921 6 days ago |
6-17981 6 days |
27260 |
JovanGerb author:JovanGerb |
feat(Geometry/Euclidean/SignedDist): `signedDist` between two points |
original PR: #24245
This PR defines `signedDist`, the signed distance between two points.
TODO: It redefines `signedInfDist` so that it uses `signedDist`.
The motivation is to use this in IMO2020Q6. Additionally this definition will be useful for properly reasoning about the power of a point
[#mathlib4 > Signed distance between points](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Signed.20distance.20between.20points)
some comments:
* should `signedDistLinear` be `private`?
* I'm not too happy about the hypothesis in `signedDist_congr (h : ∃ r > (0 : ℝ), r • v = w)`. This relationship between `v` and `w` is a symmetric one that should have some API around it, similar to `SameRay`. It could also be spelled as `(ℝ≥0 ∙ v) = ℝ≥0 ∙ w`
---
- [x] depends on: #27259
- [ ] depends on : #27285
[](https://gitpod.io/from-referrer/)
|
t-euclidean-geometry |
205/28 |
Mathlib/Analysis/InnerProductSpace/Basic.lean,Mathlib/Geometry/Euclidean/SignedDist.lean |
2 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
nobody |
4-66362 4 days ago |
4-66386 4 days ago |
9-36657 9 days |
26428 |
Ruben-VandeVelde author:Ruben-VandeVelde |
feat: norm_num support for Int.fract |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
61/0 |
Mathlib/Data/Rat/Floor.lean,MathlibTest/norm_num_ext.lean |
2 |
5 |
['Rob23oba', 'github-actions'] |
ericrbg assignee:ericrbg |
4-60913 4 days ago |
55-19348 1 month ago |
55-64107 55 days |
28512 |
euprunin author:euprunin |
chore(Data/List): golf entire `getLast_append_of_right_ne_nil` and `finRange_map_getElem` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
4/9 |
Mathlib/Data/List/Basic.lean,Mathlib/Data/List/FinRange.lean |
2 |
1 |
['github-actions'] |
nobody |
4-60299 4 days ago |
4-60299 4 days ago |
4-60353 4 days |
26785 |
TOMILO87 author:TOMILO87 |
feat: beta distribution |
Add the Beta distribution to the probability distributions in mathlib4
This PR introduces the Beta distribution on the reals.
Main definitions:
- betaPDFReal (α β x : ℝ) — the probability density function as a real-valued function
- betaPDF (α β x : ℝ) — the pdf as a ℝ≥0∞-valued function
- betaMeasure (α β : ℝ) — the probability measure associated with the Beta distribution
Main results:
- lintegral_betaPDF_eq_one — proof that the pdf integrates to 1 (normalization)
- Lemmas on positivity, measurability, and integrability of the pdf
- isProbabilityMeasureBeta — the Beta measure is a probability measure
Notes:
- Follows the general structure of other distributions in mathlib (e.g. Gamma).
- Several unused helper lemmas were removed, and proofs streamlined in response to reviewer feedback.
- Thanks to @EtienneC30 and @RemyDegenne for detailed reviews across multiple rounds.
This is a clean version of the PR originally opened as [#25608](https://github.com/leanprover-community/mathlib4/pull/25608) and temporarily migrated in [#26325](https://github.com/leanprover-community/mathlib4/pull/26325).
|
new-contributor
t-measure-probability
|
206/2 |
Mathlib.lean,Mathlib/Algebra/Polynomial/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Probability/Distributions/Beta.lean |
4 |
33 |
['EtienneC30', 'RemyDegenne', 'TOMILO87', 'github-actions'] |
EtienneC30 assignee:EtienneC30 |
4-58268 4 days ago |
4-58268 4 days ago |
35-71022 35 days |
28520 |
chrisflav author:chrisflav |
chore(Data): add `Finset.exists_injOn_image_eq_of_surjOn` |
Prerequisite for #27508.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
18/0 |
Mathlib/Data/Set/Finite/Basic.lean,Mathlib/Data/Set/Function.lean,Mathlib/Logic/Function/Basic.lean |
3 |
8 |
['YaelDillies', 'chrisflav', 'github-actions'] |
nobody |
4-38226 4 days ago |
4-46420 4 days ago |
4-46406 4 days |
27094 |
smorel394 author:smorel394 |
feat(Algebra.Category.FGModuleCat.Colimits): the category of finitely generated modules has finite colimits |
Prove that the forgetful functor from `FGModuleCat k` to `ModuleCat k` creates finite colimits, and hence that `FGModuleCat k` has finite colimits.
- [ ] depends on: #27092
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
68/0 |
Mathlib.lean,Mathlib/Algebra/Category/FGModuleCat/Colimits.lean |
2 |
6 |
['github-actions', 'leanprover-community-bot-assistant', 'mariainesdff', 'mathlib4-dependent-issues-bot'] |
mariainesdff assignee:mariainesdff |
4-31772 4 days ago |
21-28379 21 days ago |
21-29557 21 days |
28508 |
euprunin author:euprunin |
chore(Algebra/Polynomial): golf entire `homOfEq_heq` |
---
[](https://gitpod.io/from-referrer/)
|
|
2/2 |
Mathlib/Combinatorics/Quiver/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
4-30170 4 days ago |
4-77408 4 days ago |
4-77392 4 days |
28271 |
euprunin author:euprunin |
chore(LinearAlgebra/AffineSpace): golf 11 lines from `affineIndependent_iff_indicator_eq_of_affineCombination_eq` using `simp_all` |
---
Show trace profiling of affineIndependent_iff_indicator_eq_of_affineCombination_eq : 150 ms before, 132 ms after 🎉
### Trace profiling of `affineIndependent_iff_indicator_eq_of_affineCombination_eq` before PR 28271
```diff
diff --git a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean
index 3058d16cf1..470fccd236 100644
--- a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean
+++ b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean
@@ -171,6 +171,7 @@ theorem linearIndependent_set_iff_affineIndependent_vadd_union_singleton {s : Se
exact Set.diff_singleton_eq_self fun h => hs 0 h rfl
rw [h]
+set_option trace.profiler true in
/-- A family is affinely independent if and only if any affine
combinations (with sum of weights 1) that evaluate to the same point
have equal `Set.indicator`. -/
```
```
ℹ [1164/1164] Built Mathlib.LinearAlgebra.AffineSpace.Independent
info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.command] [0.018489] /-- A family is affinely independent if and only if any affine
combinations (with sum of weights 1) that evaluate to the same point
have equal `Set.indicator`. -/
theorem affineIndependent_iff_indicator_eq_of_affineCombination_eq (p : ι → P) :
AffineIndependent k p ↔
∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 :=
by
classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.definition.header] [0.013425] affineIndependent_iff_indicator_eq_of_affineCombination_eq
[Elab.step] [0.013346] expected type: Prop, term
AffineIndependent k p ↔
∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.013341] expected type: Prop, term
Iff✝ (AffineIndependent k p)
(∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2)
[Elab.step] [0.012551] expected type: Prop, term
∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.012396] expected type: Sort ?u.14914, term
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.010706] expected type: Sort ?u.15054, term
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.010237] expected type: Sort ?u.15095, term
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.async] [0.152838] elaborating proof of affineIndependent_iff_indicator_eq_of_affineCombination_eq
[Elab.definition.value] [0.149786] affineIndependent_iff_indicator_eq_of_affineCombination_eq
[Elab.step] [0.146682] classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.146678] classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.146673] classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.146464]
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.146457]
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.077731] ·
intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
[Elab.step] [0.077721]
intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
[Elab.step] [0.077717]
intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
[Elab.step] [0.048167] ·
rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.048160]
rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.048155]
rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.023372] have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
[Elab.step] [0.023334] focus
refine
no_implicit_lambda%
(have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.023329]
refine
no_implicit_lambda%
(have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.023326]
refine
no_implicit_lambda%
(have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014578] case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014523] with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014520] with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014516] with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014513] (simp [hw1, hw2])
[Elab.step] [0.014509] simp [hw1, hw2]
[Elab.step] [0.014506] simp [hw1, hw2]
[Elab.step] [0.014499] simp [hw1, hw2]
[Elab.step] [0.010284] exact
ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.026518] ·
rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
[Elab.step] [0.026312]
rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
[Elab.step] [0.026305]
rw [← Finset.mem_coe, Finset.coe_union] at hi
have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
simp [h₁, h₂]
[Elab.step] [0.010278] have h₁ : Set.indicator (↑s1) w1 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
[Elab.step] [0.010254] focus
refine
no_implicit_lambda%
(have h₁ : Set.indicator (↑s1) w1 i = 0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h)
[Elab.step] [0.010250]
refine
no_implicit_lambda%
(have h₁ : Set.indicator (↑s1) w1 i = 0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h)
[Elab.step] [0.010246]
refine
no_implicit_lambda%
(have h₁ : Set.indicator (↑s1) w1 i = 0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h)
[Elab.step] [0.010365] have h₂ : Set.indicator (↑s2) w2 i = 0 :=
by
simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
[Elab.step] [0.010302] focus
refine
no_implicit_lambda%
(have h₂ : Set.indicator (↑s2) w2 i = 0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h)
[Elab.step] [0.010297]
refine
no_implicit_lambda%
(have h₂ : Set.indicator (↑s2) w2 i = 0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h)
[Elab.step] [0.010293]
refine
no_implicit_lambda%
(have h₂ : Set.indicator (↑s2) w2 i = 0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
intro h
by_contra
exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h)
[Elab.step] [0.068628] ·
intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.068581]
intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.068575]
intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 :=
by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.014691] have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
[Elab.step] [0.014544] focus
refine
no_implicit_lambda%
(have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.014538]
refine
no_implicit_lambda%
(have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.014534]
refine
no_implicit_lambda%
(have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012772] case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012745] with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012742] with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012738] with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012734] (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib,
zero_add])
[Elab.step] [0.012730] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib,
zero_add]
[Elab.step] [0.012727] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib,
zero_add]
[Elab.step] [0.012720] simp_all only [w2, Pi.add_apply,
Finset.sum_add_distrib, zero_add]
[Elab.step] [0.017729] have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
[Elab.step] [0.017704] focus
refine
no_implicit_lambda%
(have hw2s : s.affineCombination k p w2 = p i0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.017699]
refine
no_implicit_lambda%
(have hw2s : s.affineCombination k p w2 = p i0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.017695]
refine
no_implicit_lambda%
(have hw2s : s.affineCombination k p w2 = p i0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.014054] case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.013988] with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.013985] with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.013982] with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.013979] (simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.013976] simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd]
[Elab.step] [0.013973] simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd]
[Elab.step] [0.013967] simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd]
Build completed successfully.
```
### Trace profiling of `affineIndependent_iff_indicator_eq_of_affineCombination_eq` after PR 28271
```diff
diff --git a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean
index 3058d16cf1..64f9f68b47 100644
--- a/Mathlib/LinearAlgebra/AffineSpace/Independent.lean
+++ b/Mathlib/LinearAlgebra/AffineSpace/Independent.lean
@@ -171,6 +171,7 @@ theorem linearIndependent_set_iff_affineIndependent_vadd_union_singleton {s : Se
exact Set.diff_singleton_eq_self fun h => hs 0 h rfl
rw [h]
+set_option trace.profiler true in
/-- A family is affinely independent if and only if any affine
combinations (with sum of weights 1) that evaluate to the same point
have equal `Set.indicator`. -/
@@ -195,18 +196,7 @@ theorem affineIndependent_iff_indicator_eq_of_affineCombination_eq (p : ι → P
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right,
← @vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
- · rw [← Finset.mem_coe, Finset.coe_union] at hi
- have h₁ : Set.indicator (↑s1) w1 i = 0 := by
- simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
- intro h
- by_contra
- exact (mt (@Set.mem_union_left _ i ↑s1 ↑s2) hi) h
- have h₂ : Set.indicator (↑s2) w2 i = 0 := by
- simp only [Set.indicator, Finset.mem_coe, ite_eq_right_iff]
- intro h
- by_contra
- exact (mt (@Set.mem_union_right _ i ↑s2 ↑s1) hi) h
- simp [h₁, h₂]
+ · simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
```
```
ℹ [1164/1164] Built Mathlib.LinearAlgebra.AffineSpace.Independent
info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.command] [0.018359] /-- A family is affinely independent if and only if any affine
combinations (with sum of weights 1) that evaluate to the same point
have equal `Set.indicator`. -/
theorem affineIndependent_iff_indicator_eq_of_affineCombination_eq (p : ι → P) :
AffineIndependent k p ↔
∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2 :=
by
classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.definition.header] [0.014185] affineIndependent_iff_indicator_eq_of_affineCombination_eq
[Elab.step] [0.014114] expected type: Prop, term
AffineIndependent k p ↔
∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.014109] expected type: Prop, term
Iff✝ (AffineIndependent k p)
(∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2)
[Elab.step] [0.013355] expected type: Prop, term
∀ (s1 s2 : Finset ι) (w1 w2 : ι → k),
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.013210] expected type: Sort ?u.14914, term
∑ i ∈ s1, w1 i = 1 →
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
[Elab.step] [0.010454] expected type: Sort ?u.15054, term
∑ i ∈ s2, w2 i = 1 →
s1.affineCombination k p w1 = s2.affineCombination k p w2 →
Set.indicator (↑s1) w1 = Set.indicator (↑s2) w2
info: Mathlib/LinearAlgebra/AffineSpace/Independent.lean:175:0: [Elab.async] [0.134788] elaborating proof of affineIndependent_iff_indicator_eq_of_affineCombination_eq
[Elab.definition.value] [0.131747] affineIndependent_iff_indicator_eq_of_affineCombination_eq
[Elab.step] [0.128786] classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.128780] classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.128774] classical
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.128544]
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.128537]
constructor
· intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
· intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.060569] ·
intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ← @vsub_eq_zero_iff_eq V,
Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
[Elab.step] [0.060557]
intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
[Elab.step] [0.060553]
intro ha s1 s2 w1 w2 hw1 hw2 heq
ext i
by_cases hi : i ∈ s1 ∪ s2
· rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
· simp_all
[Elab.step] [0.047014] ·
rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.047005]
rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.047001]
rw [← sub_eq_zero]
rw [← Finset.sum_indicator_subset w1 (s1.subset_union_left (s₂ := s2))] at hw1
rw [← Finset.sum_indicator_subset w2 (s1.subset_union_right)] at hw2
have hws : (∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
rw [Finset.affineCombination_indicator_subset w1 p (s1.subset_union_left (s₂ := s2)),
Finset.affineCombination_indicator_subset w2 p s1.subset_union_right, ←
@vsub_eq_zero_iff_eq V, Finset.affineCombination_vsub] at heq
exact ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.023015] have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 := by
simp [hw1, hw2]
[Elab.step] [0.022978] focus
refine
no_implicit_lambda%
(have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.022974]
refine
no_implicit_lambda%
(have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.022971]
refine
no_implicit_lambda%
(have hws :
(∑ i ∈ s1 ∪ s2, (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) i) = 0 :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014786] case body✝ => with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014731] with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014728] with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014725] with_annotate_state"by" (simp [hw1, hw2])
[Elab.step] [0.014721] (simp [hw1, hw2])
[Elab.step] [0.014718] simp [hw1, hw2]
[Elab.step] [0.014715] simp [hw1, hw2]
[Elab.step] [0.014709] simp [hw1, hw2]
[Elab.step] [0.010380] exact
ha (s1 ∪ s2) (Set.indicator (↑s1) w1 - Set.indicator (↑s2) w2) hws heq i hi
[Elab.step] [0.010297] · simp_all
[Elab.step] [0.010038] simp_all
[Elab.step] [0.010035] simp_all
[Elab.step] [0.010030] simp_all
[Elab.step] [0.067859] ·
intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.067812]
intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 := by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.067806]
intro ha s w hw hs i0 hi0
let w1 : ι → k := Function.update (Function.const ι 0) i0 1
have hw1 : ∑ i ∈ s, w1 i = 1 :=
by
rw [Finset.sum_update_of_mem hi0]
simp only [Finset.sum_const_zero, add_zero, const_apply]
have hw1s : s.affineCombination k p w1 = p i0 :=
s.affineCombination_of_eq_one_of_eq_zero w1 p hi0 (Function.update_self ..) fun _ _ hne =>
Function.update_of_ne hne ..
let w2 := w + w1
have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
replace ha := ha s s w2 w1 hw2 hw1 (hw1s.symm ▸ hw2s)
have hws : w2 i0 - w1 i0 = 0 := by
rw [← Finset.mem_coe] at hi0
rw [← Set.indicator_of_mem hi0 w2, ← Set.indicator_of_mem hi0 w1, ha, sub_self]
simpa [w2] using hws
[Elab.step] [0.014941] have hw2 : ∑ i ∈ s, w2 i = 1 := by
simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add]
[Elab.step] [0.014792] focus
refine
no_implicit_lambda%
(have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.014788]
refine
no_implicit_lambda%
(have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.014785]
refine
no_implicit_lambda%
(have hw2 : ∑ i ∈ s, w2 i = 1 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012975] case body✝ =>
with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012948] with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012944] with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012940] with_annotate_state"by"
(simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib, zero_add])
[Elab.step] [0.012936] (simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib,
zero_add])
[Elab.step] [0.012934] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib,
zero_add]
[Elab.step] [0.012930] simp_all only [w2, Pi.add_apply, Finset.sum_add_distrib,
zero_add]
[Elab.step] [0.012924] simp_all only [w2, Pi.add_apply,
Finset.sum_add_distrib, zero_add]
[Elab.step] [0.019018] have hw2s : s.affineCombination k p w2 = p i0 := by
simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd]
[Elab.step] [0.018991] focus
refine
no_implicit_lambda%
(have hw2s : s.affineCombination k p w2 = p i0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.018986]
refine
no_implicit_lambda%
(have hw2s : s.affineCombination k p w2 = p i0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.018982]
refine
no_implicit_lambda%
(have hw2s : s.affineCombination k p w2 = p i0 := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.015284] case body✝ =>
with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.015215] with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.015212] with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.015208] with_annotate_state"by"
(simp_all only [w2, ← Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.015205] (simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd])
[Elab.step] [0.015202] simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd]
[Elab.step] [0.015198] simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd]
[Elab.step] [0.015193] simp_all only [w2, ←
Finset.weightedVSub_vadd_affineCombination, zero_vadd]
Build completed successfully.
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/12 |
Mathlib/LinearAlgebra/AffineSpace/Independent.lean |
1 |
3 |
['euprunin', 'github-actions', 'grunweg'] |
nobody |
4-20566 4 days ago |
4-20567 4 days ago |
4-23444 4 days |
23594 |
YaelDillies author:YaelDillies |
chore: rename `dmaSMul_apply` to `domSMul_apply` |
It's clearer this way, as the `ma` in `dmaSMul` already means "Multiplicative Action", ie `smul`.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
4/2 |
Mathlib/MeasureTheory/Group/MeasurableEquiv.lean,Mathlib/MeasureTheory/Measure/Haar/DistribChar.lean |
2 |
13 |
['YaelDillies', 'eric-wieser', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot', 'urkud'] |
mattrobball assignee:mattrobball |
4-6489 4 days ago |
15-38239 15 days ago |
39-13488 39 days |
24804 |
Moises-Herradon-Cueto author:Moises-Herradon-Cueto |
feat(CategoryTheory/Limits/Preserves/Shapes): show that if a functor preserves limits, so does `Over.post` |
If a functor `F` preserves limits (of a certain shape, finite, or of a certain size), then so does the induced functor on `Over` categories.
From Toric
Co-authored-by: Yaël Dillies
---
[](https://gitpod.io/from-referrer/)
|
toric
new-contributor
t-category-theory
|
125/0 |
Mathlib.lean,Mathlib/CategoryTheory/Limits/Preserves/Shapes/Over.lean,Mathlib/CategoryTheory/WithTerminal/Basic.lean |
3 |
17 |
['Moises-Herradon-Cueto', 'YaelDillies', 'erdOne', 'github-actions', 'joelriou'] |
riccardobrasca assignee:riccardobrasca |
4-6489 4 days ago |
85-43071 2 months ago |
91-47464 91 days |
26107 |
xroblot author:xroblot |
feat(NumberField/IsCM): first results about the action of `complexConjugation` on units |
Define the subgroup of real units of a CM field and prove that it is equal to the subgroup of units fixed by the complex conjugation.
---
- [x] depends on: #23536
- [x] depends on: #23453
- [x] depends on: #26746
|
t-number-theory |
170/8 |
Mathlib/GroupTheory/GroupAction/FixedPoints.lean,Mathlib/NumberTheory/NumberField/CMField.lean,Mathlib/NumberTheory/NumberField/Units/Basic.lean |
3 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'xroblot'] |
tb65536 assignee:tb65536 |
4-6487 4 days ago |
11-9355 11 days ago |
11-14118 11 days |
27839 |
CBirkbeck author:CBirkbeck |
feat: normalised Eisenstein series |
define normalised Eisenstein series in preparation for giving their q-expansions.
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
11/0 |
Mathlib/NumberTheory/ModularForms/EisensteinSeries/Basic.lean |
1 |
3 |
['Ruben-VandeVelde', 'github-actions'] |
alreadydone assignee:alreadydone |
4-6486 4 days ago |
19-36839 19 days ago |
19-36889 19 days |
28019 |
euprunin author:euprunin |
chore: replace `aesop_cat` with `simp` where applicable |
|
|
2/2 |
Mathlib/CategoryTheory/Closed/Cartesian.lean,Mathlib/CategoryTheory/Localization/Construction.lean |
2 |
9 |
['euprunin', 'github-actions', 'grunweg', 'leanprover-bot', 'mathlib4-merge-conflict-bot'] |
dwrensha assignee:dwrensha |
4-6485 4 days ago |
13-42217 13 days ago |
13-72335 13 days |
28122 |
j-loreaux author:j-loreaux |
refactor: change `unitary.map` to take an explicit morphism as an argument, rather than a morphism class |
This also defines `unitary.mapEquiv` as the induced equivalence on unitary groups, and provides various functoriality lemmas for both definitions.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
70/8 |
Mathlib/Algebra/Star/MonoidHom.lean,Mathlib/Algebra/Star/Unitary.lean |
2 |
1 |
['github-actions'] |
mattrobball assignee:mattrobball |
4-6484 4 days ago |
12-6689 12 days ago |
12-38950 12 days |
28131 |
plp127 author:plp127 |
feat: forgetful functor from over category preserves connected limits |
Prove that `Over.forget` preserves connected limits.
---
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
18/2 |
Mathlib/CategoryTheory/Limits/Constructions/Over/Connected.lean |
1 |
2 |
['Vtec234', 'github-actions'] |
b-mehta assignee:b-mehta |
4-6483 4 days ago |
12-15111 12 days ago |
12-15158 12 days |
28141 |
YaelDillies author:YaelDillies |
chore: deprecate `BialgHom.coe_toLinearMap` |
`BialgHom.toLinearMap` is a fake projection.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
toric
easy
|
5/11 |
Mathlib/RingTheory/Bialgebra/Hom.lean |
1 |
8 |
['YaelDillies', 'eric-wieser', 'github-actions'] |
alreadydone assignee:alreadydone |
4-6482 4 days ago |
11-70011 11 days ago |
11-70010 11 days |
28149 |
Equilibris author:Equilibris |
feat: dcongr_heq |
`dcongr_heq` is very useful for proofs about typevecs as these are highly dependent
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-logic
|
14/0 |
Mathlib/Logic/Basic.lean |
1 |
11 |
['Equilibris', 'alexkeizer', 'github-actions', 'madvorak'] |
fpvandoorn assignee:fpvandoorn |
4-6482 4 days ago |
11-63305 11 days ago |
11-63350 11 days |
28538 |
euprunin author:euprunin |
chore(Algebra/ContinuedFractions/Computation): golf entire `coe_of_h_rat_eq` using `simp_all` |
---
Show trace profiling of coe_of_h_rat_eq : <10 ms before, <10 ms after 🎉
### Trace profiling of `coe_of_h_rat_eq` before PR 28538
```diff
diff --git a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean
index 3f6d63f8e7..5dcc698cb7 100644
--- a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean
+++ b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean
@@ -188,6 +188,7 @@ end IntFractPair
/-! Now we lift the coercion results to the continued fraction computation. -/
+set_option trace.profiler true in
theorem coe_of_h_rat_eq (v_eq_q : v = (↑q : K)) : (↑((of q).h : ℚ) : K) = (of v).h := by
unfold of IntFractPair.seq1
rw [← IntFractPair.coe_of_rat_eq v_eq_q]
```
```
✔ [918/918] Built Mathlib.Algebra.ContinuedFractions.Computation.TerminatesIffRat (1.3s)
Build completed successfully (918 jobs).
```
### Trace profiling of `coe_of_h_rat_eq` after PR 28538
```diff
diff --git a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean
index 3f6d63f8e7..e9036a925b 100644
--- a/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean
+++ b/Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean
@@ -188,10 +188,9 @@ end IntFractPair
/-! Now we lift the coercion results to the continued fraction computation. -/
+set_option trace.profiler true in
theorem coe_of_h_rat_eq (v_eq_q : v = (↑q : K)) : (↑((of q).h : ℚ) : K) = (of v).h := by
- unfold of IntFractPair.seq1
- rw [← IntFractPair.coe_of_rat_eq v_eq_q]
- simp
+ simp_all
theorem coe_of_s_get?_rat_eq (v_eq_q : v = (↑q : K)) (n : ℕ) :
(((of q).s.get? n).map (Pair.map (↑)) : Option <| Pair K) = (of v).s.get? n := by
```
```
✔ [918/918] Built Mathlib.Algebra.ContinuedFractions.Computation.TerminatesIffRat (1.2s)
Build completed successfully (918 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/3 |
Mathlib/Algebra/ContinuedFractions/Computation/TerminatesIffRat.lean |
1 |
1 |
['github-actions'] |
nobody |
3-75285 3 days ago |
3-76648 3 days ago |
3-76690 3 days |
28541 |
euprunin author:euprunin |
chore(Analysis/Normed/Group): golf entire `coe_inj` using `grind [DFunLike.coe_fn_eq]` |
---
Show trace profiling of coe_inj : <10 ms before, <10 ms after 🎉
### Trace profiling of `coe_inj` before PR 28541
```diff
diff --git a/Mathlib/Analysis/Normed/Group/Hom.lean b/Mathlib/Analysis/Normed/Group/Hom.lean
index 3779f80a73..21bdde6220 100644
--- a/Mathlib/Analysis/Normed/Group/Hom.lean
+++ b/Mathlib/Analysis/Normed/Group/Hom.lean
@@ -91,6 +91,7 @@ instance toAddMonoidHomClass : AddMonoidHomClass (NormedAddGroupHom V₁ V₂) V
initialize_simps_projections NormedAddGroupHom (toFun → apply)
+set_option trace.profiler true in
theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by
cases f; cases g; congr
```
```
ℹ [1487/1487] Built Mathlib.Analysis.Normed.Group.Hom (2.9s)
info: Mathlib/Analysis/Normed/Group/Hom.lean:95:0: [Elab.command] [0.016720] theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by cases f; cases g; congr
[Elab.definition.header] [0.015730] NormedAddGroupHom.coe_inj
[Elab.step] [0.015594] expected type: Sort ?u.9077, term
(f : V₁ → V₂) = g
[Elab.step] [0.015586] expected type: Sort ?u.9077, term
binrel% Eq✝ (f : V₁ → V₂) g
[Meta.synthInstance] [0.014264] ✅️ CoeT (NormedAddGroupHom V₁ V₂) x (V₁ → V₂)
Build completed successfully (1487 jobs).
```
### Trace profiling of `coe_inj` after PR 28541
```diff
diff --git a/Mathlib/Analysis/Normed/Group/Hom.lean b/Mathlib/Analysis/Normed/Group/Hom.lean
index 3779f80a73..8ef0138b38 100644
--- a/Mathlib/Analysis/Normed/Group/Hom.lean
+++ b/Mathlib/Analysis/Normed/Group/Hom.lean
@@ -91,8 +91,9 @@ instance toAddMonoidHomClass : AddMonoidHomClass (NormedAddGroupHom V₁ V₂) V
initialize_simps_projections NormedAddGroupHom (toFun → apply)
+set_option trace.profiler true in
theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by
- cases f; cases g; congr
+ grind [DFunLike.coe_fn_eq]
theorem coe_injective : @Function.Injective (NormedAddGroupHom V₁ V₂) (V₁ → V₂) toFun := by
apply coe_inj
```
```
ℹ [1487/1487] Built Mathlib.Analysis.Normed.Group.Hom (2.8s)
info: Mathlib/Analysis/Normed/Group/Hom.lean:95:0: [Elab.command] [0.016377] theorem coe_inj (H : (f : V₁ → V₂) = g) : f = g := by grind [DFunLike.coe_fn_eq]
[Elab.definition.header] [0.015314] NormedAddGroupHom.coe_inj
[Elab.step] [0.015184] expected type: Sort ?u.9077, term
(f : V₁ → V₂) = g
[Elab.step] [0.015177] expected type: Sort ?u.9077, term
binrel% Eq✝ (f : V₁ → V₂) g
[Meta.synthInstance] [0.013829] ✅️ CoeT (NormedAddGroupHom V₁ V₂) x (V₁ → V₂)
Build completed successfully (1487 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
1/1 |
Mathlib/Analysis/Normed/Group/Hom.lean |
1 |
1 |
['github-actions'] |
nobody |
3-74844 3 days ago |
3-76249 3 days ago |
3-76292 3 days |
23999 |
YaelDillies author:YaelDillies |
feat(MonoidAlgebra): `mapDomain` and `mapRange` as ring homs |
From Toric
Co-authored-by: Michał Mrugała
---
[](https://gitpod.io/from-referrer/)
|
toric
t-algebra
label:t-algebra$ |
123/95 |
Mathlib/Algebra/MonoidAlgebra/Defs.lean,Mathlib/Algebra/MonoidAlgebra/Lift.lean,Mathlib/Algebra/MonoidAlgebra/MapDomain.lean |
3 |
1 |
['github-actions'] |
nobody |
3-71644 3 days ago |
3-71902 3 days ago |
6-1044 6 days |
27105 |
xroblot author:xroblot |
feat(Ring/DedekindDomain): formula for the splitting of prime ideals in an extension |
This PR just puts together all the results that were already there to deduce:
```lean
map (algebraMap S R) p = ∏ P ∈ p.primesOver R, P ^ p.ramificationIdx (algebraMap S R) P
```
for `p` a maximal ideal of a ring `S` and `R` an extension of `S` that is a Dedekind ring.
Note. There is a significant import increase in the file `RingTheory.DedekindDomain.Factorization`. However, this file is almost a leaf file so this increase only affects a limited number of files. If the increase is too big, a new file, say `RingTheory.DedekindDomain.PrimeSplitting`, can be added instead.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
t-number-theory
label:t-algebra$ |
88/2 |
Mathlib/RingTheory/DedekindDomain/Factorization.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Basic.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean,Mathlib/RingTheory/Ideal/Operations.lean,Mathlib/RingTheory/Ideal/Over.lean |
5 |
3 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-merge-conflict-bot'] |
mariainesdff assignee:mariainesdff |
3-68119 3 days ago |
3-68136 3 days ago |
37-11987 37 days |
26101 |
xroblot author:xroblot |
feat(NumberField): specialized version of Kummer Dedekind for the splitting of prime numbers |
We prove a specialized version of [KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk](https://leanprover-community.github.io/mathlib4_docs/Mathlib/NumberTheory/KummerDedekind.html#KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk) for the splitting of rational prime numbers in number fields.
This PR continues the work from #25038.
---
- [ ] depends on: #26137 |
t-number-theory |
172/1 |
Mathlib/NumberTheory/NumberField/Ideal/KummerDedekind.lean,Mathlib/NumberTheory/RamificationInertia/Basic.lean,Mathlib/RingTheory/AdjoinRoot.lean,Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean |
4 |
6 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'xroblot'] |
tb65536 assignee:tb65536 |
3-67920 3 days ago |
3-67946 3 days ago |
0-50 50 seconds |
26009 |
linesthatinterlace author:linesthatinterlace |
feat: Add `Vector`/`List.Vector` equivalence |
This PR continues the work from #25050.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25050 |
migrated-from-branch
t-data
|
125/17 |
Mathlib/Data/Vector/Basic.lean,Mathlib/Data/Vector/Defs.lean,Mathlib/Logic/Equiv/Array.lean |
3 |
3 |
['github-actions', 'linesthatinterlace', 'robin-carlier'] |
nobody |
3-66665 3 days ago |
3-66751 3 days ago |
64-63488 64 days |
28406 |
YaelDillies author:YaelDillies |
chore: rename `Mon_Class` to `MonObj` |
and `Comon_Class` to `ComonObj`.
`Grp_Class`, `CommGrp_Class` and `Mod_Class` will follow.
[Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Removing.20underscores.20from.20docs.23Mon_.2C.20docs.23Grp_.20.2E.2E.2E)
---
I will add the deprecations once we have agreed on the new names.
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
238/238 |
Mathlib/Algebra/Category/CoalgCat/ComonEquivalence.lean,Mathlib/Algebra/Category/Grp/LeftExactFunctor.lean,Mathlib/CategoryTheory/Bicategory/Monad/Basic.lean,Mathlib/CategoryTheory/Monad/EquivMon.lean,Mathlib/CategoryTheory/Monoidal/Bimod.lean,Mathlib/CategoryTheory/Monoidal/Bimon_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/CommGrp_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/CommMon_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Comon_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Grp_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Mod_.lean,Mathlib/CategoryTheory/Monoidal/Cartesian/Mon_.lean,Mathlib/CategoryTheory/Monoidal/CommGrp_.lean,Mathlib/CategoryTheory/Monoidal/CommMon_.lean,Mathlib/CategoryTheory/Monoidal/Comon_.lean,Mathlib/CategoryTheory/Monoidal/Conv.lean,Mathlib/CategoryTheory/Monoidal/Grp_.lean,Mathlib/CategoryTheory/Monoidal/Hopf_.lean,Mathlib/CategoryTheory/Monoidal/Internal/FunctorCategory.lean,Mathlib/CategoryTheory/Monoidal/Internal/Module.lean,Mathlib/CategoryTheory/Monoidal/Internal/Types/Basic.lean,Mathlib/CategoryTheory/Monoidal/Internal/Types/CommGrp_.lean,Mathlib/CategoryTheory/Monoidal/Internal/Types/Grp_.lean,Mathlib/CategoryTheory/Monoidal/Mod_.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Monoidal/Opposite/Mon_.lean,Mathlib/CategoryTheory/Preadditive/CommGrp_.lean |
27 |
1 |
['github-actions'] |
nobody |
3-57242 3 days ago |
3-57242 3 days ago |
6-46214 6 days |
28286 |
bwangpj author:bwangpj |
feat(Geometry/Manifold/ContMDiff): basic lemmas for analytic (`C^ω`) functions |
Add basic lemmas relating `ContMDiff` in the `C^ω` case to being `Analytic` on charts.
This is upstreamed from [https://github.com/girving/ray](https://github.com/girving/ray).
Co-authored-by: Geoffrey Irving
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-differential-geometry
|
36/0 |
Mathlib/Geometry/Manifold/ContMDiff/Defs.lean |
1 |
2 |
['girving', 'github-actions'] |
nobody |
3-57167 3 days ago |
8-55506 8 days ago |
8-55551 8 days |
27433 |
YaelDillies author:YaelDillies |
refactor: make `⇑e⁻¹ = e.symm` simp |
From BrauerGroup and ClassFieldTheory
---
[](https://gitpod.io/from-referrer/)
|
|
217/256 |
Mathlib/Algebra/Algebra/Equiv.lean,Mathlib/Algebra/Group/End.lean,Mathlib/Algebra/Module/Equiv/Basic.lean,Mathlib/Algebra/Order/Rearrangement.lean,Mathlib/Data/Fintype/Perm.lean,Mathlib/FieldTheory/KrullTopology.lean,Mathlib/GroupTheory/Perm/Basic.lean,Mathlib/GroupTheory/Perm/Centralizer.lean,Mathlib/GroupTheory/Perm/Cycle/Basic.lean,Mathlib/GroupTheory/Perm/Cycle/Factors.lean,Mathlib/GroupTheory/Perm/Finite.lean,Mathlib/GroupTheory/Perm/Sign.lean,Mathlib/GroupTheory/Perm/Support.lean,Mathlib/GroupTheory/SpecificGroups/Alternating.lean,Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean,Mathlib/Logic/Equiv/Set.lean |
16 |
3 |
['eric-wieser', 'github-actions'] |
nobody |
3-46654 3 days ago |
3-46654 3 days ago |
3-78026 3 days |
28354 |
joelriou author:joelriou |
feat(AlgebraicTopology/ModelCategory): right homotopies |
This PR introduces the notion of right homotopies, which are defined using path objects. It was obtained by dualizing the defintitions in #26967 (mostly by search/replace...).
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
311/0 |
Mathlib.lean,Mathlib/AlgebraicTopology/ModelCategory/RightHomotopy.lean |
2 |
1 |
['github-actions'] |
nobody |
3-44198 3 days ago |
6-24278 6 days ago |
6-24263 6 days |
28179 |
vihdzp author:vihdzp |
feat: `LinearOrderedAddCommGroupWithTop (ArchimedeanClass R)` |
We define addition on `ArchimedeanClass R` such that `mk (a * b) = mk a + mk b`, as well as a zero element `0 = mk 1`. This makes `ArchimedeanClass R` into a `LinearOrderedAddCommMonoidWithTop` when `R` is a ring, and a `LinearOrderedAddCommGroupWithTop` when `R` is a field.
---
- [x] depends on: #28227
See [Zulip](https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/.22Commensurate.22.20elements.20in.20fields/near/533639232) for discussion on this (in particular, why we turn multiplication into addition).
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-algebra
label:t-algebra$ |
208/10 |
Mathlib.lean,Mathlib/Algebra/Order/Archimedean/Class.lean,Mathlib/Algebra/Order/Ring/Archimedean.lean |
3 |
28 |
['alreadydone', 'github-actions', 'kckennylau', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'vihdzp', 'wwylele'] |
nobody |
3-36363 3 days ago |
3-36363 3 days ago |
6-33976 6 days |
28555 |
YaelDillies author:YaelDillies |
feat: pullback along an epi preserved under pullbacks is faithful |
From Toric
---
[](https://gitpod.io/from-referrer/)
|
toric
large-import
t-category-theory
|
39/2 |
Mathlib/CategoryTheory/Comma/Over/Basic.lean,Mathlib/CategoryTheory/Comma/Over/Pullback.lean |
2 |
1 |
['github-actions'] |
nobody |
3-35962 3 days ago |
3-35962 3 days ago |
3-36223 3 days |
28449 |
wwylele author:wwylele |
feat(Algebra/Order): ArchimedeanClass ball for module |
This continues #27885 and promotes `ArchimedeanClass.addSubgroup` to a submodule. Balls are promoted to submodules with shorter names `ball` and `closedBall`, as they will be used a lot in the proof of Hahn embedding theorem (if you don't agree with this I can rename them to `ballSubmodule` and `closedBallSubmodule`)
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
103/0 |
Mathlib.lean,Mathlib/Algebra/Order/Module/Archimedean.lean |
2 |
3 |
['github-actions', 'wwylele'] |
nobody |
3-34562 3 days ago |
6-14673 6 days ago |
6-14720 6 days |
28570 |
euprunin author:euprunin |
chore(RepresentationTheory/Homological/GroupCohomology): golf entire `cochainsMap_f_1_comp_cochainsIso₁` using `tauto` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/3 |
Mathlib/RepresentationTheory/Homological/GroupCohomology/Functoriality.lean |
1 |
1 |
['github-actions'] |
nobody |
3-34270 3 days ago |
3-34280 3 days ago |
3-34328 3 days |
28571 |
euprunin author:euprunin |
chore(RingTheory): golf entire `mem_extended_iff`, `coeff_opRingEquiv` and `comp_assoc` using `tauto` |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
4/9 |
Mathlib/RingTheory/ClassGroup.lean,Mathlib/RingTheory/FractionalIdeal/Extended.lean,Mathlib/RingTheory/Polynomial/Opposites.lean,Mathlib/RingTheory/PolynomialLaw/Basic.lean |
4 |
1 |
['github-actions'] |
nobody |
3-34238 3 days ago |
3-34243 3 days ago |
3-34287 3 days |
28573 |
euprunin author:euprunin |
chore(Tactic): golf entire `eval_cons` and `natPow_zero_natMod_succ_succ` using `tauto` |
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
3/6 |
Mathlib/Tactic/Module.lean,Mathlib/Tactic/NormNum/PowMod.lean |
2 |
1 |
['github-actions'] |
nobody |
3-34150 3 days ago |
3-34150 3 days ago |
3-34221 3 days |
27357 |
jcreedcmu author:jcreedcmu |
feat(Algebra/Module/Submodule): add `submoduleMap` for isometries |
Per [discussion on Zulip](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Analog.20of.20LinearEquiv.2EsubmoduleMap.20for.20AffineIsometryEquiv.3F), add a version of `.submoduleMap` for `LinearIsometry` and `LinearIsometryEquiv` by analogy with `LinearMap.submoduleMap` and `LinearEquiv.submoduleMap`.
--- |
new-contributor
t-algebra
label:t-algebra$ |
56/0 |
Mathlib.lean,Mathlib/Analysis/Normed/Operator/LinearIsometrySubmoduleMap.lean |
2 |
18 |
['Ruben-VandeVelde', 'eric-wieser', 'github-actions', 'jcreedcmu', 'themathqueen'] |
dagurtomas assignee:dagurtomas |
3-33857 3 days ago |
29-22317 29 days ago |
29-22369 29 days |
28560 |
euprunin author:euprunin |
chore(Combinatorics/Quiver): golf entire `lift_spec` using `tauto` |
---
Show trace profiling of lift_spec : <10 ms before, <10 ms after 🎉
### Trace profiling of `lift_spec` before PR 28560
```diff
diff --git a/Mathlib/Combinatorics/Quiver/Symmetric.lean b/Mathlib/Combinatorics/Quiver/Symmetric.lean
index 33e371b283..76a3371b36 100644
--- a/Mathlib/Combinatorics/Quiver/Symmetric.lean
+++ b/Mathlib/Combinatorics/Quiver/Symmetric.lean
@@ -164,6 +164,7 @@ def lift [HasReverse V'] (φ : Prefunctor V V') :
| Sum.inl g => φ.map g
| Sum.inr g => reverse (φ.map g)
+set_option trace.profiler true in
theorem lift_spec [HasReverse V'] (φ : Prefunctor V V') :
Symmetrify.of.comp (Symmetrify.lift φ) = φ := by
fapply Prefunctor.ext
```
```
✔ [147/147] Built Mathlib.Combinatorics.Quiver.Symmetric (1.3s)
Build completed successfully (147 jobs).
```
### Trace profiling of `lift_spec` after PR 28560
```diff
diff --git a/Mathlib/Combinatorics/Quiver/Symmetric.lean b/Mathlib/Combinatorics/Quiver/Symmetric.lean
index 33e371b283..3adf874946 100644
--- a/Mathlib/Combinatorics/Quiver/Symmetric.lean
+++ b/Mathlib/Combinatorics/Quiver/Symmetric.lean
@@ -164,13 +164,10 @@ def lift [HasReverse V'] (φ : Prefunctor V V') :
| Sum.inl g => φ.map g
| Sum.inr g => reverse (φ.map g)
+set_option trace.profiler true in
theorem lift_spec [HasReverse V'] (φ : Prefunctor V V') :
Symmetrify.of.comp (Symmetrify.lift φ) = φ := by
- fapply Prefunctor.ext
- · rintro X
- rfl
- · rintro X Y f
- rfl
+ tauto
theorem lift_reverse [h : HasInvolutiveReverse V']
(φ : Prefunctor V V') {X Y : Symmetrify V} (f : X ⟶ Y) :
```
```
✔ [147/147] Built Mathlib.Combinatorics.Quiver.Symmetric (1.2s)
Build completed successfully (147 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-combinatorics |
1/5 |
Mathlib/Combinatorics/Quiver/Symmetric.lean |
1 |
1 |
['github-actions'] |
nobody |
3-32741 3 days ago |
3-34772 3 days ago |
3-34823 3 days |
28562 |
euprunin author:euprunin |
chore(Geometry/RingedSpace): golf entire `locallyRingedSpace_toLocallyRingedSpace` using `tauto` |
---
Show trace profiling of locallyRingedSpace_toLocallyRingedSpace : <10 ms before, <10 ms after 🎉
### Trace profiling of `locallyRingedSpace_toLocallyRingedSpace` before PR 28562
```diff
diff --git a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean
index f0c58db3fd..98033b0d26 100644
--- a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean
+++ b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean
@@ -574,6 +574,7 @@ instance toLocallyRingedSpace_isOpenImmersion :
LocallyRingedSpace.IsOpenImmersion (toLocallyRingedSpaceHom Y f) :=
H
+set_option trace.profiler true in
@[simp]
theorem locallyRingedSpace_toLocallyRingedSpace {X Y : LocallyRingedSpace} (f : X ⟶ Y)
[LocallyRingedSpace.IsOpenImmersion f] : toLocallyRingedSpace Y f.1 = X := by
```
```
✔ [1677/1677] Built Mathlib.Geometry.RingedSpace.OpenImmersion (13s)
Build completed successfully (1677 jobs).
```
### Trace profiling of `locallyRingedSpace_toLocallyRingedSpace` after PR 28562
```diff
diff --git a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean
index f0c58db3fd..e25a631151 100644
--- a/Mathlib/Geometry/RingedSpace/OpenImmersion.lean
+++ b/Mathlib/Geometry/RingedSpace/OpenImmersion.lean
@@ -574,10 +574,11 @@ instance toLocallyRingedSpace_isOpenImmersion :
LocallyRingedSpace.IsOpenImmersion (toLocallyRingedSpaceHom Y f) :=
H
+set_option trace.profiler true in
@[simp]
theorem locallyRingedSpace_toLocallyRingedSpace {X Y : LocallyRingedSpace} (f : X ⟶ Y)
[LocallyRingedSpace.IsOpenImmersion f] : toLocallyRingedSpace Y f.1 = X := by
- cases X; delta toLocallyRingedSpace; simp
+ tauto
end ToLocallyRingedSpace
```
```
✔ [1677/1677] Built Mathlib.Geometry.RingedSpace.OpenImmersion (13s)
Build completed successfully (1677 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
1/1 |
Mathlib/Geometry/RingedSpace/OpenImmersion.lean |
1 |
1 |
['github-actions'] |
nobody |
3-32670 3 days ago |
3-34631 3 days ago |
3-34684 3 days |
28565 |
euprunin author:euprunin |
chore(Logic/Equiv): golf entire `trans_symm_eq_symm_trans_symm` using `tauto` |
---
Show trace profiling of trans_symm_eq_symm_trans_symm : <10 ms before, 15 ms after
### Trace profiling of `trans_symm_eq_symm_trans_symm` before PR 28565
```diff
diff --git a/Mathlib/Logic/Equiv/PartialEquiv.lean b/Mathlib/Logic/Equiv/PartialEquiv.lean
index 0cca37467c..73b080b642 100644
--- a/Mathlib/Logic/Equiv/PartialEquiv.lean
+++ b/Mathlib/Logic/Equiv/PartialEquiv.lean
@@ -602,6 +602,7 @@ theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
rfl
+set_option trace.profiler true in
theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by
cases e; cases e'; rfl
```
```
✔ [373/373] Built Mathlib.Logic.Equiv.PartialEquiv (2.7s)
Build completed successfully (373 jobs).
```
### Trace profiling of `trans_symm_eq_symm_trans_symm` after PR 28565
```diff
diff --git a/Mathlib/Logic/Equiv/PartialEquiv.lean b/Mathlib/Logic/Equiv/PartialEquiv.lean
index 0cca37467c..ba4a85f370 100644
--- a/Mathlib/Logic/Equiv/PartialEquiv.lean
+++ b/Mathlib/Logic/Equiv/PartialEquiv.lean
@@ -602,8 +602,9 @@ theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
rfl
+set_option trace.profiler true in
theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by
- cases e; cases e'; rfl
+ tauto
@[simp, mfld_simps]
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
```
```
ℹ [373/373] Built Mathlib.Logic.Equiv.PartialEquiv (2.6s)
info: Mathlib/Logic/Equiv/PartialEquiv.lean:606:0: [Elab.async] [0.014963] elaborating proof of PartialEquiv.trans_symm_eq_symm_trans_symm
[Elab.definition.value] [0.014595] PartialEquiv.trans_symm_eq_symm_trans_symm
[Elab.step] [0.014212] tauto
[Elab.step] [0.014194] tauto
[Elab.step] [0.014178] tauto
Build completed successfully (373 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-logic |
1/1 |
Mathlib/Logic/Equiv/PartialEquiv.lean |
1 |
1 |
['github-actions'] |
nobody |
3-32625 3 days ago |
3-34504 3 days ago |
3-34548 3 days |
28567 |
euprunin author:euprunin |
chore(NumberTheory): golf entire `equivHeightOneSpectrum_symm_apply` and `is_rat` using `tauto` |
---
Show trace profiling of equivHeightOneSpectrum_symm_apply : 2804 ms before, 25 ms after 🎉
### Trace profiling of `equivHeightOneSpectrum_symm_apply` before PR 28567
```diff
diff --git a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean
index c2a297a496..e86546890b 100644
--- a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean
+++ b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean
@@ -306,6 +306,7 @@ open NumberField.FinitePlace NumberField.RingOfIntegers
NumberField.RingOfIntegers.HeightOneSpectrum
open scoped NumberField
+set_option trace.profiler true in
lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) :
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by
have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by
```
```
ℹ [2937/2937] Built Mathlib.NumberTheory.NumberField.FinitePlaces (11s)
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.020076] theorem equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) :
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ :=
by
have : v = (equivHeightOneSpectrum.symm v).maximalIdeal :=
by
change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm
convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm
[Elab.definition.header] [0.018830] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply
[Elab.step] [0.017695] expected type: Sort ?u.35696, term
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖
[Elab.step] [0.017684] expected type: Sort ?u.35696, term
binrel% Eq✝ ((equivHeightOneSpectrum.symm v) x) ‖embedding v x‖
[Elab.step] [0.012412] expected type: , term
norm✝ (embedding v x)
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.020418] lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) :
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ :=
by
have : v = (equivHeightOneSpectrum.symm v).maximalIdeal :=
by
change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm
convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.async] [2.829597] elaborating proof of IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply
[Elab.definition.value] [2.803590] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply
[Elab.step] [2.757940]
have : v = (equivHeightOneSpectrum.symm v).maximalIdeal :=
by
change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm
convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm
[Elab.step] [2.757927]
have : v = (equivHeightOneSpectrum.symm v).maximalIdeal :=
by
change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm
convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm
[Elab.step] [0.013857] have : v = (equivHeightOneSpectrum.symm v).maximalIdeal :=
by
change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm
[Elab.step] [0.013839] focus
refine
no_implicit_lambda%
(have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm)
[Elab.step] [0.013828]
refine
no_implicit_lambda%
(have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm)
[Elab.step] [0.013819]
refine
no_implicit_lambda%
(have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := ?body✝;
?_)
case body✝ =>
with_annotate_state"by"
( change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
exact (Equiv.apply_symm_apply _ v).symm)
[Elab.step] [2.744044] convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm
[Meta.isDefEq] [0.133147] ❌️ (NumberField.instNormedFieldValuedAdicCompletion
v).toNorm =?= (NumberField.instNormedFieldValuedAdicCompletion
(equivHeightOneSpectrum.symm v).maximalIdeal).toNorm
[Meta.isDefEq] [0.133093] ❌️ adicCompletion K
v =?= adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq] [0.133067] ❌️ (valuation K
v).Completion =?= (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal).Completion
[Meta.isDefEq] [0.133044] ❌️ UniformSpace.Completion
(WithVal
(valuation K
v)) =?= UniformSpace.Completion
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq.delta] [0.130279] ❌️ UniformSpace.Completion
(WithVal
(valuation K
v)) =?= UniformSpace.Completion
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.130237] ❌️ (WithVal.instValued
(valuation K
v)).toUniformSpace =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace
[Meta.isDefEq] [0.130207] ❌️ (WithVal.instValued
(valuation K
v)).1 =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1
[Meta.isDefEq.delta] [0.010379] ❌️ WithVal.instValued
(valuation K
v) =?= WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)
[Meta.isDefEq] [0.010339] ❌️ valuation K
v =?= valuation K (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq] [0.010050] ❌️ v.intValuation.extendToLocalization ⋯
K =?= (equivHeightOneSpectrum.symm v).maximalIdeal.intValuation.extendToLocalization ⋯
K
[Meta.isDefEq] [0.111493] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq.delta] [0.107748] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.105087] ❌️ ⋯.topology =?= ⋯.topology
[Meta.isDefEq] [0.101115] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology
[Meta.isDefEq] [0.094533] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq.delta] [0.051577] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.051483] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.051440] ❌️ fun x ↦
Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= fun x ↦
Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.051427] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq.delta] [0.022255] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.012843] ✅️ fun y ↦ x + y =?= fun y ↦ x + y
[Meta.isDefEq] [0.012833] ✅️ x + y =?= x + y
[Meta.isDefEq] [0.012699] ✅️ instHAdd.1 x y =?= instHAdd.1 x y
[Meta.isDefEq] [0.012670] ✅️ Add.add x y =?= Add.add x y
[Meta.isDefEq] [0.011791] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
x
y =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
x y
[Meta.isDefEq] [0.011068] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
[Meta.isDefEq] [0.029128] ❌️ {
sets :=
(Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯,
inter_sets :=
⋯ } =?= {
sets :=
(Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ }
[Meta.isDefEq] [0.028994] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq.delta] [0.024713] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.014160] ✅️ Set.preimage fun y ↦
x + y =?= Set.preimage fun y ↦ x + y
[Meta.isDefEq.delta] [0.014145] ✅️ Set.preimage fun y ↦
x + y =?= Set.preimage fun y ↦ x + y
[Meta.isDefEq] [0.014097] ✅️ fun y ↦ x + y =?= fun y ↦ x + y
[Meta.isDefEq] [0.014077] ✅️ x + y =?= x + y
[Meta.isDefEq] [0.013915] ✅️ instHAdd.1 x y =?= instHAdd.1 x y
[Meta.isDefEq] [0.013877] ✅️ Add.add x y =?= Add.add x y
[Meta.isDefEq] [0.012647] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
x
y =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
x y
[Meta.isDefEq] [0.011981] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
[Meta.isDefEq] [0.011368] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1
[Meta.isDefEq] [0.010841] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddMonoid.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddMonoid.1
[Meta.isDefEq] [0.010492] ❌️ ⋯.toRingFilterBasis.filter.sets =?= ⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.010467] ❌️ ⋯.toRingFilterBasis.filter.1 =?= ⋯.toRingFilterBasis.filter.1
[Meta.isDefEq] [0.042922] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯,
isOpen_sUnion :=
⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ }
[Meta.isDefEq] [0.042727] ❌️ fun s ↦
∀ a ∈ s,
s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.042647] ❌️ s ∈
⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.042637] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a)
s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s
[Meta.isDefEq] [0.042602] ❌️ s ∈
(⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets
[Meta.isDefEq] [0.042592] ❌️ Set.instMembership.1
(⋯.toRingFilterBasis.N a).sets
s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.042573] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem
s =?= (⋯.toRingFilterBasis.N a).sets.Mem s
[Meta.isDefEq] [0.042565] ❌️ (⋯.toRingFilterBasis.N a).sets
s =?= (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.042548] ❌️ (⋯.toRingFilterBasis.N a).1
s =?= (⋯.toRingFilterBasis.N a).1 s
[Meta.isDefEq] [0.042482] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq.delta] [0.037779] ❌️ ((Set.preimage fun y ↦
a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq] [0.023557] ✅️ Set.preimage fun y ↦
a + y =?= Set.preimage fun y ↦ a + y
[Meta.isDefEq.delta] [0.023548] ✅️ Set.preimage fun y ↦
a + y =?= Set.preimage fun y ↦ a + y
[Meta.isDefEq] [0.023508] ✅️ fun y ↦ a + y =?= fun y ↦ a + y
[Meta.isDefEq] [0.023495] ✅️ a + y =?= a + y
[Meta.isDefEq] [0.023382] ✅️ instHAdd.1 a
y =?= instHAdd.1 a y
[Meta.isDefEq] [0.023358] ✅️ Add.add a
y =?= Add.add a y
[Meta.isDefEq] [0.022559] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
a
y =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
a y
[Meta.isDefEq] [0.022129] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
[Meta.isDefEq] [0.021710] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddSemigroup.1
[Meta.isDefEq] [0.021354] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddMonoid.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddMonoid.1
[Meta.isDefEq] [0.021012] ✅️ (WithVal.instRing
(valuation K
v)).toAddCommMonoid.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddCommMonoid.1
[Meta.isDefEq] [0.020829] ✅️ (WithVal.instRing
(valuation K
v)).toNonUnitalNonAssocSemiring.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toNonUnitalNonAssocSemiring.1
[Meta.isDefEq] [0.020664] ✅️ (WithVal.instRing
(valuation K
v)).toNonUnitalSemiring.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toNonUnitalSemiring.1
[Meta.isDefEq] [0.020519] ✅️ (WithVal.instRing
(valuation K
v)).toSemiring.1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toSemiring.1
[Meta.isDefEq] [0.020385] ✅️ (WithVal.instRing
(valuation K
v)).1 =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).1
[Meta.isDefEq.delta] [0.020202] ❌️ WithVal.instRing
(valuation K
v) =?= WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)
[Meta.isDefEq] [0.020193] ❌️ valuation
K
v =?= valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal
[Meta.isDefEq] [0.019987] ❌️ v.intValuation.extendToLocalization
⋯
K =?= (equivHeightOneSpectrum.symm
v).maximalIdeal.intValuation.extendToLocalization
⋯ K
[Meta.isDefEq] [0.017897] ❌️ let
f :=
IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞 K))
K;
have h := ⋯;
let __src := f.lift h;
{
toFun :=
(↑__src).toFun,
map_zero' := ⋯,
map_one' := ⋯,
map_mul' := ⋯,
map_add_le_max' :=
⋯ } =?= let f :=
IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞 K))
K;
have h := ⋯;
let __src := f.lift h;
{
toFun :=
(↑__src).toFun,
map_zero' := ⋯,
map_one' := ⋯,
map_mul' := ⋯,
map_add_le_max' := ⋯ }
[Meta.isDefEq] [0.017886] ❌️ {
toFun :=
(↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞 K))
K).lift
⋯)).toFun,
map_zero' := ⋯,
map_one' := ⋯,
map_mul' := ⋯,
map_add_le_max' :=
⋯ } =?= {
toFun :=
(↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞 K))
K).lift
⋯)).toFun,
map_zero' := ⋯,
map_one' := ⋯,
map_mul' := ⋯,
map_add_le_max' :=
⋯ }
[Meta.isDefEq] [0.017832] ❌️ {
toFun :=
(↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).toFun,
map_zero' := ⋯,
map_one' := ⋯,
map_mul' :=
⋯ } =?= {
toFun :=
(↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).toFun,
map_zero' := ⋯,
map_one' := ⋯,
map_mul' := ⋯ }
[Meta.isDefEq] [0.017791] ❌️ {
toFun :=
(↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).toFun,
map_zero' :=
⋯ } =?= {
toFun :=
(↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).toFun,
map_zero' := ⋯ }
[Meta.isDefEq] [0.017743] ❌️ (↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).toFun =?= (↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).toFun
[Meta.isDefEq] [0.017709] ❌️ (↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).1 =?= (↑((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).lift
⋯)).1
[Meta.isDefEq] [0.011489] ❌️ fun
z ↦
↑v.intValuation.toMonoidWithZeroHom
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
z).1 *
↑((IsUnit.liftRight
((↑v.intValuation.toMonoidWithZeroHom).restrict
(nonZeroDivisors
(𝓞
K)))
⋯)
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
z).2)⁻¹ =?= fun
z ↦
↑(equivHeightOneSpectrum.symm
v).maximalIdeal.intValuation.toMonoidWithZeroHom
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
z).1 *
↑((IsUnit.liftRight
((↑(equivHeightOneSpectrum.symm
v).maximalIdeal.intValuation.toMonoidWithZeroHom).restrict
(nonZeroDivisors
(𝓞
K)))
⋯)
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
z).2)⁻¹
[Meta.isDefEq] [0.011481] ❌️ ↑v.intValuation.toMonoidWithZeroHom
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
z).1 *
↑((IsUnit.liftRight
((↑v.intValuation.toMonoidWithZeroHom).restrict
(nonZeroDivisors
(𝓞
K)))
⋯)
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
z).2)⁻¹ =?= ↑(equivHeightOneSpectrum.symm
v).maximalIdeal.intValuation.toMonoidWithZeroHom
((IsLocalization.toLocalizationMap
(nonZeroDivisors
(𝓞
K))
K).sec
[… 5521 lines omitted …]
[Meta.isDefEq.delta] [0.028740] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.028599] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.028574] ❌️ fun x ↦
Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= fun x ↦
Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.028563] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq.delta] [0.012663] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.015876] ❌️ {
sets :=
(Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯,
inter_sets :=
⋯ } =?= {
sets :=
(Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ }
[Meta.isDefEq] [0.015723] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦
x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq.delta] [0.013386] ❌️ (Set.preimage fun y ↦
x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦
x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.022058] ❌️ {
IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯,
isOpen_sUnion :=
⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ }
[Meta.isDefEq] [0.021738] ❌️ fun s ↦
∀ a ∈ s,
s ∈
⋯.toRingFilterBasis.N
a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.021682] ❌️ s ∈
⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.021673] ❌️ Filter.instMembership.1
(⋯.toRingFilterBasis.N a)
s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s
[Meta.isDefEq] [0.021653] ❌️ s ∈
(⋯.toRingFilterBasis.N
a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets
[Meta.isDefEq] [0.021643] ❌️ Set.instMembership.1
(⋯.toRingFilterBasis.N a).sets
s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.021628] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem
s =?= (⋯.toRingFilterBasis.N a).sets.Mem s
[Meta.isDefEq] [0.021612] ❌️ (⋯.toRingFilterBasis.N a).sets
s =?= (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.021597] ❌️ (⋯.toRingFilterBasis.N a).1
s =?= (⋯.toRingFilterBasis.N a).1 s
[Meta.isDefEq] [0.021532] ❌️ ((Set.preimage fun y ↦
a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq.delta] [0.015418] ❌️ ((Set.preimage
fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq] [0.062765] ❌️ Valued.isTopologicalDivisionRing =?= Valued.isTopologicalDivisionRing
[Meta.isDefEq] [0.062760] ❌️ IsTopologicalDivisionRing
(WithVal
(valuation K
v)) =?= IsTopologicalDivisionRing
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.056042] ❌️ (WithVal.instValued
(valuation K
v)).toTopologicalSpace =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toTopologicalSpace
[Meta.isDefEq] [0.056020] ❌️ (WithVal.instValued
(valuation K
v)).toUniformSpace.1 =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace.1
[Meta.isDefEq.delta] [0.055715] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.053667] ❌️ ⋯.topology =?= ⋯.topology
[Meta.isDefEq] [0.045483] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology
[Meta.isDefEq] [0.041145] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq.delta] [0.024331] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.024167] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.024143] ❌️ fun x ↦
Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= fun x ↦
Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.024132] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq.delta] [0.010985] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.013123] ❌️ {
sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯,
inter_sets :=
⋯ } =?= {
sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ }
[Meta.isDefEq] [0.012996] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq.delta] [0.010646] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.016788] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯,
isOpen_sUnion :=
⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯,
isOpen_inter := ⋯, isOpen_sUnion := ⋯ }
[Meta.isDefEq] [0.016603] ❌️ fun s ↦
∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.016547] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.016539] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a)
s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s
[Meta.isDefEq] [0.016519] ❌️ s ∈
(⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets
[Meta.isDefEq] [0.016511] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets
s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.016497] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem
s =?= (⋯.toRingFilterBasis.N a).sets.Mem s
[Meta.isDefEq] [0.016490] ❌️ (⋯.toRingFilterBasis.N a).sets
s =?= (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.016477] ❌️ (⋯.toRingFilterBasis.N a).1
s =?= (⋯.toRingFilterBasis.N a).1 s
[Meta.isDefEq] [0.016416] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq.delta] [0.013840] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq] [0.065095] ❌️ Valued.completable =?= Valued.completable
[Meta.isDefEq] [0.065089] ❌️ CompletableTopField
(WithVal
(valuation K
v)) =?= CompletableTopField (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.061554] ❌️ (WithVal.instValued
(valuation K
v)).toUniformSpace =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace
[Meta.isDefEq] [0.061541] ❌️ (WithVal.instValued
(valuation K
v)).1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1
[Meta.isDefEq] [0.057549] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq.delta] [0.055739] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.055144] ❌️ ⋯.topology =?= ⋯.topology
[Meta.isDefEq] [0.053139] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology
[Meta.isDefEq] [0.049083] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq.delta] [0.031309] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.031171] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.031150] ❌️ fun x ↦
Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= fun x ↦
Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.031140] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq.delta] [0.017538] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.010219] ❌️ ⋯.toRingFilterBasis.filter =?= ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.013581] ❌️ {
sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯,
inter_sets :=
⋯ } =?= {
sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ }
[Meta.isDefEq] [0.013449] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq.delta] [0.010987] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.017750] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯,
isOpen_sUnion :=
⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯,
isOpen_inter := ⋯, isOpen_sUnion := ⋯ }
[Meta.isDefEq] [0.017573] ❌️ fun s ↦
∀ a ∈ s,
s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.017514] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.017506] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a)
s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s
[Meta.isDefEq] [0.017485] ❌️ s ∈
(⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets
[Meta.isDefEq] [0.017476] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets
s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.017461] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem
s =?= (⋯.toRingFilterBasis.N a).sets.Mem s
[Meta.isDefEq] [0.017453] ❌️ (⋯.toRingFilterBasis.N a).sets
s =?= (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.017439] ❌️ (⋯.toRingFilterBasis.N a).1
s =?= (⋯.toRingFilterBasis.N a).1 s
[Meta.isDefEq] [0.017371] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq.delta] [0.012205] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq] [0.080791] ❌️ (WithVal.instValued
(valuation K
v)).toIsUniformAddGroup =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toIsUniformAddGroup
[Meta.isDefEq] [0.080785] ❌️ IsUniformAddGroup
(WithVal
(valuation K
v)) =?= IsUniformAddGroup (WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.080756] ❌️ (WithVal.instValued
(valuation K
v)).toUniformSpace =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace
[Meta.isDefEq] [0.080746] ❌️ (WithVal.instValued
(valuation K
v)).1 =?= (WithVal.instValued (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1
[Meta.isDefEq] [0.073536] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq.delta] [0.071877] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.071310] ❌️ ⋯.topology =?= ⋯.topology
[Meta.isDefEq] [0.069338] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology
[Meta.isDefEq] [0.065229] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq.delta] [0.042069] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.041932] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.041909] ❌️ fun x ↦
Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= fun x ↦
Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.041899] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq.delta] [0.020635] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.010872] ✅️ fun y ↦ x + y =?= fun y ↦ x + y
[Meta.isDefEq] [0.010863] ✅️ x + y =?= x + y
[Meta.isDefEq] [0.010764] ✅️ instHAdd.1 x y =?= instHAdd.1 x y
[Meta.isDefEq] [0.010739] ✅️ Add.add x y =?= Add.add x y
[Meta.isDefEq] [0.010117] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
x
y =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
x y
[Meta.isDefEq] [0.021241] ❌️ {
sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯,
inter_sets :=
⋯ } =?= {
sets := (Set.preimage fun y ↦ x + y) ⁻¹' ⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ }
[Meta.isDefEq] [0.021097] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq.delta] [0.018373] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.023135] ❌️ { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯,
isOpen_sUnion :=
⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a, isOpen_univ := ⋯,
isOpen_inter := ⋯, isOpen_sUnion := ⋯ }
[Meta.isDefEq] [0.022963] ❌️ fun s ↦
∀ a ∈ s,
s ∈ ⋯.toRingFilterBasis.N a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.022900] ❌️ s ∈ ⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.022892] ❌️ Filter.instMembership.1 (⋯.toRingFilterBasis.N a)
s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s
[Meta.isDefEq] [0.022871] ❌️ s ∈
(⋯.toRingFilterBasis.N a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets
[Meta.isDefEq] [0.022862] ❌️ Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets
s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.022846] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem
s =?= (⋯.toRingFilterBasis.N a).sets.Mem s
[Meta.isDefEq] [0.022838] ❌️ (⋯.toRingFilterBasis.N a).sets
s =?= (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.022823] ❌️ (⋯.toRingFilterBasis.N a).1
s =?= (⋯.toRingFilterBasis.N a).1 s
[Meta.isDefEq] [0.022756] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq.delta] [0.017716] ❌️ ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq] [0.011722] ✅️ Set.preimage fun y ↦
a + y =?= Set.preimage fun y ↦ a + y
[Meta.isDefEq.delta] [0.011714] ✅️ Set.preimage fun y ↦
a + y =?= Set.preimage fun y ↦ a + y
[Meta.isDefEq] [0.011690] ✅️ fun y ↦ a + y =?= fun y ↦ a + y
[Meta.isDefEq] [0.011681] ✅️ a + y =?= a + y
[Meta.isDefEq] [0.011580] ✅️ instHAdd.1 a y =?= instHAdd.1 a y
[Meta.isDefEq] [0.011555] ✅️ Add.add a y =?= Add.add a y
[Meta.isDefEq] [0.010344] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
a
y =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
a y
[Meta.isDefEq] [0.061446] ❌️ ?a ≍ ?a' =?= embedding v ≍ embedding (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq] [0.061372] ❌️ ?a' =?= embedding (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq.assign] [0.061364] ❌️ ?a' := embedding (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq.assign.checkTypes] [0.061357] ❌️ (?a' : WithVal (valuation K v) →+*
adicCompletion K
v) := (embedding
(equivHeightOneSpectrum.symm
v).maximalIdeal : WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) →+*
adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal)
[Meta.isDefEq] [0.061356] ❌️ WithVal (valuation K v) →+*
adicCompletion K
v =?= WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) →+*
adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq] [0.061351] ❌️ WithVal (valuation K v) →+*
adicCompletion K
v =?= WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal) →+*
adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq] [0.061324] ❌️ adicCompletion K
v =?= adicCompletion K (equivHeightOneSpectrum.symm v).maximalIdeal
[Meta.isDefEq] [0.061312] ❌️ (valuation K
v).Completion =?= (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal).Completion
[Meta.isDefEq] [0.061302] ❌️ UniformSpace.Completion
(WithVal
(valuation K
v)) =?= UniformSpace.Completion
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq.delta] [0.060629] ❌️ UniformSpace.Completion
(WithVal
(valuation K
v)) =?= UniformSpace.Completion
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.060616] ❌️ (WithVal.instValued
(valuation K
v)).toUniformSpace =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).toUniformSpace
[Meta.isDefEq] [0.060605] ❌️ (WithVal.instValued
(valuation K
v)).1 =?= (WithVal.instValued
(valuation K (equivHeightOneSpectrum.symm v).maximalIdeal)).1
[Meta.isDefEq] [0.053356] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq.delta] [0.051709] ❌️ IsTopologicalAddGroup.toUniformSpace
(WithVal
(valuation K
v)) =?= IsTopologicalAddGroup.toUniformSpace
(WithVal (valuation K (equivHeightOneSpectrum.symm v).maximalIdeal))
[Meta.isDefEq] [0.051149] ❌️ ⋯.topology =?= ⋯.topology
[Meta.isDefEq] [0.049147] ❌️ ⋯.toRingFilterBasis.topology =?= ⋯.toRingFilterBasis.topology
[Meta.isDefEq] [0.044782] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N
[Meta.isDefEq.delta] [0.023184] ❌️ TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N =?= TopologicalSpace.mkOfNhds
⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.023070] ❌️ ⋯.toRingFilterBasis.N =?= ⋯.toRingFilterBasis.N
[Meta.isDefEq] [0.023047] ❌️ fun x ↦
Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= fun x ↦
Filter.map (fun y ↦ x + y) ⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.023037] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq.delta] [0.010501] ❌️ Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter =?= Filter.map (fun y ↦ x + y)
⋯.toRingFilterBasis.filter
[Meta.isDefEq] [0.012513] ❌️ {
sets :=
(Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯,
inter_sets :=
⋯ } =?= {
sets :=
(Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets,
univ_sets := ⋯, sets_of_superset := ⋯, inter_sets := ⋯ }
[Meta.isDefEq] [0.012377] ❌️ (Set.preimage fun y ↦ x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets =?= (Set.preimage fun y ↦
x + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets
[Meta.isDefEq] [0.021573] ❌️ {
IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯,
isOpen_sUnion :=
⋯ } =?= { IsOpen := fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a,
isOpen_univ := ⋯, isOpen_inter := ⋯, isOpen_sUnion := ⋯ }
[Meta.isDefEq] [0.021387] ❌️ fun s ↦
∀ a ∈ s,
s ∈
⋯.toRingFilterBasis.N
a =?= fun s ↦ ∀ a ∈ s, s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.021331] ❌️ s ∈
⋯.toRingFilterBasis.N a =?= s ∈ ⋯.toRingFilterBasis.N a
[Meta.isDefEq] [0.021323] ❌️ Filter.instMembership.1
(⋯.toRingFilterBasis.N a)
s =?= Filter.instMembership.1 (⋯.toRingFilterBasis.N a) s
[Meta.isDefEq] [0.021302] ❌️ s ∈
(⋯.toRingFilterBasis.N
a).sets =?= s ∈ (⋯.toRingFilterBasis.N a).sets
[Meta.isDefEq] [0.021293] ❌️ Set.instMembership.1
(⋯.toRingFilterBasis.N a).sets
s =?= Set.instMembership.1 (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.021277] ❌️ (⋯.toRingFilterBasis.N a).sets.Mem
s =?= (⋯.toRingFilterBasis.N a).sets.Mem s
[Meta.isDefEq] [0.021269] ❌️ (⋯.toRingFilterBasis.N a).sets
s =?= (⋯.toRingFilterBasis.N a).sets s
[Meta.isDefEq] [0.021256] ❌️ (⋯.toRingFilterBasis.N a).1
s =?= (⋯.toRingFilterBasis.N a).1 s
[Meta.isDefEq] [0.021192] ❌️ ((Set.preimage fun y ↦
a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq.delta] [0.018632] ❌️ ((Set.preimage
fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s =?= ((Set.preimage fun y ↦ a + y) ⁻¹'
⋯.toRingFilterBasis.filter.sets)
s
[Meta.isDefEq] [0.010832] ✅️ Set.preimage fun y ↦
a + y =?= Set.preimage fun y ↦ a + y
[Meta.isDefEq.delta] [0.010824] ✅️ Set.preimage
fun y ↦ a + y =?= Set.preimage fun y ↦ a + y
[Meta.isDefEq] [0.010785] ✅️ fun y ↦
a + y =?= fun y ↦ a + y
[Meta.isDefEq] [0.010776] ✅️ a + y =?= a + y
[Meta.isDefEq] [0.010681] ✅️ instHAdd.1 a
y =?= instHAdd.1 a y
[Meta.isDefEq] [0.010658] ✅️ Add.add a
y =?= Add.add a y
[Meta.isDefEq] [0.010025] ✅️ (WithVal.instRing
(valuation K
v)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
a
y =?= (WithVal.instRing
(valuation K
(equivHeightOneSpectrum.symm
v).maximalIdeal)).toAddGroupWithOne.toAddGroup.toAddZeroClass.toAdd.1
a y
[Elab.def.processPreDef] [0.020185] process pre-definitions
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:6: [Elab.async] [2.973953] Lean.addDecl
[Kernel] [2.973884] ✅️ typechecking declarations [IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply]
Build completed successfully (2937 jobs).
```
### Trace profiling of `equivHeightOneSpectrum_symm_apply` after PR 28567
```diff
diff --git a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean
index c2a297a496..1cb6af99ea 100644
--- a/Mathlib/NumberTheory/NumberField/FinitePlaces.lean
+++ b/Mathlib/NumberTheory/NumberField/FinitePlaces.lean
@@ -306,12 +306,10 @@ open NumberField.FinitePlace NumberField.RingOfIntegers
NumberField.RingOfIntegers.HeightOneSpectrum
open scoped NumberField
+set_option trace.profiler true in
lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) :
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by
- have : v = (equivHeightOneSpectrum.symm v).maximalIdeal := by
- change v = equivHeightOneSpectrum (equivHeightOneSpectrum.symm v)
- exact (Equiv.apply_symm_apply _ v).symm
- convert (norm_embedding_eq (equivHeightOneSpectrum.symm v) x).symm
+ tauto
open Ideal in
lemma embedding_mul_absNorm (v : HeightOneSpectrum (𝓞 K)) {x : 𝓞 (WithVal (v.valuation K))}
diff --git a/Mathlib/NumberTheory/Padics/PadicNumbers.lean b/Mathlib/NumberTheory/Padics/PadicNumbers.lean
index efe52e430d..948dd4cee3 100644
--- a/Mathlib/NumberTheory/Padics/PadicNumbers.lean
+++ b/Mathlib/NumberTheory/Padics/PadicNumbers.lean
@@ -882,11 +882,7 @@ protected theorem image {q : ℚ_[p]} : q ≠ 0 → ∃ n : ℤ, ‖q‖ = ↑((
⟨n, by rw [← hn]; rfl⟩
protected theorem is_rat (q : ℚ_[p]) : ∃ q' : ℚ, ‖q‖ = q' := by
- classical
- exact if h : q = 0 then ⟨0, by simp [h]⟩
- else
- let ⟨n, hn⟩ := padicNormE.image h
- ⟨_, hn⟩
+ tauto
/-- `ratNorm q`, for a `p`-adic number `q` is the `p`-adic norm of `q`, as rational number.
```
```
ℹ [2937/2937] Built Mathlib.NumberTheory.NumberField.FinitePlaces (4.2s)
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.026755] theorem equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) :
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by tauto
[Elab.definition.header] [0.025728] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply
[Elab.step] [0.025064] expected type: Sort ?u.35696, term
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖
[Elab.step] [0.025056] expected type: Sort ?u.35696, term
binrel% Eq✝ ((equivHeightOneSpectrum.symm v) x) ‖embedding v x‖
[Elab.step] [0.012416] expected type: , term
norm✝ (embedding v x)
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.command] [0.026828] lemma equivHeightOneSpectrum_symm_apply (v : HeightOneSpectrum (𝓞 K)) (x : K) :
(equivHeightOneSpectrum.symm v) x = ‖embedding v x‖ := by tauto
info: Mathlib/NumberTheory/NumberField/FinitePlaces.lean:310:0: [Elab.async] [0.028408] elaborating proof of IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply
[Elab.definition.value] [0.024649] IsDedekindDomain.HeightOneSpectrum.equivHeightOneSpectrum_symm_apply
[Elab.step] [0.024119] tauto
[Elab.step] [0.024105] tauto
[Elab.step] [0.024091] tauto
[Elab.step] [0.013324] rfl
[Elab.step] [0.012677] eq_refl
[Meta.isDefEq] [0.012655] ✅️ (equivHeightOneSpectrum.symm v) x =?= ‖(embedding v) x‖
[Meta.isDefEq] [0.012305] ✅️ instFunLikeReal.1 (equivHeightOneSpectrum.symm v)
x =?= (NumberField.instNormedFieldValuedAdicCompletion v).toNorm.1 ((embedding v) x)
[Meta.isDefEq] [0.012206] ✅️ ↑(equivHeightOneSpectrum.symm v)
x =?= (NumberField.instNormedFieldValuedAdicCompletion v).toNorm.1 ((embedding v) x)
[Meta.isDefEq] [0.012117] ✅️ ↑(equivHeightOneSpectrum.symm v) x =?= Valued.norm ((embedding v) x)
[Meta.isDefEq] [0.012052] ✅️ ↑(equivHeightOneSpectrum.symm v)
x =?= ↑((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x)))
[Meta.isDefEq] [0.012019] ✅️ ↑(equivHeightOneSpectrum.symm v)
x =?= ↑((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x)))
[Meta.isDefEq] [0.011982] ✅️ ↑(equivHeightOneSpectrum.symm v)
x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1
[Meta.isDefEq] [0.010958] ✅️ AbsoluteValue.funLike.1 (↑(equivHeightOneSpectrum.symm v))
x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1
[Meta.isDefEq] [0.010808] ✅️ (↑(equivHeightOneSpectrum.symm v)).toFun
x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1
[Meta.isDefEq] [0.010382] ✅️ (↑(equivHeightOneSpectrum.symm v)).toMulHom.1
x =?= ((Valuation.RankOne.hom Valued.v) (Valued.v ((embedding v) x))).1
Build completed successfully (2937 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
2/9 |
Mathlib/NumberTheory/NumberField/FinitePlaces.lean,Mathlib/NumberTheory/Padics/PadicNumbers.lean |
2 |
1 |
['github-actions'] |
nobody |
3-32561 3 days ago |
3-34418 3 days ago |
3-34460 3 days |
28568 |
euprunin author:euprunin |
chore(Order): golf entire `IsBoundedUnder.eventually_le` and `ωSup_zip` using `tauto` |
---
Show trace profiling of IsBoundedUnder.eventually_le : 29 ms before, <10 ms after 🎉
### Trace profiling of `IsBoundedUnder.eventually_le` before PR 28568
```diff
diff --git a/Mathlib/Order/Filter/IsBounded.lean b/Mathlib/Order/Filter/IsBounded.lean
index 0b39507eeb..2cccc61fed 100644
--- a/Mathlib/Order/Filter/IsBounded.lean
+++ b/Mathlib/Order/Filter/IsBounded.lean
@@ -89,6 +89,7 @@ lemma Tendsto.isBoundedUnder_comp {ι κ X : Type*} {r : X → X → Prop} {f :
section Preorder
variable [Preorder α] {f : Filter β} {u : β → α} {s : Set β}
+set_option trace.profiler true in
lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) :
∃ a, ∀ᶠ x in f, u x ≤ a := by
obtain ⟨a, ha⟩ := h
```
```
ℹ [749/749] Built Mathlib.Order.Filter.IsBounded (2.5s)
info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.async] [0.029670] elaborating proof of Filter.IsBoundedUnder.eventually_le
[Elab.definition.value] [0.029304] Filter.IsBoundedUnder.eventually_le
[Elab.step] [0.029016]
obtain ⟨a, ha⟩ := h
use a
exact eventually_map.1 ha
[Elab.step] [0.029003]
obtain ⟨a, ha⟩ := h
use a
exact eventually_map.1 ha
[Elab.step] [0.025774] use a
Build completed successfully (749 jobs).
```
### Trace profiling of `IsBoundedUnder.eventually_le` after PR 28568
```diff
diff --git a/Mathlib/Order/Filter/IsBounded.lean b/Mathlib/Order/Filter/IsBounded.lean
index 0b39507eeb..6c37d8738d 100644
--- a/Mathlib/Order/Filter/IsBounded.lean
+++ b/Mathlib/Order/Filter/IsBounded.lean
@@ -89,11 +89,10 @@ lemma Tendsto.isBoundedUnder_comp {ι κ X : Type*} {r : X → X → Prop} {f :
section Preorder
variable [Preorder α] {f : Filter β} {u : β → α} {s : Set β}
+set_option trace.profiler true in
lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) :
∃ a, ∀ᶠ x in f, u x ≤ a := by
- obtain ⟨a, ha⟩ := h
- use a
- exact eventually_map.1 ha
+ tauto
lemma IsBoundedUnder.eventually_ge (h : IsBoundedUnder (· ≥ ·) f u) :
∃ a, ∀ᶠ x in f, a ≤ u x :=
diff --git a/Mathlib/Order/OmegaCompletePartialOrder.lean b/Mathlib/Order/OmegaCompletePartialOrder.lean
index 219ddb0595..759fda09a7 100644
--- a/Mathlib/Order/OmegaCompletePartialOrder.lean
+++ b/Mathlib/Order/OmegaCompletePartialOrder.lean
@@ -422,8 +422,7 @@ instance : OmegaCompletePartialOrder (α × β) where
le_ωSup c i := ⟨le_ωSup (c.map OrderHom.fst) i, le_ωSup (c.map OrderHom.snd) i⟩
theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by
- apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩
- simp [ωSup_le_iff, forall_and]
+ tauto
end Prod
```
```
ℹ [749/749] Built Mathlib.Order.Filter.IsBounded (2.5s)
info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.command] [0.015651] theorem eventually_le (h : IsBoundedUnder (· ≤ ·) f u) : ∃ a, ∀ᶠ x in f, u x ≤ a := by tauto
info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.command] [0.015910] theorem IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) :
∃ a, ∀ᶠ x in f, u x ≤ a := by tauto
info: Mathlib/Order/Filter/IsBounded.lean:93:0: [Elab.command] [0.015955] lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) :
∃ a, ∀ᶠ x in f, u x ≤ a := by tauto
Build completed successfully (749 jobs).
```
---
Show trace profiling of ωSup_zip : 25 ms before, 13 ms after 🎉
### Trace profiling of `ωSup_zip` before PR 28568
```diff
diff --git a/Mathlib/Order/OmegaCompletePartialOrder.lean b/Mathlib/Order/OmegaCompletePartialOrder.lean
index 219ddb0595..7d813efc08 100644
--- a/Mathlib/Order/OmegaCompletePartialOrder.lean
+++ b/Mathlib/Order/OmegaCompletePartialOrder.lean
@@ -421,6 +420,7 @@ instance : OmegaCompletePartialOrder (α × β) where
ωSup_le := fun _ _ h => ⟨ωSup_le _ _ fun i => (h i).1, ωSup_le _ _ fun i => (h i).2⟩
le_ωSup c i := ⟨le_ωSup (c.map OrderHom.fst) i, le_ωSup (c.map OrderHom.snd) i⟩
+set_option trace.profiler true in
theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by
apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩
simp [ωSup_le_iff, forall_and]
```
```
ℹ [552/552] Built Mathlib.Order.OmegaCompletePartialOrder (3.1s)
info: Mathlib/Order/OmegaCompletePartialOrder.lean:424:0: [Elab.async] [0.027082] elaborating proof of Prod.ωSup_zip
[Elab.definition.value] [0.025244] Prod.ωSup_zip
[Elab.step] [0.024383]
apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩
simp [ωSup_le_iff, forall_and]
[Elab.step] [0.024368]
apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩
simp [ωSup_le_iff, forall_and]
[Elab.step] [0.023210] simp [ωSup_le_iff, forall_and]
Build completed successfully (552 jobs).
```
### Trace profiling of `ωSup_zip` after PR 28568
```diff
diff --git a/Mathlib/Order/Filter/IsBounded.lean b/Mathlib/Order/Filter/IsBounded.lean
index 0b39507eeb..55bad37314 100644
--- a/Mathlib/Order/Filter/IsBounded.lean
+++ b/Mathlib/Order/Filter/IsBounded.lean
@@ -91,9 +91,7 @@ variable [Preorder α] {f : Filter β} {u : β → α} {s : Set β}
lemma IsBoundedUnder.eventually_le (h : IsBoundedUnder (· ≤ ·) f u) :
∃ a, ∀ᶠ x in f, u x ≤ a := by
- obtain ⟨a, ha⟩ := h
- use a
- exact eventually_map.1 ha
+ tauto
lemma IsBoundedUnder.eventually_ge (h : IsBoundedUnder (· ≥ ·) f u) :
∃ a, ∀ᶠ x in f, a ≤ u x :=
diff --git a/Mathlib/Order/OmegaCompletePartialOrder.lean b/Mathlib/Order/OmegaCompletePartialOrder.lean
index 219ddb0595..e52102f720 100644
--- a/Mathlib/Order/OmegaCompletePartialOrder.lean
+++ b/Mathlib/Order/OmegaCompletePartialOrder.lean
@@ -421,9 +420,9 @@ instance : OmegaCompletePartialOrder (α × β) where
ωSup_le := fun _ _ h => ⟨ωSup_le _ _ fun i => (h i).1, ωSup_le _ _ fun i => (h i).2⟩
le_ωSup c i := ⟨le_ωSup (c.map OrderHom.fst) i, le_ωSup (c.map OrderHom.snd) i⟩
+set_option trace.profiler true in
theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by
- apply eq_of_forall_ge_iff; rintro ⟨z₁, z₂⟩
- simp [ωSup_le_iff, forall_and]
+ tauto
end Prod
```
```
ℹ [552/552] Built Mathlib.Order.OmegaCompletePartialOrder (3.1s)
info: Mathlib/Order/OmegaCompletePartialOrder.lean:424:0: [Elab.command] [0.014348] theorem ωSup_zip (c₀ : Chain α) (c₁ : Chain β) : ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁) := by
tauto
[Elab.definition.header] [0.013159] Prod.ωSup_zip
[Elab.step] [0.011493] expected type: Sort ?u.22301, term
ωSup (c₀.zip c₁) = (ωSup c₀, ωSup c₁)
[Elab.step] [0.011481] expected type: Sort ?u.22301, term
binrel% Eq✝ (ωSup (c₀.zip c₁)) (ωSup c₀, ωSup c₁)
[Elab.step] [0.010391] expected type: , term
ωSup (c₀.zip c₁)
info: Mathlib/Order/OmegaCompletePartialOrder.lean:424:0: [Elab.async] [0.013177] elaborating proof of Prod.ωSup_zip
[Elab.definition.value] [0.012696] Prod.ωSup_zip
[Elab.step] [0.012302] tauto
[Elab.step] [0.012286] tauto
[Elab.step] [0.012266] tauto
Build completed successfully (552 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-order |
2/5 |
Mathlib/Order/Filter/IsBounded.lean,Mathlib/Order/OmegaCompletePartialOrder.lean |
2 |
1 |
['github-actions'] |
nobody |
3-32347 3 days ago |
3-34375 3 days ago |
3-34416 3 days |
28569 |
euprunin author:euprunin |
chore(Probability): golf entire `comp_const` and `piFinset_eq_comap_restrict` using `tauto` |
---
Show trace profiling of _root_.ProbabilityTheory.Kernel.comp_const : 20 ms before, <10 ms after 🎉
### Trace profiling of `_root_.ProbabilityTheory.Kernel.comp_const` before PR 28569
```diff
diff --git a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
index 2cbfe2e461..ced849b4ca 100644
--- a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
+++ b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
@@ -72,6 +72,7 @@ instance [IsZeroOrProbabilityMeasure μ] [IsZeroOrMarkovKernel κ] :
IsZeroOrProbabilityMeasure (κ ∘ₘ μ) := by
rw [← snd_compProd]; infer_instance
+set_option trace.profiler true in
@[simp]
lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) :
κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by
```
```
ℹ [1740/1740] Built Mathlib.Probability.Kernel.Composition.MeasureComp (1.6s)
info: Mathlib/Probability/Kernel/Composition/MeasureComp.lean:76:0: [Elab.command] [0.010029] @[simp]
lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) :
κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) :=
by
ext x s hs
rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply,
bind_apply hs (by fun_prop)]
info: Mathlib/Probability/Kernel/Composition/MeasureComp.lean:76:0: [Elab.async] [0.020986] elaborating proof of ProbabilityTheory.Kernel.comp_const
[Elab.definition.value] [0.020223] ProbabilityTheory.Kernel.comp_const
[Elab.step] [0.019492]
ext x s hs
rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply,
bind_apply hs (by fun_prop)]
[Elab.step] [0.019479]
ext x s hs
rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply,
bind_apply hs (by fun_prop)]
[Elab.step] [0.017845] rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply,
Kernel.const_apply, bind_apply hs (by fun_prop)]
[Elab.step] [0.017823] (rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply,
Kernel.const_apply, bind_apply hs (by fun_prop)];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.017815] rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply,
Kernel.const_apply, bind_apply hs (by fun_prop)];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.017809] rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply,
Kernel.const_apply, bind_apply hs (by fun_prop)];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.017492] rewrite [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply,
Kernel.const_apply, bind_apply hs (by fun_prop)]
Build completed successfully (1740 jobs).
```
### Trace profiling of `_root_.ProbabilityTheory.Kernel.comp_const` after PR 28569
```diff
diff --git a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
index 2cbfe2e461..38c1edaa80 100644
--- a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
+++ b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
@@ -72,12 +72,11 @@ instance [IsZeroOrProbabilityMeasure μ] [IsZeroOrMarkovKernel κ] :
IsZeroOrProbabilityMeasure (κ ∘ₘ μ) := by
rw [← snd_compProd]; infer_instance
+set_option trace.profiler true in
@[simp]
lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) :
κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by
- ext x s hs
- rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply,
- bind_apply hs (by fun_prop)]
+ tauto
lemma map_comp (μ : Measure α) (κ : Kernel α β) {f : β → γ} (hf : Measurable f) :
(κ ∘ₘ μ).map f = (κ.map f) ∘ₘ μ := by
diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean
index 13e2f0025b..78b9c37f5a 100644
--- a/Mathlib/Probability/Process/Filtration.lean
+++ b/Mathlib/Probability/Process/Filtration.lean
@@ -384,12 +384,7 @@ def piFinset : @Filtration (Π i, X i) (Finset ι) _ pi where
lemma piFinset_eq_comap_restrict (s : Finset ι) :
piFinset (X := X) s = pi.comap s.toSet.restrict := by
- apply le_antisymm
- · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft,
- ← comap_comp]
- exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
- · rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
- exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
+ tauto
end piFinset
```
```
✔ [1740/1740] Built Mathlib.Probability.Kernel.Composition.MeasureComp (2.4s)
Build completed successfully (1740 jobs).
```
---
Show trace profiling of piFinset_eq_comap_restrict : 28 ms before, <10 ms after 🎉
### Trace profiling of `piFinset_eq_comap_restrict` before PR 28569
```diff
diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean
index 13e2f0025b..eb3bc149ba 100644
--- a/Mathlib/Probability/Process/Filtration.lean
+++ b/Mathlib/Probability/Process/Filtration.lean
@@ -382,6 +382,7 @@ def piFinset : @Filtration (Π i, X i) (Finset ι) _ pi where
exact comap_mono (measurable_restrict₂ hst).comap_le
le' s := s.measurable_restrict.comap_le
+set_option trace.profiler true in
lemma piFinset_eq_comap_restrict (s : Finset ι) :
piFinset (X := X) s = pi.comap s.toSet.restrict := by
apply le_antisymm
```
```
ℹ [2340/2340] Built Mathlib.Probability.Process.Filtration (1.9s)
info: Mathlib/Probability/Process/Filtration.lean:386:0: [Elab.async] [0.029171] elaborating proof of MeasureTheory.Filtration.piFinset_eq_comap_restrict
[Elab.definition.value] [0.028128] MeasureTheory.Filtration.piFinset_eq_comap_restrict
[Elab.step] [0.027661]
apply le_antisymm
· simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
· rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
[Elab.step] [0.027653]
apply le_antisymm
· simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
· rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
[Elab.step] [0.017833] ·
simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
[Elab.step] [0.017819]
simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
[Elab.step] [0.017815]
simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
[Elab.step] [0.013352] simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ←
MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
Build completed successfully (2340 jobs).
```
### Trace profiling of `piFinset_eq_comap_restrict` after PR 28569
```diff
diff --git a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
index 2cbfe2e461..7f242dd0c5 100644
--- a/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
+++ b/Mathlib/Probability/Kernel/Composition/MeasureComp.lean
@@ -75,9 +75,7 @@ instance [IsZeroOrProbabilityMeasure μ] [IsZeroOrMarkovKernel κ] :
@[simp]
lemma _root_.ProbabilityTheory.Kernel.comp_const (κ : Kernel β γ) (μ : Measure β) :
κ ∘ₖ Kernel.const α μ = Kernel.const α (κ ∘ₘ μ) := by
- ext x s hs
- rw [Kernel.comp_apply, bind_apply hs (by fun_prop), Kernel.const_apply, Kernel.const_apply,
- bind_apply hs (by fun_prop)]
+ tauto
lemma map_comp (μ : Measure α) (κ : Kernel α β) {f : β → γ} (hf : Measurable f) :
(κ ∘ₘ μ).map f = (κ.map f) ∘ₘ μ := by
diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean
index 13e2f0025b..ce51705c7f 100644
--- a/Mathlib/Probability/Process/Filtration.lean
+++ b/Mathlib/Probability/Process/Filtration.lean
@@ -382,14 +382,10 @@ def piFinset : @Filtration (Π i, X i) (Finset ι) _ pi where
exact comap_mono (measurable_restrict₂ hst).comap_le
le' s := s.measurable_restrict.comap_le
+set_option trace.profiler true in
lemma piFinset_eq_comap_restrict (s : Finset ι) :
piFinset (X := X) s = pi.comap s.toSet.restrict := by
- apply le_antisymm
- · simp_rw [piFinset, ← Set.piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft,
- ← comap_comp]
- exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
- · rw [← piCongrLeft_comp_restrict, ← MeasurableEquiv.coe_piCongrLeft, ← comap_comp]
- exact MeasurableSpace.comap_mono <| (MeasurableEquiv.measurable _).comap_le
+ tauto
end piFinset
```
```
✔ [2340/2340] Built Mathlib.Probability.Process.Filtration (1.7s)
Build completed successfully (2340 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
2/9 |
Mathlib/Probability/Kernel/Composition/MeasureComp.lean,Mathlib/Probability/Process/Filtration.lean |
2 |
1 |
['github-actions'] |
nobody |
3-32266 3 days ago |
3-34334 3 days ago |
3-34382 3 days |
28556 |
euprunin author:euprunin |
chore(Algebra): golf entire `linearEquivFunOnFintype_lof`, `mem_valueMonoid`, `ofIsColimitCokernelCofork_f` and more using `tauto` |
---
Show trace profiling of linearEquivFunOnFintype_lof : 81 ms before, 12 ms after 🎉
### Trace profiling of `linearEquivFunOnFintype_lof` before PR 28556
```diff
diff --git a/Mathlib/Algebra/DirectSum/Module.lean b/Mathlib/Algebra/DirectSum/Module.lean
index 9f114bb72d..453547fa5d 100644
--- a/Mathlib/Algebra/DirectSum/Module.lean
+++ b/Mathlib/Algebra/DirectSum/Module.lean
@@ -148,6 +148,7 @@ def linearEquivFunOnFintype [Fintype ι] : (⨁ i, M i) ≃ₗ[R] ∀ i, M i :=
variable {ι M}
+set_option trace.profiler true in
@[simp]
theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) :
(linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by
```
```
ℹ [1122/1122] Built Mathlib.Algebra.DirectSum.Module (3.7s)
info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.command] [0.017342] @[simp]
theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) :
(linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m :=
by
ext a
change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _
convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a
info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.async] [0.083896] elaborating proof of DirectSum.linearEquivFunOnFintype_lof
[Elab.definition.value] [0.081072] DirectSum.linearEquivFunOnFintype_lof
[Elab.step] [0.079142]
ext a
change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _
convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a
[Elab.step] [0.079123]
ext a
change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _
convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a
[Elab.step] [0.018446] change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _
[Elab.step] [0.017469] expected type: Prop, term
(DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _
[Elab.step] [0.017457] expected type: Prop, term
binrel% Eq✝ ((DFinsupp.equivFunOnFintype (lof R ι M i m)) a) _
[Elab.step] [0.017290] expected type: , term
(DFinsupp.equivFunOnFintype (lof R ι M i m)) a
[Elab.step] [0.017226] expected type: , term
(DFinsupp.equivFunOnFintype (lof R ι M i m))
[Elab.step] [0.017215] expected type: , term
DFinsupp.equivFunOnFintype (lof R ι M i m)
[Elab.step] [0.058501] convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a
Build completed successfully (1122 jobs).
```
### Trace profiling of `linearEquivFunOnFintype_lof` after PR 28556
```diff
diff --git a/Mathlib/Algebra/DirectSum/Module.lean b/Mathlib/Algebra/DirectSum/Module.lean
index 9f114bb72d..51e7d0aff8 100644
--- a/Mathlib/Algebra/DirectSum/Module.lean
+++ b/Mathlib/Algebra/DirectSum/Module.lean
@@ -148,12 +148,11 @@ def linearEquivFunOnFintype [Fintype ι] : (⨁ i, M i) ≃ₗ[R] ∀ i, M i :=
variable {ι M}
+set_option trace.profiler true in
@[simp]
theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) :
(linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by
- ext a
- change (DFinsupp.equivFunOnFintype (lof R ι M i m)) a = _
- convert _root_.congr_fun (DFinsupp.equivFunOnFintype_single i m) a
+ tauto
@[simp]
theorem linearEquivFunOnFintype_symm_single [Fintype ι] (i : ι) (m : M i) :
diff --git a/Mathlib/Algebra/GroupWithZero/Range.lean b/Mathlib/Algebra/GroupWithZero/Range.lean
index fdd5278569..1fe25c4437 100644
--- a/Mathlib/Algebra/GroupWithZero/Range.lean
+++ b/Mathlib/Algebra/GroupWithZero/Range.lean
@@ -100,9 +100,7 @@ codomain containing the range of `f`. -/
abbrev valueGroup₀ := WithZero (valueGroup f)
lemma mem_valueMonoid {b : Bˣ} (hb : b.val ∈ range f) : b ∈ valueMonoid f := by
- rcases hb with ⟨c, _⟩
- simp only [mem_valueMonoid_iff, mem_preimage, mem_range]
- use c
+ tauto
lemma mem_valueGroup {b : Bˣ} (hb : b.1 ∈ range f) : b ∈ valueGroup f := by
suffices b ∈ valueMonoid f from Subgroup.mem_closure.mpr fun _ a ↦ a this
diff --git a/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean b/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean
index 4434f1d449..e3961157eb 100644
--- a/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean
+++ b/Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean
@@ -153,10 +153,7 @@ def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsCo
@[simp] lemma ofIsColimitCokernelCofork_f' (hg : S.g = 0) (c : CokernelCofork S.f)
(hc : IsColimit c) : (ofIsColimitCokernelCofork S hg c hc).f' = S.f := by
- rw [← cancel_mono (ofIsColimitCokernelCofork S hg c hc).i, f'_i,
- ofIsColimitCokernelCofork_i]
- dsimp
- rw [comp_id]
+ tauto
/-- When the second map `S.g` is zero, this is the left homology data on `S` given by
the chosen `cokernel S.f` -/
diff --git a/Mathlib/Algebra/Lie/OfAssociative.lean b/Mathlib/Algebra/Lie/OfAssociative.lean
index c50ddbb4e8..a62abca315 100644
--- a/Mathlib/Algebra/Lie/OfAssociative.lean
+++ b/Mathlib/Algebra/Lie/OfAssociative.lean
@@ -341,10 +341,7 @@ theorem toEnd_comp_subtype_mem (m : M) (hm : m ∈ (N : Submodule R M)) :
@[simp]
theorem toEnd_restrict_eq_toEnd (h := N.toEnd_comp_subtype_mem x) :
(toEnd R L M x).restrict h = toEnd R L N x := by
- ext
- simp only [LinearMap.restrict_coe_apply, toEnd_apply_apply, ← coe_bracket,
- SetLike.coe_eq_coe]
- rfl
+ tauto
lemma mapsTo_pow_toEnd_sub_algebraMap {φ : R} {k : ℕ} {x : L} :
MapsTo ((toEnd R L M x - algebraMap R (Module.End R M) φ) ^ k) N N := by
diff --git a/Mathlib/Algebra/Polynomial/AlgebraMap.lean b/Mathlib/Algebra/Polynomial/AlgebraMap.lean
index a7add7b33f..e49df2df8d 100644
--- a/Mathlib/Algebra/Polynomial/AlgebraMap.lean
+++ b/Mathlib/Algebra/Polynomial/AlgebraMap.lean
@@ -175,9 +175,7 @@ theorem mapAlgHom_comp (C : Type*) [Semiring C] [Algebra R C] (f : B →ₐ[R] C
theorem mapAlgHom_eq_eval₂AlgHom'_CAlgHom (f : A →ₐ[R] B) : mapAlgHom f = eval₂AlgHom'
(CAlgHom.comp f) X (fun a => (commute_X (C (f a))).symm) := by
- apply AlgHom.ext
- intro x
- congr
+ tauto
/-- If `A` and `B` are isomorphic as `R`-algebras, then so are their polynomial rings -/
def mapAlgEquiv (f : A ≃ₐ[R] B) : Polynomial A ≃ₐ[R] Polynomial B :=
@@ -244,8 +242,7 @@ lemma eval_map_algebraMap (P : R[X]) (b : B) :
/-- `mapAlg` is the morphism induced by `R → S`. -/
theorem mapAlg_eq_map (S : Type v) [Semiring S] [Algebra R S] (p : R[X]) :
mapAlg R S p = map (algebraMap R S) p := by
- simp only [mapAlg, aeval_def, eval₂_eq_sum, map, algebraMap_apply, RingHom.coe_comp]
- ext; congr
+ tauto
theorem aeval_zero : aeval x (0 : R[X]) = 0 :=
map_zero (aeval x)
diff --git a/Mathlib/Algebra/Polynomial/Coeff.lean b/Mathlib/Algebra/Polynomial/Coeff.lean
index b89c65aa6a..9edad6136e 100644
--- a/Mathlib/Algebra/Polynomial/Coeff.lean
+++ b/Mathlib/Algebra/Polynomial/Coeff.lean
@@ -43,9 +43,7 @@ theorem coeff_add (p q : R[X]) (n : ℕ) : coeff (p + q) n = coeff p n + coeff q
@[simp]
theorem coeff_smul [SMulZeroClass S R] (r : S) (p : R[X]) (n : ℕ) :
coeff (r • p) n = r • coeff p n := by
- rcases p with ⟨⟩
- simp_rw [← ofFinsupp_smul, coeff]
- exact Finsupp.smul_apply _ _ _
+ tauto
theorem support_smul [SMulZeroClass S R] (r : S) (p : R[X]) :
support (r • p) ⊆ support p := by
diff --git a/Mathlib/Algebra/RingQuot.lean b/Mathlib/Algebra/RingQuot.lean
index 8e42eb3c42..64a264b5a2 100644
--- a/Mathlib/Algebra/RingQuot.lean
+++ b/Mathlib/Algebra/RingQuot.lean
@@ -242,9 +242,7 @@ theorem sub_quot {R : Type uR} [Ring R] (r : R → R → Prop) {a b} :
theorem smul_quot [Algebra S R] {n : S} {a : R} :
(n • ⟨Quot.mk _ a⟩ : RingQuot r) = ⟨Quot.mk _ (n • a)⟩ := by
- change smul r _ _ = _
- rw [smul]
- rfl
+ tauto
instance instIsScalarTower [CommSemiring T] [SMul S T] [Algebra S R] [Algebra T R]
[IsScalarTower S T R] : IsScalarTower S T (RingQuot r) :=
diff --git a/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean b/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean
index 5d63000eda..90ac5ac68f 100644
--- a/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean
+++ b/Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean
@@ -213,9 +213,7 @@ theorem coeff_add (p q : SkewMonoidAlgebra k G) (a : G) :
@[simp]
theorem coeff_smul {S} [SMulZeroClass S k] (r : S) (p : SkewMonoidAlgebra k G) (a : G) :
coeff (r • p) a = r • coeff p a := by
- rcases p
- simp_rw [← ofFinsupp_smul, coeff]
- exact Finsupp.smul_apply _ _ _
+ tauto
end Coeff
```
```
ℹ [1122/1122] Built Mathlib.Algebra.DirectSum.Module (3.8s)
info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.command] [0.023466] @[simp]
theorem linearEquivFunOnFintype_lof [Fintype ι] (i : ι) (m : M i) :
(linearEquivFunOnFintype R ι M) (lof R ι M i m) = Pi.single i m := by tauto
info: Mathlib/Algebra/DirectSum/Module.lean:152:0: [Elab.async] [0.013767] elaborating proof of DirectSum.linearEquivFunOnFintype_lof
[Elab.definition.value] [0.012260] DirectSum.linearEquivFunOnFintype_lof
[Elab.step] [0.011580] tauto
[Elab.step] [0.011563] tauto
[Elab.step] [0.011547] tauto
Build completed successfully (1122 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
9/28 |
Mathlib/Algebra/DirectSum/Module.lean,Mathlib/Algebra/GroupWithZero/Range.lean,Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean,Mathlib/Algebra/Lie/OfAssociative.lean,Mathlib/Algebra/Polynomial/AlgebraMap.lean,Mathlib/Algebra/Polynomial/Coeff.lean,Mathlib/Algebra/RingQuot.lean,Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean |
8 |
1 |
['github-actions'] |
nobody |
3-32110 3 days ago |
3-35178 3 days ago |
3-35225 3 days |
28558 |
euprunin author:euprunin |
chore(Analysis): golf entire `HasGradientAtFilter.hasDerivAtFilter`, `liftIsometry_symm_apply` and `mapL_apply` using `tauto` |
---
Show trace profiling of HasGradientAtFilter.hasDerivAtFilter : 324 ms before, 26 ms after 🎉
### Trace profiling of `HasGradientAtFilter.hasDerivAtFilter` before PR 28558
```diff
diff --git a/Mathlib/Analysis/Calculus/Gradient/Basic.lean b/Mathlib/Analysis/Calculus/Gradient/Basic.lean
index 836221ccf3..006cb65688 100644
--- a/Mathlib/Analysis/Calculus/Gradient/Basic.lean
+++ b/Mathlib/Analysis/Calculus/Gradient/Basic.lean
@@ -154,6 +154,7 @@ section OneDimension
variable {g : 𝕜 → 𝕜} {g' u : 𝕜} {L' : Filter 𝕜}
+set_option trace.profiler true in
theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') :
HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by
have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by
```
```
ℹ [2086/2086] Built Mathlib.Analysis.Calculus.Gradient.Basic (4.4s)
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.077182] theorem hasDerivAtFilter (h : HasGradientAtFilter g g' u L') :
HasDerivAtFilter g (starRingEnd 𝕜 g') u L' :=
by
have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp
rwa [HasDerivAtFilter, this]
[Elab.definition.header] [0.071511] HasGradientAtFilter.hasDerivAtFilter
[Elab.step] [0.019228] expected type: Prop, term
HasGradientAtFilter g g' u L'
[Elab.step] [0.052190] expected type: Prop, term
HasDerivAtFilter g (starRingEnd 𝕜 g') u L'
[Meta.synthInstance] [0.037008] ✅️ ContinuousSMul 𝕜 𝕜
[Meta.synthInstance] [0.019129] ✅️ apply @IsTopologicalRing.toIsTopologicalSemiring to IsTopologicalSemiring 𝕜
[Meta.synthInstance.tryResolve] [0.019091] ✅️ IsTopologicalSemiring 𝕜 ≟ IsTopologicalSemiring 𝕜
[Meta.isDefEq] [0.017149] ✅️ IsTopologicalSemiring 𝕜 =?= IsTopologicalSemiring ?m.29
[Meta.isDefEq] [0.017098] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalNonAssocSemiring =?= NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring
[Meta.isDefEq] [0.017028] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalNonAssocSemiring =?= {
toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯,
toMul := NonUnitalNonAssocRing.toMul, left_distrib := ⋯, right_distrib := ⋯, zero_mul := ⋯,
mul_zero := ⋯ }
[Meta.isDefEq] [0.017014] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1 =?= {
toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯,
toMul := NonUnitalNonAssocRing.toMul, left_distrib := ⋯, right_distrib := ⋯, zero_mul := ⋯,
mul_zero := ⋯ }
[Meta.isDefEq] [0.015330] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.toAddCommMonoid =?= {
toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯ }
[Meta.isDefEq] [0.015316] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1 =?= {
toAddMonoid := NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid, add_comm := ⋯ }
[Meta.isDefEq] [0.015177] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.toAddMonoid =?= NonUnitalNonAssocRing.toAddCommGroup.toAddMonoid
[Meta.isDefEq] [0.015106] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NonUnitalNonAssocRing.toAddCommGroup.toSubNegMonoid.1
[Meta.isDefEq.onFailure] [0.014986] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NonUnitalNonAssocRing.toAddCommGroup.toSubNegMonoid.1
[Meta.isDefEq] [0.014035] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NormedCommRing.toNonUnitalNormedCommRing.toNonUnitalCommRing.toNonUnitalNonAssocCommRing.toSubNegMonoid.1
[Meta.isDefEq] [0.013895] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NormedField.toNormedCommRing.toAddMonoid
[Meta.isDefEq] [0.013785] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1.1 =?= NormedField.toNormedCommRing.toAddCommMonoid.1
[Meta.isDefEq] [0.013679] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1 =?= NormedField.toNormedCommRing.toAddCommMonoid
[Meta.isDefEq] [0.011626] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1.1 =?= NormedField.toNormedCommRing.toNonUnitalNonAssocSemiring.1
[Meta.isDefEq] [0.011408] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1 =?= NormedField.toNormedCommRing.toNonUnitalNonAssocSemiring
[Meta.isDefEq] [0.011153] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring.1 =?= NormedField.toNormedCommRing.toNonUnitalSemiring.1
[Meta.isDefEq] [0.010965] ✅️ Field.toSemifield.toDivisionSemiring.toNonUnitalSemiring =?= NormedField.toNormedCommRing.toNonUnitalSemiring
[Meta.isDefEq] [0.010944] ✅️ Field.toSemifield.toDivisionSemiring.toSemiring.1 =?= NormedField.toNormedCommRing.toSemiring.1
[Meta.whnf] [0.010322] Non-easy whnf: Field.toSemifield.toDivisionSemiring.toSemiring
[Meta.whnf] [0.010314] Non-easy whnf: Field.toSemifield.toDivisionSemiring.1
[Meta.whnf] [0.010293] Non-easy whnf: Field.toSemifield.toCommSemiring.1
[Meta.whnf] [0.010257] Non-easy whnf: inst✝³.toRing.1
[Meta.whnf] [0.010253] Non-easy whnf: inst✝³.toRing
[Meta.whnf] [0.010247] Non-easy whnf: inst✝³.toCommRing.1
[Meta.whnf] [0.010244] Non-easy whnf: inst✝³.toCommRing
[Meta.whnf] [0.010238] Non-easy whnf: inst✝³.toField.1
[Meta.whnf] [0.010233] Non-easy whnf: inst✝³.toField
[Meta.whnf] [0.010226] Non-easy whnf: inst✝³.toNormedField.2
[Meta.whnf] [0.010221] Non-easy whnf: inst✝³.toNormedField
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.077452] theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') :
HasDerivAtFilter g (starRingEnd 𝕜 g') u L' :=
by
have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp
rwa [HasDerivAtFilter, this]
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.async] [0.324880] elaborating proof of HasGradientAtFilter.hasDerivAtFilter
[Elab.definition.value] [0.323521] HasGradientAtFilter.hasDerivAtFilter
[Elab.step] [0.322337]
have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp
rwa [HasDerivAtFilter, this]
[Elab.step] [0.322326]
have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp
rwa [HasDerivAtFilter, this]
[Elab.step] [0.246424] have :
ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by ext; simp
[Elab.step] [0.246399] focus
refine
no_implicit_lambda%
(have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (ext; simp)
[Elab.step] [0.246383]
refine
no_implicit_lambda%
(have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (ext; simp)
[Elab.step] [0.246374]
refine
no_implicit_lambda%
(have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_)
case body✝ => with_annotate_state"by" (ext; simp)
[Elab.step] [0.129317] refine
no_implicit_lambda%
(have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_)
[Elab.step] [0.129244] expected type: HasDerivAtFilter g ((starRingEnd 𝕜) g') u L', term
no_implicit_lambda%
(have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_)
[Elab.step] [0.129237] expected type: HasDerivAtFilter g ((starRingEnd 𝕜) g') u L', term
(have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_)
[Elab.step] [0.129227] expected type: HasDerivAtFilter g ((starRingEnd 𝕜) g') u L', term
have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' :=
?body✝;
?_
[Elab.step] [0.129071] expected type: Sort ?u.35930, term
ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g'
[Elab.step] [0.129062] expected type: Sort ?u.35930, term
binrel% Eq✝ (ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g'))
((toDual 𝕜 𝕜) g')
[Elab.step] [0.079658] expected type: , term
ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g')
[Elab.step] [0.026622] expected type: ?m.21 →L[?m.27] ?m.28, term
(1 : 𝕜 →L[𝕜] 𝕜)
[Elab.step] [0.019404] expected type: Type u_1, term
𝕜 →L[𝕜] 𝕜
[Elab.step] [0.019229] expected type: Type u_1, term
ContinuousLinearMap✝ (RingHom.id✝ 𝕜) 𝕜 𝕜
[Meta.synthInstance] [0.021520] ✅️ ContinuousSMul 𝕜 𝕜
[Elab.step] [0.041933] expected type: , term
(toDual 𝕜 𝕜) g'
[Meta.synthInstance] [0.032953] ✅️ CoeFun (𝕜 ≃ₗᵢ⋆[𝕜] StrongDual 𝕜 𝕜) fun x ↦
𝕜 → StrongDual 𝕜 𝕜
[Meta.check] [0.025804] ✅️ LinearIsometryEquiv.instCoeFun
[Meta.isDefEq] [0.010457] ✅️ Module 𝕜 (StrongDual 𝕜 𝕜) =?= Module 𝕜 (𝕜 →L[𝕜] 𝕜)
[Meta.isDefEq] [0.010431] ✅️ ContinuousLinearMap.toSeminormedAddCommGroup.toAddCommMonoid =?= ContinuousLinearMap.addCommMonoid
[Meta.isDefEq] [0.010421] ✅️ {
toAddMonoid := ContinuousLinearMap.toSeminormedAddCommGroup.toAddMonoid,
add_comm := ⋯ } =?= ContinuousLinearMap.addCommMonoid
[Meta.isDefEq] [0.010404] ✅️ {
toAddMonoid := ContinuousLinearMap.toSeminormedAddCommGroup.toAddMonoid,
add_comm :=
⋯ } =?= { toAdd := ContinuousLinearMap.add, add_assoc := ⋯,
toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯,
nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯,
add_comm := ⋯ }
[Meta.isDefEq] [0.010392] ✅️ ContinuousLinearMap.toSeminormedAddCommGroup.toAddMonoid =?= {
toAdd := ContinuousLinearMap.add, add_assoc := ⋯,
toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯,
nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ }
[Meta.isDefEq] [0.010385] ✅️ ContinuousLinearMap.toSeminormedAddCommGroup.toSubNegMonoid.1 =?= {
toAdd := ContinuousLinearMap.add, add_assoc := ⋯,
toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯,
nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ }
[Meta.isDefEq] [0.010308] ✅️ {
toAddSemigroup := ContinuousLinearMap.addCommMonoid.toAddSemigroup,
toZero := ContinuousLinearMap.addCommMonoid.toZero, zero_add := ⋯,
add_zero := ⋯, nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯,
nsmul_succ :=
⋯ } =?= { toAdd := ContinuousLinearMap.add, add_assoc := ⋯,
toZero := ContinuousLinearMap.zero, zero_add := ⋯, add_zero := ⋯,
nsmul := fun x1 x2 ↦ x1 • x2, nsmul_zero := ⋯, nsmul_succ := ⋯ }
[Elab.step] [0.117036] case body✝ => with_annotate_state"by" (ext; simp)
[Elab.step] [0.116833] with_annotate_state"by" (ext; simp)
[Elab.step] [0.116825] with_annotate_state"by" (ext; simp)
[Elab.step] [0.116817] with_annotate_state"by" (ext; simp)
[Elab.step] [0.116808] (ext; simp)
[Elab.step] [0.116800] ext; simp
[Elab.step] [0.116792] ext; simp
[Elab.step] [0.023272] ext
[Meta.isDefEq] [0.014782] ✅️ ?f =
?g =?= ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') = (toDual 𝕜 𝕜) g'
[Elab.step] [0.093490] simp
[Meta.isDefEq] [0.011156] ✅️ (ContinuousLinearMap.smulRight ?c ?f)
?x =?= (ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g')) 1
[Meta.isDefEq] [0.010884] ✅️ ContinuousLinearMap.smulRight ?c
?f =?= ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g')
[Meta.isDefEq] [0.012606] ❌️ ?f 1 =?= ((toDual 𝕜 𝕜) g') 1
[Meta.isDefEq] [0.023888] ✅️ ((toDual ?𝕜 ?E) ?x) ?y =?= ((toDual 𝕜 𝕜) g') 1
[Meta.isDefEq] [0.013961] ✅️ (toDual ?𝕜 𝕜) ?x =?= (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.013464] ✅️ toDual ?𝕜 𝕜 =?= toDual 𝕜 𝕜
[Elab.step] [0.075876] rwa [HasDerivAtFilter, this]
[Elab.step] [0.075525] (rw [HasDerivAtFilter, this]; assumption)
[Elab.step] [0.075510] rw [HasDerivAtFilter, this]; assumption
[Elab.step] [0.075500] rw [HasDerivAtFilter, this]; assumption
[Elab.step] [0.071153] rw [HasDerivAtFilter, this]
[Elab.step] [0.071142] (rewrite [HasDerivAtFilter, this];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.071135] rewrite [HasDerivAtFilter, this];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.071127] rewrite [HasDerivAtFilter, this];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.070666] rewrite [HasDerivAtFilter, this]
[Meta.synthInstance] [0.034940] ✅️ ContinuousSMul 𝕜 𝕜
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:8: [Elab.async] [0.018779] Lean.addDecl
[Kernel] [0.018600] ✅️ typechecking declarations [HasGradientAtFilter.hasDerivAtFilter]
Build completed successfully (2086 jobs).
```
### Trace profiling of `HasGradientAtFilter.hasDerivAtFilter` after PR 28558
```diff
diff --git a/Mathlib/Analysis/Calculus/Gradient/Basic.lean b/Mathlib/Analysis/Calculus/Gradient/Basic.lean
index 836221ccf3..ef259e734f 100644
--- a/Mathlib/Analysis/Calculus/Gradient/Basic.lean
+++ b/Mathlib/Analysis/Calculus/Gradient/Basic.lean
@@ -154,11 +154,10 @@ section OneDimension
variable {g : 𝕜 → 𝕜} {g' u : 𝕜} {L' : Filter 𝕜}
+set_option trace.profiler true in
theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') :
HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by
- have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by
- ext; simp
- rwa [HasDerivAtFilter, this]
+ tauto
theorem HasDerivAtFilter.hasGradientAtFilter (h : HasDerivAtFilter g g' u L') :
HasGradientAtFilter g (starRingEnd 𝕜 g') u L' := by
diff --git a/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean b/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean
index 95d1540f92..6425395be8 100644
--- a/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean
+++ b/Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean
@@ -297,11 +297,7 @@ theorem tprodL_coe : (tprodL 𝕜).toMultilinearMap = tprod 𝕜 (s := E) := by
@[simp]
theorem liftIsometry_symm_apply (l : (⨂[𝕜] i, E i) →L[𝕜] F) :
(liftIsometry 𝕜 E F).symm l = l.compContinuousMultilinearMap (tprodL 𝕜) := by
- ext m
- change (liftEquiv 𝕜 E F).symm l m = _
- simp only [liftEquiv_symm_apply, lift_symm, MultilinearMap.coe_mkContinuous,
- LinearMap.compMultilinearMap_apply, ContinuousLinearMap.coe_coe,
- ContinuousLinearMap.compContinuousMultilinearMap_coe, Function.comp_apply, tprodL_toFun]
+ tauto
@[simp]
theorem liftIsometry_tprodL :
@@ -337,12 +333,7 @@ theorem mapL_coe : (mapL f).toLinearMap = map (fun i ↦ (f i).toLinearMap) := b
@[simp]
theorem mapL_apply (x : ⨂[𝕜] i, E i) : mapL f x = map (fun i ↦ (f i).toLinearMap) x := by
- induction x using PiTensorProduct.induction_on with
- | smul_tprod =>
- simp only [mapL, map_smul, liftIsometry_apply_apply, lift.tprod,
- ContinuousMultilinearMap.coe_coe, ContinuousMultilinearMap.compContinuousLinearMap_apply,
- tprodL_toFun, map_tprod, ContinuousLinearMap.coe_coe]
- | add _ _ hx hy => simp only [map_add, hx, hy]
+ tauto
/-- Given submodules `pᵢ ⊆ Eᵢ`, this is the natural map: `⨂[𝕜] i, pᵢ → ⨂[𝕜] i, Eᵢ`.
This is the continuous version of `PiTensorProduct.mapIncl`.
```
```
ℹ [2086/2086] Built Mathlib.Analysis.Calculus.Gradient.Basic (4.3s)
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.063573] theorem hasDerivAtFilter (h : HasGradientAtFilter g g' u L') :
HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by tauto
[Elab.definition.header] [0.051258] HasGradientAtFilter.hasDerivAtFilter
[Elab.step] [0.041267] expected type: Prop, term
HasDerivAtFilter g (starRingEnd 𝕜 g') u L'
[Meta.synthInstance] [0.026897] ✅️ ContinuousSMul 𝕜 𝕜
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.command] [0.063847] theorem HasGradientAtFilter.hasDerivAtFilter (h : HasGradientAtFilter g g' u L') :
HasDerivAtFilter g (starRingEnd 𝕜 g') u L' := by tauto
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:0: [Elab.async] [0.026129] elaborating proof of HasGradientAtFilter.hasDerivAtFilter
[Elab.definition.value] [0.025613] HasGradientAtFilter.hasDerivAtFilter
[Elab.step] [0.025330] tauto
[Elab.step] [0.025321] tauto
[Elab.step] [0.025309] tauto
[Elab.step] [0.023296] assumption
[Meta.isDefEq] [0.023275] ✅️ HasDerivAtFilter g ((starRingEnd 𝕜) g') u L' =?= HasGradientAtFilter g g' u L'
[Meta.isDefEq] [0.023240] ✅️ HasDerivAtFilter g ((starRingEnd 𝕜) g') u
L' =?= HasFDerivAtFilter g ((toDual 𝕜 𝕜) g') u L'
[Meta.isDefEq] [0.023194] ✅️ HasFDerivAtFilter g (ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g'))
u L' =?= HasFDerivAtFilter g ((toDual 𝕜 𝕜) g') u L'
[Meta.isDefEq] [0.019563] ✅️ ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') =?= (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.019423] ✅️ let __src := (↑1).smulRight ((starRingEnd 𝕜) g');
{ toLinearMap := __src, cont := ⋯ } =?= (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.019402] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.019393] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= EquivLike.toFunLike.1 (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.019381] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= EquivLike.coe (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.019372] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= LinearIsometryEquiv.instEquivLike.1 (toDual 𝕜 𝕜) g'
[Meta.isDefEq] [0.019355] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= (↑(toDual 𝕜 𝕜).toLinearEquiv).toFun g'
[Meta.isDefEq] [0.019343] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= (↑(toDual 𝕜 𝕜).toLinearEquiv).toAddHom.1 g'
[Meta.isDefEq] [0.019069] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= (⇑↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap)
⋯) ∘
⇑↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯))
g'
[Meta.isDefEq] [0.019058] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= ↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯)
(↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g')
[Meta.isDefEq] [0.019050] ✅️ { toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= LinearMap.instFunLike.1
(↑(LinearEquiv.ofTop (LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯))
(↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g')
[Meta.isDefEq] [0.019025] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= (↑(LinearEquiv.ofTop
(LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯)).toFun
(↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g')
[Meta.isDefEq] [0.019016] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= (↑(LinearEquiv.ofTop
(LinearMap.range (toDualMap 𝕜 𝕜).toLinearMap) ⋯)).toAddHom.1
(↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯) g')
[Meta.isDefEq] [0.018926] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= ↑(↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯)
g')
[Meta.isDefEq] [0.018915] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= (↑(LinearEquiv.ofInjective (toDualMap 𝕜 𝕜).toLinearMap ⋯)
g').1
[Meta.isDefEq] [0.018663] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= (toDualMap 𝕜 𝕜).toLinearMap g'
[Meta.isDefEq] [0.018654] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= LinearMap.instFunLike.1 (toDualMap 𝕜 𝕜).toLinearMap g'
[Meta.isDefEq] [0.018640] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= (toDualMap 𝕜 𝕜).toFun g'
[Meta.isDefEq] [0.018631] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont := ⋯ } =?= (toDualMap 𝕜 𝕜).toAddHom.1 g'
[Meta.isDefEq] [0.018276] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= ((innerₛₗ 𝕜) g').mkContinuousOfExistsBound ⋯
[Meta.isDefEq] [0.018263] ✅️ {
toLinearMap := (↑1).smulRight ((starRingEnd 𝕜) g'),
cont :=
⋯ } =?= { toLinearMap := (innerₛₗ 𝕜) g', cont := ⋯ }
[Meta.isDefEq] [0.012681] ✅️ (↑1).smulRight
((starRingEnd 𝕜) g') =?= (innerₛₗ 𝕜) g'
[Meta.isDefEq] [0.012596] ✅️ {
toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g',
map_add' := ⋯, map_smul' := ⋯ } =?= (innerₛₗ 𝕜) g'
[Meta.isDefEq] [0.012565] ✅️ {
toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g',
map_add' := ⋯,
map_smul' :=
⋯ } =?= LinearMap.instFunLike.1 (innerₛₗ 𝕜) g'
[Meta.isDefEq] [0.012552] ✅️ {
toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g',
map_add' := ⋯,
map_smul' := ⋯ } =?= (innerₛₗ 𝕜).toFun g'
[Meta.isDefEq] [0.012543] ✅️ {
toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g',
map_add' := ⋯,
map_smul' := ⋯ } =?= (innerₛₗ 𝕜).toAddHom.1 g'
[Meta.isDefEq] [0.012400] ✅️ {
toFun := fun b ↦ ↑1 b • (starRingEnd 𝕜) g',
map_add' := ⋯,
map_smul' :=
⋯ } =?= { toFun := (fun v w ↦ ⟪v, w⟫) g',
map_add' := ⋯, map_smul' := ⋯ }
info: Mathlib/Analysis/Calculus/Gradient/Basic.lean:158:8: [Elab.async] [0.013901] Lean.addDecl
[Kernel] [0.013541] ✅️ typechecking declarations [HasGradientAtFilter.hasDerivAtFilter]
Build completed successfully (2086 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
3/14 |
Mathlib/Analysis/Calculus/Gradient/Basic.lean,Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean |
2 |
1 |
['github-actions'] |
nobody |
3-32060 3 days ago |
3-35114 3 days ago |
3-35161 3 days |
28559 |
euprunin author:euprunin |
chore(CategoryTheory): golf entire `preinclusion_map₂`, `mapForget_eq`, `uSwitch_map_uSwitch_map` and more using `tauto` |
---
Show trace profiling of preinclusion_map₂ : 166 ms before, 33 ms after 🎉
### Trace profiling of `preinclusion_map₂` before PR 28559
```diff
diff --git a/Mathlib/CategoryTheory/Bicategory/Coherence.lean b/Mathlib/CategoryTheory/Bicategory/Coherence.lean
index e5ce271970..61a115654e 100644
--- a/Mathlib/CategoryTheory/Bicategory/Coherence.lean
+++ b/Mathlib/CategoryTheory/Bicategory/Coherence.lean
@@ -84,6 +84,7 @@ def preinclusion (B : Type u) [Quiver.{v + 1} B] :
theorem preinclusion_obj (a : B) : (preinclusion B).obj ⟨a⟩ = a :=
rfl
+set_option trace.profiler true in
@[simp]
theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) :
(preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by
```
```
ℹ [503/503] Built Mathlib.CategoryTheory.Bicategory.Coherence (3.8s)
info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.command] [0.017892] @[simp]
theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) :
(preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) :=
by
rcases η with ⟨⟨⟩⟩
cases Discrete.ext (by assumption)
convert (inclusionPath a b).map_id _
[Elab.definition.header] [0.012532] CategoryTheory.FreeBicategory.preinclusion_map₂
[Elab.step] [0.010910] expected type: Prop, term
(preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η)))
[Elab.step] [0.010898] expected type: Prop, term
binrel% Eq✝ ((preinclusion B).map₂ η) (eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))))
info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.async] [0.170229] elaborating proof of CategoryTheory.FreeBicategory.preinclusion_map₂
[Elab.definition.value] [0.165791] CategoryTheory.FreeBicategory.preinclusion_map₂
[Elab.step] [0.160852]
rcases η with ⟨⟨⟩⟩
cases Discrete.ext (by assumption)
convert (inclusionPath a b).map_id _
[Elab.step] [0.160840]
rcases η with ⟨⟨⟩⟩
cases Discrete.ext (by assumption)
convert (inclusionPath a b).map_id _
[Elab.step] [0.153245] convert (inclusionPath a b).map_id _
info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:89:8: [Elab.async] [0.012802] Lean.addDecl
[Kernel] [0.012744] ✅️ typechecking declarations [CategoryTheory.FreeBicategory.preinclusion_map₂]
Build completed successfully (503 jobs).
```
### Trace profiling of `preinclusion_map₂` after PR 28559
```diff
diff --git a/Mathlib/CategoryTheory/Bicategory/Coherence.lean b/Mathlib/CategoryTheory/Bicategory/Coherence.lean
index e5ce271970..29da16cbb6 100644
--- a/Mathlib/CategoryTheory/Bicategory/Coherence.lean
+++ b/Mathlib/CategoryTheory/Bicategory/Coherence.lean
@@ -84,12 +84,11 @@ def preinclusion (B : Type u) [Quiver.{v + 1} B] :
theorem preinclusion_obj (a : B) : (preinclusion B).obj ⟨a⟩ = a :=
rfl
+set_option trace.profiler true in
@[simp]
theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) :
(preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by
- rcases η with ⟨⟨⟩⟩
- cases Discrete.ext (by assumption)
- convert (inclusionPath a b).map_id _
+ tauto
/-- The normalization of the composition of `p : Path a b` and `f : Hom b c`.
`p` will eventually be taken to be `nil` and we then get the normalization
diff --git a/Mathlib/CategoryTheory/Comma/Over/Basic.lean b/Mathlib/CategoryTheory/Comma/Over/Basic.lean
index 1372cd7356..623f4dc454 100644
--- a/Mathlib/CategoryTheory/Comma/Over/Basic.lean
+++ b/Mathlib/CategoryTheory/Comma/Over/Basic.lean
@@ -216,9 +216,7 @@ def mapId (Y : T) : map (𝟙 Y) ≅ 𝟭 _ := eqToIso (mapId_eq Y)
/-- Mapping by `f` and then forgetting is the same as forgetting. -/
theorem mapForget_eq {X Y : T} (f : X ⟶ Y) :
(map f) ⋙ (forget Y) = (forget X) := by
- fapply Functor.ext
- · dsimp [Over, Over.map]; intro x; exact rfl
- · intros x y u; simp
+ tauto
/-- The natural isomorphism arising from `mapForget_eq`. -/
def mapForget {X Y : T} (f : X ⟶ Y) :
@@ -626,9 +624,7 @@ def mapId (Y : T) : map (𝟙 Y) ≅ 𝟭 _ := eqToIso (mapId_eq Y)
/-- Mapping by `f` and then forgetting is the same as forgetting. -/
theorem mapForget_eq {X Y : T} (f : X ⟶ Y) :
(map f) ⋙ (forget X) = (forget Y) := by
- fapply Functor.ext
- · dsimp [Under, Under.map]; intro x; exact rfl
- · intros x y u; simp
+ tauto
/-- The natural isomorphism arising from `mapForget_eq`. -/
def mapForget {X Y : T} (f : X ⟶ Y) :
diff --git a/Mathlib/CategoryTheory/FintypeCat.lean b/Mathlib/CategoryTheory/FintypeCat.lean
index ba51103beb..947f2743b8 100644
--- a/Mathlib/CategoryTheory/FintypeCat.lean
+++ b/Mathlib/CategoryTheory/FintypeCat.lean
@@ -237,10 +237,7 @@ lemma uSwitch_map_uSwitch_map {X Y : FintypeCat.{u}} (f : X ⟶ Y) :
(equivEquivIso ((uSwitch.obj X).uSwitchEquiv.trans X.uSwitchEquiv)).hom ≫
f ≫ (equivEquivIso ((uSwitch.obj Y).uSwitchEquiv.trans
Y.uSwitchEquiv)).inv := by
- ext x
- simp only [comp_apply, equivEquivIso_apply_hom, Equiv.trans_apply]
- rw [uSwitchEquiv_naturality f, ← uSwitchEquiv_naturality]
- rfl
+ tauto
/-- `uSwitch.{u, v}` is an equivalence of categories with quasi-inverse `uSwitch.{v, u}`. -/
noncomputable def uSwitchEquivalence : FintypeCat.{u} ≌ FintypeCat.{v} where
diff --git a/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean b/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean
index d71f89c163..8739b63337 100644
--- a/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean
+++ b/Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean
@@ -83,9 +83,7 @@ theorem inclusion_obj (X : N C) :
@[simp]
theorem inclusion_map {X Y : N C} (f : X ⟶ Y) :
inclusion.map f = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom f))) := by
- rcases f with ⟨⟨⟩⟩
- cases Discrete.ext (by assumption)
- apply inclusion.map_id
+ tauto
/-- Auxiliary definition for `normalize`. -/
def normalizeObj : F C → NormalMonoidalObject C → NormalMonoidalObject C
diff --git a/Mathlib/CategoryTheory/MorphismProperty/Basic.lean b/Mathlib/CategoryTheory/MorphismProperty/Basic.lean
index e49349dfd8..59072358d3 100644
--- a/Mathlib/CategoryTheory/MorphismProperty/Basic.lean
+++ b/Mathlib/CategoryTheory/MorphismProperty/Basic.lean
@@ -344,12 +344,7 @@ lemma map_isoClosure (P : MorphismProperty C) (F : C ⥤ D) :
lemma map_id_eq_isoClosure (P : MorphismProperty C) :
P.map (𝟭 _) = P.isoClosure := by
- apply le_antisymm
- · rw [map_le_iff]
- intro X Y f hf
- exact P.le_isoClosure _ hf
- · intro X Y f hf
- exact hf
+ tauto
lemma map_id (P : MorphismProperty C) [RespectsIso P] :
P.map (𝟭 _) = P := by
diff --git a/Mathlib/CategoryTheory/Pi/Basic.lean b/Mathlib/CategoryTheory/Pi/Basic.lean
index e721041ea4..41af15d2d0 100644
--- a/Mathlib/CategoryTheory/Pi/Basic.lean
+++ b/Mathlib/CategoryTheory/Pi/Basic.lean
@@ -208,11 +208,7 @@ end EqToHom
-- how `Functor.pi` commutes with `Pi.eval` and `Pi.comap`.
@[simp]
theorem pi'_eval (f : ∀ i, A ⥤ C i) (i : I) : pi' f ⋙ Pi.eval C i = f i := by
- apply Functor.ext
- · intro _ _ _
- simp
- · intro _
- rfl
+ tauto
/-- Two functors to a product category are equal iff they agree on every coordinate. -/
theorem pi_ext (f f' : A ⥤ ∀ i, C i) (h : ∀ i, f ⋙ (Pi.eval C i) = f' ⋙ (Pi.eval C i)) :
diff --git a/Mathlib/CategoryTheory/Quotient.lean b/Mathlib/CategoryTheory/Quotient.lean
index c66247076c..b73eaf476d 100644
--- a/Mathlib/CategoryTheory/Quotient.lean
+++ b/Mathlib/CategoryTheory/Quotient.lean
@@ -237,9 +237,7 @@ theorem lift_obj_functor_obj (X : C) :
theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
(lift r F H).map ((functor r).map f) = F.map f := by
- rw [← NatIso.naturality_1 (lift.isLift r F H)]
- dsimp [lift, functor]
- simp
+ tauto
variable {r}
```
```
✔ [489/503] Built Mathlib.CategoryTheory.Quotient (2.2s)
✔ [490/503] Built Mathlib.CategoryTheory.PathCategory.Basic (1.9s)
✔ [491/503] Built Mathlib.CategoryTheory.Pi.Basic (4.5s)
✔ [492/503] Built Mathlib.CategoryTheory.Groupoid (1.8s)
✔ [493/503] Built Mathlib.CategoryTheory.Discrete.Basic (2.9s)
✔ [494/503] Built Mathlib.CategoryTheory.EpiMono (1.9s)
✔ [495/503] Built Mathlib.CategoryTheory.Bicategory.LocallyDiscrete (2.2s)
✔ [496/503] Built Mathlib.CategoryTheory.Types (1.9s)
✔ [497/503] Built Mathlib.CategoryTheory.Category.Cat (2.0s)
✔ [498/503] Built Mathlib.Tactic.CategoryTheory.ToApp (1.8s)
✔ [499/503] Built Mathlib.CategoryTheory.Bicategory.Functor.Oplax (2.0s)
✔ [500/503] Built Mathlib.CategoryTheory.Bicategory.Functor.Lax (3.2s)
✔ [501/503] Built Mathlib.CategoryTheory.Bicategory.Functor.Pseudofunctor (4.5s)
✔ [502/503] Built Mathlib.CategoryTheory.Bicategory.Free (5.3s)
ℹ [503/503] Built Mathlib.CategoryTheory.Bicategory.Coherence (3.9s)
info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.command] [0.020377] @[simp]
theorem preinclusion_map₂ {a b : B} (f g : Discrete (Path.{v + 1} a b)) (η : f ⟶ g) :
(preinclusion B).map₂ η = eqToHom (congr_arg _ (Discrete.ext (Discrete.eq_of_hom η))) := by tauto
[Elab.definition.header] [0.011267] CategoryTheory.FreeBicategory.preinclusion_map₂
info: Mathlib/CategoryTheory/Bicategory/Coherence.lean:88:0: [Elab.async] [0.033437] elaborating proof of CategoryTheory.FreeBicategory.preinclusion_map₂
[Elab.definition.value] [0.032541] CategoryTheory.FreeBicategory.preinclusion_map₂
[Elab.step] [0.032026] tauto
[Elab.step] [0.032010] tauto
[Elab.step] [0.031994] tauto
[Elab.step] [0.020006] rfl
[Elab.step] [0.019397] eq_refl
[Meta.isDefEq] [0.019374] ✅️ (preinclusion B).map₂ η =?= eqToHom ⋯
[Meta.isDefEq] [0.019302] ✅️ (preinclusion B).map₂ η =?= ⋯.mpr (𝟙 ((preinclusion B).map g))
[Meta.isDefEq] [0.019274] ✅️ (preinclusion B).map₂ η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g)
[Meta.isDefEq] [0.016614] ✅️ (preinclusion B).toPrelaxFunctorStruct.2
η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g)
[Meta.isDefEq] [0.014779] ✅️ (inclusionPath { as := a }.as { as := b }.as).map
η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g)
[Meta.isDefEq] [0.013158] ✅️ (inclusionPath { as := a }.as { as := b }.as).2
η =?= ⋯ ▸ 𝟙 ((preinclusion B).map g)
[Meta.isDefEq] [0.011394] ✅️ id
(ULift.casesOn η fun down ↦
PLift.casesOn down fun h ↦ eqToHom ⋯) =?= ⋯ ▸ 𝟙 ((preinclusion B).map g)
Build completed successfully (503 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
8/30 |
Mathlib/CategoryTheory/Bicategory/Coherence.lean,Mathlib/CategoryTheory/Comma/Over/Basic.lean,Mathlib/CategoryTheory/FintypeCat.lean,Mathlib/CategoryTheory/Monoidal/Free/Coherence.lean,Mathlib/CategoryTheory/MorphismProperty/Basic.lean,Mathlib/CategoryTheory/Pi/Basic.lean,Mathlib/CategoryTheory/Quotient.lean |
7 |
1 |
['github-actions'] |
nobody |
3-31982 3 days ago |
3-34825 3 days ago |
3-34871 3 days |
28561 |
euprunin author:euprunin |
chore(Data): golf entire `equivFunOnFintype_single`, `predAbove_right_zero`, `snoc_zero` and more using `tauto` |
---
Show trace profiling of equivFunOnFintype_single : 19 ms before, <10 ms after 🎉
### Trace profiling of `equivFunOnFintype_single` before PR 28561
```diff
diff --git a/Mathlib/Data/DFinsupp/Defs.lean b/Mathlib/Data/DFinsupp/Defs.lean
index c025230385..e6a8585b49 100644
--- a/Mathlib/Data/DFinsupp/Defs.lean
+++ b/Mathlib/Data/DFinsupp/Defs.lean
@@ -532,6 +532,7 @@ theorem single_eq_of_sigma_eq {i j} {xi : β i} {xj : β j} (h : (⟨i, xi⟩ :
cases h
rfl
+set_option trace.profiler true in
@[simp]
theorem equivFunOnFintype_single [Fintype ι] (i : ι) (m : β i) :
(@DFinsupp.equivFunOnFintype ι β _ _) (DFinsupp.single i m) = Pi.single i m := by
```
```
ℹ [587/587] Built Mathlib.Data.DFinsupp.Defs (4.3s)
info: Mathlib/Data/DFinsupp/Defs.lean:536:0: [Elab.async] [0.019170] elaborating proof of DFinsupp.equivFunOnFintype_single
[Elab.definition.value] [0.018591] DFinsupp.equivFunOnFintype_single
[Elab.step] [0.018162]
ext x
dsimp [Pi.single, Function.update]
simp [@eq_comm _ i]
[Elab.step] [0.018149]
ext x
dsimp [Pi.single, Function.update]
simp [@eq_comm _ i]
[Elab.step] [0.012042] simp [@eq_comm _ i]
Build completed successfully (587 jobs).
```
### Trace profiling of `equivFunOnFintype_single` after PR 28561
```diff
diff --git a/Mathlib/Data/DFinsupp/Defs.lean b/Mathlib/Data/DFinsupp/Defs.lean
index c025230385..3054ded3e8 100644
--- a/Mathlib/Data/DFinsupp/Defs.lean
+++ b/Mathlib/Data/DFinsupp/Defs.lean
@@ -532,12 +532,11 @@ theorem single_eq_of_sigma_eq {i j} {xi : β i} {xj : β j} (h : (⟨i, xi⟩ :
cases h
rfl
+set_option trace.profiler true in
@[simp]
theorem equivFunOnFintype_single [Fintype ι] (i : ι) (m : β i) :
(@DFinsupp.equivFunOnFintype ι β _ _) (DFinsupp.single i m) = Pi.single i m := by
- ext x
- dsimp [Pi.single, Function.update]
- simp [@eq_comm _ i]
+ tauto
@[simp]
theorem equivFunOnFintype_symm_single [Fintype ι] (i : ι) (m : β i) :
diff --git a/Mathlib/Data/Fin/Basic.lean b/Mathlib/Data/Fin/Basic.lean
index 89fe9ef07f..c39cf119fa 100644
--- a/Mathlib/Data/Fin/Basic.lean
+++ b/Mathlib/Data/Fin/Basic.lean
@@ -1163,9 +1163,7 @@ lemma predAbove_castPred_self (p : Fin (n + 1)) (hp : p ≠ last n) :
(castPred p hp).predAbove p = castPred p hp := predAbove_castPred_of_le _ _ Fin.le_rfl hp
@[simp] lemma predAbove_right_zero [NeZero n] {i : Fin n} : predAbove (i : Fin n) 0 = 0 := by
- cases n
- · exact i.elim0
- · rw [predAbove_of_le_castSucc _ _ (zero_le _), castPred_zero]
+ tauto
lemma predAbove_zero_succ [NeZero n] {i : Fin n} : predAbove 0 i.succ = i := by
rw [predAbove_succ_of_le _ _ (Fin.zero_le _)]
diff --git a/Mathlib/Data/Fin/Tuple/Basic.lean b/Mathlib/Data/Fin/Tuple/Basic.lean
index f47faad190..f106b275a9 100644
--- a/Mathlib/Data/Fin/Tuple/Basic.lean
+++ b/Mathlib/Data/Fin/Tuple/Basic.lean
@@ -519,9 +519,7 @@ theorem snoc_last : snoc p x (last n) = x := by simp [snoc]
lemma snoc_zero {α : Sort*} (p : Fin 0 → α) (x : α) :
Fin.snoc p x = fun _ ↦ x := by
- ext y
- have : Subsingleton (Fin (0 + 1)) := Fin.subsingleton_one
- simp only [Subsingleton.elim y (Fin.last 0), snoc_last]
+ tauto
@[simp]
theorem snoc_comp_natAdd {n m : ℕ} {α : Sort*} (f : Fin (m + n) → α) (a : α) :
diff --git a/Mathlib/Data/Fin/Tuple/Take.lean b/Mathlib/Data/Fin/Tuple/Take.lean
index 2a7cc1d5ae..cc68167259 100644
--- a/Mathlib/Data/Fin/Tuple/Take.lean
+++ b/Mathlib/Data/Fin/Tuple/Take.lean
@@ -43,9 +43,7 @@ theorem take_one {α : Fin (n + 1) → Sort*} (v : (i : Fin (n + 1)) → α i) :
@[simp]
theorem take_eq_init {α : Fin (n + 1) → Sort*} (v : (i : Fin (n + 1)) → α i) :
take n n.le_succ v = init v := by
- ext i
- simp only [Nat.succ_eq_add_one, take, init]
- congr
+ tauto
@[simp]
theorem take_eq_self (v : (i : Fin n) → α i) : take n (le_refl n) v = v := by
@@ -55,16 +53,12 @@ theorem take_eq_self (v : (i : Fin n) → α i) : take n (le_refl n) v = v := by
@[simp]
theorem take_take {m n' : ℕ} (h : m ≤ n') (h' : n' ≤ n) (v : (i : Fin n) → α i) :
take m h (take n' h' v) = take m (Nat.le_trans h h') v := by
- ext i
- simp only [take]
- congr
+ tauto
@[simp]
theorem take_init {α : Fin (n + 1) → Sort*} (m : ℕ) (h : m ≤ n) (v : (i : Fin (n + 1)) → α i) :
take m h (init v) = take m (Nat.le_succ_of_le h) v := by
- ext i
- simp only [take, init]
- congr
+ tauto
theorem take_repeat {α : Type*} {n' : ℕ} (m : ℕ) (h : m ≤ n) (a : Fin n' → α) :
take (m * n') (Nat.mul_le_mul_right n' h) (Fin.repeat n a) = Fin.repeat m a := by
diff --git a/Mathlib/Data/Finmap.lean b/Mathlib/Data/Finmap.lean
index dbe7df1064..4ee00fb2a2 100644
--- a/Mathlib/Data/Finmap.lean
+++ b/Mathlib/Data/Finmap.lean
@@ -126,7 +126,7 @@ def liftOn₂ {γ} (s₁ s₂ : Finmap β) (f : AList β → AList β → γ)
@[simp]
theorem liftOn₂_toFinmap {γ} (s₁ s₂ : AList β) (f : AList β → AList β → γ) (H) :
liftOn₂ ⟦s₁⟧ ⟦s₂⟧ f H = f s₁ s₂ := by
- cases s₁; cases s₂; rfl
+ tauto
/-! ### Induction -/
diff --git a/Mathlib/Data/Finsupp/AList.lean b/Mathlib/Data/Finsupp/AList.lean
index c68e104ebe..7b9b0a651c 100644
--- a/Mathlib/Data/Finsupp/AList.lean
+++ b/Mathlib/Data/Finsupp/AList.lean
@@ -90,9 +90,7 @@ theorem lookupFinsupp_eq_zero_iff [DecidableEq α] {l : AList fun _x : α => M}
@[simp]
theorem empty_lookupFinsupp : lookupFinsupp (∅ : AList fun _x : α => M) = 0 := by
- classical
- ext
- simp
+ tauto
@[simp]
theorem insert_lookupFinsupp [DecidableEq α] (l : AList fun _x : α => M) (a : α) (m : M) :
diff --git a/Mathlib/Data/Finsupp/Single.lean b/Mathlib/Data/Finsupp/Single.lean
index a123111855..bd45336d97 100644
--- a/Mathlib/Data/Finsupp/Single.lean
+++ b/Mathlib/Data/Finsupp/Single.lean
@@ -297,9 +297,7 @@ theorem update_self : f.update a (f a) = f := by
@[simp]
theorem zero_update : update 0 a b = single a b := by
- classical
- ext
- rw [single_eq_update, coe_update, coe_zero]
+ tauto
theorem support_update [DecidableEq α] [DecidableEq M] :
support (f.update a b) = if b = 0 then f.support.erase a else insert a f.support := by
diff --git a/Mathlib/Data/Matrix/Basic.lean b/Mathlib/Data/Matrix/Basic.lean
index 9333a89183..0e5f8bc387 100644
--- a/Mathlib/Data/Matrix/Basic.lean
+++ b/Mathlib/Data/Matrix/Basic.lean
@@ -220,8 +220,7 @@ instance instAlgebra : Algebra R (Matrix n n α) where
theorem algebraMap_matrix_apply {r : R} {i j : n} :
algebraMap R (Matrix n n α) r i j = if i = j then algebraMap R α r else 0 := by
- dsimp [algebraMap, Algebra.algebraMap, Matrix.scalar]
- split_ifs with h <;> simp [h]
+ tauto
theorem algebraMap_eq_diagonal (r : R) :
algebraMap R (Matrix n n α) r = diagonal (algebraMap R (n → α) r) := rfl
diff --git a/Mathlib/Data/Matrix/Block.lean b/Mathlib/Data/Matrix/Block.lean
index 9815f2ee42..6759dbf770 100644
--- a/Mathlib/Data/Matrix/Block.lean
+++ b/Mathlib/Data/Matrix/Block.lean
@@ -332,9 +332,7 @@ theorem blockDiagonal_apply' (M : o → Matrix m n α) (i k j k') :
theorem blockDiagonal_apply (M : o → Matrix m n α) (ik jk) :
blockDiagonal M ik jk = if ik.2 = jk.2 then M ik.2 ik.1 jk.1 else 0 := by
- cases ik
- cases jk
- rfl
+ tauto
@[simp]
theorem blockDiagonal_apply_eq (M : o → Matrix m n α) (i j k) :
@@ -589,9 +587,7 @@ theorem blockDiagonal'_submatrix_eq_blockDiagonal (M : o → Matrix m n α) :
theorem blockDiagonal'_apply (M : ∀ i, Matrix (m' i) (n' i) α) (ik jk) :
blockDiagonal' M ik jk =
if h : ik.1 = jk.1 then M ik.1 ik.2 (cast (congr_arg n' h.symm) jk.2) else 0 := by
- cases ik
- cases jk
- rfl
+ tauto
@[simp]
theorem blockDiagonal'_apply_eq (M : ∀ i, Matrix (m' i) (n' i) α) (k i j) :
diff --git a/Mathlib/Data/PFunctor/Multivariate/W.lean b/Mathlib/Data/PFunctor/Multivariate/W.lean
index 6d0f8018c7..2e19332eb3 100644
--- a/Mathlib/Data/PFunctor/Multivariate/W.lean
+++ b/Mathlib/Data/PFunctor/Multivariate/W.lean
@@ -168,9 +168,7 @@ theorem wRec_eq {α : TypeVec n} {C : Type*}
(g : ∀ a : P.A, P.drop.B a ⟹ α → (P.last.B a → P.W α) → (P.last.B a → C) → C) (a : P.A)
(f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α) :
P.wRec g (P.wMk a f' f) = g a f' f fun i => P.wRec g (f i) := by
- rw [wMk, wRec]; rw [wpRec_eq]
- dsimp only [wPathDestLeft_wPathCasesOn, wPathDestRight_wPathCasesOn]
- congr
+ tauto
/-- Induction principle for `W` -/
theorem w_ind {α : TypeVec n} {C : P.W α → Prop}
diff --git a/Mathlib/Data/PFunctor/Univariate/M.lean b/Mathlib/Data/PFunctor/Univariate/M.lean
index 5db25ebdd5..a3fad597e2 100644
--- a/Mathlib/Data/PFunctor/Univariate/M.lean
+++ b/Mathlib/Data/PFunctor/Univariate/M.lean
@@ -350,11 +350,7 @@ theorem agree_iff_agree' {n : ℕ} (x y : M F) :
@[simp]
theorem cases_mk {r : M F → Sort*} (x : F (M F)) (f : ∀ x : F (M F), r (M.mk x)) :
PFunctor.M.cases f (M.mk x) = f x := by
- dsimp only [M.mk, PFunctor.M.cases, dest, head, Approx.sMk, head']
- cases x; dsimp only [Approx.sMk]
- simp only [Eq.mpr]
- apply congrFun
- rfl
+ tauto
@[simp]
theorem casesOn_mk {r : M F → Sort*} (x : F (M F)) (f : ∀ x : F (M F), r (M.mk x)) :
diff --git a/Mathlib/Data/Seq/Computation.lean b/Mathlib/Data/Seq/Computation.lean
index 081cd9b817..c755c24a61 100644
--- a/Mathlib/Data/Seq/Computation.lean
+++ b/Mathlib/Data/Seq/Computation.lean
@@ -149,7 +149,7 @@ theorem tail_pure (a : α) : tail (pure a) = pure a :=
@[simp]
theorem tail_think (s : Computation α) : tail (think s) = s := by
- obtain ⟨f, al⟩ := s; apply Subtype.eq; dsimp [tail, think]
+ tauto
@[simp]
theorem tail_empty : tail (empty α) = empty α :=
diff --git a/Mathlib/Data/Seq/Seq.lean b/Mathlib/Data/Seq/Seq.lean
index c90c5df59b..05f26235d2 100644
--- a/Mathlib/Data/Seq/Seq.lean
+++ b/Mathlib/Data/Seq/Seq.lean
@@ -211,9 +211,7 @@ theorem tail_nil : tail (nil : Seq α) = nil :=
@[simp]
theorem tail_cons (a : α) (s) : tail (cons a s) = s := by
- obtain ⟨f, al⟩ := s
- apply Subtype.eq
- dsimp [tail, cons]
+ tauto
theorem head_eq_some {s : Seq α} {x : α} (h : s.head = some x) :
s = cons x s.tail := by
diff --git a/Mathlib/Data/Set/Piecewise.lean b/Mathlib/Data/Set/Piecewise.lean
index e0820119b7..2cb31ab72e 100644
--- a/Mathlib/Data/Set/Piecewise.lean
+++ b/Mathlib/Data/Set/Piecewise.lean
@@ -99,8 +99,7 @@ theorem piecewise_range_comp {ι : Sort*} (f : ι → α) [∀ j, Decidable (j
lemma piecewise_comp (f g : α → γ) (h : β → α) :
letI : DecidablePred (· ∈ h ⁻¹' s) := @instDecidablePredComp _ (· ∈ s) _ h _;
(s.piecewise f g) ∘ h = (h ⁻¹' s).piecewise (f ∘ h) (g ∘ h) := by
- ext x
- by_cases hx : h x ∈ s <;> simp [hx]
+ tauto
theorem MapsTo.piecewise_ite {s s₁ s₂ : Set α} {t t₁ t₂ : Set β} {f₁ f₂ : α → β}
[∀ i, Decidable (i ∈ s)] (h₁ : MapsTo f₁ (s₁ ∩ s) (t₁ ∩ t))
diff --git a/Mathlib/Data/Set/Sups.lean b/Mathlib/Data/Set/Sups.lean
index 54eeb36e77..a9152d7dca 100644
--- a/Mathlib/Data/Set/Sups.lean
+++ b/Mathlib/Data/Set/Sups.lean
@@ -294,10 +294,7 @@ theorem iUnion_image_inf_right : ⋃ b ∈ t, (· ⊓ b) '' s = s ⊼ t :=
@[simp]
theorem image_inf_prod (s t : Set α) : Set.image2 (fun x x_1 => x ⊓ x_1) s t = s ⊼ t := by
- have : (s ×ˢ t).image (uncurry (· ⊓ ·)) = Set.image2 (fun x x_1 => x ⊓ x_1) s t := by
- simp only [Set.image_uncurry_prod]
- rw [← this]
- exact image_uncurry_prod _ _ _
+ tauto
theorem infs_assoc : s ⊼ t ⊼ u = s ⊼ (t ⊼ u) := image2_assoc inf_assoc
diff --git a/Mathlib/Data/TypeVec.lean b/Mathlib/Data/TypeVec.lean
index 368c80080f..d57f423e48 100644
--- a/Mathlib/Data/TypeVec.lean
+++ b/Mathlib/Data/TypeVec.lean
@@ -571,8 +571,7 @@ end Liftp'
@[simp]
theorem dropFun_diag {α} : dropFun (@prod.diag (n + 1) α) = prod.diag := by
- ext i : 2
- induction i <;> simp [dropFun, *] <;> rfl
+ tauto
@[simp]
theorem dropFun_subtypeVal {α} (p : α ⟹ «repeat» (n + 1) Prop) :
@@ -587,20 +586,17 @@ theorem lastFun_subtypeVal {α} (p : α ⟹ «repeat» (n + 1) Prop) :
@[simp]
theorem dropFun_toSubtype {α} (p : α ⟹ «repeat» (n + 1) Prop) :
dropFun (toSubtype p) = toSubtype _ := by
- ext i
- induction i <;> simp [dropFun, *] <;> rfl
+ tauto
@[simp]
theorem lastFun_toSubtype {α} (p : α ⟹ «repeat» (n + 1) Prop) :
lastFun (toSubtype p) = _root_.id := by
- ext i : 2
- induction i; simp [*]; rfl
+ tauto
@[simp]
theorem dropFun_of_subtype {α} (p : α ⟹ «repeat» (n + 1) Prop) :
dropFun (ofSubtype p) = ofSubtype _ := by
- ext i : 2
- induction i <;> simp [dropFun, *] <;> rfl
+ tauto
@[simp]
theorem lastFun_of_subtype {α} (p : α ⟹ «repeat» (n + 1) Prop) :
@@ -616,14 +612,12 @@ attribute [simp] drop_append1'
@[simp]
theorem dropFun_prod {α α' β β' : TypeVec (n + 1)} (f : α ⟹ β) (f' : α' ⟹ β') :
dropFun (f ⊗' f') = (dropFun f ⊗' dropFun f') := by
- ext i : 2
- induction i <;> simp [dropFun, *] <;> rfl
+ tauto
@[simp]
theorem lastFun_prod {α α' β β' : TypeVec (n + 1)} (f : α ⟹ β) (f' : α' ⟹ β') :
lastFun (f ⊗' f') = Prod.map (lastFun f) (lastFun f') := by
- ext i : 1
- induction i; simp [lastFun, *]; rfl
+ tauto
@[simp]
theorem dropFun_from_append1_drop_last {α : TypeVec (n + 1)} :
diff --git a/Mathlib/Data/Vector/Basic.lean b/Mathlib/Data/Vector/Basic.lean
index d06cc24cce..8b82891300 100644
--- a/Mathlib/Data/Vector/Basic.lean
+++ b/Mathlib/Data/Vector/Basic.lean
@@ -312,8 +312,7 @@ This lemma is the `cons` version of `scanl_get`.
-/
@[simp]
theorem scanl_cons (x : α) : scanl f b (x ::ᵥ v) = b ::ᵥ scanl f (f b x) v := by
- simp only [scanl, toList_cons, List.scanl]; dsimp
- simp only [cons]
+ tauto
/-- The underlying `List` of a `Vector` after a `scanl` is the `List.scanl`
of the underlying `List` of the original `Vector`.
diff --git a/Mathlib/Data/Vector/Defs.lean b/Mathlib/Data/Vector/Defs.lean
index 33f1bbb7a6..d46e08e2b9 100644
--- a/Mathlib/Data/Vector/Defs.lean
+++ b/Mathlib/Data/Vector/Defs.lean
@@ -233,9 +233,7 @@ theorem toList_cons (a : α) (v : Vector α n) : toList (cons a v) = a :: toList
@[simp]
theorem toList_append {n m : ℕ} (v : Vector α n) (w : Vector α m) :
toList (v ++ w) = toList v ++ toList w := by
- cases v
- cases w
- rfl
+ tauto
/-- `drop` of vectors corresponds under `toList` to `drop` of lists. -/
@[simp]
```
```
✔ [574/587] Built Mathlib.Data.Fin.Basic (4.2s)
✔ [575/587] Built Mathlib.Data.Fin.Rev (1.5s)
✔ [576/587] Built Mathlib.Data.Fin.Embedding (1.6s)
✔ [577/587] Built Mathlib.Order.Fin.Basic (2.0s)
✔ [578/587] Built Mathlib.Data.Fin.Tuple.Basic (3.3s)
✔ [579/587] Built Mathlib.Data.List.OfFn (1.6s)
✔ [580/587] Built Mathlib.Data.List.FinRange (1.7s)
✔ [581/587] Built Mathlib.Data.List.Sort (2.4s)
✔ [582/587] Built Mathlib.Data.Fintype.Basic (2.0s)
✔ [583/587] Built Mathlib.Data.List.NodupEquivFin (1.9s)
✔ [584/587] Built Mathlib.Data.Fintype.Card (2.1s)
✔ [585/587] Built Mathlib.Data.Fintype.EquivFin (2.3s)
✔ [586/587] Built Mathlib.Data.Set.Finite.Basic (2.8s)
✔ [587/587] Built Mathlib.Data.DFinsupp.Defs (4.5s)
Build completed successfully (587 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-data |
26/68 |
Mathlib/Data/DFinsupp/Defs.lean,Mathlib/Data/Fin/Basic.lean,Mathlib/Data/Fin/Tuple/Basic.lean,Mathlib/Data/Fin/Tuple/Take.lean,Mathlib/Data/Finmap.lean,Mathlib/Data/Finsupp/AList.lean,Mathlib/Data/Finsupp/Single.lean,Mathlib/Data/Matrix/Basic.lean,Mathlib/Data/Matrix/Block.lean,Mathlib/Data/PFunctor/Multivariate/W.lean,Mathlib/Data/PFunctor/Univariate/M.lean,Mathlib/Data/Seq/Computation.lean,Mathlib/Data/Seq/Seq.lean,Mathlib/Data/Set/Piecewise.lean,Mathlib/Data/Set/Sups.lean,Mathlib/Data/TypeVec.lean,Mathlib/Data/Vector/Basic.lean,Mathlib/Data/Vector/Defs.lean |
18 |
1 |
['github-actions'] |
nobody |
3-31913 3 days ago |
3-34686 3 days ago |
3-34729 3 days |
28563 |
euprunin author:euprunin |
chore(GroupTheory): golf entire `base_smul_def` and `summand_smul_def` using `tauto` |
---
Show trace profiling of base_smul_def : 14 ms before, <10 ms after 🎉
### Trace profiling of `base_smul_def` before PR 28563
```diff
diff --git a/Mathlib/GroupTheory/PushoutI.lean b/Mathlib/GroupTheory/PushoutI.lean
index 6b1bea567c..d1955509a7 100644
--- a/Mathlib/GroupTheory/PushoutI.lean
+++ b/Mathlib/GroupTheory/PushoutI.lean
@@ -465,6 +465,7 @@ noncomputable instance mulAction : MulAction (PushoutI φ) (NormalWord d) :=
Word.rcons_eq_smul, equiv_fst_eq_mul_inv, map_mul, map_inv, mul_smul, inv_smul_smul,
smul_inv_smul, base_smul_def', MonoidHom.apply_ofInjective_symm]
+set_option trace.profiler true in
theorem base_smul_def (h : H) (w : NormalWord d) :
base φ h • w = { w with head := h * w.head } := by
dsimp [NormalWord.mulAction, instHSMul, SMul.smul]
```
```
ℹ [990/990] Built Mathlib.GroupTheory.PushoutI (5.7s)
info: Mathlib/GroupTheory/PushoutI.lean:469:0: [Elab.command] [0.071533] theorem base_smul_def (h : H) (w : NormalWord d) :
base φ h • w = { w with head := h * w.head } :=
by
dsimp [NormalWord.mulAction, instHSMul, SMul.smul]
rw [lift_base]
rfl
[Elab.definition.header] [0.064651] Monoid.PushoutI.NormalWord.base_smul_def
[Elab.step] [0.063919] expected type: Sort ?u.122533, term
base φ h • w = { w with head := h * w.head }
[Elab.step] [0.063909] expected type: Sort ?u.122533, term
binrel% Eq✝ (base φ h • w) { w with head := h * w.head }
[Elab.step] [0.024792] expected type: , term
base φ h
[Elab.step] [0.010165] expected type: (i : ι) → H →* G i, term
φ
[Meta.isDefEq] [0.010136] ✅️ (i : ?m.17) → ?m.19 →* ?m.18 i =?= (i : ι) → H →* G i
[Meta.isDefEq] [0.010124] ✅️ ?m.19 →* ?m.18 i =?= H →* G i
[Meta.isDefEq] [0.010020] ✅️ toMulOneClass =?= (inst✝³ i).toMulOneClass
[Meta.isDefEq.delta] [0.010003] ✅️ toMulOneClass =?= (inst✝³ i).toMulOneClass
[Meta.synthInstance] [0.018399] ✅️ HSMul (PushoutI φ) (NormalWord d) (NormalWord d)
[Elab.step] [0.019544] expected type: NormalWord d, term
{ w with head := h * w.head }
[Elab.step] [0.017406] expected type: H, term
h * w.head
[Elab.step] [0.017385] expected type: H, term
binop% HMul.hMul✝ h w.head
info: Mathlib/GroupTheory/PushoutI.lean:469:0: [Elab.async] [0.015077] elaborating proof of Monoid.PushoutI.NormalWord.base_smul_def
[Elab.definition.value] [0.014242] Monoid.PushoutI.NormalWord.base_smul_def
[Elab.step] [0.013438]
dsimp [NormalWord.mulAction, instHSMul, SMul.smul]
rw [lift_base]
rfl
[Elab.step] [0.013421]
dsimp [NormalWord.mulAction, instHSMul, SMul.smul]
rw [lift_base]
rfl
Build completed successfully (990 jobs).
```
### Trace profiling of `base_smul_def` after PR 28563
```diff
diff --git a/Mathlib/GroupTheory/PushoutI.lean b/Mathlib/GroupTheory/PushoutI.lean
index 6b1bea567c..e161150bab 100644
--- a/Mathlib/GroupTheory/PushoutI.lean
+++ b/Mathlib/GroupTheory/PushoutI.lean
@@ -465,19 +465,16 @@ noncomputable instance mulAction : MulAction (PushoutI φ) (NormalWord d) :=
Word.rcons_eq_smul, equiv_fst_eq_mul_inv, map_mul, map_inv, mul_smul, inv_smul_smul,
smul_inv_smul, base_smul_def', MonoidHom.apply_ofInjective_symm]
+set_option trace.profiler true in
theorem base_smul_def (h : H) (w : NormalWord d) :
base φ h • w = { w with head := h * w.head } := by
- dsimp [NormalWord.mulAction, instHSMul, SMul.smul]
- rw [lift_base]
- rfl
+ tauto
theorem summand_smul_def {i : ι} (g : G i) (w : NormalWord d) :
of (φ := φ) i g • w = (equivPair i).symm
{ equivPair i w with
head := g * (equivPair i w).head } := by
- dsimp [NormalWord.mulAction, instHSMul, SMul.smul]
- rw [lift_of]
- rfl
+ tauto
theorem of_smul_eq_smul {i : ι} (g : G i) (w : NormalWord d) :
of (φ := φ) i g • w = g • w := by
```
```
ℹ [990/990] Built Mathlib.GroupTheory.PushoutI (3.7s)
info: Mathlib/GroupTheory/PushoutI.lean:469:0: [Elab.command] [0.030019] theorem base_smul_def (h : H) (w : NormalWord d) :
base φ h • w = { w with head := h * w.head } := by tauto
[Elab.definition.header] [0.024390] Monoid.PushoutI.NormalWord.base_smul_def
[Elab.step] [0.023783] expected type: Sort ?u.122533, term
base φ h • w = { w with head := h * w.head }
[Elab.step] [0.023775] expected type: Sort ?u.122533, term
binrel% Eq✝ (base φ h • w) { w with head := h * w.head }
[Meta.synthInstance] [0.010490] ✅️ HSMul (PushoutI φ) (NormalWord d) (NormalWord d)
Build completed successfully (990 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-group-theory |
2/6 |
Mathlib/GroupTheory/PushoutI.lean |
1 |
1 |
['github-actions'] |
nobody |
3-31867 3 days ago |
3-34590 3 days ago |
3-34635 3 days |
28564 |
euprunin author:euprunin |
chore(LinearAlgebra): golf entire `congr_symm`, `LinearMap.toMatrix_smulBasis_left`, `LinearMap.toMatrix_smulBasis_right` and more using `tauto` |
---
Show trace profiling of congr_symm : 24 ms before, 28 ms after
### Trace profiling of `congr_symm` before PR 28564
```diff
diff --git a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean
index c056a51a5b..90cb2cd345 100644
--- a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean
+++ b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean
@@ -204,6 +204,7 @@ theorem congr_apply (e : M ≃ₗ[R] M') (B : BilinForm R M) (x y : M') :
congr e B x y = B (e.symm x) (e.symm y) :=
rfl
+set_option trace.profiler true in
@[simp]
theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by
ext
```
```
ℹ [1062/1062] Built Mathlib.LinearAlgebra.BilinearForm.Hom (3.4s)
info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.command] [0.026792] @[simp]
theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm :=
by
ext
simp only [congr_apply, LinearEquiv.symm_symm]
rfl
info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.async] [0.024764] elaborating proof of LinearMap.BilinForm.congr_symm
[Elab.definition.value] [0.023696] LinearMap.BilinForm.congr_symm
[Elab.step] [0.022888]
ext
simp only [congr_apply, LinearEquiv.symm_symm]
rfl
[Elab.step] [0.022873]
ext
simp only [congr_apply, LinearEquiv.symm_symm]
rfl
info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:209:8: [Elab.async] [0.011246] Lean.addDecl
[Kernel] [0.011207] ✅️ typechecking declarations [LinearMap.BilinForm.congr_symm]
Build completed successfully (1062 jobs).
```
### Trace profiling of `congr_symm` after PR 28564
```diff
diff --git a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean
index c056a51a5b..ce976f69d7 100644
--- a/Mathlib/LinearAlgebra/BilinearForm/Hom.lean
+++ b/Mathlib/LinearAlgebra/BilinearForm/Hom.lean
@@ -204,11 +204,10 @@ theorem congr_apply (e : M ≃ₗ[R] M') (B : BilinForm R M) (x y : M') :
congr e B x y = B (e.symm x) (e.symm y) :=
rfl
+set_option trace.profiler true in
@[simp]
theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by
- ext
- simp only [congr_apply, LinearEquiv.symm_symm]
- rfl
+ tauto
@[simp]
theorem congr_refl : congr (LinearEquiv.refl R M) = LinearEquiv.refl R _ :=
diff --git a/Mathlib/LinearAlgebra/Matrix/ToLin.lean b/Mathlib/LinearAlgebra/Matrix/ToLin.lean
index e78673e1fa..b05d64e287 100644
--- a/Mathlib/LinearAlgebra/Matrix/ToLin.lean
+++ b/Mathlib/LinearAlgebra/Matrix/ToLin.lean
@@ -681,17 +681,13 @@ theorem LinearMap.toMatrix_smulBasis_left {G} [Group G] [DistribMulAction G M₁
[SMulCommClass G R M₁] (g : G) (f : M₁ →ₗ[R] M₂) :
LinearMap.toMatrix (g • v₁) v₂ f =
LinearMap.toMatrix v₁ v₂ (f ∘ₗ DistribMulAction.toLinearMap _ _ g) := by
- ext
- rw [LinearMap.toMatrix_apply, LinearMap.toMatrix_apply]
- dsimp
+ tauto
theorem LinearMap.toMatrix_smulBasis_right {G} [Group G] [DistribMulAction G M₂]
[SMulCommClass G R M₂] (g : G) (f : M₁ →ₗ[R] M₂) :
LinearMap.toMatrix v₁ (g • v₂) f =
LinearMap.toMatrix v₁ v₂ (DistribMulAction.toLinearMap _ _ g⁻¹ ∘ₗ f) := by
- ext
- rw [LinearMap.toMatrix_apply, LinearMap.toMatrix_apply]
- dsimp
+ tauto
end Finite
diff --git a/Mathlib/LinearAlgebra/Multilinear/Curry.lean b/Mathlib/LinearAlgebra/Multilinear/Curry.lean
index dbccfc807a..9175992b1f 100644
--- a/Mathlib/LinearAlgebra/Multilinear/Curry.lean
+++ b/Mathlib/LinearAlgebra/Multilinear/Curry.lean
@@ -84,9 +84,7 @@ theorem MultilinearMap.curryLeft_apply (f : MultilinearMap R M M₂) (x : M 0)
@[simp]
theorem LinearMap.curry_uncurryLeft (f : M 0 →ₗ[R] MultilinearMap R (fun i :
Fin n => M i.succ) M₂) : f.uncurryLeft.curryLeft = f := by
- ext m x
- simp only [tail_cons, LinearMap.uncurryLeft_apply, MultilinearMap.curryLeft_apply]
- rw [cons_zero]
+ tauto
@[simp]
theorem MultilinearMap.uncurry_curryLeft (f : MultilinearMap R M M₂) :
diff --git a/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean b/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean
index 140f4599b3..a5fc97375b 100644
--- a/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean
+++ b/Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean
@@ -104,9 +104,7 @@ def gradedComm :
/-- The braiding is symmetric. -/
@[simp]
theorem gradedComm_symm : (gradedComm R 𝒜 ℬ).symm = gradedComm R ℬ 𝒜 := by
- rw [gradedComm, gradedComm, LinearEquiv.trans_symm, LinearEquiv.symm_symm]
- ext
- rfl
+ tauto
theorem gradedComm_of_tmul_of (i j : ι) (a : 𝒜 i) (b : ℬ j) :
gradedComm R 𝒜 ℬ (lof R _ 𝒜 i a ⊗ₜ lof R _ ℬ j b) =
```
```
ℹ [1062/1062] Built Mathlib.LinearAlgebra.BilinearForm.Hom (3.4s)
info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.command] [0.022737] @[simp]
theorem congr_symm (e : M ≃ₗ[R] M') : (congr e).symm = congr e.symm := by tauto
info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:208:0: [Elab.async] [0.030155] elaborating proof of LinearMap.BilinForm.congr_symm
[Elab.definition.value] [0.028158] LinearMap.BilinForm.congr_symm
[Elab.step] [0.027405] tauto
[Elab.step] [0.027386] tauto
[Elab.step] [0.027369] tauto
[Elab.step] [0.019442] rfl
[Elab.step] [0.019158] eq_refl
[Meta.isDefEq] [0.019142] ✅️ (congr e).symm =?= congr e.symm
[Meta.isDefEq] [0.019026] ✅️ (congr
e).symm =?= (LinearEquiv.congrLeft R R e.symm).congrRight.trans
(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm)
[Meta.isDefEq] [0.018960] ✅️ have __src := (↑(congr e)).inverse (congr e).invFun ⋯ ⋯;
let __src := (congr e).toEquiv.symm;
{ toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯, map_smul' := ⋯,
invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯,
right_inv :=
⋯ } =?= (LinearEquiv.congrLeft R R e.symm).congrRight.trans
(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm)
[Meta.isDefEq] [0.018936] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯), map_add' := ⋯,
map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯,
right_inv :=
⋯ } =?= (LinearEquiv.congrLeft R R e.symm).congrRight.trans
(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm)
[Meta.isDefEq] [0.018834] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯),
map_add' := ⋯, map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯,
right_inv :=
⋯ } =?= let __src :=
↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ₗ
↑(LinearEquiv.congrLeft R R e.symm).congrRight;
let __src_1 :=
(LinearEquiv.congrLeft R R e.symm).congrRight.toEquiv.trans
(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm).toEquiv;
{ toLinearMap := __src, invFun := __src_1.invFun, left_inv := ⋯, right_inv := ⋯ }
[Meta.isDefEq] [0.018825] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯),
map_add' := ⋯, map_smul' := ⋯, invFun := (congr e).toEquiv.symm.invFun, left_inv := ⋯,
right_inv :=
⋯ } =?= {
toLinearMap :=
↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ₗ
↑(LinearEquiv.congrLeft R R e.symm).congrRight,
invFun :=
((LinearEquiv.congrLeft R R e.symm).congrRight.toEquiv.trans
(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm).toEquiv).invFun,
left_inv := ⋯, right_inv := ⋯ }
[Meta.isDefEq] [0.011340] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯),
map_add' := ⋯,
map_smul' :=
⋯ } =?= ↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘ₗ
↑(LinearEquiv.congrLeft R R e.symm).congrRight
[Meta.isDefEq] [0.011274] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯),
map_add' := ⋯,
map_smul' :=
⋯ } =?= {
toFun :=
⇑↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘
⇑↑(LinearEquiv.congrLeft R R e.symm).congrRight,
map_add' := ⋯, map_smul' := ⋯ }
[Meta.isDefEq] [0.010754] ✅️ { toFun := ⇑((↑(congr e)).inverse (congr e).invFun ⋯ ⋯),
map_add' :=
⋯ } =?= {
toFun :=
⇑↑(LinearEquiv.congrLeft (M →ₗ[R] R) R e.symm) ∘
⇑↑(LinearEquiv.congrLeft R R e.symm).congrRight,
map_add' := ⋯ }
info: Mathlib/LinearAlgebra/BilinearForm/Hom.lean:209:8: [Elab.async] [0.100749] Lean.addDecl
[Kernel] [0.100672] ✅️ typechecking declarations [LinearMap.BilinForm.congr_symm]
Build completed successfully (1062 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
5/15 |
Mathlib/LinearAlgebra/BilinearForm/Hom.lean,Mathlib/LinearAlgebra/Matrix/ToLin.lean,Mathlib/LinearAlgebra/Multilinear/Curry.lean,Mathlib/LinearAlgebra/TensorProduct/Graded/External.lean |
4 |
1 |
['github-actions'] |
nobody |
3-31418 3 days ago |
3-34543 3 days ago |
3-34586 3 days |
28566 |
euprunin author:euprunin |
chore(MeasureTheory/Constructions): golf entire `inter_cylinder{,_same}` and `union_cylinder{,_same}` using `tauto` |
---
Show trace profiling of inter_cylinder : <10 ms before, <10 ms after 🎉
### Trace profiling of `inter_cylinder` before PR 28566
```diff
diff --git a/Mathlib/MeasureTheory/Constructions/Cylinders.lean b/Mathlib/MeasureTheory/Constructions/Cylinders.lean
index 0c1e925a61..cc8cbb5b97 100644
--- a/Mathlib/MeasureTheory/Constructions/Cylinders.lean
+++ b/Mathlib/MeasureTheory/Constructions/Cylinders.lean
@@ -183,6 +183,7 @@ theorem cylinder_eq_empty_iff [h_nonempty : Nonempty (∀ i, α i)] (s : Finset
rw [h] at hf'
exact notMem_empty _ hf'
+set_option trace.profiler true in
theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i))
[DecidableEq ι] :
cylinder s₁ S₁ ∩ cylinder s₂ S₂ =
```
```
ℹ [883/883] Built Mathlib.MeasureTheory.Constructions.Cylinders (2.0s)
info: Mathlib/MeasureTheory/Constructions/Cylinders.lean:187:0: [Elab.command] [0.022626] theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i))
(S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] :
cylinder s₁ S₁ ∩ cylinder s₂ S₂ =
cylinder (s₁ ∪ s₂)
(Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∩ Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) :=
by ext1 f; simp only [mem_inter_iff, mem_cylinder]; rfl
[Elab.definition.header] [0.022211] MeasureTheory.inter_cylinder
[Elab.step] [0.015116] expected type: Type (max ?u.2391 ?u.2396), term
Set (∀ i : s₁, α i)
[Elab.step] [0.015047] expected type: Type ?u.2405, term
(∀ i : s₁, α i)
[Elab.step] [0.015037] expected type: Type ?u.2405, term
∀ i : s₁, α i
[Elab.step] [0.015028] expected type: Type ?u.2405, term
forall (i : s₁), α i
[Elab.step] [0.014325] expected type: Type ?u.2396, term
α i
[Elab.coe] [0.014154] adding coercion for i : { x // x ∈ s₁ } =?= ι
[Meta.synthInstance] [0.014040] ✅️ CoeT { x // x ∈ s₁ } i ι
[Meta.synthInstance] [0.011160] ✅️ apply @instCoeTCOfCoe_1 to CoeTC { x // x ∈ s₁ } ι
[Meta.synthInstance.tryResolve] [0.011110] ✅️ CoeTC { x // x ∈ s₁ } ι ≟ CoeTC { x // x ∈ s₁ } ι
[Meta.isDefEq] [0.011028] ✅️ CoeTC { x // x ∈ s₁ } ι =?= CoeTC ?m.16 ?m.17
Build completed successfully (883 jobs).
```
### Trace profiling of `inter_cylinder` after PR 28566
```diff
diff --git a/Mathlib/MeasureTheory/Constructions/Cylinders.lean b/Mathlib/MeasureTheory/Constructions/Cylinders.lean
index 0c1e925a61..f97b20a91e 100644
--- a/Mathlib/MeasureTheory/Constructions/Cylinders.lean
+++ b/Mathlib/MeasureTheory/Constructions/Cylinders.lean
@@ -183,17 +183,18 @@ theorem cylinder_eq_empty_iff [h_nonempty : Nonempty (∀ i, α i)] (s : Finset
rw [h] at hf'
exact notMem_empty _ hf'
+set_option trace.profiler true in
theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i))
[DecidableEq ι] :
cylinder s₁ S₁ ∩ cylinder s₂ S₂ =
cylinder (s₁ ∪ s₂)
(Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∩
Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) := by
- ext1 f; simp only [mem_inter_iff, mem_cylinder]; rfl
+ tauto
theorem inter_cylinder_same (s : Finset ι) (S₁ : Set (∀ i : s, α i)) (S₂ : Set (∀ i : s, α i)) :
cylinder s S₁ ∩ cylinder s S₂ = cylinder s (S₁ ∩ S₂) := by
- classical rw [inter_cylinder]; rfl
+ tauto
theorem union_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i)) (S₂ : Set (∀ i : s₂, α i))
[DecidableEq ι] :
@@ -201,11 +202,11 @@ theorem union_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i))
cylinder (s₁ ∪ s₂)
(Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∪
Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) := by
- ext1 f; simp only [mem_union, mem_cylinder]; rfl
+ tauto
theorem union_cylinder_same (s : Finset ι) (S₁ : Set (∀ i : s, α i)) (S₂ : Set (∀ i : s, α i)) :
cylinder s S₁ ∪ cylinder s S₂ = cylinder s (S₁ ∪ S₂) := by
- classical rw [union_cylinder]; rfl
+ tauto
theorem compl_cylinder (s : Finset ι) (S : Set (∀ i : s, α i)) :
(cylinder s S)ᶜ = cylinder s (Sᶜ) := by
```
```
ℹ [883/883] Built Mathlib.MeasureTheory.Constructions.Cylinders (2.2s)
info: Mathlib/MeasureTheory/Constructions/Cylinders.lean:187:0: [Elab.command] [0.013859] theorem inter_cylinder (s₁ s₂ : Finset ι) (S₁ : Set (∀ i : s₁, α i))
(S₂ : Set (∀ i : s₂, α i)) [DecidableEq ι] :
cylinder s₁ S₁ ∩ cylinder s₂ S₂ =
cylinder (s₁ ∪ s₂)
(Finset.restrict₂ Finset.subset_union_left ⁻¹' S₁ ∩ Finset.restrict₂ Finset.subset_union_right ⁻¹' S₂) :=
by tauto
[Elab.definition.header] [0.013440] MeasureTheory.inter_cylinder
Build completed successfully (883 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
4/4 |
Mathlib/MeasureTheory/Constructions/Cylinders.lean |
1 |
1 |
['github-actions'] |
nobody |
3-31366 3 days ago |
3-34461 3 days ago |
3-34505 3 days |
28574 |
euprunin author:euprunin |
chore(Topology/Category): golf entire `finiteCoproduct.ι_desc_apply`, `piIsoPi_hom_apply`, `prodIsoProd_hom_apply` and `pullbackIsoProdSubtype_hom_apply` using `tauto` |
---
Show trace profiling of finiteCoproduct.ι_desc_apply : 15 ms before, 25 ms after
### Trace profiling of `finiteCoproduct.ι_desc_apply` before PR 28574
```diff
diff --git a/Mathlib/Topology/Category/CompHausLike/Limits.lean b/Mathlib/Topology/Category/CompHausLike/Limits.lean
index 493c277fec..216c5888f2 100644
--- a/Mathlib/Topology/Category/CompHausLike/Limits.lean
+++ b/Mathlib/Topology/Category/CompHausLike/Limits.lean
@@ -109,6 +109,7 @@ lemma finiteCoproduct.ι_injective (a : α) : Function.Injective (finiteCoproduc
lemma finiteCoproduct.ι_jointly_surjective (R : finiteCoproduct X) :
∃ (a : α) (r : X a), R = finiteCoproduct.ι X a r := ⟨R.fst, R.snd, rfl⟩
+set_option trace.profiler true in
lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by
intro x
```
```
ℹ [985/985] Built Mathlib.Topology.Category.CompHausLike.Limits (1.9s)
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.011940] theorem ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x :=
by
intro x
change (ι X a ≫ desc X π) _ = _
simp only [ι_desc]
[Elab.definition.header] [0.011212] CompHausLike.finiteCoproduct.ι_desc_apply
[Elab.step] [0.010053] expected type: Sort ?u.7530, term
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.012175] theorem finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x :=
by
intro x
change (ι X a ≫ desc X π) _ = _
simp only [ι_desc]
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.012211] lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x :=
by
intro x
change (ι X a ≫ desc X π) _ = _
simp only [ι_desc]
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.async] [0.015416] elaborating proof of CompHausLike.finiteCoproduct.ι_desc_apply
[Elab.definition.value] [0.014903] CompHausLike.finiteCoproduct.ι_desc_apply
[Elab.step] [0.014576]
intro x
change (ι X a ≫ desc X π) _ = _
simp only [ι_desc]
[Elab.step] [0.014564]
intro x
change (ι X a ≫ desc X π) _ = _
simp only [ι_desc]
[Elab.step] [0.011699] change (ι X a ≫ desc X π) _ = _
Build completed successfully (985 jobs).
```
### Trace profiling of `finiteCoproduct.ι_desc_apply` after PR 28574
```diff
diff --git a/Mathlib/Topology/Category/CompHausLike/Limits.lean b/Mathlib/Topology/Category/CompHausLike/Limits.lean
index 493c277fec..b70ed614b6 100644
--- a/Mathlib/Topology/Category/CompHausLike/Limits.lean
+++ b/Mathlib/Topology/Category/CompHausLike/Limits.lean
@@ -109,11 +109,10 @@ lemma finiteCoproduct.ι_injective (a : α) : Function.Injective (finiteCoproduc
lemma finiteCoproduct.ι_jointly_surjective (R : finiteCoproduct X) :
∃ (a : α) (r : X a), R = finiteCoproduct.ι X a r := ⟨R.fst, R.snd, rfl⟩
+set_option trace.profiler true in
lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by
- intro x
- change (ι X a ≫ desc X π) _ = _
- simp only [ι_desc]
+ tauto
instance : HasCoproduct X where
exists_colimit := ⟨finiteCoproduct.cofan X, finiteCoproduct.isColimit X⟩
diff --git a/Mathlib/Topology/Category/TopCat/Limits/Products.lean b/Mathlib/Topology/Category/TopCat/Limits/Products.lean
index 0b74c2f6ee..353896fce8 100644
--- a/Mathlib/Topology/Category/TopCat/Limits/Products.lean
+++ b/Mathlib/Topology/Category/TopCat/Limits/Products.lean
@@ -62,9 +62,7 @@ theorem piIsoPi_inv_π_apply {ι : Type v} (α : ι → TopCat.{max v u}) (i :
theorem piIsoPi_hom_apply {ι : Type v} (α : ι → TopCat.{max v u}) (i : ι)
(x : (∏ᶜ α : TopCat.{max v u})) : (piIsoPi α).hom x i = (Pi.π α i :) x := by
- have := piIsoPi_inv_π α i
- rw [Iso.inv_comp_eq] at this
- exact ConcreteCategory.congr_hom this x
+ tauto
/-- The inclusion to the coproduct as a bundled continuous map. -/
abbrev sigmaι {ι : Type v} (α : ι → TopCat.{max v u}) (i : ι) : α i ⟶ TopCat.of (Σ i, α i) := by
@@ -165,9 +163,7 @@ theorem prodIsoProd_hom_snd (X Y : TopCat.{u}) :
theorem prodIsoProd_hom_apply {X Y : TopCat.{u}} (x : ↑(X ⨯ Y)) :
(prodIsoProd X Y).hom x = ((Limits.prod.fst : X ⨯ Y ⟶ _) x,
(Limits.prod.snd : X ⨯ Y ⟶ _) x) := by
- ext
- · exact ConcreteCategory.congr_hom (prodIsoProd_hom_fst X Y) x
- · exact ConcreteCategory.congr_hom (prodIsoProd_hom_snd X Y) x
+ tauto
@[reassoc (attr := simp), elementwise]
theorem prodIsoProd_inv_fst (X Y : TopCat.{u}) :
diff --git a/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean b/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean
index 66049170b3..68b42db21b 100644
--- a/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean
+++ b/Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean
@@ -110,9 +110,7 @@ theorem pullbackIsoProdSubtype_hom_apply {f : X ⟶ Z} {g : Y ⟶ Z}
(pullbackIsoProdSubtype f g).hom x =
⟨⟨pullback.fst f g x, pullback.snd f g x⟩, by
simpa using CategoryTheory.congr_fun pullback.condition x⟩ := by
- apply Subtype.ext; apply Prod.ext
- exacts [ConcreteCategory.congr_hom (pullbackIsoProdSubtype_hom_fst f g) x,
- ConcreteCategory.congr_hom (pullbackIsoProdSubtype_hom_snd f g) x]
+ tauto
theorem pullback_topology {X Y Z : TopCat.{u}} (f : X ⟶ Z) (g : Y ⟶ Z) :
(pullback f g).str =
```
```
✔ [982/985] Built Mathlib.Topology.Category.TopCat.Limits.Products (2.7s)
✔ [983/985] Built Mathlib.Topology.Category.TopCat.Limits.Pullbacks (2.4s)
✔ [984/985] Built Mathlib.CategoryTheory.Extensive (4.3s)
ℹ [985/985] Built Mathlib.Topology.Category.CompHausLike.Limits (3.0s)
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.033044] theorem ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by tauto
[Elab.definition.header] [0.031659] CompHausLike.finiteCoproduct.ι_desc_apply
[Elab.step] [0.030394] expected type: Sort ?u.7530, term
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x
[Elab.step] [0.030250] expected type: Sort ?u.7534, term
finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x
[Elab.step] [0.030242] expected type: Sort ?u.7534, term
binrel% Eq✝ (finiteCoproduct.desc X π (finiteCoproduct.ι X a x)) (π a x)
[Elab.step] [0.025815] expected type: , term
finiteCoproduct.desc X π (finiteCoproduct.ι X a x)
[Elab.step] [0.010204] expected type: (fun X ↦ ↑X.toTop) (finiteCoproduct X), term
(finiteCoproduct.ι X a x)
[Elab.step] [0.010186] expected type: (fun X ↦ ↑X.toTop) (finiteCoproduct X), term
finiteCoproduct.ι X a x
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.033536] theorem finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by tauto
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.command] [0.033652] lemma finiteCoproduct.ι_desc_apply {B : CompHausLike P} {π : (a : α) → X a ⟶ B} (a : α) :
∀ x, finiteCoproduct.desc X π (finiteCoproduct.ι X a x) = π a x := by tauto
info: Mathlib/Topology/Category/CompHausLike/Limits.lean:113:0: [Elab.async] [0.025323] elaborating proof of CompHausLike.finiteCoproduct.ι_desc_apply
[Elab.definition.value] [0.024806] CompHausLike.finiteCoproduct.ι_desc_apply
[Elab.step] [0.024330] tauto
[Elab.step] [0.024317] tauto
[Elab.step] [0.024304] tauto
Build completed successfully (985 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
4/12 |
Mathlib/Topology/Category/CompHausLike/Limits.lean,Mathlib/Topology/Category/TopCat/Limits/Products.lean,Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean |
3 |
1 |
['github-actions'] |
nobody |
3-31158 3 days ago |
3-34134 3 days ago |
3-34178 3 days |
28528 |
euprunin author:euprunin |
chore(LinearAlgebra/AffineSpace): golf entire `univ_fin2` using `trivial` |
---
Show trace profiling of univ_fin2 : 65 ms before, <10 ms after 🎉
### Trace profiling of `univ_fin2` before PR 28528
```diff
diff --git a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean
index 7bd414e385..e6f548c737 100644
--- a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean
+++ b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean
@@ -45,6 +45,7 @@ open Affine
namespace Finset
+set_option trace.profiler true in
theorem univ_fin2 : (univ : Finset (Fin 2)) = {0, 1} := by
ext x
fin_cases x <;> simp
```
```
ℹ [1100/1100] Built Mathlib.LinearAlgebra.AffineSpace.Combination (4.6s)
info: Mathlib/LinearAlgebra/AffineSpace/Combination.lean:49:0: [Elab.async] [0.066423] elaborating proof of Finset.univ_fin2
[Elab.definition.value] [0.065396] Finset.univ_fin2
[Elab.step] [0.064357]
ext x
fin_cases x <;> simp
[Elab.step] [0.064344]
ext x
fin_cases x <;> simp
[Elab.step] [0.063955] (fin_cases x) <;> simp
[Elab.step] [0.063942] focus
fin_cases x
with_annotate_state"<;>" skip
all_goals simp
[Elab.step] [0.063932]
fin_cases x
with_annotate_state"<;>" skip
all_goals simp
[Elab.step] [0.063928]
fin_cases x
with_annotate_state"<;>" skip
all_goals simp
[Elab.step] [0.055960] all_goals simp
[Elab.step] [0.040453] simp
[Elab.step] [0.040447] simp
[Elab.step] [0.040436] simp
[Meta.Tactic.simp.discharge] [0.020831] insert_eq_of_mem discharge ❌️
0 ∈ {1}
[Meta.synthInstance] [0.011027] ❌️ NeZero 1
[Elab.step] [0.015418] simp
[Elab.step] [0.015407] simp
[Elab.step] [0.015396] simp
Build completed successfully (1100 jobs).
```
### Trace profiling of `univ_fin2` after PR 28528
```diff
diff --git a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean
index 7bd414e385..beecee2590 100644
--- a/Mathlib/LinearAlgebra/AffineSpace/Combination.lean
+++ b/Mathlib/LinearAlgebra/AffineSpace/Combination.lean
@@ -45,9 +45,9 @@ open Affine
namespace Finset
+set_option trace.profiler true in
theorem univ_fin2 : (univ : Finset (Fin 2)) = {0, 1} := by
- ext x
- fin_cases x <;> simp
+ trivial
variable {k : Type*} {V : Type*} {P : Type*} [Ring k] [AddCommGroup V] [Module k V]
variable [S : AffineSpace V P]
```
```
✔ [1100/1100] Built Mathlib.LinearAlgebra.AffineSpace.Combination (4.6s)
Build completed successfully (1100 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/2 |
Mathlib/LinearAlgebra/AffineSpace/Combination.lean |
1 |
1 |
['github-actions'] |
nobody |
3-18500 3 days ago |
4-30914 4 days ago |
4-30957 4 days |
28522 |
euprunin author:euprunin |
chore(Algebra/Ring/Subsemiring): golf entire `coe_pow` using `trivial` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
2/6 |
Mathlib/Algebra/Ring/Subsemiring/Defs.lean |
1 |
3 |
['Ruben-VandeVelde', 'euprunin', 'github-actions'] |
nobody |
3-18325 3 days ago |
4-45000 4 days ago |
4-45043 4 days |
28557 |
ShreckYe author:ShreckYe |
feat(Data/Nat/Factorization): some results on equality of powers of naturals proved from factorization |
I came across some math olympiad problems in number theory that could benefit from these theorems, expecially those on the prime power equality `p ^ m = a ^ n`. A specialized `eq_of_factorization_eq'` is added BTW to help with proof search. |
t-data |
102/0 |
Mathlib/Data/Nat/Factorization/Basic.lean,Mathlib/Data/Nat/Factorization/Defs.lean,Mathlib/Data/Nat/Factorization/PrimePow.lean |
3 |
1 |
['github-actions'] |
nobody |
3-17769 3 days ago |
3-35125 3 days ago |
3-35174 3 days |
28539 |
euprunin author:euprunin |
chore(Algebra/Order/Interval/Set): golf entire `one_sub_mem` using `simp_all` |
---
Show trace profiling of one_sub_mem : 29 ms before, 47 ms after
### Trace profiling of `one_sub_mem` before PR 28539
```diff
diff --git a/Mathlib/Algebra/Order/Interval/Set/Instances.lean b/Mathlib/Algebra/Order/Interval/Set/Instances.lean
index a3e0159054..a1a1bfc676 100644
--- a/Mathlib/Algebra/Order/Interval/Set/Instances.lean
+++ b/Mathlib/Algebra/Order/Interval/Set/Instances.lean
@@ -322,6 +322,7 @@ instance instCommSemigroup {R : Type*} [CommSemiring R] [PartialOrder R] [IsStri
variable {β : Type*} [Ring β] [PartialOrder β] [IsOrderedRing β]
+set_option trace.profiler true in
theorem one_sub_mem {t : β} (ht : t ∈ Ioo (0 : β) 1) : 1 - t ∈ Ioo (0 : β) 1 := by
rw [mem_Ioo] at *
refine ⟨sub_pos.2 ht.2, ?_⟩
```
```
ℹ [415/415] Built Mathlib.Algebra.Order.Interval.Set.Instances (1.4s)
info: Mathlib/Algebra/Order/Interval/Set/Instances.lean:326:0: [Elab.async] [0.029587] elaborating proof of Set.Ioo.one_sub_mem
[Elab.definition.value] [0.029046] Set.Ioo.one_sub_mem
[Elab.step] [0.028620]
rw [mem_Ioo] at *
refine ⟨sub_pos.2 ht.2, ?_⟩
exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne')
[Elab.step] [0.028608]
rw [mem_Ioo] at *
refine ⟨sub_pos.2 ht.2, ?_⟩
exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne')
[Elab.step] [0.017723] refine ⟨sub_pos.2 ht.2, ?_⟩
[Meta.synthInstance] [0.014182] ✅️ AddRightStrictMono β
Build completed successfully (415 jobs).
```
### Trace profiling of `one_sub_mem` after PR 28539
```diff
diff --git a/Mathlib/Algebra/Order/Interval/Set/Instances.lean b/Mathlib/Algebra/Order/Interval/Set/Instances.lean
index a3e0159054..9ce1544a80 100644
--- a/Mathlib/Algebra/Order/Interval/Set/Instances.lean
+++ b/Mathlib/Algebra/Order/Interval/Set/Instances.lean
@@ -322,10 +322,9 @@ instance instCommSemigroup {R : Type*} [CommSemiring R] [PartialOrder R] [IsStri
variable {β : Type*} [Ring β] [PartialOrder β] [IsOrderedRing β]
+set_option trace.profiler true in
theorem one_sub_mem {t : β} (ht : t ∈ Ioo (0 : β) 1) : 1 - t ∈ Ioo (0 : β) 1 := by
- rw [mem_Ioo] at *
- refine ⟨sub_pos.2 ht.2, ?_⟩
- exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne')
+ simp_all
theorem mem_iff_one_sub_mem {t : β} : t ∈ Ioo (0 : β) 1 ↔ 1 - t ∈ Ioo (0 : β) 1 :=
⟨one_sub_mem, fun h => sub_sub_cancel 1 t ▸ one_sub_mem h⟩
```
```
ℹ [415/415] Built Mathlib.Algebra.Order.Interval.Set.Instances (1.4s)
info: Mathlib/Algebra/Order/Interval/Set/Instances.lean:326:0: [Elab.async] [0.047387] elaborating proof of Set.Ioo.one_sub_mem
[Elab.definition.value] [0.046889] Set.Ioo.one_sub_mem
[Elab.step] [0.046569] simp_all
[Elab.step] [0.046560] simp_all
[Elab.step] [0.046551] simp_all
[Meta.Tactic.simp.discharge] [0.010940] Ioo_eq_empty discharge ❌️
¬0 < 1
[Meta.Tactic.simp.discharge] [0.010461] Ioo_eq_empty discharge ❌️
¬0 < 1
[Meta.synthInstance] [0.012013] ✅️ AddRightStrictMono β
Build completed successfully (415 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
1/3 |
Mathlib/Algebra/Order/Interval/Set/Instances.lean |
1 |
2 |
['github-actions', 'grunweg'] |
nobody |
3-13984 3 days ago |
3-76450 3 days ago |
3-76502 3 days |
26057 |
YaelDillies author:YaelDillies |
feat: `mon_tauto`, a simp set to prove tautologies about a monoid object |
This simp set proves all tautologies involving (commutative) monoid objects in a (braided) monoidal category.
The general algorithm it follows is to push the associators `α_` and commutators `β_` inwards until they cancel against the right sequence of multiplications.
This approach is justified by the fact that a tautology in the language of (commutative) monoid objects "remembers" how it was proved: Every use of a (commutative) monoid object axiom inserts a unitor, associator or commutator, and proving a tautology simply amounts to undoing those moves as prescribed by the presence of unitors, associators and commutators in its expression.
This simp set is opiniated about its normal form and therefore cannot be used concurrently to some of the simp lemmas in the standard simp set.
As an example, we prove `tensorμ M M M M ≫ (μ ⊗ₘ μ) ≫ μ = (μ ⊗ₘ μ) ≫ μ`, the categorical equivalent of `mul_mul_mul_comm`.
From Toric
Co-authored-by: Andrew Yang
---
- [x] depends on: #26102
[](https://gitpod.io/from-referrer/)
|
toric
t-category-theory
|
151/1 |
Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/Tactic/Attr/Register.lean,MathlibTest/CategoryTheory/Monoidal/MonTauto.lean,scripts/noshake.json |
4 |
11 |
['YaelDillies', 'erdOne', 'github-actions', 'mathlib4-dependent-issues-bot', 'robin-carlier'] |
robin-carlier assignee:robin-carlier |
3-6492 3 days ago |
63-25357 2 months ago |
64-1812 64 days |
27363 |
101damnations author:101damnations |
feat(RepresentationTheory/Homological): add standard resolution for finite cyclic groups |
Let `k` be a commutative ring and `G` a finite commutative group. Given `g : G` and `A : Rep k G`, we can define a periodic chain complex in `Rep k G` given by `... ⟶ A --N--> A --(ρ(g) - 𝟙)--> A --N--> A --(ρ(g) - 𝟙)--> A ⟶ 0` where `N` is the norm map sending `a : A` to `∑ ρ(g)(a)` for all `g` in `G`.
When `G` is generated by `g` and `A` is the left regular representation `k[G]`, this chain complex is a projective resolution of `k` as a trivial representation, which we prove in this PR.
---
- [x] depends on: #27362
- [x] depends on: #27361
[](https://gitpod.io/from-referrer/)
|
|
223/0 |
Mathlib.lean,Mathlib/RepresentationTheory/Homological/FiniteCyclic.lean,Mathlib/RepresentationTheory/Invariants.lean |
3 |
4 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
TwoFX assignee:TwoFX |
3-6490 3 days ago |
11-17913 11 days ago |
14-38118 14 days |
27743 |
alreadydone author:alreadydone |
feat(NumberTheory): Frobenius number exists, ℕ is Noetherian semiring & Sylver coinage |
+ The Frobenius number of a set of natural numbers exist iff the set has gcd 1 and doesn't contain 1.
+ All additive submonoids (= ideals) of ℕ are finitely generated.
+ The game of Sylver coinage always terminates.
This is the outcome of a course project at Heidelberg University: [matematiflo.github.io/CompAssistedMath2025](https://matematiflo.github.io/CompAssistedMath2025/)
Co-authored-by: Daniel Buth @greymatter8
Co-authored-by: Sebastian Meier @SebastianMeierUni
---
FrobeniusNumber is a leaf file so I think doubling its imports is okay.
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
t-combinatorics
t-number-theory
label:t-algebra$ |
252/28 |
Mathlib/Data/Set/Finite/Basic.lean,Mathlib/LinearAlgebra/FreeModule/PID.lean,Mathlib/NumberTheory/FrobeniusNumber.lean,Mathlib/RingTheory/Ideal/NatInt.lean,Mathlib/RingTheory/PrincipalIdealDomain.lean |
5 |
3 |
['github-actions', 'vihdzp'] |
kbuzzard assignee:kbuzzard |
3-6489 3 days ago |
20-30977 20 days ago |
20-56579 20 days |
27900 |
alreadydone author:alreadydone |
feat(Algebra): principal ideal finite product rings |
Show that ideals in a finite product semiring correspond to tuples of ideals in individual rings.
Consequently, a finite product semiring is a PIR if each semiring is.
follow-up of #27236
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
t-algebra
label:t-algebra$ |
83/18 |
Mathlib/LinearAlgebra/Span/Defs.lean,Mathlib/RingTheory/Ideal/Basic.lean,Mathlib/RingTheory/Ideal/Maps.lean,Mathlib/RingTheory/Ideal/Prod.lean,Mathlib/RingTheory/PrincipalIdealDomain.lean |
5 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
kbuzzard assignee:kbuzzard |
3-6487 3 days ago |
15-29313 15 days ago |
17-30960 17 days |
28059 |
hanwenzhu author:hanwenzhu |
refactor(MeasureTheory/RieszMarkovKakutani): Use PositiveLinearMap |
This PR refactors the unbundled `{Λ : C_c(X, ℝ) →ₗ[ℝ] ℝ} (hΛ : ∀ f, 0 ≤ f → 0 ≤ Λ f)` in the statement of RMK to the bundled `(Λ : C_c(X, ℝ) →ₚ[ℝ] ℝ)`.
Zulip discussion: https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Uniqueness.20in.20Riesz.E2.80.93Markov.E2.80.93Kakutani.20representation.20theorem
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-measure-probability
|
122/81 |
Mathlib/Algebra/Order/Module/PositiveLinearMap.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/Basic.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/NNReal.lean,Mathlib/MeasureTheory/Integral/RieszMarkovKakutani/Real.lean,Mathlib/Topology/ContinuousMap/CompactlySupported.lean |
5 |
12 |
['EtienneC30', 'github-actions', 'hanwenzhu', 'yoh-tanimoto'] |
EtienneC30 assignee:EtienneC30 |
3-6486 3 days ago |
11-3281 11 days ago |
13-25148 13 days |
28198 |
Sebi-Kumar author:Sebi-Kumar |
feat(Analysis/InnerProductSpace/PiL2): Add instances for EuclideanSpace rank and EuclideanSpace being infinite |
Add an instance for `Fact (Module.finrank 𝕜 (EuclideanSpace 𝕜 (Fin n)) = n)` which is needed to apply [stereographic'](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Geometry/Manifold/Instances/Sphere.html#stereographic') to EuclideanSpace. Also add an instance for `Infinite (EuclideanSpace 𝕜 ι)` where `ι` is a nonempty fintype. I wasn't sure if these should go in separate pull requests, but they seemed similar enough to me. Thank you to Kenny Lau for the suggestions at [#mathlib4 > Instances for EuclideanSpace](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Instances.20for.20EuclideanSpace).
---
To provide additional context, I am new to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program at the University of Western Ontario under the supervision of Chris Kapulkin and Daniel Carranza. My goal is to contribute that the `n`-sphere is simply connected for `n > 1`.
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-analysis
|
6/0 |
Mathlib/Analysis/InnerProductSpace/PiL2.lean |
1 |
1 |
['github-actions'] |
urkud assignee:urkud |
3-6483 3 days ago |
10-19719 10 days ago |
10-19765 10 days |
28572 |
euprunin author:euprunin |
chore(SetTheory): golf entire `congToClass_empty` using `tauto` |
---
Show trace profiling of congToClass_empty : <10 ms before, <10 ms after 🎉
### Trace profiling of `congToClass_empty` before PR 28572
```diff
diff --git a/Mathlib/SetTheory/ZFC/Class.lean b/Mathlib/SetTheory/ZFC/Class.lean
index 43d3015eb2..2596971ce0 100644
--- a/Mathlib/SetTheory/ZFC/Class.lean
+++ b/Mathlib/SetTheory/ZFC/Class.lean
@@ -129,6 +129,7 @@ theorem univ_notMem_univ : univ ∉ univ :=
def congToClass (x : Set Class.{u}) : Class.{u} :=
{ y | ↑y ∈ x }
+set_option trace.profiler true in
@[simp]
theorem congToClass_empty : congToClass ∅ = ∅ := by
ext z
```
```
✔ [660/660] Built Mathlib.SetTheory.ZFC.Class (2.3s)
Build completed successfully (660 jobs).
```
### Trace profiling of `congToClass_empty` after PR 28572
```diff
diff --git a/Mathlib/SetTheory/ZFC/Class.lean b/Mathlib/SetTheory/ZFC/Class.lean
index 43d3015eb2..fa097799c0 100644
--- a/Mathlib/SetTheory/ZFC/Class.lean
+++ b/Mathlib/SetTheory/ZFC/Class.lean
@@ -129,11 +129,10 @@ theorem univ_notMem_univ : univ ∉ univ :=
def congToClass (x : Set Class.{u}) : Class.{u} :=
{ y | ↑y ∈ x }
+set_option trace.profiler true in
@[simp]
theorem congToClass_empty : congToClass ∅ = ∅ := by
- ext z
- simp only [congToClass, not_empty_hom, iff_false]
- exact Set.notMem_empty z
+ tauto
/-- Convert a class into a conglomerate (a collection of classes) -/
def classToCong (x : Class.{u}) : Set Class.{u} :=
```
```
✔ [660/660] Built Mathlib.SetTheory.ZFC.Class (2.5s)
Build completed successfully (660 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-set-theory |
1/3 |
Mathlib/SetTheory/ZFC/Class.lean |
1 |
1 |
['github-actions', 'vihdzp'] |
nobody |
2-80630 2 days ago |
3-34209 3 days ago |
3-34256 3 days |
27370 |
euprunin author:euprunin |
chore(Tactic/CancelDenoms): golf `cancel_factors_eq` |
---
Show trace profiling of cancel_factors_eq : 120 ms before, 46 ms after 🎉
### Trace profiling of `cancel_factors_eq` before PR 27370
```diff
diff --git a/Mathlib/Tactic/CancelDenoms/Core.lean b/Mathlib/Tactic/CancelDenoms/Core.lean
index c4b62d3e29..3ec2128994 100644
--- a/Mathlib/Tactic/CancelDenoms/Core.lean
+++ b/Mathlib/Tactic/CancelDenoms/Core.lean
@@ -80,6 +80,7 @@ theorem cancel_factors_le {α} [Field α] [LinearOrder α] [IsStrictOrderedRing
· exact mul_pos had hbd
· exact one_div_pos.2 hgcd
+set_option trace.profiler true in
theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a')
(hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) :
(a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by
```
```
ℹ [436/436] Built Mathlib.Tactic.CancelDenoms.Core (2.8s)
info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.command] [0.015258] theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a')
(hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) :
(a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) :=
by
rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]
ext; constructor
· rintro rfl
rfl
· intro h
simp only [← mul_assoc] at h
refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
on_goal 1 => apply mul_ne_zero
on_goal 1 => apply div_ne_zero
· exact one_ne_zero
all_goals assumption
[Elab.definition.header] [0.014988] CancelDenoms.cancel_factors_eq
info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.async] [0.122474] elaborating proof of CancelDenoms.cancel_factors_eq
[Elab.definition.value] [0.119890] CancelDenoms.cancel_factors_eq
[Elab.step] [0.118614]
rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]
ext; constructor
· rintro rfl
rfl
· intro h
simp only [← mul_assoc] at h
refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
on_goal 1 => apply mul_ne_zero
on_goal 1 => apply div_ne_zero
· exact one_ne_zero
all_goals assumption
[Elab.step] [0.118601]
rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]
ext; constructor
· rintro rfl
rfl
· intro h
simp only [← mul_assoc] at h
refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
on_goal 1 => apply mul_ne_zero
on_goal 1 => apply div_ne_zero
· exact one_ne_zero
all_goals assumption
[Elab.step] [0.010324] rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]
[Elab.step] [0.010312] (rewrite [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd];
with_annotate_state"]" (try (with_reducible rfl)))
[Elab.step] [0.010299] rewrite [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.010291] rewrite [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd];
with_annotate_state"]" (try (with_reducible rfl))
[Elab.step] [0.105805] ·
intro h
simp only [← mul_assoc] at h
refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
on_goal 1 => apply mul_ne_zero
on_goal 1 => apply div_ne_zero
· exact one_ne_zero
all_goals assumption
[Elab.step] [0.105661]
intro h
simp only [← mul_assoc] at h
refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
on_goal 1 => apply mul_ne_zero
on_goal 1 => apply div_ne_zero
· exact one_ne_zero
all_goals assumption
[Elab.step] [0.105650]
intro h
simp only [← mul_assoc] at h
refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
on_goal 1 => apply mul_ne_zero
on_goal 1 => apply div_ne_zero
· exact one_ne_zero
all_goals assumption
[Elab.step] [0.043946] refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
[Elab.step] [0.043859] expected type: a = b, term
mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
[Elab.step] [0.025447] expected type: ?m.103 * ?m.104 ≠ 0, term
(mul_ne_zero ?_ ?_)
[Elab.step] [0.025432] expected type: ?m.103 * ?m.104 ≠ 0, term
mul_ne_zero ?_ ?_
[Meta.synthInstance] [0.019262] ✅️ NoZeroDivisors α
[Elab.step] [0.021441] on_goal 1 => apply mul_ne_zero
[Elab.step] [0.019543] apply mul_ne_zero
[Elab.step] [0.019530] apply mul_ne_zero
[Elab.step] [0.019514] apply mul_ne_zero
[Meta.synthInstance] [0.013986] ✅️ NoZeroDivisors α
[Elab.step] [0.018650] · exact one_ne_zero
[Elab.step] [0.018355] exact one_ne_zero
[Elab.step] [0.018309] exact one_ne_zero
[Elab.step] [0.018269] exact one_ne_zero
[Elab.step] [0.017827] expected type: 1 ≠ 0, term
one_ne_zero
[Meta.synthInstance] [0.012295] ✅️ NeZero 1
Build completed successfully (436 jobs).
```
### Trace profiling of `cancel_factors_eq` after PR 27370
```diff
diff --git a/Mathlib/Tactic/CancelDenoms/Core.lean b/Mathlib/Tactic/CancelDenoms/Core.lean
index c4b62d3e29..066f915189 100644
--- a/Mathlib/Tactic/CancelDenoms/Core.lean
+++ b/Mathlib/Tactic/CancelDenoms/Core.lean
@@ -80,20 +80,11 @@ theorem cancel_factors_le {α} [Field α] [LinearOrder α] [IsStrictOrderedRing
· exact mul_pos had hbd
· exact one_div_pos.2 hgcd
+set_option trace.profiler true in
theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a')
(hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) :
(a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by
- rw [← ha, ← hb, ← mul_assoc bd, ← mul_assoc ad, mul_comm bd]
- ext; constructor
- · rintro rfl
- rfl
- · intro h
- simp only [← mul_assoc] at h
- refine mul_left_cancel₀ (mul_ne_zero ?_ ?_) h
- on_goal 1 => apply mul_ne_zero
- on_goal 1 => apply div_ne_zero
- · exact one_ne_zero
- all_goals assumption
+ grind
theorem cancel_factors_ne {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a')
(hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) :
```
```
ℹ [436/436] Built Mathlib.Tactic.CancelDenoms.Core (3.1s)
info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.command] [0.034809] theorem cancel_factors_eq {α} [Field α] {a b ad bd a' b' gcd : α} (ha : ad * a = a')
(hb : bd * b = b') (had : ad ≠ 0) (hbd : bd ≠ 0) (hgcd : gcd ≠ 0) :
(a = b) = (1 / gcd * (bd * a') = 1 / gcd * (ad * b')) := by grind
[Elab.definition.header] [0.014091] CancelDenoms.cancel_factors_eq
info: Mathlib/Tactic/CancelDenoms/Core.lean:84:0: [Elab.async] [0.046425] elaborating proof of CancelDenoms.cancel_factors_eq
[Elab.definition.value] [0.045869] CancelDenoms.cancel_factors_eq
[Elab.step] [0.045340] grind
[Elab.step] [0.045327] grind
[Elab.step] [0.045311] grind
info: Mathlib/Tactic/CancelDenoms/Core.lean:87:2: [Elab.async] [0.027621] Lean.addDecl
[Kernel] [0.027585] ✅️ typechecking declarations [CancelDenoms.cancel_factors_eq._proof_1_1]
Build completed successfully (436 jobs).
```
|
t-meta |
1/11 |
Mathlib/Tactic/CancelDenoms/Core.lean |
1 |
4 |
['euprunin', 'github-actions'] |
alexjbest assignee:alexjbest |
2-78745 2 days ago |
29-12974 29 days ago |
29-13023 29 days |
27847 |
euprunin author:euprunin |
chore(Algebra): avoid duplicating proofs by reusing existing theorems or lemmas |
|
t-algebra label:t-algebra$ |
46/73 |
Archive/Imo/Imo1972Q5.lean,Archive/Imo/Imo2015Q6.lean,Mathlib/Algebra/Homology/Embedding/Extend.lean,Mathlib/Algebra/MvPolynomial/Rename.lean,Mathlib/Algebra/Order/AbsoluteValue/Basic.lean,Mathlib/Algebra/Order/Archimedean/Class.lean,Mathlib/Algebra/Order/BigOperators/Expect.lean,Mathlib/Algebra/Order/BigOperators/Group/Finset.lean,Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean,Mathlib/Algebra/Order/Group/Abs.lean,Mathlib/Algebra/Order/Ring/Unbundled/Rat.lean,Mathlib/Algebra/Polynomial/Degree/Lemmas.lean,Mathlib/Algebra/Polynomial/Monic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean,Mathlib/Analysis/MeanInequalities.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Data/NNRat/Defs.lean,Mathlib/MeasureTheory/Function/Jacobian.lean,Mathlib/NumberTheory/Pell.lean,Mathlib/RingTheory/Polynomial/Basic.lean,Mathlib/Tactic/ComputeDegree.lean,Mathlib/Topology/Algebra/Order/Group.lean,Mathlib/Topology/MetricSpace/Algebra.lean,MathlibTest/GCongr/inequalities.lean,MathlibTest/GRewrite.lean |
25 |
10 |
['Ruben-VandeVelde', 'euprunin', 'github-actions', 'grunweg', 'kbuzzard', 'mathlib4-merge-conflict-bot'] |
mariainesdff assignee:mariainesdff |
2-78272 2 days ago |
4-20224 4 days ago |
15-77474 15 days |
27856 |
euprunin author:euprunin |
chore(RingTheory/PowerSeries): golf entire `trunc_one` using `grind` |
---
Show trace profiling of trunc_one : 88 ms before, 87 ms after 🎉
### Trace profiling of `trunc_one` before PR 27856
```diff
diff --git a/Mathlib/RingTheory/PowerSeries/Trunc.lean b/Mathlib/RingTheory/PowerSeries/Trunc.lean
index 7b8a612d49..9e21778c21 100644
--- a/Mathlib/RingTheory/PowerSeries/Trunc.lean
+++ b/Mathlib/RingTheory/PowerSeries/Trunc.lean
@@ -47,6 +47,7 @@ theorem trunc_zero (n) : trunc n (0 : R⟦X⟧) = 0 :=
rw [coeff_trunc, LinearMap.map_zero, Polynomial.coeff_zero]
split_ifs <;> rfl
+set_option trace.profiler true in
@[simp]
theorem trunc_one (n) : trunc (n + 1) (1 : R⟦X⟧) = 1 :=
Polynomial.ext fun m => by
```
```
ℹ [1292/1292] Built Mathlib.RingTheory.PowerSeries.Trunc (3.2s)
info: Mathlib/RingTheory/PowerSeries/Trunc.lean:51:0: [Elab.async] [0.089409] elaborating proof of PowerSeries.trunc_one
[Elab.definition.value] [0.088361] PowerSeries.trunc_one
[Elab.step] [0.086909]
rw [coeff_trunc, coeff_one, Polynomial.coeff_one]
split_ifs with h _ h'
· rfl
· rfl
· subst h'; simp at h
· rfl
[Elab.step] [0.086897]
rw [coeff_trunc, coeff_one, Polynomial.coeff_one]
split_ifs with h _ h'
· rfl
· rfl
· subst h'; simp at h
· rfl
[Elab.step] [0.038895] split_ifs with h _ h'
[Elab.step] [0.043021] · subst h'; simp at h
[Elab.step] [0.042999] subst h'; simp at h
[Elab.step] [0.042991] subst h'; simp at h
[Elab.step] [0.042673] simp at h
Build completed successfully (1292 jobs).
```
### Trace profiling of `trunc_one` after PR 27856
```diff
diff --git a/Mathlib/RingTheory/PowerSeries/Trunc.lean b/Mathlib/RingTheory/PowerSeries/Trunc.lean
index 7b8a612d49..d9f8019532 100644
--- a/Mathlib/RingTheory/PowerSeries/Trunc.lean
+++ b/Mathlib/RingTheory/PowerSeries/Trunc.lean
@@ -47,15 +47,11 @@ theorem trunc_zero (n) : trunc n (0 : R⟦X⟧) = 0 :=
rw [coeff_trunc, LinearMap.map_zero, Polynomial.coeff_zero]
split_ifs <;> rfl
+set_option trace.profiler true in
@[simp]
theorem trunc_one (n) : trunc (n + 1) (1 : R⟦X⟧) = 1 :=
Polynomial.ext fun m => by
- rw [coeff_trunc, coeff_one, Polynomial.coeff_one]
- split_ifs with h _ h'
- · rfl
- · rfl
- · subst h'; simp at h
- · rfl
+ grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one]
@[simp]
theorem trunc_C (n) (a : R) : trunc (n + 1) (C R a) = Polynomial.C a :=
```
```
ℹ [1292/1292] Built Mathlib.RingTheory.PowerSeries.Trunc (3.1s)
info: Mathlib/RingTheory/PowerSeries/Trunc.lean:51:0: [Elab.async] [0.087506] elaborating proof of PowerSeries.trunc_one
[Elab.definition.value] [0.086697] PowerSeries.trunc_one
[Elab.step] [0.083908] grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one]
[Elab.step] [0.083856] grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one]
[Elab.step] [0.083840] grind [PowerSeries.coeff_trunc, PowerSeries.coeff_one, Polynomial.coeff_one]
[Meta.synthInstance] [0.010307] ✅️ Lean.Grind.NatModule (Lean.Grind.Ring.OfSemiring.Q ℕ)
[Meta.synthInstance] [0.010255] ❌️ LE (MvPowerSeries PUnit.{1} R)
Build completed successfully (1292 jobs).
```
|
maintainer-merge
t-algebra
label:t-algebra$ |
1/6 |
Mathlib/RingTheory/PowerSeries/Trunc.lean |
1 |
8 |
['eric-wieser', 'euprunin', 'github-actions', 'grunweg'] |
adomani assignee:adomani |
2-78148 2 days ago |
19-14227 19 days ago |
19-14745 19 days |
27857 |
euprunin author:euprunin |
chore(Analysis/SpecialFunctions): golf entire `rpow_eq_top_of_nonneg` using `simp` |
---
Show trace profiling of rpow_eq_top_of_nonneg : <10 ms before, 18 ms after
### Trace profiling of `rpow_eq_top_of_nonneg` before PR 27857
```diff
diff --git a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean
index 75b232ee4e..5d2ddf1fce 100644
--- a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean
+++ b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean
@@ -553,6 +553,7 @@ theorem rpow_eq_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y =
lemma rpow_lt_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y < ∞ ↔ x < ∞ := by
simp only [lt_top_iff_ne_top, Ne, rpow_eq_top_iff_of_pos hy]
+set_option trace.profiler true in
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
rw [ENNReal.rpow_eq_top_iff]
rintro (h|h)
```
```
✔ [1872/1872] Built Mathlib.Analysis.SpecialFunctions.Pow.NNReal (6.0s)
Build completed successfully (1872 jobs).
```
### Trace profiling of `rpow_eq_top_of_nonneg` after PR 27857
```diff
diff --git a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean
index 75b232ee4e..68dc37f940 100644
--- a/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean
+++ b/Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean
@@ -553,13 +553,9 @@ theorem rpow_eq_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y =
lemma rpow_lt_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y < ∞ ↔ x < ∞ := by
simp only [lt_top_iff_ne_top, Ne, rpow_eq_top_iff_of_pos hy]
+set_option trace.profiler true in
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
- rw [ENNReal.rpow_eq_top_iff]
- rintro (h|h)
- · exfalso
- rw [lt_iff_not_ge] at h
- exact h.right hy0
- · exact h.left
+ simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt]
-- This is an unsafe rule since we want to try `rpow_ne_top_of_ne_zero` if `y < 0`.
@[aesop (rule_sets := [finiteness]) unsafe apply]
```
```
ℹ [1872/1872] Built Mathlib.Analysis.SpecialFunctions.Pow.NNReal (6.0s)
info: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean:557:0: [Elab.async] [0.018873] elaborating proof of ENNReal.rpow_eq_top_of_nonneg
[Elab.definition.value] [0.018350] ENNReal.rpow_eq_top_of_nonneg
[Elab.step] [0.018131] simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt]
[Elab.step] [0.018118] simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt]
[Elab.step] [0.018101] simp +contextual [ENNReal.rpow_eq_top_iff, hy0.not_gt]
Build completed successfully (1872 jobs).
```
|
maintainer-merge
t-analysis
|
1/6 |
Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean |
1 |
6 |
['eric-wieser', 'euprunin', 'github-actions', 'grunweg', 'kim-em'] |
ADedecker assignee:ADedecker |
2-78030 2 days ago |
19-13865 19 days ago |
19-14372 19 days |
28205 |
euprunin author:euprunin |
chore(Analysis/Calculus): golf entire `HasLineDerivWithinAt.congr_of_eventuallyEq` |
Motivation: Avoid (partial) proof duplication.
---
Show trace profiling of HasLineDerivWithinAt.congr_of_eventuallyEq : 235 ms before, <10 ms after 🎉
### Trace profiling of `HasLineDerivWithinAt.congr_of_eventuallyEq` before PR 28205
```diff
diff --git a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean
index 97ba668da2..c2a1379a95 100644
--- a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean
+++ b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean
@@ -343,6 +343,7 @@ theorem Filter.EventuallyEq.lineDifferentiableWithinAt_iff_of_mem
LineDifferentiableWithinAt 𝕜 f₀ s x v ↔ LineDifferentiableWithinAt 𝕜 f₁ s x v :=
h.lineDifferentiableWithinAt_iff (h.eq_of_nhdsWithin hx)
+set_option trace.profiler true in
lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v)
(h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by
apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
```
```
ℹ [1850/1850] Built Mathlib.Analysis.Calculus.LineDeriv.Basic (7.1s)
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.044840] theorem congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f)
(hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
by
apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
[Elab.step] [0.028254] expected type: Type (max u_2 u_3), term
E →L[𝕜] F
[Elab.step] [0.028080] expected type: Type (max u_2 u_3), term
ContinuousLinearMap✝ (RingHom.id✝ 𝕜) E F
[Meta.synthInstance] [0.010377] ✅️ AddCommMonoid E
[Elab.definition.header] [0.011416] HasLineDerivWithinAt.congr_of_eventuallyEq
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.045090] theorem HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v)
(h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
by
apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.045180] lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v)
(h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
by
apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.async] [0.241538] elaborating proof of HasLineDerivWithinAt.congr_of_eventuallyEq
[Elab.definition.value] [0.235419] HasLineDerivWithinAt.congr_of_eventuallyEq
[Elab.step] [0.234338]
apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
[Elab.step] [0.234325]
apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
[Elab.step] [0.032147] apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
[Elab.step] [0.030192] simp [hx]
[Elab.step] [0.030185] simp [hx]
[Elab.step] [0.030174] simp [hx]
[Meta.isDefEq] [0.026327] ✅️ 0 • ?m =?= 0 • v
[Meta.isDefEq] [0.026186] ✅️ instHSMul =?= instHSMul
[Meta.isDefEq.delta] [0.026172] ✅️ instHSMul =?= instHSMul
[Meta.synthInstance] [0.025868] ✅️ SMulWithZero 𝕜 E
[Meta.synthInstance] [0.017680] ✅️ apply MulActionWithZero.toSMulWithZero to SMulWithZero 𝕜 E
[Meta.synthInstance.tryResolve] [0.017635] ✅️ SMulWithZero 𝕜 E ≟ SMulWithZero 𝕜 E
[Meta.isDefEq] [0.011750] ✅️ ?m.54 =?= MulActionWithZero.toSMulWithZero 𝕜 E
[Meta.isDefEq.assign] [0.011747] ✅️ ?m.54 := MulActionWithZero.toSMulWithZero 𝕜 E
[Meta.isDefEq.assign.checkTypes] [0.011728] ✅️ (?m.54 : SMulWithZero 𝕜
E) := (MulActionWithZero.toSMulWithZero 𝕜 E : SMulWithZero 𝕜 E)
[Meta.isDefEq] [0.011720] ✅️ SMulWithZero 𝕜 E =?= SMulWithZero 𝕜 E
[Elab.step] [0.063437] have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
[Elab.step] [0.063411] focus
refine
no_implicit_lambda%
(have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_)
case body✝ => with_annotate_state"by" (fun_prop)
[Elab.step] [0.063398]
refine
no_implicit_lambda%
(have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_)
case body✝ => with_annotate_state"by" (fun_prop)
[Elab.step] [0.063390]
refine
no_implicit_lambda%
(have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_)
case body✝ => with_annotate_state"by" (fun_prop)
[Elab.step] [0.025620] refine
no_implicit_lambda%
(have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_)
[Elab.step] [0.025555] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0]
fun t ↦ f (x + t • v), term
no_implicit_lambda%
(have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_)
[Elab.step] [0.025544] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0]
fun t ↦ f (x + t • v), term
(have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_)
[Elab.step] [0.025534] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0]
fun t ↦ f (x + t • v), term
have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := ?body✝;
?_
[Elab.step] [0.025437] expected type: Prop, term
Continuous (fun (t : 𝕜) ↦ x + t • v)
[Elab.step] [0.022733] expected type: 𝕜 → E, term
(fun (t : 𝕜) ↦ x + t • v)
[Elab.step] [0.022726] expected type: 𝕜 → E, term
fun (t : 𝕜) ↦ x + t • v
[Elab.step] [0.022644] expected type: E, term
x + t • v
[Elab.step] [0.022634] expected type: E, term
binop% HAdd.hAdd✝ x (t • v)
[Meta.synthInstance] [0.012145] ✅️ HSMul 𝕜 E E
[Elab.step] [0.037752] case body✝ => with_annotate_state"by" (fun_prop)
[Elab.step] [0.037590] with_annotate_state"by" (fun_prop)
[Elab.step] [0.037584] with_annotate_state"by" (fun_prop)
[Elab.step] [0.037576] with_annotate_state"by" (fun_prop)
[Elab.step] [0.037566] (fun_prop)
[Elab.step] [0.037560] fun_prop
[Elab.step] [0.037553] fun_prop
[Elab.step] [0.037537] fun_prop
[Meta.Tactic.fun_prop] [0.036033] [✅️] Continuous fun t ↦ x + t • v
[Meta.Tactic.fun_prop] [0.035608] [✅️] applying: Continuous.add
[Meta.Tactic.fun_prop] [0.026323] [✅️] Continuous fun x ↦ x • v
[Meta.Tactic.fun_prop] [0.025780] [✅️] applying: Continuous.smul
[Meta.synthInstance] [0.024459] ✅️ ContinuousSMul 𝕜 E
[Meta.synthInstance] [0.010968] ❌️ apply @ModuleFilterBasis.continuousSMul to ContinuousSMul
𝕜 E
[Meta.synthInstance.tryResolve] [0.010896] ❌️ ContinuousSMul 𝕜
E ≟ ContinuousSMul ?m.91 ?m.92
[Meta.isDefEq] [0.010866] ❌️ ContinuousSMul 𝕜
E =?= ContinuousSMul ?m.91 ?m.92
[Meta.isDefEq] [0.010148] ✅️ DistribMulAction.toDistribSMul.toSMul =?= DistribMulAction.toDistribSMul.toSMul
[Meta.isDefEq.delta] [0.010090] ✅️ DistribMulAction.toDistribSMul.toSMul =?= DistribMulAction.toDistribSMul.toSMul
[Elab.step] [0.138706] exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
[Elab.step] [0.088650] expected type: (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦
f (x + t • v), term
A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
[Meta.isDefEq] [0.077764] ❌️ (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦
f (x + t • v) =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq] [0.077754] ❌️ (fun t ↦ f₁ (x + t • v)) =ᶠ[𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0] fun t ↦
f (x + t • v) =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq] [0.077673] ❌️ ∀ᶠ (x_1 : 𝕜) in 𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0,
(fun t ↦ f₁ (x + t • v)) x_1 =
(fun t ↦ f (x + t • v))
x_1 =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq] [0.077611] ❌️ {x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈
𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0 =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq.delta] [0.017341] ❌️ {x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈
𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0 =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈ 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq] [0.012680] ❌️ {x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= (fun t ↦ x + t • v) ⁻¹' ?m.112
[Meta.isDefEq] [0.012627] ❌️ {x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= {x_1 | (fun t ↦ x + t • v) x_1 ∈ ?m.112}
[Meta.isDefEq] [0.010589] ❌️ fun x_1 ↦
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1 =?= fun x_1 ↦ (fun t ↦ x + t • v) x_1 ∈ ?m.112
[Meta.isDefEq] [0.010582] ❌️ (fun x ↦
(fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x)
x =?= (fun t ↦ x✝ + t • v) x ∈ ?m.112
[Meta.isDefEq] [0.010576] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x =
(fun t ↦ f (x✝ + t • v)) x =?= (fun t ↦ x✝ + t • v) x ∈ ?m.112
[Meta.isDefEq] [0.010563] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x =
(fun t ↦ f (x✝ + t • v))
x =?= Set.instMembership.1 ?m.112 ((fun t ↦ x✝ + t • v) x)
[Meta.isDefEq] [0.010550] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x =
(fun t ↦ f (x✝ + t • v)) x =?= Set.Mem ?m.112 ((fun t ↦ x✝ + t • v) x)
[Meta.isDefEq] [0.010535] ❌️ (fun t ↦ f₁ (x✝ + t • v)) x =
(fun t ↦ f (x✝ + t • v)) x =?= ?m.112 ((fun t ↦ x✝ + t • v) x)
[Meta.isDefEq.assign] [0.010526] ❌️ ?m.112
((fun t ↦ x✝ + t • v)
x) := (fun t ↦ f₁ (x✝ + t • v)) x = (fun t ↦ f (x✝ + t • v)) x
[Meta.isDefEq] [0.010508] ❌️ (fun t ↦ x✝ + t • v)
x =?= (fun t ↦ f (x✝ + t • v)) x
[Meta.isDefEq] [0.010502] ❌️ x✝ + x • v =?= f (x✝ + x • v)
[Meta.isDefEq] [0.010433] ❌️ instHAdd.1 x✝ (x • v) =?= f (x✝ + x • v)
[Meta.isDefEq] [0.010417] ❌️ Add.add x✝ (x • v) =?= f (x✝ + x • v)
[Meta.isDefEq] [0.060224] ❌️ Filter.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0)
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= Filter.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109)
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.060183] ❌️ {x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈
(𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0).sets =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈
(𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets
[Meta.isDefEq.delta] [0.021246] ❌️ {x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2) x_1} ∈
(𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0).sets =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 ∈
(𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets
[Meta.isDefEq] [0.013694] ✅️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0).sets =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets
[Meta.isDefEq.delta] [0.013682] ✅️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0).sets =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets
[Meta.isDefEq] [0.013667] ✅️ 𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0 =?= 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq.delta] [0.013449] ✅️ 𝓝[(fun t ↦ x + t • v) ⁻¹' s]
0 =?= 𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109
[Meta.isDefEq] [0.012745] ✅️ (fun t ↦ x + t • v) ⁻¹'
s =?= (fun t ↦ x + t • v) ⁻¹' ?m.111
[Meta.isDefEq.delta] [0.012727] ✅️ (fun t ↦ x + t • v) ⁻¹'
s =?= (fun t ↦ x + t • v) ⁻¹' ?m.111
[Meta.isDefEq] [0.012137] ✅️ fun t ↦ x + t • v =?= fun t ↦ x + t • v
[Meta.isDefEq] [0.011501] ✅️ x + t • v =?= x + t • v
[Meta.isDefEq] [0.011142] ✅️ instHAdd.1 x (t • v) =?= instHAdd.1 x (t • v)
[Meta.isDefEq] [0.011082] ✅️ Add.add x (t • v) =?= Add.add x (t • v)
[Meta.isDefEq] [0.010696] ✅️ inst✝¹.toAddCommMonoid.toAddCommSemigroup.toAddCommMagma.toAdd.1
x
(t •
v) =?= NormedAddCommGroup.toENormedAddCommMonoid.toAddCommMonoid.toAddCommSemigroup.toAddCommMagma.toAdd.1
x (t • v)
[Meta.isDefEq] [0.038913] ❌️ Set.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= Set.instMembership.1 (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.038878] ❌️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets.Mem
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets.Mem
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.031752] ❌️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).sets
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).sets
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.026255] ❌️ (𝓝[(fun t ↦ x + t • v) ⁻¹' s] 0).1
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= (𝓝[(fun t ↦ x + t • v) ⁻¹' ?m.111] ?m.109).1
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.026153] ❌️ {s_1 |
∃ a ∈ 𝓝 0, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), s_1 = a ∩ b}
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= {s |
∃ a ∈ 𝓝 ?m.109, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), s = a ∩ b}
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.018272] ❌️ (fun s_1 ↦
∃ a ∈ 𝓝 0, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s), s_1 = a ∩ b)
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= (fun s ↦
∃ a ∈ 𝓝 ?m.109, ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111), s = a ∩ b)
((fun t ↦ x + t • v) ⁻¹' ?m.112)
[Meta.isDefEq] [0.018265] ❌️ ∃ a ∈ 𝓝 0,
∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s),
{x_1 |
(fun x_2 ↦ (fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩
b =?= ∃ a ∈ 𝓝 ?m.109,
∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111),
(fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.018233] ❌️ fun a ↦
a ∈ 𝓝 0 ∧
∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s),
{x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩
b =?= fun a ↦
a ∈ 𝓝 ?m.109 ∧
∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111),
(fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.018220] ❌️ a ∈ 𝓝 0 ∧
∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s),
{x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩
b =?= a ∈ 𝓝 ?m.109 ∧
∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111),
(fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.018135] ❌️ ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s),
{x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩
b =?= ∃ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111),
(fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.018113] ❌️ fun b ↦
b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s) ∧
{x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩
b =?= fun b ↦
b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111) ∧
(fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.018103] ❌️ b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' s) ∧
{x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩
b =?= b ∈ 𝓟 ((fun t ↦ x + t • v) ⁻¹' ?m.111) ∧
(fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.010937] ❌️ {x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =
a ∩ b =?= (fun t ↦ x + t • v) ⁻¹' ?m.112 = a ∩ b
[Meta.isDefEq] [0.010782] ❌️ {x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 = (fun t ↦ f (x + t • v)) x_2)
x_1} =?= (fun t ↦ x + t • v) ⁻¹' ?m.112
[Meta.isDefEq] [0.010758] ❌️ {x_1 |
(fun x_2 ↦
(fun t ↦ f₁ (x + t • v)) x_2 =
(fun t ↦ f (x + t • v)) x_2)
x_1} =?= {x_1 | (fun t ↦ x + t • v) x_1 ∈ ?m.112}
[Elab.step] [0.044069] simp
[Elab.step] [0.044055] simp
[Elab.step] [0.044043] simp
[Meta.isDefEq] [0.036423] ✅️ 0 • ?m =?= 0 • v
[Meta.isDefEq] [0.036268] ✅️ instHSMul =?= instHSMul
[Meta.isDefEq.delta] [0.036247] ✅️ instHSMul =?= instHSMul
[Meta.synthInstance] [0.035497] ✅️ SMulWithZero 𝕜 E
[Meta.synthInstance] [0.020865] ✅️ apply MulActionWithZero.toSMulWithZero to SMulWithZero 𝕜 E
[Meta.synthInstance.tryResolve] [0.020824] ✅️ SMulWithZero 𝕜 E ≟ SMulWithZero 𝕜 E
[Meta.isDefEq] [0.017188] ✅️ ?m.120 =?= MulActionWithZero.toSMulWithZero 𝕜 E
[Meta.isDefEq.assign] [0.017185] ✅️ ?m.120 := MulActionWithZero.toSMulWithZero 𝕜 E
[Meta.isDefEq.assign.checkTypes] [0.017168] ✅️ (?m.120 : SMulWithZero 𝕜
E) := (MulActionWithZero.toSMulWithZero 𝕜 E : SMulWithZero 𝕜 E)
[Meta.isDefEq] [0.017165] ✅️ SMulWithZero 𝕜 E =?= SMulWithZero 𝕜 E
[Meta.synthInstance] [0.014114] ✅️ Zero E
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:6: [Elab.async] [0.022735] Lean.addDecl
[Kernel] [0.022289] ✅️ typechecking declarations [HasLineDerivWithinAt.congr_of_eventuallyEq]
Build completed successfully (1850 jobs).
```
### Trace profiling of `HasLineDerivWithinAt.congr_of_eventuallyEq` after PR 28205
```diff
diff --git a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean
index 97ba668da2..5ac4634382 100644
--- a/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean
+++ b/Mathlib/Analysis/Calculus/LineDeriv/Basic.lean
@@ -343,11 +343,10 @@ theorem Filter.EventuallyEq.lineDifferentiableWithinAt_iff_of_mem
LineDifferentiableWithinAt 𝕜 f₀ s x v ↔ LineDifferentiableWithinAt 𝕜 f₁ s x v :=
h.lineDifferentiableWithinAt_iff (h.eq_of_nhdsWithin hx)
+set_option trace.profiler true in
lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v)
- (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v := by
- apply HasDerivWithinAt.congr_of_eventuallyEq hf _ (by simp [hx])
- have A : Continuous (fun (t : 𝕜) ↦ x + t • v) := by fun_prop
- exact A.continuousWithinAt.preimage_mem_nhdsWithin'' h'f (by simp)
+ (h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
+ (EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf
theorem HasLineDerivAt.congr_of_eventuallyEq (h : HasLineDerivAt 𝕜 f f' x v) (h₁ : f₁ =ᶠ[𝓝 x] f) :
HasLineDerivAt 𝕜 f₁ f' x v := by
```
```
ℹ [1850/1850] Built Mathlib.Analysis.Calculus.LineDeriv.Basic (6.8s)
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.053877] theorem congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v) (h'f : f₁ =ᶠ[𝓝[s] x] f)
(hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
(EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf
[Elab.step] [0.038023] expected type: Type (max u_2 u_3), term
E →L[𝕜] F
[Elab.step] [0.037231] expected type: Type (max u_2 u_3), term
ContinuousLinearMap✝ (RingHom.id✝ 𝕜) E F
[Elab.definition.header] [0.010772] HasLineDerivWithinAt.congr_of_eventuallyEq
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.054140] theorem HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v)
(h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
(EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf
info: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean:347:0: [Elab.command] [0.054209] lemma HasLineDerivWithinAt.congr_of_eventuallyEq (hf : HasLineDerivWithinAt 𝕜 f f' s x v)
(h'f : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x) : HasLineDerivWithinAt 𝕜 f₁ f' s x v :=
(EventuallyEq.hasLineDerivWithinAt_iff (EventuallyEq.symm h'f.eventually) hx.symm).mp hf
Build completed successfully (1850 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
2/4 |
Mathlib/Analysis/Calculus/LineDeriv/Basic.lean |
1 |
6 |
['euprunin', 'github-actions', 'grunweg', 'kim-em'] |
nobody |
2-77484 2 days ago |
4-20534 4 days ago |
5-38879 5 days |
28506 |
kim-em author:kim-em |
chore: clarify internal heartbeat conversion |
The previous comment was misleading.
-----
Just playing around with codex; it found this by itself, although suggested the wrong fix.
https://chatgpt.com/codex/tasks/task_e_68a003a948f483219633825547b190e0 |
t-meta |
4/2 |
Mathlib/Util/SleepHeartbeats.lean |
1 |
1 |
['github-actions'] |
nobody |
2-77037 2 days ago |
4-79162 4 days ago |
4-79209 4 days |
28588 |
vihdzp author:vihdzp |
feat: supremum of principal ordinals is principal |
Used in the [`combinatorial-games`](https://github.com/vihdzp/combinatorial-games) repository.
---
[](https://gitpod.io/from-referrer/)
|
t-set-theory |
21/0 |
Mathlib/SetTheory/Ordinal/Principal.lean |
1 |
1 |
['github-actions'] |
nobody |
2-69560 2 days ago |
2-70335 2 days ago |
2-70381 2 days |
28589 |
vihdzp author:vihdzp |
feat: more lemmas on characteristic 2 rings |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
11/0 |
Mathlib/Algebra/CharP/Two.lean |
1 |
1 |
['github-actions'] |
nobody |
2-69513 2 days ago |
2-69712 2 days ago |
2-69707 2 days |
28590 |
euprunin author:euprunin |
chore(Data/List): golf entire `idxOf_eq_length_iff` using `grind` |
---
Show trace profiling of idxOf_eq_length_iff : 104 ms before, 24 ms after 🎉
### Trace profiling of `idxOf_eq_length_iff` before PR 28590
```diff
diff --git a/Mathlib/Data/List/Basic.lean b/Mathlib/Data/List/Basic.lean
index 9120dea54a..2b2dd2b76a 100644
--- a/Mathlib/Data/List/Basic.lean
+++ b/Mathlib/Data/List/Basic.lean
@@ -527,6 +527,7 @@ theorem idxOf_cons_eq {a b : α} (l : List α) : b = a → idxOf a (b :: l) = 0
theorem idxOf_cons_ne {a b : α} (l : List α) : b ≠ a → idxOf a (b :: l) = succ (idxOf a l)
| h => by simp only [idxOf_cons, Bool.cond_eq_ite, beq_iff_eq, if_neg h]
+set_option trace.profiler true in
theorem idxOf_eq_length_iff {a : α} {l : List α} : idxOf a l = length l ↔ a ∉ l := by
induction l with
| nil => exact iff_of_true rfl not_mem_nil
```
```
ℹ [431/431] Built Mathlib.Data.List.Basic (2.0s)
info: Mathlib/Data/List/Basic.lean:531:0: [Elab.async] [0.104377] elaborating proof of List.idxOf_eq_length_iff
[Elab.definition.value] [0.103682] List.idxOf_eq_length_iff
[Elab.step] [0.103281] induction l with
| nil => exact iff_of_true rfl not_mem_nil
| cons b l ih =>
simp only [length, mem_cons, idxOf_cons]
rw [cond_eq_if]
split_ifs with h <;> simp at h
· exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm
· simp only [Ne.symm h, false_or]
rw [← ih]
exact succ_inj
[Elab.step] [0.103268] induction l with
| nil => exact iff_of_true rfl not_mem_nil
| cons b l ih =>
simp only [length, mem_cons, idxOf_cons]
rw [cond_eq_if]
split_ifs with h <;> simp at h
· exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm
· simp only [Ne.symm h, false_or]
rw [← ih]
exact succ_inj
[Elab.step] [0.103257] induction l with
| nil => exact iff_of_true rfl not_mem_nil
| cons b l ih =>
simp only [length, mem_cons, idxOf_cons]
rw [cond_eq_if]
split_ifs with h <;> simp at h
· exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm
· simp only [Ne.symm h, false_or]
rw [← ih]
exact succ_inj
[Elab.step] [0.101212]
simp only [length, mem_cons, idxOf_cons]
rw [cond_eq_if]
split_ifs with h <;> simp at h
· exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm
· simp only [Ne.symm h, false_or]
rw [← ih]
exact succ_inj
[Elab.step] [0.101182]
simp only [length, mem_cons, idxOf_cons]
rw [cond_eq_if]
split_ifs with h <;> simp at h
· exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm
· simp only [Ne.symm h, false_or]
rw [← ih]
exact succ_inj
[Elab.step] [0.085979] split_ifs with h <;> simp at h
[Elab.step] [0.085910] focus
split_ifs with h
with_annotate_state"<;>" skip
all_goals simp at h
[Elab.step] [0.085900]
split_ifs with h
with_annotate_state"<;>" skip
all_goals simp at h
[Elab.step] [0.085892]
split_ifs with h
with_annotate_state"<;>" skip
all_goals simp at h
[Elab.step] [0.081108] split_ifs with h
Build completed successfully (431 jobs).
```
### Trace profiling of `idxOf_eq_length_iff` after PR 28590
```diff
diff --git a/Mathlib/Data/List/Basic.lean b/Mathlib/Data/List/Basic.lean
index 9120dea54a..b32134ed29 100644
--- a/Mathlib/Data/List/Basic.lean
+++ b/Mathlib/Data/List/Basic.lean
@@ -527,17 +527,9 @@ theorem idxOf_cons_eq {a b : α} (l : List α) : b = a → idxOf a (b :: l) = 0
theorem idxOf_cons_ne {a b : α} (l : List α) : b ≠ a → idxOf a (b :: l) = succ (idxOf a l)
| h => by simp only [idxOf_cons, Bool.cond_eq_ite, beq_iff_eq, if_neg h]
+set_option trace.profiler true in
theorem idxOf_eq_length_iff {a : α} {l : List α} : idxOf a l = length l ↔ a ∉ l := by
- induction l with
- | nil => exact iff_of_true rfl not_mem_nil
- | cons b l ih =>
- simp only [length, mem_cons, idxOf_cons]
- rw [cond_eq_if]
- split_ifs with h <;> simp at h
- · exact iff_of_false (by rintro ⟨⟩) fun H => H <| Or.inl h.symm
- · simp only [Ne.symm h, false_or]
- rw [← ih]
- exact succ_inj
+ grind
```
```
ℹ [431/431] Built Mathlib.Data.List.Basic (2.5s)
info: Mathlib/Data/List/Basic.lean:531:0: [Elab.async] [0.024881] elaborating proof of List.idxOf_eq_length_iff
[Elab.definition.value] [0.024415] List.idxOf_eq_length_iff
[Elab.step] [0.024206] grind
[Elab.step] [0.024193] grind
[Elab.step] [0.024177] grind
Build completed successfully (431 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-data |
1/10 |
Mathlib/Data/List/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
2-68622 2 days ago |
2-68666 2 days ago |
2-68708 2 days |
28519 |
euprunin author:euprunin |
chore(LinearAlgebra/AffineSpace/AffineSubspace): deprecate `mem_mk'_iff_vsub_mem` (duplicate) |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
8/14 |
Mathlib/Algebra/Module/ZLattice/Basic.lean,Mathlib/Geometry/Euclidean/Sphere/SecondInter.lean,Mathlib/Geometry/Euclidean/Sphere/Tangent.lean,Mathlib/LinearAlgebra/AffineSpace/AffineSubspace/Defs.lean |
4 |
3 |
['Ruben-VandeVelde', 'euprunin', 'github-actions'] |
nobody |
2-68279 2 days ago |
2-68279 2 days ago |
4-5791 4 days |
28544 |
themathqueen author:themathqueen |
feat(Algebra/Star/Unitary): `unitary * a * star unitary` is self-adjoint iff `a` is |
---
- [x] depends on: #28476
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
8/0 |
Mathlib/Algebra/Star/Unitary.lean |
1 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
nobody |
2-63856 2 days ago |
2-65580 2 days ago |
2-65605 2 days |
27840 |
CBirkbeck author:CBirkbeck |
feat(NumberTheory/ModularForms/EisensteinSeries): define gammaSetN |
We define gammaSetWithGcd, which is the set of integer vectors with gcd equal to some natural number N. This is useful for giving the q-expansions of Eisenstein series at level one. Which can be seen here #27606 (these equivalences are used in `tsum_prod_eisSummand_eq_riemannZeta_eisensteinSeries` in the QExpansions file).
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
75/2 |
Mathlib/NumberTheory/ModularForms/EisensteinSeries/Defs.lean,Mathlib/RingTheory/EuclideanDomain.lean |
2 |
7 |
['CBirkbeck', 'MichaelStollBayreuth', 'github-actions'] |
MichaelStollBayreuth assignee:MichaelStollBayreuth |
2-59935 2 days ago |
8-53691 8 days ago |
17-46167 17 days |
28598 |
lauramonk author:lauramonk |
feat(Combinatorics/Graph) add definitions of incidenceSet and loopSet |
Add the definition for `incidenceSet` and `loopSet` of a vertex in a graph, and a proof that the `loopSet` is included in the `incidenceSet`.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-combinatorics
easy
|
22/0 |
Mathlib/Combinatorics/Graph/Basic.lean |
1 |
2 |
['github-actions', 'lauramonk'] |
nobody |
2-45617 2 days ago |
2-45625 2 days ago |
2-45668 2 days |
28582 |
Thmoas-Guan author:Thmoas-Guan |
feat(Data): some lemmas about withBot ENat |
Add some lemma about withBot ENat discovered when dealing with `ringKrullDim`
---
[](https://gitpod.io/from-referrer/)
|
t-data |
18/0 |
Mathlib/Data/ENat/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
2-45257 2 days ago |
2-83376 2 days ago |
2-83422 2 days |
28338 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/IsPositive): `(adjoint S ∘ S).IsPositive` and `(S ∘ adjoint S).IsPositive` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis
easy
|
16/0 |
Mathlib/Analysis/InnerProductSpace/Positive.lean |
1 |
1 |
['github-actions'] |
nobody |
2-45209 2 days ago |
7-57751 7 days ago |
7-57755 7 days |
28587 |
vihdzp author:vihdzp |
feat: irreducible polynomial has positive degree |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
12/2 |
Mathlib/Algebra/Polynomial/FieldDivision.lean |
1 |
1 |
['github-actions', 'lauramonk'] |
nobody |
2-44978 2 days ago |
2-71063 2 days ago |
2-71057 2 days |
23835 |
chrisflav author:chrisflav |
feat(Topology): cardinality of connected components is bounded by cardinality of fiber |
We show that if `f : X → Y` is an open and closed map to `Y` and `Y` is connected, the number of connected
components of `X` is bounded by the cardinality of the fiber of any point. In particular, if `Y` has finitely many connected components and `f` finite fibers, also `X` as finitely many connected components.
From Pi1.
---
- [x] depends on: #23849
[](https://gitpod.io/from-referrer/)
|
t-topology |
242/1 |
Mathlib.lean,Mathlib/Data/Set/Lattice.lean,Mathlib/SetTheory/Cardinal/Finite.lean,Mathlib/Topology/Clopen.lean,Mathlib/Topology/Connected/CardComponents.lean,Mathlib/Topology/Connected/Clopen.lean |
6 |
5 |
['chrisflav', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot'] |
nobody |
2-44951 2 days ago |
2-50061 2 days ago |
4-44096 4 days |
24528 |
chrisflav author:chrisflav |
feat(AlgebraicGeometry): directed covers |
Directed covers are covers, where every intersection can be covered by a component of the cover. For open covers this is equivalent to the images forming a basis of the topology.
If a cover is directed, the compatibility conditions for gluing become easier, because only compatibility with the transition maps needs to be checked. In particular, the covered scheme naturally is the colimit of the components
of the cover.
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-geometry |
291/0 |
Mathlib.lean,Mathlib/AlgebraicGeometry/Cover/Directed.lean |
2 |
9 |
['chrisflav', 'erdOne', 'github-actions', 'joelriou', 'leanprover-community-bot-assistant', 'mattrobball'] |
mattrobball assignee:mattrobball |
2-43408 2 days ago |
2-43408 2 days ago |
103-27081 103 days |
28531 |
Ruben-VandeVelde author:Ruben-VandeVelde |
chore: remove Cardinal imports from Topology.Algebra.InfiniteSum.Group |
---
[](https://gitpod.io/from-referrer/)
|
|
51/15 |
Mathlib.lean,Mathlib/Analysis/BoxIntegral/UnitPartition.lean,Mathlib/Analysis/Normed/Group/Pointwise.lean,Mathlib/Analysis/Normed/Module/Convex.lean,Mathlib/Analysis/SpecificLimits/Basic.lean,Mathlib/Topology/Algebra/InfiniteSum/Const.lean,Mathlib/Topology/Algebra/InfiniteSum/Group.lean,Mathlib/Topology/Algebra/InfiniteSum/NatInt.lean,Mathlib/Topology/Algebra/InfiniteSum/Order.lean,Mathlib/Topology/Algebra/InfiniteSum/Real.lean,Mathlib/Topology/Category/Stonean/Basic.lean,Mathlib/Topology/Instances/ENNReal/Lemmas.lean,Mathlib/Topology/Instances/NNReal/Lemmas.lean,Mathlib/Topology/MetricSpace/HausdorffDistance.lean,Mathlib/Topology/MetricSpace/Thickening.lean,Mathlib/Topology/PartitionOfUnity.lean |
16 |
4 |
['Ruben-VandeVelde', 'YaelDillies', 'github-actions'] |
nobody |
2-40199 2 days ago |
4-17330 4 days ago |
4-17314 4 days |
28517 |
Vierkantor author:Vierkantor |
chore(*): address some `@[simps]` porting notes |
Search for porting notes mentioning `simps` and fix the ones that are easy to fix. The search also caught some that refer to `simps` as in a `simp` set, so we fix them too.
---
[](https://gitpod.io/from-referrer/)
|
tech debt |
54/76 |
Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean,Mathlib/AlgebraicGeometry/Spec.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/CategoryTheory/Limits/Cones.lean,Mathlib/CategoryTheory/Limits/Shapes/BinaryBiproducts.lean,Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean,Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean,Mathlib/CategoryTheory/Limits/Shapes/Pullback/Cospan.lean,Mathlib/CategoryTheory/Localization/Predicate.lean,Mathlib/CategoryTheory/Monad/Adjunction.lean,Mathlib/CategoryTheory/Monad/Algebra.lean,Mathlib/CategoryTheory/Monad/Basic.lean,Mathlib/CategoryTheory/Monoidal/Mon_.lean,Mathlib/CategoryTheory/Preadditive/Mat.lean,Mathlib/LinearAlgebra/LinearIndependent/Defs.lean,Mathlib/Order/OmegaCompletePartialOrder.lean,Mathlib/RepresentationTheory/Rep.lean,Mathlib/RingTheory/GradedAlgebra/Basic.lean,Mathlib/Topology/Homotopy/HomotopyGroup.lean |
19 |
1 |
['github-actions'] |
nobody |
2-37748 2 days ago |
2-37748 2 days ago |
2-37733 2 days |
28606 |
euprunin author:euprunin |
chore(Data/Set): golf entire `compl_prod_eq_union` using `grind` |
---
Show trace profiling of compl_prod_eq_union : 10 ms before, 16 ms after
### Trace profiling of `compl_prod_eq_union` before PR 28606
```diff
diff --git a/Mathlib/Data/Set/Prod.lean b/Mathlib/Data/Set/Prod.lean
index 55aacc6e21..f99b9ea194 100644
--- a/Mathlib/Data/Set/Prod.lean
+++ b/Mathlib/Data/Set/Prod.lean
@@ -129,6 +129,7 @@ theorem prod_inter_prod : s₁ ×ˢ t₁ ∩ s₂ ×ˢ t₂ = (s₁ ∩ s₂) ×
ext ⟨x, y⟩
simp [and_assoc, and_left_comm]
+set_option trace.profiler true in
lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) :
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by
ext p
```
```
ℹ [368/368] Built Mathlib.Data.Set.Prod (2.3s)
info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.014692] theorem compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) :
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by
ext p
simp only [mem_compl_iff, mem_prod, not_and, mem_union, mem_univ, and_true, true_and]
constructor <;> intro h
· by_cases fst_in_s : p.fst ∈ s
· exact Or.inr (h fst_in_s)
· exact Or.inl fst_in_s
· intro fst_in_s
simpa only [fst_in_s, not_true, false_or] using h
[Elab.definition.header] [0.013915] Set.compl_prod_eq_union
[Elab.step] [0.013615] expected type: Sort ?u.4299, term
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ)
[Elab.step] [0.013608] expected type: Sort ?u.4299, term
binrel% Eq✝ (s ×ˢ t)ᶜ ((sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ))
[Elab.step] [0.010755] expected type: , term
Union.union✝ (sᶜ ×ˢ univ) (univ ×ˢ tᶜ)
info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.014746] lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) :
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by
ext p
simp only [mem_compl_iff, mem_prod, not_and, mem_union, mem_univ, and_true, true_and]
constructor <;> intro h
· by_cases fst_in_s : p.fst ∈ s
· exact Or.inr (h fst_in_s)
· exact Or.inl fst_in_s
· intro fst_in_s
simpa only [fst_in_s, not_true, false_or] using h
info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.async] [0.010868] elaborating proof of Set.compl_prod_eq_union
[Elab.definition.value] [0.010258] Set.compl_prod_eq_union
Build completed successfully (368 jobs).
```
### Trace profiling of `compl_prod_eq_union` after PR 28606
```diff
diff --git a/Mathlib/Data/Set/Prod.lean b/Mathlib/Data/Set/Prod.lean
index 55aacc6e21..3ea6d5117e 100644
--- a/Mathlib/Data/Set/Prod.lean
+++ b/Mathlib/Data/Set/Prod.lean
@@ -129,16 +129,10 @@ theorem prod_inter_prod : s₁ ×ˢ t₁ ∩ s₂ ×ˢ t₂ = (s₁ ∩ s₂) ×
ext ⟨x, y⟩
simp [and_assoc, and_left_comm]
+set_option trace.profiler true in
lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) :
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by
- ext p
- simp only [mem_compl_iff, mem_prod, not_and, mem_union, mem_univ, and_true, true_and]
- constructor <;> intro h
- · by_cases fst_in_s : p.fst ∈ s
- · exact Or.inr (h fst_in_s)
- · exact Or.inl fst_in_s
- · intro fst_in_s
- simpa only [fst_in_s, not_true, false_or] using h
+ grind
@[simp]
theorem disjoint_prod : Disjoint (s₁ ×ˢ t₁) (s₂ ×ˢ t₂) ↔ Disjoint s₁ s₂ ∨ Disjoint t₁ t₂ := by
```
```
ℹ [368/368] Built Mathlib.Data.Set.Prod (2.1s)
info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.012252] theorem compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) :
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by grind
[Elab.definition.header] [0.010273] Set.compl_prod_eq_union
info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.command] [0.012858] lemma compl_prod_eq_union {α β : Type*} (s : Set α) (t : Set β) :
(s ×ˢ t)ᶜ = (sᶜ ×ˢ univ) ∪ (univ ×ˢ tᶜ) := by grind
info: Mathlib/Data/Set/Prod.lean:133:0: [Elab.async] [0.016424] elaborating proof of Set.compl_prod_eq_union
[Elab.definition.value] [0.016040] Set.compl_prod_eq_union
[Elab.step] [0.015891] grind
[Elab.step] [0.015882] grind
[Elab.step] [0.015870] grind
Build completed successfully (368 jobs).
```
---
[](https://gitpod.io/from-referrer/)
|
t-data |
1/8 |
Mathlib/Data/Set/Prod.lean |
1 |
1 |
['github-actions'] |
nobody |
2-33048 2 days ago |
2-33069 2 days ago |
2-33113 2 days |
28602 |
gmcninch-tufts author:gmcninch-tufts |
feat(Algebra/Polynomial/Module): prove equivalence of a certain tensor product with PolynomialModule |
For a commutative ring `R` and an `R`-module `M`, construct an equivalence between the `R[X]`-modules `R[X] ⊗[R] M` and
`PolynomialModule R M`.
This equivalence enables application of some base-change results to `PolynomialModule R M` .
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
210/0 |
Mathlib.lean,Mathlib/Algebra/Polynomial/Module/TensorProduct.lean |
2 |
1 |
['github-actions'] |
nobody |
2-32573 2 days ago |
2-41979 2 days ago |
2-42024 2 days |
27943 |
dupuisf author:dupuisf |
feat: `StarOrderedRing` implies `OrderedSMul` |
We show that `StarOrderedRing R` implies `OrderedSMul 𝕜 R`.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
t-analysis
label:t-algebra$ |
12/0 |
Mathlib/Algebra/Order/Star/Basic.lean |
1 |
10 |
['YaelDillies', 'dupuisf', 'github-actions', 'themathqueen'] |
YaelDillies assignee:YaelDillies |
2-26084 2 days ago |
15-40782 15 days ago |
16-28062 16 days |
28609 |
mans0954 author:mans0954 |
feature(Analysis/LocallyConvex/Bounded): Quasi-complete spaces |
Define a quasi-complete space (Bourbaki, III.8) and prove that in a quasi-complete space:
- `isCompact_closure_of_totallyBounded_quasiComplete`: the closure of a totally bounded set is compact .
- `isCompact_closedAbsConvexHull_of_totallyBounded`: the closed absolute convex hull of a totally bounded set is compact .
The closure of a totally bounded subset of a complete space is also compact. For a complete space with zero equipped with a scalar multiplication by a seminormed ring, this is a special case of `isCompact_closure_of_totallyBounded_quasiComplete`, but we also provide `isCompact_closure_of_totallyBounded_complete` which does not require a zero or a scalar multiplication.
(N.B. `isCompact_of_totallyBounded_isClosed (TotallyBounded.closure ht) isClosed_closure` provides an alternative proof of
`isCompact_closure_of_totallyBounded_complete`.)
---
[](https://gitpod.io/from-referrer/)
|
|
44/0 |
Mathlib/Analysis/LocallyConvex/AbsConvex.lean,Mathlib/Analysis/LocallyConvex/Bounded.lean,Mathlib/Topology/UniformSpace/Cauchy.lean |
3 |
1 |
['github-actions'] |
nobody |
2-22555 2 days ago |
2-22555 2 days ago |
2-24871 2 days |
28612 |
euprunin author:euprunin |
chore(Data/List): golf entire `idxOf_append_of_mem`, `cons_sublist_cons'`, `length_eraseIdx_add_one`, `length_eraseP_add_one` and `idxOf_append_of_notMem` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
5/26 |
Mathlib/Data/List/Basic.lean |
1 |
1 |
['github-actions'] |
nobody |
2-22415 2 days ago |
2-22442 2 days ago |
2-22486 2 days |
28451 |
yapudpill author:yapudpill |
feat(RingTheory/Noetherian): add `IsNoetherianRing.of_prime` |
This PR introduces the first usage of `Ideal.IsOka` introduced in #27200 to prove that if all prime ideals of a `CommRing` are finitely generated then this ring is Noetherian.
To do so, we also added the lemma `Ideal.mem_span_range_self`.
---
- [x] depends on: #28525
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
new-contributor
|
104/12 |
Mathlib.lean,Mathlib/RingTheory/Ideal/Span.lean,Mathlib/RingTheory/Noetherian/OfPrime.lean,docs/references.bib |
4 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
nobody |
2-17461 2 days ago |
3-43318 3 days ago |
5-10204 5 days |
28477 |
yapudpill author:yapudpill |
feat(RingTheory): golf `IsPrincipalIdealRing.of_prime` |
In complement to #28451 and as discussed in #27200, this PR uses the newly added Oka predicates to golf the proof of `IsPrincipalIdealRing.of_prime`.
---
- [x] depends on: #28525
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
new-contributor
|
61/56 |
Mathlib/RingTheory/PrincipalIdealDomain.lean,Mathlib/RingTheory/PrincipalIdealDomainOfPrime.lean |
2 |
5 |
['Ruben-VandeVelde', 'github-actions', 'mathlib4-dependent-issues-bot', 'yapudpill'] |
nobody |
2-17361 2 days ago |
3-42248 3 days ago |
4-24419 4 days |
28035 |
euprunin author:euprunin |
chore: replace `norm_num` with `simp` where applicable |
Same motivation as in kim-em's #24064 (chore: replace `norm_num` with `simp` where applicable):
> Consider replacing a tactic with a (ahem) simpler alternative.
|
|
204/205 |
Mathlib/Algebra/Polynomial/Div.lean,Mathlib/Algebra/Star/CHSH.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/Basic.lean,Mathlib/Analysis/Analytic/Inverse.lean,Mathlib/Analysis/Asymptotics/AsymptoticEquivalent.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Order.lean,Mathlib/Analysis/Calculus/Deriv/MeanValue.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/Taylor.lean,Mathlib/Analysis/ConstantSpeed.lean,Mathlib/Analysis/Convex/Function.lean,Mathlib/Analysis/Fourier/AddCircle.lean,Mathlib/Analysis/Fourier/Inversion.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/InnerProductSpace/Basic.lean,Mathlib/Analysis/InnerProductSpace/LinearMap.lean,Mathlib/Analysis/InnerProductSpace/Orthonormal.lean,Mathlib/Analysis/InnerProductSpace/TwoDim.lean,Mathlib/Analysis/NormedSpace/ENormedSpace.lean,Mathlib/Analysis/PSeries.lean,Mathlib/Analysis/SpecialFunctions/BinaryEntropy.lean,Mathlib/Analysis/SpecialFunctions/Complex/LogBounds.lean,Mathlib/Analysis/SpecialFunctions/ContinuousFunctionalCalculus/Rpow/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Integrals/PosLogEqCircleAverage.lean,Mathlib/Analysis/SpecialFunctions/JapaneseBracket.lean,Mathlib/Analysis/SpecialFunctions/Pow/Real.lean,Mathlib/Analysis/SpecialFunctions/Stirling.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Bounds.lean,Mathlib/Analysis/SpecificLimits/Normed.lean,Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean,Mathlib/Combinatorics/Additive/SmallTripling.lean,Mathlib/Combinatorics/SimpleGraph/Regularity/Bound.lean,Mathlib/Combinatorics/SimpleGraph/Regularity/Chunk.lean,Mathlib/Combinatorics/SimpleGraph/Regularity/Lemma.lean,Mathlib/Computability/Ackermann.lean,Mathlib/Computability/AkraBazzi/AkraBazzi.lean,Mathlib/Computability/AkraBazzi/GrowsPolynomially.lean,Mathlib/Computability/AkraBazzi/SumTransform.lean,Mathlib/Data/Complex/Trigonometric.lean,Mathlib/Data/EReal/Basic.lean,Mathlib/Data/Nat/Digits/Div.lean,Mathlib/Data/Real/Cardinality.lean,Mathlib/Data/Real/GoldenRatio.lean,Mathlib/Data/Real/Pi/Bounds.lean,Mathlib/Data/Real/Pi/Wallis.lean,Mathlib/Data/Real/Sign.lean,Mathlib/Geometry/Euclidean/Basic.lean,Mathlib/Geometry/Euclidean/MongePoint.lean,Mathlib/Geometry/Euclidean/Triangle.lean,Mathlib/GroupTheory/GroupAction/Blocks.lean,Mathlib/GroupTheory/Perm/Cycle/Basic.lean,Mathlib/GroupTheory/SpecificGroups/Alternating/KleinFour.lean,Mathlib/GroupTheory/SpecificGroups/Quaternion.lean,Mathlib/LinearAlgebra/QuadraticForm/Basic.lean,Mathlib/LinearAlgebra/RootSystem/Reduced.lean,Mathlib/MeasureTheory/Function/ConvergenceInMeasure.lean,Mathlib/MeasureTheory/Function/UniformIntegrable.lean,Mathlib/MeasureTheory/Integral/Bochner/Basic.lean,Mathlib/MeasureTheory/Integral/CircleIntegral.lean,Mathlib/NumberTheory/ADEInequality.lean,Mathlib/NumberTheory/Bernoulli.lean,Mathlib/NumberTheory/Cyclotomic/Discriminant.lean,Mathlib/NumberTheory/Cyclotomic/PID.lean,Mathlib/NumberTheory/Cyclotomic/Rat.lean,Mathlib/NumberTheory/FactorisationProperties.lean,Mathlib/NumberTheory/Fermat.lean,Mathlib/NumberTheory/FermatPsp.lean,Mathlib/NumberTheory/Harmonic/GammaDeriv.lean,Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean,Mathlib/NumberTheory/LSeries/DirichletContinuation.lean,Mathlib/NumberTheory/LucasLehmer.lean,Mathlib/NumberTheory/Modular.lean,Mathlib/NumberTheory/ModularForms/Basic.lean,Mathlib/NumberTheory/ModularForms/LevelOne.lean,Mathlib/NumberTheory/Multiplicity.lean,Mathlib/NumberTheory/NumberField/CanonicalEmbedding/ConvexBody.lean,Mathlib/NumberTheory/NumberField/Discriminant/Basic.lean,Mathlib/NumberTheory/NumberField/Discriminant/Defs.lean,Mathlib/NumberTheory/Padics/Hensel.lean,Mathlib/NumberTheory/Zsqrtd/GaussianInt.lean,Mathlib/RingTheory/DedekindDomain/Different.lean,Mathlib/RingTheory/Fintype.lean,Mathlib/RingTheory/Ideal/NatInt.lean,Mathlib/RingTheory/PowerSeries/Basic.lean,Mathlib/RingTheory/ZMod/UnitsCyclic.lean,Mathlib/Tactic/NormNum/LegendreSymbol.lean,Mathlib/Topology/Algebra/Valued/WithZeroMulInt.lean,Mathlib/Topology/Instances/CantorSet.lean,Mathlib/Topology/Instances/ENNReal/Lemmas.lean,Mathlib/Topology/Separation/CompletelyRegular.lean |
95 |
7 |
['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
2-12786 2 days ago |
2-12786 2 days ago |
14-34904 14 days |
28163 |
euprunin author:euprunin |
chore: replace `aesop` with `simp_all` where applicable |
Motivation: `aesop` runs `simp_all` by default, so these ~160 `aesop` calls seem to be just `simp_all` in disguise. It seems better to use plain `simp_all` instead.
---
[](https://gitpod.io/from-referrer/)
|
|
148/148 |
Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean,Mathlib/Algebra/GroupWithZero/NonZeroDivisors.lean,Mathlib/Algebra/Lie/Weights/Killing.lean,Mathlib/Algebra/Module/Submodule/Pointwise.lean,Mathlib/Algebra/Module/Submodule/Union.lean,Mathlib/Algebra/SkewMonoidAlgebra/Basic.lean,Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/OfScalars.lean,Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Continuity.lean,Mathlib/Analysis/Calculus/FDeriv/Symmetric.lean,Mathlib/Analysis/Complex/Tietze.lean,Mathlib/Analysis/Convex/Jensen.lean,Mathlib/Analysis/LocallyConvex/AbsConvex.lean,Mathlib/Analysis/Normed/Group/CocompactMap.lean,Mathlib/Analysis/Normed/Group/ZeroAtInfty.lean,Mathlib/Analysis/NormedSpace/FunctionSeries.lean,Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean,Mathlib/Analysis/SpecificLimits/Basic.lean,Mathlib/CategoryTheory/Comma/Arrow.lean,Mathlib/CategoryTheory/Comma/Over/Basic.lean,Mathlib/CategoryTheory/Limits/Types/ColimitType.lean,Mathlib/CategoryTheory/Limits/Types/Limits.lean,Mathlib/CategoryTheory/Types.lean,Mathlib/Combinatorics/Additive/FreimanHom.lean,Mathlib/Combinatorics/Schnirelmann.lean,Mathlib/Combinatorics/SimpleGraph/CompleteMultipartite.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/Subgraph.lean,Mathlib/Combinatorics/SimpleGraph/Connectivity/WalkDecomp.lean,Mathlib/Combinatorics/SimpleGraph/Matching.lean,Mathlib/Combinatorics/SimpleGraph/Operations.lean,Mathlib/Combinatorics/SimpleGraph/Paths.lean,Mathlib/Combinatorics/SimpleGraph/Prod.lean,Mathlib/Combinatorics/SimpleGraph/Tutte.lean,Mathlib/Computability/AkraBazzi/SumTransform.lean,Mathlib/Data/ENNReal/Holder.lean,Mathlib/Data/Finset/Basic.lean,Mathlib/Data/Finset/Card.lean,Mathlib/Data/Finset/Lattice/Prod.lean,Mathlib/Data/Finset/Sym.lean,Mathlib/Data/Finsupp/Defs.lean,Mathlib/Data/Int/GCD.lean,Mathlib/Data/List/Nodup.lean,Mathlib/Data/List/TakeDrop.lean,Mathlib/Data/Matrix/Basis.lean,Mathlib/Data/Matrix/ColumnRowPartitioned.lean,Mathlib/Data/Matroid/Minor/Restrict.lean,Mathlib/Data/Multiset/DershowitzManna.lean,Mathlib/Data/Nat/Prime/Defs.lean,Mathlib/Geometry/Group/Growth/QuotientInter.lean,Mathlib/Geometry/Manifold/VectorField/LieBracket.lean,Mathlib/GroupTheory/CoprodI.lean,Mathlib/GroupTheory/FreeGroup/Basic.lean,Mathlib/GroupTheory/SpecificGroups/Cyclic.lean,Mathlib/LinearAlgebra/LinearIndependent/Lemmas.lean,Mathlib/LinearAlgebra/RootSystem/Base.lean,Mathlib/LinearAlgebra/RootSystem/CartanMatrix.lean,Mathlib/LinearAlgebra/RootSystem/Finite/G2.lean,Mathlib/LinearAlgebra/RootSystem/Finite/Lemmas.lean,Mathlib/LinearAlgebra/RootSystem/Finite/Nondegenerate.lean,Mathlib/LinearAlgebra/RootSystem/GeckConstruction/Basic.lean,Mathlib/LinearAlgebra/RootSystem/Reduced.lean,Mathlib/LinearAlgebra/Span/Defs.lean,Mathlib/MeasureTheory/Function/AEMeasurableOrder.lean,Mathlib/MeasureTheory/Group/GeometryOfNumbers.lean,Mathlib/MeasureTheory/Integral/Lebesgue/Markov.lean,Mathlib/MeasureTheory/Measure/Dirac.lean,Mathlib/NumberTheory/Cyclotomic/Basic.lean,Mathlib/NumberTheory/Divisors.lean,Mathlib/NumberTheory/LSeries/RiemannZeta.lean,Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Basic.lean,Mathlib/Order/Atoms.lean,Mathlib/Order/BooleanAlgebra/Basic.lean,Mathlib/Order/CompactlyGenerated/Basic.lean,Mathlib/Order/Interval/Set/OrdConnectedLinear.lean,Mathlib/Order/Interval/Set/SuccPred.lean,Mathlib/Order/SupIndep.lean,Mathlib/Order/WithBot.lean,Mathlib/RepresentationTheory/Basic.lean,Mathlib/RingTheory/Ideal/AssociatedPrime/Finiteness.lean,Mathlib/RingTheory/Ideal/Maximal.lean,Mathlib/RingTheory/IntegralClosure/IntegrallyClosed.lean,Mathlib/RingTheory/KrullDimension/NonZeroDivisors.lean,Mathlib/RingTheory/MvPolynomial/Symmetric/NewtonIdentities.lean,Mathlib/Topology/Algebra/IsUniformGroup/Basic.lean,Mathlib/Topology/Category/Profinite/Nobeling/Basic.lean,Mathlib/Topology/Compactness/Compact.lean,Mathlib/Topology/GDelta/Basic.lean,Mathlib/Topology/Order/IntermediateValue.lean,Mathlib/Topology/Order/IsLUB.lean,Mathlib/Topology/Order/LawsonTopology.lean,Mathlib/Topology/Separation/CompletelyRegular.lean,Mathlib/Topology/Sets/CompactOpenCovered.lean,Mathlib/Topology/Spectral/Prespectral.lean |
93 |
6 |
['github-actions', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
2-11329 2 days ago |
2-11329 2 days ago |
11-6825 11 days |
28339 |
JovanGerb author:JovanGerb |
feat(gcongr): support `@[gcongr]` for `Monotone` and friends |
This PR adds the feature to `gcongr` that you can now tag lemmas whose conclusion is `Monotone f`, `Antitone f`, etc.
---
[](https://gitpod.io/from-referrer/)
|
|
119/88 |
Mathlib/Algebra/Order/Floor/Ring.lean,Mathlib/Algebra/Order/Floor/Semiring.lean,Mathlib/Algebra/Order/Module/Algebra.lean,Mathlib/Algebra/Order/Ring/Cast.lean,Mathlib/Algebra/Ring/Subring/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/ERealExp.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Arctan.lean,Mathlib/Data/Complex/Exponential.lean,Mathlib/Data/Finsupp/Order.lean,Mathlib/Data/Multiset/Defs.lean,Mathlib/Data/Nat/Cast/Order/Basic.lean,Mathlib/Data/Rat/Cast/Order.lean,Mathlib/Data/Real/Sqrt.lean,Mathlib/LinearAlgebra/Basis/Flag.lean,Mathlib/MeasureTheory/Function/SimpleFunc.lean,Mathlib/Order/Filter/Map.lean,Mathlib/Order/Hom/Basic.lean,Mathlib/Order/KrullDimension.lean,Mathlib/Tactic/GCongr/Core.lean,MathlibTest/GCongr/inequalities.lean |
20 |
3 |
['github-actions', 'kckennylau', 'mathlib4-merge-conflict-bot'] |
nobody |
2-10470 2 days ago |
2-10593 2 days ago |
7-11973 7 days |
28533 |
kim-em author:kim-em |
feat(linarith): add `linarith?` mode which suggests a `linarith only` call |
Adds `linarith?`, which traces the internal to watch which inequalities are being used, and suggests a `linarith only` call via the "try this:" mechanism.
Also adds a `+minimize` flag, on by default, which then greedily tries to drop hypotheses from the used set, to see if the problem is still possible with a smaller set. Currently I don't have test case showing this is worthwhile, however. Contributions welcome.
------
https://chatgpt.com/codex/tasks/task_e_68a02bce93a883218485c7e7cafb877a |
codex
t-meta
|
213/68 |
Mathlib/Tactic/Linarith/Frontend.lean,Mathlib/Tactic/Linarith/Verification.lean,MathlibTest/linarith.lean |
3 |
2 |
['github-actions', 'kim-em'] |
nobody |
2-9984 2 days ago |
4-13497 4 days ago |
4-13549 4 days |
26259 |
Raph-DG author:Raph-DG |
feat(Topology): Connecting different notions of locally finite |
In this PR we connect the notions of local finiteness of an indexed family of sets (as in LocallyFinite) and of a set of sets (as in Function.locallyFinsuppWithin)
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
32/0 |
Mathlib/Topology/LocallyFinsupp.lean |
1 |
6 |
['Raph-DG', 'github-actions', 'jcommelin', 'kckennylau'] |
jcommelin assignee:jcommelin |
2-7494 2 days ago |
60-28984 1 month ago |
60-29026 60 days |
27395 |
joelriou author:joelriou |
feat(Algebra/Homology): the canonical t-structure on the derived category |
---
- [x] depends on: #27536
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
227/1 |
Mathlib.lean,Mathlib/Algebra/Homology/DerivedCategory/Basic.lean,Mathlib/Algebra/Homology/DerivedCategory/TStructure.lean,Mathlib/Algebra/Homology/Embedding/CochainComplex.lean,Mathlib/CategoryTheory/Triangulated/TStructure/Basic.lean |
5 |
2 |
['github-actions', 'mathlib4-dependent-issues-bot'] |
riccardobrasca assignee:riccardobrasca |
2-6500 2 days ago |
9-32437 9 days ago |
9-32484 9 days |
27573 |
jsm28 author:jsm28 |
feat(LinearAlgebra/AffineSpace/Simplex/Basic): membership of interior of a face |
Add lemmas about when an affine combination of all the vertices of a simplex lies in the `interior` or `closedInterior` of a face.
Feel free to golf, these lemmas really ought to be a lot simpler to prove.
---
- [x] depends on: #26822
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
128/0 |
Mathlib/LinearAlgebra/AffineSpace/Independent.lean,Mathlib/LinearAlgebra/AffineSpace/Simplex/Basic.lean |
2 |
9 |
['github-actions', 'jcommelin', 'jsm28', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
chrisflav assignee:chrisflav |
2-6499 2 days ago |
13-60982 13 days ago |
16-72896 16 days |
28072 |
kckennylau author:kckennylau |
feat(RingTheory/Valuation): make tactic rw_val_equiv |
Co-authored by Aaron Liu and Bhavik Mehta.
A tactic to rewrite relations such as `max (v₁ x) (v₁ y) * v₁ z < 1` into `max (v₂ x) (v₂ y) * v₂ z < 1` , given `h : v₁.IsEquiv v₂`.
Allowed relations are `≤`, `<`, `=`, `≠`.
Allowed operations are: `0`, `1`, `v₁ r`, `⁻¹`, `^` (both `ℕ` and `ℤ`), `*`, `/`, `min`, `max`.
Examples:
```lean
example {R Γ₁ Γ₂ : Type} [Ring R]
[LinearOrderedCommMonoidWithZero Γ₁] [LinearOrderedCommMonoidWithZero Γ₂]
{v₁ : Valuation R Γ₁} {v₂ : Valuation R Γ₂}
(h : v₁.IsEquiv v₂) {y z : R} :
{x | v₁ x ^ 2 * min (v₁ y) (v₁ z) ≤ 1} = {x | v₂ x ^ 2 * min (v₂ y) (v₂ z) ≤ 1} := by
rw_val_equiv h
```
It is also possible to use `←` to rewrite in the opposite direction, and to use `at h1 h3 ⊢` to specify which hypotheses (and/or goal) to rewrite, similar to the syntax of `rw`. There is also `rwa_val_equiv` to work like `rwa`.
---
Zulip: [#Is there code for X? > Tactics for comparing equivalent valuations](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/Tactics.20for.20comparing.20equivalent.20valuations)
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
455/13 |
Mathlib/RingTheory/Valuation/Basic.lean,MathlibTest/Simproc/ValEquiv.lean |
2 |
34 |
['b-mehta', 'eric-wieser', 'github-actions', 'kckennylau', 'pechersky', 'plp127'] |
erdOne assignee:erdOne |
2-6498 2 days ago |
12-28190 12 days ago |
13-2695 13 days |
28191 |
kckennylau author:kckennylau |
feat(Logic): tag Injective, Surjective, and Bijective with fun_prop |
---
Zulip:
* [#Is there code for X? > surjective is not funprop!](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/surjective.20is.20not.20funprop!)
* [#mathlib4 > `fun_prop` for Injective/Surjective/Bijective?](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/.60fun_prop.60.20for.20Injective.2FSurjective.2FBijective.3F)
[](https://gitpod.io/from-referrer/)
|
t-meta |
16/0 |
Mathlib/Tactic/FunProp.lean |
1 |
3 |
['github-actions', 'grunweg', 'kckennylau'] |
alexjbest assignee:alexjbest |
2-6496 2 days ago |
9-43007 9 days ago |
10-21218 10 days |
28626 |
alreadydone author:alreadydone |
chore(Archive, Counterexamples): replace => by ↦ |
---
[](https://gitpod.io/from-referrer/)
|
|
288/288 |
Archive/Arithcc.lean,Archive/Examples/IfNormalization/Result.lean,Archive/Examples/IfNormalization/WithoutAesop.lean,Archive/Examples/PropEncodable.lean,Archive/Imo/Imo1959Q1.lean,Archive/Imo/Imo1960Q1.lean,Archive/Imo/Imo1962Q4.lean,Archive/Imo/Imo1972Q5.lean,Archive/Imo/Imo1977Q6.lean,Archive/Imo/Imo1981Q3.lean,Archive/Imo/Imo1987Q1.lean,Archive/Imo/Imo1988Q6.lean,Archive/Imo/Imo1994Q1.lean,Archive/Imo/Imo1998Q2.lean,Archive/Imo/Imo2001Q2.lean,Archive/Imo/Imo2006Q3.lean,Archive/Imo/Imo2006Q5.lean,Archive/Imo/Imo2008Q2.lean,Archive/Imo/Imo2008Q4.lean,Archive/Imo/Imo2011Q3.lean,Archive/Imo/Imo2013Q1.lean,Archive/Imo/Imo2019Q1.lean,Archive/Imo/Imo2024Q5.lean,Archive/MiuLanguage/Basic.lean,Archive/MiuLanguage/DecisionSuf.lean,Archive/OxfordInvariants/Summer2021/Week3P1.lean,Archive/Sensitivity.lean,Archive/Wiedijk100Theorems/AbelRuffini.lean,Archive/Wiedijk100Theorems/AreaOfACircle.lean,Archive/Wiedijk100Theorems/AscendingDescendingSequences.lean,Archive/Wiedijk100Theorems/BallotProblem.lean,Archive/Wiedijk100Theorems/BirthdayProblem.lean,Archive/Wiedijk100Theorems/BuffonsNeedle.lean,Archive/Wiedijk100Theorems/CubingACube.lean,Archive/Wiedijk100Theorems/FriendshipGraphs.lean,Archive/Wiedijk100Theorems/Konigsberg.lean,Archive/Wiedijk100Theorems/Partition.lean,Archive/Wiedijk100Theorems/SumOfPrimeReciprocalsDiverges.lean,Archive/ZagierTwoSquares.lean,Counterexamples/AharoniKorman.lean,Counterexamples/CanonicallyOrderedCommSemiringTwoMul.lean,Counterexamples/CharPZeroNeCharZero.lean,Counterexamples/CliffordAlgebraNotInjective.lean,Counterexamples/DirectSumIsInternal.lean,Counterexamples/GameMultiplication.lean,Counterexamples/Girard.lean,Counterexamples/HomogeneousPrimeNotPrime.lean,Counterexamples/MapFloor.lean,Counterexamples/MonicNonRegular.lean,Counterexamples/Phillips.lean,Counterexamples/Pseudoelement.lean,Counterexamples/QuadraticForm.lean,Counterexamples/SorgenfreyLine.lean,Counterexamples/ZeroDivisorsInAddMonoidAlgebras.lean |
54 |
1 |
['github-actions'] |
nobody |
2-5154 2 days ago |
2-6607 2 days ago |
2-6591 2 days |
28628 |
euprunin author:euprunin |
chore(Order/BooleanAlgebra): golf entire `diff_insert_of_notMem`, `insert_diff_of_mem`, `insert_diff_of_notMem` and `subset_insert_iff` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-order |
4/14 |
Mathlib/Order/BooleanAlgebra/Set.lean |
1 |
1 |
['github-actions'] |
nobody |
1-77851 1 day ago |
1-77862 1 day ago |
1-77903 1 day |
28343 |
RemyDegenne author:RemyDegenne |
feat(Probability): Fernique's theorem for distributions that are invariant by rotation |
Let `μ` be a finite measure on a second-countable normed space `E` such that the product measure `μ.prod μ` on `E × E` is invariant by rotation of angle `-π/4`.
Then there exists a constant `C > 0` such that the function `x ↦ exp (C * ‖x‖ ^ 2)` is integrable with respect to `μ`.
The main application of this theorem will be for Gaussian measures.
---
The PR is large, but is basically one big proof, so I don't think I can cut it at a meaningful place.
- [ ] depends on: #28342
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
614/0 |
Mathlib.lean,Mathlib/Data/Real/Sqrt.lean,Mathlib/Probability/Distributions/Fernique.lean,docs/references.bib |
4 |
3 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
1-73436 1 day ago |
1-73467 1 day ago |
1-80746 1 day |
28546 |
Sfgangloff author:Sfgangloff |
feat(SymbolicDynamics): basic setup of Zd, full shift, cylinders, pat… |
# Symbolic dynamics on groups: core API and entropy along finite shapes
This PR adds a **group-generic** foundation for symbolic dynamics over an arbitrary group `G`, together with convenient specializations for `ℤ` and `ℤ^d`.
## Summary of additions
- **Full shift and shift action**
- `abbrev FullShift (A G) := G → A` (inherits product topology from the Π-type).
- Right shift `shift g x` with convention `(shift g x) h = x (h * g)`.
- **Cylinders and topology**
- `cylinder U x : Set (G → A)` for finite `U : Finset G`.
- Cylinders are open under `[DiscreteTopology A]`; with a finite alphabet they are also closed.
- Equality with dependent products:
`cylinder U x = Set.pi (↑U) (fun i => ({x i} : Set A))`, enabling use of the `Set.pi` API.
- **Patterns, occurrences, and subshifts**
- `Pattern A G` with finite `support : Finset G` and `data : support → A`.
- `Pattern.occursIn p x g` (occurrence at translate `g`) and the expected shift law.
- `forbids F` and `Subshift A G` (closed, shift-invariant subsets).
- `FixedSupport A G U` with an equivalence to `(U → A)` to obtain finiteness.
- **Language on finite shapes and counting**
- `languageOn X U`, `languageCardOn X U`, and `patternCountOn Y U`.
- **Entropy along a shape sequence**
- `limsupAtTop` (as an `sInf` of eventual upper bounds).
- `entropyAlong X F hF := limsup (log (patternCountOn X (F n) + 1) / |F n|)`
for any nonempty finite shapes `F : ℕ → Finset G` (the `+ 1` avoids `log 0`).
- **Specializations**
- `IntShapes`: segments `[-n,n]` on `Multiplicative ℤ`, with `entropy_Z`.
- `ZdShapes`: boxes `[-n,n]^d` on `ℤ^d` (as functions `Fin d → ℤ`), with `entropy_Zd`.
## Mathematical remarks
- The API is **shape-parametric**: entropy is defined along user-provided finite shapes.
- On **amenable** groups, using a **Følner** sequence yields a canonical value (Ornstein–Weiss).
This PR does not assume amenability; the family of shapes is an explicit input.
## Motivation
Provide a clean, reusable base for symbolic dynamics on groups in mathlib.
## Future work
- Add a Følner predicate and prove shape-independence / limit existence on amenable groups.
- Expand the `ℤ`/`ℤ^d` toolkit (alternative shapes, mixing, factors).
- Develop 1D theory and, longer-term, multidimensional SFT results (e.g. along the lines of Hochman–Meyerovitch).
|
new-contributor
t-dynamics
|
516/0 |
Mathlib.lean,Mathlib/Dynamics/SymbolicDynamics/Basic.lean,Mathlib/Dynamics/SymbolicDynamics/EntropyFinitelyGenerated.lean |
3 |
14 |
['Sfgangloff', 'eric-wieser', 'github-actions', 'kckennylau', 'sgouezel'] |
nobody |
1-72012 1 day ago |
3-48285 3 days ago |
3-48328 3 days |
28511 |
YaelDillies author:YaelDillies |
feat(Finsupp): `congr!`-compatible version of `prod_congr` |
`congr!` doesn't like the `g1 x (f x)` appearing in the hypothesis of `Finsupp.prod_congr`: `f x` isn't a free variable.
Note: A few proofs broke due to `simp` using `congr` lemmas internally.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
17/11 |
Mathlib/Algebra/BigOperators/Finsupp/Basic.lean,Mathlib/Algebra/Category/MonCat/Adjunctions.lean,Mathlib/Data/Finsupp/Multiset.lean,Mathlib/Data/Nat/Choose/Multinomial.lean,Mathlib/RepresentationTheory/Homological/GroupHomology/LowDegree.lean |
5 |
4 |
['JovanGerb', 'YaelDillies', 'eric-wieser', 'github-actions'] |
nobody |
1-68022 1 day ago |
4-64045 4 days ago |
4-64087 4 days |
28575 |
YaelDillies author:YaelDillies |
feat: `IsOrderBornology` instances for `ℕ` and `ℤ` |
... using a new constructor assuming `IsCompactIcc`. As a result, I could make all existing instances on concrete types into one-liners.
---
As requested by @teorth.
[](https://gitpod.io/from-referrer/)
|
large-import |
33/44 |
Mathlib/Order/Bounds/Basic.lean,Mathlib/Topology/Bornology/Real.lean,Mathlib/Topology/Instances/Int.lean,Mathlib/Topology/Instances/Nat.lean,Mathlib/Topology/MetricSpace/Pseudo/Defs.lean,Mathlib/Topology/Order/Bornology.lean |
6 |
1 |
['github-actions'] |
nobody |
1-66602 1 day ago |
3-31421 3 days ago |
3-31470 3 days |
28100 |
themathqueen author:themathqueen |
feat(LinearAlgebra/Matrix): algebra automorphisms on matrices are inner |
For any algebra automorphism `f : Matrix n n R ≃ₐ[R] Matrix n n R`, there exists an invertible matrix `T` such that `f a = T * a * T⁻¹` for all `a`.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
76/0 |
Mathlib/LinearAlgebra/Matrix/GeneralLinearGroup/Basic.lean |
1 |
6 |
['eric-wieser', 'github-actions', 'themathqueen'] |
Vierkantor assignee:Vierkantor |
1-66293 1 day ago |
13-10099 13 days ago |
13-12883 13 days |
25832 |
xroblot author:xroblot |
feat(FieldTheory/LinearDisjoint): `trace` (resp. `norm`) and `algebraMap` commutes |
For `A` and `B` two linearly disjoint `R`-subalgebras in a commutative algebra `S` and `b` a `R`-basis of `B`, we construct a `A`-basis of `S = A ⊔ B` from `b` (and a similar construction using a `R`-basis of `A`). Then, we prove in this situation that `trace` commutes with `algebraMap`, that is:
```lean
Algebra.trace A S (algebraMap B S x) = algebraMap R A (Algebra.trace R B x)
```
and a similar result for the norm.
We also add a similar basis construction for `A` and `B` two linearly disjoint intermediate fields with the hypothesis that `A.toSubalgebra ⊔ B.toSubalgebra = ⊤`. This hypothesis is equivalent to `A ⊔ B = ⊤` in many cases (for example, one of the two extensions is algebraic over the base field) but not always.
---
[](https://gitpod.io/from-referrer/)
|
large-import
maintainer-merge
t-algebra
label:t-algebra$ |
159/9 |
Mathlib/FieldTheory/LinearDisjoint.lean,Mathlib/RingTheory/LinearDisjoint.lean |
2 |
47 |
['acmepjz', 'chrisflav', 'github-actions', 'xroblot'] |
chrisflav assignee:chrisflav |
1-65594 1 day ago |
1-66256 1 day ago |
64-31236 64 days |
25858 |
themathqueen author:themathqueen |
feat(RingTheory/Coalgebra/MulOpposite): coalgebra instance for MulOpposite |
Adding an instance for `Aᵐᵒᵖ` being an `R`-coalgebra when `A` is.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
maintainer-merge
new-contributor
|
69/0 |
Mathlib.lean,Mathlib/LinearAlgebra/TensorProduct/Basic.lean,Mathlib/RingTheory/Coalgebra/MulOpposite.lean |
3 |
6 |
['chrisflav', 'github-actions'] |
chrisflav assignee:chrisflav |
1-65403 1 day ago |
1-65403 1 day ago |
67-48174 67 days |
28117 |
RemyDegenne author:RemyDegenne |
feat(Probability): definitions of risk, Bayesian risk, Bayes risk, minimax risk |
This PR adds the basic definitions needed for decision theory (or statistical estimation): risk of an estimator with respect to a loss, a data-generating kernel and a prior on the parameter, Bayes risk, minimax risk.
The file is placed in the Probability folder, in a new Decision folder (for decision theory), in a Risk subfolder.
co-authored by: Lorenzo Luccioli @LorenzoLuccioli
From the TestingLowerBounds project.
---
This is the first part of #27579, which includes several results about risks, a definition of the DeGroot statistical information of an experiment, and as a special case a definition of the total variation distance between two probability measures.
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
141/0 |
Mathlib.lean,Mathlib/MeasureTheory/Measure/Dirac.lean,Mathlib/Probability/Decision/Risk/Defs.lean |
3 |
16 |
['EtienneC30', 'RemyDegenne', 'github-actions', 'sgouezel'] |
EtienneC30 assignee:EtienneC30 |
1-63920 1 day ago |
1-63920 1 day ago |
10-8321 10 days |
28526 |
xroblot author:xroblot |
feat(DedekindDomain): More instances |
Add more instances for the case of a the localisation of a tower of rings `R ⊆ S ⊆ T` localized at a prime ideal `P` of `R`.
---
- [x] depends on: #28543
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
70/3 |
Mathlib/Algebra/Algebra/Tower.lean,Mathlib/RingTheory/DedekindDomain/Instances.lean |
2 |
3 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
1-59668 1 day ago |
1-60344 1 day ago |
1-62083 1 day |
28617 |
kckennylau author:kckennylau |
feat(AlgebraicGeometry): jointly surjective topology |
We define `jointlySurjectiveTopology` to have the same condition as `jointlySurjectivePretopology`, which is the new name of the former `surjectiveFamiliesPretopology`.
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-algebraic-geometry
|
48/3 |
Mathlib/AlgebraicGeometry/Sites/MorphismProperty.lean,Mathlib/CategoryTheory/Sites/Grothendieck.lean |
2 |
6 |
['chrisflav', 'github-actions', 'kckennylau'] |
chrisflav assignee:chrisflav |
1-59441 1 day ago |
1-59791 1 day ago |
2-11945 2 days |
28349 |
kckennylau author:kckennylau |
feat(Meta): add notation for naming stacked polynomials |
This PR changes the notation for naming formal variables associated to recursive polynomial-like objects.
Registration is done only once per each polynomial-like functor.
Usage:
```lean
#register_poly_vars "[" X "]" Polynomial Polynomial.C Polynomial.X
#register_poly_vars "[" X, ... "]" MvPolynomial MvPolynomial.C MvPolynomial.X
#name_poly_vars R[a,b][C]
#name_poly_vars _[[x,y,z]]
```
`_[[x,y,z]]` allows for the hole to be substituted by any base ring, so `(x : R[[x,y,z]])` will make sense.
---
I have not mass deployed the new syntax at every possible location, I plan to do that in a future PR following this.
[](https://gitpod.io/from-referrer/)
|
t-meta |
395/57 |
Counterexamples/CliffordAlgebraNotInjective.lean,Mathlib/Algebra/MvPolynomial/Basic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Basic.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Projective/Basic.lean,Mathlib/Tactic/Ring/NamePolyVars.lean,MathlibTest/NamePolyVars.lean |
6 |
11 |
['eric-wieser', 'github-actions', 'kckennylau', 'plp127'] |
adamtopaz assignee:adamtopaz |
1-57932 1 day ago |
7-44402 7 days ago |
7-44451 7 days |
27973 |
smmercuri author:smmercuri |
feat: the ring of integers of a `ℤₘ₀`-valued field is compact whenever it is a DVR and the residue field is finite |
This PR continues the work from #21844.
Original PR: https://github.com/leanprover-community/mathlib4/pull/21844 |
large-import |
54/2 |
Mathlib/RingTheory/Ideal/Quotient/Basic.lean,Mathlib/Topology/Algebra/Valued/WithZeroMulInt.lean |
2 |
1 |
['github-actions'] |
nobody |
1-56438 1 day ago |
8-36781 8 days ago |
8-36796 8 days |
28148 |
kckennylau author:kckennylau |
feat(Matrix): Simproc and Rw-proc for Matrix Transpose |
Co-authored by Aaron Liu.
```lean
example : !![1, 2, 3; 4, 5, 6]ᵀ = !![1, 4; 2, 5; 3, 6] := by
rw [transpose_of% 2 3]
example : !![1, 2, 3; 4, 5, 6]ᵀ = !![1, 4; 2, 5; 3, 6] := by
rw [transpose_of]
example : !![1, 2, 3; 4, 5, 6]ᵀ = !![1, 4; 2, 5; 3, 6] := by
simp only [matrix_transpose]
```
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
267/8 |
Mathlib.lean,Mathlib/Data/Matrix/Notation.lean,Mathlib/LinearAlgebra/UnitaryGroup.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/Matrix.lean,MathlibTest/Simproc/Matrix.lean,MathlibTest/matrix.lean,scripts/noshake.json |
8 |
31 |
['eric-wieser', 'github-actions', 'kckennylau', 'mathlib4-merge-conflict-bot', 'plp127'] |
eric-wieser assignee:eric-wieser |
1-54899 1 day ago |
3-49438 3 days ago |
9-50892 9 days |
28615 |
kckennylau author:kckennylau |
feat(RingTheory): Standard open immersion |
We define the ring hom property `RingHom.IsStandardOpenImmersion` which is one that is a localization map away from some element.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
maintainer-merge
|
122/2 |
Mathlib.lean,Mathlib/RingTheory/Localization/Away/Basic.lean,Mathlib/RingTheory/Localization/BaseChange.lean,Mathlib/RingTheory/RingHom/OpenImmersion.lean |
4 |
15 |
['chrisflav', 'github-actions', 'kckennylau'] |
chrisflav assignee:chrisflav |
1-52929 1 day ago |
1-52929 1 day ago |
2-13022 2 days |
26960 |
joelriou author:joelriou |
feat(AlgebraicTopology/ModelCategory): the lemma by K. S. Brown |
In a model category, any morphism `f : X ⟶ Y` between cofibrant objects can be factored as `i ≫ j`
with `i` a cofibration and `j` a trivial fibration which has a section `s` that is a cofibration. In particular, if `f` is a weak equivalence, both `i` and `s` are trivial cofibrations. This has important consequences in homotopical algebra (e.g. construction of derived functors).
---
- [x] depends on: #26171
- [x] depends on: #26958
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology
t-category-theory
|
151/0 |
Mathlib.lean,Mathlib/AlgebraicTopology/ModelCategory/BrownLemma.lean |
2 |
7 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mattrobball'] |
robin-carlier assignee:robin-carlier |
1-52837 1 day ago |
9-31990 9 days ago |
9-32413 9 days |
28627 |
plp127 author:plp127 |
chore: rename `Set.surjective_onto_image` |
Rename `Set.surjective_onto_image` to `Set.imageFactorization_surjective`. This matches better with other theorems like `Set.restrictPreimage_surjective`. Also rename `Set.surjective_onto_range` similarly.
I was looking on loogle today and noticed this one again, which doesn't fit any of the naming conventions. I decided to fix it this time.
---
[](https://gitpod.io/from-referrer/)
|
t-data |
30/22 |
Mathlib/Algebra/Group/Subgroup/ZPowers/Lemmas.lean,Mathlib/Data/Finite/Card.lean,Mathlib/Data/Set/Countable.lean,Mathlib/Data/Set/Image.lean,Mathlib/Logic/Small/Set.lean,Mathlib/MeasureTheory/Constructions/Polish/Basic.lean,Mathlib/MeasureTheory/Function/StronglyMeasurable/AEStronglyMeasurable.lean,Mathlib/MeasureTheory/Function/StronglyMeasurable/Basic.lean,Mathlib/MeasureTheory/MeasurableSpace/Embedding.lean,Mathlib/Order/Filter/Finite.lean,Mathlib/Order/SupIndep.lean,Mathlib/RingTheory/AlgebraicIndependent/TranscendenceBasis.lean,Mathlib/RingTheory/Localization/AsSubring.lean,Mathlib/SetTheory/Cardinal/Basic.lean,Mathlib/SetTheory/Cardinal/Finite.lean,Mathlib/Topology/NoetherianSpace.lean |
16 |
1 |
['github-actions'] |
nobody |
1-52791 1 day ago |
2-5252 2 days ago |
2-5294 2 days |
28319 |
kim-em author:kim-em |
chore: scope the IsSimpleOrder -> Fintype instance |
I noticed these rarely useful instances firing while investigating a slow typeclass search. Doesn't seem to have much impact, but perhaps good to scope these anyway. |
|
11/4 |
Mathlib/Order/Atoms/Finite.lean,Mathlib/RingTheory/FiniteLength.lean,Mathlib/RingTheory/SimpleModule/Basic.lean |
3 |
14 |
['eric-wieser', 'github-actions', 'kim-em', 'leanprover-bot', 'mattrobball'] |
nobody |
1-50883 1 day ago |
1-55218 1 day ago |
8-3493 8 days |
28614 |
kckennylau author:kckennylau |
feat(CategoryTheory): The finite pretopology on a category |
We define `CategoryTheory.Pretopology.finite`, the finite pretopology on a category, which consists of presieves that contain only finitely many arrows.
---
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
120/0 |
Mathlib.lean,Mathlib/CategoryTheory/Sites/Finite.lean,Mathlib/CategoryTheory/Sites/Sieves.lean |
3 |
16 |
['chrisflav', 'github-actions', 'kckennylau'] |
chrisflav assignee:chrisflav |
1-49593 1 day ago |
1-49642 1 day ago |
2-13146 2 days |
27321 |
kckennylau author:kckennylau |
feat(CategoryTheory): Colimit can be computed fiberwise |
We consider category `J` equipped with a functor `F : J ⥤ D` to a discrete category `D`. Then the colimit of any diagram `diagram : J ⥤ C` can be computed using the following algorithm:
1. For each `d : D`, compute the colimit of the restricted diagram `F.fiberIncl d ⋙ diagram`.
2. Take the coproduct of these colimits over all `d : D`.
We call this "computing the colimit fiberwise".
---
Zulip: [#Is there code for X? > over category via a functor](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/over.20category.20via.20a.20functor/with/529574191)
[](https://gitpod.io/from-referrer/)
|
t-category-theory |
134/0 |
Mathlib.lean,Mathlib/CategoryTheory/FiberedCategory/Fiber.lean,Mathlib/CategoryTheory/Limits/Shapes/Fiberwise.lean |
3 |
18 |
['github-actions', 'kckennylau', 'robin-carlier'] |
nobody |
1-47688 1 day ago |
1-56459 1 day ago |
12-84679 12 days |
27963 |
ShreckYe author:ShreckYe |
feat(Algebra/GCDMonoid): add some theorems related to divisibility and `lcm` for both `GCDMonoid` and `Nat` |
While working on formalizing some math olympiad problems, I found that the theorem `dvd_lcm : p ∣ lcm a b ↔ p ∣ a ∨ p ∣ b` is missing in Mathlib. So I added this along with some other related theorems. These theorems are simlilar to those related to divisibility and multiplication (`dvd_mul` as compared to `dvd_lcm` for example), as commented in the doc strings. |
new-contributor
t-algebra
label:t-algebra$ |
102/0 |
Mathlib.lean,Mathlib/Algebra/GCDMonoid/Basic.lean,Mathlib/Data/Nat/GCD/Basic.lean,Mathlib/Data/Nat/GCD/Prime.lean |
4 |
28 |
['Ruben-VandeVelde', 'ShreckYe', 'github-actions', 'themathqueen'] |
erdOne assignee:erdOne |
1-44383 1 day ago |
1-46393 1 day ago |
9-50038 9 days |
28641 |
sun123zxy author:sun123zxy |
feat(RingTheory/Nakayama): add a version of Nakayama's lemma (stacks 00DV (8)) |
This PR adds a version of Nakayama's lemma from [Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) (8).
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
new-contributor
|
18/2 |
Mathlib/RingTheory/Nakayama.lean |
1 |
1 |
['github-actions'] |
nobody |
1-43416 1 day ago |
1-43416 1 day ago |
1-45041 1 day |
28180 |
kckennylau author:kckennylau |
chore(Meta): clean up PiFin.mkLiteralQ |
Co-authored by Aaron Liu.
This PR fixes the resulting type of `loop`, adds a docstring, and removes an unused variable.
---
Zulip: [#PR reviews > #28148 Simproc for Matrix Transpose](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2328148.20Simproc.20for.20Matrix.20Transpose)
[](https://gitpod.io/from-referrer/)
|
t-data
maintainer-merge
t-meta
|
7/4 |
Mathlib/Data/Fin/VecNotation.lean |
1 |
23 |
['JovanGerb', 'eric-wieser', 'github-actions', 'kckennylau', 'plp127'] |
nobody |
1-39155 1 day ago |
1-46577 1 day ago |
4-40709 4 days |
28317 |
kckennylau author:kckennylau |
feat(Algebra): more lemmas about units in ordered monoid |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
96/16 |
Mathlib/Algebra/Order/Monoid/Unbundled/Units.lean |
1 |
22 |
['YaelDillies', 'eric-wieser', 'github-actions', 'kckennylau'] |
nobody |
1-38335 1 day ago |
1-49052 1 day ago |
2-2267 2 days |
28639 |
ChrisHughes24 author:ChrisHughes24 |
feat(Nullstellensatz); Generalize nullstellensatz to use a different field for the polynomial ring |
---
This generalizes Nullstellensatz to Wikipedia's statement of the theorem, where there are two fields and one is algebraically closed.
[](https://gitpod.io/from-referrer/)
|
|
88/91 |
Mathlib/FieldTheory/AxGrothendieck.lean,Mathlib/ModelTheory/Algebra/Ring/Definability.lean,Mathlib/RingTheory/Nullstellensatz.lean |
3 |
1 |
['github-actions'] |
nobody |
1-36763 1 day ago |
1-47038 1 day ago |
1-47022 1 day |
28655 |
YaelDillies author:YaelDillies |
CI: list the projects I maintain |
I've sorted the repos in alphabetical order, because I found it became difficult to track which ones I had already added.
---
[](https://gitpod.io/from-referrer/)
|
CI |
88/22 |
scripts/downstream_repos.yml |
1 |
1 |
['github-actions'] |
nobody |
1-34255 1 day ago |
1-34266 1 day ago |
1-34308 1 day |
28653 |
strihanje01 author:strihanje01 |
feat(Combinatorics/Additive/Convolution): convolution map |
add convolution of finite subsets of a group
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-combinatorics
|
97/0 |
Mathlib.lean,Mathlib/Combinatorics/Additive/Convolution.lean |
2 |
2 |
['github-actions', 'strihanje01'] |
nobody |
1-32993 1 day ago |
1-35564 1 day ago |
1-35629 1 day |
26640 |
euprunin author:euprunin |
chore(Data): golf `Data/` using `grind` |
|
t-data |
12/87 |
Mathlib/Data/EReal/Operations.lean,Mathlib/Data/List/Cycle.lean,Mathlib/Data/List/Induction.lean,Mathlib/Data/List/Nodup.lean,Mathlib/Data/List/Permutation.lean,Mathlib/Data/List/Sigma.lean,Mathlib/Data/PEquiv.lean,Mathlib/Data/PNat/Xgcd.lean,Mathlib/Data/Prod/Lex.lean,Mathlib/Data/Seq/Parallel.lean,Mathlib/Data/Set/Lattice.lean |
11 |
21 |
['euprunin', 'github-actions', 'grunweg', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
1-32993 1 day ago |
1-32994 1 day ago |
49-3611 49 days |
26923 |
oliver-butterley author:oliver-butterley |
feat(Dynamics/BirkhoffSum): add the pointwise ergodic theorem (Birkhoff's) |
The Pointwise Ergodic Theorem, also known as Birkhoff's Ergodic Theorem.
Co-authored-by: Lua Viana Reis
- [x] depends on: #26074
- [x] depends on: #26807
- [x] depends on: #26810
- [x] depends on: #26840
- [x] depends on: #26842
- [x] depends on: #26848
- [x] depends on: #26851
- [x] depends on: #26852
- [x] depends on: #26853
- [x] depends on: #27008
Zulip: [PR thread](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2326923.20The.20pointwise.20ergodic.20theorem.20.28Birkhoff's.29/with/527835158)
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-dynamics
|
401/0 |
Mathlib.lean,Mathlib/Dynamics/BirkhoffSum/Pointwise.lean |
2 |
6 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
1-31774 1 day ago |
2-17526 2 days ago |
2-18524 2 days |
25836 |
jt496 author:jt496 |
feat(SimpleGraph/FiveWheelLike): add the Andrásfai-Erdős-Sós theorem |
Add the Andrásfai-Erdős-Sós theorem `colorable_of_cliqueFree_lt_minDegree` which says that an `r + 1`-cliquefree graph `G` with sufficiently large minimum degree is `r`-colorable.
Co-authored-by: Lian Bremner Tattersall
---
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #25313.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/25313* |
large-import
t-combinatorics
|
308/4 |
Mathlib/Combinatorics/SimpleGraph/FiveWheelLike.lean |
1 |
3 |
['YaelDillies', 'github-actions', 'jt496'] |
YaelDillies assignee:YaelDillies |
1-25585 1 day ago |
1-34171 1 day ago |
50-40921 50 days |
28661 |
harahu author:harahu |
doc(MeasureTheory): Miscellaneous typo fixes |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
22/22 |
Mathlib/MeasureTheory/Function/LpSeminorm/Basic.lean,Mathlib/MeasureTheory/Function/LpSpace/DomAct/Continuous.lean,Mathlib/MeasureTheory/Integral/Bochner/L1.lean,Mathlib/MeasureTheory/Integral/CircleAverage.lean,Mathlib/MeasureTheory/Integral/CircleIntegral.lean,Mathlib/MeasureTheory/Integral/IntervalIntegral/Basic.lean,Mathlib/MeasureTheory/Integral/IntervalIntegral/FundThmCalculus.lean,Mathlib/MeasureTheory/Integral/IntervalIntegral/Periodic.lean,Mathlib/MeasureTheory/MeasurableSpace/EventuallyMeasurable.lean,Mathlib/MeasureTheory/MeasurableSpace/Invariants.lean,Mathlib/MeasureTheory/Measure/Count.lean,Mathlib/MeasureTheory/Measure/Lebesgue/VolumeOfBalls.lean,Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean,Mathlib/MeasureTheory/Measure/SeparableMeasure.lean,Mathlib/MeasureTheory/Measure/WithDensityFinite.lean |
15 |
4 |
['github-actions', 'harahu'] |
nobody |
1-19967 1 day ago |
1-20291 1 day ago |
1-20334 1 day |
28552 |
loefflerd author:loefflerd |
feat(Compactification/OnePoint): classify GL2 elements by fixed points |
Classify 2x2 matrices over R as elliptic, parabolic or hyperbolic and describe their fixed points.
---
Carved off from the larger WIP PR #26651.
- [x] depends on: #26811
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
label:t-algebra$ |
320/7 |
Mathlib.lean,Mathlib/LinearAlgebra/Matrix/GeneralLinearGroup/Basic.lean,Mathlib/LinearAlgebra/Matrix/GeneralLinearGroup/FinTwo.lean,Mathlib/Topology/Compactification/OnePoint/ProjectiveLine.lean |
4 |
11 |
['CBirkbeck', 'github-actions', 'loefflerd', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
1-14820 1 day ago |
1-26629 1 day ago |
1-41389 1 day |
28553 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/Positive): `A.toEuclideanLin.IsPositive` iff `A.PosSemidef` |
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
16/0 |
Mathlib/Analysis/InnerProductSpace/Positive.lean,Mathlib/LinearAlgebra/Matrix/Hermitian.lean |
2 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
nobody |
1-14185 1 day ago |
1-14208 1 day ago |
3-36136 3 days |
28549 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/Positive): `LinearIsometryEquiv ∘ T ∘ LinearIsometryEquiv.symm` is positive iff `T` is |
---
- [x] depends on: #28548
[](https://gitpod.io/from-referrer/)
|
t-analysis
easy
|
8/0 |
Mathlib/Analysis/InnerProductSpace/Positive.lean |
1 |
3 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
1-14139 1 day ago |
1-14161 1 day ago |
1-16815 1 day |
28316 |
eric-wieser author:eric-wieser |
feat(Tactic/NormNum): better trace nodes |
Comparing the infoview on the first example in the test file
| Before | After |
|---|---|
| | |
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 |
1-9988 1 day ago |
8-14569 8 days ago |
8-14558 8 days |
28125 |
nonisomorphiclinearmap author:nonisomorphiclinearmap |
feat(Combinatorics): basic definition of simplicial complexes |
This PR introduces the basic definition of a finite (abstract) simplicial complex, located in Mathlib/Combinatorics/SimplicialComplex/Basic.lean.
---
This is our first contribution to mathlib. This work was done as part of the Fields Institute Summer Undergraduate Program on formalization in topological combinatorics. Eventually, we aim to formalize Lovasz's proof of the Kneser Conjecture and this is a small stepping stone in that direction. Some other commits will shortly depend on this one.
We would like to acknowledge the Fields Institute for Research in Mathematical Sciences for their sponsorship. We would also like to thank our supervisors, Professor Chris Kapulkin and Mr. Daniel Carranza, for their guidance and support throughout this project. We would also like to thank our group members Tom Lindquist and Quang Minh Nguyen for our fruitful discussions. |
new-contributor
t-combinatorics
|
374/0 |
Mathlib.lean,Mathlib/Combinatorics/SimplicialComplex/Basic.lean,Mathlib/Combinatorics/SimplicialComplex/Category.lean,Mathlib/Combinatorics/SimplicialComplex/FacePoset.lean,Mathlib/Combinatorics/SimplicialComplex/Hom.lean |
5 |
1 |
['github-actions'] |
awainverse assignee:awainverse |
1-6506 1 day ago |
12-24975 12 days ago |
12-25020 12 days |
28153 |
kckennylau author:kckennylau |
feat(Simproc): Simproc for explicit diagonal matrices |
```lean
example : (diagonal ![37, -1] : Matrix (Fin 2) (Fin 2) ℤ) = !![37, 0; 0, -1] := by
simp
```
---
Shares code with #28148.
[](https://gitpod.io/from-referrer/)
|
t-meta |
114/0 |
Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/Matrix.lean,scripts/noshake.json |
4 |
1 |
['github-actions'] |
alexjbest assignee:alexjbest |
1-6504 1 day ago |
11-31246 11 days ago |
11-31297 11 days |
28186 |
Sebi-Kumar author:Sebi-Kumar |
feat(Topology/Homotopy/Path): Add IsEquiv instance for Path.Homotopic |
Add `instance : IsEquiv (Path x₀ x₁) Homotopic` to the library. Allow use of lemmas like `of_eq` when proving two paths are homotopic.
---
To provide additional context, I am relatively new to contributing to Mathlib, and I am doing so as a part of the Fields Undergraduate Summer Research Program hosted at the University of Western Ontario and supervised by Chris Kapulkin and Daniel Carranza. My goal is to prove that the `n`-sphere is simply connected for `n > 1`.
Also, I am not super familiar with `IsEquiv` and when it should/shouldn't be used. I just wanted to use a lemma like `Path.Homotopic.of_eq` at one point while working on my code, and thought this was the best way to add such a result to the library.
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-topology
|
5/0 |
Mathlib/Topology/Homotopy/Path.lean |
1 |
4 |
['Sebi-Kumar', 'github-actions', 'kckennylau'] |
PatrickMassot assignee:PatrickMassot |
1-6503 1 day ago |
10-37833 10 days ago |
10-37881 10 days |
28174 |
YaelDillies author:YaelDillies |
feat: torsion-free modules |
Provide some very minimal API for torsion-free modules. This is mostly to agree on the definition. We can't add much further API before refactoring `Algebra.Module.Torsion` to have imports as light as `NoZeroSMulDivisors` and making `Module.IsTorsion` a class.
From ClassFieldTheory
---
[](https://gitpod.io/from-referrer/)
|
CFT
t-algebra
label:t-algebra$ |
43/1 |
Mathlib/Algebra/Module/Torsion.lean |
1 |
10 |
['YaelDillies', 'github-actions', 'kckennylau'] |
jcommelin assignee:jcommelin |
1-6503 1 day ago |
10-71517 10 days ago |
10-71517 10 days |
28234 |
alreadydone author:alreadydone |
chore(AlgebraicTopology): clean up FundamentalGroupoid |
+ Extract `FundamentalGroupoid.map (f : C(X, Y)) : FundamentalGroupoid X ⥤ FundamentalGroupoid Y` from `fundamentalGroupoidFunctor : TopCat ⥤ CategoryTheory.Grpd`
+ Define `FundamentalGroup.map (f : C(X, Y)) (x : X) : FundamentalGroup X x →* FundamentalGroup Y (f x)` and `mapOfEq : FundamentalGroup X x →* FundamentalGroup Y y` that takes an assumption `f x = y`.
+ Redefine `FundamentalGroup` to be `End` rather than `Aut`: since `FundamentalGroupoid` is a groupoid, `End` already has a group structure. This requires fixing some proofs about `HomotopyGroup`s, so we take this opportunity to golf a few proofs and replace `=>` by `↦`.
+ Golf within the file FundamentalGroupoid/Basic.
+ Generalize `toArrow` up to `fromPath` in `FundamentalGroupoid/FundamentalGroup` from `X : TopCat` to `[TopologicalSpace X]`.
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology |
104/141 |
Mathlib/AlgebraicTopology/FundamentalGroupoid/Basic.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/FundamentalGroup.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/InducedMaps.lean,Mathlib/AlgebraicTopology/FundamentalGroupoid/SimplyConnected.lean,Mathlib/CategoryTheory/Groupoid.lean,Mathlib/Topology/Covering.lean,Mathlib/Topology/Homotopy/HomotopyGroup.lean,Mathlib/Topology/Homotopy/Product.lean |
8 |
1 |
['github-actions'] |
mattrobball assignee:mattrobball |
1-6501 1 day ago |
9-50495 9 days ago |
9-50479 9 days |
28284 |
sgouezel author:sgouezel |
feat: finite product of probability measures |
We copy the API for the binary product of probability measures. Notably, we show that a finite product of probability measures depends continuously on the factors.
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
126/0 |
Mathlib.lean,Mathlib/MeasureTheory/Measure/FiniteMeasurePi.lean |
2 |
1 |
['github-actions'] |
urkud assignee:urkud |
1-6500 1 day ago |
8-58583 8 days ago |
8-58630 8 days |
28290 |
eric-wieser author:eric-wieser |
refactor(Tactic/Linarith): switch to using AtomM in natToInt |
This seems to result in a slight behavior change; the equations now end up being handled in `linarith` in the order they appear in the context, rather than in the order that `Expr.lt` sorts them. This matters when unifying metavariables, and sorting with `Expr.lt` increases the chance of non-determinism (as this can include metavariable names).
This follows on from #14586; at the time I did not contribute it as I did not have a test-case that changed behavior.
The metavariable assignment behavior here still feels pretty random ([#mathlib4 > Adding an extra hypothesis breaks linarith @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Adding.20an.20extra.20hypothesis.20breaks.20linarith/near/533973472)), but I think this change is probably still good.
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
46/5 |
Mathlib/Tactic/Linarith/Preprocessing.lean,MathlibTest/linarith.lean |
2 |
1 |
['github-actions'] |
robertylewis assignee:robertylewis |
1-6499 1 day ago |
8-48895 8 days ago |
8-48947 8 days |
26219 |
Thmoas-Guan author:Thmoas-Guan |
feat(RingTheory/KrullDimension): Krull Dimension of quotient regular sequence |
We show that if M is a finite module over a Noetherian local ring R, [r₁, …, rₙ] is an M-sequence, then dim M⧸(r₁, …, rₙ)M + n = dim M.
Co-authored-by: Yongle Hu @mbkybky
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
241/15 |
Mathlib.lean,Mathlib/LinearAlgebra/Quotient/Basic.lean,Mathlib/RingTheory/Ideal/MinimalPrime/Localization.lean,Mathlib/RingTheory/Jacobson/Ideal.lean,Mathlib/RingTheory/KrullDimension/Module.lean,Mathlib/RingTheory/KrullDimension/Regular.lean,Mathlib/RingTheory/LocalRing/MaximalIdeal/Basic.lean,Mathlib/RingTheory/Nakayama.lean,Mathlib/RingTheory/Support.lean |
9 |
n/a |
['Thmoas-Guan', 'chrisflav', 'github-actions', 'leanprover-community-bot-assistant', 'mbkybky'] |
chrisflav assignee:chrisflav |
1-1179 1 day ago |
unknown |
unknown |
28401 |
themathqueen author:themathqueen |
chore(LinearAlgebra/Matrix/HermitianFunctionalCalculus): moving and renaming stuff |
This moves the results about `spectrum` from `Matrix/HermitianFunctionalCalculus` to `Matrix/Spectrum` so that we can use them in other files.
This also renames `Matrix.IsHermitian.eigenvalues_eq_spectrum_real`, as it should be `Matrix.IsHermitian.spectrum_real_eq_range_eigenvalues` since it states: `spectrum ℝ A = Set.range hA.eigenvalues` and not the other way around.
Also added a result for what the `𝕜`-spectrum of a Hermitian matrix is.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
26/18 |
Mathlib/LinearAlgebra/Matrix/HermitianFunctionalCalculus.lean,Mathlib/LinearAlgebra/Matrix/Spectrum.lean |
2 |
1 |
['JonBannon', 'github-actions'] |
nobody |
0-76395 21 hours ago |
4-19274 4 days ago |
6-52028 6 days |
28344 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/PiL2): `(innerSL _ x).toMatrix` and `(toSpanSingleton _ x).toMatrix` |
In [bra-ket notation](https://en.wikipedia.org/wiki/Bra–ket_notation), this says that the matrix of `|x⟩` given by basis `b` is the column matrix `b.repr x`, and that the matrix of `⟨x|` given by orthonormal basis `b` is the row matrix `star (b.repr x)`, where `|x⟩ = toSpanSingleton _ x` and `⟨x| = innerSL _ x`
So then the matrix of a rank-one operator `|x⟩⟨y|` given by orthonormal basis `b₂` and basis `b` is equal to `vecMulVec (b.repr x) (star (b₂.repr y))`.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
35/0 |
Mathlib/Analysis/InnerProductSpace/PiL2.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/Mul.lean,Mathlib/Data/Matrix/RowCol.lean,Mathlib/LinearAlgebra/Basis/Basic.lean,Mathlib/LinearAlgebra/Matrix/ToLin.lean |
5 |
20 |
['eric-wieser', 'github-actions', 'themathqueen'] |
nobody |
0-73412 20 hours ago |
1-46542 1 day ago |
7-48681 7 days |
27162 |
themathqueen author:themathqueen |
feat(Analysis/InnerProductSpace/Positive): `U.starProjection ≤ V.starProjection` iff `U ≤ V` |
For symmetric projections `p` and `q`, `p ≤ q` iff `q ∘ p = p`, so then a corollary is: `U.starProjection ≤ V.starProjection` iff `U ≤ V`.
---
- [x] depends on: #25910
- [x] depends on: #27619
- [x] depends on: #27642
[](https://gitpod.io/from-referrer/)
|
t-analysis |
38/0 |
Mathlib/Analysis/InnerProductSpace/Positive.lean,Mathlib/Analysis/InnerProductSpace/Symmetric.lean |
2 |
3 |
['github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
0-72981 20 hours ago |
1-14451 1 day ago |
5-81281 5 days |
28630 |
Antidite author:Antidite |
feat(Archive/Imo): right isosceles configuration in the complex plane |
feat(Archive/Imo): right isosceles configuration in the complex plane
This adds `Archive/Imo/Imo1975Q3.lean`, formalizing a triangle configuration
with points A=0, B=1, C=z and auxiliary points R, P, Q built via complex
rotations and sine-based scale factors.
Main results:
* `angle_and_distance`: ∠QRP = π/2 and dist Q R = dist R P.
* Key identity `QRP_rot90`: (Q z).z − R.z = e^{iπ/2} · ((P z).z − R.z).
Design/Style:
* Minimal imports; module docstring; semantic lemma names; all definitions and
theorems live under the namespace `IMO.TriangleConfig`.
Moves:
- (none)
Deletions:
- (none)
---
[](https://gitpod.io/from-referrer/)
|
IMO
new-contributor
|
196/0 |
Archive.lean,Archive/Imo/Imo1975Q3.lean |
2 |
32 |
['Antidite', 'LLaurance', 'github-actions'] |
nobody |
0-71640 19 hours ago |
1-63864 1 day ago |
1-63909 1 day |
27937 |
madvorak author:madvorak |
feat(Logic/Basic): `congr_heq₂` |
---
[](https://gitpod.io/from-referrer/)
|
t-logic |
6/0 |
Mathlib/Logic/Basic.lean |
1 |
7 |
['YaelDillies', 'github-actions', 'madvorak', 'vihdzp'] |
fpvandoorn assignee:fpvandoorn |
0-69646 19 hours ago |
0-70630 19 hours ago |
16-45557 16 days |
28681 |
euprunin author:euprunin |
chore(Data/Finset): golf entire `diag_union_offDiag`, `erase_right_comm`, `univ_filter_mem_range` and `powersetCard_map` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-data |
4/12 |
Mathlib/Data/Finset/BooleanAlgebra.lean,Mathlib/Data/Finset/Erase.lean,Mathlib/Data/Finset/Powerset.lean,Mathlib/Data/Finset/Prod.lean |
4 |
1 |
['github-actions'] |
nobody |
0-67782 18 hours ago |
0-68728 19 hours ago |
0-68769 19 hours |
28650 |
Vierkantor author:Vierkantor |
chore(Analysis): address a lot of porting notes |
Go through all porting notes in the Analysis folder and address those with an obvious resolution. A few won'tfixes where Lean 4 is stricter about unfolding or where `@[simp]` attributes were already wrong; otherwise most are easily resolved.
---
[](https://gitpod.io/from-referrer/)
|
tech debt
t-analysis
|
69/134 |
Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/Uniqueness.lean,Mathlib/Analysis/Asymptotics/Lemmas.lean,Mathlib/Analysis/BoxIntegral/Partition/Basic.lean,Mathlib/Analysis/BoxIntegral/Partition/Tagged.lean,Mathlib/Analysis/CStarAlgebra/Matrix.lean,Mathlib/Analysis/Calculus/ContDiff/Bounds.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/FDeriv/Prod.lean,Mathlib/Analysis/Calculus/Implicit.lean,Mathlib/Analysis/Convex/Body.lean,Mathlib/Analysis/Convex/Gauge.lean,Mathlib/Analysis/Convex/Intrinsic.lean,Mathlib/Analysis/Convex/SimplicialComplex/Basic.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/InnerProductSpace/Adjoint.lean,Mathlib/Analysis/InnerProductSpace/Orientation.lean,Mathlib/Analysis/InnerProductSpace/PiL2.lean,Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean,Mathlib/Analysis/InnerProductSpace/Projection/FiniteDimensional.lean,Mathlib/Analysis/InnerProductSpace/TwoDim.lean,Mathlib/Analysis/Matrix.lean,Mathlib/Analysis/Normed/Affine/Isometry.lean,Mathlib/Analysis/Normed/Group/AddTorsor.lean,Mathlib/Analysis/Normed/Group/Basic.lean,Mathlib/Analysis/Normed/Group/Quotient.lean,Mathlib/Analysis/Normed/Group/Rat.lean,Mathlib/Analysis/Normed/Group/SemiNormedGrp/Kernels.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Analysis/Normed/Module/Basic.lean,Mathlib/Analysis/Normed/Operator/Banach.lean,Mathlib/Analysis/Normed/Operator/BoundedLinearMaps.lean,Mathlib/Analysis/Normed/Ring/Lemmas.lean,Mathlib/Analysis/Normed/Unbundled/RingSeminorm.lean,Mathlib/Analysis/NormedSpace/Extend.lean,Mathlib/Analysis/NormedSpace/MStructure.lean,Mathlib/Analysis/NormedSpace/OperatorNorm/Completeness.lean,Mathlib/Analysis/Seminorm.lean,Mathlib/Analysis/SpecialFunctions/PolarCoord.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean,Mathlib/LinearAlgebra/FiniteDimensional/Defs.lean |
41 |
11 |
['Vierkantor', 'github-actions'] |
nobody |
0-65425 18 hours ago |
1-36338 1 day ago |
1-36324 1 day |
19872 |
YaelDillies author:YaelDillies |
chore(GroupTheory/Index): rename `relindex` to `relIndex` |
Zulip discussion about renaming: [#PR reviews > #19872 rename relindex to relIndex @ 💬](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2319872.20rename.20relindex.20to.20relIndex/near/515908054)
---
- [x] depends on: #24044
[](https://gitpod.io/from-referrer/)
|
FLT
maintainer-merge
t-algebra
label:t-algebra$ |
288/182 |
Mathlib/Algebra/Module/ZLattice/Covolume.lean,Mathlib/FieldTheory/Relrank.lean,Mathlib/GroupTheory/Commensurable.lean,Mathlib/GroupTheory/CosetCover.lean,Mathlib/GroupTheory/GroupAction/Blocks.lean,Mathlib/GroupTheory/Index.lean,Mathlib/GroupTheory/IndexNormal.lean,Mathlib/GroupTheory/PGroup.lean,Mathlib/GroupTheory/Schreier.lean,Mathlib/GroupTheory/SchurZassenhaus.lean,Mathlib/GroupTheory/Sylow.lean,Mathlib/GroupTheory/Transfer.lean,Mathlib/LinearAlgebra/FreeModule/Finite/CardQuotient.lean,Mathlib/NumberTheory/ModularForms/CongruenceSubgroups.lean,Mathlib/NumberTheory/NumberField/Discriminant/Different.lean,Mathlib/NumberTheory/NumberField/Units/Regulator.lean,Mathlib/RingTheory/Ideal/Quotient/Index.lean |
17 |
27 |
['Ruben-VandeVelde', 'TwoFX', 'YaelDillies', 'alreadydone', 'eric-wieser', 'github-actions', 'kbuzzard', 'leanprover-community-bot-assistant', 'loefflerd', 'madvorak', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'tb65536'] |
nobody |
0-65299 18 hours ago |
7-60306 7 days ago |
200-73820 200 days |
27644 |
themathqueen author:themathqueen |
chore(LinearAlgebra/Projection): deprecating `subtype ∘ linearProjOfIsCompl` in favor of `IsCompl.projection` |
This deprecates all instances of `U.subtype ∘ U.linearProjOfIsCompl V hUV` and `(U.linearProjOfIsCompl V hUV x : E)` in favor of `hUV.projection` and `hUV.projection x` respectively in `LinearAlgebra/Projection` and other files.
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
45/30 |
Mathlib/Algebra/Lie/LieTheorem.lean,Mathlib/Analysis/InnerProductSpace/Projection/Submodule.lean,Mathlib/Analysis/InnerProductSpace/Symmetric.lean,Mathlib/LinearAlgebra/Projection.lean |
4 |
7 |
['github-actions', 'j-loreaux', 'themathqueen'] |
nobody |
0-64894 18 hours ago |
1-11206 1 day ago |
22-19918 22 days |
27825 |
yonggyuchoimath author:yonggyuchoimath |
feat(RingTheory/Ideal/Height): sup of ideal heights equals Krull dimension |
Adds `Ideal.sup_height_eq_ringKrullDim` and `Ideal.sup_primeHeight_eq_ringKrullDim`.
They show the suprema of heights of ideals / prime ideals are equal to the Krull dimension, when the ring is nonzero. |
t-ring-theory
new-contributor
|
53/0 |
Mathlib/RingTheory/Ideal/Height.lean |
1 |
5 |
['github-actions', 'kbuzzard', 'yonggyuchoimath'] |
kbuzzard assignee:kbuzzard |
0-62590 17 hours ago |
16-33063 16 days ago |
19-48151 19 days |
28669 |
kckennylau author:kckennylau |
chore: clean up some proofs about locally compact valuation |
---
[](https://gitpod.io/from-referrer/)
|
|
40/25 |
Mathlib/RingTheory/Valuation/Archimedean.lean,Mathlib/Topology/Algebra/Valued/LocallyCompact.lean |
2 |
3 |
['github-actions', 'kckennylau', 'pechersky'] |
nobody |
0-62480 17 hours ago |
1-5051 1 day ago |
1-5035 1 day |
28663 |
harahu author:harahu |
doc(Tactic): hyphenate "right-hand" and "left-hand" where appropriate |
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-meta
|
18/18 |
Mathlib/Tactic/ApplyCongr.lean,Mathlib/Tactic/CC/Addition.lean,Mathlib/Tactic/CC/Datatypes.lean,Mathlib/Tactic/CategoryTheory/Slice.lean,Mathlib/Tactic/LinearCombination'.lean,Mathlib/Tactic/LinearCombination.lean,Mathlib/Tactic/SetLike.lean,Mathlib/Tactic/Widget/LibraryRewrite.lean |
8 |
3 |
['github-actions', 'grunweg'] |
nobody |
0-61047 16 hours ago |
0-61177 16 hours ago |
1-17302 1 day |
26827 |
pechersky author:pechersky |
feat(Analysis/Normed/ValuativeRel): helper instance for NormedField |
---
[](https://gitpod.io/from-referrer/)
- [x] depends on: #26713
- [x] depends on: #26826
|
t-algebra
t-analysis
t-number-theory
label:t-algebra$ |
199/20 |
Mathlib.lean,Mathlib/Analysis/Normed/ValuativeRel.lean,Mathlib/Topology/Algebra/Valued/ValuativeRel.lean |
3 |
17 |
['ADedecker', 'adamtopaz', 'github-actions', 'kbuzzard', 'kckennylau', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'pechersky'] |
kbuzzard assignee:kbuzzard |
0-59747 16 hours ago |
7-39393 7 days ago |
44-18717 44 days |
28176 |
vihdzp author:vihdzp |
chore: add `simp` attribute to `abs_mul` |
See [Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/abs_mul.20simp).
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
3/3 |
Mathlib/Algebra/Order/Ring/Abs.lean,Mathlib/NumberTheory/Ostrowski.lean |
2 |
4 |
['github-actions', 'kbuzzard', 'leanprover-bot'] |
jcommelin assignee:jcommelin |
0-58764 16 hours ago |
10-16258 10 days ago |
10-55377 10 days |
27837 |
CBirkbeck author:CBirkbeck |
feat(NumberTheory/Divisors): add divisorAntidiagonal equivalence. |
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-number-theory
|
1/0 |
Mathlib.lean |
1 |
10 |
['CBirkbeck', 'github-actions', 'riccardobrasca', 'tb65536'] |
tb65536 assignee:tb65536 |
0-55070 15 hours ago |
9-13892 9 days ago |
17-42694 17 days |
28691 |
or4nge19 author:or4nge19 |
feat(Probability/Invariance):Reversibility/DetailedBalance |
Add reversibility (detailed balance) for Markov kernels and show it implies invariance
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-measure-probability
|
25/1 |
Mathlib/Probability/Kernel/Invariance.lean |
1 |
1 |
['github-actions'] |
nobody |
0-54042 15 hours ago |
0-57187 15 hours ago |
0-57230 15 hours |
28142 |
YaelDillies author:YaelDillies |
refactor: state hypotheses of `BialgHom.ofAlgHom` as equalities of `AlgHom`s |
... as opposed to equalities of `LinearMap`s, and similarly for `BialgEquiv.ofAlgEquiv`. This way, dedicated `ext` lemmas can fire.
From Toric
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
toric
maintainer-merge
|
34/19 |
Mathlib/Algebra/Algebra/Equiv.lean,Mathlib/RingTheory/Bialgebra/Equiv.lean,Mathlib/RingTheory/Bialgebra/Hom.lean |
3 |
5 |
['YaelDillies', 'chrisflav', 'github-actions'] |
chrisflav assignee:chrisflav |
0-51353 14 hours ago |
0-60583 16 hours ago |
11-69639 11 days |
28682 |
Thmoas-Guan author:Thmoas-Guan |
feat(RingTheory): definition of regular local ring |
In this PR, we give the definition of regular local ring.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
136/0 |
Mathlib.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/RingTheory/RegularLocalRing.lean |
3 |
23 |
['Thmoas-Guan', 'chrisflav', 'github-actions', 'mbkybky'] |
chrisflav assignee:chrisflav |
0-50885 14 hours ago |
0-63739 17 hours ago |
0-1866 31 minutes |
27511 |
Nebula691 author:Nebula691 |
feat(Algebra/QuadraticAlgebra) : Define Quadratic Algebra |
Co-authored-by: Edison Xie
Co-authored-by: Kenny Lau
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-algebra
label:t-algebra$ |
419/0 |
Mathlib.lean,Mathlib/Algebra/QuadraticAlgebra.lean |
2 |
70 |
['Whysoserioushah', 'YaelDillies', 'eric-wieser', 'github-actions', 'kckennylau'] |
eric-wieser assignee:eric-wieser |
0-50204 13 hours ago |
25-40803 25 days ago |
25-40848 25 days |
28642 |
chrisflav author:chrisflav |
chore(RingTheory/Localization/Algebra): generalize universes and to `CommSemiring` |
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory |
23/29 |
Mathlib/Algebra/Algebra/Hom.lean,Mathlib/RingTheory/Localization/Algebra.lean,Mathlib/RingTheory/Localization/Basic.lean |
3 |
1 |
['github-actions'] |
nobody |
0-47021 13 hours ago |
0-47028 13 hours ago |
1-41596 1 day |
27785 |
staroperator author:staroperator |
chore(Algebra/Group/Submonoid): golf `Nat.addSubmonoidClosure_one` using `simp` |
This should improve the proof readability.
---
[](https://gitpod.io/from-referrer/)
|
large-import
t-algebra
label:t-algebra$ |
8/15 |
Mathlib/Algebra/Group/Submonoid/Membership.lean,Mathlib/Algebra/Group/Submonoid/Operations.lean,Mathlib/Algebra/Order/Star/Basic.lean |
3 |
8 |
['github-actions', 'joneugster', 'leanprover-bot', 'mathlib4-merge-conflict-bot', 'staroperator'] |
joneugster assignee:joneugster |
0-46740 12 hours ago |
0-46740 12 hours ago |
19-30633 19 days |
27936 |
alreadydone author:alreadydone |
feat(Algebra): additivize Dvd and Prime |
`Prime` can't be directly additivized, so we introduce `Preprime`, which drops the `≠ 0` condition, and additivize it to `AddPrime`. To show that `Preprime` is a reasonable definition, we show its connection to `Irreducible` under `IsPrimal` and `IsRegular` conditions. We also show that an element in a product monoid is preprime iff one component is a unit and the other is preprime, and the same with `Preprime` replaced by `Irreducible`.
Also additivize `IsPrimal`, `IsRelPrime` and `DecompositionMonoid`.
The motivation is that the primality of `single g 1` in `AddMonoidAlgebra k G` is connected to the primality of `g` in `G`.
---
I've checked [all 29 files](https://github.com/search?q=repo%3Aleanprover-community%2Fmathlib4%20%E2%88%A3%20to_additive&type=code) containing the `∣` symbol and the `to_additive` attribute and fixed the wrongly translated (`dvd` to `addDvd`) names.
TODO: connect (Add)Dvd to [ExistsMul/AddOfLE](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Algebra/Order/Monoid/Unbundled/ExistsOfLE.html#ExistsMulOfLE)
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
401/191 |
Mathlib.lean,Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean,Mathlib/Algebra/BigOperators/Group/Finset/Defs.lean,Mathlib/Algebra/BigOperators/Group/Finset/Piecewise.lean,Mathlib/Algebra/BigOperators/Group/List/Lemmas.lean,Mathlib/Algebra/BigOperators/Group/Multiset/Basic.lean,Mathlib/Algebra/Divisibility/Basic.lean,Mathlib/Algebra/Divisibility/Finite.lean,Mathlib/Algebra/Divisibility/Hom.lean,Mathlib/Algebra/Divisibility/Prod.lean,Mathlib/Algebra/Divisibility/Units.lean,Mathlib/Algebra/Group/Action/Pointwise/Finset.lean,Mathlib/Algebra/Group/Prod.lean,Mathlib/Algebra/GroupWithZero/Associated.lean,Mathlib/Algebra/Notation/Defs.lean,Mathlib/Algebra/Prime/Defs.lean,Mathlib/Algebra/Prime/Lemmas.lean,Mathlib/Algebra/Prime/Prod.lean,Mathlib/Data/Nat/Prime/Defs.lean,Mathlib/Dynamics/PeriodicPts/Defs.lean,Mathlib/GroupTheory/Coset/Card.lean,Mathlib/GroupTheory/Exponent.lean,Mathlib/GroupTheory/GroupAction/Blocks.lean,Mathlib/GroupTheory/GroupAction/Period.lean,Mathlib/GroupTheory/Index.lean,Mathlib/GroupTheory/OrderOfElement.lean,Mathlib/GroupTheory/Perm/Cycle/Type.lean,Mathlib/GroupTheory/Schreier.lean,Mathlib/GroupTheory/SpecificGroups/Cyclic.lean,Mathlib/Tactic/ToAdditive/GuessName.lean |
30 |
4 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
nobody |
0-46657 12 hours ago |
1-14143 1 day ago |
14-84364 14 days |
26330 |
Timeroot author:Timeroot |
"Junk value" test file |
This PR continues the work from #25173.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25173 |
t-data |
360/0 |
MathlibTest/Junk.lean |
1 |
3 |
['Timeroot', 'github-actions', 'leanprover-community-bot-assistant'] |
nobody |
0-44502 12 hours ago |
41-22984 1 month ago |
56-71867 56 days |
27889 |
astrainfinita author:astrainfinita |
chore(RingTheory/(Mv)PowerSeries): use implicit parameters in `monomial`, `coeff`, `map`, `C`, and `constantCoeff` |
Just like what we did for `Polynomial`, `MvPolynomial`, and `HahnSeries`.
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-algebra
label:t-algebra$ |
555/572 |
Archive/Wiedijk100Theorems/Partition.lean,Mathlib/NumberTheory/Bernoulli.lean,Mathlib/NumberTheory/ModularForms/QExpansion.lean,Mathlib/RingTheory/HahnSeries/HEval.lean,Mathlib/RingTheory/HahnSeries/PowerSeries.lean,Mathlib/RingTheory/KrullDimension/NonZeroDivisors.lean,Mathlib/RingTheory/LaurentSeries.lean,Mathlib/RingTheory/MvPowerSeries/Basic.lean,Mathlib/RingTheory/MvPowerSeries/Evaluation.lean,Mathlib/RingTheory/MvPowerSeries/Inverse.lean,Mathlib/RingTheory/MvPowerSeries/LexOrder.lean,Mathlib/RingTheory/MvPowerSeries/LinearTopology.lean,Mathlib/RingTheory/MvPowerSeries/NoZeroDivisors.lean,Mathlib/RingTheory/MvPowerSeries/Order.lean,Mathlib/RingTheory/MvPowerSeries/PiTopology.lean,Mathlib/RingTheory/MvPowerSeries/Substitution.lean,Mathlib/RingTheory/MvPowerSeries/Trunc.lean,Mathlib/RingTheory/Polynomial/Eisenstein/Distinguished.lean,Mathlib/RingTheory/Polynomial/GaussNorm.lean,Mathlib/RingTheory/Polynomial/HilbertPoly.lean,Mathlib/RingTheory/PowerSeries/Basic.lean,Mathlib/RingTheory/PowerSeries/Binomial.lean,Mathlib/RingTheory/PowerSeries/CoeffMulMem.lean,Mathlib/RingTheory/PowerSeries/Derivative.lean,Mathlib/RingTheory/PowerSeries/Evaluation.lean,Mathlib/RingTheory/PowerSeries/GaussNorm.lean,Mathlib/RingTheory/PowerSeries/Inverse.lean,Mathlib/RingTheory/PowerSeries/NoZeroDivisors.lean,Mathlib/RingTheory/PowerSeries/Order.lean,Mathlib/RingTheory/PowerSeries/PiTopology.lean,Mathlib/RingTheory/PowerSeries/Substitution.lean,Mathlib/RingTheory/PowerSeries/Trunc.lean,Mathlib/RingTheory/PowerSeries/WeierstrassPreparation.lean,Mathlib/RingTheory/PowerSeries/WellKnown.lean |
34 |
21 |
['alreadydone', 'github-actions', 'leanprover-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
0-43519 12 hours ago |
0-52244 14 hours ago |
11-28502 11 days |
28637 |
JovanGerb author:JovanGerb |
feat(to_additive): `(dont_translate := ...)` option |
This PR adds the `(dont_translate := ...)` option to `to_additive`. This helps with additivizing delarations that have some multiplicative structure that can't be translated, such as a `GroupWithZero`, `Ring` or `Field`.
In a future PR some automation will be added to infer these arguments automatically based on the type of the declaration. For example if the type includes `GroupWithZero G`, then `G` will be automatically not translated.
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
120/27 |
Mathlib/Tactic/ToAdditive/Frontend.lean,MathlibTest/toAdditive.lean |
2 |
2 |
['github-actions', 'mathlib4-merge-conflict-bot'] |
nobody |
0-42994 11 hours ago |
0-58639 16 hours ago |
1-534 1 day |
28676 |
sun123zxy author:sun123zxy |
feat(NumberTheory/ArithmeticFunction): wrap `Nat.totient` as an `ArithmeticFunction` |
This wraps the Euler's totient function `Nat.totient` into a new `ArithmeticFunction` `ϕ`, with some basic identities such as `ϕ * ζ = id` and `μ * id = ϕ.`
---
We use the notation `ϕ` to distinguish from `Nat.totient`'s notation `φ`, however this might be controversial. Suggestions are welcome!
[](https://gitpod.io/from-referrer/)
|
large-import
new-contributor
t-number-theory
|
52/3 |
Mathlib/NumberTheory/ArithmeticFunction.lean |
1 |
7 |
['b-mehta', 'eric-wieser', 'github-actions'] |
nobody |
0-38915 10 hours ago |
0-80068 22 hours ago |
0-81040 22 hours |
28547 |
YaelDillies author:YaelDillies |
feat: `measurable_from_prod_countable_right` |
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
28/15 |
Mathlib/MeasureTheory/Function/StronglyMeasurable/Basic.lean,Mathlib/MeasureTheory/Group/Arithmetic.lean,Mathlib/MeasureTheory/MeasurableSpace/Constructions.lean,Mathlib/Probability/Kernel/Disintegration/Basic.lean,Mathlib/Probability/Kernel/Disintegration/Density.lean,Mathlib/Probability/Kernel/RadonNikodym.lean |
6 |
1 |
['github-actions'] |
nobody |
0-35693 9 hours ago |
3-47819 3 days ago |
3-47863 3 days |
27216 |
D-Thomine author:D-Thomine |
feat(Cardinal/Finite): ENat powers and cardinality |
This PR continues the work from #25574.
Original PR: https://github.com/leanprover-community/mathlib4/pull/25574 |
t-algebra label:t-algebra$ |
204/5 |
Mathlib.lean,Mathlib/Data/ENat/Basic.lean,Mathlib/Data/ENat/Pow.lean,Mathlib/SetTheory/Cardinal/Finite.lean |
4 |
13 |
['D-Thomine', 'eric-wieser', 'github-actions', 'mathlib4-merge-conflict-bot'] |
kbuzzard assignee:kbuzzard |
0-35523 9 hours ago |
0-62553 17 hours ago |
29-7260 29 days |
26267 |
vasnesterov author:vasnesterov |
feat(Analysis/Calculus): Taylor series converges to function on whole ball |
* Prove `FormalMultilinearSeries.AnalyticOnNhd`: the sum of series is analytic on its ball of convergence.
* Prove `AnalyticOn.hasFPowerSeriesOnBall`: a variant of `AnalyticAt.hasFPowerSeriesAt` which gives convergence to the function on the ball of convergence.
---
- [x] depends on: #23745
- [x] depends on: #23747
- [x] depends on: #23748
- [x] depends on: #26247
This PR continues the work from #23749.
Original PR: https://github.com/leanprover-community/mathlib4/pull/23749 |
t-analysis |
47/0 |
Mathlib/Analysis/Analytic/ChangeOrigin.lean,Mathlib/Analysis/Calculus/IteratedDeriv/Lemmas.lean |
2 |
5 |
['github-actions', 'grunweg', 'mathlib4-dependent-issues-bot', 'vasnesterov'] |
urkud assignee:urkud |
0-35458 9 hours ago |
1-20092 1 day ago |
46-71295 46 days |
27824 |
ChrisHughes24 author:ChrisHughes24 |
feat(Calculus): exists_gt_of_deriv_pos and variants |
---
I created a new file for this as I anticipate there will be many lemmas relating derivatives and monotonicity in future. Some lemmas relating deriviatives to monotonicity are already in mathlib and should maybe moved to the file (e.g. docs#HasDerivWithinAt.nonneg_of_monotoneOn).
I stated them in as much generality as I could, copying the generality of `HasDerivWithinAt.nonneg_of_monotoneOn`.
- [ ] depends on: #28039
[](https://gitpod.io/from-referrer/)
|
t-analysis |
86/0 |
Mathlib.lean,Mathlib/Analysis/Calculus/Deriv/Order.lean |
2 |
19 |
['ChrisHughes24', 'EtienneC30', 'github-actions', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
0-33999 9 hours ago |
5-36709 5 days ago |
9-54407 9 days |
26331 |
Timeroot author:Timeroot |
feat(Algebra/Polynomial): Descartes' Rule of signs |
This PR continues the work from #23681.
Original PR: https://github.com/leanprover-community/mathlib4/pull/23681 |
t-algebra label:t-algebra$ |
616/3 |
Mathlib.lean,Mathlib/Algebra/Polynomial/CoeffList.lean,Mathlib/Algebra/Polynomial/Degree/Operations.lean,Mathlib/Algebra/Polynomial/EraseLead.lean,Mathlib/Algebra/Polynomial/RuleOfSigns.lean |
5 |
5 |
['Timeroot', 'adomani', 'github-actions'] |
nobody |
0-33865 9 hours ago |
57-85615 1 month ago |
57-85660 57 days |
27212 |
CBirkbeck author:CBirkbeck |
Cot series iterated deriv within |
---
- [x] depends on: #27209
- [x] depends on: #26016
[](https://gitpod.io/from-referrer/)
|
|
237/2 |
Mathlib/Analysis/Complex/IntegerCompl.lean,Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Cotangent.lean,Mathlib/NumberTheory/ModularForms/EisensteinSeries/Summable.lean |
4 |
4 |
['github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot'] |
nobody |
0-33343 9 hours ago |
8-62685 8 days ago |
8-76647 8 days |
28469 |
EtienneC30 author:EtienneC30 |
feat: basic properties of toLp and ofLp |
Provide a `homeomorph` and `uniformEquiv` version of `WithLp.equiv`. Show that `toLp` and `ofLp` are Lipschitz and anti-Lipschitz, and that `toLp` is a uniform inducing. Show that evaluation in PiLp is continuous and open.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
62/1 |
Mathlib/Analysis/Normed/Lp/PiLp.lean,Mathlib/Analysis/Normed/Lp/ProdLp.lean |
2 |
1 |
['github-actions'] |
nobody |
0-31544 8 hours ago |
5-47274 5 days ago |
5-47895 5 days |
25970 |
wwylele author:wwylele |
feat(RingTheory): decompose archimedean classes of HahnSeries |
In preparation for #25140, this connects archimedean class and HahnSeries
---
- [x] depends on: #26773
- [x] depends on: #26787
- [x] depends on: #26788
- [x] depends on: #26789
- [x] depends on: #28192
- [x] depends on: #28394
- [x] depends on: #28632
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
large-import
|
213/5 |
Mathlib/Algebra/Order/Group/Synonym.lean,Mathlib/RingTheory/HahnSeries/Basic.lean,Mathlib/RingTheory/HahnSeries/Lex.lean |
3 |
47 |
['ScottCarnahan', 'YaelDillies', 'github-actions', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'wwylele'] |
alreadydone assignee:alreadydone |
0-30706 8 hours ago |
2-11079 2 days ago |
50-12184 50 days |
26975 |
Whysoserioushah author:Whysoserioushah |
feat: a norm_num extension for complex numbers |
co-authored-by : @thefundamentaltheor3m, @hrmacbeth
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
350/0 |
Mathlib.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/Tactic.lean,Mathlib/Tactic/NormNum/NormNumI.lean,MathlibTest/norm_numI.lean |
5 |
46 |
['Whysoserioushah', 'dupuisf', 'eric-wieser', 'github-actions', 'hrmacbeth'] |
robertylewis assignee:robertylewis |
0-30683 8 hours ago |
34-30625 1 month ago |
34-34942 34 days |
28706 |
unknown author:unknown |
chore: golf entire `apply_eq_iff_eq_symm_apply`, `dite_ne_left_iff`, `exists_prime_lt_and_le_two_mul_succ`, `lt_up` and `sUnion_mem_empty_univ` using `grind` |
unknown description |
|
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-28855 8 hours ago |
unknown |
unknown |
28696 |
or4nge19 author:or4nge19 |
feat(Quiver/Path/Vertices): add splitting lemmas and decomposition results |
introduce splitting and decomposition results (exists_decomp_at_length, exists_decomp_of_mem_vertices, split_at_vertex needed to reason about the list of vertices of a path and to split paths at a chosen vertex. Part of Perron-Frobenius theorem pre-requisites
see https://leanprover.zulipchat.com/#narrow/channel/116395-maths/topic/Formalizing.20Perron-Frobenius/with/525516636
---
[](https://gitpod.io/from-referrer/)
|
new-contributor |
112/0 |
Mathlib/Combinatorics/Quiver/Path/Vertices.lean,Mathlib/Data/List/Basic.lean |
2 |
1 |
['github-actions'] |
nobody |
0-27271 7 hours ago |
0-45796 12 hours ago |
0-45865 12 hours |
28662 |
gasparattila author:gasparattila |
feat: products of affine maps |
This PR defines some maps and isomorphisms between products of affine spaces.
---
[](https://gitpod.io/from-referrer/)
|
new-contributor
t-euclidean-geometry
t-algebra
label:t-algebra$ |
168/0 |
Mathlib/LinearAlgebra/AffineSpace/AffineEquiv.lean,Mathlib/LinearAlgebra/AffineSpace/AffineMap.lean,Mathlib/LinearAlgebra/AffineSpace/ContinuousAffineEquiv.lean,Mathlib/Topology/Algebra/ContinuousAffineMap.lean |
4 |
2 |
['eric-wieser', 'github-actions'] |
nobody |
0-27168 7 hours ago |
0-70144 19 hours ago |
0-36246 10 hours |
28704 |
unknown author:unknown |
chore: remove unnecessary tactic invocations |
unknown description |
|
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-25628 7 hours ago |
unknown |
unknown |
25902 |
pfaffelh author:pfaffelh |
feat: The finite product of semi-rings (in terms of measure theory) is a semi-ring. |
~~Move results for rings (in terms of measure theory) to a separate file; was in Semiring.lean before.~~
For `∀ i ∈ s, IsSetSemiring (C i))`, the product `s.pi '' s.pi C` is a semiring.
Prove two auxiliary lemmas in `Data.Set.Prod` needed on the way.
---
*This PR continues the work from #22714.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/22714* |
large-import
t-measure-probability
|
288/3 |
Mathlib/Data/Set/Pairwise/Lattice.lean,Mathlib/MeasureTheory/MeasurableSpace/Pi.lean,Mathlib/MeasureTheory/SetSemiring.lean |
3 |
1 |
['github-actions'] |
nobody |
0-23396 6 hours ago |
2-16977 2 days ago |
2-27173 2 days |
25883 |
pfaffelh author:pfaffelh |
feat: introduce Gram matrices |
A Gram matrix has entry `⟪v i, v j⟫` at `i j : n`, where `v : n → α` is an `InnerProductSpace 𝕜 α`.
Give this notion and show that Gram matrices are positive semi-definite.
This will be used later in order to show that the covariance matrix for Brownian Motion is positive semi-definite.
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #24575.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/24575* |
migrated-from-branch
new-contributor
t-analysis
|
145/2 |
Mathlib.lean,Mathlib/Analysis/InnerProductSpace/GramMatrix.lean,Mathlib/MeasureTheory/Function/L2Space.lean |
3 |
29 |
['EtienneC30', 'eric-wieser', 'github-actions', 'pfaffelh'] |
nobody |
0-23224 6 hours ago |
1-25670 1 day ago |
43-22031 43 days |
25899 |
pfaffelh author:pfaffelh |
feat(Topology/Compactness/CompactSystem): introduce compact Systems |
A compact system is a set systems with the property that, whenever a countable intersections of sets in the set system is empty, there is a finite subset of sets with empty intersection. These are needed e.g. in measure theory if one wants to show sigma-additivity of a set function on a ring.
* Main result: The set of sets which are either compact and closed, or `univ`, is a compact system.
* Introduce `Dissipate s x := ⋂ y ≤ x, s y` (Data/Set/Dissipate), which is parallel to Data/Set/Accumulate.
Co-authored-by: Rémy Degenne remydegenne@gmail.com
---
*This PR continues the work from #24541.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/24541* |
t-topology |
471/14 |
Mathlib.lean,Mathlib/Data/Set/Accumulate.lean,Mathlib/Data/Set/Dissipate.lean,Mathlib/MeasureTheory/PiSystem.lean,Mathlib/Topology/Compactness/CompactSystem.lean |
5 |
13 |
['github-actions', 'pfaffelh', 'sgouezel'] |
nobody |
0-23203 6 hours ago |
25-43608 25 days ago |
41-10608 41 days |
28700 |
unknown author:unknown |
feat(ModelTheory): Set.Definable is transitive |
unknown description |
large-import |
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-22541 6 hours ago |
unknown |
unknown |
28697 |
chrisflav author:chrisflav |
chore(RingTheory/Generators): make type argument in `localizationAway` and `baseChange` explicit |
The `S` (resp. `T`) argument in `Generators.localizationAway` (resp. `Generators.baseChange`) is not inferable from the other arguments and is currently frequently explicitly provided.
Moreover, `Presentation.localizationAway` (resp. `Presentation.baseChange`) already take `S` (resp. `T`) explicitly.
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
maintainer-merge
|
21/19 |
Mathlib/RingTheory/Extension/Cotangent/LocalizationAway.lean,Mathlib/RingTheory/Extension/Generators.lean,Mathlib/RingTheory/Extension/Presentation/Basic.lean |
3 |
2 |
['Ruben-VandeVelde', 'github-actions'] |
nobody |
0-22490 6 hours ago |
0-22490 6 hours ago |
0-44502 12 hours |
28667 |
kckennylau author:kckennylau |
feat(Algebra/Order): two auxiliary definitions |
This PR introduces two constructors for isomorphisms of ordered monoids:
1. `α ≃*o β` gives `αˣ ≃*o βˣ`
2. `(⊤ : Submonoid α) ≃*o α`.
---
This is used for a [PR](https://github.com/kckennylau/mathlib4/pull/13) to a [PR](https://github.com/erdOne/mathlib4/pull/1) to a [PR](https://github.com/leanprover-community/mathlib4/pull/27465).
Short justification for new files: We are basically in a unique situation where every component used seems to be orthogonal to each other:
* We have the instances that install order on units and submonoids (different files, I would presume), and these files know nothing about `OrderMonoidIso`.
* We have `OrderMonoidIso` on the other hand which also knows nothing about units or submonoids.
* And furthermore, `Submonoid.topEquiv` lives in yet another completely different place, since this is about operations on monoids (and do not require order!).
More notes: I have decided to deviate from the usual naming scheme of `Units.map` to make dot notation work. I believe that `Units.map` is a bad name as well, but that's a discussion for another time.
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
38/0 |
Mathlib.lean,Mathlib/Algebra/Order/Hom/Submonoid.lean,Mathlib/Algebra/Order/Hom/Units.lean |
3 |
3 |
['YaelDillies', 'github-actions'] |
nobody |
0-22299 6 hours ago |
1-8954 1 day ago |
1-8996 1 day |
28656 |
euprunin author:euprunin |
chore(Data/Int): golf entire `coe_leastOfBdd_eq` and `coe_greatestOfBdd_eq` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-data
maintainer-merge
|
2/6 |
Mathlib/Data/Int/LeastGreatest.lean |
1 |
1 |
['github-actions'] |
nobody |
0-21903 6 hours ago |
1-33719 1 day ago |
1-33766 1 day |
28640 |
euprunin author:euprunin |
chore(Data/List): golf entire `getElem?_getD_replicate_default_eq` and `getD_append_right` using `grind` |
---
[](https://gitpod.io/from-referrer/)
|
t-data
maintainer-merge
|
2/9 |
Mathlib/Data/List/GetD.lean |
1 |
1 |
['github-actions'] |
nobody |
0-21856 6 hours ago |
1-45282 1 day ago |
1-45331 1 day |
25795 |
dagurtomas author:dagurtomas |
chore(Condensed): introduce an abbrev for the equivalence of light condensed sets with a category of sheaves on a small site |
---
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #24522.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/24522* |
t-condensed |
39/0 |
Mathlib.lean,Mathlib/Condensed/Light/Small.lean |
2 |
1 |
['github-actions'] |
joneugster assignee:joneugster |
0-21619 6 hours ago |
69-58128 2 months ago |
69-58111 69 days |
26201 |
scholzhannah author:scholzhannah |
feat: subcomplexes of a classical CW complex |
This PR defines subcomplexes of a (classical relative) CW complex to be a closed subspace which is a union of open cells. It provides additional definitions for alternative ways to describe subcomplexes. Lastly, it refactors the definition of the skeleton to define it as a subcomplex.
Co-authored-by: Floris van Doorn
---
[](https://gitpod.io/from-referrer/)
|
t-topology |
213/25 |
Mathlib/Topology/CWComplex/Classical/Basic.lean |
1 |
2 |
['github-actions', 'leanprover-community-bot-assistant'] |
ADedecker assignee:ADedecker |
0-20969 5 hours ago |
40-50800 1 month ago |
59-76140 59 days |
25794 |
dagurtomas author:dagurtomas |
feat(CategoryTheory): localization preserves braided structure |
---
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #24485.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/24485* |
file-removed
t-category-theory
|
733/427 |
Mathlib.lean,Mathlib/CategoryTheory/Localization/Monoidal.lean,Mathlib/CategoryTheory/Localization/Monoidal/Basic.lean,Mathlib/CategoryTheory/Localization/Monoidal/Braided.lean,Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean,Mathlib/CategoryTheory/Sites/Monoidal.lean |
6 |
2 |
['github-actions', 'leanprover-community-bot-assistant'] |
nobody |
0-20583 5 hours ago |
46-81055 1 month ago |
22-63640 22 days |
26120 |
vasnesterov author:vasnesterov |
feat(Data/Seq): `update` and `set` operations for `Seq` |
Introduce `modify` and `set` operations for sequences, along with a few lemmas about them.
---
- [x] depends on: #20071
[](https://gitpod.io/from-referrer/)
This PR continues the work from #20160.
Original PR: https://github.com/leanprover-community/mathlib4/pull/20160 |
t-data |
69/0 |
Mathlib/Data/Seq/Seq.lean |
1 |
4 |
['github-actions', 'grunweg', 'mathlib4-dependent-issues-bot', 'vasnesterov'] |
nobody |
0-20087 5 hours ago |
63-25404 2 months ago |
63-25454 63 days |
28534 |
raja-19 author:raja-19 |
feat(Data/Set/Card): add lemmas of the form `card_Union_le` |
Add `Finset`/`Fintype`/`Finite` and `ncard`/`encard` variants.
[Zulip thread](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.60card_Union_le_sum_card.60.20lemmas)
---
[](https://gitpod.io/from-referrer/)
|
t-data
new-contributor
|
52/3 |
Mathlib/Algebra/Order/BigOperators/Group/Finset.lean,Mathlib/Data/Set/Card/Arithmetic.lean |
2 |
16 |
['b-mehta', 'github-actions', 'kckennylau', 'raja-19'] |
nobody |
0-19751 5 hours ago |
4-13481 4 days ago |
4-13527 4 days |
25123 |
eric-wieser author:eric-wieser |
feat: add rfl lemmas for monoidal categories |
Making these `simp` opens a can of worms best left to #24823
`simps` would generate bad names here.
---
[](https://gitpod.io/from-referrer/)
|
maintainer-merge
t-algebra
label:t-algebra$ |
111/0 |
Mathlib/Algebra/Category/AlgCat/Monoidal.lean,Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean,Mathlib/LinearAlgebra/QuadraticForm/QuadraticModuleCat/Monoidal.lean |
3 |
1 |
['github-actions'] |
dagurtomas assignee:dagurtomas |
0-19448 5 hours ago |
90-5838 2 months ago |
90-5889 90 days |
28400 |
CBirkbeck author:CBirkbeck |
Define the Dedekind Eta function |
---
[](https://gitpod.io/from-referrer/)
|
t-number-theory |
173/0 |
Mathlib.lean,Mathlib/Analysis/Complex/Periodic.lean,Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Summable.lean,Mathlib/NumberTheory/ModularForms/DedekindEta.lean |
5 |
1 |
['github-actions'] |
nobody |
0-19241 5 hours ago |
6-37449 6 days ago |
0-0 0 seconds |
25743 |
robin-carlier author:robin-carlier |
feat(AlgebraicTopology/SimplexCategory/Augmented): monoidal structure on `AugmentedSimplexCategory` |
We construct a monoidal category structure on `AugmentedSimplexCategory`. The tensor products corresponds to ordinal sum. We characterize morphisms out of a tensor product of object in terms of their precomposition with canonical maps `x ⟶ x ⊗ y` and `y ⟶ x ⊗ y` coming from the fact that the unit is an initial object.
When constructing this structure, we found that making `AugmentedSimplexCategory` an abbrev rather than a `def`
worked better.
---
- [x] depends on: #25742
Future work includes using this monoidal structure and Day convolution to define the join monoidal structure on augmented simplicial sets, and also using this category as a way to encode monoidal and monadic bar constructions.
Happy to discuss the fact that I had to make `AugmentedSimplexCategory` an abbrev, I can revert this but this makes the proofs a bit harder (but, I guess, also less abusing some of defeqs?).
[](https://gitpod.io/from-referrer/)
---
*This PR continues the work from #22768.*
*Original PR: https://github.com/leanprover-community/mathlib4/pull/22768* |
t-algebraic-topology
t-category-theory
|
523/111 |
Mathlib.lean,Mathlib/AlgebraicTopology/SimplexCategory/Augmented.lean,Mathlib/AlgebraicTopology/SimplexCategory/Augmented/Basic.lean,Mathlib/AlgebraicTopology/SimplexCategory/Augmented/Monoidal.lean,Mathlib/AlgebraicTopology/SimplexCategory/Basic.lean |
5 |
6 |
['github-actions', 'grunweg', 'leanprover-community-bot-assistant', 'mathlib4-dependent-issues-bot', 'robin-carlier'] |
dagurtomas assignee:dagurtomas |
0-18083 5 hours ago |
20-53659 20 days ago |
66-20688 66 days |
28099 |
themathqueen author:themathqueen |
feat(LinearAlgebra/Matrix/Spectrum): the eigenvalues of Hermitian `A` are all `0` iff `A = 0` |
---
[](https://gitpod.io/from-referrer/)
|
t-algebra
easy
label:t-algebra$ |
7/0 |
Mathlib/LinearAlgebra/Matrix/Spectrum.lean |
1 |
2 |
['github-actions', 'themathqueen'] |
riccardobrasca assignee:riccardobrasca |
0-17092 4 hours ago |
10-27979 10 days ago |
13-19568 13 days |
28678 |
vihdzp author:vihdzp |
feat: well-founded instances for `ULift` |
---
[](https://gitpod.io/from-referrer/)
|
t-order
easy
|
9/0 |
Mathlib/Order/WellFounded.lean |
1 |
4 |
['eric-wieser', 'github-actions'] |
nobody |
0-16473 4 hours ago |
0-63984 17 hours ago |
0-10221 2 hours |
28665 |
staroperator author:staroperator |
feat(Algebra/Group): add theorems about `Submonoid.pi` |
This PR adds theorems on `Submonoid.pi`, which are the same theorems on `Subgroup.pi`.
I'm also moving `Submonoid.pi` from Subgroup/Basic.lean to Submonoid/Operations.lean; the comment says *"defined here and not in Algebra.Group.Submonoid.Operations to have access to Algebra.Group.Pi"*, but Submonoid folder is much more suitable for this definition. (Let's see if there is a large import.)
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
89/41 |
Mathlib/Algebra/Group/Subgroup/Basic.lean,Mathlib/Algebra/Group/Submonoid/Operations.lean,Mathlib/Data/Set/Prod.lean |
3 |
3 |
['eric-wieser', 'github-actions', 'staroperator'] |
nobody |
0-15899 4 hours ago |
1-12406 1 day ago |
1-12454 1 day |
28658 |
hrmacbeth author:hrmacbeth |
feat(Tactic/FieldSimp): rewrite for performance and robustness |
This is a rewrite from scratch of the `field_simp` tactic. The former implementation was a lightweight wrapper around `simp` (with a custom simp-set and discharger).
Broadly speaking, the new implementation reduces expressions to an internal normal form `x1 ^ k1 * ... * xn ^ kn`, where `x1`, ... `xn` are atoms tracked by the `AtomM` monad and `k1`, ... `kn` are integers.
This is more robust: the tactic now solves goals which were not in scope for the simp-set version, often to the confusion of users. For example, `x ^ 2 / x` is now reduced to `x`, and `x / (x * y)` is now reduced, given `(hx : x ≠ 0)`, to `1 / y`.
We hope it will also be faster: let's see what the benchmarking suite says, but on a typical large example taken from Mathlib, the heartbeat count reduces from 19983 heartbeats to 2979 heartbeats.
There is a big diff: the old `field_simp` subsumed `simp`, and this was often exploited. We offer a simproc version of the new `field_simp`, and switching to a `simp` call with this simproc fixes about 80% of the cases that break; the rest are handled individually (typically by alternating `simp` and `field_simp` calls).
Developed at Big Proof at the Isaac Newton Institute.
Co-authored-by: Arend Mellendijk @FLDutchmann
Co-authored-by: Michael Rothgang @grunweg
---
[](https://gitpod.io/from-referrer/)
- [x] depends on: #27562
For ease of review, the PR is built from two commits: the [tactic implementation](https://github.com/leanprover-community/mathlib4/pull/28658/commits/50130021140244234296bd6b57500ff3eb1042fa) itself (+1318, -265), and the [fixes across the library](https://github.com/leanprover-community/mathlib4/pull/28658/commits/99d2aca362d3c1c4c66084c986cf2bd543c66848) (+511, -533).
A good way to get a sense of the changed implementation is to look at the diff in `MathlibTest.FieldSimp`. |
large-import
t-meta
|
1829/798 |
Archive/Imo/Imo2005Q3.lean,Archive/Imo/Imo2006Q3.lean,Archive/Imo/Imo2008Q2.lean,Archive/Imo/Imo2008Q4.lean,Archive/Imo/Imo2013Q1.lean,Archive/Imo/Imo2024Q1.lean,Archive/Wiedijk100Theorems/AreaOfACircle.lean,Archive/Wiedijk100Theorems/BallotProblem.lean,Archive/Wiedijk100Theorems/BuffonsNeedle.lean,Archive/Wiedijk100Theorems/HeronsFormula.lean,Archive/Wiedijk100Theorems/InverseTriangleSum.lean,Archive/Wiedijk100Theorems/SolutionOfCubicQuartic.lean,Archive/Wiedijk100Theorems/SumOfPrimeReciprocalsDiverges.lean,Mathlib.lean,Mathlib/Algebra/CharP/MixedCharZero.lean,Mathlib/Algebra/ContinuedFractions/Computation/CorrectnessTerminating.lean,Mathlib/Algebra/Order/Floor/Ring.lean,Mathlib/Algebra/Order/ToIntervalMod.lean,Mathlib/Algebra/Polynomial/HasseDeriv.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Formula.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean,Mathlib/AlgebraicGeometry/EllipticCurve/IsomOfJ.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Formula.lean,Mathlib/AlgebraicGeometry/EllipticCurve/NormalForms.lean,Mathlib/AlgebraicGeometry/EllipticCurve/Projective/Formula.lean,Mathlib/Analysis/Analytic/Basic.lean,Mathlib/Analysis/Analytic/Composition.lean,Mathlib/Analysis/Analytic/ConvergenceRadius.lean,Mathlib/Analysis/Analytic/IsolatedZeros.lean,Mathlib/Analysis/Asymptotics/AsymptoticEquivalent.lean,Mathlib/Analysis/BoxIntegral/Basic.lean,Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean,Mathlib/Analysis/CStarAlgebra/ApproximateUnit.lean,Mathlib/Analysis/Calculus/BumpFunction/FiniteDimension.lean,Mathlib/Analysis/Calculus/Deriv/Inv.lean,Mathlib/Analysis/Calculus/Deriv/Inverse.lean,Mathlib/Analysis/Calculus/Deriv/ZPow.lean,Mathlib/Analysis/Calculus/FDeriv/Measurable.lean,Mathlib/Analysis/Calculus/FDeriv/Symmetric.lean,Mathlib/Analysis/Calculus/InverseFunctionTheorem/ApproximatesLinearOn.lean,Mathlib/Analysis/Calculus/LogDeriv.lean,Mathlib/Analysis/Calculus/Monotone.lean,Mathlib/Analysis/Calculus/Rademacher.lean,Mathlib/Analysis/Calculus/TangentCone.lean,Mathlib/Analysis/Calculus/Taylor.lean,Mathlib/Analysis/Complex/Angle.lean,Mathlib/Analysis/Complex/Arg.lean,Mathlib/Analysis/Complex/CauchyIntegral.lean,Mathlib/Analysis/Complex/Conformal.lean,Mathlib/Analysis/Complex/LocallyUniformLimit.lean,Mathlib/Analysis/Complex/MeanValue.lean,Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean,Mathlib/Analysis/Complex/UpperHalfPlane/MoebiusAction.lean,Mathlib/Analysis/Convex/Between.lean,Mathlib/Analysis/Convex/Continuous.lean,Mathlib/Analysis/Convex/Jensen.lean,Mathlib/Analysis/Convex/Mul.lean,Mathlib/Analysis/Convex/Side.lean,Mathlib/Analysis/Convex/Slope.lean,Mathlib/Analysis/Fourier/AddCircle.lean,Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean,Mathlib/Analysis/FunctionalSpaces/SobolevInequality.lean,Mathlib/Analysis/Hofer.lean,Mathlib/Analysis/InnerProductSpace/Basic.lean,Mathlib/Analysis/InnerProductSpace/Defs.lean,Mathlib/Analysis/InnerProductSpace/Projection/Basic.lean,Mathlib/Analysis/InnerProductSpace/Rayleigh.lean,Mathlib/Analysis/MellinInversion.lean,Mathlib/Analysis/Meromorphic/Basic.lean,Mathlib/Analysis/Normed/Field/Basic.lean,Mathlib/Analysis/Normed/Field/Lemmas.lean,Mathlib/Analysis/Normed/Lp/lpSpace.lean,Mathlib/Analysis/NormedSpace/HomeomorphBall.lean,Mathlib/Analysis/NormedSpace/RCLike.lean,Mathlib/Analysis/NormedSpace/RieszLemma.lean,Mathlib/Analysis/PSeries.lean,Mathlib/Analysis/Polynomial/CauchyBound.lean,Mathlib/Analysis/RCLike/Basic.lean,Mathlib/Analysis/SpecialFunctions/Bernstein.lean,Mathlib/Analysis/SpecialFunctions/BinaryEntropy.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arctan.lean,Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean,Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean,Mathlib/Analysis/SpecialFunctions/Complex/LogBounds.lean,Mathlib/Analysis/SpecialFunctions/ContinuousFunctionalCalculus/Rpow/IntegralRepresentation.lean,Mathlib/Analysis/SpecialFunctions/Exp.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean,Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean,Mathlib/Analysis/SpecialFunctions/Gamma/Deligne.lean,Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean,Mathlib/Analysis/SpecialFunctions/Integrability/Basic.lean,Mathlib/Analysis/SpecialFunctions/Integrals/Basic.lean,Mathlib/Analysis/SpecialFunctions/Log/Base.lean,Mathlib/Analysis/SpecialFunctions/Log/Deriv.lean,Mathlib/Analysis/SpecialFunctions/Log/Summable.lean,Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean,Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean,Mathlib/Analysis/SpecialFunctions/Stirling.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Arctan.lean,Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean |
189 |
30 |
['github-actions', 'grunweg', 'hrmacbeth', 'j-loreaux', 'leanprover-bot', 'leanprover-community-mathlib4-bot', 'mathlib4-dependent-issues-bot', 'mathlib4-merge-conflict-bot', 'plp127'] |
nobody |
0-14184 3 hours ago |
0-57274 15 hours ago |
0-72310 20 hours |
28710 |
unknown author:unknown |
chore(Algebra): make MulEquivClass an alias of MulHomClass |
unknown description |
t-algebra label:t-algebra$ |
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-12286 3 hours ago |
unknown |
unknown |
26738 |
javra author:javra |
feat(AlgebraicToplogy/SimplexCategory): add notation for faces and degeneracies general truncated simplex categories |
---
[](https://gitpod.io/from-referrer/)
|
t-algebraic-topology
infinity-cosmos
|
43/32 |
Mathlib/AlgebraicTopology/SimplexCategory/Truncated.lean,Mathlib/AlgebraicTopology/SimplicialSet/HomotopyCat.lean |
2 |
4 |
['emilyriehl', 'github-actions', 'leanprover-community-bot-assistant'] |
nobody |
0-6516 1 hour ago |
19-52815 19 days ago |
33-43818 33 days |
26829 |
pechersky author:pechersky |
feat(RingTheory/Valuation): Valuation.leAddSubgroup and ideal/submodule versions of ltAddSubgroup |
Extracted from #25450 without changing how Valued works
---
[](https://gitpod.io/from-referrer/)
@faenuccio hopefully this bypasses any wait on #14752 because I am not changing Valued files. |
t-ring-theory |
172/0 |
Mathlib/RingTheory/Valuation/Basic.lean,Mathlib/RingTheory/Valuation/Integers.lean |
2 |
3 |
['JovanGerb', 'github-actions', 'mathlib4-merge-conflict-bot'] |
nobody |
0-6515 1 hour ago |
12-28838 12 days ago |
45-3358 45 days |
27244 |
xroblot author:xroblot |
feat(RingTheory/DedekindDomain): lifting an ideal in an extension is injective |
This PR develops some API for [FractionalIdeal.extended](https://leanprover-community.github.io/mathlib4_docs/Mathlib/RingTheory/FractionalIdeal/Extended.html#FractionalIdeal.extended) and in particular for when it is an injective map (for an algebra map). As a consequence, it deduces the fact that lifting an integral ideal in an extension of Dedekind domains is an injective map.
Note: the import increase happens in a leaf file `Mathlib.RingTheory.FractionalIdeal.Extended`
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
large-import
|
190/5 |
Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean,Mathlib/RingTheory/FractionalIdeal/Extended.lean,Mathlib/RingTheory/Localization/Basic.lean |
3 |
2 |
['github-actions', 'leanprover-community-bot-assistant'] |
nobody |
0-6514 1 hour ago |
16-32880 16 days ago |
33-58874 33 days |
27657 |
euprunin author:euprunin |
chore(Geometry/RingedSpace): remove use of `erw` in `forget_preservesLimitsOfLeft` |
|
t-algebraic-geometry |
5/2 |
Mathlib/Geometry/RingedSpace/OpenImmersion.lean |
1 |
1 |
['github-actions'] |
nobody |
0-6514 1 hour ago |
22-15084 22 days ago |
22-15131 22 days |
27992 |
staroperator author:staroperator |
feat(Algebra): cancellation inheritance |
This PR:
1. adds `Is{Left,Right}Cancel{Add,Mul,MulZero}` instances for `{Add,Mul,MulZero}MemClass` etc.
2. duplicates such instances for `Subsemiring` and `Subalgebra`, following #27955 (which is for `Submonoid` and `Submodule`).
---
[](https://gitpod.io/from-referrer/)
|
t-algebra label:t-algebra$ |
74/1 |
Mathlib.lean,Mathlib/Algebra/Algebra/Subalgebra/Basic.lean,Mathlib/Algebra/Group/Submonoid/Defs.lean,Mathlib/Algebra/Group/Subsemigroup/Defs.lean,Mathlib/Algebra/GroupWithZero/Submonoid/CancelMulZero.lean,Mathlib/Algebra/Module/Submodule/Defs.lean,Mathlib/Algebra/Ring/Subsemiring/Defs.lean |
7 |
7 |
['Vierkantor', 'eric-wieser', 'github-actions', 'mathlib4-merge-conflict-bot', 'staroperator'] |
nobody |
0-6513 1 hour ago |
9-15171 9 days ago |
15-25338 15 days |
28124 |
kckennylau author:kckennylau |
feat(Tactic): Call an arbitrary Simproc |
In the current framework, `Simproc`s are declared by name, and can only be referred to by name. For example, [Nat.divisors_ofNat](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Tactic/Simproc/Divisors.html#Nat.divisors_ofNat) is declared as:
```lean
dsimproc_decl Nat.divisors_ofNat (Nat.divisors _) := fun e => do
```
This declaration syntax does not allow for a `Simproc` to depend on any arguments, and even if one constructed a `Simproc` that depends on e.g. a natural number, such as `foo : ℕ → Simproc`, one still cannot call it using the syntax `by simp [foo 37]`.
Therefore, this new function aims to solve this problem, by allowing an arbitrary `Simproc` to be executed, using the newly defined function `Lean.Meta.Simp.Simproc.apply (s : Simproc) : TacticM Unit`.
---
[](https://gitpod.io/from-referrer/)
|
t-meta |
99/0 |
Mathlib.lean,Mathlib/Tactic.lean,Mathlib/Tactic/Simproc/Apply.lean,MathlibTest/Simproc/Apply.lean |
4 |
12 |
['b-mehta', 'eric-wieser', 'github-actions', 'hrmacbeth', 'kckennylau'] |
nobody |
0-6512 1 hour ago |
12-14389 12 days ago |
12-24589 12 days |
28248 |
YaelDillies author:YaelDillies |
feat: expectation and (conditional) variance of a Bernoulli random variable |
Compute the expectation, variance, conditional variance of a Bernoulli random variable.
From MiscYD
---
[](https://gitpod.io/from-referrer/)
|
t-measure-probability |
168/0 |
Mathlib.lean,Mathlib/MeasureTheory/Integral/Bochner/Set.lean,Mathlib/Probability/Bernoulli.lean,Mathlib/Probability/Moments/Variance.lean |
4 |
5 |
['YaelDillies', 'github-actions', 'themathqueen'] |
nobody |
0-6511 1 hour ago |
9-38325 9 days ago |
9-38379 9 days |
28329 |
pechersky author:pechersky |
feat(RingTheory/Valuation): generalize CommGroupWithZero on mrange to MonoidWithZeroHom |
Before, they were only for Valuation, but that is too restricted
---
[](https://gitpod.io/from-referrer/)
|
t-ring-theory
t-order
t-algebra
label:t-algebra$ |
21/4 |
Mathlib/RingTheory/Valuation/Archimedean.lean,Mathlib/RingTheory/Valuation/Basic.lean |
2 |
3 |
['eric-wieser', 'github-actions', 'pechersky'] |
nobody |
0-6510 1 hour ago |
7-75083 7 days ago |
7-75129 7 days |
28287 |
robin-carlier author:robin-carlier |
chore(CategoryTheory/Bicategory): move `map₂_eqToHom` earlier in the import graph |
The lemma `PrelaxFunctor.map₂_eqToHom` currently sits in the file `CategoryTheory/Bicategory/LocallyDiscrete`. This has low discoverability, and it is unavailable to other files that deals with `eqToHoms`, such as `CategoryTheory/Bicategory/Functor/Strict`.
We move the lemma in the file `Category/Bicategory/Functor/Prelax`. This comes at the cost of an extra import (`CategoryTheory.EqToHom`) in the file.
The lemma is unsimped for consistency with the corresponding lemma for ordinary categories, which is intentionally not a simp lemma.
We also sneak in the `eqToIso` version for completeness.
---
Feel free to disagree with the extra import. I think putting this lemma closer to the definition of prelax functors is what makes most sense.
An other possible home for this lemma is the file `CategoryTheory/Bicategory/EqToHom` that I introduce in #28242, but this would require that it imports prelax functors.
[](https://gitpod.io/from-referrer/)
|
large-import
t-category-theory
|
13/12 |
Mathlib/CategoryTheory/Bicategory/Functor/Prelax.lean,Mathlib/CategoryTheory/Bicategory/Grothendieck.lean,Mathlib/CategoryTheory/Bicategory/LocallyDiscrete.lean,Mathlib/CategoryTheory/FiberedCategory/Grothendieck.lean |
4 |
1 |
['github-actions'] |
nobody |
0-6510 1 hour ago |
8-53526 8 days ago |
8-54042 8 days |
28352 |
agjftucker author:agjftucker |
feat(Analysis): add three little theorems relating argument to image |
These relate argument to image under a continuous function, given a Prop that eventually holds on a product of filters in domain and codomain. In fact the second pair of statements concern a segment whose end-points are the image. They should prove useful in PRs 26300 and 26985.
---
[](https://gitpod.io/from-referrer/)
|
t-analysis |
28/3 |
Mathlib/Analysis/Normed/Module/Convex.lean,Mathlib/Order/Filter/Prod.lean |
2 |
1 |
['github-actions'] |
nobody |
0-6509 1 hour ago |
7-31212 7 days ago |
7-38403 7 days |
28709 |
unknown author:unknown |
add instance `CompleteSpace` for a subtype with `IsClosed` instance |
unknown description |
t-topology |
-1/-1 |
|
-1 |
n/a |
[] |
nobody |
0-2347 39 minutes ago |
unknown |
unknown |