topology.sheaves.forget
⟷
Mathlib.Topology.Sheaves.Forget
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)
(last sync)
This reverts commit 13361559.
These are just too difficult to forward port as is because of the max u v =?= max u ?v
issue https://github.com/leanprover/lean4/issues/2297.
We have another candidate approach to this, using a new UnivLE
typeclass, and I would prefer if we investigated that without the pressure of the port at the same time.
This will delay @hrmacbeth's plans to define meromorphic functions, perhaps.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -42,13 +42,13 @@ namespace sheaf_condition
open sheaf_condition_equalizer_products
-universes v u₁ u₂ w
+universes v u₁ u₂
-variables {C : Type u₁} [category.{v} C] [has_limits_of_size.{w w} C]
-variables {D : Type u₂} [category.{v} D] [has_limits_of_size.{w w} D]
-variables (G : C ⥤ D) [preserves_limits_of_size.{w w} G]
-variables {X : Top.{w}} (F : presheaf C X)
-variables {ι : Type w} (U : ι → opens X)
+variables {C : Type u₁} [category.{v} C] [has_limits C]
+variables {D : Type u₂} [category.{v} D] [has_limits D]
+variables (G : C ⥤ D) [preserves_limits G]
+variables {X : Top.{v}} (F : presheaf C X)
+variables {ι : Type v} (U : ι → opens X)
local attribute [reducible] diagram left_res right_res
@@ -57,7 +57,7 @@ When `G` preserves limits, the sheaf condition diagram for `F` composed with `G`
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
def diagram_comp_preserves_limits :
- diagram F U ⋙ G ≅ diagram.{w} (F ⋙ G) U :=
+ diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :=
begin
fapply nat_iso.of_components,
rintro ⟨j⟩,
@@ -85,7 +85,7 @@ When `G` preserves limits, the image under `G` of the sheaf condition fork for `
is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
-/
-def map_cone_fork : G.map_cone (fork.{w} F U) ≅
+def map_cone_fork : G.map_cone (fork.{v} F U) ≅
(cones.postcompose (diagram_comp_preserves_limits G F U).inv).obj (fork (F ⋙ G) U) :=
cones.ext (iso.refl _) (λ j,
begin
@@ -102,17 +102,16 @@ end)
end sheaf_condition
-universes v u₁ u₂ w
+universes v u₁ u₂
open sheaf_condition sheaf_condition_equalizer_products
variables {C : Type u₁} [category.{v} C] {D : Type u₂} [category.{v} D]
variables (G : C ⥤ D)
variables [reflects_isomorphisms G]
-variables [has_limits_of_size.{w w} C] [has_limits_of_size.{w w} D]
- [preserves_limits_of_size.{w w} G]
+variables [has_limits C] [has_limits D] [preserves_limits G]
-variables {X : Top.{w}} (F : presheaf C X)
+variables {X : Top.{v}} (F : presheaf C X)
/--
If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
@@ -172,7 +171,7 @@ begin
-- image under `G` of the equalizer cone for the sheaf condition diagram.
let c := fork (F ⋙ G) U,
obtain ⟨hc⟩ := S U,
- let d := G.map_cone (equalizer.fork (left_res.{w} F U) (right_res F U)),
+ let d := G.map_cone (equalizer.fork (left_res.{v} F U) (right_res F U)),
letI := preserves_smallest_limits_of_preserves_limits G,
have hd : is_limit d := preserves_limit.preserves (limit.is_limit _),
-- Since both of these are limit cones
@@ -183,8 +182,7 @@ begin
-- introduced above.
let d' := (cones.postcompose (diagram_comp_preserves_limits G F U).hom).obj d,
have hd' : is_limit d' :=
- (is_limit.postcompose_hom_equiv
- (diagram_comp_preserves_limits.{v u₁ u₂ w} G F U : _) d).symm hd,
+ (is_limit.postcompose_hom_equiv (diagram_comp_preserves_limits G F U : _) d).symm hd,
-- Now everything works: we verify that `f` really is a morphism between these cones:
let f' : c ⟶ d' :=
fork.mk_hom (G.map f)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Necessary but sadly insufficient for the request at https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2319146.20sheaves.20on.20manifolds
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -42,13 +42,13 @@ namespace sheaf_condition
open sheaf_condition_equalizer_products
-universes v u₁ u₂
+universes v u₁ u₂ w
-variables {C : Type u₁} [category.{v} C] [has_limits C]
-variables {D : Type u₂} [category.{v} D] [has_limits D]
-variables (G : C ⥤ D) [preserves_limits G]
-variables {X : Top.{v}} (F : presheaf C X)
-variables {ι : Type v} (U : ι → opens X)
+variables {C : Type u₁} [category.{v} C] [has_limits_of_size.{w w} C]
+variables {D : Type u₂} [category.{v} D] [has_limits_of_size.{w w} D]
+variables (G : C ⥤ D) [preserves_limits_of_size.{w w} G]
+variables {X : Top.{w}} (F : presheaf C X)
+variables {ι : Type w} (U : ι → opens X)
local attribute [reducible] diagram left_res right_res
@@ -57,7 +57,7 @@ When `G` preserves limits, the sheaf condition diagram for `F` composed with `G`
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
def diagram_comp_preserves_limits :
- diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :=
+ diagram F U ⋙ G ≅ diagram.{w} (F ⋙ G) U :=
begin
fapply nat_iso.of_components,
rintro ⟨j⟩,
@@ -85,7 +85,7 @@ When `G` preserves limits, the image under `G` of the sheaf condition fork for `
is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
-/
-def map_cone_fork : G.map_cone (fork.{v} F U) ≅
+def map_cone_fork : G.map_cone (fork.{w} F U) ≅
(cones.postcompose (diagram_comp_preserves_limits G F U).inv).obj (fork (F ⋙ G) U) :=
cones.ext (iso.refl _) (λ j,
begin
@@ -102,16 +102,17 @@ end)
end sheaf_condition
-universes v u₁ u₂
+universes v u₁ u₂ w
open sheaf_condition sheaf_condition_equalizer_products
variables {C : Type u₁} [category.{v} C] {D : Type u₂} [category.{v} D]
variables (G : C ⥤ D)
variables [reflects_isomorphisms G]
-variables [has_limits C] [has_limits D] [preserves_limits G]
+variables [has_limits_of_size.{w w} C] [has_limits_of_size.{w w} D]
+ [preserves_limits_of_size.{w w} G]
-variables {X : Top.{v}} (F : presheaf C X)
+variables {X : Top.{w}} (F : presheaf C X)
/--
If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
@@ -171,7 +172,7 @@ begin
-- image under `G` of the equalizer cone for the sheaf condition diagram.
let c := fork (F ⋙ G) U,
obtain ⟨hc⟩ := S U,
- let d := G.map_cone (equalizer.fork (left_res.{v} F U) (right_res F U)),
+ let d := G.map_cone (equalizer.fork (left_res.{w} F U) (right_res F U)),
letI := preserves_smallest_limits_of_preserves_limits G,
have hd : is_limit d := preserves_limit.preserves (limit.is_limit _),
-- Since both of these are limit cones
@@ -182,7 +183,8 @@ begin
-- introduced above.
let d' := (cones.postcompose (diagram_comp_preserves_limits G F U).hom).obj d,
have hd' : is_limit d' :=
- (is_limit.postcompose_hom_equiv (diagram_comp_preserves_limits G F U : _) d).symm hd,
+ (is_limit.postcompose_hom_equiv
+ (diagram_comp_preserves_limits.{v u₁ u₂ w} G F U : _) d).symm hd,
-- Now everything works: we verify that `f` really is a morphism between these cones:
let f' : c ⟶ d' :=
fork.mk_hom (G.map f)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -117,7 +117,7 @@ variable {C : Type u₁} [Category.{v} C] {D : Type u₂} [Category.{v} D]
variable (G : C ⥤ D)
-variable [ReflectsIsomorphisms G]
+variable [CategoryTheory.Functor.ReflectsIsomorphisms G]
variable [HasLimits C] [HasLimits D] [PreservesLimits G]
mathlib commit https://github.com/leanprover-community/mathlib/commit/b1abe23ae96fef89ad30d9f4362c307f72a55010
@@ -62,7 +62,6 @@ variable {ι : Type v} (U : ι → Opens X)
attribute [local reducible] diagram left_res right_res
-#print TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits /-
/-- When `G` preserves limits, the sheaf condition diagram for `F` composed with `G` is
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
@@ -85,11 +84,9 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :
dsimp; simp
· ext; simp; dsimp; simp
#align Top.presheaf.sheaf_condition.diagram_comp_preserves_limits TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits
--/
attribute [local reducible] res
-#print TopCat.Presheaf.SheafCondition.mapConeFork /-
/-- When `G` preserves limits, the image under `G` of the sheaf condition fork for `F`
is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
@@ -109,7 +106,6 @@ def mapConeFork :
dsimp
simp only [limit.lift_π, fan.mk_π_app, ← G.map_comp, limit.lift_π_assoc, fan.mk_π_app]
#align Top.presheaf.sheaf_condition.map_cone_fork TopCat.Presheaf.SheafCondition.mapConeFork
--/
end SheafCondition
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Products
-import Mathbin.Topology.Sheaves.SheafCondition.EqualizerProducts
+import CategoryTheory.Limits.Preserves.Shapes.Products
+import Topology.Sheaves.SheafCondition.EqualizerProducts
#align_import topology.sheaves.forget from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module topology.sheaves.forget
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Products
import Mathbin.Topology.Sheaves.SheafCondition.EqualizerProducts
+#align_import topology.sheaves.forget from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
+
/-!
# Checking the sheaf condition on the underlying presheaf of types.
mathlib commit https://github.com/leanprover-community/mathlib/commit/5dc6092d09e5e489106865241986f7f2ad28d4c8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
! This file was ported from Lean 3 source module topology.sheaves.forget
-! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -51,17 +51,17 @@ namespace SheafCondition
open SheafConditionEqualizerProducts
-universe v u₁ u₂ w
+universe v u₁ u₂
-variable {C : Type u₁} [Category.{v} C] [HasLimitsOfSize.{w, w} C]
+variable {C : Type u₁} [Category.{v} C] [HasLimits C]
-variable {D : Type u₂} [Category.{v} D] [HasLimitsOfSize.{w, w} D]
+variable {D : Type u₂} [Category.{v} D] [HasLimits D]
-variable (G : C ⥤ D) [PreservesLimitsOfSize.{w, w} G]
+variable (G : C ⥤ D) [PreservesLimits G]
-variable {X : TopCat.{w}} (F : Presheaf C X)
+variable {X : TopCat.{v}} (F : Presheaf C X)
-variable {ι : Type w} (U : ι → Opens X)
+variable {ι : Type v} (U : ι → Opens X)
attribute [local reducible] diagram left_res right_res
@@ -69,7 +69,7 @@ attribute [local reducible] diagram left_res right_res
/-- When `G` preserves limits, the sheaf condition diagram for `F` composed with `G` is
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
-def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{w} (F ⋙ G) U :=
+def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :=
by
fapply nat_iso.of_components
rintro ⟨j⟩
@@ -98,7 +98,7 @@ is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
-/
def mapConeFork :
- G.mapCone (fork.{w} F U) ≅
+ G.mapCone (fork.{v} F U) ≅
(Cones.postcompose (diagramCompPreservesLimits G F U).inv).obj (fork (F ⋙ G) U) :=
Cones.ext (Iso.refl _) fun j => by
dsimp; simp [diagram_comp_preserves_limits]; cases j <;> dsimp
@@ -116,7 +116,7 @@ def mapConeFork :
end SheafCondition
-universe v u₁ u₂ w
+universe v u₁ u₂
open SheafCondition SheafConditionEqualizerProducts
@@ -126,9 +126,9 @@ variable (G : C ⥤ D)
variable [ReflectsIsomorphisms G]
-variable [HasLimitsOfSize.{w, w} C] [HasLimitsOfSize.{w, w} D] [PreservesLimitsOfSize.{w, w} G]
+variable [HasLimits C] [HasLimits D] [PreservesLimits G]
-variable {X : TopCat.{w}} (F : Presheaf C X)
+variable {X : TopCat.{v}} (F : Presheaf C X)
#print TopCat.Presheaf.isSheaf_iff_isSheaf_comp /-
/-- If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
@@ -187,7 +187,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- image under `G` of the equalizer cone for the sheaf condition diagram.
let c := fork (F ⋙ G) U
obtain ⟨hc⟩ := S U
- let d := G.map_cone (equalizer.fork (leftRes.{w} F U) (right_res F U))
+ let d := G.map_cone (equalizer.fork (leftRes.{v} F U) (right_res F U))
letI := preserves_smallest_limits_of_preserves_limits G
have hd : is_limit d := preserves_limit.preserves (limit.is_limit _)
-- Since both of these are limit cones
@@ -198,9 +198,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- introduced above.
let d' := (cones.postcompose (diagram_comp_preserves_limits G F U).Hom).obj d
have hd' : is_limit d' :=
- (is_limit.postcompose_hom_equiv (diagramCompPreservesLimits.{v, u₁, u₂, w} G F U : _)
- d).symm
- hd
+ (is_limit.postcompose_hom_equiv (diagram_comp_preserves_limits G F U : _) d).symm hd
-- Now everything works: we verify that `f` really is a morphism between these cones:
let f' : c ⟶ d' :=
fork.mk_hom (G.map f)
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -65,6 +65,7 @@ variable {ι : Type w} (U : ι → Opens X)
attribute [local reducible] diagram left_res right_res
+#print TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits /-
/-- When `G` preserves limits, the sheaf condition diagram for `F` composed with `G` is
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
@@ -87,9 +88,11 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{w} (F ⋙ G) U :
dsimp; simp
· ext; simp; dsimp; simp
#align Top.presheaf.sheaf_condition.diagram_comp_preserves_limits TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits
+-/
attribute [local reducible] res
+#print TopCat.Presheaf.SheafCondition.mapConeFork /-
/-- When `G` preserves limits, the image under `G` of the sheaf condition fork for `F`
is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
@@ -109,6 +112,7 @@ def mapConeFork :
dsimp
simp only [limit.lift_π, fan.mk_π_app, ← G.map_comp, limit.lift_π_assoc, fan.mk_π_app]
#align Top.presheaf.sheaf_condition.map_cone_fork TopCat.Presheaf.SheafCondition.mapConeFork
+-/
end SheafCondition
@@ -126,6 +130,7 @@ variable [HasLimitsOfSize.{w, w} C] [HasLimitsOfSize.{w, w} D] [PreservesLimitsO
variable {X : TopCat.{w}} (F : Presheaf C X)
+#print TopCat.Presheaf.isSheaf_iff_isSheaf_comp /-
/-- If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
(we assume all limits exist in both `C` and `D`),
then checking the sheaf condition for a presheaf `F : presheaf C X`
@@ -214,6 +219,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- so we're done!
exact is_iso.of_iso ((cones.forget _).mapIso (as_iso f'))
#align Top.presheaf.is_sheaf_iff_is_sheaf_comp TopCat.Presheaf.isSheaf_iff_isSheaf_comp
+-/
/-!
As an example, we now have everything we need to check the sheaf condition
mathlib commit https://github.com/leanprover-community/mathlib/commit/13361559d66b84f80b6d5a1c4a26aa5054766725
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
! This file was ported from Lean 3 source module topology.sheaves.forget
-! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
+! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -51,25 +51,24 @@ namespace SheafCondition
open SheafConditionEqualizerProducts
-universe v u₁ u₂
+universe v u₁ u₂ w
-variable {C : Type u₁} [Category.{v} C] [HasLimits C]
+variable {C : Type u₁} [Category.{v} C] [HasLimitsOfSize.{w, w} C]
-variable {D : Type u₂} [Category.{v} D] [HasLimits D]
+variable {D : Type u₂} [Category.{v} D] [HasLimitsOfSize.{w, w} D]
-variable (G : C ⥤ D) [PreservesLimits G]
+variable (G : C ⥤ D) [PreservesLimitsOfSize.{w, w} G]
-variable {X : TopCat.{v}} (F : Presheaf C X)
+variable {X : TopCat.{w}} (F : Presheaf C X)
-variable {ι : Type v} (U : ι → Opens X)
+variable {ι : Type w} (U : ι → Opens X)
attribute [local reducible] diagram left_res right_res
-#print TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits /-
/-- When `G` preserves limits, the sheaf condition diagram for `F` composed with `G` is
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
-def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :=
+def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{w} (F ⋙ G) U :=
by
fapply nat_iso.of_components
rintro ⟨j⟩
@@ -88,7 +87,6 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :
dsimp; simp
· ext; simp; dsimp; simp
#align Top.presheaf.sheaf_condition.diagram_comp_preserves_limits TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits
--/
attribute [local reducible] res
@@ -97,7 +95,7 @@ is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
-/
def mapConeFork :
- G.mapCone (fork.{v} F U) ≅
+ G.mapCone (fork.{w} F U) ≅
(Cones.postcompose (diagramCompPreservesLimits G F U).inv).obj (fork (F ⋙ G) U) :=
Cones.ext (Iso.refl _) fun j => by
dsimp; simp [diagram_comp_preserves_limits]; cases j <;> dsimp
@@ -114,7 +112,7 @@ def mapConeFork :
end SheafCondition
-universe v u₁ u₂
+universe v u₁ u₂ w
open SheafCondition SheafConditionEqualizerProducts
@@ -124,11 +122,10 @@ variable (G : C ⥤ D)
variable [ReflectsIsomorphisms G]
-variable [HasLimits C] [HasLimits D] [PreservesLimits G]
+variable [HasLimitsOfSize.{w, w} C] [HasLimitsOfSize.{w, w} D] [PreservesLimitsOfSize.{w, w} G]
-variable {X : TopCat.{v}} (F : Presheaf C X)
+variable {X : TopCat.{w}} (F : Presheaf C X)
-#print TopCat.Presheaf.isSheaf_iff_isSheaf_comp /-
/-- If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
(we assume all limits exist in both `C` and `D`),
then checking the sheaf condition for a presheaf `F : presheaf C X`
@@ -185,7 +182,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- image under `G` of the equalizer cone for the sheaf condition diagram.
let c := fork (F ⋙ G) U
obtain ⟨hc⟩ := S U
- let d := G.map_cone (equalizer.fork (leftRes.{v} F U) (right_res F U))
+ let d := G.map_cone (equalizer.fork (leftRes.{w} F U) (right_res F U))
letI := preserves_smallest_limits_of_preserves_limits G
have hd : is_limit d := preserves_limit.preserves (limit.is_limit _)
-- Since both of these are limit cones
@@ -196,7 +193,9 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- introduced above.
let d' := (cones.postcompose (diagram_comp_preserves_limits G F U).Hom).obj d
have hd' : is_limit d' :=
- (is_limit.postcompose_hom_equiv (diagram_comp_preserves_limits G F U : _) d).symm hd
+ (is_limit.postcompose_hom_equiv (diagramCompPreservesLimits.{v, u₁, u₂, w} G F U : _)
+ d).symm
+ hd
-- Now everything works: we verify that `f` really is a morphism between these cones:
let f' : c ⟶ d' :=
fork.mk_hom (G.map f)
@@ -215,7 +214,6 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- so we're done!
exact is_iso.of_iso ((cones.forget _).mapIso (as_iso f'))
#align Top.presheaf.is_sheaf_iff_is_sheaf_comp TopCat.Presheaf.isSheaf_iff_isSheaf_comp
--/
/-!
As an example, we now have everything we need to check the sheaf condition
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
! This file was ported from Lean 3 source module topology.sheaves.forget
-! leanprover-community/mathlib commit 85d6221d32c37e68f05b2e42cde6cee658dae5e9
+! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Topology.Sheaves.SheafCondition.EqualizerProducts
/-!
# Checking the sheaf condition on the underlying presheaf of types.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
(we assume all limits exist in both `C` and `D`),
then checking the sheaf condition for a presheaf `F : presheaf C X`
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -89,9 +89,6 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :
attribute [local reducible] res
-/- warning: Top.presheaf.sheaf_condition.map_cone_fork -> TopCat.Presheaf.SheafCondition.mapConeFork is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.map_cone_fork TopCat.Presheaf.SheafCondition.mapConeForkₓ'. -/
/-- When `G` preserves limits, the image under `G` of the sheaf condition fork for `F`
is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -73,25 +73,17 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :
exact preserves_product.iso _ _
exact preserves_product.iso _ _
rintro ⟨⟩ ⟨⟩ ⟨⟩
- · ext
- simp
- dsimp
- simp
+ · ext; simp; dsimp; simp
-- non-terminal `simp`, but `squeeze_simp` fails
· ext
simp only [limit.lift_π, functor.comp_map, map_lift_pi_comparison, fan.mk_π_app,
preserves_product.iso_hom, parallel_pair_map_left, functor.map_comp, category.assoc]
- dsimp
- simp
+ dsimp; simp
· ext
simp only [limit.lift_π, functor.comp_map, parallel_pair_map_right, fan.mk_π_app,
preserves_product.iso_hom, map_lift_pi_comparison, functor.map_comp, category.assoc]
- dsimp
- simp
- · ext
- simp
- dsimp
- simp
+ dsimp; simp
+ · ext; simp; dsimp; simp
#align Top.presheaf.sheaf_condition.diagram_comp_preserves_limits TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits
-/
@@ -111,9 +103,7 @@ def mapConeFork :
dsimp; simp [diagram_comp_preserves_limits]; cases j <;> dsimp
· rw [iso.eq_comp_inv]
ext
- simp
- dsimp
- simp
+ simp; dsimp; simp
· rw [iso.eq_comp_inv]
ext
simp
@@ -188,9 +178,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
apply iso.symm
fapply cones.ext
exact as_iso f
- rintro ⟨_ | _⟩ <;>
- · dsimp [f]
- simp
+ rintro ⟨_ | _⟩ <;> · dsimp [f]; simp
· -- Returning to the task of shwoing that `G.map f` is an isomorphism,
-- we note that `G.map f` is almost but not quite (see below) a morphism
-- from the sheaf condition cone for `F ⋙ G` to the
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -62,6 +62,7 @@ variable {ι : Type v} (U : ι → Opens X)
attribute [local reducible] diagram left_res right_res
+#print TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits /-
/-- When `G` preserves limits, the sheaf condition diagram for `F` composed with `G` is
naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
-/
@@ -92,9 +93,13 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :
dsimp
simp
#align Top.presheaf.sheaf_condition.diagram_comp_preserves_limits TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits
+-/
attribute [local reducible] res
+/- warning: Top.presheaf.sheaf_condition.map_cone_fork -> TopCat.Presheaf.SheafCondition.mapConeFork is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.map_cone_fork TopCat.Presheaf.SheafCondition.mapConeForkₓ'. -/
/-- When `G` preserves limits, the image under `G` of the sheaf condition fork for `F`
is the sheaf condition fork for `F ⋙ G`,
postcomposed with the inverse of the natural isomorphism `diagram_comp_preserves_limits`.
@@ -133,6 +138,7 @@ variable [HasLimits C] [HasLimits D] [PreservesLimits G]
variable {X : TopCat.{v}} (F : Presheaf C X)
+#print TopCat.Presheaf.isSheaf_iff_isSheaf_comp /-
/-- If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
(we assume all limits exist in both `C` and `D`),
then checking the sheaf condition for a presheaf `F : presheaf C X`
@@ -221,6 +227,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
-- so we're done!
exact is_iso.of_iso ((cones.forget _).mapIso (as_iso f'))
#align Top.presheaf.is_sheaf_iff_is_sheaf_comp TopCat.Presheaf.isSheaf_iff_isSheaf_comp
+-/
/-!
As an example, we now have everything we need to check the sheaf condition
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -50,12 +50,12 @@ See <https://stacks.math.columbia.edu/tag/0073>.
In fact we prove a stronger version with arbitrary target category.
-/
theorem isSheaf_iff_isSheaf_comp' {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
- (G : C ⥤ D) [ReflectsIsomorphisms G] [HasLimitsOfSize.{v, v} C] [PreservesLimitsOfSize.{v, v} G]
+ (G : C ⥤ D) [G.ReflectsIsomorphisms] [HasLimitsOfSize.{v, v} C] [PreservesLimitsOfSize.{v, v} G]
{X : TopCat.{v}} (F : Presheaf C X) : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F ⋙ G) :=
Presheaf.isSheaf_iff_isSheaf_comp _ F G
theorem isSheaf_iff_isSheaf_comp {C : Type u₁} [Category.{v} C] {D : Type u₂} [Category.{v} D]
- (G : C ⥤ D) [ReflectsIsomorphisms G] [HasLimits C] [PreservesLimits G]
+ (G : C ⥤ D) [G.ReflectsIsomorphisms] [HasLimits C] [PreservesLimits G]
{X : TopCat.{v}} (F : Presheaf C X) : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F ⋙ G) :=
isSheaf_iff_isSheaf_comp' G F
set_option linter.uppercaseLean3 false in
Add a criterion isLimit_iff
for a cone to be a limit in Limits/Types.lean.
Use the criterion to show the equivalence between the UniqueGluing and PairwiseIntersection sheaf conditions without going through EqualizerProducts, thereby generalize the universes.
Remove theorems/def that are now unnecessary. (cc @justus-springer)
Generalize isSheaf_iff_isSheaf_forget
for sheaves on sites using isSheaf_iff_isLimit
; use it to prove and generalize the result on topological spaces, removing a large chunk of code.
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Products
-import Mathlib.Topology.Sheaves.SheafCondition.EqualizerProducts
+import Mathlib.Algebra.Category.Ring.Limits
+import Mathlib.Topology.Sheaves.Sheaf
#align_import topology.sheaves.forget from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
@@ -12,7 +12,7 @@ import Mathlib.Topology.Sheaves.SheafCondition.EqualizerProducts
# Checking the sheaf condition on the underlying presheaf of types.
If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
-(we assume all limits exist in both `C` and `D`),
+(we assume all limits exist in `C`),
then checking the sheaf condition for a presheaf `F : presheaf C X`
is equivalent to checking the sheaf condition for `F ⋙ G`.
@@ -26,124 +26,16 @@ to check it on the underlying sheaf of types.
* https://stacks.math.columbia.edu/tag/0073
-/
+universe v v₁ v₂ u₁ u₂
noncomputable section
-open CategoryTheory
+open CategoryTheory Limits
-open CategoryTheory.Limits
-
-open TopologicalSpace
-
-open Opposite
-
-namespace TopCat
-
-namespace Presheaf
-
-namespace SheafCondition
-
-open SheafConditionEqualizerProducts
-
-universe v u₁ u₂
-
-variable {C : Type u₁} [Category.{v} C] [HasLimits C]
-
-variable {D : Type u₂} [Category.{v} D] [HasLimits D]
-
-variable (G : C ⥤ D) [PreservesLimits G]
-
-variable {X : TopCat.{v}} (F : Presheaf C X)
-
-variable {ι : Type v} (U : ι → Opens X)
-
--- Porting note : Lean4 does not support this
--- attribute [local reducible] diagram left_res right_res
-
-/-- When `G` preserves limits, the sheaf condition diagram for `F` composed with `G` is
-naturally isomorphic to the sheaf condition diagram for `F ⋙ G`.
--/
-def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U := by
- fapply NatIso.ofComponents
- rintro ⟨j⟩
- exact PreservesProduct.iso _ _
- exact PreservesProduct.iso _ _
- rintro ⟨⟩ ⟨⟩ ⟨⟩
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext (fun j => ?_)
- simp
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext (fun j => ?_)
- -- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
- dsimp [diagram, leftRes, rightRes]
- simp [limit.lift_π, Functor.comp_map, map_lift_piComparison, Fan.mk_π_app,
- PreservesProduct.iso_hom, parallelPair_map_left, Functor.map_comp, Category.assoc]
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext (fun j => ?_)
- -- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
- dsimp [diagram, leftRes, rightRes]
- simp [limit.lift_π, Functor.comp_map, map_lift_piComparison, Fan.mk_π_app,
- PreservesProduct.iso_hom, parallelPair_map_left, Functor.map_comp, Category.assoc]
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext (fun j => ?_)
- simp [diagram, leftRes, rightRes]
-set_option linter.uppercaseLean3 false in
-#align Top.presheaf.sheaf_condition.diagram_comp_preserves_limits TopCat.Presheaf.SheafCondition.diagramCompPreservesLimits
-
--- attribute [local reducible] res
-
-/-- When `G` preserves limits, the image under `G` of the sheaf condition fork for `F`
-is the sheaf condition fork for `F ⋙ G`,
-postcomposed with the inverse of the natural isomorphism `diagramCompPreservesLimits`.
--/
-def mapConeFork :
- G.mapCone (fork.{v} F U) ≅
- (Cones.postcompose (diagramCompPreservesLimits G F U).inv).obj (fork (F ⋙ G) U) :=
- Cones.ext (Iso.refl _) fun j => by
- dsimp; simp [diagramCompPreservesLimits]; cases j <;> dsimp
- · rw [Iso.eq_comp_inv]
- -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext (fun j => ?_)
- -- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
- simp [diagram, leftRes, rightRes, res]
- · rw [Iso.eq_comp_inv]
- -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext (fun j => ?_)
- -- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
- dsimp [diagram, leftRes, rightRes, res]
- -- Porting note : there used to be a non-terminal `simp` for `squeeze_simp` did not work,
- -- however, `simp?` works fine now, but in both mathlib3 and mathlib4, two `simp`s are
- -- required to close goal
- simp only [Functor.map_comp, Category.assoc, map_lift_piComparison, limit.lift_π, Fan.mk_pt,
- Fan.mk_π_app, limit.lift_π_assoc, Discrete.functor_obj]
- simp only [limit.lift_π, Fan.mk_π_app, ← G.map_comp, limit.lift_π_assoc, Fan.mk_π_app]
-set_option linter.uppercaseLean3 false in
-#align Top.presheaf.sheaf_condition.map_cone_fork TopCat.Presheaf.SheafCondition.mapConeFork
-
-end SheafCondition
-
-universe v u₁ u₂
-
-open SheafCondition SheafConditionEqualizerProducts
-
-variable {C : Type u₁} [Category.{v} C] {D : Type u₂} [Category.{v} D]
-
-variable (G : C ⥤ D)
-
-variable [ReflectsIsomorphisms G]
-
-variable [HasLimits C] [HasLimits D] [PreservesLimits G]
-
-variable {X : TopCat.{v}} (F : Presheaf C X)
+namespace TopCat.Presheaf
/-- If `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits
-(we assume all limits exist in both `C` and `D`),
+(we assume all limits exist in `C`),
then checking the sheaf condition for a presheaf `F : presheaf C X`
is equivalent to checking the sheaf condition for `F ⋙ G`.
@@ -155,78 +47,17 @@ Then to check the sheaf condition it suffices to check it on the underlying shea
Another useful example is the forgetful functor `TopCommRing ⥤ Top`.
See <https://stacks.math.columbia.edu/tag/0073>.
-In fact we prove a stronger version with arbitrary complete target category.
+In fact we prove a stronger version with arbitrary target category.
-/
-theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F ⋙ G) := by
- rw [Presheaf.isSheaf_iff_isSheafEqualizerProducts,
- Presheaf.isSheaf_iff_isSheafEqualizerProducts]
- constructor
- · intro S ι U
- -- We have that the sheaf condition fork for `F` is a limit fork,
- obtain ⟨t₁⟩ := S U
- -- and since `G` preserves limits, the image under `G` of this fork is a limit fork too.
- letI := preservesSmallestLimitsOfPreservesLimits G
- have t₂ := @PreservesLimit.preserves _ _ _ _ _ _ _ G _ _ t₁
- -- As we established above, that image is just the sheaf condition fork
- -- for `F ⋙ G` postcomposed with some natural isomorphism,
- have t₃ := IsLimit.ofIsoLimit t₂ (mapConeFork G F U)
- -- and as postcomposing by a natural isomorphism preserves limit cones,
- have t₄ := IsLimit.postcomposeInvEquiv _ _ t₃
- -- we have our desired conclusion.
- exact ⟨t₄⟩
- · intro S ι U
- refine' ⟨_⟩
- -- Let `f` be the universal morphism from `F.obj U` to the equalizer
- -- of the sheaf condition fork, whatever it is.
- -- Our goal is to show that this is an isomorphism.
- let f := equalizer.lift _ (w F U)
- -- If we can do that,
- suffices IsIso (G.map f) by
- skip
- -- we have that `f` itself is an isomorphism, since `G` reflects isomorphisms
- haveI : IsIso f := isIso_of_reflects_iso f G
- -- TODO package this up as a result elsewhere:
- apply IsLimit.ofIsoLimit (limit.isLimit _)
- apply Iso.symm
- fapply Cones.ext
- exact asIso f
- rintro ⟨_ | _⟩ <;>
- · simp
- · -- Returning to the task of showing that `G.map f` is an isomorphism,
- -- we note that `G.map f` is almost but not quite (see below) a morphism
- -- from the sheaf condition cone for `F ⋙ G` to the
- -- image under `G` of the equalizer cone for the sheaf condition diagram.
- let c := fork (F ⋙ G) U
- obtain ⟨hc⟩ := S U
- let d := G.mapCone (equalizer.fork (leftRes.{v} F U) (rightRes F U))
- letI := preservesSmallestLimitsOfPreservesLimits G
- have hd : IsLimit d := PreservesLimit.preserves (limit.isLimit _)
- -- Since both of these are limit cones
- -- (`c` by our hypothesis `S`, and `d` because `G` preserves limits),
- -- we hope to be able to conclude that `f` is an isomorphism.
- -- We say "not quite" above because `c` and `d` don't quite have the same shape:
- -- we need to postcompose by the natural isomorphism `diagramCompPreservesLimits`
- -- introduced above.
- let d' := (Cones.postcompose (diagramCompPreservesLimits G F U).hom).obj d
- have hd' : IsLimit d' :=
- (IsLimit.postcomposeHomEquiv (diagramCompPreservesLimits G F U : _) d).symm hd
- -- Now everything works: we verify that `f` really is a morphism between these cones:
- let f' : c ⟶ d' := Fork.mkHom (G.map f) (by
- dsimp only [diagramCompPreservesLimits, res]
- dsimp only [Fork.ι]
- -- Porting note : `ext` can't see `limit.hom_ext` applies here:
- -- See https://github.com/leanprover-community/mathlib4/issues/5229
- refine limit.hom_ext fun j => ?_
- dsimp
- simp only [Category.assoc, ← Functor.map_comp_assoc, equalizer.lift_ι,
- map_lift_piComparison_assoc]
- dsimp [res])
- -- conclude that it is an isomorphism,
- -- just because it's a morphism between two limit cones.
- haveI : IsIso f' := IsLimit.hom_isIso hc hd' f'
- -- A cone morphism is an isomorphism exactly if the morphism between the cone points is,
- -- so we're done!
- exact IsIso.of_iso ((Cones.forget _).mapIso (asIso f'))
+theorem isSheaf_iff_isSheaf_comp' {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
+ (G : C ⥤ D) [ReflectsIsomorphisms G] [HasLimitsOfSize.{v, v} C] [PreservesLimitsOfSize.{v, v} G]
+ {X : TopCat.{v}} (F : Presheaf C X) : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F ⋙ G) :=
+ Presheaf.isSheaf_iff_isSheaf_comp _ F G
+
+theorem isSheaf_iff_isSheaf_comp {C : Type u₁} [Category.{v} C] {D : Type u₂} [Category.{v} D]
+ (G : C ⥤ D) [ReflectsIsomorphisms G] [HasLimits C] [PreservesLimits G]
+ {X : TopCat.{v}} (F : Presheaf C X) : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F ⋙ G) :=
+ isSheaf_iff_isSheaf_comp' G F
set_option linter.uppercaseLean3 false in
#align Top.presheaf.is_sheaf_iff_is_sheaf_comp TopCat.Presheaf.isSheaf_iff_isSheaf_comp
@@ -246,6 +77,4 @@ example (X : TopCat) (F : Presheaf CommRingCat X)
F.IsSheaf :=
(isSheaf_iff_isSheaf_comp (forget CommRingCat) F).mpr h
-end Presheaf
-
-end TopCat
+end TopCat.Presheaf
I left the example in the docs, so that it shows up in doc-gen, and I duplicated it outside of the docs, so that it does not rot.
@@ -234,14 +234,17 @@ set_option linter.uppercaseLean3 false in
As an example, we now have everything we need to check the sheaf condition
for a presheaf of commutative rings, merely by checking the sheaf condition
for the underlying sheaf of types.
-```
-import algebra.category.Ring.limits
-example (X : Top) (F : presheaf CommRing X) (h : presheaf.is_sheaf (F ⋙ (forget CommRing))) :
- F.is_sheaf :=
-(is_sheaf_iff_is_sheaf_comp (forget CommRing) F).mpr h
+```lean
+example (X : TopCat) (F : Presheaf CommRingCat X)
+ (h : Presheaf.IsSheaf (F ⋙ (forget CommRingCat))) :
+ F.IsSheaf :=
+(isSheaf_iff_isSheaf_comp (forget CommRingCat) F).mpr h
```
-/
-
+example (X : TopCat) (F : Presheaf CommRingCat X)
+ (h : Presheaf.IsSheaf (F ⋙ (forget CommRingCat))) :
+ F.IsSheaf :=
+(isSheaf_iff_isSheaf_comp (forget CommRingCat) F).mpr h
end Presheaf
@@ -2,15 +2,12 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module topology.sheaves.forget
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Products
import Mathlib.Topology.Sheaves.SheafCondition.EqualizerProducts
+#align_import topology.sheaves.forget from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
+
/-!
# Checking the sheaf condition on the underlying presheaf of types.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
! This file was ported from Lean 3 source module topology.sheaves.forget
-! leanprover-community/mathlib commit 85d6221d32c37e68f05b2e42cde6cee658dae5e9
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -72,22 +72,26 @@ def diagramCompPreservesLimits : diagram F U ⋙ G ≅ diagram.{v} (F ⋙ G) U :
exact PreservesProduct.iso _ _
exact PreservesProduct.iso _ _
rintro ⟨⟩ ⟨⟩ ⟨⟩
- · -- Porting note : can't use `limit.hom_ext` as an `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun j => ?_)
simp
- · -- Porting note : can't use `limit.hom_ext` as an `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun j => ?_)
-- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
dsimp [diagram, leftRes, rightRes]
simp [limit.lift_π, Functor.comp_map, map_lift_piComparison, Fan.mk_π_app,
PreservesProduct.iso_hom, parallelPair_map_left, Functor.map_comp, Category.assoc]
- · -- Porting note : can't use `limit.hom_ext` as an `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun j => ?_)
-- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
dsimp [diagram, leftRes, rightRes]
simp [limit.lift_π, Functor.comp_map, map_lift_piComparison, Fan.mk_π_app,
PreservesProduct.iso_hom, parallelPair_map_left, Functor.map_comp, Category.assoc]
- · -- Porting note : can't use `limit.hom_ext` as an `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun j => ?_)
simp [diagram, leftRes, rightRes]
set_option linter.uppercaseLean3 false in
@@ -105,12 +109,14 @@ def mapConeFork :
Cones.ext (Iso.refl _) fun j => by
dsimp; simp [diagramCompPreservesLimits]; cases j <;> dsimp
· rw [Iso.eq_comp_inv]
- -- Porting note : can't use `limit.hom_ext` as an `ext` lemma
+ -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun j => ?_)
-- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
simp [diagram, leftRes, rightRes, res]
· rw [Iso.eq_comp_inv]
- -- Porting note : can't use `limit.hom_ext` as an `ext` lemma
+ -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun j => ?_)
-- Porting note : `attribute [local reducible]` doesn't work, this is its replacement
dsimp [diagram, leftRes, rightRes, res]
@@ -211,6 +217,8 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
let f' : c ⟶ d' := Fork.mkHom (G.map f) (by
dsimp only [diagramCompPreservesLimits, res]
dsimp only [Fork.ι]
+ -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun j => ?_
dsimp
simp only [Category.assoc, ← Functor.map_comp_assoc, equalizer.lift_ι,
@@ -189,7 +189,7 @@ theorem isSheaf_iff_isSheaf_comp : Presheaf.IsSheaf F ↔ Presheaf.IsSheaf (F
exact asIso f
rintro ⟨_ | _⟩ <;>
· simp
- · -- Returning to the task of shwoing that `G.map f` is an isomorphism,
+ · -- Returning to the task of showing that `G.map f` is an isomorphism,
-- we note that `G.map f` is almost but not quite (see below) a morphism
-- from the sheaf condition cone for `F ⋙ G` to the
-- image under `G` of the equalizer cone for the sheaf condition diagram.
The unported dependencies are