topology.sheaves.forgetMathlib.Topology.Sheaves.Forget

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

chore(topology/sheaves): revert universe generalizations from #19153 (#19230)

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>

Diff
@@ -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)

chore(topology/sheaves/*): universe generalizations (#19153)

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>

Diff
@@ -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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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]
 
Diff
@@ -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
 
Diff
@@ -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"
 
Diff
@@ -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.
 
Diff
@@ -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)
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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`
Diff
@@ -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`.
Diff
@@ -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
Diff
@@ -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

Changes in mathlib4

mathlib3
mathlib4
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

These notions on functors are now Functor.Full, Functor.Faithful, Functor.EssSurj, Functor.IsEquivalence, Functor.ReflectsIsomorphisms. Deprecated aliases are introduced for the previous names.

Diff
@@ -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
feat: universe generalizations in UniqueGluing and Forget (#7654)
  • 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>

Diff
@@ -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
chore(Topology/Sheaves/Forget): port an example from a comment (#6796)

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.

Diff
@@ -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
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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.
 
chore: update SHAs after #19153 was reverted (#5712)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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.
 -/
feat: more consistent use of ext, and updating porting notes. (#5242)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -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_ι,
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -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.
feat: port Topology.Sheaves.Forget (#4407)

Dependencies 11 + 766

767 files ported (98.6%)
313821 lines ported (98.3%)
Show graph

The unported dependencies are