Skip to content

Commit dde4d75

Browse files
author
mathlib4-bot
committed
Merge remote-tracking branch 'upstream/master' into bump/v4.31.0
2 parents df50f6d + 3325a31 commit dde4d75

26 files changed

Lines changed: 253 additions & 144 deletions

File tree

Mathlib/Algebra/Group/Subgroup/Defs.lean

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,12 @@ theorem toSubmonoid_mono : Monotone (toSubmonoid : Subgroup G → Submonoid G) :
396396
theorem toSubmonoid_le {p q : Subgroup G} : p.toSubmonoid ≤ q.toSubmonoid ↔ p ≤ q :=
397397
Iff.rfl
398398

399-
@[to_additive (attr := simp)]
399+
@[to_additive]
400400
lemma coe_nonempty (s : Subgroup G) : (s : Set G).Nonempty := ⟨1, one_mem _⟩
401401

402+
attribute [deprecated OneMemClass.coe_nonempty (since := "2026-04-20")] Subgroup.coe_nonempty
403+
attribute [deprecated ZeroMemClass.coe_nonempty (since := "2026-04-20")] AddSubgroup.coe_nonempty
404+
402405
end Subgroup
403406

404407
namespace Subgroup

Mathlib/Algebra/Group/Submonoid/Defs.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ attribute [to_additive] OneMemClass
7676

7777
attribute [simp, aesop safe (rule_sets := [SetLike])] one_mem zero_mem
7878

79+
/-- The underlying set of a term of a `OneMemClass` is nonempty. -/
80+
@[to_additive (attr := simp)
81+
/-- The underlying set of a term of a `ZeroMemClass` is nonempty. -/]
82+
theorem OneMemClass.coe_nonempty {S M : Type*} [One M] [SetLike S M] [OneMemClass S M] (s : S) :
83+
(s : Set M).Nonempty :=
84+
1, one_mem s⟩
85+
7986
section
8087

8188
/-- A submonoid of a monoid `M` is a subset containing 1 and closed under multiplication. -/

Mathlib/Algebra/MvPolynomial/Equiv.lean

Lines changed: 88 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
/-
22
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
4-
Authors: Johannes Hölzl, Johan Commelin, Mario Carneiro
4+
Authors: Johannes Hölzl, Johan Commelin, Mario Carneiro, Elias Judin
55
-/
66
module
77

88
public import Mathlib.Algebra.BigOperators.Finsupp.Fin
9+
public import Mathlib.Algebra.MonoidAlgebra.Basic
910
public import Mathlib.Algebra.MvPolynomial.Degrees
1011
public import Mathlib.Algebra.MvPolynomial.Rename
1112
public import Mathlib.Algebra.Polynomial.AlgebraMap
12-
public import Mathlib.Algebra.MonoidAlgebra.Basic
1313
public import Mathlib.Algebra.Polynomial.Degree.Lemmas
1414
public import Mathlib.Data.Finsupp.Option
1515
public import Mathlib.Logic.Equiv.Fin.Basic
@@ -62,24 +62,24 @@ section Equiv
6262

6363
variable (R) [CommSemiring R]
6464

65-
/-- The ring isomorphism between multivariable polynomials in a single variable and
66-
polynomials over the ground ring.
67-
-/
65+
/-- The algebra isomorphism between multivariable polynomials indexed by a type with a unique
66+
element and polynomials over the ground ring. -/
6867
@[simps]
69-
def pUnitAlgEquiv : MvPolynomial PUnit R ≃ₐ[R] R[X] where
68+
def uniqueAlgEquiv (σ : Type*) [Unique σ] : MvPolynomial σ R ≃ₐ[R] R[X] where
7069
toFun := eval₂ Polynomial.C fun _ => Polynomial.X
71-
invFun := Polynomial.eval₂ MvPolynomial.C (X PUnit.unit)
70+
invFun := Polynomial.eval₂ MvPolynomial.C (X default)
7271
left_inv := by
73-
let f : R[X] →+* MvPolynomial PUnit R := Polynomial.eval₂RingHom MvPolynomial.C (X PUnit.unit)
74-
let g : MvPolynomial PUnit R →+* R[X] := eval₂Hom Polynomial.C fun _ => Polynomial.X
72+
let f : R[X] →+* MvPolynomial σ R := Polynomial.eval₂RingHom MvPolynomial.C (X default)
73+
let g : MvPolynomial σ R →+* R[X] := eval₂Hom Polynomial.C fun _ => Polynomial.X
7574
change ∀ p, f.comp g p = p
7675
apply is_id
7776
· ext a
7877
dsimp [f, g]
7978
rw [eval₂_C, Polynomial.eval₂_C]
80-
· rintro ⟨⟩
79+
· intro i
8180
dsimp [f, g]
8281
rw [eval₂_X, Polynomial.eval₂_X]
82+
rw [← Unique.eq_default i]
8383
right_inv p :=
8484
Polynomial.induction_on p (fun a => by rw [Polynomial.eval₂_C, MvPolynomial.eval₂_C])
8585
(fun p q hp hq => by rw [Polynomial.eval₂_add, MvPolynomial.eval₂_add, hp, hq]) fun p n _ => by
@@ -89,15 +89,34 @@ def pUnitAlgEquiv : MvPolynomial PUnit R ≃ₐ[R] R[X] where
8989
map_add' _ _ := eval₂_add _ _
9090
commutes' _ := eval₂_C _ _ _
9191

92+
theorem uniqueAlgEquiv_monomial [Unique σ] {d : σ →₀ ℕ} {r : R} :
93+
(MvPolynomial.uniqueAlgEquiv R σ) (MvPolynomial.monomial d r)
94+
= Polynomial.monomial (d default) r := by
95+
simp [Polynomial.C_mul_X_pow_eq_monomial]
96+
97+
theorem uniqueAlgEquiv_symm_monomial [Unique σ] {d : σ →₀ ℕ} {r : R} :
98+
(MvPolynomial.uniqueAlgEquiv R σ).symm (Polynomial.monomial (d default) r)
99+
= MvPolynomial.monomial d r := by
100+
simp [MvPolynomial.monomial_eq]
101+
102+
/-- The algebra isomorphism between multivariable polynomials in a single variable and
103+
polynomials over the ground ring. -/
104+
@[deprecated uniqueAlgEquiv (since := "2026-04-15")]
105+
abbrev pUnitAlgEquiv := uniqueAlgEquiv (R := R) PUnit
106+
107+
set_option linter.deprecated false in
108+
@[deprecated uniqueAlgEquiv_monomial (since := "2026-04-15")]
92109
theorem pUnitAlgEquiv_monomial {d : PUnit →₀ ℕ} {r : R} :
93110
MvPolynomial.pUnitAlgEquiv R (MvPolynomial.monomial d r)
94-
= Polynomial.monomial (d ()) r := by
95-
simp [Polynomial.C_mul_X_pow_eq_monomial]
111+
= Polynomial.monomial (d ()) r :=
112+
uniqueAlgEquiv_monomial _
96113

114+
set_option linter.deprecated false in
115+
@[deprecated uniqueAlgEquiv_symm_monomial (since := "2026-04-15")]
97116
theorem pUnitAlgEquiv_symm_monomial {d : PUnit →₀ ℕ} {r : R} :
98117
(MvPolynomial.pUnitAlgEquiv R).symm (Polynomial.monomial (d ()) r)
99-
= MvPolynomial.monomial d r := by
100-
simp [MvPolynomial.monomial_eq]
118+
= MvPolynomial.monomial d r :=
119+
uniqueAlgEquiv_symm_monomial _
101120

102121
section Map
103122

@@ -109,7 +128,8 @@ def mapEquiv [CommSemiring S₁] [CommSemiring S₂] (e : S₁ ≃+* S₂) :
109128
AddMonoidAlgebra.mapRingEquiv _ e
110129

111130
@[simp]
112-
lemma mapEquiv_apply [CommSemiring S₁] [CommSemiring S₂] (e : S₁ ≃+* S₂) (x : MvPolynomial σ S₁) :
131+
lemma mapEquiv_apply [CommSemiring S₁] [CommSemiring S₂] (e : S₁ ≃+* S₂)
132+
(x : MvPolynomial σ S₁) :
113133
mapEquiv σ e x = map e x := rfl
114134

115135
@[simp]
@@ -134,7 +154,8 @@ def mapAlgEquiv (e : A₁ ≃ₐ[R] A₂) : MvPolynomial σ A₁ ≃ₐ[R] MvPol
134154
AddMonoidAlgebra.mapAlgEquiv _ _ e
135155

136156
@[simp]
137-
lemma mapAlgEquiv_apply (e : A₁ ≃ₐ[R] A₂) (x : MvPolynomial σ A₁) : mapAlgEquiv σ e x = map e x :=
157+
lemma mapAlgEquiv_apply (e : A₁ ≃ₐ[R] A₂) (x : MvPolynomial σ A₁) :
158+
mapAlgEquiv σ e x = map e x :=
138159
rfl
139160

140161
@[simp]
@@ -156,29 +177,65 @@ section Eval
156177

157178
variable {R S : Type*} [CommSemiring R] [CommSemiring S]
158179

180+
theorem eval₂_uniqueAlgEquiv [Unique σ] {f : MvPolynomial σ R} {φ : R →+* S}
181+
{a : σ → S} :
182+
((MvPolynomial.uniqueAlgEquiv R σ) f : Polynomial R).eval₂ φ (a default) =
183+
f.eval₂ φ a := by
184+
simp only [MvPolynomial.uniqueAlgEquiv_apply]
185+
induction f using MvPolynomial.induction_on' with
186+
| monomial d r =>
187+
rw [← MvPolynomial.uniqueAlgEquiv_apply (R := R) (σ := σ), uniqueAlgEquiv_monomial]
188+
simp only [Polynomial.eval₂_monomial, eval₂_monomial]
189+
rw [Finsupp.unique_single d, Finsupp.prod_single_index]
190+
· simp
191+
· simp only [pow_zero]
192+
| add f g hf hg => simp only [eval₂_add, Polynomial.eval₂_add, hf, hg]
193+
194+
theorem eval₂_uniqueAlgEquiv_symm [Unique σ] {f : Polynomial R} {φ : R →+* S}
195+
{a : σ → S} :
196+
((MvPolynomial.uniqueAlgEquiv R σ).symm f : MvPolynomial σ R).eval₂ φ a =
197+
f.eval₂ φ (a default) := by
198+
rw [(eval₂_uniqueAlgEquiv (R := R) (σ := σ) (f := (MvPolynomial.uniqueAlgEquiv R σ).symm f)
199+
(φ := φ) (a := a)).symm]
200+
rw [AlgEquiv.apply_symm_apply]
201+
202+
theorem eval₂_const_uniqueAlgEquiv_symm [Unique σ] {f : Polynomial R}
203+
{φ : R →+* S} {a : S} :
204+
((MvPolynomial.uniqueAlgEquiv R σ).symm f : MvPolynomial σ R).eval₂ φ (fun _ ↦ a) =
205+
f.eval₂ φ a := by
206+
rw [eval₂_uniqueAlgEquiv_symm]
207+
208+
theorem eval₂_const_uniqueAlgEquiv [Unique σ] {f : MvPolynomial σ R}
209+
{φ : R →+* S} {a : S} :
210+
((MvPolynomial.uniqueAlgEquiv R σ) f : Polynomial R).eval₂ φ a =
211+
f.eval₂ φ (fun _ ↦ a) := by
212+
rw [← eval₂_uniqueAlgEquiv]
213+
214+
set_option linter.deprecated false in
215+
@[deprecated eval₂_uniqueAlgEquiv_symm (since := "2026-04-15")]
159216
theorem eval₂_pUnitAlgEquiv_symm {f : Polynomial R} {φ : R →+* S} {a : Unit → S} :
160217
((MvPolynomial.pUnitAlgEquiv R).symm f : MvPolynomial Unit R).eval₂ φ a =
161-
f.eval₂ φ (a ()) := by
162-
simp only [MvPolynomial.pUnitAlgEquiv_symm_apply]
163-
induction f using Polynomial.induction_on' with
164-
| add f g hf hg => simp [hf, hg]
165-
| monomial n r => simp
218+
f.eval₂ φ (a ()) :=
219+
eval₂_uniqueAlgEquiv_symm
166220

221+
set_option linter.deprecated false in
222+
@[deprecated eval₂_const_uniqueAlgEquiv_symm (since := "2026-04-15")]
167223
theorem eval₂_const_pUnitAlgEquiv_symm {f : Polynomial R} {φ : R →+* S} {a : S} :
168224
((MvPolynomial.pUnitAlgEquiv R).symm f : MvPolynomial Unit R).eval₂ φ (fun _ ↦ a) =
169-
f.eval₂ φ a := by
170-
rw [eval₂_pUnitAlgEquiv_symm]
225+
f.eval₂ φ a :=
226+
eval₂_const_uniqueAlgEquiv_symm
171227

228+
set_option linter.deprecated false in
229+
@[deprecated eval₂_uniqueAlgEquiv (since := "2026-04-15")]
172230
theorem eval₂_pUnitAlgEquiv {f : MvPolynomial PUnit R} {φ : R →+* S} {a : PUnit → S} :
173-
((MvPolynomial.pUnitAlgEquiv R) f : Polynomial R).eval₂ φ (a default) = f.eval₂ φ a := by
174-
simp only [MvPolynomial.pUnitAlgEquiv_apply]
175-
induction f using MvPolynomial.induction_on' with
176-
| monomial d r => simp
177-
| add f g hf hg => simp [hf, hg]
231+
((MvPolynomial.pUnitAlgEquiv R) f : Polynomial R).eval₂ φ (a default) = f.eval₂ φ a :=
232+
eval₂_uniqueAlgEquiv
178233

234+
set_option linter.deprecated false in
235+
@[deprecated eval₂_const_uniqueAlgEquiv (since := "2026-04-15")]
179236
theorem eval₂_const_pUnitAlgEquiv {f : MvPolynomial PUnit R} {φ : R →+* S} {a : S} :
180-
((MvPolynomial.pUnitAlgEquiv R) f : Polynomial R).eval₂ φ a = f.eval₂ φ (fun _ ↦ a) := by
181-
rw [← eval₂_pUnitAlgEquiv]
237+
((MvPolynomial.pUnitAlgEquiv R) f : Polynomial R).eval₂ φ a = f.eval₂ φ (fun _ ↦ a) :=
238+
eval₂_const_uniqueAlgEquiv
182239

183240
end Eval
184241

@@ -788,7 +845,7 @@ lemma Polynomial.toMvPolynomial_X (i : σ) : X.toMvPolynomial i = MvPolynomial.X
788845

789846
lemma Polynomial.toMvPolynomial_eq_rename_comp (i : σ) :
790847
toMvPolynomial (R := R) i =
791-
(MvPolynomial.rename (fun _ : Unit ↦ i)).comp (MvPolynomial.pUnitAlgEquiv R).symm := by
848+
(MvPolynomial.rename (fun _ : Unit ↦ i)).comp (MvPolynomial.uniqueAlgEquiv R Unit).symm := by
792849
ext
793850
simp
794851

Mathlib/AlgebraicGeometry/AffineSpace.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ lemma isIntegralHom_over_iff_isEmpty : IsIntegralHom (𝔸(n; S) ↘ S) ↔ IsEm
424424
obtain ⟨p : Polynomial R, hp, hp'⟩ :=
425425
(MorphismProperty.arrow_mk_iso_iff (RingHom.toMorphismProperty RingHom.IsIntegral)
426426
(arrowIsoΓSpecOfIsAffine _)).mpr h.2 (X i)
427-
have : (rename fun _ ↦ i).comp (pUnitAlgEquiv.{_, v} _).symm.toAlgHom p = 0 := by
427+
have : (rename fun _ ↦ i).comp (uniqueAlgEquiv.{_, v} _ PUnit).symm.toAlgHom p = 0 := by
428428
simp [← hp', ← algebraMap_eq]
429429
rw [AlgHom.comp_apply, map_eq_zero_iff _ (rename_injective _ (fun _ _ _ ↦ rfl))] at this
430430
simp only [AlgEquiv.toAlgHom_eq_coe, AlgHom.coe_coe, EmbeddingLike.map_eq_zero_iff] at this

Mathlib/CategoryTheory/Limits/Constructions/Filtered.lean

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,7 @@ def liftToFinsetColimIso : liftToFinset C α ⋙ colim ≅ colim :=
161161
ext J
162162
simp only [liftToFinset_obj_obj]
163163
ext j
164-
simp only [liftToFinset, ι_colimMap_assoc, liftToFinsetObj_obj, Discrete.functor_obj_eq_as,
165-
Discrete.natTrans_app, liftToFinsetColimIso_aux, liftToFinsetColimIso_aux_assoc,
166-
ι_colimMap])
164+
simp [liftToFinset, liftToFinsetColimIso_aux, liftToFinsetColimIso_aux_assoc])
167165

168166
end
169167

@@ -273,7 +271,7 @@ def liftToFinsetEvaluationIso (I : Finset (Discrete α)) :
273271
liftToFinset C α ⋙ (evaluation _ _).obj ⟨I⟩ ≅
274272
(Functor.whiskeringLeft _ _ _).obj (Discrete.functor (·.val)) ⋙ lim (J := Discrete I) :=
275273
NatIso.ofComponents (fun _ => HasLimit.isoOfNatIso (Discrete.natIso fun _ => Iso.refl _))
276-
fun _ => by dsimp; ext; simp
274+
fun _ => by dsimp; ext; simp [Pi.map]
277275

278276
end ProductsFromFiniteCofiltered
279277

Mathlib/CategoryTheory/Limits/FormalCoproducts/Cech.lean

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,7 @@ lemma mapPower_comp (U : FormalCoproduct.{w} C) {α β γ : Type t}
142142
· cat_disch
143143
· dsimp
144144
ext
145-
dsimp
146-
simp only [Category.comp_id, Category.assoc, Pi.lift_π]
147-
apply Pi.lift_π
145+
simp [Function.comp_def]
148146

149147
set_option backward.isDefEq.respectTransparency false in
150148
@[reassoc]
@@ -155,9 +153,7 @@ lemma mapPower_powerMap {U V : FormalCoproduct.{w} C} (f : U ⟶ V)
155153
· cat_disch
156154
· dsimp
157155
ext
158-
simp only [Function.comp_apply, limit.lift_map, Cone.postcompose, Fan.mk_pt, Category.comp_id,
159-
Category.assoc, limit.lift_π, Fan.mk_π_app, Pi.map_π]
160-
apply limit.lift_π
156+
simp [Function.comp_def]
161157

162158
set_option backward.isDefEq.respectTransparency false in
163159
@[reassoc (attr := simp)]

Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -611,9 +611,9 @@ instance biproduct.map_epi {f g : J → C} [HasBiproduct f] [HasBiproduct g] (p
611611
have : biproduct.map p =
612612
(biproduct.isoCoproduct _).hom ≫ Sigma.map p ≫ (biproduct.isoCoproduct _).inv := by
613613
ext
614-
simp only [map_π, isoCoproduct_hom, isoCoproduct_inv, Category.assoc, ι_desc_assoc,
615-
ι_colimMap_assoc, Discrete.functor_obj_eq_as, Discrete.natTrans_app, colimit.ι_desc_assoc,
616-
Cofan.mk_pt, Cofan.mk_ι_app, ι_π, ι_π_assoc]
614+
simp only [map_π, ι_π_assoc, isoCoproduct_hom, isoCoproduct_inv, Category.assoc, ι_desc_assoc,
615+
Sigma.ι_map_assoc, colimit.ι_desc_assoc, Discrete.functor_obj_eq_as, Cofan.mk_pt,
616+
Cofan.mk_ι_app, ι_π]
617617
split
618618
all_goals simp_all
619619
rw [this]

Mathlib/CategoryTheory/Limits/Shapes/Products.lean

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -325,13 +325,13 @@ def Cofan.isColimitTrans {X : α → C} (c : Cofan X) (hc : IsColimit c)
325325
/-- Construct a morphism between categorical products (indexed by the same type)
326326
from a family of morphisms between the factors.
327327
-/
328-
abbrev Pi.map {f g : β → C} [HasProduct f] [HasProduct g] (p : ∀ b, f b ⟶ g b) : ∏ᶜ f ⟶ ∏ᶜ g :=
328+
def Pi.map {f g : β → C} [HasProduct f] [HasProduct g] (p : ∀ b, f b ⟶ g b) : ∏ᶜ f ⟶ ∏ᶜ g :=
329329
limMap (Discrete.natTrans fun X => p X.as)
330330

331331
set_option backward.isDefEq.respectTransparency false in
332-
@[reassoc (attr := simp high), elementwise nosimp]
332+
@[reassoc (attr := simp), elementwise nosimp]
333333
lemma Pi.map_π {f g : β → C} [HasProduct f] [HasProduct g] (p : ∀ b, f b ⟶ g b) (b : β) :
334-
Pi.map p ≫ Pi.π g b = Pi.π f b ≫ p b := by simp
334+
Pi.map p ≫ Pi.π g b = Pi.π f b ≫ p b := by simp [Pi.map]
335335

336336
@[simp]
337337
lemma Pi.map_id {f : α → C} [HasProduct f] : Pi.map (fun a => 𝟙 (f a)) = 𝟙 (∏ᶜ f) := by
@@ -390,9 +390,19 @@ lemma Pi.map'_eq {f : α → C} {g : β → C} [HasProduct f] [HasProduct g] {p
390390
/-- Construct an isomorphism between categorical products (indexed by the same type)
391391
from a family of isomorphisms between the factors.
392392
-/
393-
abbrev Pi.mapIso {f g : β → C} [HasProductsOfShape β C] (p : ∀ b, f b ≅ g b) : ∏ᶜ f ≅ ∏ᶜ g :=
393+
def Pi.mapIso {f g : β → C} [HasProductsOfShape β C] (p : ∀ b, f b ≅ g b) : ∏ᶜ f ≅ ∏ᶜ g :=
394394
lim.mapIso (Discrete.natIso fun X => p X.as)
395395

396+
@[reassoc (attr := simp)]
397+
lemma Pi.mapIso_hom_π {f g : β → C} [HasProductsOfShape β C] (p : ∀ b, f b ≅ g b) (b : β) :
398+
(Pi.mapIso p).hom ≫ π _ _ = π _ _ ≫ (p b).hom :=
399+
limMap_π _ _
400+
401+
@[reassoc (attr := simp)]
402+
lemma Pi.mapIso_inv_π {f g : β → C} [HasProductsOfShape β C] (p : ∀ b, f b ≅ g b) (b : β) :
403+
(Pi.mapIso p).inv ≫ π _ _ = π _ _ ≫ (p b).inv :=
404+
limMap_π _ _
405+
396406
instance Pi.map_isIso {f g : β → C} [HasProductsOfShape β C] (p : ∀ b, f b ⟶ g b)
397407
[∀ b, IsIso <| p b] : IsIso <| Pi.map p :=
398408
inferInstanceAs (IsIso (Pi.mapIso (fun b ↦ asIso (p b))).hom)
@@ -445,14 +455,14 @@ end
445455
/-- Construct a morphism between categorical coproducts (indexed by the same type)
446456
from a family of morphisms between the factors.
447457
-/
448-
abbrev Sigma.map {f g : β → C} [HasCoproduct f] [HasCoproduct g] (p : ∀ b, f b ⟶ g b) :
458+
def Sigma.map {f g : β → C} [HasCoproduct f] [HasCoproduct g] (p : ∀ b, f b ⟶ g b) :
449459
∐ f ⟶ ∐ g :=
450460
colimMap (Discrete.natTrans fun X => p X.as)
451461

452462
set_option backward.isDefEq.respectTransparency false in
453-
@[reassoc (attr := simp high)]
463+
@[reassoc (attr := simp)]
454464
lemma Sigma.ι_map {f g : β → C} [HasCoproduct f] [HasCoproduct g] (p : ∀ b, f b ⟶ g b) (b : β) :
455-
Sigma.ι f b ≫ Sigma.map p = p b ≫ Sigma.ι g b := by simp
465+
Sigma.ι f b ≫ Sigma.map p = p b ≫ Sigma.ι g b := by simp [Sigma.map]
456466

457467
@[simp]
458468
lemma Sigma.map_id {f : α → C} [HasCoproduct f] : Sigma.map (fun a => 𝟙 (f a)) = 𝟙 (∐ f) := by
@@ -514,9 +524,19 @@ lemma Sigma.map'_eq {f : α → C} {g : β → C} [HasCoproduct f] [HasCoproduct
514524
/-- Construct an isomorphism between categorical coproducts (indexed by the same type)
515525
from a family of isomorphisms between the factors.
516526
-/
517-
abbrev Sigma.mapIso {f g : β → C} [HasCoproductsOfShape β C] (p : ∀ b, f b ≅ g b) : ∐ f ≅ ∐ g :=
527+
def Sigma.mapIso {f g : β → C} [HasCoproductsOfShape β C] (p : ∀ b, f b ≅ g b) : ∐ f ≅ ∐ g :=
518528
colim.mapIso (Discrete.natIso fun X => p X.as)
519529

530+
@[reassoc (attr := simp)]
531+
lemma Sigma.ι_mapIso_hom {f g : β → C} [HasCoproductsOfShape β C] (p : ∀ b, f b ≅ g b) (b : β) :
532+
ι _ _ ≫ (Sigma.mapIso p).hom = (p b).hom ≫ ι _ _ :=
533+
ι_colimMap _ _
534+
535+
@[reassoc (attr := simp)]
536+
lemma Sigma.ι_mapIso_inv {f g : β → C} [HasCoproductsOfShape β C] (p : ∀ b, f b ≅ g b) (b : β) :
537+
ι _ _ ≫ (Sigma.mapIso p).inv = (p b).inv ≫ ι _ _ :=
538+
ι_colimMap _ _
539+
520540
instance Sigma.map_isIso {f g : β → C} [HasCoproductsOfShape β C] (p : ∀ b, f b ⟶ g b)
521541
[∀ b, IsIso <| p b] : IsIso (Sigma.map p) :=
522542
inferInstanceAs (IsIso (Sigma.mapIso (fun b ↦ asIso (p b))).hom)

0 commit comments

Comments
 (0)