Skip to content

Commit b8eddec

Browse files
kim-emclaude
andcommitted
Merge upstream/master into kim/to-dual-ccl-extended
Resolve merge conflicts with master's ConditionallyCompletePartialOrder refactoring (PR leanprover-community#35047). The @[to_dual] annotations added by this branch in CCL/Basic.lean, CCL/Indexed.lean, CCL/Finset.lean, and CCL/Group.lean are incompatible with the new CCL→CCPO bridging instance, so these files take master's versions. The @[to_dual] changes in CompleteLattice/Basic.lean and all other files are preserved. Conflicted files: - Mathlib/Order/CompleteLattice/Basic.lean: kept branch's @[to_dual] additions and InfSet section removal; removed duplicate iInf_of_isEmpty - Mathlib/Order/ConditionallyCompleteLattice/Basic.lean: took master's version (incompatible with @[to_dual] due to CCPO instance) - Mathlib/Order/ConditionallyCompleteLattice/Indexed.lean: took master's version (same reason) Also reverted to master for CCL/Finset.lean and CCL/Group.lean where branch's @[to_dual existing] registrations conflict with the CCPO instance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 parents 9fdbd11 + 3773dce commit b8eddec

File tree

361 files changed

+5657
-2433
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

361 files changed

+5657
-2433
lines changed

.github/workflows/actionlint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ jobs:
1616
uses: reviewdog/action-actionlint@e58ee9d111489c31395fbe4857b0be6e7635dbda # v1.70.0
1717
with:
1818
tool_name: actionlint
19-
fail_level: error
19+
fail_level: any

.github/workflows/build_template.yml

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -399,17 +399,12 @@ jobs:
399399
../tools-branch/scripts/lake-build-with-retry.sh Counterexamples
400400
# results of build at pr-branch/.lake/build_summary_Counterexamples.json
401401
402-
- name: prepare cache staging directory
403-
if: ${{ steps.build.outcome == 'success' }}
402+
- name: stage Mathlib cache files
403+
if: ${{ always() && (steps.build.outcome == 'success' || steps.build.outcome == 'failure' || steps.build.outcome == 'cancelled') }}
404404
shell: bash
405405
run: |
406406
rm -rf cache-staging
407407
mkdir -p cache-staging
408-
409-
- name: stage Mathlib cache files
410-
if: ${{ steps.build.outcome == 'success' }}
411-
shell: bash
412-
run: |
413408
cd pr-branch
414409
lake env ../tools-branch/.lake/build/bin/cache --staging-dir="../cache-staging" stage
415410
@@ -429,7 +424,7 @@ jobs:
429424
430425
- name: check cache staging contents
431426
id: cache_staging_check
432-
if: ${{ steps.build.outcome == 'success' }}
427+
if: ${{ always() && (steps.build.outcome == 'success' || steps.build.outcome == 'failure' || steps.build.outcome == 'cancelled') }}
433428
shell: bash
434429
run: |
435430
if find cache-staging -type f -name '*.ltar' -print -quit | grep -q .; then
@@ -439,7 +434,7 @@ jobs:
439434
fi
440435
441436
- name: upload cache staging artifact
442-
if: ${{ steps.cache_staging_check.outputs.has_files == 'true' }}
437+
if: ${{ always() && steps.cache_staging_check.outputs.has_files == 'true' }}
443438
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
444439
with:
445440
name: cache-staging
@@ -609,7 +604,7 @@ jobs:
609604
# We only upload the cache if the build started (whether succeeding, failing, or cancelled)
610605
# but not if any earlier step failed or was cancelled.
611606
# See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Some.20files.20not.20found.20in.20the.20cache/near/407183836
612-
if: ${{ always() && needs.build.outputs.build-outcome == 'success' && needs.build.outputs.get-cache-outcome == 'success' && needs.build.outputs.cache-staging-has-files == 'true' }}
607+
if: ${{ always() && needs.build.outputs.cache-staging-has-files == 'true' }}
613608
steps:
614609
- name: Checkout tools branch
615610
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -655,6 +650,7 @@ jobs:
655650
post_steps:
656651
name: Post-Build Step
657652
needs: [build, upload_cache]
653+
if: ${{ always() && needs.build.result == 'success' && (needs.upload_cache.result == 'success' || needs.upload_cache.result == 'skipped') }}
658654
runs-on: ubuntu-latest # Note these steps run on disposable GitHub runners, so no landrun sandboxing is needed.
659655
steps:
660656

@@ -744,7 +740,8 @@ jobs:
744740

745741
final:
746742
name: Post-CI job
747-
if: ${{ inputs.run_post_ci }}
743+
# ensure that this runs iff direct dependencies succeeded even if transitive dependencies were skipped
744+
if: ${{ always() && inputs.run_post_ci && needs.style_lint.result == 'success' && needs.build.result == 'success' && needs.post_steps.result == 'success' }}
748745
needs: [style_lint, build, post_steps]
749746
runs-on: ubuntu-latest
750747
steps:

Archive/Wiedijk100Theorems/Konigsberg.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ def graph : SimpleGraph Verts where
5252
symm := by
5353
dsimp [Symmetric, adj]
5454
decide
55-
loopless := by
56-
dsimp [Irreflexive, adj]
57-
decide
55+
loopless := ⟨by decide⟩
5856

5957
instance : DecidableRel graph.Adj := fun a b => inferInstanceAs <| Decidable (adj a b)
6058

Cache/IO.lean

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,13 +390,78 @@ def getLocalCacheSet : IO <| Std.TreeSet String compare := do
390390
def isFromMathlib (mod : Name) : Bool :=
391391
mod.getRoot == `Mathlib
392392

393+
/-- Get the trace file path for a module. -/
394+
def getTracePath (mod : Name) : CacheM FilePath := do
395+
let sp := (← read).srcSearchPath
396+
let packageDir ← getSrcDir sp mod
397+
let path := (System.mkFilePath <| mod.components.map toString)
398+
return packageDir / LIBDIR / path.withExtension "trace"
399+
400+
/-- Read the `depHash` from a trace file, if it exists and is valid.
401+
Returns the hash as a UInt64. -/
402+
def readTraceHash (tracePath : FilePath) : IO (Option UInt64) := do
403+
let contents ← try IO.FS.readFile tracePath
404+
catch _ => return none
405+
-- Try to parse as JSON and extract depHash
406+
let some json := Lean.Json.parse contents |>.toOption | return none
407+
let some depHashStr := json.getObjValAs? String "depHash" |>.toOption | return none
408+
-- Parse hex string to UInt64
409+
return depHashStr.parseHexToUInt64?
410+
411+
/-- Read the Lake depHash from an ltar file header.
412+
The ltar format is: 4-byte magic (LTAR/LTR2/LTR3) + 8-byte little-endian u64 hash. -/
413+
def readLtarHash (ltarPath : FilePath) : IO (Option UInt64) := do
414+
let some handle ← try
415+
some <$> IO.FS.Handle.mk ltarPath .read
416+
catch _ => pure none | return none
417+
-- Read 12 bytes: 4 magic + 8 hash
418+
let bytes ← handle.read 12
419+
if bytes.size < 12 then return none
420+
-- Verify magic (LTAR, LTR2, or LTR3)
421+
let magic := String.fromUTF8! (bytes.extract 0 4)
422+
if magic != "LTAR" && magic != "LTR2" && magic != "LTR3" then return none
423+
-- Read little-endian u64 hash
424+
let mut hash : UInt64 := 0
425+
for i in [0:8] do
426+
hash := hash ||| ((bytes.get! (4 + i)).toUInt64 <<< (i * 8).toUInt64)
427+
return some hash
428+
429+
/-- Check if a module's trace file indicates it is already decompressed with the correct hash.
430+
The hash to compare comes from the ltar file header, not the mathlib cache hash.
431+
Returns `true` if the module needs decompression, `false` if it can be skipped. -/
432+
def needsDecompression (mod : Name) (mathlibHash : UInt64) : CacheM Bool := do
433+
-- Read the Lake depHash from the ltar file header
434+
let ltarPath := CACHEDIR / mathlibHash.asLTar
435+
let some ltarHash ← readLtarHash ltarPath | return true
436+
-- Read the trace file hash
437+
let tracePath ← getTracePath mod
438+
let some traceHash ← readTraceHash tracePath | return true
439+
-- They should match if the file is already decompressed
440+
return ltarHash != traceHash
441+
442+
/-- Filter the hashmap to only include modules that need decompression.
443+
A module needs decompression if its trace file doesn't exist or has a different hash. -/
444+
def ModuleHashMap.filterNeedsDecompression (hashMap : ModuleHashMap) : CacheM ModuleHashMap :=
445+
hashMap.foldM (init := ∅) fun acc mod hash => do
446+
if ← needsDecompression mod hash then
447+
return acc.insert mod hash
448+
else
449+
return acc
450+
393451
/-- Decompresses build files into their respective folders -/
394452
def unpackCache (hashMap : ModuleHashMap) (force : Bool) : CacheM Unit := do
395453
let hashMap ← hashMap.filterExists true
454+
let totalCached := hashMap.size
455+
-- Unless force is set, filter to only modules that actually need decompression
456+
let hashMap ← if force then pure hashMap else hashMap.filterNeedsDecompression
396457
let size := hashMap.size
458+
let skipped := totalCached - size
397459
if size > 0 then
398460
let now ← IO.monoMsNow
399-
IO.println s!"Decompressing {size} file(s)"
461+
if skipped > 0 then
462+
IO.println s!"Decompressing {size} file(s) ({skipped} already decompressed)"
463+
else
464+
IO.println s!"Decompressing {size} file(s)"
400465
let args := (if force then #["-f"] else #[]) ++ #["-x", "--delete-corrupted", "-j", "-"]
401466
let child ← IO.Process.spawn { cmd := ← getLeanTar, args, stdin := .piped }
402467
let (stdin, child) ← child.takeStdin
@@ -427,9 +492,12 @@ def unpackCache (hashMap : ModuleHashMap) (force : Bool) : CacheM Unit := do
427492
stdin.putStr <| Lean.Json.compress <| .arr config
428493
let exitCode ← child.wait
429494
if exitCode != 0 then throw <| IO.userError s!"leantar failed with error code {exitCode}"
430-
IO.println s!"Unpacked in {(← IO.monoMsNow) - now} ms"
495+
IO.println s!"Decompressed in {(← IO.monoMsNow) - now} ms"
431496
IO.println "Completed successfully!"
432-
else IO.println "No cache files to decompress"
497+
else if totalCached > 0 then
498+
IO.println s!"Already decompressed {totalCached} file(s)"
499+
else
500+
IO.println "No cache files to decompress"
433501

434502
instance : Ord FilePath where
435503
compare x y := compare x.toString y.toString

Cache/Lean.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,22 @@ def Nat.toHexDigits (n : Nat) : Nat → (res : String := "") → String
2828
def UInt64.asLTar (n : UInt64) : String :=
2929
s!"{Nat.toHexDigits n.toNat 8}.ltar"
3030

31+
/-- Parse a single hex digit character to its numeric value. -/
32+
def Char.hexDigitToNat? (c : Char) : Option Nat :=
33+
if '0' ≤ c ∧ c ≤ '9' then some (c.toNat - '0'.toNat)
34+
else if 'a' ≤ c ∧ c ≤ 'f' then some (c.toNat - 'a'.toNat + 10)
35+
else if 'A' ≤ c ∧ c ≤ 'F' then some (c.toNat - 'A'.toNat + 10)
36+
else none
37+
38+
/-- Parse a 16-character hex string (like "4bd6700ff435e8d0") to a UInt64. -/
39+
def String.parseHexToUInt64? (s : String) : Option UInt64 := do
40+
if s.length != 16 then failure
41+
let mut result : UInt64 := 0
42+
for c in s.toList do
43+
let digit ← c.hexDigitToNat?
44+
result := (result <<< 4) ||| digit.toUInt64
45+
return result
46+
3147
-- copied from Mathlib
3248
/-- Create a `Name` from a list of components. -/
3349
def Lean.Name.fromComponents : List Name → Name := go .anonymous where

Mathlib.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,8 +1297,12 @@ public import Mathlib.AlgebraicGeometry.Fiber
12971297
public import Mathlib.AlgebraicGeometry.FunctionField
12981298
public import Mathlib.AlgebraicGeometry.GammaSpecAdjunction
12991299
public import Mathlib.AlgebraicGeometry.Geometrically.Basic
1300+
public import Mathlib.AlgebraicGeometry.Geometrically.Integral
1301+
public import Mathlib.AlgebraicGeometry.Geometrically.Irreducible
1302+
public import Mathlib.AlgebraicGeometry.Geometrically.Reduced
13001303
public import Mathlib.AlgebraicGeometry.Gluing
13011304
public import Mathlib.AlgebraicGeometry.GluingOneHypercover
1305+
public import Mathlib.AlgebraicGeometry.Group.Abelian
13021306
public import Mathlib.AlgebraicGeometry.Group.Smooth
13031307
public import Mathlib.AlgebraicGeometry.IdealSheaf.Basic
13041308
public import Mathlib.AlgebraicGeometry.IdealSheaf.Functorial
@@ -1334,6 +1338,7 @@ public import Mathlib.AlgebraicGeometry.Morphisms.QuasiCompact
13341338
public import Mathlib.AlgebraicGeometry.Morphisms.QuasiFinite
13351339
public import Mathlib.AlgebraicGeometry.Morphisms.QuasiSeparated
13361340
public import Mathlib.AlgebraicGeometry.Morphisms.RingHomProperties
1341+
public import Mathlib.AlgebraicGeometry.Morphisms.SchemeTheoreticallyDominant
13371342
public import Mathlib.AlgebraicGeometry.Morphisms.Separated
13381343
public import Mathlib.AlgebraicGeometry.Morphisms.Smooth
13391344
public import Mathlib.AlgebraicGeometry.Morphisms.SurjectiveOnStalks
@@ -1512,6 +1517,7 @@ public import Mathlib.Analysis.Analytic.RadiusLiminf
15121517
public import Mathlib.Analysis.Analytic.Uniqueness
15131518
public import Mathlib.Analysis.Analytic.WithLp
15141519
public import Mathlib.Analysis.Analytic.Within
1520+
public import Mathlib.Analysis.AperiodicOrder.Delone.Basic
15151521
public import Mathlib.Analysis.Asymptotics.AsymptoticEquivalent
15161522
public import Mathlib.Analysis.Asymptotics.Completion
15171523
public import Mathlib.Analysis.Asymptotics.Defs
@@ -1757,6 +1763,7 @@ public import Mathlib.Analysis.Complex.ValueDistribution.LogCounting.Basic
17571763
public import Mathlib.Analysis.Complex.ValueDistribution.Proximity.Basic
17581764
public import Mathlib.Analysis.ConstantSpeed
17591765
public import Mathlib.Analysis.Convex.AmpleSet
1766+
public import Mathlib.Analysis.Convex.Approximation
17601767
public import Mathlib.Analysis.Convex.Basic
17611768
public import Mathlib.Analysis.Convex.Between
17621769
public import Mathlib.Analysis.Convex.BetweenList
@@ -2647,6 +2654,7 @@ public import Mathlib.CategoryTheory.Limits.FinallySmall
26472654
public import Mathlib.CategoryTheory.Limits.FintypeCat
26482655
public import Mathlib.CategoryTheory.Limits.FormalCoproducts
26492656
public import Mathlib.CategoryTheory.Limits.FormalCoproducts.Basic
2657+
public import Mathlib.CategoryTheory.Limits.FormalCoproducts.Cech
26502658
public import Mathlib.CategoryTheory.Limits.Fubini
26512659
public import Mathlib.CategoryTheory.Limits.FullSubcategory
26522660
public import Mathlib.CategoryTheory.Limits.FunctorCategory.Basic
@@ -2657,6 +2665,7 @@ public import Mathlib.CategoryTheory.Limits.FunctorCategory.Shapes.Images
26572665
public import Mathlib.CategoryTheory.Limits.FunctorCategory.Shapes.Kernels
26582666
public import Mathlib.CategoryTheory.Limits.FunctorCategory.Shapes.Products
26592667
public import Mathlib.CategoryTheory.Limits.FunctorCategory.Shapes.Pullbacks
2668+
public import Mathlib.CategoryTheory.Limits.FunctorCategory.Shapes.Terminal
26602669
public import Mathlib.CategoryTheory.Limits.FunctorToTypes
26612670
public import Mathlib.CategoryTheory.Limits.HasLimits
26622671
public import Mathlib.CategoryTheory.Limits.IndYoneda
@@ -3160,6 +3169,7 @@ public import Mathlib.CategoryTheory.Sites.Pullback
31603169
public import Mathlib.CategoryTheory.Sites.RegularEpi
31613170
public import Mathlib.CategoryTheory.Sites.Sheaf
31623171
public import Mathlib.CategoryTheory.Sites.SheafCohomology.Basic
3172+
public import Mathlib.CategoryTheory.Sites.SheafCohomology.Cech
31633173
public import Mathlib.CategoryTheory.Sites.SheafCohomology.MayerVietoris
31643174
public import Mathlib.CategoryTheory.Sites.SheafHom
31653175
public import Mathlib.CategoryTheory.Sites.SheafOfTypes
@@ -4267,6 +4277,7 @@ public import Mathlib.FieldTheory.Tower
42674277
public import Mathlib.Geometry.Convex.Cone.Basic
42684278
public import Mathlib.Geometry.Convex.Cone.Dual
42694279
public import Mathlib.Geometry.Convex.Cone.Pointed
4280+
public import Mathlib.Geometry.Convex.Cone.Simplicial
42704281
public import Mathlib.Geometry.Convex.Cone.TensorProduct
42714282
public import Mathlib.Geometry.Diffeology.Basic
42724283
public import Mathlib.Geometry.Euclidean.Altitude
@@ -4688,6 +4699,7 @@ public import Mathlib.LinearAlgebra.ExteriorAlgebra.Basic
46884699
public import Mathlib.LinearAlgebra.ExteriorAlgebra.Grading
46894700
public import Mathlib.LinearAlgebra.ExteriorAlgebra.OfAlternating
46904701
public import Mathlib.LinearAlgebra.ExteriorPower.Basic
4702+
public import Mathlib.LinearAlgebra.ExteriorPower.Basis
46914703
public import Mathlib.LinearAlgebra.ExteriorPower.Pairing
46924704
public import Mathlib.LinearAlgebra.FiniteDimensional.Basic
46934705
public import Mathlib.LinearAlgebra.FiniteDimensional.Defs
@@ -5582,7 +5594,9 @@ public import Mathlib.Order.ConditionallyCompleteLattice.Defs
55825594
public import Mathlib.Order.ConditionallyCompleteLattice.Finset
55835595
public import Mathlib.Order.ConditionallyCompleteLattice.Group
55845596
public import Mathlib.Order.ConditionallyCompleteLattice.Indexed
5597+
public import Mathlib.Order.ConditionallyCompletePartialOrder.Basic
55855598
public import Mathlib.Order.ConditionallyCompletePartialOrder.Defs
5599+
public import Mathlib.Order.ConditionallyCompletePartialOrder.Indexed
55865600
public import Mathlib.Order.Copy
55875601
public import Mathlib.Order.CountableDenseLinearOrder
55885602
public import Mathlib.Order.Cover
@@ -5820,6 +5834,7 @@ public import Mathlib.Probability.Decision.Risk.Basic
58205834
public import Mathlib.Probability.Decision.Risk.Defs
58215835
public import Mathlib.Probability.Density
58225836
public import Mathlib.Probability.Distributions.Beta
5837+
public import Mathlib.Probability.Distributions.Cauchy
58235838
public import Mathlib.Probability.Distributions.Exponential
58245839
public import Mathlib.Probability.Distributions.Fernique
58255840
public import Mathlib.Probability.Distributions.Gamma

Mathlib/Algebra/Algebra/Defs.lean

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -404,14 +404,6 @@ lemma algebraMap_self_apply (x : R) : algebraMap R R x = x := rfl
404404

405405
namespace id
406406

407-
@[deprecated algebraMap_self (since := "2025-07-17")]
408-
theorem map_eq_id : algebraMap R R = RingHom.id _ :=
409-
rfl
410-
411-
@[deprecated algebraMap_self_apply (since := "2025-07-17")]
412-
theorem map_eq_self (x : R) : algebraMap R R x = x :=
413-
rfl
414-
415407
@[deprecated _root_.smul_eq_mul (since := "2025-12-02")]
416408
theorem smul_eq_mul (x y : R) : x • y = x * y :=
417409
rfl

Mathlib/Algebra/Category/Grp/Limits.lean

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ instance hasLimitsOfShape [Small.{u} J] : HasLimitsOfShape J GrpCat.{u} where
147147
has_limit _ := inferInstance
148148

149149
/-- The category of groups has all limits. -/
150-
@[to_additive (relevant_arg := _) /-- The category of additive groups has all limits. -/]
150+
@[to_additive /-- The category of additive groups has all limits. -/]
151151
instance hasLimitsOfSize [UnivLE.{v, u}] : HasLimitsOfSize.{w, v} GrpCat.{u} where
152152
has_limits_of_shape J _ := { }
153153

@@ -159,7 +159,7 @@ instance hasLimits : HasLimits GrpCat.{u} :=
159159
160160
This means the underlying monoid of a limit can be computed as a limit in the category of monoids.
161161
-/
162-
@[to_additive (relevant_arg := _) AddGrpCat.forget₂AddMonPreservesLimitsOfSize
162+
@[to_additive AddGrpCat.forget₂AddMonPreservesLimitsOfSize
163163
/-- The forgetful functor from additive groups to additive monoids preserves all limits.
164164
165165
This means the underlying additive monoid of a limit can be computed as a limit in the category of
@@ -183,7 +183,7 @@ instance forget_preservesLimitsOfShape [Small.{u} J] :
183183
/-- The forgetful functor from groups to types preserves all limits.
184184
185185
This means the underlying type of a limit can be computed as a limit in the category of types. -/
186-
@[to_additive (relevant_arg := _)
186+
@[to_additive
187187
/-- The forgetful functor from additive groups to types preserves all limits.
188188
189189
This means the underlying type of a limit can be computed as a limit in the category of types. -/]
@@ -207,7 +207,7 @@ noncomputable instance forget_createsLimitsOfShape :
207207

208208
/-- The forgetful functor from groups to types creates all limits.
209209
-/
210-
@[to_additive (relevant_arg := _)
210+
@[to_additive
211211
/-- The forgetful functor from additive groups to types creates all limits. -/]
212212
noncomputable instance forget_createsLimitsOfSize :
213213
CreatesLimitsOfSize.{w, v} (forget GrpCat.{u}) where
@@ -315,7 +315,7 @@ instance hasLimitsOfShape [Small.{u} J] : HasLimitsOfShape J CommGrpCat.{u} wher
315315
has_limit _ := inferInstance
316316

317317
/-- The category of commutative groups has all limits. -/
318-
@[to_additive (relevant_arg := _)
318+
@[to_additive
319319
/-- The category of additive commutative groups has all limits. -/]
320320
instance hasLimitsOfSize [UnivLE.{v, u}] : HasLimitsOfSize.{w, v} CommGrpCat.{u} where
321321
has_limits_of_shape _ _ := { }
@@ -343,7 +343,7 @@ instance forget₂Group_preservesLimitsOfShape :
343343
(That is, the underlying group could have been computed instead as limits in the category
344344
of groups.)
345345
-/
346-
@[to_additive (relevant_arg := _)
346+
@[to_additive
347347
/-- The forgetful functor from additive commutative groups to additive groups preserves all
348348
limits. (That is, the underlying group could have been computed instead as limits in the
349349
category of additive groups.) -/]
@@ -427,7 +427,7 @@ noncomputable instance forget_createsLimitsOfShape (J : Type v) [Category.{w} J]
427427

428428
/-- The forgetful functor from commutative groups to types creates all limits.
429429
-/
430-
@[to_additive (relevant_arg := _)
430+
@[to_additive
431431
/-- The forgetful functor from additive commutative groups to types creates all limits. -/]
432432
noncomputable instance forget_createsLimitsOfSize :
433433
CreatesLimitsOfSize.{w, v} (forget CommGrpCat.{u}) where

0 commit comments

Comments
 (0)