Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 234ddfe

Browse files
committed
chore(category_theory): put biproduct results on preadditive categories into the correct file (#16924)
1 parent b68e4a8 commit 234ddfe

File tree

7 files changed

+818
-832
lines changed

7 files changed

+818
-832
lines changed

src/algebra/category/Group/biproducts.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Authors: Scott Morrison
55
-/
66
import algebra.group.pi
77
import algebra.category.Group.preadditive
8-
import category_theory.limits.shapes.biproducts
8+
import category_theory.preadditive.biproducts
99
import algebra.category.Group.limits
1010

1111
/-!

src/category_theory/abelian/basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Authors: Markus Himmel, Johan Commelin, Scott Morrison
55
-/
66

77
import category_theory.limits.constructions.pullbacks
8-
import category_theory.limits.shapes.biproducts
8+
import category_theory.preadditive.biproducts
99
import category_theory.limits.shapes.images
1010
import category_theory.limits.constructions.limits_of_products_and_equalizers
1111
import category_theory.limits.constructions.epi_mono

src/category_theory/limits/preserves/shapes/biproducts.lean

Lines changed: 1 addition & 215 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ classes `preserves_biproduct` and `preserves_binary_biproduct`. We then
1818
* construct the comparison morphisms between the image of a biproduct and the biproduct of the
1919
images and show that the biproduct is preserved if one of them is an isomorphism,
2020
* give the canonical isomorphism between the image of a biproduct and the biproduct of the images
21-
in case that the biproduct is preserved,
22-
* show that in a preadditive category, a functor preserves a biproduct if and only if it preserves
23-
the corresponding product if and only if it preserves the corresponding coproduct.
21+
in case that the biproduct is preserved.
2422
2523
-/
2624

@@ -380,216 +378,4 @@ end limits
380378

381379
end has_zero_morphisms
382380

383-
open category_theory.functor
384-
385-
section preadditive
386-
variables [preadditive C] [preadditive D] (F : C ⥤ D) [preserves_zero_morphisms F]
387-
388-
namespace limits
389-
390-
section fintype
391-
variables {J : Type} [fintype J]
392-
393-
local attribute [tidy] tactic.discrete_cases
394-
395-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite biproducts
396-
preserves finite products. -/
397-
def preserves_product_of_preserves_biproduct {f : J → C} [preserves_biproduct f F] :
398-
preserves_limit (discrete.functor f) F :=
399-
{ preserves := λ c hc, is_limit.of_iso_limit
400-
((is_limit.postcompose_inv_equiv (discrete.comp_nat_iso_discrete _ _) _).symm
401-
(is_bilimit_of_preserves F (bicone_is_bilimit_of_limit_cone_of_is_limit hc)).is_limit) $
402-
cones.ext (iso.refl _) (by tidy) }
403-
404-
section
405-
local attribute [instance] preserves_product_of_preserves_biproduct
406-
407-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite biproducts
408-
preserves finite products. -/
409-
def preserves_products_of_shape_of_preserves_biproducts_of_shape
410-
[preserves_biproducts_of_shape J F] : preserves_limits_of_shape (discrete J) F :=
411-
{ preserves_limit := λ f, preserves_limit_of_iso_diagram _ discrete.nat_iso_functor.symm }
412-
413-
end
414-
415-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite products
416-
preserves finite biproducts. -/
417-
def preserves_biproduct_of_preserves_product {f : J → C} [preserves_limit (discrete.functor f) F] :
418-
preserves_biproduct f F :=
419-
{ preserves := λ b hb, is_bilimit_of_is_limit _ $
420-
is_limit.of_iso_limit ((is_limit.postcompose_hom_equiv (discrete.comp_nat_iso_discrete _ _)
421-
(F.map_cone b.to_cone)).symm (is_limit_of_preserves F hb.is_limit)) $
422-
cones.ext (iso.refl _) (by tidy) }
423-
424-
/-- If the (product-like) biproduct comparison for `F` and `f` is a monomorphism, then `F`
425-
preserves the biproduct of `f`. For the converse, see `map_biproduct`. -/
426-
def preserves_biproduct_of_mono_biproduct_comparison {f : J → C} [has_biproduct f]
427-
[has_biproduct (F.obj ∘ f)] [mono (biproduct_comparison F f)] : preserves_biproduct f F :=
428-
begin
429-
have : pi_comparison F f = (F.map_iso (biproduct.iso_product f)).inv ≫
430-
biproduct_comparison F f ≫ (biproduct.iso_product _).hom,
431-
{ ext, convert pi_comparison_comp_π F f j.as; simp [← functor.map_comp] },
432-
haveI : is_iso (biproduct_comparison F f) := is_iso_of_mono_of_is_split_epi _,
433-
haveI : is_iso (pi_comparison F f) := by { rw this, apply_instance },
434-
haveI := preserves_product.of_iso_comparison F f,
435-
apply preserves_biproduct_of_preserves_product
436-
end
437-
438-
/-- If the (coproduct-like) biproduct comparison for `F` and `f` is an epimorphism, then `F`
439-
preserves the biproduct of `F` and `f`. For the converse, see `map_biproduct`. -/
440-
def preserves_biproduct_of_epi_biproduct_comparison' {f : J → C} [has_biproduct f]
441-
[has_biproduct (F.obj ∘ f)] [epi (biproduct_comparison' F f)] : preserves_biproduct f F :=
442-
begin
443-
haveI : epi ((split_epi_biproduct_comparison F f).section_) := by simpa,
444-
haveI : is_iso (biproduct_comparison F f) := is_iso.of_epi_section'
445-
(split_epi_biproduct_comparison F f),
446-
apply preserves_biproduct_of_mono_biproduct_comparison
447-
end
448-
449-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite products
450-
preserves finite biproducts. -/
451-
def preserves_biproducts_of_shape_of_preserves_products_of_shape
452-
[preserves_limits_of_shape (discrete J) F] : preserves_biproducts_of_shape J F :=
453-
{ preserves := λ f, preserves_biproduct_of_preserves_product F }
454-
455-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite biproducts
456-
preserves finite coproducts. -/
457-
def preserves_coproduct_of_preserves_biproduct {f : J → C} [preserves_biproduct f F] :
458-
preserves_colimit (discrete.functor f) F :=
459-
{ preserves := λ c hc, is_colimit.of_iso_colimit
460-
((is_colimit.precompose_hom_equiv (discrete.comp_nat_iso_discrete _ _) _).symm
461-
(is_bilimit_of_preserves F
462-
(bicone_is_bilimit_of_colimit_cocone_of_is_colimit hc)).is_colimit) $
463-
cocones.ext (iso.refl _) (by tidy) }
464-
465-
section
466-
local attribute [instance] preserves_coproduct_of_preserves_biproduct
467-
468-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite biproducts
469-
preserves finite coproducts. -/
470-
def preserves_coproducts_of_shape_of_preserves_biproducts_of_shape
471-
[preserves_biproducts_of_shape J F] : preserves_colimits_of_shape (discrete J) F :=
472-
{ preserves_colimit := λ f, preserves_colimit_of_iso_diagram _ discrete.nat_iso_functor.symm }
473-
474-
end
475-
476-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite coproducts
477-
preserves finite biproducts. -/
478-
def preserves_biproduct_of_preserves_coproduct {f : J → C}
479-
[preserves_colimit (discrete.functor f) F] : preserves_biproduct f F :=
480-
{ preserves := λ b hb, is_bilimit_of_is_colimit _ $
481-
is_colimit.of_iso_colimit ((is_colimit.precompose_inv_equiv (discrete.comp_nat_iso_discrete _ _)
482-
(F.map_cocone b.to_cocone)).symm (is_colimit_of_preserves F hb.is_colimit)) $
483-
cocones.ext (iso.refl _) (by tidy) }
484-
485-
/-- A functor between preadditive categories that preserves (zero morphisms and) finite coproducts
486-
preserves finite biproducts. -/
487-
def preserves_biproducts_of_shape_of_preserves_coproducts_of_shape
488-
[preserves_colimits_of_shape (discrete J) F] : preserves_biproducts_of_shape J F :=
489-
{ preserves := λ f, preserves_biproduct_of_preserves_coproduct F }
490-
491-
end fintype
492-
493-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary biproducts
494-
preserves binary products. -/
495-
def preserves_binary_product_of_preserves_binary_biproduct {X Y : C}
496-
[preserves_binary_biproduct X Y F] : preserves_limit (pair X Y) F :=
497-
{ preserves := λ c hc, is_limit.of_iso_limit
498-
((is_limit.postcompose_inv_equiv (by exact diagram_iso_pair _) _).symm
499-
(is_binary_bilimit_of_preserves F
500-
(binary_bicone_is_bilimit_of_limit_cone_of_is_limit hc)).is_limit) $
501-
cones.ext (iso.refl _) (λ j, by { rcases j with ⟨⟨⟩⟩, tidy }) }
502-
503-
section
504-
local attribute [instance] preserves_binary_product_of_preserves_binary_biproduct
505-
506-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary biproducts
507-
preserves binary products. -/
508-
def preserves_binary_products_of_preserves_binary_biproducts
509-
[preserves_binary_biproducts F] : preserves_limits_of_shape (discrete walking_pair) F :=
510-
{ preserves_limit := λ K, preserves_limit_of_iso_diagram _ (diagram_iso_pair _).symm }
511-
512-
end
513-
514-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary products
515-
preserves binary biproducts. -/
516-
def preserves_binary_biproduct_of_preserves_binary_product {X Y : C}
517-
[preserves_limit (pair X Y) F] : preserves_binary_biproduct X Y F :=
518-
{ preserves := λ b hb, is_binary_bilimit_of_is_limit _ $
519-
is_limit.of_iso_limit ((is_limit.postcompose_hom_equiv (by exact diagram_iso_pair _)
520-
(F.map_cone b.to_cone)).symm (is_limit_of_preserves F hb.is_limit)) $
521-
cones.ext (iso.refl _) (λ j, by { rcases j with ⟨⟨⟩⟩, tidy }) }
522-
523-
/-- If the (product-like) biproduct comparison for `F`, `X` and `Y` is a monomorphism, then
524-
`F` preserves the biproduct of `X` and `Y`. For the converse, see `map_biprod`. -/
525-
def preserves_binary_biproduct_of_mono_biprod_comparison {X Y : C} [has_binary_biproduct X Y]
526-
[has_binary_biproduct (F.obj X) (F.obj Y)] [mono (biprod_comparison F X Y)] :
527-
preserves_binary_biproduct X Y F :=
528-
begin
529-
have : prod_comparison F X Y = (F.map_iso (biprod.iso_prod X Y)).inv ≫
530-
biprod_comparison F X Y ≫ (biprod.iso_prod _ _).hom := by { ext; simp [← functor.map_comp] },
531-
haveI : is_iso (biprod_comparison F X Y) := is_iso_of_mono_of_is_split_epi _,
532-
haveI : is_iso (prod_comparison F X Y) := by { rw this, apply_instance },
533-
haveI := preserves_limit_pair.of_iso_prod_comparison F X Y,
534-
apply preserves_binary_biproduct_of_preserves_binary_product
535-
end
536-
537-
/-- If the (coproduct-like) biproduct comparison for `F`, `X` and `Y` is an epimorphism, then
538-
`F` preserves the biproduct of `X` and `Y`. For the converse, see `map_biprod`. -/
539-
def preserves_binary_biproduct_of_epi_biprod_comparison' {X Y : C} [has_binary_biproduct X Y]
540-
[has_binary_biproduct (F.obj X) (F.obj Y)] [epi (biprod_comparison' F X Y)] :
541-
preserves_binary_biproduct X Y F :=
542-
begin
543-
haveI : epi ((split_epi_biprod_comparison F X Y).section_) := by simpa,
544-
haveI : is_iso (biprod_comparison F X Y) := is_iso.of_epi_section'
545-
(split_epi_biprod_comparison F X Y),
546-
apply preserves_binary_biproduct_of_mono_biprod_comparison
547-
end
548-
549-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary products
550-
preserves binary biproducts. -/
551-
def preserves_binary_biproducts_of_preserves_binary_products
552-
[preserves_limits_of_shape (discrete walking_pair) F] : preserves_binary_biproducts F :=
553-
{ preserves := λ X Y, preserves_binary_biproduct_of_preserves_binary_product F }
554-
555-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary biproducts
556-
preserves binary coproducts. -/
557-
def preserves_binary_coproduct_of_preserves_binary_biproduct {X Y : C}
558-
[preserves_binary_biproduct X Y F] : preserves_colimit (pair X Y) F :=
559-
{ preserves := λ c hc, is_colimit.of_iso_colimit
560-
((is_colimit.precompose_hom_equiv (by exact diagram_iso_pair _) _).symm
561-
(is_binary_bilimit_of_preserves F
562-
(binary_bicone_is_bilimit_of_colimit_cocone_of_is_colimit hc)).is_colimit) $
563-
cocones.ext (iso.refl _) (λ j, by { rcases j with ⟨⟨⟩⟩, tidy }) }
564-
565-
section
566-
local attribute [instance] preserves_binary_coproduct_of_preserves_binary_biproduct
567-
568-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary biproducts
569-
preserves binary coproducts. -/
570-
def preserves_binary_coproducts_of_preserves_binary_biproducts
571-
[preserves_binary_biproducts F] : preserves_colimits_of_shape (discrete walking_pair) F :=
572-
{ preserves_colimit := λ K, preserves_colimit_of_iso_diagram _ (diagram_iso_pair _).symm }
573-
574-
end
575-
576-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary coproducts
577-
preserves binary biproducts. -/
578-
def preserves_binary_biproduct_of_preserves_binary_coproduct {X Y : C}
579-
[preserves_colimit (pair X Y) F] : preserves_binary_biproduct X Y F :=
580-
{ preserves := λ b hb, is_binary_bilimit_of_is_colimit _ $
581-
is_colimit.of_iso_colimit ((is_colimit.precompose_inv_equiv (by exact diagram_iso_pair _)
582-
(F.map_cocone b.to_cocone)).symm (is_colimit_of_preserves F hb.is_colimit)) $
583-
cocones.ext (iso.refl _) (λ j, by { rcases j with ⟨⟨⟩⟩, tidy }) }
584-
585-
/-- A functor between preadditive categories that preserves (zero morphisms and) binary coproducts
586-
preserves binary biproducts. -/
587-
def preserves_binary_biproducts_of_preserves_binary_coproducts
588-
[preserves_colimits_of_shape (discrete walking_pair) F] : preserves_binary_biproducts F :=
589-
{ preserves := λ X Y, preserves_binary_biproduct_of_preserves_binary_coproduct F }
590-
591-
end limits
592-
593-
end preadditive
594-
595381
end category_theory

0 commit comments

Comments
 (0)