topology.sheaves.abelian
⟷
Mathlib.Topology.Sheaves.Abelian
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -56,7 +56,7 @@ variable [ConcreteCategory.{max v u} D] [PreservesLimits (forget D)]
variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
-variable [ReflectsIsomorphisms (forget D)]
+variable [CategoryTheory.Functor.ReflectsIsomorphisms (forget D)]
#print CategoryTheory.sheafIsAbelian /-
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -60,7 +60,7 @@ variable [ReflectsIsomorphisms (forget D)]
#print CategoryTheory.sheafIsAbelian /-
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
- let adj := sheafificationAdjunction J D
+ let adj := plusPlusAdjunction J D
abelianOfAdjunction _ _ (asIso adj.counit) adj
#align category_theory.Sheaf_is_abelian CategoryTheory.sheafIsAbelian
-/
@@ -68,8 +68,8 @@ instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
attribute [local instance] preserves_binary_biproducts_of_preserves_binary_products
#print CategoryTheory.presheafToSheaf_additive /-
-instance presheafToSheaf_additive : (presheafToSheaf J D).Additive :=
- (presheafToSheaf J D).additive_of_preservesBinaryBiproducts
+instance presheafToSheaf_additive : (plusPlusSheaf J D).Additive :=
+ (plusPlusSheaf J D).additive_of_preservesBinaryBiproducts
#align category_theory.presheaf_to_Sheaf_additive CategoryTheory.presheafToSheaf_additive
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz, Jujian Zhang
-/
-import Mathbin.CategoryTheory.Abelian.FunctorCategory
-import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathbin.CategoryTheory.Preadditive.FunctorCategory
-import Mathbin.CategoryTheory.Abelian.Transfer
-import Mathbin.CategoryTheory.Sites.LeftExact
+import CategoryTheory.Abelian.FunctorCategory
+import CategoryTheory.Preadditive.AdditiveFunctor
+import CategoryTheory.Preadditive.FunctorCategory
+import CategoryTheory.Abelian.Transfer
+import CategoryTheory.Sites.LeftExact
#align_import topology.sheaves.abelian from "leanprover-community/mathlib"@"dbdf71cee7bb20367cb7e37279c08b0c218cf967"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz, Jujian Zhang
-
-! This file was ported from Lean 3 source module topology.sheaves.abelian
-! leanprover-community/mathlib commit dbdf71cee7bb20367cb7e37279c08b0c218cf967
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Abelian.FunctorCategory
import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
@@ -14,6 +9,8 @@ import Mathbin.CategoryTheory.Preadditive.FunctorCategory
import Mathbin.CategoryTheory.Abelian.Transfer
import Mathbin.CategoryTheory.Sites.LeftExact
+#align_import topology.sheaves.abelian from "leanprover-community/mathlib"@"dbdf71cee7bb20367cb7e37279c08b0c218cf967"
+
/-!
# Category of sheaves is abelian
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -61,16 +61,20 @@ variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
variable [ReflectsIsomorphisms (forget D)]
+#print CategoryTheory.sheafIsAbelian /-
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
let adj := sheafificationAdjunction J D
abelianOfAdjunction _ _ (asIso adj.counit) adj
#align category_theory.Sheaf_is_abelian CategoryTheory.sheafIsAbelian
+-/
attribute [local instance] preserves_binary_biproducts_of_preserves_binary_products
+#print CategoryTheory.presheafToSheaf_additive /-
instance presheafToSheaf_additive : (presheafToSheaf J D).Additive :=
(presheafToSheaf J D).additive_of_preservesBinaryBiproducts
#align category_theory.presheaf_to_Sheaf_additive CategoryTheory.presheafToSheaf_additive
+-/
end Abelian
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -61,12 +61,6 @@ variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
variable [ReflectsIsomorphisms (forget D)]
-/- warning: category_theory.Sheaf_is_abelian -> CategoryTheory.sheafIsAbelian is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{max u2 u3}} [_inst_1 : CategoryTheory.Category.{u2, max u2 u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u2 u3, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, max u2 u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u2 u3} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, max u2 u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_10 : CategoryTheory.Limits.HasFiniteLimits.{max u2 u3, u1} D _inst_2], CategoryTheory.Abelian.{max u2 u3, max u1 u2 u3} (CategoryTheory.Sheaf.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u3 u2, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_10 : CategoryTheory.Limits.HasFiniteLimits.{max u3 u2, u1} D _inst_2], CategoryTheory.Abelian.{max u3 u2, max (max (max u1 u3) u3 u2) u2} (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf_is_abelian CategoryTheory.sheafIsAbelianₓ'. -/
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
let adj := sheafificationAdjunction J D
abelianOfAdjunction _ _ (asIso adj.counit) adj
@@ -74,12 +68,6 @@ instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
attribute [local instance] preserves_binary_biproducts_of_preserves_binary_products
-/- warning: category_theory.presheaf_to_Sheaf_additive -> CategoryTheory.presheafToSheaf_additive is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{max u2 u3}} [_inst_1 : CategoryTheory.Category.{u2, max u2 u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u2 u3, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, max u2 u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u2 u3} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, max u2 u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)], CategoryTheory.Functor.Additive.{max u2 (max u2 u3) u1, max u1 u2 u3, max u2 u3, max u2 u3} (CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.functorCategoryPreadditive.{max u2 u3, u1, u2, max u2 u3} (Opposite.{succ (max u2 u3)} C) D (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u2 u3, u1} D _inst_2 _inst_3)) (CategoryTheory.Sheaf.preadditive.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u2 u3, u1} D _inst_2 _inst_3)) (CategoryTheory.presheafToSheaf.{u1, u2, max u2 u3} C _inst_1 J D _inst_2 _inst_6 _inst_7 (fun (P : CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) => _inst_4 P X S) (fun (X : C) => _inst_5 X) (fun (X : C) => _inst_8 X) _inst_9)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u3 u2, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)], CategoryTheory.Functor.Additive.{max (max u3 u2) u1, max (max u3 u2) u1, max u3 u2, max u3 u2} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.functorCategoryPreadditive.{u3, u1, u2, max u3 u2} (Opposite.{succ u3} C) D (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u3 u2, u1} D _inst_2 _inst_3)) (CategoryTheory.instPreadditiveSheafInstCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u3 u2, u1} D _inst_2 _inst_3)) (CategoryTheory.presheafToSheaf.{u1, u2, u3} C _inst_1 J D _inst_2 _inst_6 _inst_7 (fun (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) => _inst_4 P X S) (fun (X : C) => _inst_5 X) (fun (X : C) => _inst_8 X) _inst_9)
-Case conversion may be inaccurate. Consider using '#align category_theory.presheaf_to_Sheaf_additive CategoryTheory.presheafToSheaf_additiveₓ'. -/
instance presheafToSheaf_additive : (presheafToSheaf J D).Additive :=
(presheafToSheaf J D).additive_of_preservesBinaryBiproducts
#align category_theory.presheaf_to_Sheaf_additive CategoryTheory.presheafToSheaf_additive
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz, Jujian Zhang
! This file was ported from Lean 3 source module topology.sheaves.abelian
-! leanprover-community/mathlib commit ac3ae212f394f508df43e37aa093722fa9b65d31
+! leanprover-community/mathlib commit dbdf71cee7bb20367cb7e37279c08b0c218cf967
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.CategoryTheory.Sites.LeftExact
/-!
# Category of sheaves is abelian
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
Let `C, D` be categories and `J` be a grothendieck topology on `C`, when `D` is abelian and
sheafification is possible in `C`, `Sheaf J D` is abelian as well (`Sheaf_is_abelian`).
mathlib commit https://github.com/leanprover-community/mathlib/commit/403190b5419b3f03f1a2893ad9352ca7f7d8bff6
@@ -58,6 +58,12 @@ variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
variable [ReflectsIsomorphisms (forget D)]
+/- warning: category_theory.Sheaf_is_abelian -> CategoryTheory.sheafIsAbelian is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{max u2 u3}} [_inst_1 : CategoryTheory.Category.{u2, max u2 u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u2 u3, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, max u2 u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u2 u3} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, max u2 u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_10 : CategoryTheory.Limits.HasFiniteLimits.{max u2 u3, u1} D _inst_2], CategoryTheory.Abelian.{max u2 u3, max u1 u2 u3} (CategoryTheory.Sheaf.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u3 u2, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_10 : CategoryTheory.Limits.HasFiniteLimits.{max u3 u2, u1} D _inst_2], CategoryTheory.Abelian.{max u3 u2, max (max (max u1 u3) u3 u2) u2} (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf_is_abelian CategoryTheory.sheafIsAbelianₓ'. -/
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
let adj := sheafificationAdjunction J D
abelianOfAdjunction _ _ (asIso adj.counit) adj
@@ -65,6 +71,12 @@ instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
attribute [local instance] preserves_binary_biproducts_of_preserves_binary_products
+/- warning: category_theory.presheaf_to_Sheaf_additive -> CategoryTheory.presheafToSheaf_additive is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{max u2 u3}} [_inst_1 : CategoryTheory.Category.{u2, max u2 u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u2 u3, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, max u2 u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u2 u3} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, max u2 u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u2 u3)} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u2 u3, max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (Preorder.smallCategory.{max u2 u3} (CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, max u2 u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_6)], CategoryTheory.Functor.Additive.{max u2 (max u2 u3) u1, max u1 u2 u3, max u2 u3, max u2 u3} (CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.functorCategoryPreadditive.{max u2 u3, u1, u2, max u2 u3} (Opposite.{succ (max u2 u3)} C) D (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u2 u3, u1} D _inst_2 _inst_3)) (CategoryTheory.Sheaf.preadditive.{u2, max u2 u3, max u2 u3, u1} C _inst_1 J D _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u2 u3, u1} D _inst_2 _inst_3)) (CategoryTheory.presheafToSheaf.{u1, u2, max u2 u3} C _inst_1 J D _inst_2 _inst_6 _inst_7 (fun (P : CategoryTheory.Functor.{u2, max u2 u3, max u2 u3, u1} (Opposite.{succ (max u2 u3)} C) (CategoryTheory.Category.opposite.{u2, max u2 u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, max u2 u3} C _inst_1 J X) => _inst_4 P X S) (fun (X : C) => _inst_5 X) (fun (X : C) => _inst_8 X) _inst_9)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] [_inst_3 : CategoryTheory.Abelian.{max u3 u2, u1} D _inst_2] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} [_inst_4 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_5 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_6 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_7 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_6)], CategoryTheory.Functor.Additive.{max (max u3 u2) u1, max (max u3 u2) u1, max u3 u2, max u3 u2} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.functorCategoryPreadditive.{u3, u1, u2, max u3 u2} (Opposite.{succ u3} C) D (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u3 u2, u1} D _inst_2 _inst_3)) (CategoryTheory.instPreadditiveSheafInstCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2 (CategoryTheory.Abelian.toPreadditive.{max u3 u2, u1} D _inst_2 _inst_3)) (CategoryTheory.presheafToSheaf.{u1, u2, u3} C _inst_1 J D _inst_2 _inst_6 _inst_7 (fun (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) => _inst_4 P X S) (fun (X : C) => _inst_5 X) (fun (X : C) => _inst_8 X) _inst_9)
+Case conversion may be inaccurate. Consider using '#align category_theory.presheaf_to_Sheaf_additive CategoryTheory.presheafToSheaf_additiveₓ'. -/
instance presheafToSheaf_additive : (presheafToSheaf J D).Additive :=
(presheafToSheaf J D).additive_of_preservesBinaryBiproducts
#align category_theory.presheaf_to_Sheaf_additive CategoryTheory.presheafToSheaf_additive
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
We prove that sheaf categories have limits and colimits of the same size as the target category. Before, the universe levels were too restrictive. We change the construction of the colimit: it now uses the formal properties of sheafification instead of an explicit construction.
@@ -5,9 +5,8 @@ Authors: Adam Topaz, Jujian Zhang
-/
import Mathlib.CategoryTheory.Abelian.FunctorCategory
import Mathlib.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathlib.CategoryTheory.Preadditive.FunctorCategory
import Mathlib.CategoryTheory.Abelian.Transfer
-import Mathlib.CategoryTheory.Sites.LeftExact
+import Mathlib.CategoryTheory.Sites.Limits
#align_import topology.sheaves.abelian from "leanprover-community/mathlib"@"ac3ae212f394f508df43e37aa093722fa9b65d31"
@@ -29,33 +28,14 @@ open CategoryTheory.Limits
section Abelian
-universe w v u
+universe w' w v u
--- Porting note: `C` was `Type (max v u)`, but making it more universe polymorphic
--- solves some problems
variable {C : Type u} [Category.{v} C]
-variable {D : Type w} [Category.{max v u} D] [Abelian D]
+variable {D : Type w} [Category.{w'} D] [Abelian D]
variable {J : GrothendieckTopology C}
+variable [HasSheafify J D] [HasFiniteLimits D]
--- Porting note: this `Abelian` instance is no longer necessary,
--- maybe because I have made `C` more universe polymorphic
---
--- This needs to be specified manually because of universe level.
---instance : Abelian (Cᵒᵖ ⥤ D) :=
--- @Abelian.functorCategoryAbelian Cᵒᵖ _ D _ _
-
--- This also needs to be specified manually, but I don't know why.
-instance hasFiniteProductsSheaf : HasFiniteProducts (Sheaf J D) where
- out j := { has_limit := fun F => by infer_instance }
-
--- sheafification assumptions
-variable [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)]
-variable [∀ X : C, HasColimitsOfShape (J.Cover X)ᵒᵖ D]
-variable [ConcreteCategory.{max v u} D] [PreservesLimits (forget D)]
-variable [∀ X : C, PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)]
-variable [(forget D).ReflectsIsomorphisms]
-
-instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
+instance sheafIsAbelian : Abelian (Sheaf J D) :=
let adj := sheafificationAdjunction J D
abelianOfAdjunction _ _ (asIso adj.counit) adj
set_option linter.uppercaseLean3 false in
@@ -18,8 +18,6 @@ sheafification is possible in `C`, `Sheaf J D` is abelian as well (`sheafIsAbeli
Hence, `presheafToSheaf` is an additive functor (`presheafToSheaf_additive`).
-TODO: This file should be moved to `CategoryTheory/Sites`.
-
-/
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -55,7 +55,7 @@ variable [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.
variable [∀ X : C, HasColimitsOfShape (J.Cover X)ᵒᵖ D]
variable [ConcreteCategory.{max v u} D] [PreservesLimits (forget D)]
variable [∀ X : C, PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)]
-variable [ReflectsIsomorphisms (forget D)]
+variable [(forget D).ReflectsIsomorphisms]
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
let adj := sheafificationAdjunction J D
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -36,9 +36,7 @@ universe w v u
-- Porting note: `C` was `Type (max v u)`, but making it more universe polymorphic
-- solves some problems
variable {C : Type u} [Category.{v} C]
-
variable {D : Type w} [Category.{max v u} D] [Abelian D]
-
variable {J : GrothendieckTopology C}
-- Porting note: this `Abelian` instance is no longer necessary,
@@ -54,13 +52,9 @@ instance hasFiniteProductsSheaf : HasFiniteProducts (Sheaf J D) where
-- sheafification assumptions
variable [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)]
-
variable [∀ X : C, HasColimitsOfShape (J.Cover X)ᵒᵖ D]
-
variable [ConcreteCategory.{max v u} D] [PreservesLimits (forget D)]
-
variable [∀ X : C, PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)]
-
variable [ReflectsIsomorphisms (forget D)]
instance sheafIsAbelian [HasFiniteLimits D] : Abelian (Sheaf J D) :=
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -33,7 +33,7 @@ section Abelian
universe w v u
--- porting note: `C` was `Type (max v u)`, but making it more universe polymorphic
+-- Porting note: `C` was `Type (max v u)`, but making it more universe polymorphic
-- solves some problems
variable {C : Type u} [Category.{v} C]
@@ -41,7 +41,7 @@ variable {D : Type w} [Category.{max v u} D] [Abelian D]
variable {J : GrothendieckTopology C}
--- porting note: this `Abelian` instance is no longer necessary,
+-- Porting note: this `Abelian` instance is no longer necessary,
-- maybe because I have made `C` more universe polymorphic
--
-- This needs to be specified manually because of universe level.
@@ -2,11 +2,6 @@
Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz, Jujian Zhang
-
-! This file was ported from Lean 3 source module topology.sheaves.abelian
-! leanprover-community/mathlib commit ac3ae212f394f508df43e37aa093722fa9b65d31
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Abelian.FunctorCategory
import Mathlib.CategoryTheory.Preadditive.AdditiveFunctor
@@ -14,6 +9,8 @@ import Mathlib.CategoryTheory.Preadditive.FunctorCategory
import Mathlib.CategoryTheory.Abelian.Transfer
import Mathlib.CategoryTheory.Sites.LeftExact
+#align_import topology.sheaves.abelian from "leanprover-community/mathlib"@"ac3ae212f394f508df43e37aa093722fa9b65d31"
+
/-!
# Category of sheaves is abelian
Let `C, D` be categories and `J` be a grothendieck topology on `C`, when `D` is abelian and
I forgot that we already had the fact that sheaves valued in an abelian category form an abelian category, so this PR removes some of the duplication.
Note: The existing file that had this is in Topology/Category/Sheaves
, and not in CategoryTheory/Sites
.
This should be moved at some point.
@@ -21,6 +21,8 @@ sheafification is possible in `C`, `Sheaf J D` is abelian as well (`sheafIsAbeli
Hence, `presheafToSheaf` is an additive functor (`presheafToSheaf_additive`).
+TODO: This file should be moved to `CategoryTheory/Sites`.
+
-/
The unported dependencies are