Skip to content

Commit a570e2c

Browse files
committed
feat(CategoryTheory/Monoidal): copy for functor properties (leanprover-community#41764)
From Toric, FLT
1 parent 5ef6397 commit a570e2c

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,17 @@ def ofNatIso {F G : C ⥤ D} (i : F ≅ G) [F.LaxBraided] [G.LaxMonoidal]
414414
rw [this X Y, this Y X, ← braiding_naturality_assoc, ← Functor.LaxBraided.braided_assoc]
415415
simp
416416

417+
/-- Copy of a lax braided structure on a functor `F` with new `ε` and `μ` fields equal to the old
418+
ones.
419+
420+
This is useful to fix definitional equalities. -/
421+
@[implicit_reducible]
422+
def copy {F : C ⥤ D} (hF : F.LaxBraided) (ε' : 𝟙_ D ⟶ F.obj (𝟙_ C))
423+
(μ' : ∀ X Y : C, F.obj X ⊗ F.obj Y ⟶ F.obj (X ⊗ Y))
424+
(hε : ε' = ε F := by cat_disch) (hμ : μ' = μ F := by cat_disch) : F.LaxBraided where
425+
__ := hF.toLaxMonoidal.copy ε' μ' hε hμ
426+
braided X Y := hμ ▸ hF.braided X Y
427+
417428
end Functor.LaxBraided
418429

419430
section
@@ -559,6 +570,19 @@ instance (F : C ⥤ D) (G : D ⥤ E) [F.Braided] [G.Braided] : (F ⋙ G).Braided
559570
lemma toMonoidal_injective (F : C ⥤ D) : Function.Injective
560571
(@Braided.toMonoidal _ _ _ _ _ _ _ _ _ : F.Braided → F.Monoidal) := by rintro ⟨⟩ ⟨⟩ rfl; rfl
561572

573+
/-- Copy of a braided structure on a functor `F` with new `ε`, `μ`, `η` and `δ` fields equal to the
574+
old ones.
575+
576+
This is useful to fix definitional equalities. -/
577+
@[implicit_reducible]
578+
def copy {F : C ⥤ D} (hF : F.Braided) (ε' : 𝟙_ D ⟶ F.obj (𝟙_ C))
579+
(μ' : ∀ X Y : C, F.obj X ⊗ F.obj Y ⟶ F.obj (X ⊗ Y)) (η' : F.obj (𝟙_ C) ⟶ 𝟙_ D)
580+
(δ' : ∀ X Y : C, F.obj (X ⊗ Y) ⟶ F.obj X ⊗ F.obj Y)
581+
(hε : ε' = ε F := by cat_disch) (hμ : μ' = μ F := by cat_disch)
582+
(hη : η' = η F := by cat_disch) (hδ : δ' = δ F := by cat_disch) : F.Braided where
583+
__ := hF.toMonoidal.copy ε' μ' η' δ' hε hμ hη hδ
584+
braided X Y := hμ ▸ hF.braided X Y
585+
562586
end Functor.Braided
563587

564588
section CommMonoid

Mathlib/CategoryTheory/Monoidal/Functor.lean

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ lemma whiskerLeft_μ_comp_μ (X Y Z : C) :
156156
μ F X Y ▷ F.obj Z ≫ μ F (X ⊗ Y) Z ≫ F.map (α_ X Y Z).hom := by
157157
rw [associativity, Iso.inv_hom_id_assoc]
158158

159+
/-- Copy of a lax monoidal structure with new `ε` and `μ` fields equal to the old ones.
160+
161+
This is useful to fix definitional equalities. -/
162+
@[implicit_reducible]
163+
def copy {F : C ⥤ D} (hF : F.LaxMonoidal) (ε' : 𝟙_ D ⟶ F.obj (𝟙_ C))
164+
(μ' : ∀ X Y : C, F.obj X ⊗ F.obj Y ⟶ F.obj (X ⊗ Y))
165+
(hε : ε' = ε F := by cat_disch) (hμ : μ' = μ F := by cat_disch) : F.LaxMonoidal where
166+
ε := ε'
167+
μ := μ'
168+
159169
end
160170

161171
section
@@ -330,6 +340,17 @@ lemma δ_comp_whiskerLeft_δ (X Y Z : C) :
330340

331341
end
332342

343+
/-- Copy of an oplax monoidal structure on a functor `F` with new `η` and `δ` fields equal to the
344+
old ones.
345+
346+
This is useful to fix definitional equalities. -/
347+
@[implicit_reducible]
348+
def copy {F : C ⥤ D} (hF : F.OplaxMonoidal) (η' : F.obj (𝟙_ C) ⟶ 𝟙_ D)
349+
(δ' : ∀ X Y : C, F.obj (X ⊗ Y) ⟶ F.obj X ⊗ F.obj Y)
350+
(hη : η' = η F := by cat_disch) (hδ : δ' = δ F := by cat_disch) : F.OplaxMonoidal where
351+
η := η'
352+
δ := δ'
353+
333354
@[simps]
334355
instance id : (𝟭 C).OplaxMonoidal where
335356
η := 𝟙 _
@@ -577,6 +598,19 @@ lemma toOplaxMonoidal_injective : Function.Injective
577598
· exact congr(($eq).η)
578599
· exact congr(($eq).δ)
579600

601+
/-- Copy of a monoidal structure on a functor `F` with new `ε`, `μ`, `η` and `δ` fields equal to the
602+
old ones.
603+
604+
This is useful to fix definitional equalities. -/
605+
@[implicit_reducible]
606+
def copy {F : C ⥤ D} (hF : F.Monoidal) (ε' : 𝟙_ D ⟶ F.obj (𝟙_ C))
607+
(μ' : ∀ X Y : C, F.obj X ⊗ F.obj Y ⟶ F.obj (X ⊗ Y)) (η' : F.obj (𝟙_ C) ⟶ 𝟙_ D)
608+
(δ' : ∀ X Y : C, F.obj (X ⊗ Y) ⟶ F.obj X ⊗ F.obj Y)
609+
(hε : ε' = ε F := by cat_disch) (hμ : μ' = μ F := by cat_disch)
610+
(hη : η' = η F := by cat_disch) (hδ : δ' = δ F := by cat_disch) : F.Monoidal where
611+
__ := hF.toLaxMonoidal.copy ε' μ' hε hμ
612+
__ := hF.toOplaxMonoidal.copy η' δ' hη hδ
613+
580614
end Monoidal
581615

582616
variable (F : C ⥤ D)

0 commit comments

Comments
 (0)